@gengage/assistant-fe 0.2.4 → 0.2.5

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 (54) hide show
  1. package/dist/chat/api.d.ts.map +1 -1
  2. package/dist/chat/components/ChatDrawer.d.ts.map +1 -1
  3. package/dist/chat/components/GroundingReviewCard.d.ts.map +1 -1
  4. package/dist/chat/index.d.ts.map +1 -1
  5. package/dist/chat.cjs +1 -1
  6. package/dist/chat.iife.js +13 -13
  7. package/dist/chat.iife.js.map +1 -1
  8. package/dist/chat.js +2 -2
  9. package/dist/common/action-router.d.ts.map +1 -1
  10. package/dist/common/ga-datalayer.d.ts.map +1 -1
  11. package/dist/common.cjs +1 -1
  12. package/dist/common.js +5 -5
  13. package/dist/{index-DjdiNtXX.cjs → index-B6xRdkMq.cjs} +2 -2
  14. package/dist/{index-DjdiNtXX.cjs.map → index-B6xRdkMq.cjs.map} +1 -1
  15. package/dist/{index-hUs4nTXp.js → index-BsvmfVa1.js} +3 -3
  16. package/dist/{index-hUs4nTXp.js.map → index-BsvmfVa1.js.map} +1 -1
  17. package/dist/index-BzCc2DCm.cjs +13 -0
  18. package/dist/index-BzCc2DCm.cjs.map +1 -0
  19. package/dist/{index-Cdmhc_35.js → index-D5UPIXIA.js} +795 -747
  20. package/dist/index-D5UPIXIA.js.map +1 -0
  21. package/dist/index.cjs +1 -1
  22. package/dist/index.js +3 -3
  23. package/dist/native.cjs +1 -1
  24. package/dist/native.iife.js +13 -13
  25. package/dist/native.iife.js.map +1 -1
  26. package/dist/native.js +1 -1
  27. package/dist/qna/index.d.ts.map +1 -1
  28. package/dist/qna.cjs +1 -1
  29. package/dist/qna.cjs.map +1 -1
  30. package/dist/qna.iife.js +6 -6
  31. package/dist/qna.iife.js.map +1 -1
  32. package/dist/qna.js +8 -8
  33. package/dist/qna.js.map +1 -1
  34. package/dist/{schemas-DXvpS-Yg.cjs → schemas-CNzyBhf7.cjs} +8 -8
  35. package/dist/schemas-CNzyBhf7.cjs.map +1 -0
  36. package/dist/{schemas-C7h8aelU.js → schemas-Fiaobs4L.js} +305 -307
  37. package/dist/schemas-Fiaobs4L.js.map +1 -0
  38. package/dist/simrel/index.d.ts.map +1 -1
  39. package/dist/simrel/locales/en.d.ts.map +1 -1
  40. package/dist/simrel/locales/tr.d.ts.map +1 -1
  41. package/dist/simrel/types.d.ts +4 -0
  42. package/dist/simrel/types.d.ts.map +1 -1
  43. package/dist/simrel.cjs +1 -1
  44. package/dist/simrel.cjs.map +1 -1
  45. package/dist/simrel.iife.js +5 -5
  46. package/dist/simrel.iife.js.map +1 -1
  47. package/dist/simrel.js +29 -25
  48. package/dist/simrel.js.map +1 -1
  49. package/package.json +1 -1
  50. package/dist/index-BQVIyEOM.cjs +0 -13
  51. package/dist/index-BQVIyEOM.cjs.map +0 -1
  52. package/dist/index-Cdmhc_35.js.map +0 -1
  53. package/dist/schemas-C7h8aelU.js.map +0 -1
  54. package/dist/schemas-DXvpS-Yg.cjs.map +0 -1
@@ -1,12 +1,12 @@
1
- import { D as Ze, E as $, b as et, c as tt, a as at, v as Z, x as te, F as V, r as nt, o as z, s as v, f as O, G as pe, d as fe, u as we, y as se, e as ae, _ as De, B as it, H as ot, j as Q, t as rt, i as st, I as ct, J as lt, g as gt, K as dt, L as pt, M as Le, m as ht, N as ut, A as mt, z as ft, n as bt, O as vt, P as Pe, h as xt, Q as wt, R as _t, l as yt, S as kt, T as Ct, U as Et, V as St, W as Tt, X as Lt } from "./schemas-C7h8aelU.js";
2
- import { f as j, c as _e, a as re, b as He, e as Pt, d as Ue } from "./quantity-stepper-CjY_cpgJ.js";
3
- function he() {
1
+ import { D as et, E as W, b as tt, c as at, a as nt, v as ee, x as ae, F as V, r as it, o as z, s as v, f as O, G as he, d as fe, u as _e, y as se, e as ne, _ as He, B as ot, H as rt, j as J, t as st, i as ct, I as lt, J as gt, g as dt, K as ht, L as pt, M as Le, m as ut, N as mt, A as ft, C as bt, z as vt, n as xt, O as _t, P as Pe, h as wt, Q as yt, R as kt, l as Ct, S as Et, T as St, U as Tt, V as Lt, W as Pt, X as At } from "./schemas-Fiaobs4L.js";
2
+ import { f as j, c as we, a as re, b as Ue, e as It, d as qe } from "./quantity-stepper-CjY_cpgJ.js";
3
+ function pe() {
4
4
  const o = Date.now(), e = new Uint8Array(16);
5
5
  crypto.getRandomValues(e), e[0] = o / 2 ** 40 & 255, e[1] = o / 2 ** 32 & 255, e[2] = o / 2 ** 24 & 255, e[3] = o / 2 ** 16 & 255, e[4] = o / 2 ** 8 & 255, e[5] = o & 255, e[6] = e[6] & 15 | 112, e[8] = e[8] & 63 | 128;
6
6
  const t = Array.from(e, (a) => a.toString(16).padStart(2, "0")).join("");
7
7
  return `${t.slice(0, 8)}-${t.slice(8, 12)}-${t.slice(12, 16)}-${t.slice(16, 20)}-${t.slice(20)}`;
8
8
  }
9
- class At {
9
+ class Nt {
10
10
  constructor(e) {
11
11
  this._handlers = /* @__PURE__ */ new Map(), this._destroyed = !1, this._namespace = e.namespace, this._allowedOrigins = e.allowedOrigins ?? [location.origin], this._onMessage = e.onMessage, this._allowedOrigins.includes("*") && typeof import.meta < "u", this._messageListener = (t) => this._handlePostMessage(t), window.addEventListener("message", this._messageListener);
12
12
  }
@@ -45,7 +45,7 @@ class At {
45
45
  _handlePostMessage(e) {
46
46
  if (this._destroyed || !this._isOriginAllowed(e.origin)) return;
47
47
  const t = e.data;
48
- if (!It(t) || t.gengage !== this._namespace) return;
48
+ if (!Mt(t) || t.gengage !== this._namespace) return;
49
49
  const a = { type: t.type };
50
50
  t.payload !== void 0 && (a.payload = t.payload), this._onMessage?.(a);
51
51
  const n = this._handlers.get(a.type);
@@ -57,15 +57,15 @@ class At {
57
57
  return this._allowedOrigins.includes("*") ? !0 : this._allowedOrigins.includes(e);
58
58
  }
59
59
  }
60
- function It(o) {
60
+ function Mt(o) {
61
61
  if (typeof o != "object" || o === null) return !1;
62
62
  const e = o;
63
63
  return typeof e.gengage == "string" && typeof e.type == "string";
64
64
  }
65
- const Nt = console;
66
- function Mt(o, e, t = {}) {
67
- const a = o.action, n = t.logger ?? Nt;
68
- switch (Ze("action", `routing action: ${a.kind}`, a), a.kind) {
65
+ const Bt = console;
66
+ function zt(o, e, t = {}) {
67
+ const a = o.action, n = t.logger ?? Bt;
68
+ switch (et("action", `routing action: ${a.kind}`, a), a.kind) {
69
69
  case "open_chat": {
70
70
  e.openChat?.(a.payload);
71
71
  return;
@@ -75,12 +75,16 @@ function Mt(o, e, t = {}) {
75
75
  ce(a, e, t, n);
76
76
  return;
77
77
  }
78
+ if (!W(a.url)) {
79
+ n.warn("[gengage] Blocked navigation to unsafe URL:", a.url);
80
+ return;
81
+ }
78
82
  const i = typeof a.newTab == "boolean" ? a.newTab : void 0;
79
83
  if (e.navigate) {
80
84
  e.navigate({ url: a.url, ...i !== void 0 && { newTab: i } });
81
85
  return;
82
86
  }
83
- Bt(a.url, i);
87
+ Rt(a.url, i);
84
88
  return;
85
89
  }
86
90
  case "save_session": {
@@ -112,7 +116,7 @@ function Mt(o, e, t = {}) {
112
116
  ce(a, e, t, n);
113
117
  return;
114
118
  }
115
- const i = zt(a.payload) ? a.payload : void 0;
119
+ const i = Ft(a.payload) ? a.payload : void 0;
116
120
  e.scriptCall?.({ name: a.name, ...i !== void 0 && { payload: i } });
117
121
  return;
118
122
  }
@@ -130,9 +134,9 @@ function ce(o, e, t, a) {
130
134
  throw new Error(`[gengage] Unknown action kind: ${o.kind}`);
131
135
  a.warn("[gengage] Unknown action ignored", o);
132
136
  }
133
- function Bt(o, e) {
137
+ function Rt(o, e) {
134
138
  if (!(typeof window > "u")) {
135
- if (!$(o)) {
139
+ if (!W(o)) {
136
140
  console.warn("[gengage] Blocked navigation to unsafe URL:", o);
137
141
  return;
138
142
  }
@@ -143,14 +147,14 @@ function Bt(o, e) {
143
147
  window.location.href = o;
144
148
  }
145
149
  }
146
- function zt(o) {
150
+ function Ft(o) {
147
151
  return typeof o == "object" && o !== null && !Array.isArray(o);
148
152
  }
149
- const Rt = ["image/jpeg", "image/png", "image/webp"], Ft = 5 * 1024 * 1024;
150
- function Dt(o) {
151
- return Rt.includes(o.type) ? o.size > Ft ? { ok: !1, reason: "too_large" } : { ok: !0 } : { ok: !1, reason: "invalid_type" };
153
+ const Dt = ["image/jpeg", "image/png", "image/webp"], Ht = 5 * 1024 * 1024;
154
+ function Ut(o) {
155
+ return Dt.includes(o.type) ? o.size > Ht ? { ok: !1, reason: "too_large" } : { ok: !0 } : { ok: !1, reason: "invalid_type" };
152
156
  }
153
- function Ht(o, e) {
157
+ function qt(o, e) {
154
158
  const t = o.type, a = o.payload != null && typeof o.payload == "object" && !Array.isArray(o.payload) ? o.payload : {}, n = (i) => {
155
159
  const r = { ...a };
156
160
  for (const [s, l] of Object.entries(i))
@@ -168,7 +172,7 @@ function Ht(o, e) {
168
172
  const i = {
169
173
  is_launcher: 0
170
174
  };
171
- return o.title && (i.text = o.title), o.title && (i.input = o.title), { ...o, payload: n(i) };
175
+ return o.title && (i.text = o.title, i.input = o.title), { ...o, payload: n(i) };
172
176
  }
173
177
  case "getComparisonTable":
174
178
  return o;
@@ -184,21 +188,21 @@ function Ht(o, e) {
184
188
  return o;
185
189
  }
186
190
  }
187
- const Ut = {
191
+ const Ot = {
188
192
  user_message: "inputText"
189
193
  };
190
- function qt(o) {
191
- const { action: e, type: t, payload: a, ...n } = o, i = t ?? e?.type ?? "inputText", r = a ?? e?.payload, s = Ut[i] ?? i, l = {
194
+ function Vt(o) {
195
+ const { action: e, type: t, payload: a, ...n } = o, i = t ?? e?.type ?? "inputText", r = a ?? e?.payload, s = Ot[i] ?? i, l = {
192
196
  ...n,
193
197
  type: s
194
198
  };
195
199
  return r !== void 0 && (l.payload = typeof r == "string" ? { text: r } : r), JSON.stringify(l);
196
200
  }
197
- function Ot(o, e, t) {
198
- const a = et("process_action", t), n = new AbortController();
201
+ function jt(o, e, t) {
202
+ const a = tt("process_action", t), n = new AbortController();
199
203
  return (async () => {
200
204
  try {
201
- const r = qt(o), s = t.attachment !== void 0;
205
+ const r = Vt(o), s = t.attachment !== void 0;
202
206
  let l;
203
207
  if (s) {
204
208
  const g = new FormData();
@@ -218,49 +222,49 @@ function Ot(o, e, t) {
218
222
  if (!c.ok) {
219
223
  let g = c.statusText;
220
224
  try {
221
- const h = await c.json(), w = h.detail ?? h.message ?? h.error;
222
- typeof w == "string" && (g = w);
225
+ const p = await c.json(), _ = p.detail ?? p.message ?? p.error;
226
+ typeof _ == "string" && (g = _);
223
227
  } catch {
224
228
  }
225
229
  e.onError(new Error(`HTTP ${c.status}: ${g}`));
226
230
  return;
227
231
  }
228
232
  let d = !1;
229
- const p = () => {
233
+ const h = () => {
230
234
  d || (d = !0, e.onDone());
231
235
  };
232
- await tt(c, {
236
+ await at(c, {
233
237
  onEvent: (g) => {
234
- const h = at(g);
235
- if (h)
236
- switch (h.type) {
238
+ const p = nt(g);
239
+ if (p)
240
+ switch (p.type) {
237
241
  case "text_chunk":
238
- e.onTextChunk(h.content, h.final === !0, {
239
- productMentions: h.productMentions,
240
- skuToProductItem: h.skuToProductItem,
241
- conversationMode: h.conversationMode
242
+ e.onTextChunk(p.content, p.final === !0, {
243
+ productMentions: p.productMentions,
244
+ skuToProductItem: p.skuToProductItem,
245
+ conversationMode: p.conversationMode
242
246
  });
243
247
  break;
244
248
  case "ui_spec":
245
- e.onUISpec(h.spec, h.widget, h.panelHint);
249
+ e.onUISpec(p.spec, p.widget, p.panelHint);
246
250
  break;
247
251
  case "action":
248
- e.onAction(h);
252
+ e.onAction(p);
249
253
  break;
250
254
  case "metadata":
251
- e.onMetadata(h);
255
+ e.onMetadata(p);
252
256
  break;
253
257
  case "error":
254
- e.onError(new Error(h.message));
258
+ e.onError(new Error(p.message));
255
259
  break;
256
260
  case "done":
257
- p();
261
+ h();
258
262
  break;
259
263
  }
260
264
  },
261
265
  onError: e.onError,
262
266
  signal: n.signal
263
- }), p();
267
+ }), h();
264
268
  } catch (r) {
265
269
  if (r instanceof DOMException && r.name === "AbortError") return;
266
270
  e.onError(r instanceof Error ? r : new Error(String(r)));
@@ -354,7 +358,7 @@ const ye = {
354
358
  accountInactiveMessage: "Bu hesap şu an aktif değil. Lütfen daha sonra tekrar deneyin.",
355
359
  favoritesPageTitle: "Favorilerim",
356
360
  emptyFavoritesMessage: "Henüz favori ürün yok. Bir ürünü kalp ikonuna tıklayarak favorilere ekleyebilirsin."
357
- }, Vt = {
361
+ }, Wt = {
358
362
  headerTitle: "Product Expert",
359
363
  inputPlaceholder: "Search products, ask questions",
360
364
  sendButton: "Send",
@@ -442,20 +446,20 @@ const ye = {
442
446
  favoritesPageTitle: "My Favorites",
443
447
  emptyFavoritesMessage: "No favorites yet. Heart a product to save it here."
444
448
  };
445
- function jt(o) {
449
+ function $t(o) {
446
450
  return o ? o.toLowerCase().split("-")[0] ?? "tr" : "tr";
447
451
  }
448
- function Wt(o) {
449
- return jt(o) === "en" ? Vt : ye;
452
+ function Yt(o) {
453
+ return $t(o) === "en" ? Wt : ye;
450
454
  }
451
- function $t() {
452
- return qe() !== null;
455
+ function Gt() {
456
+ return Oe() !== null;
453
457
  }
454
- function qe() {
458
+ function Oe() {
455
459
  const o = globalThis;
456
460
  return o.SpeechRecognition ?? o.webkitSpeechRecognition ?? null;
457
461
  }
458
- class Yt {
462
+ class Kt {
459
463
  constructor(e, t) {
460
464
  this.recognition = null, this._state = "idle", this.silenceTimer = null, this.accumulatedTranscript = "", this.intentionalStop = !1, this._lastRestartAt = 0, this.callbacks = e, this.lang = t?.lang ?? "tr-TR", this.silenceTimeoutMs = t?.silenceTimeoutMs ?? 1500, this.autoSubmit = t?.autoSubmit ?? !0;
461
465
  }
@@ -467,7 +471,7 @@ class Yt {
467
471
  */
468
472
  start() {
469
473
  if (this._state === "listening") return;
470
- const e = qe();
474
+ const e = Oe();
471
475
  if (!e) {
472
476
  this.setState("error"), this.callbacks.onError?.("not-supported", "Web Speech API is not supported in this browser.");
473
477
  return;
@@ -491,7 +495,7 @@ class Yt {
491
495
  }
492
496
  i && (this.accumulatedTranscript += i, this.callbacks.onFinal?.(this.accumulatedTranscript)), n && this.callbacks.onInterim?.(this.accumulatedTranscript + n), this.autoSubmit && this.accumulatedTranscript && this.startSilenceTimer();
493
497
  }, t.onerror = (a) => {
494
- const n = Gt(a.error);
498
+ const n = Xt(a.error);
495
499
  this.intentionalStop && (a.error === "no-speech" || a.error === "aborted") || (this.setState("error"), this.callbacks.onError?.(n, a.message || a.error));
496
500
  }, t.onend = () => {
497
501
  if (this.clearSilenceTimer(), this._state === "listening" && !this.intentionalStop) {
@@ -559,7 +563,7 @@ class Yt {
559
563
  this.silenceTimer !== null && (clearTimeout(this.silenceTimer), this.silenceTimer = null);
560
564
  }
561
565
  }
562
- function Gt(o) {
566
+ function Xt(o) {
563
567
  switch (o) {
564
568
  case "not-allowed":
565
569
  return "not-allowed";
@@ -575,15 +579,15 @@ function Gt(o) {
575
579
  return "unknown";
576
580
  }
577
581
  }
578
- function Kt(o) {
582
+ function Qt(o) {
579
583
  const e = document.createElement("div");
580
584
  e.className = "gengage-chat-kvkk-banner", e.setAttribute("role", "alert");
581
585
  const t = document.createElement("div");
582
- t.className = "gengage-chat-kvkk-content", t.innerHTML = Z(o.htmlContent), e.appendChild(t);
586
+ t.className = "gengage-chat-kvkk-content", t.innerHTML = ee(o.htmlContent), e.appendChild(t);
583
587
  const a = document.createElement("button");
584
588
  return a.className = "gengage-chat-kvkk-dismiss", a.type = "button", a.setAttribute("aria-label", o.closeAriaLabel ?? "Close privacy notice"), a.textContent = "×", a.addEventListener("click", o.onDismiss), e.appendChild(a), e;
585
589
  }
586
- class Xt {
590
+ class Jt {
587
591
  constructor(e) {
588
592
  this._el = document.createElement("div"), this._el.className = "gengage-chat-panel-topbar", this._backBtn = document.createElement("button"), this._backBtn.className = "gengage-chat-panel-topbar-back", this._backBtn.type = "button", this._backBtn.disabled = !0, this._backBtn.setAttribute("aria-label", e.backAriaLabel ?? "Back"), this._backBtn.title = e.backAriaLabel ?? "Back", this._backBtn.textContent = "←", this._backBtn.addEventListener("click", () => e.onBack()), this._titleEl = document.createElement("span"), this._titleEl.className = "gengage-chat-panel-topbar-title", this._forwardBtn = document.createElement("button"), this._forwardBtn.className = "gengage-chat-panel-topbar-forward", this._forwardBtn.type = "button", this._forwardBtn.disabled = !0, this._forwardBtn.setAttribute("aria-label", e.forwardAriaLabel ?? "Forward"), this._forwardBtn.title = e.forwardAriaLabel ?? "Forward", this._forwardBtn.textContent = "→", this._forwardBtn.addEventListener("click", () => e.onForward()), this._el.appendChild(this._backBtn), this._el.appendChild(this._titleEl), this._el.appendChild(this._forwardBtn);
589
593
  }
@@ -597,7 +601,7 @@ class Xt {
597
601
  return this._titleEl.textContent ?? "";
598
602
  }
599
603
  }
600
- class Qt {
604
+ class Zt {
601
605
  constructor(e) {
602
606
  this._onThumbnailClick = e.onThumbnailClick, this._el = document.createElement("div"), this._el.className = "gengage-chat-thumbnails-column", this._el.style.display = "none";
603
607
  }
@@ -611,7 +615,7 @@ class Qt {
611
615
  this._el.innerHTML = "";
612
616
  for (const n of a) {
613
617
  const i = document.createElement("button");
614
- if (i.type = "button", i.className = "gengage-chat-thumbnail-btn", i.title = n.sku, te(n.imageUrl)) {
618
+ if (i.type = "button", i.className = "gengage-chat-thumbnail-btn", i.title = n.sku, ae(n.imageUrl)) {
615
619
  const r = document.createElement("img");
616
620
  r.className = "gengage-chat-thumbnail-img", r.src = n.imageUrl, r.alt = n.sku, r.width = 40, r.height = 40, i.appendChild(r);
617
621
  }
@@ -632,38 +636,38 @@ const Ae = '<svg viewBox="0 0 16 16" class="gengage-chat-icon"><path d="M3 8h10M
632
636
  review: '<svg viewBox="0 0 16 16" class="gengage-chat-icon"><polygon points="8,1 10,6 15,6 11,9 12.5,14 8,11 3.5,14 5,9 1,6 6,6" fill="none" stroke="currentColor" stroke-width="1.5"/></svg>',
633
637
  info: '<svg viewBox="0 0 16 16" class="gengage-chat-icon"><circle cx="8" cy="8" r="7" fill="none" stroke="currentColor" stroke-width="1.5"/><line x1="8" y1="7" x2="8" y2="12" stroke="currentColor" stroke-width="1.5"/><circle cx="8" cy="4.5" r="0.8" fill="currentColor"/></svg>',
634
638
  similar: '<svg viewBox="0 0 16 16" class="gengage-chat-icon"><rect x="1" y="3" width="6" height="6" rx="1" fill="none" stroke="currentColor" stroke-width="1.5"/><rect x="9" y="3" width="6" height="6" rx="1" fill="none" stroke="currentColor" stroke-width="1.5"/></svg>'
635
- }, Jt = ye;
636
- class Zt {
639
+ }, ea = ye;
640
+ class ta {
637
641
  constructor(e, t) {
638
- this._panelVisible = !1, this._panelCollapsed = !1, this._onPanelToggle = void 0, this._pendingAttachment = null, this._onAttachment = void 0, this._onRollback = void 0, this._onLinkClick = void 0, this._userScrolledUp = !1, this._scrollLockedUntil = 0, this._favBadgeEl = null, this._thinkingSteps = [], this._firstBotMessageIds = /* @__PURE__ */ new Set(), this._voiceInput = null, this._micBtn = null, this._voiceEnabled = !1, this._voiceLang = "tr-TR", this._ignoreNextDividerClick = !1, this._cleanups = [], this._focusTrapHandler = null, this._previouslyFocusedElement = null, this._stillWorkingTimer = null, this._conversationEl = null, this._reopenPanelBtn = null, this._options = t, this.i18n = { ...Jt, ...t.i18n }, this.onSend = t.onSend, t.onPanelToggle !== void 0 && (this._onPanelToggle = t.onPanelToggle), t.onAttachment !== void 0 && (this._onAttachment = t.onAttachment), t.onRollback !== void 0 && (this._onRollback = t.onRollback), t.onLinkClick !== void 0 && (this._onLinkClick = t.onLinkClick), t.voiceEnabled && (this._voiceEnabled = !0), t.voiceLang !== void 0 && (this._voiceLang = t.voiceLang), this.root = document.createElement("div"), this.root.className = "gengage-chat-drawer", this.root.setAttribute("role", "dialog"), this.root.setAttribute("aria-label", this.i18n.headerTitle ?? "Chat"), this.root.setAttribute("aria-modal", "true");
642
+ this._panelVisible = !1, this._panelCollapsed = !1, this._onPanelToggle = void 0, this._pendingAttachment = null, this._onAttachment = void 0, this._onRollback = void 0, this._onLinkClick = void 0, this._userScrolledUp = !1, this._scrollLockedUntil = 0, this._favBadgeEl = null, this._thinkingSteps = [], this._firstBotMessageIds = /* @__PURE__ */ new Set(), this._voiceInput = null, this._micBtn = null, this._voiceEnabled = !1, this._voiceLang = "tr-TR", this._ignoreNextDividerClick = !1, this._cleanups = [], this._focusTrapHandler = null, this._previouslyFocusedElement = null, this._stillWorkingTimer = null, this._conversationEl = null, this._reopenPanelBtn = null, this._options = t, this.i18n = { ...ea, ...t.i18n }, this.onSend = t.onSend, t.onPanelToggle !== void 0 && (this._onPanelToggle = t.onPanelToggle), t.onAttachment !== void 0 && (this._onAttachment = t.onAttachment), t.onRollback !== void 0 && (this._onRollback = t.onRollback), t.onLinkClick !== void 0 && (this._onLinkClick = t.onLinkClick), t.voiceEnabled && (this._voiceEnabled = !0), t.voiceLang !== void 0 && (this._voiceLang = t.voiceLang), this.root = document.createElement("div"), this.root.className = "gengage-chat-drawer", this.root.setAttribute("role", "dialog"), this.root.setAttribute("aria-label", this.i18n.headerTitle ?? "Chat"), this.root.setAttribute("aria-modal", "true");
639
643
  const a = "gengage-chat-dialog-desc", n = document.createElement("span");
640
644
  n.id = a, n.className = "gengage-sr-only", n.textContent = this.i18n.headerTitle ?? "AI shopping assistant", this.root.appendChild(n), this.root.setAttribute("aria-describedby", a);
641
645
  {
642
646
  const b = document.createElement("div");
643
647
  b.className = "gengage-chat-drawer-handle", b.setAttribute("aria-hidden", "true"), this.root.appendChild(b);
644
- const U = 72;
645
- let ne = 0, W = 0, ee = !1;
648
+ const F = 72;
649
+ let $ = 0, Y = 0, te = !1;
646
650
  const Ce = (ie) => {
647
651
  if (!(this._options.getMobileViewport?.() ?? window.innerWidth <= 768)) return;
648
- const Y = ie.changedTouches?.[0];
649
- Y && (ne = Y.clientY, W = 0, ee = !0, this.root.style.transition = "none");
652
+ const G = ie.changedTouches?.[0];
653
+ G && ($ = G.clientY, Y = 0, te = !0, this.root.style.transition = "none");
650
654
  }, Ee = (ie) => {
651
- if (!ee) return;
652
- const Y = ie.changedTouches?.[0];
653
- if (!Y) return;
654
- W = Y.clientY - ne;
655
- const Je = (t.getMobileState?.() ?? "full") === "full" ? Math.max(0, W) : W;
656
- ie.preventDefault(), this.root.style.transform = `translateY(${Je}px)`;
655
+ if (!te) return;
656
+ const G = ie.changedTouches?.[0];
657
+ if (!G) return;
658
+ Y = G.clientY - $;
659
+ const Ze = (t.getMobileState?.() ?? "full") === "full" ? Math.max(0, Y) : Y;
660
+ ie.preventDefault(), this.root.style.transform = `translateY(${Ze}px)`;
657
661
  }, Se = () => {
658
- if (!ee) return;
659
- ee = !1;
662
+ if (!te) return;
663
+ te = !1;
660
664
  const ie = t.getMobileState?.() ?? "full";
661
- let Y;
662
- W > U ? Y = ie === "full" ? "half" : "close" : W < -U && ie === "half" ? Y = "full" : Y = ie, this.root.style.transition = "", Y === "close" ? (this.root.style.transform = "translateY(100%)", setTimeout(() => {
665
+ let G;
666
+ Y > F ? G = ie === "full" ? "half" : "close" : Y < -F && ie === "half" ? G = "full" : G = ie, this.root.style.transition = "", G === "close" ? (this.root.style.transform = "translateY(100%)", setTimeout(() => {
663
667
  this.root.style.transform = "", t.onMobileSnap?.("close");
664
- }, 280)) : (this.root.style.transform = "", t.onMobileSnap?.(Y)), W = 0;
668
+ }, 280)) : (this.root.style.transform = "", t.onMobileSnap?.(G)), Y = 0;
665
669
  }, Te = () => {
666
- ee && (ee = !1, W = 0, this.root.style.transition = "", this.root.style.transform = "");
670
+ te && (te = !1, Y = 0, this.root.style.transition = "", this.root.style.transform = "");
667
671
  };
668
672
  b.addEventListener("touchstart", Ce, { passive: !0 }), b.addEventListener("touchmove", Ee, { passive: !1 }), b.addEventListener("touchend", Se, { passive: !0 }), b.addEventListener("touchcancel", Te, { passive: !0 }), this._cleanups.push(() => {
669
673
  b.removeEventListener("touchstart", Ce), b.removeEventListener("touchmove", Ee), b.removeEventListener("touchend", Se), b.removeEventListener("touchcancel", Te);
@@ -688,8 +692,8 @@ class Zt {
688
692
  b.className = "gengage-chat-header-badge", b.textContent = t.headerBadge, c.appendChild(b);
689
693
  }
690
694
  l.appendChild(c);
691
- const p = document.createElement("a");
692
- p.className = "gengage-chat-header-powered", p.href = "https://gengage.ai/", p.target = "_blank", p.rel = "noopener noreferrer", p.innerHTML = '<svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 1a7 7 0 110 14A7 7 0 018 1zm0 1.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM7 4.5h2v4H7v-4zm0 5h2v2H7v-2z"/></svg>Powered by Gengage', l.appendChild(p), r.appendChild(l), i.appendChild(r);
695
+ const h = document.createElement("a");
696
+ h.className = "gengage-chat-header-powered", h.href = "https://gengage.ai/", h.target = "_blank", h.rel = "noopener noreferrer", h.innerHTML = '<svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 1a7 7 0 110 14A7 7 0 018 1zm0 1.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM7 4.5h2v4H7v-4zm0 5h2v2H7v-2z"/></svg>Powered by Gengage', l.appendChild(h), r.appendChild(l), i.appendChild(r);
693
697
  const g = document.createElement("div");
694
698
  g.className = "gengage-chat-header-right";
695
699
  {
@@ -704,27 +708,27 @@ class Zt {
704
708
  const b = document.createElement("button");
705
709
  b.className = "gengage-chat-header-btn gengage-chat-new-chat", b.type = "button", b.setAttribute("aria-label", this.i18n.newChatButton), b.title = this.i18n.newChatButton, b.innerHTML = '<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20h9"/><path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"/></svg>', b.addEventListener("click", () => t.onNewChat?.()), g.appendChild(b);
706
710
  }
707
- const h = document.createElement("button");
708
- h.className = "gengage-chat-close", h.type = "button", h.setAttribute("aria-label", this.i18n.closeButton), h.innerHTML = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>', h.addEventListener("click", t.onClose);
711
+ const p = document.createElement("button");
712
+ p.className = "gengage-chat-close", p.type = "button", p.setAttribute("aria-label", this.i18n.closeButton), p.innerHTML = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>', p.addEventListener("click", t.onClose);
709
713
  {
710
714
  const b = document.createElement("button");
711
715
  b.className = "gengage-chat-header-btn gengage-chat-header-btn--fav", b.type = "button", b.setAttribute("aria-label", this.i18n.favoritesAriaLabel), b.setAttribute("aria-pressed", "false"), b.innerHTML = '<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>';
712
- const U = document.createElement("span");
713
- U.className = "gengage-chat-header-fav-badge", U.setAttribute("aria-hidden", "true"), U.style.display = "none", b.appendChild(U), this._favBadgeEl = U, b.addEventListener("click", () => {
714
- const ne = b.getAttribute("aria-pressed") === "true";
715
- b.setAttribute("aria-pressed", String(!ne)), t.onFavoritesClick?.();
716
+ const F = document.createElement("span");
717
+ F.className = "gengage-chat-header-fav-badge", F.setAttribute("aria-hidden", "true"), F.style.display = "none", b.appendChild(F), this._favBadgeEl = F, b.addEventListener("click", () => {
718
+ const $ = b.getAttribute("aria-pressed") === "true";
719
+ b.setAttribute("aria-pressed", String(!$)), t.onFavoritesClick?.();
716
720
  }), g.appendChild(b);
717
721
  }
718
- g.appendChild(h), i.appendChild(g);
719
- const w = document.createElement("div");
720
- w.className = "gengage-chat-body", this._panelEl = document.createElement("div"), this._panelEl.className = "gengage-chat-panel", this._panelTopBar = new Xt({
722
+ g.appendChild(p), i.appendChild(g);
723
+ const _ = document.createElement("div");
724
+ _.className = "gengage-chat-body", this._panelEl = document.createElement("div"), this._panelEl.className = "gengage-chat-panel", this._panelTopBar = new Jt({
721
725
  onBack: () => t.onPanelBack?.(),
722
726
  onForward: () => t.onPanelForward?.(),
723
727
  backAriaLabel: this.i18n.backAriaLabel,
724
728
  forwardAriaLabel: this.i18n.forwardAriaLabel
725
729
  }), this._panelEl.appendChild(this._panelTopBar.getElement());
726
730
  const T = () => this._updateScrollAffordance();
727
- this._panelEl.addEventListener("scroll", T, { passive: !0 }), this._cleanups.push(() => this._panelEl.removeEventListener("scroll", T)), w.appendChild(this._panelEl), this._dividerEl = document.createElement("div"), this._dividerEl.className = "gengage-chat-panel-divider gengage-chat-panel-divider--hidden", this._dividerEl.setAttribute("role", "separator"), this._dividerEl.setAttribute("aria-label", this.i18n.togglePanelAriaLabel), this._dividerEl.setAttribute("title", this.i18n.togglePanelAriaLabel);
731
+ this._panelEl.addEventListener("scroll", T, { passive: !0 }), this._cleanups.push(() => this._panelEl.removeEventListener("scroll", T)), _.appendChild(this._panelEl), this._dividerEl = document.createElement("div"), this._dividerEl.className = "gengage-chat-panel-divider gengage-chat-panel-divider--hidden", this._dividerEl.setAttribute("role", "separator"), this._dividerEl.setAttribute("aria-label", this.i18n.togglePanelAriaLabel), this._dividerEl.setAttribute("title", this.i18n.togglePanelAriaLabel);
728
732
  const S = document.createElement("button");
729
733
  S.className = "gengage-chat-panel-divider-toggle", S.type = "button", S.setAttribute("aria-label", this.i18n.togglePanelAriaLabel), S.setAttribute("title", this.i18n.togglePanelAriaLabel), S.textContent = "»", S.addEventListener("click", () => {
730
734
  if (this._ignoreNextDividerClick) {
@@ -736,88 +740,113 @@ class Zt {
736
740
  let k = null, y = null;
737
741
  const A = 24, f = (b) => {
738
742
  if (!(this._options.getMobileViewport?.() ?? window.innerWidth <= 768)) return;
739
- const U = b.changedTouches?.[0];
740
- U && (k = U.clientX, y = U.clientY);
743
+ const F = b.changedTouches?.[0];
744
+ F && (k = F.clientX, y = F.clientY);
741
745
  }, C = (b) => {
742
746
  if (!(this._options.getMobileViewport?.() ?? window.innerWidth <= 768) || k === null || y === null) return;
743
- const U = b.changedTouches?.[0];
744
- if (!U) return;
745
- const ne = U.clientX - k, W = U.clientY - y;
746
- if (k = null, y = null, Math.abs(W) < A || Math.abs(W) < Math.abs(ne)) return;
747
- const ee = W < 0;
748
- ee !== this._panelCollapsed && (this._ignoreNextDividerClick = !0, this.setPanelCollapsed(ee), this._onPanelToggle?.());
747
+ const F = b.changedTouches?.[0];
748
+ if (!F) return;
749
+ const $ = F.clientX - k, Y = F.clientY - y;
750
+ if (k = null, y = null, Math.abs(Y) < A || Math.abs(Y) < Math.abs($)) return;
751
+ const te = Y < 0;
752
+ te !== this._panelCollapsed && (this._ignoreNextDividerClick = !0, this.setPanelCollapsed(te), this._onPanelToggle?.());
749
753
  };
750
754
  this._dividerEl.addEventListener("touchstart", f, { passive: !0 }), this._dividerEl.addEventListener("touchend", C, { passive: !0 }), this._cleanups.push(() => {
751
755
  this._dividerEl.removeEventListener("touchstart", f), this._dividerEl.removeEventListener("touchend", C);
752
- }), this._dividerEl.appendChild(S), w.appendChild(this._dividerEl);
753
- const M = document.createElement("div");
754
- M.className = "gengage-chat-conversation", this._conversationEl = M, M.appendChild(i);
755
- const H = document.createElement("div");
756
- H.className = "gengage-chat-offline-bar", H.setAttribute("role", "status"), H.setAttribute("aria-live", "polite"), H.textContent = this.i18n.offlineMessage, typeof navigator < "u" && !navigator.onLine && H.classList.add("gengage-chat-offline-bar--visible"), M.appendChild(H);
757
- const x = () => H.classList.add("gengage-chat-offline-bar--visible"), u = () => H.classList.remove("gengage-chat-offline-bar--visible");
756
+ }), this._dividerEl.appendChild(S), _.appendChild(this._dividerEl);
757
+ const B = document.createElement("div");
758
+ B.className = "gengage-chat-conversation", this._conversationEl = B, B.appendChild(i);
759
+ const U = document.createElement("div");
760
+ U.className = "gengage-chat-offline-bar", U.setAttribute("role", "status"), U.setAttribute("aria-live", "polite"), U.textContent = this.i18n.offlineMessage, typeof navigator < "u" && !navigator.onLine && U.classList.add("gengage-chat-offline-bar--visible"), B.appendChild(U);
761
+ const x = () => U.classList.add("gengage-chat-offline-bar--visible"), u = () => U.classList.remove("gengage-chat-offline-bar--visible");
758
762
  window.addEventListener("offline", x), window.addEventListener("online", u), this._cleanups.push(() => {
759
763
  window.removeEventListener("offline", x), window.removeEventListener("online", u);
760
- }), this._kvkkSlot = document.createElement("div"), this._kvkkSlot.className = "gengage-chat-kvkk-slot", M.appendChild(this._kvkkSlot), this.messagesEl = document.createElement("div"), this.messagesEl.className = "gengage-chat-messages", this.messagesEl.setAttribute("role", "log"), this.messagesEl.setAttribute("aria-live", "polite"), this.messagesEl.setAttribute("aria-atomic", "false"), this.messagesEl.setAttribute("aria-label", this.i18n.chatMessagesAriaLabel);
764
+ }), this._kvkkSlot = document.createElement("div"), this._kvkkSlot.className = "gengage-chat-kvkk-slot", B.appendChild(this._kvkkSlot), this.messagesEl = document.createElement("div"), this.messagesEl.className = "gengage-chat-messages", this.messagesEl.setAttribute("role", "log"), this.messagesEl.setAttribute("aria-live", "polite"), this.messagesEl.setAttribute("aria-atomic", "false"), this.messagesEl.setAttribute("aria-label", this.i18n.chatMessagesAriaLabel);
761
765
  let m = !1;
762
766
  const E = () => {
763
767
  m || (m = !0, requestAnimationFrame(() => {
764
768
  m = !1;
765
- const { scrollTop: b, scrollHeight: U, clientHeight: ne } = this.messagesEl;
766
- this._userScrolledUp = U - b - ne > 10;
769
+ const { scrollTop: b, scrollHeight: F, clientHeight: $ } = this.messagesEl;
770
+ this._userScrolledUp = F - b - $ > 10;
767
771
  }));
768
772
  };
769
773
  this.messagesEl.addEventListener("scroll", E, { passive: !0 }), this._cleanups.push(() => {
770
774
  this.messagesEl.removeEventListener("scroll", E);
771
- }), M.appendChild(this.messagesEl), this._thumbnailsColumn = new Qt({
775
+ }), B.appendChild(this.messagesEl), this._thumbnailsColumn = new Zt({
772
776
  onThumbnailClick: (b) => t.onThumbnailClick?.(b)
773
777
  }), this._panelEl.appendChild(this._thumbnailsColumn.getElement()), this._panelFloatingEl = document.createElement("div"), this._panelFloatingEl.className = "gengage-chat-panel-float", this._panelEl.appendChild(this._panelFloatingEl), this._pillsEl = document.createElement("div"), this._pillsEl.className = "gengage-chat-pills", this._pillsEl.setAttribute("role", "toolbar"), this._pillsEl.setAttribute("aria-label", this.i18n.suggestionsAriaLabel), this._pillsEl.style.display = "none";
774
- const _ = document.createElement("div");
775
- _.className = "gengage-chat-pills-scroll", this._pillsEl.appendChild(_);
778
+ const w = document.createElement("div");
779
+ w.className = "gengage-chat-pills-scroll", this._pillsEl.appendChild(w);
776
780
  const L = document.createElement("button");
777
781
  L.className = "gengage-chat-pills-arrow", L.type = "button", L.setAttribute("aria-label", this.i18n.moreSuggestionsAriaLabel), L.textContent = "›", L.addEventListener("click", () => {
778
- _.scrollBy({ left: 150, behavior: "smooth" });
782
+ w.scrollBy({ left: 150, behavior: "smooth" });
779
783
  }), this._pillsEl.appendChild(L);
780
- let B = !1;
784
+ let N = !1;
781
785
  const R = () => {
782
- B || (B = !0, requestAnimationFrame(() => {
783
- B = !1;
784
- const b = _.scrollLeft + _.clientWidth >= _.scrollWidth - 4;
786
+ N || (N = !0, requestAnimationFrame(() => {
787
+ N = !1;
788
+ const b = w.scrollLeft + w.clientWidth >= w.scrollWidth - 4;
785
789
  L.style.display = b ? "none" : "";
786
790
  }));
787
791
  };
788
- _.addEventListener("scroll", R, { passive: !0 }), this._cleanups.push(() => {
789
- _.removeEventListener("scroll", R);
790
- }), M.appendChild(this._pillsEl), this._inputChipsEl = document.createElement("div"), this._inputChipsEl.className = "gengage-chat-input-chips", this._inputChipsEl.style.display = "none", M.appendChild(this._inputChipsEl);
791
- const F = document.createElement("div");
792
- F.className = "gengage-chat-input-area", this.inputEl = document.createElement("textarea"), this.inputEl.className = "gengage-chat-input", this.inputEl.rows = 1, this.inputEl.placeholder = this.i18n.inputPlaceholder, this.inputEl.addEventListener("input", () => {
792
+ w.addEventListener("scroll", R, { passive: !0 }), this._cleanups.push(() => {
793
+ w.removeEventListener("scroll", R);
794
+ }), B.appendChild(this._pillsEl), this._inputChipsEl = document.createElement("div"), this._inputChipsEl.className = "gengage-chat-input-chips", this._inputChipsEl.style.display = "none", B.appendChild(this._inputChipsEl);
795
+ const D = document.createElement("div");
796
+ D.className = "gengage-chat-input-area", this.inputEl = document.createElement("textarea"), this.inputEl.className = "gengage-chat-input", this.inputEl.rows = 1, this.inputEl.placeholder = this.i18n.inputPlaceholder, this.inputEl.addEventListener("input", () => {
793
797
  requestAnimationFrame(() => {
794
798
  this.inputEl.style.height = "auto", this.inputEl.style.height = `${Math.min(this.inputEl.scrollHeight, 120)}px`;
795
799
  }), this._updateSendEnabled();
796
800
  }), this.inputEl.addEventListener("keydown", (b) => {
797
801
  b.key === "Enter" && ((this._options.getMobileViewport?.() ?? window.innerWidth <= 768) || !b.shiftKey) && (b.preventDefault(), this._submit());
798
802
  }), this.inputEl.addEventListener("paste", (b) => {
799
- const U = b.clipboardData?.files[0];
800
- U && U.type.startsWith("image/") && (b.preventDefault(), this._onAttachment ? this._onAttachment(U) : this.stageAttachment(U));
803
+ const F = b.clipboardData?.files[0];
804
+ if (F && F.type.startsWith("image/"))
805
+ if (b.preventDefault(), this._onAttachment)
806
+ try {
807
+ this._onAttachment(F);
808
+ } catch ($) {
809
+ console.error("[gengage:chat] Attachment callback error:", $);
810
+ }
811
+ else
812
+ this.stageAttachment(F);
801
813
  }), this._fileInput = document.createElement("input"), this._fileInput.type = "file", this._fileInput.accept = "image/jpeg,image/png,image/webp", this._fileInput.style.display = "none", this._fileInput.addEventListener("change", () => {
802
814
  const b = this._fileInput.files?.[0];
803
- b && (this._onAttachment ? this._onAttachment(b) : this.stageAttachment(b)), this._fileInput.value = "";
815
+ if (b)
816
+ if (this._onAttachment)
817
+ try {
818
+ this._onAttachment(b);
819
+ } catch (F) {
820
+ console.error("[gengage:chat] Attachment callback error:", F);
821
+ }
822
+ else
823
+ this.stageAttachment(b);
824
+ this._fileInput.value = "";
804
825
  });
805
- const N = document.createElement("button");
806
- N.className = "gengage-chat-attach-btn", N.type = "button", N.setAttribute("aria-label", this.i18n.attachImageButton), N.innerHTML = '<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"/><circle cx="12" cy="13" r="4"/></svg>', N.addEventListener("click", () => this._fileInput.click()), this._previewStrip = document.createElement("div"), this._previewStrip.className = "gengage-chat-attachment-preview gengage-chat-attachment-preview--hidden";
807
- const D = document.createElement("img");
808
- D.className = "gengage-chat-attachment-preview-thumb", D.alt = "", this._previewName = document.createElement("span"), this._previewName.className = "gengage-chat-attachment-name";
826
+ const M = document.createElement("button");
827
+ M.className = "gengage-chat-attach-btn", M.type = "button", M.setAttribute("aria-label", this.i18n.attachImageButton), M.innerHTML = '<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"/><circle cx="12" cy="13" r="4"/></svg>', M.addEventListener("click", () => this._fileInput.click()), this._previewStrip = document.createElement("div"), this._previewStrip.className = "gengage-chat-attachment-preview gengage-chat-attachment-preview--hidden";
828
+ const H = document.createElement("img");
829
+ H.className = "gengage-chat-attachment-preview-thumb", H.alt = "", this._previewName = document.createElement("span"), this._previewName.className = "gengage-chat-attachment-name";
809
830
  const P = document.createElement("button");
810
- P.className = "gengage-chat-attachment-remove", P.type = "button", P.setAttribute("aria-label", this.i18n.removeAttachmentButton), P.textContent = "×", P.addEventListener("click", () => this.clearAttachment()), this._previewStrip.appendChild(D), this._previewStrip.appendChild(this._previewName), this._previewStrip.appendChild(P), this.sendBtn = document.createElement("button"), this.sendBtn.className = "gengage-chat-send", this.sendBtn.type = "button", this.sendBtn.disabled = !0, this.sendBtn.setAttribute("aria-label", this.i18n.sendButton), this.sendBtn.innerHTML = '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"/></svg>', this.sendBtn.addEventListener("click", () => this._submit()), F.addEventListener("dragover", (b) => {
811
- b.preventDefault(), F.classList.add("gengage-chat-input-area--dragover");
812
- }), F.addEventListener("dragleave", () => {
813
- F.classList.remove("gengage-chat-input-area--dragover");
814
- }), F.addEventListener("drop", (b) => {
815
- b.preventDefault(), F.classList.remove("gengage-chat-input-area--dragover");
816
- const U = b.dataTransfer?.files[0];
817
- U && (this._onAttachment ? this._onAttachment(U) : this.stageAttachment(U));
831
+ P.className = "gengage-chat-attachment-remove", P.type = "button", P.setAttribute("aria-label", this.i18n.removeAttachmentButton), P.textContent = "×", P.addEventListener("click", () => this.clearAttachment()), this._previewStrip.appendChild(H), this._previewStrip.appendChild(this._previewName), this._previewStrip.appendChild(P), this.sendBtn = document.createElement("button"), this.sendBtn.className = "gengage-chat-send", this.sendBtn.type = "button", this.sendBtn.disabled = !0, this.sendBtn.setAttribute("aria-label", this.i18n.sendButton), this.sendBtn.innerHTML = '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"/></svg>', this.sendBtn.addEventListener("click", () => this._submit()), D.addEventListener("dragover", (b) => {
832
+ b.preventDefault(), D.classList.add("gengage-chat-input-area--dragover");
833
+ }), D.addEventListener("dragleave", () => {
834
+ D.classList.remove("gengage-chat-input-area--dragover");
835
+ }), D.addEventListener("drop", (b) => {
836
+ b.preventDefault(), D.classList.remove("gengage-chat-input-area--dragover");
837
+ const F = b.dataTransfer?.files[0];
838
+ if (F)
839
+ if (this._onAttachment)
840
+ try {
841
+ this._onAttachment(F);
842
+ } catch ($) {
843
+ console.error("[gengage:chat] Attachment callback error:", $);
844
+ }
845
+ else
846
+ this.stageAttachment(F);
818
847
  });
819
848
  const I = document.createElement("div");
820
- I.className = "gengage-chat-input-pill", I.appendChild(N), I.appendChild(this.inputEl), this._voiceEnabled && $t() && (this._micBtn = document.createElement("button"), this._micBtn.className = "gengage-chat-mic-btn", this._micBtn.type = "button", this._micBtn.setAttribute("aria-label", this.i18n.voiceButton), this._micBtn.innerHTML = '<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><line x1="12" y1="19" x2="12" y2="23"/><line x1="8" y1="23" x2="16" y2="23"/></svg>', this._micBtn.addEventListener("click", () => this._toggleVoice()), I.appendChild(this._micBtn), this._voiceInput = new Yt(
849
+ I.className = "gengage-chat-input-pill", I.appendChild(M), I.appendChild(this.inputEl), this._voiceEnabled && Gt() && (this._micBtn = document.createElement("button"), this._micBtn.className = "gengage-chat-mic-btn", this._micBtn.type = "button", this._micBtn.setAttribute("aria-label", this.i18n.voiceButton), this._micBtn.innerHTML = '<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><line x1="12" y1="19" x2="12" y2="23"/><line x1="8" y1="23" x2="16" y2="23"/></svg>', this._micBtn.addEventListener("click", () => this._toggleVoice()), I.appendChild(this._micBtn), this._voiceInput = new Kt(
821
850
  {
822
851
  onInterim: (b) => {
823
852
  this.inputEl.value = b, this.inputEl.style.height = "auto", this.inputEl.style.height = `${Math.min(this.inputEl.scrollHeight, 120)}px`;
@@ -831,18 +860,18 @@ class Zt {
831
860
  onStateChange: (b) => {
832
861
  b === "listening" ? this._micBtn?.classList.add("gengage-chat-mic-btn--active") : this._micBtn?.classList.remove("gengage-chat-mic-btn--active");
833
862
  },
834
- onError: (b, U) => {
863
+ onError: (b, F) => {
835
864
  this._micBtn?.classList.remove("gengage-chat-mic-btn--active");
836
865
  }
837
866
  },
838
867
  { lang: this._voiceLang }
839
- )), I.appendChild(this.sendBtn), F.appendChild(this._previewStrip), F.appendChild(this._fileInput), F.appendChild(I), M.appendChild(F), w.appendChild(M), this.root.appendChild(w), this._setupHorizontalSwipe(M), this._setupHorizontalSwipe(this._panelEl);
868
+ )), I.appendChild(this.sendBtn), D.appendChild(this._previewStrip), D.appendChild(this._fileInput), D.appendChild(I), B.appendChild(D), _.appendChild(B), this.root.appendChild(_), this._setupHorizontalSwipe(B), this._setupHorizontalSwipe(this._panelEl);
840
869
  const q = document.createElement("div");
841
870
  q.className = "gengage-chat-footer", q.textContent = this.i18n.poweredBy, this.root.appendChild(q);
842
- const X = (b) => {
871
+ const Q = (b) => {
843
872
  b.key === "Escape" && t.onClose();
844
873
  };
845
- this.root.addEventListener("keydown", X), this._cleanups.push(() => this.root.removeEventListener("keydown", X)), e.appendChild(this.root);
874
+ this.root.addEventListener("keydown", Q), this._cleanups.push(() => this.root.removeEventListener("keydown", Q)), e.appendChild(this.root);
846
875
  }
847
876
  addMessage(e) {
848
877
  const t = document.createElement("div");
@@ -855,7 +884,7 @@ class Zt {
855
884
  if (e.content) {
856
885
  const a = document.createElement("div");
857
886
  if (a.className = "gengage-chat-bubble-text", e.role === "assistant") {
858
- if (a.innerHTML = Z(e.content), this._onLinkClick) {
887
+ if (a.innerHTML = ee(e.content), this._onLinkClick) {
859
888
  const n = a.querySelectorAll("a[href]");
860
889
  for (const i of n)
861
890
  i.addEventListener("click", (r) => {
@@ -964,7 +993,7 @@ class Zt {
964
993
  const s = Ie[n.icon] ?? Ae, l = document.createElement("span");
965
994
  l.className = "gengage-chat-pill-icon", l.innerHTML = s, i.appendChild(l);
966
995
  }
967
- if (n.image && te(n.image)) {
996
+ if (n.image && ae(n.image)) {
968
997
  const s = document.createElement("img");
969
998
  s.className = "gengage-chat-pill-img", s.src = n.image, s.alt = "", i.appendChild(s);
970
999
  }
@@ -987,7 +1016,7 @@ class Zt {
987
1016
  }
988
1017
  showKvkkBanner(e, t) {
989
1018
  this._kvkkSlot.innerHTML = "";
990
- const a = Kt({ htmlContent: e, onDismiss: t, closeAriaLabel: this.i18n.closeAriaLabel });
1019
+ const a = Qt({ htmlContent: e, onDismiss: t, closeAriaLabel: this.i18n.closeAriaLabel });
991
1020
  this._kvkkSlot.appendChild(a);
992
1021
  }
993
1022
  hideKvkkBanner() {
@@ -1240,7 +1269,7 @@ class Zt {
1240
1269
  const a = this.messagesEl.querySelector(`[data-message-id="${CSS.escape(e)}"]`);
1241
1270
  if (!a) return;
1242
1271
  let n = a.querySelector(".gengage-chat-bubble-text");
1243
- n || (n = document.createElement("div"), n.className = "gengage-chat-bubble-text", a.appendChild(n)), n.innerHTML = Z(t), this._scrollToBottom(!1);
1272
+ n || (n = document.createElement("div"), n.className = "gengage-chat-bubble-text", a.appendChild(n)), n.innerHTML = ee(t), this._scrollToBottom(!1);
1244
1273
  }
1245
1274
  /** Mark a message as the first bot message in its thread (for special styling). */
1246
1275
  markFirstBotMessage(e) {
@@ -1323,7 +1352,7 @@ class Zt {
1323
1352
  this._cleanups.length = 0, this._voiceInput?.destroy(), this._voiceInput = null;
1324
1353
  }
1325
1354
  }
1326
- const ea = `<svg width="28" height="28" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1355
+ const aa = `<svg width="28" height="28" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1327
1356
  <rect x="3" y="7" width="18" height="13" rx="3" fill="currentColor" opacity="0.15"/>
1328
1357
  <rect x="3" y="7" width="18" height="13" rx="3" stroke="currentColor" stroke-width="1.5"/>
1329
1358
  <circle cx="9" cy="13" r="1.5" fill="currentColor"/>
@@ -1334,7 +1363,7 @@ const ea = `<svg width="28" height="28" viewBox="0 0 24 24" fill="none" xmlns="h
1334
1363
  <path d="M1 12V14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
1335
1364
  <path d="M23 12V14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
1336
1365
  </svg>`;
1337
- function ta(o) {
1366
+ function na(o) {
1338
1367
  const e = document.createElement("div");
1339
1368
  e.className = "gengage-chat-launcher-container";
1340
1369
  const t = document.createElement("div");
@@ -1345,7 +1374,7 @@ function ta(o) {
1345
1374
  const i = document.createElement("img");
1346
1375
  i.src = o.imageUrl, i.alt = "", i.draggable = !1, a.appendChild(i);
1347
1376
  } else
1348
- a.className = "gengage-chat-launcher", a.innerHTML = o.svgMarkup ?? ea;
1377
+ a.className = "gengage-chat-launcher", a.innerHTML = o.svgMarkup ?? aa;
1349
1378
  if (o.tooltip !== void 0) {
1350
1379
  const i = document.createElement("span");
1351
1380
  i.className = "gengage-chat-launcher-tooltip", i.textContent = o.tooltip, a.appendChild(i);
@@ -1354,7 +1383,7 @@ function ta(o) {
1354
1383
  const n = document.createElement("div");
1355
1384
  return n.className = "gengage-chat-launcher-content-area-bottom", e.appendChild(n), { container: e, button: a, contentArea: t, contentAreaBottom: n };
1356
1385
  }
1357
- const aa = /* @__PURE__ */ new Set([
1386
+ const ia = /* @__PURE__ */ new Set([
1358
1387
  "audio/ogg",
1359
1388
  "audio/mpeg",
1360
1389
  "audio/mp3",
@@ -1362,16 +1391,16 @@ const aa = /* @__PURE__ */ new Set([
1362
1391
  "audio/webm",
1363
1392
  "audio/aac",
1364
1393
  "audio/mp4"
1365
- ]), Oe = /* @__PURE__ */ new Set();
1394
+ ]), Ve = /* @__PURE__ */ new Set();
1366
1395
  function ue(o) {
1367
- o.pause(), o.removeAttribute("src"), o.load(), Oe.delete(o);
1396
+ o.pause(), o.removeAttribute("src"), o.load(), Ve.delete(o);
1368
1397
  }
1369
- function na(o, e = "audio/ogg") {
1398
+ function oa(o, e = "audio/ogg") {
1370
1399
  const t = e.split(";")[0].trim();
1371
- if (!aa.has(t)) return null;
1400
+ if (!ia.has(t)) return null;
1372
1401
  try {
1373
1402
  const a = new Audio(`data:${e};base64,${o}`);
1374
- return Oe.add(a), a.addEventListener("ended", () => ue(a), { once: !0 }), a.play().catch(() => {
1403
+ return Ve.add(a), a.addEventListener("ended", () => ue(a), { once: !0 }), a.play().catch(() => {
1375
1404
  ue(a);
1376
1405
  }), {
1377
1406
  stop: () => ue(a)
@@ -1380,7 +1409,7 @@ function na(o, e = "audio/ogg") {
1380
1409
  return null;
1381
1410
  }
1382
1411
  }
1383
- const ia = {
1412
+ const ra = {
1384
1413
  screen_size: "Screen Size",
1385
1414
  weight: "Weight",
1386
1415
  battery_capacity: "Battery Capacity",
@@ -1412,20 +1441,20 @@ const ia = {
1412
1441
  height: "Height",
1413
1442
  depth: "Depth"
1414
1443
  };
1415
- function oa(o, e) {
1416
- return e?.[o] ?? ia[o] ?? o.replace(/_/g, " ").replace(/^\w/, (t) => t.toUpperCase());
1444
+ function sa(o, e) {
1445
+ return e?.[o] ?? ra[o] ?? o.replace(/_/g, " ").replace(/^\w/, (t) => t.toUpperCase());
1417
1446
  }
1418
- function ra(o) {
1447
+ function ca(o) {
1419
1448
  const { recommended: e, products: t, attributes: a, highlights: n, specialCases: i, onProductClick: r, i18n: s } = o, l = document.createElement("div");
1420
1449
  l.className = "gengage-chat-comparison", l.setAttribute("role", "dialog"), l.setAttribute("aria-label", s?.comparisonHeading ?? "Comparison Results");
1421
1450
  const c = document.createElement("h3");
1422
1451
  if (c.className = "gengage-chat-comparison-heading", c.textContent = s?.comparisonHeading ?? "COMPARISON RESULTS", l.appendChild(c), e) {
1423
1452
  const d = document.createElement("div");
1424
1453
  d.className = "gengage-chat-comparison-recommended";
1425
- const p = document.createElement("div");
1426
- p.className = "gengage-chat-comparison-recommended-label", p.textContent = s?.recommendedChoiceLabel ?? "Recommended Choice", d.appendChild(p);
1454
+ const h = document.createElement("div");
1455
+ h.className = "gengage-chat-comparison-recommended-label", h.textContent = s?.recommendedChoiceLabel ?? "Recommended Choice", d.appendChild(h);
1427
1456
  const g = document.createElement("div");
1428
- if (g.className = "gengage-chat-comparison-recommended-body", e.imageUrl && te(e.imageUrl)) {
1457
+ if (g.className = "gengage-chat-comparison-recommended-body", e.imageUrl && ae(e.imageUrl)) {
1429
1458
  const S = document.createElement("img");
1430
1459
  S.src = e.imageUrl, S.alt = e.name, S.loading = "lazy", S.addEventListener(
1431
1460
  "error",
@@ -1435,12 +1464,12 @@ function ra(o) {
1435
1464
  { once: !0 }
1436
1465
  ), g.appendChild(S);
1437
1466
  }
1438
- const h = document.createElement("div");
1439
- h.className = "gengage-chat-comparison-recommended-info";
1440
- const w = document.createElement("div");
1441
- w.className = "gengage-chat-comparison-recommended-title", w.textContent = e.name, h.appendChild(w);
1467
+ const p = document.createElement("div");
1468
+ p.className = "gengage-chat-comparison-recommended-info";
1469
+ const _ = document.createElement("div");
1470
+ _.className = "gengage-chat-comparison-recommended-title", _.textContent = e.name, p.appendChild(_);
1442
1471
  const T = document.createElement("div");
1443
- if (T.className = "gengage-chat-comparison-recommended-price", T.textContent = j(e.price, o.pricing), h.appendChild(T), g.appendChild(h), g.addEventListener("click", () => {
1472
+ if (T.className = "gengage-chat-comparison-recommended-price", T.textContent = j(e.price, o.pricing), p.appendChild(T), g.appendChild(p), g.addEventListener("click", () => {
1444
1473
  r(e.sku);
1445
1474
  }), g.style.cursor = "pointer", d.appendChild(g), n.length > 0) {
1446
1475
  const S = document.createElement("div");
@@ -1456,36 +1485,36 @@ function ra(o) {
1456
1485
  }
1457
1486
  if (o.recommendedText) {
1458
1487
  const S = document.createElement("div");
1459
- S.className = "gengage-chat-comparison-recommended-text", S.innerHTML = Z(o.recommendedText), d.appendChild(S);
1488
+ S.className = "gengage-chat-comparison-recommended-text", S.innerHTML = ee(o.recommendedText), d.appendChild(S);
1460
1489
  }
1461
1490
  l.appendChild(d);
1462
1491
  }
1463
1492
  if (o.keyDifferencesHtml) {
1464
1493
  const d = document.createElement("div");
1465
1494
  d.className = "gengage-chat-comparison-key-differences";
1466
- const p = document.createElement("h4");
1467
- p.textContent = s?.keyDifferencesLabel ?? "Key Differences", d.appendChild(p);
1495
+ const h = document.createElement("h4");
1496
+ h.textContent = s?.keyDifferencesLabel ?? "Key Differences", d.appendChild(h);
1468
1497
  const g = document.createElement("div");
1469
- g.className = "gengage-chat-comparison-key-differences-content", g.innerHTML = Z(sa(o.keyDifferencesHtml)), d.appendChild(g), l.appendChild(d);
1498
+ g.className = "gengage-chat-comparison-key-differences-content", g.innerHTML = ee(la(o.keyDifferencesHtml)), d.appendChild(g), l.appendChild(d);
1470
1499
  }
1471
1500
  if (i && i.length > 0) {
1472
1501
  const d = document.createElement("details");
1473
1502
  d.className = "gengage-chat-comparison-special";
1474
- const p = document.createElement("summary");
1475
- p.textContent = s?.specialCasesLabel ?? "For Special Cases", d.appendChild(p);
1503
+ const h = document.createElement("summary");
1504
+ h.textContent = s?.specialCasesLabel ?? "For Special Cases", d.appendChild(h);
1476
1505
  const g = document.createElement("ul");
1477
- for (const h of i)
1478
- ca(g, h);
1506
+ for (const p of i)
1507
+ ga(g, p);
1479
1508
  g.childElementCount > 0 && d.appendChild(g), l.appendChild(d);
1480
1509
  }
1481
1510
  if (t.length > 0 && a.length > 0) {
1482
1511
  const d = document.createElement("table");
1483
1512
  d.className = "gengage-chat-comparison-table";
1484
- const p = document.createElement("thead"), g = document.createElement("tr"), h = document.createElement("th");
1485
- g.appendChild(h);
1513
+ const h = document.createElement("thead"), g = document.createElement("tr"), p = document.createElement("th");
1514
+ g.appendChild(p);
1486
1515
  for (const T of t) {
1487
1516
  const S = document.createElement("th");
1488
- if (T.sku === e?.sku && (S.className = "gengage-chat-comparison-selected"), T.imageUrl && te(T.imageUrl)) {
1517
+ if (T.sku === e?.sku && (S.className = "gengage-chat-comparison-selected"), T.imageUrl && ae(T.imageUrl)) {
1489
1518
  const A = document.createElement("img");
1490
1519
  A.src = T.imageUrl, A.alt = T.name, A.loading = "lazy", A.addEventListener(
1491
1520
  "error",
@@ -1500,47 +1529,47 @@ function ra(o) {
1500
1529
  const y = document.createElement("div");
1501
1530
  y.className = "gengage-chat-comparison-table-price", y.textContent = j(T.price, o.pricing), S.appendChild(y), g.appendChild(S);
1502
1531
  }
1503
- p.appendChild(g), d.appendChild(p);
1504
- const w = document.createElement("tbody");
1532
+ h.appendChild(g), d.appendChild(h);
1533
+ const _ = document.createElement("tbody");
1505
1534
  for (const T of a) {
1506
1535
  const S = document.createElement("tr"), k = document.createElement("td");
1507
- k.className = "gengage-chat-comparison-label", k.textContent = oa(T.label, s?.criteriaLabels), S.appendChild(k);
1536
+ k.className = "gengage-chat-comparison-label", k.textContent = sa(T.label, s?.criteriaLabels), S.appendChild(k);
1508
1537
  for (let y = 0; y < T.values.length; y++) {
1509
1538
  const A = document.createElement("td");
1510
1539
  t[y]?.sku === e?.sku && (A.className = "gengage-chat-comparison-selected"), A.textContent = T.values[y] ?? "", S.appendChild(A);
1511
1540
  }
1512
- w.appendChild(S);
1541
+ _.appendChild(S);
1513
1542
  }
1514
- d.appendChild(w), l.appendChild(d);
1543
+ d.appendChild(_), l.appendChild(d);
1515
1544
  }
1516
1545
  if (o.productActions) {
1517
1546
  const d = document.createElement("div");
1518
1547
  d.className = "gengage-chat-comparison-product-actions";
1519
- for (const p of t)
1520
- if (o.productActions[p.sku]) {
1521
- const h = document.createElement("button");
1522
- h.className = "gengage-chat-comparison-view-btn", h.type = "button", h.textContent = p.name, h.addEventListener("click", () => r(p.sku)), d.appendChild(h);
1548
+ for (const h of t)
1549
+ if (o.productActions[h.sku]) {
1550
+ const p = document.createElement("button");
1551
+ p.className = "gengage-chat-comparison-view-btn", p.type = "button", p.textContent = h.name, p.addEventListener("click", () => r(h.sku)), d.appendChild(p);
1523
1552
  }
1524
1553
  d.childElementCount > 0 && l.appendChild(d);
1525
1554
  }
1526
1555
  return l.addEventListener("keydown", (d) => {
1527
1556
  if (d.key !== "Tab") return;
1528
- const p = l.querySelectorAll(
1557
+ const h = l.querySelectorAll(
1529
1558
  'button, [href], input, [tabindex]:not([tabindex="-1"])'
1530
1559
  );
1531
- if (p.length === 0) return;
1532
- const g = p[0], h = p[p.length - 1];
1533
- d.shiftKey && document.activeElement === g ? (d.preventDefault(), h.focus()) : !d.shiftKey && document.activeElement === h && (d.preventDefault(), g.focus());
1560
+ if (h.length === 0) return;
1561
+ const g = h[0], p = h[h.length - 1];
1562
+ d.shiftKey && document.activeElement === g ? (d.preventDefault(), p.focus()) : !d.shiftKey && document.activeElement === p && (d.preventDefault(), g.focus());
1534
1563
  }), l;
1535
1564
  }
1536
- function sa(o) {
1565
+ function la(o) {
1537
1566
  if (/<[uo]l[\s>]/i.test(o) || /<li[\s>]/i.test(o)) return o;
1538
1567
  const e = o.split(`
1539
1568
  `).filter((t) => t.trim());
1540
1569
  return e.length <= 1 ? o : "<ul>" + e.map((t) => `<li>${t.trim()}</li>`).join("") + "</ul>";
1541
1570
  }
1542
- function ca(o, e) {
1543
- const t = Z(e);
1571
+ function ga(o, e) {
1572
+ const t = ee(e);
1544
1573
  if (!t) return;
1545
1574
  const a = document.createElement("template");
1546
1575
  a.innerHTML = t;
@@ -1548,17 +1577,17 @@ function ca(o, e) {
1548
1577
  if (n.length > 0) {
1549
1578
  for (const r of n) {
1550
1579
  const s = document.createElement("li");
1551
- s.innerHTML = Z(r.innerHTML), o.appendChild(s);
1580
+ s.innerHTML = ee(r.innerHTML), o.appendChild(s);
1552
1581
  }
1553
1582
  return;
1554
1583
  }
1555
1584
  const i = document.createElement("li");
1556
- la(e) ? i.innerHTML = t : i.textContent = e, o.appendChild(i);
1585
+ da(e) ? i.innerHTML = t : i.textContent = e, o.appendChild(i);
1557
1586
  }
1558
- function la(o) {
1587
+ function da(o) {
1559
1588
  return /<\/?[a-z][\s\S]*>/i.test(o);
1560
1589
  }
1561
- function ga(o, e) {
1590
+ function ha(o, e) {
1562
1591
  const t = document.createElement("div");
1563
1592
  t.className = "gengage-chat-review-highlights";
1564
1593
  const a = o.props?.reviews;
@@ -1581,10 +1610,10 @@ function ga(o, e) {
1581
1610
  let l = "all", c = s;
1582
1611
  const d = document.createElement("div");
1583
1612
  d.className = "gengage-chat-review-tabs";
1584
- const p = e?.reviewFilterAll ?? "All", g = e?.reviewFilterPositive ?? "Positive", h = e?.reviewFilterNegative ?? "Negative", w = [
1585
- { label: `${p} (${i.all})`, filter: "all" }
1613
+ const h = e?.reviewFilterAll ?? "All", g = e?.reviewFilterPositive ?? "Positive", p = e?.reviewFilterNegative ?? "Negative", _ = [
1614
+ { label: `${h} (${i.all})`, filter: "all" }
1586
1615
  ];
1587
- i.positive > 0 && w.push({ label: `${g} (${i.positive})`, filter: "positive" }), i.negative > 0 && w.push({ label: `${h} (${i.negative})`, filter: "negative" });
1616
+ i.positive > 0 && _.push({ label: `${g} (${i.positive})`, filter: "positive" }), i.negative > 0 && _.push({ label: `${p} (${i.negative})`, filter: "negative" });
1588
1617
  const T = document.createElement("div");
1589
1618
  T.className = "gengage-chat-review-items";
1590
1619
  function S() {
@@ -1612,7 +1641,7 @@ function ga(o, e) {
1612
1641
  T.appendChild(A);
1613
1642
  }
1614
1643
  }
1615
- for (const k of w) {
1644
+ for (const k of _) {
1616
1645
  const y = document.createElement("button");
1617
1646
  y.className = "gengage-chat-review-tab", y.type = "button", y.textContent = k.label, k.filter === l && y.classList.add("gengage-chat-review-tab--active"), y.addEventListener("click", () => {
1618
1647
  l = k.filter;
@@ -1629,16 +1658,16 @@ function ga(o, e) {
1629
1658
  f.type = "button", f.className = "gengage-chat-review-pill", f.dataset.tone = A.sentiment, f.dataset.tag = y, y === c && f.classList.add("gengage-chat-review-pill--active");
1630
1659
  const C = document.createElement("span");
1631
1660
  C.className = "gengage-chat-review-pill-icon", C.textContent = A.sentiment === "positive" ? "✓" : A.sentiment === "negative" ? "✕" : "●", f.appendChild(C);
1632
- const M = document.createElement("span");
1633
- if (M.textContent = y, f.appendChild(M), A.count > 1) {
1634
- const H = document.createElement("span");
1635
- H.className = "gengage-chat-review-pill-count", H.textContent = String(A.count), f.appendChild(H);
1661
+ const B = document.createElement("span");
1662
+ if (B.textContent = y, f.appendChild(B), A.count > 1) {
1663
+ const U = document.createElement("span");
1664
+ U.className = "gengage-chat-review-pill-count", U.textContent = String(A.count), f.appendChild(U);
1636
1665
  }
1637
1666
  f.addEventListener("click", () => {
1638
1667
  c = c === y ? null : y;
1639
- for (const H of k.querySelectorAll(".gengage-chat-review-pill")) {
1640
- const x = c !== null && H.dataset.tag === c;
1641
- H.classList.toggle("gengage-chat-review-pill--active", x);
1668
+ for (const U of k.querySelectorAll(".gengage-chat-review-pill")) {
1669
+ const x = c !== null && U.dataset.tag === c;
1670
+ U.classList.toggle("gengage-chat-review-pill--active", x);
1642
1671
  }
1643
1672
  S();
1644
1673
  }), k.appendChild(f);
@@ -1647,23 +1676,23 @@ function ga(o, e) {
1647
1676
  }
1648
1677
  return S(), t.appendChild(T), t;
1649
1678
  }
1650
- function Ve(o) {
1679
+ function je(o) {
1651
1680
  const e = o.product.sku;
1652
1681
  if (typeof e == "string" && e.length > 0) return e;
1653
1682
  const t = o.action?.payload;
1654
1683
  return t && typeof t == "object" && "sku" in t && typeof t.sku == "string" ? t.sku : null;
1655
1684
  }
1656
- const da = {
1685
+ const pa = {
1657
1686
  winner: "roleWinner",
1658
1687
  best_value: "roleBestValue",
1659
1688
  best_alternative: "roleBestAlternative"
1660
1689
  };
1661
- function je(o, e) {
1690
+ function We(o, e) {
1662
1691
  if (!o || !e) return null;
1663
- const t = da[o];
1692
+ const t = pa[o];
1664
1693
  return t ? e[t] ?? o : o;
1665
1694
  }
1666
- function pa(o, e) {
1695
+ function ua(o, e) {
1667
1696
  const t = document.createElement("div");
1668
1697
  t.className = "gengage-chat-ai-top-picks";
1669
1698
  const a = o.props?.suggestions ?? [];
@@ -1673,87 +1702,87 @@ function pa(o, e) {
1673
1702
  const i = document.createElement("div");
1674
1703
  i.className = "gengage-chat-ai-top-picks-cards";
1675
1704
  for (let r = 0; r < a.length; r++) {
1676
- const s = a[r], c = s.role === "winner" || r === 0 ? ha(s, e) : ua(s, e);
1705
+ const s = a[r], c = s.role === "winner" || r === 0 ? ma(s, e) : fa(s, e);
1677
1706
  i.appendChild(c);
1678
1707
  }
1679
1708
  return t.appendChild(i), t;
1680
1709
  }
1681
- function ha(o, e) {
1710
+ function ma(o, e) {
1682
1711
  const t = document.createElement("div");
1683
1712
  t.className = "gengage-chat-ai-toppick-card gengage-chat-ai-toppick-card--winner";
1684
1713
  const a = document.createElement("span");
1685
- a.className = "gengage-chat-ai-toppick-badge", a.textContent = je(o.role, e.i18n) ?? e.i18n?.roleWinner ?? "TOP MATCH", t.appendChild(a);
1714
+ a.className = "gengage-chat-ai-toppick-badge", a.textContent = We(o.role, e.i18n) ?? e.i18n?.roleWinner ?? "TOP MATCH", t.appendChild(a);
1686
1715
  const n = o.product, i = n.discountPercent;
1687
1716
  if (typeof i == "number" && i > 0) {
1688
- const p = document.createElement("span");
1689
- p.className = "gengage-chat-ai-toppick-discount-badge", p.textContent = `%${_e(i)}`, t.appendChild(p);
1717
+ const h = document.createElement("span");
1718
+ h.className = "gengage-chat-ai-toppick-discount-badge", h.textContent = `%${we(i)}`, t.appendChild(h);
1690
1719
  }
1691
1720
  const r = n.imageUrl;
1692
- if (r && te(r)) {
1693
- const p = document.createElement("img");
1694
- p.className = "gengage-chat-ai-toppick-img", V(p, "src", r), p.loading = "lazy", p.alt = n.name || "Product image", re(p), t.appendChild(p);
1721
+ if (r && ae(r)) {
1722
+ const h = document.createElement("img");
1723
+ h.className = "gengage-chat-ai-toppick-img", V(h, "src", r), h.loading = "lazy", h.alt = n.name || "Product image", re(h), t.appendChild(h);
1695
1724
  }
1696
1725
  const s = document.createElement("div");
1697
1726
  s.className = "gengage-chat-ai-toppick-body";
1698
1727
  const l = n.name;
1699
1728
  if (l) {
1700
- const p = document.createElement("div");
1701
- p.className = "gengage-chat-ai-toppick-name", p.textContent = l, s.appendChild(p);
1729
+ const h = document.createElement("div");
1730
+ h.className = "gengage-chat-ai-toppick-name", h.textContent = l, s.appendChild(h);
1702
1731
  }
1703
1732
  if (o.reason) {
1704
- const p = document.createElement("div");
1705
- p.className = "gengage-chat-ai-toppick-reason", p.textContent = o.reason, s.appendChild(p);
1733
+ const h = document.createElement("div");
1734
+ h.className = "gengage-chat-ai-toppick-reason", h.textContent = o.reason, s.appendChild(h);
1706
1735
  }
1707
- if (o.labels && o.labels.length > 0 && s.appendChild(We(o.labels)), typeof o.expertQualityScore == "number") {
1708
- const p = document.createElement("div");
1709
- p.className = "gengage-chat-ai-toppick-score";
1710
- let g = o.expertQualityScore, h = 10;
1711
- g > 10 ? g = Math.round(g) / 10 : g <= 5 && (h = 5), p.textContent = `${g}/${h}`, s.appendChild(p);
1736
+ if (o.labels && o.labels.length > 0 && s.appendChild($e(o.labels)), typeof o.expertQualityScore == "number") {
1737
+ const h = document.createElement("div");
1738
+ h.className = "gengage-chat-ai-toppick-score";
1739
+ let g = o.expertQualityScore, p = 10;
1740
+ g > 10 ? g = Math.round(g) / 10 : g <= 5 && (p = 5), h.textContent = `${g}/${p}`, s.appendChild(h);
1712
1741
  }
1713
1742
  if (o.reviewHighlight) {
1714
- const p = document.createElement("blockquote");
1715
- p.className = "gengage-chat-ai-toppick-review", p.textContent = o.reviewHighlight, s.appendChild(p);
1743
+ const h = document.createElement("blockquote");
1744
+ h.className = "gengage-chat-ai-toppick-review", h.textContent = o.reviewHighlight, s.appendChild(h);
1716
1745
  }
1717
1746
  const c = n.price, d = n.originalPrice;
1718
1747
  if (c) {
1719
- const p = document.createElement("div");
1720
- if (p.className = "gengage-chat-ai-toppick-price", d && d !== c) {
1721
- const h = document.createElement("span");
1722
- h.className = "gengage-chat-ai-toppick-original-price", h.textContent = j(d, e.pricing), p.appendChild(h), p.appendChild(document.createTextNode(" "));
1748
+ const h = document.createElement("div");
1749
+ if (h.className = "gengage-chat-ai-toppick-price", d && d !== c) {
1750
+ const p = document.createElement("span");
1751
+ p.className = "gengage-chat-ai-toppick-original-price", p.textContent = j(d, e.pricing), h.appendChild(p), h.appendChild(document.createTextNode(" "));
1723
1752
  }
1724
1753
  const g = document.createElement("span");
1725
- g.textContent = j(c, e.pricing), p.appendChild(g), s.appendChild(p);
1754
+ g.textContent = j(c, e.pricing), h.appendChild(g), s.appendChild(h);
1726
1755
  }
1727
1756
  if (t.appendChild(s), o.action) {
1728
- const p = Ve(o), g = n.url ?? "", h = document.createElement("div");
1729
- h.className = "gengage-chat-ai-toppick-spinner", h.style.display = p && e.topPicksLoadingSku === p ? "" : "none", t.appendChild(h);
1730
- const w = document.createElement("button");
1731
- w.className = "gengage-chat-ai-toppick-cta", w.type = "button", w.textContent = e.i18n?.viewDetails ?? "View Details", w.addEventListener("click", () => {
1732
- if (o.action?.type === "findSimilar" && p && e.onProductClick) {
1733
- e.onProductClick({ sku: p, url: g });
1757
+ const h = je(o), g = n.url ?? "", p = document.createElement("div");
1758
+ p.className = "gengage-chat-ai-toppick-spinner", p.style.display = h && e.topPicksLoadingSku === h ? "" : "none", t.appendChild(p);
1759
+ const _ = document.createElement("button");
1760
+ _.className = "gengage-chat-ai-toppick-cta", _.type = "button", _.textContent = e.i18n?.viewDetails ?? "View Details", _.addEventListener("click", () => {
1761
+ if (o.action?.type === "findSimilar" && h && e.onProductClick) {
1762
+ e.onProductClick({ sku: h, url: g });
1734
1763
  return;
1735
1764
  }
1736
1765
  e.onAction(o.action);
1737
- }), t.appendChild(w);
1766
+ }), t.appendChild(_);
1738
1767
  }
1739
1768
  return t;
1740
1769
  }
1741
- function ua(o, e) {
1770
+ function fa(o, e) {
1742
1771
  const t = document.createElement("div");
1743
1772
  t.className = "gengage-chat-ai-toppick-card gengage-chat-ai-toppick-card--compact";
1744
1773
  const a = o.product, n = a.discountPercent;
1745
1774
  if (typeof n == "number" && n > 0) {
1746
1775
  const d = document.createElement("span");
1747
- d.className = "gengage-chat-ai-toppick-discount-badge", d.textContent = `%${_e(n)}`, t.appendChild(d);
1776
+ d.className = "gengage-chat-ai-toppick-discount-badge", d.textContent = `%${we(n)}`, t.appendChild(d);
1748
1777
  }
1749
1778
  const i = a.imageUrl;
1750
- if (i && te(i)) {
1779
+ if (i && ae(i)) {
1751
1780
  const d = document.createElement("img");
1752
1781
  d.className = "gengage-chat-ai-toppick-img", V(d, "src", i), d.loading = "lazy", d.alt = a.name || "Product image", re(d), t.appendChild(d);
1753
1782
  }
1754
1783
  const r = document.createElement("div");
1755
1784
  r.className = "gengage-chat-ai-toppick-body";
1756
- const s = je(o.role, e.i18n);
1785
+ const s = We(o.role, e.i18n);
1757
1786
  if (s) {
1758
1787
  const d = document.createElement("div");
1759
1788
  d.className = "gengage-chat-ai-toppick-role", d.textContent = s, r.appendChild(d);
@@ -1767,27 +1796,27 @@ function ua(o, e) {
1767
1796
  const d = document.createElement("div");
1768
1797
  d.className = "gengage-chat-ai-toppick-reason", d.textContent = o.reason, r.appendChild(d);
1769
1798
  }
1770
- o.labels && o.labels.length > 0 && r.appendChild(We(o.labels));
1799
+ o.labels && o.labels.length > 0 && r.appendChild($e(o.labels));
1771
1800
  const c = a.price;
1772
1801
  if (c) {
1773
1802
  const d = document.createElement("div");
1774
1803
  d.className = "gengage-chat-ai-toppick-price", d.textContent = j(c, e.pricing), r.appendChild(d);
1775
1804
  }
1776
1805
  if (t.appendChild(r), o.action) {
1777
- const d = Ve(o), p = a.url ?? "", g = document.createElement("div");
1806
+ const d = je(o), h = a.url ?? "", g = document.createElement("div");
1778
1807
  g.className = "gengage-chat-ai-toppick-spinner", g.style.display = d && e.topPicksLoadingSku === d ? "" : "none", t.appendChild(g);
1779
- const h = document.createElement("button");
1780
- h.className = "gengage-chat-ai-toppick-cta", h.type = "button", h.textContent = e.i18n?.viewDetails ?? "View Details", h.addEventListener("click", () => {
1808
+ const p = document.createElement("button");
1809
+ p.className = "gengage-chat-ai-toppick-cta", p.type = "button", p.textContent = e.i18n?.viewDetails ?? "View Details", p.addEventListener("click", () => {
1781
1810
  if (o.action?.type === "findSimilar" && d && e.onProductClick) {
1782
- e.onProductClick({ sku: d, url: p });
1811
+ e.onProductClick({ sku: d, url: h });
1783
1812
  return;
1784
1813
  }
1785
1814
  e.onAction(o.action);
1786
- }), t.appendChild(h);
1815
+ }), t.appendChild(p);
1787
1816
  }
1788
1817
  return t;
1789
1818
  }
1790
- function We(o) {
1819
+ function $e(o) {
1791
1820
  const e = document.createElement("div");
1792
1821
  e.className = "gengage-chat-ai-toppick-labels";
1793
1822
  for (const t of o) {
@@ -1796,7 +1825,7 @@ function We(o) {
1796
1825
  }
1797
1826
  return e;
1798
1827
  }
1799
- function ma(o, e) {
1828
+ function ba(o, e) {
1800
1829
  const t = document.createElement("div");
1801
1830
  t.className = "gengage-chat-grounding-review";
1802
1831
  const a = o.props ?? {}, n = a.title, i = a.reviewCount, r = a.action, s = e.i18n?.groundingReviewCta ?? "Read Reviews", l = document.createElement("span");
@@ -1807,14 +1836,16 @@ function ma(o, e) {
1807
1836
  if (d.className = "gengage-chat-grounding-review-title", d.textContent = n ?? e.i18n?.customerReviewsTitle ?? "Customer Reviews", c.appendChild(d), i) {
1808
1837
  const g = document.createElement("div");
1809
1838
  g.className = "gengage-chat-grounding-review-subtitle";
1810
- const h = e.i18n?.groundingReviewSubtitle ?? "{count} yorum mevcut";
1811
- g.textContent = h.replace("{count}", i), c.appendChild(g);
1839
+ const p = e.i18n?.groundingReviewSubtitle ?? "{count} yorum mevcut";
1840
+ g.textContent = p.replace("{count}", i), c.appendChild(g);
1812
1841
  }
1813
1842
  t.appendChild(c);
1814
- const p = document.createElement("span");
1815
- return p.className = "gengage-chat-grounding-review-cta", p.textContent = `${s} →`, t.appendChild(p), r && (t.style.cursor = "pointer", t.addEventListener("click", () => e.onAction(r))), t;
1843
+ const h = document.createElement("span");
1844
+ return h.className = "gengage-chat-grounding-review-cta", h.textContent = `${s} →`, t.appendChild(h), r && (t.style.cursor = "pointer", t.setAttribute("role", "button"), t.setAttribute("tabindex", "0"), t.addEventListener("click", () => e.onAction(r)), t.addEventListener("keydown", (g) => {
1845
+ (g.key === "Enter" || g.key === " ") && (g.preventDefault(), e.onAction(r));
1846
+ })), t;
1816
1847
  }
1817
- function fa(o) {
1848
+ function va(o) {
1818
1849
  if (o.action.type !== "findSimilar") return o.action;
1819
1850
  const e = o.action.payload && typeof o.action.payload == "object" ? o.action.payload : null, t = typeof e?.input == "string" && e.input.trim() || typeof e?.text == "string" && e.text.trim() || o.name.trim();
1820
1851
  if (!t) return o.action;
@@ -1832,14 +1863,14 @@ function fa(o) {
1832
1863
  payload: a
1833
1864
  };
1834
1865
  }
1835
- function ba(o, e) {
1866
+ function xa(o, e) {
1836
1867
  const t = document.createElement("div");
1837
1868
  t.className = "gengage-chat-grouping-cards";
1838
1869
  const a = o.props?.entries ?? [];
1839
1870
  if (a.length === 0) return t;
1840
1871
  for (const n of a) {
1841
1872
  const i = document.createElement("div");
1842
- if (i.className = "gengage-chat-grouping-card", i.style.cursor = "pointer", i.addEventListener("click", () => e.onAction(fa(n))), n.image && te(n.image)) {
1873
+ if (i.className = "gengage-chat-grouping-card", i.style.cursor = "pointer", i.addEventListener("click", () => e.onAction(va(n))), n.image && ae(n.image)) {
1843
1874
  const c = document.createElement("img");
1844
1875
  c.className = "gengage-chat-grouping-card-img", c.src = n.image, c.alt = n.name, c.width = 20, c.height = 20, i.appendChild(c);
1845
1876
  }
@@ -1860,14 +1891,14 @@ function ba(o, e) {
1860
1891
  }
1861
1892
  return t;
1862
1893
  }
1863
- function va(o, e) {
1894
+ function _a(o, e) {
1864
1895
  const t = document.createElement("div");
1865
1896
  t.className = "gengage-chat-suggested-search-cards";
1866
1897
  const a = o.props?.entries ?? [];
1867
1898
  if (a.length === 0) return t;
1868
1899
  for (const n of a) {
1869
1900
  const i = document.createElement("div");
1870
- if (i.className = "gengage-chat-suggested-search-card", i.style.cursor = "pointer", i.addEventListener("click", () => e.onAction(n.action)), n.image && te(n.image)) {
1901
+ if (i.className = "gengage-chat-suggested-search-card", i.style.cursor = "pointer", i.addEventListener("click", () => e.onAction(n.action)), n.image && ae(n.image)) {
1871
1902
  const l = document.createElement("img");
1872
1903
  l.className = "gengage-chat-suggested-search-card-img", l.src = n.image, l.alt = n.shortName, l.width = 40, l.height = 40, i.appendChild(l);
1873
1904
  }
@@ -1886,7 +1917,7 @@ function va(o, e) {
1886
1917
  }
1887
1918
  return t;
1888
1919
  }
1889
- function xa(o, e) {
1920
+ function wa(o, e) {
1890
1921
  const t = document.createElement("button");
1891
1922
  t.className = "gengage-chat-comparison-floating-btn", t.type = "button";
1892
1923
  const a = e.i18n?.compareSelected ?? "Compare";
@@ -1898,7 +1929,7 @@ function xa(o, e) {
1898
1929
  });
1899
1930
  }), t;
1900
1931
  }
1901
- function wa(o) {
1932
+ function ya(o) {
1902
1933
  const e = document.createElement("div");
1903
1934
  e.className = "gengage-chat-pros-cons";
1904
1935
  const t = o.props?.productName;
@@ -1935,30 +1966,30 @@ function wa(o) {
1935
1966
  }
1936
1967
  return e;
1937
1968
  }
1938
- function _a(o, e) {
1969
+ function ka(o, e) {
1939
1970
  const t = o.props?.groups ?? [], a = o.props?.filterTags ?? [], n = document.createElement("div");
1940
1971
  if (n.className = "gengage-chat-categories", t.length === 0) return n;
1941
1972
  const i = document.createElement("div");
1942
1973
  i.className = "gengage-chat-categories-tabs", i.setAttribute("role", "tablist");
1943
1974
  const r = [], s = [], l = (c) => {
1944
1975
  for (let d = 0; d < r.length; d++) {
1945
- const p = d === c;
1946
- r[d].classList.toggle("gengage-chat-categories-tab--active", p), r[d].setAttribute("aria-selected", String(p)), r[d].tabIndex = p ? 0 : -1, s[d].style.display = p ? "" : "none";
1976
+ const h = d === c;
1977
+ r[d].classList.toggle("gengage-chat-categories-tab--active", h), r[d].setAttribute("aria-selected", String(h)), r[d].tabIndex = h ? 0 : -1, s[d].style.display = h ? "" : "none";
1947
1978
  }
1948
1979
  };
1949
1980
  for (let c = 0; c < t.length; c++) {
1950
- const d = t[c], p = `gengage-cat-tab-${c}`, g = `gengage-cat-panel-${c}`, h = document.createElement("button");
1951
- h.className = "gengage-chat-categories-tab", h.type = "button", h.id = p, h.setAttribute("role", "tab"), h.setAttribute("aria-controls", g), h.setAttribute("aria-selected", String(c === 0)), h.tabIndex = c === 0 ? 0 : -1, c === 0 && h.classList.add("gengage-chat-categories-tab--active"), h.textContent = d.groupName, h.addEventListener("click", () => l(c)), h.addEventListener("keydown", (T) => {
1981
+ const d = t[c], h = `gengage-cat-tab-${c}`, g = `gengage-cat-panel-${c}`, p = document.createElement("button");
1982
+ p.className = "gengage-chat-categories-tab", p.type = "button", p.id = h, p.setAttribute("role", "tab"), p.setAttribute("aria-controls", g), p.setAttribute("aria-selected", String(c === 0)), p.tabIndex = c === 0 ? 0 : -1, c === 0 && p.classList.add("gengage-chat-categories-tab--active"), p.textContent = d.groupName, p.addEventListener("click", () => l(c)), p.addEventListener("keydown", (T) => {
1952
1983
  let S = -1;
1953
1984
  T.key === "ArrowRight" || T.key === "ArrowDown" ? S = (c + 1) % t.length : T.key === "ArrowLeft" || T.key === "ArrowUp" ? S = (c - 1 + t.length) % t.length : T.key === "Home" ? S = 0 : T.key === "End" && (S = t.length - 1), S >= 0 && (T.preventDefault(), l(S), r[S].focus());
1954
- }), r.push(h), i.appendChild(h);
1955
- const w = document.createElement("div");
1956
- w.className = "gengage-chat-categories-grid", w.id = g, w.setAttribute("role", "tabpanel"), w.setAttribute("aria-labelledby", p), c !== 0 && (w.style.display = "none");
1985
+ }), r.push(p), i.appendChild(p);
1986
+ const _ = document.createElement("div");
1987
+ _.className = "gengage-chat-categories-grid", _.id = g, _.setAttribute("role", "tabpanel"), _.setAttribute("aria-labelledby", h), c !== 0 && (_.style.display = "none");
1957
1988
  for (const T of d.products) {
1958
- const S = ya(T, e);
1959
- w.appendChild(S);
1989
+ const S = Ca(T, e);
1990
+ _.appendChild(S);
1960
1991
  }
1961
- s.push(w);
1992
+ s.push(_);
1962
1993
  }
1963
1994
  n.appendChild(i);
1964
1995
  for (const c of s) n.appendChild(c);
@@ -1966,18 +1997,18 @@ function _a(o, e) {
1966
1997
  const c = document.createElement("div");
1967
1998
  c.className = "gengage-chat-categories-filter-tags";
1968
1999
  for (const d of a) {
1969
- const p = document.createElement("button");
1970
- p.className = "gengage-chat-categories-filter-tag", p.type = "button", p.textContent = d.title, d.action && p.addEventListener("click", () => {
2000
+ const h = document.createElement("button");
2001
+ h.className = "gengage-chat-categories-filter-tag", h.type = "button", h.textContent = d.title, d.action && h.addEventListener("click", () => {
1971
2002
  e.onAction(d.action);
1972
- }), c.appendChild(p);
2003
+ }), c.appendChild(h);
1973
2004
  }
1974
2005
  n.appendChild(c);
1975
2006
  }
1976
2007
  return n;
1977
2008
  }
1978
- function ya(o, e) {
2009
+ function Ca(o, e) {
1979
2010
  const t = document.createElement("div");
1980
- if (t.className = "gengage-chat-product-card", o.imageUrl && te(o.imageUrl)) {
2011
+ if (t.className = "gengage-chat-product-card", o.imageUrl && ae(o.imageUrl)) {
1981
2012
  const i = document.createElement("img");
1982
2013
  i.className = "gengage-chat-product-card-img", i.src = o.imageUrl, i.alt = o.name, i.loading = "lazy", re(i), t.appendChild(i);
1983
2014
  }
@@ -1992,7 +2023,7 @@ function ya(o, e) {
1992
2023
  e.onProductSelect?.(o);
1993
2024
  })), t;
1994
2025
  }
1995
- function ka(o, e) {
2026
+ function Ea(o, e) {
1996
2027
  const t = document.createElement("div");
1997
2028
  t.className = "gengage-chat-handoff-notice", t.setAttribute("role", "alert");
1998
2029
  const a = document.createElement("span");
@@ -2006,83 +2037,83 @@ function ka(o, e) {
2006
2037
  }
2007
2038
  return t;
2008
2039
  }
2009
- function Ca(o, e) {
2040
+ function Sa(o, e) {
2010
2041
  const t = o.props?.product ?? o.props, a = document.createElement("div");
2011
2042
  if (a.className = "gengage-chat-product-summary", !t) return a;
2012
- a.style.cursor = "pointer", a.addEventListener("click", (h) => {
2013
- h.target.closest("a") || e.onProductSelect?.(t);
2043
+ a.style.cursor = "pointer", a.addEventListener("click", (p) => {
2044
+ p.target.closest("a") || e.onProductSelect?.(t);
2014
2045
  });
2015
2046
  const n = t.imageUrl;
2016
- if (n && $(n)) {
2017
- const h = document.createElement("div");
2018
- h.className = "gengage-chat-product-summary__image";
2019
- const w = document.createElement("img");
2020
- w.loading = "lazy", V(w, "src", n);
2047
+ if (n && W(n)) {
2048
+ const p = document.createElement("div");
2049
+ p.className = "gengage-chat-product-summary__image";
2050
+ const _ = document.createElement("img");
2051
+ _.loading = "lazy", V(_, "src", n);
2021
2052
  const T = t.name;
2022
- w.alt = T || "Product image", re(w), h.appendChild(w), a.appendChild(h);
2053
+ _.alt = T || "Product image", re(_), p.appendChild(_), a.appendChild(p);
2023
2054
  }
2024
2055
  const i = document.createElement("div");
2025
2056
  i.className = "gengage-chat-product-summary__content";
2026
2057
  const r = t.brand, s = t.name;
2027
2058
  if (s) {
2028
- const h = document.createElement("div");
2029
- h.className = "gengage-chat-product-summary__name";
2059
+ const p = document.createElement("div");
2060
+ p.className = "gengage-chat-product-summary__name";
2030
2061
  const T = r && !s.toLowerCase().startsWith(r.toLowerCase()) ? `${r} ${s}` : s;
2031
- h.textContent = T, h.title = T, i.appendChild(h);
2062
+ p.textContent = T, p.title = T, i.appendChild(p);
2032
2063
  }
2033
2064
  const l = t.rating, c = t.reviewCount;
2034
2065
  if (typeof l == "number" && Number.isFinite(l) && l > 0) {
2035
- const h = document.createElement("div");
2036
- if (h.className = "gengage-chat-product-summary__rating", h.appendChild(He(l)), typeof c == "number" && Number.isFinite(c)) {
2037
- const w = document.createElement("span");
2038
- w.className = "gengage-chat-product-summary__review-count", w.textContent = ` (${c})`, h.appendChild(w);
2066
+ const p = document.createElement("div");
2067
+ if (p.className = "gengage-chat-product-summary__rating", p.appendChild(Ue(l)), typeof c == "number" && Number.isFinite(c)) {
2068
+ const _ = document.createElement("span");
2069
+ _.className = "gengage-chat-product-summary__review-count", _.textContent = ` (${c})`, p.appendChild(_);
2039
2070
  }
2040
- i.appendChild(h);
2071
+ i.appendChild(p);
2041
2072
  }
2042
- const d = t.price, p = t.originalPrice;
2073
+ const d = t.price, h = t.originalPrice;
2043
2074
  if (d) {
2044
- const h = document.createElement("div");
2045
- if (h.className = "gengage-chat-product-summary__price", p && p !== d) {
2075
+ const p = document.createElement("div");
2076
+ if (p.className = "gengage-chat-product-summary__price", h && h !== d) {
2046
2077
  const T = document.createElement("span");
2047
- T.className = "gengage-chat-product-summary__price-original", T.textContent = j(p, e.pricing), h.appendChild(T), h.appendChild(document.createTextNode(" "));
2078
+ T.className = "gengage-chat-product-summary__price-original", T.textContent = j(h, e.pricing), p.appendChild(T), p.appendChild(document.createTextNode(" "));
2048
2079
  }
2049
- const w = document.createElement("span");
2050
- w.className = "gengage-chat-product-summary__price-current", w.textContent = j(d, e.pricing), h.appendChild(w), i.appendChild(h);
2080
+ const _ = document.createElement("span");
2081
+ _.className = "gengage-chat-product-summary__price-current", _.textContent = j(d, e.pricing), p.appendChild(_), i.appendChild(p);
2051
2082
  }
2052
2083
  a.appendChild(i);
2053
2084
  const g = t.url;
2054
- if (g && $(g)) {
2055
- const h = document.createElement("a");
2056
- h.className = "gengage-chat-product-summary__cta", V(h, "href", g), V(h, "target", "_blank"), V(h, "rel", "noopener noreferrer"), h.textContent = e.i18n?.productCtaLabel ?? "View", a.appendChild(h);
2085
+ if (g && W(g)) {
2086
+ const p = document.createElement("a");
2087
+ p.className = "gengage-chat-product-summary__cta", V(p, "href", g), V(p, "target", "_blank"), V(p, "rel", "noopener noreferrer"), p.textContent = e.i18n?.productCtaLabel ?? "View", a.appendChild(p);
2057
2088
  }
2058
2089
  return a;
2059
2090
  }
2060
- function $e() {
2091
+ function Ye() {
2061
2092
  return window.innerWidth < 768;
2062
2093
  }
2063
- const Ye = {
2064
- ActionButtons: ({ element: o, context: e }) => Ta(o, e),
2065
- ActionButton: ({ element: o, context: e }) => La(o, e),
2066
- ProductCard: ({ element: o, context: e }) => Pa(o, e),
2067
- ProductDetailsPanel: ({ element: o, context: e }) => Aa(o, e),
2068
- ProductGrid: ({ element: o, spec: e, renderElement: t, context: a }) => Ma(o, e, t, a),
2069
- ReviewHighlights: ({ element: o, context: e }) => ga(o, {
2094
+ const Ge = {
2095
+ ActionButtons: ({ element: o, context: e }) => Pa(o, e),
2096
+ ActionButton: ({ element: o, context: e }) => Aa(o, e),
2097
+ ProductCard: ({ element: o, context: e }) => Ia(o, e),
2098
+ ProductDetailsPanel: ({ element: o, context: e }) => Na(o, e),
2099
+ ProductGrid: ({ element: o, spec: e, renderElement: t, context: a }) => za(o, e, t, a),
2100
+ ReviewHighlights: ({ element: o, context: e }) => ha(o, {
2070
2101
  emptyReviewsMessage: e.i18n?.emptyReviewsMessage,
2071
2102
  reviewFilterAll: e.i18n?.reviewFilterAll,
2072
2103
  reviewFilterPositive: e.i18n?.reviewFilterPositive,
2073
2104
  reviewFilterNegative: e.i18n?.reviewFilterNegative
2074
2105
  }),
2075
- ComparisonTable: ({ element: o, context: e }) => Ba(o, e),
2076
- AITopPicks: ({ element: o, context: e }) => pa(o, e),
2077
- GroundingReviewCard: ({ element: o, context: e }) => ma(o, e),
2078
- AIGroupingCards: ({ element: o, context: e }) => ba(o, e),
2079
- AISuggestedSearchCards: ({ element: o, context: e }) => va(o, e),
2080
- ProsAndCons: ({ element: o }) => wa(o),
2081
- CategoriesContainer: ({ element: o, context: e }) => _a(o, e),
2082
- HandoffNotice: ({ element: o, context: e }) => ka(o, e),
2083
- ProductSummaryCard: ({ element: o, context: e }) => Ca(o, e),
2084
- Divider: ({ element: o }) => za(o)
2085
- }, Ge = ({
2106
+ ComparisonTable: ({ element: o, context: e }) => Ra(o, e),
2107
+ AITopPicks: ({ element: o, context: e }) => ua(o, e),
2108
+ GroundingReviewCard: ({ element: o, context: e }) => ba(o, e),
2109
+ AIGroupingCards: ({ element: o, context: e }) => xa(o, e),
2110
+ AISuggestedSearchCards: ({ element: o, context: e }) => _a(o, e),
2111
+ ProsAndCons: ({ element: o }) => ya(o),
2112
+ CategoriesContainer: ({ element: o, context: e }) => ka(o, e),
2113
+ HandoffNotice: ({ element: o, context: e }) => Ea(o, e),
2114
+ ProductSummaryCard: ({ element: o, context: e }) => Sa(o, e),
2115
+ Divider: ({ element: o }) => Fa(o)
2116
+ }, Ke = ({
2086
2117
  element: o,
2087
2118
  renderElement: e
2088
2119
  }) => {
@@ -2095,11 +2126,11 @@ const Ye = {
2095
2126
  }
2096
2127
  return t;
2097
2128
  };
2098
- function Ea() {
2099
- return { ...Ye };
2129
+ function Ta() {
2130
+ return { ...Ge };
2100
2131
  }
2101
- function Sa(o, e, t = Ye, a = Ge) {
2102
- return nt({
2132
+ function La(o, e, t = Ge, a = Ke) {
2133
+ return it({
2103
2134
  spec: o,
2104
2135
  context: e,
2105
2136
  registry: t,
@@ -2107,7 +2138,7 @@ function Sa(o, e, t = Ye, a = Ge) {
2107
2138
  unknownRenderer: a
2108
2139
  });
2109
2140
  }
2110
- function Ta(o, e) {
2141
+ function Pa(o, e) {
2111
2142
  const t = document.createElement("div");
2112
2143
  t.className = "gengage-chat-action-buttons";
2113
2144
  const a = o.props?.buttons;
@@ -2118,7 +2149,7 @@ function Ta(o, e) {
2118
2149
  }
2119
2150
  return t;
2120
2151
  }
2121
- function La(o, e) {
2152
+ function Aa(o, e) {
2122
2153
  const t = document.createElement("button");
2123
2154
  t.className = "gengage-chat-action-btn";
2124
2155
  const a = o.props?.label;
@@ -2126,7 +2157,7 @@ function La(o, e) {
2126
2157
  const n = o.props?.action;
2127
2158
  return n && t.addEventListener("click", () => e.onAction(n)), t;
2128
2159
  }
2129
- function Pa(o, e) {
2160
+ function Ia(o, e) {
2130
2161
  const t = document.createElement("div");
2131
2162
  t.className = "gengage-chat-product-card";
2132
2163
  const a = o.props?.product ?? o.props;
@@ -2136,17 +2167,17 @@ function Pa(o, e) {
2136
2167
  t.parentElement?.classList.contains("gengage-chat-comparison-select-wrapper") || f.target.closest(".gengage-chat-product-card-atc") || f.target.closest(".gengage-chat-product-card-cta") || e.onProductSelect?.(a);
2137
2168
  }));
2138
2169
  const i = a.imageUrl;
2139
- if (i && $(i)) {
2170
+ if (i && W(i)) {
2140
2171
  const f = document.createElement("div");
2141
2172
  f.className = "gengage-chat-product-card-img-wrapper";
2142
2173
  const C = document.createElement("img");
2143
2174
  C.className = "gengage-chat-product-card-img", C.loading = "lazy", V(C, "src", i);
2144
- const M = a.name;
2145
- M && (C.alt = M), re(C), f.appendChild(C);
2146
- const H = a.discountPercent;
2147
- if (typeof H == "number" && H > 0) {
2175
+ const B = a.name;
2176
+ B && (C.alt = B), re(C), f.appendChild(C);
2177
+ const U = a.discountPercent;
2178
+ if (typeof U == "number" && U > 0) {
2148
2179
  const m = document.createElement("span");
2149
- m.className = "gengage-chat-product-card-discount-badge", m.textContent = `%${_e(H)}`, f.appendChild(m);
2180
+ m.className = "gengage-chat-product-card-discount-badge", m.textContent = `%${we(U)}`, f.appendChild(m);
2150
2181
  }
2151
2182
  const x = a.sku;
2152
2183
  if (x) {
@@ -2165,11 +2196,11 @@ function Pa(o, e) {
2165
2196
  m.className = "gengage-chat-favorite-btn", m.type = "button", m.setAttribute("aria-label", e.i18n?.addToFavoritesLabel ?? "Add to favorites");
2166
2197
  const E = e.favoritedSkus?.has(u) ?? !1;
2167
2198
  E && m.classList.add("gengage-chat-favorite-btn--active");
2168
- const _ = E ? "currentColor" : "none";
2169
- m.innerHTML = `<svg width="16" height="16" viewBox="0 0 24 24" fill="${_}" stroke="currentColor" stroke-width="2"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>`, m.addEventListener("click", (L) => {
2199
+ const w = E ? "currentColor" : "none";
2200
+ m.innerHTML = `<svg width="16" height="16" viewBox="0 0 24 24" fill="${w}" stroke="currentColor" stroke-width="2"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>`, m.addEventListener("click", (L) => {
2170
2201
  L.stopPropagation(), m.classList.toggle("gengage-chat-favorite-btn--active");
2171
- const B = m.querySelector("svg");
2172
- B && B.setAttribute(
2202
+ const N = m.querySelector("svg");
2203
+ N && N.setAttribute(
2173
2204
  "fill",
2174
2205
  m.classList.contains("gengage-chat-favorite-btn--active") ? "currentColor" : "none"
2175
2206
  ), e.onFavoriteToggle(u, a);
@@ -2192,33 +2223,33 @@ function Pa(o, e) {
2192
2223
  const c = a.rating, d = a.reviewCount;
2193
2224
  if (typeof c == "number" && Number.isFinite(c) && c > 0) {
2194
2225
  const f = document.createElement("div");
2195
- if (f.className = "gengage-chat-product-card-rating", f.appendChild(He(c)), typeof d == "number" && Number.isFinite(d)) {
2226
+ if (f.className = "gengage-chat-product-card-rating", f.appendChild(Ue(c)), typeof d == "number" && Number.isFinite(d)) {
2196
2227
  const C = document.createElement("span");
2197
2228
  C.className = "gengage-chat-product-card-review-count", C.textContent = ` (${d})`, f.appendChild(C);
2198
2229
  }
2199
2230
  r.appendChild(f);
2200
2231
  }
2201
- const p = a.price, g = a.originalPrice;
2232
+ const h = a.price, g = a.originalPrice;
2202
2233
  if (a.price_async === !0) {
2203
2234
  const f = document.createElement("div");
2204
2235
  f.className = "gengage-chat-product-card-price";
2205
2236
  const C = document.createElement("span");
2206
2237
  C.className = "gengage-chat-price-skeleton", f.appendChild(C), r.appendChild(f), setTimeout(() => {
2207
- C.parentElement && (p && parseFloat(p) > 0 ? C.replaceWith(document.createTextNode(j(p, e.pricing))) : C.remove());
2238
+ C.parentElement && (h && parseFloat(h) > 0 ? C.replaceWith(document.createTextNode(j(h, e.pricing))) : C.remove());
2208
2239
  }, 300);
2209
- } else if (p && parseFloat(p) > 0) {
2240
+ } else if (h && parseFloat(h) > 0) {
2210
2241
  const f = document.createElement("div");
2211
- if (f.className = "gengage-chat-product-card-price", g && g !== p) {
2212
- const M = document.createElement("span");
2213
- M.className = "gengage-chat-product-card-original-price", M.textContent = j(g, e.pricing), f.appendChild(M), f.appendChild(document.createTextNode(" "));
2242
+ if (f.className = "gengage-chat-product-card-price", g && g !== h) {
2243
+ const B = document.createElement("span");
2244
+ B.className = "gengage-chat-product-card-original-price", B.textContent = j(g, e.pricing), f.appendChild(B), f.appendChild(document.createTextNode(" "));
2214
2245
  }
2215
2246
  const C = document.createElement("span");
2216
- C.textContent = j(p, e.pricing), f.appendChild(C), r.appendChild(f);
2247
+ C.textContent = j(h, e.pricing), f.appendChild(C), r.appendChild(f);
2217
2248
  }
2218
- const w = a.inStock;
2219
- if (typeof w == "boolean") {
2249
+ const _ = a.inStock;
2250
+ if (typeof _ == "boolean") {
2220
2251
  const f = document.createElement("div");
2221
- f.className = `gengage-chat-product-card-stock ${w ? "is-in-stock" : "is-out-of-stock"}`, f.textContent = w ? e.i18n?.inStockLabel ?? "In Stock" : e.i18n?.outOfStockLabel ?? "Out of Stock", r.appendChild(f);
2252
+ f.className = `gengage-chat-product-card-stock ${_ ? "is-in-stock" : "is-out-of-stock"}`, f.textContent = _ ? e.i18n?.inStockLabel ?? "In Stock" : e.i18n?.outOfStockLabel ?? "Out of Stock", r.appendChild(f);
2222
2253
  }
2223
2254
  const T = a.promotions;
2224
2255
  if (T && T.length > 0) {
@@ -2226,8 +2257,8 @@ function Pa(o, e) {
2226
2257
  f.className = "gengage-chat-product-card-promos";
2227
2258
  for (const C of T.slice(0, 3)) {
2228
2259
  if (!C || /%(0(\.0+)?)\s/.test(C)) continue;
2229
- const M = document.createElement("span");
2230
- M.className = "gengage-chat-product-card-promo-badge", M.textContent = C, M.title = C, f.appendChild(M);
2260
+ const B = document.createElement("span");
2261
+ B.className = "gengage-chat-product-card-promo-badge", B.textContent = C, B.title = C, f.appendChild(B);
2231
2262
  }
2232
2263
  f.childElementCount > 0 && r.appendChild(f);
2233
2264
  }
@@ -2242,7 +2273,7 @@ function Pa(o, e) {
2242
2273
  }
2243
2274
  e.onAction(y);
2244
2275
  }), t.appendChild(f);
2245
- } else if (S && $(S)) {
2276
+ } else if (S && W(S)) {
2246
2277
  const f = document.createElement("a");
2247
2278
  f.className = "gengage-chat-product-card-cta", V(f, "href", S), V(f, "target", "_blank"), V(f, "rel", "noopener noreferrer"), f.textContent = e.i18n?.productCtaLabel ?? "View", f.addEventListener("click", (C) => {
2248
2279
  if (t.parentElement?.classList.contains("gengage-chat-comparison-select-wrapper")) {
@@ -2253,8 +2284,8 @@ function Pa(o, e) {
2253
2284
  }), t.appendChild(f);
2254
2285
  }
2255
2286
  const A = a.cartCode;
2256
- if (A && k && w !== !1) {
2257
- const f = Ue({
2287
+ if (A && k && _ !== !1) {
2288
+ const f = qe({
2258
2289
  compact: !0,
2259
2290
  label: e.i18n?.addToCartButton ?? "Add to Cart",
2260
2291
  decreaseLabel: e.i18n?.decreaseLabel,
@@ -2275,13 +2306,13 @@ function Pa(o, e) {
2275
2306
  const C = document.createElement("input");
2276
2307
  return C.type = "checkbox", C.className = "gengage-chat-comparison-checkbox", C.checked = e.comparisonSelectedSkus?.includes(k) ?? !1, C.addEventListener("change", () => {
2277
2308
  e.onToggleComparisonSku?.(k);
2278
- }), f.addEventListener("click", (M) => {
2279
- M.target.closest(".gengage-chat-comparison-checkbox") || (M.stopPropagation(), e.onToggleComparisonSku?.(k));
2309
+ }), f.addEventListener("click", (B) => {
2310
+ B.target.closest(".gengage-chat-comparison-checkbox") || (B.stopPropagation(), e.onToggleComparisonSku?.(k));
2280
2311
  }), f.appendChild(C), f.appendChild(t), f;
2281
2312
  }
2282
2313
  return t;
2283
2314
  }
2284
- function Aa(o, e) {
2315
+ function Na(o, e) {
2285
2316
  const t = document.createElement("article");
2286
2317
  t.className = "gengage-chat-product-details-panel";
2287
2318
  const a = o.props?.product ?? o.props;
@@ -2292,47 +2323,47 @@ function Aa(o, e) {
2292
2323
  x.className = "gengage-chat-product-details-media gengage-chat-product-details-gallery gengage-chat-product-details-img-wrap";
2293
2324
  const u = document.createElement("img");
2294
2325
  u.className = "gengage-chat-product-details-img";
2295
- const m = n.find((P) => $(P));
2326
+ const m = n.find((P) => W(P));
2296
2327
  m && V(u, "src", m);
2297
2328
  const E = a.name;
2298
2329
  E && (u.alt = E), re(u), x.appendChild(u);
2299
- const _ = document.createElement("div");
2300
- _.className = "gengage-chat-product-gallery-thumbs";
2301
- const L = 6, B = n.filter((P) => !!P && $(P));
2302
- let R = null, F = 0;
2303
- for (let P = 0; P < B.length; P++) {
2304
- const I = B[P];
2330
+ const w = document.createElement("div");
2331
+ w.className = "gengage-chat-product-gallery-thumbs";
2332
+ const L = 6, N = n.filter((P) => !!P && W(P));
2333
+ let R = null, D = 0;
2334
+ for (let P = 0; P < N.length; P++) {
2335
+ const I = N[P];
2305
2336
  if (P >= L) break;
2306
2337
  const q = document.createElement("img");
2307
2338
  q.className = "gengage-chat-product-gallery-thumb", P === 0 && (q.classList.add("gengage-chat-product-gallery-thumb--active"), R = q), V(q, "src", I), q.alt = `${E ?? "Product"} ${P + 1}`, q.width = 48, q.height = 48, re(q), q.addEventListener("click", () => {
2308
- V(u, "src", I), R && R.classList.remove("gengage-chat-product-gallery-thumb--active"), q.classList.add("gengage-chat-product-gallery-thumb--active"), R = q, F = P;
2309
- }), _.appendChild(q);
2339
+ V(u, "src", I), R && R.classList.remove("gengage-chat-product-gallery-thumb--active"), q.classList.add("gengage-chat-product-gallery-thumb--active"), R = q, D = P;
2340
+ }), w.appendChild(q);
2310
2341
  }
2311
- if (B.length > L) {
2342
+ if (N.length > L) {
2312
2343
  const P = document.createElement("span");
2313
- P.className = "gengage-chat-product-gallery-thumb-more", P.textContent = `+${B.length - L}`, _.appendChild(P);
2344
+ P.className = "gengage-chat-product-gallery-thumb-more", P.textContent = `+${N.length - L}`, w.appendChild(P);
2314
2345
  }
2315
- let N = 0;
2316
- const D = 50;
2346
+ let M = 0;
2347
+ const H = 50;
2317
2348
  if (u.addEventListener(
2318
2349
  "touchstart",
2319
2350
  (P) => {
2320
- N = P.changedTouches[0].clientX;
2351
+ M = P.changedTouches[0].clientX;
2321
2352
  },
2322
2353
  { passive: !0 }
2323
2354
  ), u.addEventListener("touchend", (P) => {
2324
- const I = P.changedTouches[0].clientX, q = N - I;
2325
- if (Math.abs(q) < D) return;
2326
- const X = q > 0 ? Math.min(F + 1, B.length - 1) : Math.max(F - 1, 0);
2327
- if (X !== F) {
2328
- const b = B[X];
2355
+ const I = P.changedTouches[0].clientX, q = M - I;
2356
+ if (Math.abs(q) < H) return;
2357
+ const Q = q > 0 ? Math.min(D + 1, N.length - 1) : Math.max(D - 1, 0);
2358
+ if (Q !== D) {
2359
+ const b = N[Q];
2329
2360
  if (b) {
2330
2361
  V(u, "src", b);
2331
- const U = _.querySelectorAll(".gengage-chat-product-gallery-thumb");
2332
- R && R.classList.remove("gengage-chat-product-gallery-thumb--active"), X < L && U[X] ? (U[X].classList.add("gengage-chat-product-gallery-thumb--active"), R = U[X]) : R = null, F = X;
2362
+ const F = w.querySelectorAll(".gengage-chat-product-gallery-thumb");
2363
+ R && R.classList.remove("gengage-chat-product-gallery-thumb--active"), Q < L && F[Q] ? (F[Q].classList.add("gengage-chat-product-gallery-thumb--active"), R = F[Q]) : R = null, D = Q;
2333
2364
  }
2334
2365
  }
2335
- }), x.appendChild(_), r) {
2366
+ }), x.appendChild(w), r) {
2336
2367
  const P = document.createElement("button");
2337
2368
  P.className = "gengage-chat-find-similar-pill", P.type = "button", P.textContent = e.i18n?.findSimilarLabel ?? "Find Similar", P.addEventListener("click", () => {
2338
2369
  e.onAction({
@@ -2343,7 +2374,7 @@ function Aa(o, e) {
2343
2374
  }), x.appendChild(P);
2344
2375
  }
2345
2376
  t.appendChild(x);
2346
- } else if (i && $(i)) {
2377
+ } else if (i && W(i)) {
2347
2378
  const x = document.createElement("div");
2348
2379
  x.className = "gengage-chat-product-details-media gengage-chat-product-details-img-wrap";
2349
2380
  const u = document.createElement("img");
@@ -2371,38 +2402,38 @@ function Aa(o, e) {
2371
2402
  const c = a.rating, d = a.reviewCount;
2372
2403
  if (typeof c == "number" && Number.isFinite(c) && c > 0) {
2373
2404
  const x = document.createElement("div");
2374
- if (x.className = "gengage-chat-product-details-rating", x.textContent = `★ ${Pt(c).toFixed(1)}`, typeof d == "number" && Number.isFinite(d)) {
2405
+ if (x.className = "gengage-chat-product-details-rating", x.textContent = `★ ${It(c).toFixed(1)}`, typeof d == "number" && Number.isFinite(d)) {
2375
2406
  const u = document.createElement("span");
2376
2407
  u.className = "gengage-chat-product-details-review-count", u.textContent = ` (${d})`, x.appendChild(u);
2377
2408
  }
2378
2409
  s.appendChild(x);
2379
2410
  }
2380
- const p = a.price, g = a.originalPrice;
2411
+ const h = a.price, g = a.originalPrice;
2381
2412
  if (a.price_async === !0) {
2382
2413
  const x = document.createElement("div");
2383
2414
  x.className = "gengage-chat-product-details-price";
2384
2415
  const u = document.createElement("span");
2385
2416
  u.className = "gengage-chat-price-skeleton", x.appendChild(u), s.appendChild(x), setTimeout(() => {
2386
2417
  if (u.parentElement)
2387
- if (p && parseFloat(p) > 0) {
2418
+ if (h && parseFloat(h) > 0) {
2388
2419
  const m = document.createElement("span");
2389
- m.className = "gengage-chat-product-details-current-price", m.textContent = j(p, e.pricing), u.replaceWith(m);
2420
+ m.className = "gengage-chat-product-details-current-price", m.textContent = j(h, e.pricing), u.replaceWith(m);
2390
2421
  } else
2391
2422
  u.remove();
2392
2423
  }, 300);
2393
- } else if (p && parseFloat(p) > 0) {
2424
+ } else if (h && parseFloat(h) > 0) {
2394
2425
  const x = document.createElement("div");
2395
- if (x.className = "gengage-chat-product-details-price", g && g !== p) {
2426
+ if (x.className = "gengage-chat-product-details-price", g && g !== h) {
2396
2427
  const m = document.createElement("span");
2397
2428
  m.className = "gengage-chat-product-details-original-price", m.textContent = j(g, e.pricing), x.appendChild(m), x.appendChild(document.createTextNode(" "));
2398
2429
  }
2399
2430
  const u = document.createElement("span");
2400
- u.className = "gengage-chat-product-details-current-price", u.textContent = j(p, e.pricing), x.appendChild(u), s.appendChild(x);
2431
+ u.className = "gengage-chat-product-details-current-price", u.textContent = j(h, e.pricing), x.appendChild(u), s.appendChild(x);
2401
2432
  }
2402
- const w = a.inStock;
2403
- if (typeof w == "boolean") {
2433
+ const _ = a.inStock;
2434
+ if (typeof _ == "boolean") {
2404
2435
  const x = document.createElement("div");
2405
- x.className = `gengage-chat-product-details-stock ${w ? "is-in-stock" : "is-out-of-stock"}`, x.textContent = w ? e.i18n?.inStockLabel ?? "In Stock" : e.i18n?.outOfStockLabel ?? "Out of Stock", s.appendChild(x);
2436
+ x.className = `gengage-chat-product-details-stock ${_ ? "is-in-stock" : "is-out-of-stock"}`, x.textContent = _ ? e.i18n?.inStockLabel ?? "In Stock" : e.i18n?.outOfStockLabel ?? "Out of Stock", s.appendChild(x);
2406
2437
  }
2407
2438
  const T = a.promotions;
2408
2439
  if (T && T.length > 0) {
@@ -2424,16 +2455,16 @@ function Aa(o, e) {
2424
2455
  const m = document.createElement("div");
2425
2456
  m.className = "gengage-chat-product-variants-list";
2426
2457
  for (const E of S) {
2427
- const L = E.value ?? E.name ?? E.variant_name, B = E.sku;
2428
- if (!L && !B) continue;
2458
+ const L = E.value ?? E.name ?? E.variant_name, N = E.sku;
2459
+ if (!L && !N) continue;
2429
2460
  const R = document.createElement("button");
2430
2461
  R.className = "gengage-chat-product-variant-btn", R.type = "button";
2431
- const F = L ?? B ?? "", N = E.price;
2432
- N && String(N) !== String(p) ? R.textContent = `${F} - ${j(String(N), e.pricing)}` : R.textContent = F, B && R.addEventListener("click", () => {
2462
+ const D = L ?? N ?? "", M = E.price;
2463
+ M && String(M) !== String(h) ? R.textContent = `${D} - ${j(String(M), e.pricing)}` : R.textContent = D, N && R.addEventListener("click", () => {
2433
2464
  e.onAction({
2434
- title: F,
2465
+ title: D,
2435
2466
  type: "launchVariant",
2436
- payload: { sku: B }
2467
+ payload: { sku: N }
2437
2468
  });
2438
2469
  }), m.appendChild(R);
2439
2470
  }
@@ -2447,15 +2478,15 @@ function Aa(o, e) {
2447
2478
  x.className = "gengage-chat-product-details-cta", x.type = "button", x.textContent = f.title || e.i18n?.productCtaLabel || "View", x.addEventListener("click", () => e.onAction(f)), A.appendChild(x);
2448
2479
  } else {
2449
2480
  const x = a.url;
2450
- if (x && $(x)) {
2481
+ if (x && W(x)) {
2451
2482
  const u = document.createElement("a");
2452
2483
  u.className = "gengage-chat-product-details-cta", V(u, "href", x), V(u, "target", "_blank"), V(u, "rel", "noopener noreferrer"), u.textContent = e.i18n?.productCtaLabel ?? "View", u.addEventListener("click", (m) => {
2453
2484
  e.onProductClick && k && (m.preventDefault(), e.onProductClick({ sku: k, url: x }));
2454
2485
  }), A.appendChild(u);
2455
2486
  }
2456
2487
  }
2457
- if (y && k && w !== !1) {
2458
- const x = Ue({
2488
+ if (y && k && _ !== !1) {
2489
+ const x = qe({
2459
2490
  compact: !1,
2460
2491
  label: e.i18n?.addToCartButton ?? "Add to Cart",
2461
2492
  decreaseLabel: e.i18n?.decreaseLabel,
@@ -2471,32 +2502,32 @@ function Aa(o, e) {
2471
2502
  x.classList.add("gengage-chat-product-details-atc-stepper"), A.appendChild(x);
2472
2503
  }
2473
2504
  const C = a.url;
2474
- if (C && $(C)) {
2475
- let x = function(B, R) {
2476
- const F = document.createElementNS(_, "circle");
2477
- F.setAttribute("cx", B), F.setAttribute("cy", R), F.setAttribute("r", "3"), L.appendChild(F);
2478
- }, u = function(B, R, F, N) {
2479
- const D = document.createElementNS(_, "line");
2480
- D.setAttribute("x1", B), D.setAttribute("y1", R), D.setAttribute("x2", F), D.setAttribute("y2", N), L.appendChild(D);
2505
+ if (C && W(C)) {
2506
+ let x = function(N, R) {
2507
+ const D = document.createElementNS(w, "circle");
2508
+ D.setAttribute("cx", N), D.setAttribute("cy", R), D.setAttribute("r", "3"), L.appendChild(D);
2509
+ }, u = function(N, R, D, M) {
2510
+ const H = document.createElementNS(w, "line");
2511
+ H.setAttribute("x1", N), H.setAttribute("y1", R), H.setAttribute("x2", D), H.setAttribute("y2", M), L.appendChild(H);
2481
2512
  };
2482
2513
  const m = document.createElement("button");
2483
2514
  m.className = "gengage-chat-product-details-share", m.type = "button";
2484
2515
  const E = e.i18n?.shareButton ?? "Share";
2485
2516
  m.title = E, m.setAttribute("aria-label", E);
2486
- const _ = "http://www.w3.org/2000/svg", L = document.createElementNS(_, "svg");
2517
+ const w = "http://www.w3.org/2000/svg", L = document.createElementNS(w, "svg");
2487
2518
  L.setAttribute("width", "18"), L.setAttribute("height", "18"), L.setAttribute("viewBox", "0 0 24 24"), L.setAttribute("fill", "none"), L.setAttribute("stroke", "currentColor"), L.setAttribute("stroke-width", "2"), L.setAttribute("stroke-linecap", "round"), L.setAttribute("stroke-linejoin", "round"), x("18", "5"), x("6", "12"), x("18", "19"), u("8.59", "13.51", "15.42", "17.49"), u("15.41", "6.51", "8.59", "10.49"), m.appendChild(L), m.addEventListener("click", async () => {
2488
- const B = a.name;
2519
+ const N = a.name;
2489
2520
  try {
2490
- navigator.share ? await navigator.share({ title: B ?? "", url: C }) : navigator.clipboard && (await navigator.clipboard.writeText(C), m.classList.add("gengage-chat-product-details-share--copied"), setTimeout(() => m.classList.remove("gengage-chat-product-details-share--copied"), 1500));
2521
+ navigator.share ? await navigator.share({ title: N ?? "", url: C }) : navigator.clipboard && (await navigator.clipboard.writeText(C), m.classList.add("gengage-chat-product-details-share--copied"), setTimeout(() => m.classList.remove("gengage-chat-product-details-share--copied"), 1500));
2491
2522
  } catch {
2492
2523
  }
2493
2524
  }), A.appendChild(m);
2494
2525
  }
2495
2526
  A.childElementCount > 0 && s.appendChild(A), t.appendChild(s);
2496
- const M = a.description, H = a.specifications;
2497
- return (M || H) && t.appendChild(Ia(M, H, e)), t;
2527
+ const B = a.description, U = a.specifications;
2528
+ return (B || U) && t.appendChild(Ma(B, U, e)), t;
2498
2529
  }
2499
- function Ia(o, e, t) {
2530
+ function Ma(o, e, t) {
2500
2531
  const a = document.createElement("div");
2501
2532
  a.className = "gengage-chat-product-detail-tabs";
2502
2533
  const n = document.createElement("div");
@@ -2515,12 +2546,12 @@ function Ia(o, e, t) {
2515
2546
  l.className = "gengage-chat-product-detail-tab-panel", o && (l.style.display = "none");
2516
2547
  const c = document.createElement("table");
2517
2548
  c.className = "gengage-chat-product-specs-table";
2518
- const d = Array.isArray(e) ? e : Object.entries(e).map(([p, g]) => ({ key: p, value: g }));
2519
- for (const p of d) {
2520
- const g = document.createElement("tr"), h = document.createElement("td");
2521
- h.className = "gengage-chat-product-specs-key", h.textContent = p.key;
2522
- const w = document.createElement("td");
2523
- w.className = "gengage-chat-product-specs-value", w.textContent = p.value, g.appendChild(h), g.appendChild(w), c.appendChild(g);
2549
+ const d = Array.isArray(e) ? e : Object.entries(e).map(([h, g]) => ({ key: h, value: g }));
2550
+ for (const h of d) {
2551
+ const g = document.createElement("tr"), p = document.createElement("td");
2552
+ p.className = "gengage-chat-product-specs-key", p.textContent = h.key;
2553
+ const _ = document.createElement("td");
2554
+ _.className = "gengage-chat-product-specs-value", _.textContent = h.value, g.appendChild(p), g.appendChild(_), c.appendChild(g);
2524
2555
  }
2525
2556
  l.appendChild(c), i.push(l);
2526
2557
  }
@@ -2535,7 +2566,7 @@ function Ia(o, e, t) {
2535
2566
  for (const s of i) a.appendChild(s);
2536
2567
  return a;
2537
2568
  }
2538
- function Ke(o, e, t) {
2569
+ function Xe(o, e, t) {
2539
2570
  if (!t || t.type === "related") return o;
2540
2571
  const a = o.map((n) => {
2541
2572
  const r = e.elements[n]?.props?.product, s = r ? Number(r.price) : NaN;
@@ -2543,8 +2574,8 @@ function Ke(o, e, t) {
2543
2574
  });
2544
2575
  return a.sort((n, i) => n.price === 1 / 0 && i.price === 1 / 0 ? 0 : n.price === 1 / 0 ? 1 : i.price === 1 / 0 ? -1 : t.direction === "desc" ? i.price - n.price : n.price - i.price), a.map((n) => n.id);
2545
2576
  }
2546
- function Na(o, e, t, a) {
2547
- const n = Ke(e, t, a), i = /* @__PURE__ */ new Map();
2577
+ function Ba(o, e, t, a) {
2578
+ const n = Xe(e, t, a), i = /* @__PURE__ */ new Map();
2548
2579
  for (const r of Array.from(o.children)) {
2549
2580
  const s = r.dataset.elementId;
2550
2581
  s && i.set(s, r);
@@ -2554,56 +2585,56 @@ function Na(o, e, t, a) {
2554
2585
  s && o.appendChild(s);
2555
2586
  }
2556
2587
  }
2557
- function Ma(o, e, t, a) {
2588
+ function za(o, e, t, a) {
2558
2589
  const n = document.createElement("div");
2559
2590
  n.className = "gengage-chat-product-grid-wrapper";
2560
2591
  const i = o.children ?? [];
2561
2592
  if (i.length > 1 && a?.onSortChange) {
2562
2593
  const c = document.createElement("div");
2563
2594
  c.className = "gengage-chat-product-sort-toolbar";
2564
- const d = a.productSort ?? { type: "related" }, p = [
2595
+ const d = a.productSort ?? { type: "related" }, h = [
2565
2596
  { label: a.i18n?.sortRelated ?? "Related", sortState: { type: "related" } },
2566
2597
  { label: a.i18n?.sortPriceAsc ?? "Price ↑", sortState: { type: "price", direction: "asc" } },
2567
2598
  { label: a.i18n?.sortPriceDesc ?? "Price ↓", sortState: { type: "price", direction: "desc" } }
2568
2599
  ];
2569
- for (const g of p) {
2570
- const h = document.createElement("button");
2571
- h.className = "gengage-chat-product-sort-btn", h.type = "button", d.type === g.sortState.type && d.direction === g.sortState.direction && h.classList.add("gengage-chat-product-sort-btn--active"), h.textContent = g.label, h.addEventListener("click", () => {
2572
- a.onSortChange?.(g.sortState), Na(r, i, e, g.sortState), c.querySelectorAll(".gengage-chat-product-sort-btn").forEach((T) => T.classList.remove("gengage-chat-product-sort-btn--active")), h.classList.add("gengage-chat-product-sort-btn--active");
2573
- }), c.appendChild(h);
2600
+ for (const g of h) {
2601
+ const p = document.createElement("button");
2602
+ p.className = "gengage-chat-product-sort-btn", p.type = "button", d.type === g.sortState.type && d.direction === g.sortState.direction && p.classList.add("gengage-chat-product-sort-btn--active"), p.textContent = g.label, p.addEventListener("click", () => {
2603
+ a.onSortChange?.(g.sortState), Ba(r, i, e, g.sortState), c.querySelectorAll(".gengage-chat-product-sort-btn").forEach((T) => T.classList.remove("gengage-chat-product-sort-btn--active")), p.classList.add("gengage-chat-product-sort-btn--active");
2604
+ }), c.appendChild(p);
2574
2605
  }
2575
2606
  if (a.onToggleComparisonSku) {
2576
2607
  const g = document.createElement("div");
2577
2608
  g.className = "gengage-chat-product-sort-separator", c.appendChild(g);
2578
- const h = document.createElement("button");
2579
- h.className = "gengage-chat-comparison-toggle-btn", h.type = "button", a.comparisonSelectMode && h.classList.add("gengage-chat-comparison-toggle-btn--active"), a.isStreaming && h.classList.add("gengage-chat-comparison-toggle-btn--hidden"), h.textContent = a.i18n?.compareSelected ?? "Compare", h.addEventListener("click", () => {
2609
+ const p = document.createElement("button");
2610
+ p.className = "gengage-chat-comparison-toggle-btn", p.type = "button", a.comparisonSelectMode && p.classList.add("gengage-chat-comparison-toggle-btn--active"), a.isStreaming && p.classList.add("gengage-chat-comparison-toggle-btn--hidden"), p.textContent = a.i18n?.compareSelected ?? "Compare", p.addEventListener("click", () => {
2580
2611
  a.onToggleComparisonSku?.("");
2581
- }), c.appendChild(h);
2612
+ }), c.appendChild(p);
2582
2613
  }
2583
2614
  n.appendChild(c);
2584
2615
  }
2585
2616
  const r = document.createElement("div");
2586
2617
  r.className = "gengage-chat-product-grid";
2587
- const s = Ke(i, e, a?.productSort);
2618
+ const s = Xe(i, e, a?.productSort);
2588
2619
  for (const c of s) {
2589
2620
  if (!e.elements[c]) continue;
2590
2621
  const d = t(c);
2591
2622
  d && (d.dataset.elementId = c, r.appendChild(d));
2592
2623
  }
2593
- if ((a?.isMobile ?? $e()) && r.classList.add("gengage-chat-product-grid--mobile"), n.appendChild(r), o.props?.endOfList !== !0 && i.length > 0) {
2624
+ if ((a?.isMobile ?? Ye()) && r.classList.add("gengage-chat-product-grid--mobile"), n.appendChild(r), o.props?.endOfList !== !0 && i.length > 0) {
2594
2625
  const c = document.createElement("button");
2595
2626
  c.className = "gengage-chat-product-grid-view-more", c.type = "button", c.textContent = a?.i18n?.viewMoreLabel ?? "Show More", c.addEventListener("click", () => {
2596
2627
  a?.onAction({ title: "More", type: "moreProductList", payload: {} });
2597
2628
  }), n.appendChild(c);
2598
2629
  }
2599
2630
  if (a?.comparisonSelectMode && a.comparisonSelectedSkus && a.comparisonSelectedSkus.length >= 2) {
2600
- const c = xa(a.comparisonSelectedSkus, a);
2631
+ const c = wa(a.comparisonSelectedSkus, a);
2601
2632
  n.appendChild(c);
2602
2633
  }
2603
2634
  return n;
2604
2635
  }
2605
- function Ba(o, e) {
2606
- const t = o.props ?? {}, a = t.keyDifferencesHtml, n = t.recommended, i = t.products ?? [], r = t.attributes ?? [], s = t.highlights ?? [], l = t.specialCases, c = t.recommendedText, d = t.winnerHits, p = t.productActions;
2636
+ function Ra(o, e) {
2637
+ const t = o.props ?? {}, a = t.keyDifferencesHtml, n = t.recommended, i = t.products ?? [], r = t.attributes ?? [], s = t.highlights ?? [], l = t.specialCases, c = t.recommendedText, d = t.winnerHits, h = t.productActions;
2607
2638
  if (!n)
2608
2639
  return document.createElement("div");
2609
2640
  const g = {
@@ -2612,12 +2643,12 @@ function Ba(o, e) {
2612
2643
  attributes: r,
2613
2644
  highlights: s,
2614
2645
  specialCases: l,
2615
- onProductClick: (w) => {
2616
- e.onProductClick?.({ sku: w, url: "" });
2646
+ onProductClick: (_) => {
2647
+ e.onProductClick?.({ sku: _, url: "" });
2617
2648
  },
2618
2649
  pricing: e.pricing
2619
2650
  };
2620
- c !== void 0 && (g.recommendedText = c), d !== void 0 && (g.winnerHits = d), p !== void 0 && (g.productActions = p), a !== void 0 && (g.keyDifferencesHtml = a), e.i18n && (g.i18n = {
2651
+ c !== void 0 && (g.recommendedText = c), d !== void 0 && (g.winnerHits = d), h !== void 0 && (g.productActions = h), a !== void 0 && (g.keyDifferencesHtml = a), e.i18n && (g.i18n = {
2621
2652
  comparisonHeading: e.i18n.panelTitleComparisonResults,
2622
2653
  recommendedChoiceLabel: e.i18n.recommendedChoiceLabel,
2623
2654
  highlightsLabel: e.i18n.highlightsLabel,
@@ -2625,10 +2656,10 @@ function Ba(o, e) {
2625
2656
  specialCasesLabel: e.i18n.specialCasesLabel,
2626
2657
  addToCartButton: e.i18n.addToCartButton
2627
2658
  });
2628
- const h = ra(g);
2629
- return (e.isMobile ?? $e()) && h.classList.add("gengage-chat-comparison--mobile"), h;
2659
+ const p = ca(g);
2660
+ return (e.isMobile ?? Ye()) && p.classList.add("gengage-chat-comparison--mobile"), p;
2630
2661
  }
2631
- function za(o) {
2662
+ function Fa(o) {
2632
2663
  const e = document.createElement("hr");
2633
2664
  e.className = "gengage-chat-divider";
2634
2665
  const t = o.props?.label;
@@ -2640,7 +2671,7 @@ function za(o) {
2640
2671
  }
2641
2672
  return e;
2642
2673
  }
2643
- const Ra = /* @__PURE__ */ new Set([
2674
+ const Da = /* @__PURE__ */ new Set([
2644
2675
  "P",
2645
2676
  "DIV",
2646
2677
  "H1",
@@ -2663,45 +2694,45 @@ const Ra = /* @__PURE__ */ new Set([
2663
2694
  "DT",
2664
2695
  "DD"
2665
2696
  ]);
2666
- function Fa(o) {
2697
+ function Ha(o) {
2667
2698
  const e = [];
2668
2699
  let t = [];
2669
2700
  for (const a of o)
2670
- a.nodeType === Node.ELEMENT_NODE && Ra.has(a.tagName) ? (t.length > 0 && (e.push(t), t = []), e.push([a])) : t.push(a);
2701
+ a.nodeType === Node.ELEMENT_NODE && Da.has(a.tagName) ? (t.length > 0 && (e.push(t), t = []), e.push([a])) : t.push(a);
2671
2702
  return t.length > 0 && e.push(t), e;
2672
2703
  }
2673
- function Da(o) {
2704
+ function Ua(o) {
2674
2705
  for (const e of o)
2675
2706
  for (const t of e)
2676
2707
  if (t.nodeType === Node.ELEMENT_NODE && (t.tagName === "TABLE" || t.querySelector?.("table")))
2677
2708
  return !0;
2678
2709
  return !1;
2679
2710
  }
2680
- function Ha() {
2711
+ function qa() {
2681
2712
  return typeof window > "u" || typeof window.matchMedia != "function" ? !1 : window.matchMedia("(prefers-reduced-motion: reduce)").matches;
2682
2713
  }
2683
- function Ua(o) {
2714
+ function Oa(o) {
2684
2715
  const { container: e, html: t, delayMs: a = 30, onTick: n, onComplete: i } = o, r = document.createElement("template");
2685
2716
  r.innerHTML = t;
2686
- const s = Fa(r.content.childNodes);
2687
- if (Ha() || s.length <= 1 || Da(s))
2717
+ const s = Ha(r.content.childNodes);
2718
+ if (qa() || s.length <= 1 || Ua(s))
2688
2719
  return e.innerHTML = t, i?.(), { complete() {
2689
2720
  }, cancel() {
2690
2721
  }, isRunning: !1 };
2691
2722
  e.innerHTML = "";
2692
2723
  let l = 0, c = null, d = !0;
2693
- function p() {
2724
+ function h() {
2694
2725
  if (!d || l >= s.length) {
2695
2726
  d = !1, i?.();
2696
2727
  return;
2697
2728
  }
2698
- const g = s[l], h = document.createElement("span");
2699
- h.className = "gengage-chat-typewriter-block";
2700
- for (const w of g)
2701
- h.appendChild(w.cloneNode(!0));
2702
- e.appendChild(h), l++, n?.(), l < s.length ? c = setTimeout(p, a) : (d = !1, i?.());
2729
+ const g = s[l], p = document.createElement("span");
2730
+ p.className = "gengage-chat-typewriter-block";
2731
+ for (const _ of g)
2732
+ p.appendChild(_.cloneNode(!0));
2733
+ e.appendChild(p), l++, n?.(), l < s.length ? c = setTimeout(h, a) : (d = !1, i?.());
2703
2734
  }
2704
- return p(), {
2735
+ return h(), {
2705
2736
  complete() {
2706
2737
  d && (c !== null && clearTimeout(c), d = !1, e.innerHTML = t, i?.());
2707
2738
  },
@@ -2716,7 +2747,7 @@ function Ua(o) {
2716
2747
  function Ne(o) {
2717
2748
  return o !== void 0 && /[\p{L}\p{N}_]/u.test(o);
2718
2749
  }
2719
- function qa(o) {
2750
+ function Va(o) {
2720
2751
  const { container: e, mentions: t, onProductClick: a } = o;
2721
2752
  if (t.length === 0) return;
2722
2753
  const n = /* @__PURE__ */ new Map();
@@ -2727,17 +2758,17 @@ function qa(o) {
2727
2758
  const s = document.createTreeWalker(e, NodeFilter.SHOW_TEXT);
2728
2759
  let l = s.nextNode(), c = !1;
2729
2760
  for (; l && !c; ) {
2730
- const d = l.textContent ?? "", p = d.toLowerCase().indexOf(i);
2731
- if (p === -1) {
2761
+ const d = l.textContent ?? "", h = d.toLowerCase().indexOf(i);
2762
+ if (h === -1) {
2732
2763
  l = s.nextNode();
2733
2764
  continue;
2734
2765
  }
2735
- const g = p > 0 ? d[p - 1] : void 0, h = d[p + r.short_name.length];
2736
- if (Ne(g) || Ne(h)) {
2766
+ const g = h > 0 ? d[h - 1] : void 0, p = d[h + r.short_name.length];
2767
+ if (Ne(g) || Ne(p)) {
2737
2768
  l = s.nextNode();
2738
2769
  continue;
2739
2770
  }
2740
- const w = d.slice(0, p), T = d.slice(p, p + r.short_name.length), S = d.slice(p + r.short_name.length), k = l.parentNode;
2771
+ const _ = d.slice(0, h), T = d.slice(h, h + r.short_name.length), S = d.slice(h + r.short_name.length), k = l.parentNode;
2741
2772
  if (!k) {
2742
2773
  l = s.nextNode();
2743
2774
  continue;
@@ -2745,22 +2776,22 @@ function qa(o) {
2745
2776
  const y = document.createElement("a");
2746
2777
  y.className = "gengage-product-mention", y.textContent = T, y.href = "#", y.addEventListener("click", (A) => {
2747
2778
  A.preventDefault(), a(r.sku);
2748
- }), w && k.insertBefore(document.createTextNode(w), l), k.insertBefore(y, l), S && k.insertBefore(document.createTextNode(S), l), k.removeChild(l), c = !0;
2779
+ }), _ && k.insertBefore(document.createTextNode(_), l), k.insertBefore(y, l), S && k.insertBefore(document.createTextNode(S), l), k.removeChild(l), c = !0;
2749
2780
  }
2750
2781
  }
2751
2782
  }
2752
- const Oa = /* @__PURE__ */ new Set(["search", "info", "review", "similar"]), Va = /* @__PURE__ */ new Set([
2783
+ const ja = /* @__PURE__ */ new Set(["search", "info", "review", "similar"]), Wa = /* @__PURE__ */ new Set([
2753
2784
  "quickAnswer",
2754
2785
  "reviewSummary",
2755
2786
  "searchDiscovery",
2756
2787
  "launchDiscovery",
2757
2788
  "exploreTogetherV2"
2758
2789
  ]);
2759
- function ja(o) {
2760
- return !!(o.icon && Oa.has(o.icon) || o.action?.type && Va.has(o.action.type));
2790
+ function $a(o) {
2791
+ return !!(o.icon && ja.has(o.icon) || o.action?.type && Wa.has(o.action.type));
2761
2792
  }
2762
2793
  const be = "gengage_choice_prompter_dismissed", ve = "gengage_choice_prompter_dismissed_global";
2763
- function Wa(o) {
2794
+ function Ya(o) {
2764
2795
  const e = document.createElement("div");
2765
2796
  e.className = "gengage-chat-choice-prompter";
2766
2797
  const t = document.createElement("div");
@@ -2786,14 +2817,14 @@ function Wa(o) {
2786
2817
  e.remove(), o.onDismiss?.();
2787
2818
  }), e.appendChild(i), e;
2788
2819
  }
2789
- function $a() {
2820
+ function Ga() {
2790
2821
  try {
2791
2822
  return sessionStorage.getItem(ve) === "1";
2792
2823
  } catch {
2793
2824
  return !1;
2794
2825
  }
2795
2826
  }
2796
- function Ya(o) {
2827
+ function Ka(o) {
2797
2828
  try {
2798
2829
  const e = sessionStorage.getItem(be);
2799
2830
  return e ? JSON.parse(e).includes(o) : !1;
@@ -2808,7 +2839,7 @@ function Me(o) {
2808
2839
  } catch {
2809
2840
  }
2810
2841
  }
2811
- const Ga = "gengage_assistant", Ka = 3, oe = "sessions", G = "context", J = "payload", K = "favorites";
2842
+ const Xa = "gengage_assistant", Qa = 3, oe = "sessions", K = "context", Z = "payload", X = "favorites";
2812
2843
  function ge(o) {
2813
2844
  return new Promise((e, t) => {
2814
2845
  o.onsuccess = () => e(o.result), o.onerror = () => t(o.error);
@@ -2819,8 +2850,8 @@ function le(o) {
2819
2850
  o.oncomplete = () => e(), o.onerror = () => t(o.error), o.onabort = () => t(o.error ?? new DOMException("Transaction aborted"));
2820
2851
  });
2821
2852
  }
2822
- class Xa {
2823
- constructor(e = Ga, t = Ka) {
2853
+ class Ja {
2854
+ constructor(e = Xa, t = Qa) {
2824
2855
  this._db = null, this._dbName = e, this._version = t;
2825
2856
  }
2826
2857
  // -------------------------------------------------------------------------
@@ -2831,11 +2862,11 @@ class Xa {
2831
2862
  const a = indexedDB.open(this._dbName, this._version);
2832
2863
  a.onupgradeneeded = (n) => {
2833
2864
  const i = a.result, r = n.oldVersion;
2834
- r < 1 && (i.createObjectStore(oe, { keyPath: ["userId", "appId", "sessionId"] }), i.createObjectStore(G, { keyPath: ["sessionId", "threadId"] }), i.createObjectStore(J, {
2865
+ r < 1 && (i.createObjectStore(oe, { keyPath: ["userId", "appId", "sessionId"] }), i.createObjectStore(K, { keyPath: ["sessionId", "threadId"] }), i.createObjectStore(Z, {
2835
2866
  keyPath: ["threadId", "messageId"]
2836
- }).createIndex("threadId", "threadId", { unique: !1 }), i.createObjectStore(K, { keyPath: ["userId", "appId", "sku"] })), r >= 1 && r < 2 && (i.objectStoreNames.contains(oe) && i.deleteObjectStore(oe), i.objectStoreNames.contains(J) && i.deleteObjectStore(J), i.createObjectStore(oe, { keyPath: ["userId", "appId", "sessionId"] }), i.createObjectStore(J, {
2867
+ }).createIndex("threadId", "threadId", { unique: !1 }), i.createObjectStore(X, { keyPath: ["userId", "appId", "sku"] })), r >= 1 && r < 2 && (i.objectStoreNames.contains(oe) && i.deleteObjectStore(oe), i.objectStoreNames.contains(Z) && i.deleteObjectStore(Z), i.createObjectStore(oe, { keyPath: ["userId", "appId", "sessionId"] }), i.createObjectStore(Z, {
2837
2868
  keyPath: ["threadId", "messageId"]
2838
- }).createIndex("threadId", "threadId", { unique: !1 }), i.objectStoreNames.contains(G) || i.createObjectStore(G, { keyPath: ["sessionId", "threadId"] })), r < 3 && (i.objectStoreNames.contains(K) || i.createObjectStore(K, { keyPath: ["userId", "appId", "sku"] }));
2869
+ }).createIndex("threadId", "threadId", { unique: !1 }), i.objectStoreNames.contains(K) || i.createObjectStore(K, { keyPath: ["sessionId", "threadId"] })), r < 3 && (i.objectStoreNames.contains(X) || i.createObjectStore(X, { keyPath: ["userId", "appId", "sku"] }));
2839
2870
  }, a.onsuccess = () => {
2840
2871
  this._db = a.result, e(this._db);
2841
2872
  }, a.onerror = () => t(a.error);
@@ -2859,12 +2890,12 @@ class Xa {
2859
2890
  // Context (compound key: [sessionId, threadId])
2860
2891
  // -------------------------------------------------------------------------
2861
2892
  async saveContext(e) {
2862
- const a = this._requireDb().transaction(G, "readwrite");
2863
- a.objectStore(G).put(e), await le(a);
2893
+ const a = this._requireDb().transaction(K, "readwrite");
2894
+ a.objectStore(K).put(e), await le(a);
2864
2895
  }
2865
2896
  async loadContext(e, t) {
2866
- const n = this._requireDb().transaction(G, "readonly");
2867
- return await ge(n.objectStore(G).get([e, t])) ?? null;
2897
+ const n = this._requireDb().transaction(K, "readonly");
2898
+ return await ge(n.objectStore(K).get([e, t])) ?? null;
2868
2899
  }
2869
2900
  /**
2870
2901
  * Delete all context entries for a session whose threadId is lexicographically
@@ -2874,7 +2905,7 @@ class Xa {
2874
2905
  * comparison is sufficient.
2875
2906
  */
2876
2907
  async deleteContextsAfterThread(e, t) {
2877
- const n = this._requireDb().transaction(G, "readwrite"), r = n.objectStore(G).openCursor();
2908
+ const n = this._requireDb().transaction(K, "readwrite"), r = n.objectStore(K).openCursor();
2878
2909
  await new Promise((s, l) => {
2879
2910
  r.onsuccess = () => {
2880
2911
  const c = r.result;
@@ -2897,7 +2928,7 @@ class Xa {
2897
2928
  * Uses lexicographic ordering of UUIDv7 threadIds for chronological sort.
2898
2929
  */
2899
2930
  async loadLatestContext(e) {
2900
- const n = this._requireDb().transaction(G, "readonly").objectStore(G), i = IDBKeyRange.bound([e, ""], [e, "￿"]);
2931
+ const n = this._requireDb().transaction(K, "readonly").objectStore(K), i = IDBKeyRange.bound([e, ""], [e, "￿"]);
2901
2932
  return new Promise((r, s) => {
2902
2933
  const l = n.openCursor(i, "prev");
2903
2934
  l.onsuccess = () => {
@@ -2910,15 +2941,15 @@ class Xa {
2910
2941
  // Payload
2911
2942
  // -------------------------------------------------------------------------
2912
2943
  async savePayload(e) {
2913
- const a = this._requireDb().transaction(J, "readwrite");
2914
- a.objectStore(J).put(e), await le(a);
2944
+ const a = this._requireDb().transaction(Z, "readwrite");
2945
+ a.objectStore(Z).put(e), await le(a);
2915
2946
  }
2916
2947
  async loadPayload(e, t) {
2917
- const n = this._requireDb().transaction(J, "readonly");
2918
- return await ge(n.objectStore(J).get([e, t])) ?? null;
2948
+ const n = this._requireDb().transaction(Z, "readonly");
2949
+ return await ge(n.objectStore(Z).get([e, t])) ?? null;
2919
2950
  }
2920
2951
  async loadPayloadsByThread(e) {
2921
- const n = this._requireDb().transaction(J, "readonly").objectStore(J).index("threadId"), i = [];
2952
+ const n = this._requireDb().transaction(Z, "readonly").objectStore(Z).index("threadId"), i = [];
2922
2953
  return new Promise((r, s) => {
2923
2954
  const l = n.openCursor(IDBKeyRange.only(e));
2924
2955
  l.onsuccess = () => {
@@ -2935,20 +2966,20 @@ class Xa {
2935
2966
  // Favorites
2936
2967
  // -------------------------------------------------------------------------
2937
2968
  async saveFavorite(e) {
2938
- const a = this._requireDb().transaction(K, "readwrite");
2939
- a.objectStore(K).put(e), await le(a);
2969
+ const a = this._requireDb().transaction(X, "readwrite");
2970
+ a.objectStore(X).put(e), await le(a);
2940
2971
  }
2941
2972
  async removeFavorite(e, t, a) {
2942
- const i = this._requireDb().transaction(K, "readwrite");
2943
- i.objectStore(K).delete([e, t, a]), await le(i);
2973
+ const i = this._requireDb().transaction(X, "readwrite");
2974
+ i.objectStore(X).delete([e, t, a]), await le(i);
2944
2975
  }
2945
2976
  async loadFavorites(e, t) {
2946
- const n = this._requireDb().transaction(K, "readonly");
2947
- return (await ge(n.objectStore(K).getAll())).filter((r) => r.userId === e && r.appId === t);
2977
+ const n = this._requireDb().transaction(X, "readonly");
2978
+ return (await ge(n.objectStore(X).getAll())).filter((r) => r.userId === e && r.appId === t);
2948
2979
  }
2949
2980
  async isFavorite(e, t, a) {
2950
- const i = this._requireDb().transaction(K, "readonly");
2951
- return await ge(i.objectStore(K).get([e, t, a])) !== void 0;
2981
+ const i = this._requireDb().transaction(X, "readonly");
2982
+ return await ge(i.objectStore(X).get([e, t, a])) !== void 0;
2952
2983
  }
2953
2984
  // -------------------------------------------------------------------------
2954
2985
  // Internal
@@ -2959,16 +2990,16 @@ class Xa {
2959
2990
  return this._db;
2960
2991
  }
2961
2992
  }
2962
- const Qa = [
2993
+ const Za = [
2963
2994
  "comparisonTable",
2964
2995
  "groupList",
2965
2996
  "productDetailsSimilars",
2966
2997
  "productList"
2967
2998
  ];
2968
- class Ja {
2999
+ class en {
2969
3000
  constructor(e) {
2970
3001
  this._lockCount = 1, this._hiddenByUser = !1, this._lastPanelContentType = null, this._chatShown = !1, this._isFavoritesMode = !1, this._lastExtended = !1, this._onChange = e.onChange;
2971
- const t = new Set(Qa);
3002
+ const t = new Set(Za);
2972
3003
  e.productDetailsInPanel && t.add("productDetails"), this._panelContentTypes = t;
2973
3004
  }
2974
3005
  get isExtended() {
@@ -2997,7 +3028,7 @@ class Ja {
2997
3028
  e !== this._lastExtended && (this._lastExtended = e, this._onChange(e));
2998
3029
  }
2999
3030
  }
3000
- class Za {
3031
+ class tn {
3001
3032
  constructor(e) {
3002
3033
  this.deps = e, this.snapshots = /* @__PURE__ */ new Map(), this._snapshotRebuilders = /* @__PURE__ */ new Map(), this.snapshotTypes = /* @__PURE__ */ new Map(), this.activePanelMessageId = null, this.currentType = null, this.threads = [], this.lastActionType = null;
3003
3034
  }
@@ -3151,7 +3182,7 @@ class Za {
3151
3182
  function Be(o) {
3152
3183
  return o === "user_message" || o === "inputText";
3153
3184
  }
3154
- function en(o) {
3185
+ function an(o) {
3155
3186
  return o.similarsAppend && o.currentPanelType === "ProductDetailsPanel" && o.hasPanelContent && !o.isPanelLoading ? "appendSimilars" : o.componentType === "ProductGrid" && !o.isFirstPanelContentInStream && o.hasPanelContent && !o.isPanelLoading ? "append" : "replace";
3156
3187
  }
3157
3188
  class ze {
@@ -3232,7 +3263,7 @@ class ze {
3232
3263
  await t();
3233
3264
  } catch {
3234
3265
  }
3235
- a?.send("openURLInNewTab", { url: e }), $(e) && (window.location.href = e);
3266
+ a?.send("openURLInNewTab", { url: e }), W(e) && (window.location.href = e);
3236
3267
  }
3237
3268
  /**
3238
3269
  * Load a UISpec payload from IndexedDB with retry logic.
@@ -3289,25 +3320,25 @@ class ze {
3289
3320
  this._db?.close(), this._db = null;
3290
3321
  }
3291
3322
  }
3292
- const Xe = "gengage_kvkk_shown", tn = ["kvkk", "kişisel veri", "kisisel veri"], an = /\b6698\b/;
3323
+ const Qe = "gengage_kvkk_shown", nn = ["kvkk", "kişisel veri", "kisisel veri"], on = /\b6698\b/;
3293
3324
  function ke(o) {
3294
3325
  const e = o.toLowerCase();
3295
- return tn.some((t) => e.includes(t)) || an.test(e);
3326
+ return nn.some((t) => e.includes(t)) || on.test(e);
3296
3327
  }
3297
3328
  function Re(o) {
3298
3329
  try {
3299
- return localStorage.getItem(`${Xe}_${o}`) === "1";
3330
+ return localStorage.getItem(`${Qe}_${o}`) === "1";
3300
3331
  } catch {
3301
3332
  return !1;
3302
3333
  }
3303
3334
  }
3304
- function nn(o) {
3335
+ function Fe(o) {
3305
3336
  try {
3306
- localStorage.setItem(`${Xe}_${o}`, "1");
3337
+ localStorage.setItem(`${Qe}_${o}`, "1");
3307
3338
  } catch {
3308
3339
  }
3309
3340
  }
3310
- function on(o) {
3341
+ function rn(o) {
3311
3342
  const t = new DOMParser().parseFromString(o, "text/html").body, a = Array.from(t.children);
3312
3343
  for (const n of a)
3313
3344
  if (ke(n.textContent ?? "")) {
@@ -3316,27 +3347,27 @@ function on(o) {
3316
3347
  }
3317
3348
  return t.innerHTML.trim();
3318
3349
  }
3319
- function rn(o) {
3350
+ function sn(o) {
3320
3351
  const e = new DOMParser().parseFromString(o, "text/html");
3321
3352
  for (const t of Array.from(e.body.children))
3322
3353
  if (ke(t.textContent ?? ""))
3323
3354
  return t.outerHTML;
3324
3355
  return null;
3325
3356
  }
3326
- const sn = {
3357
+ const cn = {
3327
3358
  tr: "TURKISH",
3328
3359
  en: "ENGLISH",
3329
3360
  de: "GERMAN",
3330
3361
  fr: "FRENCH"
3331
3362
  };
3332
- function cn(o) {
3333
- return o ? sn[o.toLowerCase().slice(0, 2)] ?? "TURKISH" : "TURKISH";
3363
+ function ln(o) {
3364
+ return o ? cn[o.toLowerCase().slice(0, 2)] ?? "TURKISH" : "TURKISH";
3334
3365
  }
3335
- const ln = ':host{all:initial;font-family:var(--gengage-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);font-size:var(--gengage-font-size, 14px)}.gengage-chat-root button,.gengage-chat-root [role=button],.gengage-chat-root a{cursor:pointer}.gengage-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.gengage-chat-root{position:fixed;z-index:var(--gengage-z-index, 2147483647);--_gengage-chat-offset: var(--gengage-chat-offset, 20px);--_gengage-chat-launcher-bottom: var(--gengage-chat-launcher-bottom, 20px);--_gengage-chat-launcher-right: var(--gengage-chat-launcher-right, 20px);--_gengage-chat-launcher-size: var(--gengage-chat-launcher-size, 56px);--_gengage-chat-drawer-width: var(--gengage-chat-width, 400px);--_gengage-chat-radius: var(--gengage-chat-shell-radius, 12px);--_gengage-chat-header-height: var(--gengage-chat-header-height, 60px);--_gengage-chat-conversation-width: var(--gengage-chat-conversation-width, 396px);--_gengage-chat-panel-min-width: var(--gengage-chat-panel-min-width, 320px);--_gengage-chat-panel-max-width: var(--gengage-chat-panel-max-width, 860px);--_gengage-chat-input-height: var(--gengage-chat-input-height, 48px);--_gengage-chat-shadow: var(--gengage-chat-shadow, 0 12px 40px rgba(15, 23, 42, .18));--_gengage-border-color: var(--gengage-border-color, #e5e7eb);--_gengage-discount-color: var(--gengage-discount-color, #ef4444);--_gengage-success-color: var(--gengage-success-color, #16a34a);--_gengage-text-primary: var(--gengage-text-primary, #1f2937);--_gengage-text-secondary: var(--gengage-text-secondary, #64748b);--_gengage-surface-secondary: var(--gengage-surface-secondary, #f3f4f6);--_gengage-surface-muted: var(--gengage-surface-muted, #f8fafc);--_gengage-surface-dark: var(--gengage-surface-dark, #1e293b);--_gengage-rating-color: var(--gengage-rating-color, #d97706);--_gengage-error: var(--gengage-error, #dc2626);--_gengage-qty-btn-size: var(--gengage-qty-btn-size, 28px);--_gengage-qty-btn-size-compact: var(--gengage-qty-btn-size-compact, 24px)}.gengage-chat-launcher-container{position:fixed;bottom:var(--_gengage-chat-launcher-bottom);right:var(--_gengage-chat-launcher-right);display:flex;flex-direction:column;align-items:flex-end;gap:10px;z-index:var(--gengage-z-index, 2147483647)}.gengage-chat-launcher-content-area,.gengage-chat-launcher-content-area-bottom{display:flex;flex-direction:column;align-items:flex-end;gap:8px}.gengage-chat-launcher-content-area:empty,.gengage-chat-launcher-content-area-bottom:empty{display:none}.gengage-chat-root--open .gengage-chat-launcher-content-area,.gengage-chat-root--open .gengage-chat-launcher-content-area-bottom{display:none}.gengage-chat-root--open .gengage-chat-launcher-container{pointer-events:none;opacity:0;transition:opacity .2s ease}.gengage-chat-launcher{width:var(--_gengage-chat-launcher-size);height:var(--_gengage-chat-launcher-size);border-radius:50%;border:none;background:var(--gengage-primary-color, #3b82f6);color:var(--gengage-primary-foreground, #fff);cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 22px #0f172a47;transition:transform .18s cubic-bezier(.2,.8,.2,1),box-shadow .18s ease;position:relative;flex-shrink:0}.gengage-chat-launcher:hover{transform:scale(1.05);box-shadow:0 14px 28px #0f172a47}.gengage-chat-launcher svg{width:28px;height:28px}.gengage-chat-launcher--image-mode{background:none;border-radius:0;box-shadow:none;padding:0;overflow:hidden}.gengage-chat-launcher--image-mode:hover{box-shadow:none}.gengage-chat-launcher--image-mode img{width:100%;height:100%;object-fit:contain}.gengage-chat-launcher--hidden-mobile{display:none!important}.gengage-chat-launcher-tooltip{position:absolute;right:calc(100% + 12px);top:50%;transform:translateY(-50%);padding:6px 12px;border-radius:8px;background:var(--_gengage-surface-dark);color:#fff;font-size:13px;font-weight:500;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .2s ease;box-shadow:0 2px 8px #00000026}.gengage-chat-launcher-tooltip:after{content:"";position:absolute;left:100%;top:50%;transform:translateY(-50%);border:5px solid transparent;border-left-color:var(--_gengage-surface-dark)}.gengage-chat-launcher:hover .gengage-chat-launcher-tooltip{opacity:1}.gengage-chat-root--open .gengage-chat-launcher-tooltip{display:none}.gengage-chat-drawer{position:fixed;top:0;bottom:0;right:0;width:var(--_gengage-chat-drawer-width);max-height:-webkit-fill-available;max-height:100dvh;border-radius:0;background:var(--gengage-background-color, #fff);box-shadow:var(--_gengage-chat-shadow);display:flex;flex-direction:column;overflow:hidden;z-index:var(--gengage-z-index, 2147483647);transform:translate(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .2s ease;opacity:1}.gengage-chat-root--mobile .gengage-chat-launcher-container{right:var(--gengage-chat-launcher-mobile-right, 16px);bottom:calc(var(--gengage-chat-launcher-mobile-bottom, 16px) + env(safe-area-inset-bottom,0px))}.gengage-chat-root--mobile .gengage-chat-drawer{left:0;right:0;bottom:0;width:100%;max-width:none;max-height:-webkit-fill-available;max-height:100dvh;border-radius:16px 16px 0 0;border-top:none;box-shadow:0 -4px 16px #0000001a,0 12px 40px #0f172a2e;padding-bottom:env(safe-area-inset-bottom,0px);background:var(--gengage-chat-header-bg, #1d2939)}.gengage-chat-drawer-handle{display:none}.gengage-chat-root--mobile .gengage-chat-drawer-handle{display:flex;align-items:center;justify-content:center;height:22px;flex-shrink:0;cursor:grab;touch-action:none;background:var(--gengage-chat-header-bg, #1d2939);border-radius:16px 16px 0 0;user-select:none;-webkit-user-select:none}.gengage-chat-root--mobile .gengage-chat-drawer-handle:before{content:"";width:36px;height:4px;border-radius:999px;background:#ffffff4d;pointer-events:none}.gengage-chat-root--mobile.gengage-chat-root--open:before{content:"";position:fixed;inset:0;background:#0000001f;z-index:-1;pointer-events:none}.gengage-chat-root--mobile.gengage-chat-root--mobile-half .gengage-chat-drawer{top:auto;height:min(72dvh,620px);max-height:min(72dvh,620px)}.gengage-chat-root--mobile.gengage-chat-root--mobile-full .gengage-chat-drawer{top:0;height:100dvh;max-height:100dvh;border-radius:0}.gengage-chat-root--mobile.gengage-chat-root--mobile-full .gengage-chat-drawer-handle{border-radius:0}.gengage-chat-root--mobile .gengage-chat-input-area{padding-bottom:calc(10px + env(safe-area-inset-bottom,0px));border-top:1px solid var(--_gengage-border-color, #e5e7eb);transform:translateY(calc(-1 * var(--gengage-keyboard-offset, 0px)))}.gengage-chat-header{display:flex;align-items:center;justify-content:space-between;box-sizing:border-box;min-height:var(--_gengage-chat-header-height);padding:4px 12px;background:var(--gengage-chat-header-bg, #1d2939);color:var(--gengage-chat-header-foreground, #fff);box-shadow:0 4px 20px #00000014,0 0 2px #0000001f;border:none;position:relative;z-index:2}.gengage-chat-header-left{display:flex;align-items:center;gap:10px;min-width:0}.gengage-chat-header-avatar{width:40px;height:40px;border-radius:0;object-fit:contain;flex-shrink:0}.gengage-chat-header-info{display:flex;flex-direction:column;gap:2px;min-width:0}.gengage-chat-header-title-row{display:flex;align-items:center;gap:6px}.gengage-chat-header-title{font-weight:700;font-size:15px;line-height:1.25;letter-spacing:.01em;color:inherit}.gengage-chat-header-badge{display:inline-flex;align-items:center;padding:1px 6px;border-radius:4px;background:var(--gengage-primary-color, #3b82f6);color:#fff;font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;line-height:1.5}.gengage-chat-header-powered{display:flex;align-items:center;gap:4px;font-size:11px;color:#ffffffa6;text-decoration:none;transition:color .15s}.gengage-chat-header-powered:hover{color:#fffc}.gengage-chat-header-powered svg{width:12px;height:12px;opacity:.6}.gengage-chat-header-right{display:flex;align-items:center;gap:4px;flex-shrink:0}.gengage-chat-header-btn{width:32px;height:32px;border-radius:8px;background:transparent;border:1px solid rgba(255,255,255,.12);color:#ffffffb3;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;text-decoration:none;line-height:1;transition:background-color .15s ease,color .15s ease,border-color .15s ease}.gengage-chat-header-btn:hover{background:#ffffff1a;color:#fff;border-color:#ffffff40}.gengage-chat-header-btn--fav{position:relative}.gengage-chat-header-btn--reopen-panel{display:none}.gengage-chat-header-fav-badge{position:absolute;top:-4px;right:-4px;min-width:16px;height:16px;border-radius:999px;background:var(--_gengage-danger-color, #ef4444);color:var(--_gengage-on-danger, #fff);font-size:9px;font-weight:700;line-height:16px;text-align:center;padding:0 3px;pointer-events:none}.gengage-chat-close{width:32px;height:32px;min-width:32px;min-height:32px;border-radius:8px;background:transparent;border:1px solid rgba(255,255,255,.12);color:#ffffffb3;font-size:18px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1;transition:background-color .15s ease,color .15s ease,border-color .15s ease}.gengage-chat-close:hover{background:#ffffff1a;color:#fff;border-color:#ffffff40}.gengage-chat-body{display:flex;flex:1;overflow:hidden;min-height:0;position:relative}.gengage-chat-panel{display:none;width:0;overflow:hidden;transition:width .22s cubic-bezier(.2,.72,.2,1)}.gengage-chat-panel--visible{display:flex;flex-direction:column;position:relative;box-sizing:border-box;width:440px;min-width:440px;background:var(--gengage-chat-panel-bg, var(--_gengage-surface-muted, #fff));border-right:1px solid var(--_gengage-border-color);overflow-y:auto;padding:16px;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.15) transparent}.gengage-chat-panel--visible::-webkit-scrollbar{width:6px}.gengage-chat-panel--visible::-webkit-scrollbar-track{background:transparent}.gengage-chat-panel--visible::-webkit-scrollbar-thumb{background:#00000026;border-radius:3px}.gengage-chat-panel--visible::-webkit-scrollbar-thumb:hover{background:#00000040}.gengage-chat-panel-divider{display:flex;align-items:center;width:4px;cursor:pointer;background:var(--_gengage-border-color);position:relative;flex-shrink:0;transition:background .15s;z-index:2}.gengage-chat-panel-divider:hover{background:#cbd5e1}.gengage-chat-panel-divider--hidden{display:none}.gengage-chat-panel-divider-toggle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:28px;height:48px;border:1px solid var(--_gengage-border-color);border-radius:6px;background:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;color:var(--_gengage-text-secondary);box-shadow:0 1px 3px #00000014;transition:background .15s,color .15s;padding:0;line-height:1}.gengage-chat-panel-divider-toggle:hover{background:var(--_gengage-surface-muted);color:#334155}.gengage-chat-panel.gengage-chat-panel--collapsed{flex:0 0 0px;width:0;min-width:0;max-width:0;padding:0;border-right:none;overflow:hidden}.gengage-chat-panel--collapsed~.gengage-chat-panel-divider{width:0;background:transparent}.gengage-chat-panel--collapsed~.gengage-chat-panel-divider .gengage-chat-panel-divider-toggle{left:0;transform:translateY(-50%)}.gengage-chat-conversation{display:flex;flex-direction:column;flex:1;min-width:0;overflow:hidden;background:var(--gengage-background-color, #fff);position:relative;z-index:1}.gengage-chat-drawer--with-panel{width:auto;background:transparent;box-shadow:none}.gengage-chat-drawer--with-panel .gengage-chat-header{border-radius:0;flex-shrink:0}.gengage-chat-drawer--with-panel .gengage-chat-body{flex:1 1 0;min-height:0;gap:0;padding:0;align-items:stretch}.gengage-chat-drawer--with-panel .gengage-chat-panel--visible{flex:0 0 auto;width:clamp(var(--_gengage-chat-panel-min-width),50vw,var(--_gengage-chat-panel-max-width));min-width:var(--_gengage-chat-panel-min-width);max-width:var(--_gengage-chat-panel-max-width);border-right:none;background:var(--gengage-chat-panel-bg, var(--_gengage-surface, #fff));padding:0 16px 16px;overflow-y:auto;margin:0;border-radius:0;box-shadow:0 8px 32px #0f172a1f,0 2px 8px #0f172a0f;max-height:100dvh}.gengage-chat-drawer--with-panel .gengage-chat-panel-divider{width:0;background:transparent}.gengage-chat-drawer--with-panel .gengage-chat-panel-divider-toggle{width:20px;height:48px;border-radius:10px;background:var(--gengage-primary-color, #3b82f6);color:#fff;border:2px solid #fff;box-shadow:0 2px 8px #0f172a2e;font-size:12px;z-index:10}.gengage-chat-drawer--with-panel .gengage-chat-panel-divider-toggle:hover{background:var(--gengage-primary-hover, #2563eb);color:#fff}.gengage-chat-drawer--with-panel .gengage-chat-conversation{flex:0 0 var(--_gengage-chat-conversation-width);width:var(--_gengage-chat-conversation-width);border-left:none;background:var(--gengage-background-color, #fff);box-shadow:-4px 0 24px #0f172a1f,-1px 0 4px #0f172a0f}.gengage-chat-drawer--with-panel .gengage-chat-messages{padding-right:6px;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.12) transparent}.gengage-chat-drawer--with-panel .gengage-chat-messages::-webkit-scrollbar{width:0}.gengage-chat-drawer--with-panel .gengage-chat-panel.gengage-chat-panel--collapsed{flex:0 0 0px;width:0;min-width:0;max-width:0;padding:0;overflow:hidden}.gengage-chat-drawer--with-panel:has(.gengage-chat-panel--collapsed){width:var(--_gengage-chat-conversation-width);background:var(--gengage-background-color, #fff);box-shadow:var(--_gengage-chat-shadow)}.gengage-chat-drawer--with-panel .gengage-chat-footer{display:none}.gengage-chat-messages{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:16px;min-height:0;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;touch-action:pan-y}.gengage-chat-messages::-webkit-scrollbar{width:6px}.gengage-chat-messages::-webkit-scrollbar-track{background:transparent}.gengage-chat-messages::-webkit-scrollbar-thumb{background:#0000001f;border-radius:3px}.gengage-chat-messages::-webkit-scrollbar-thumb:hover{background:#0003}.gengage-chat-bubble{max-width:85%;padding:12px 16px;border-radius:12px;line-height:1.5;font-size:14px;font-weight:500;word-wrap:break-word;overflow-wrap:break-word;animation:gengage-chat-msg-in .3s cubic-bezier(.2,.7,.2,1)}@keyframes gengage-chat-msg-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.gengage-chat-bubble--user{align-self:flex-end;background:var(--gengage-primary-color, #3b82f6);color:var(--gengage-primary-foreground, #fff);border-bottom-right-radius:4px}.gengage-chat-bubble--assistant{align-self:flex-start;background:var(--_gengage-surface-secondary);color:var(--_gengage-text-primary);border-bottom-left-radius:4px;min-width:120px}.gengage-chat-bubble--active{outline:2px solid var(--gengage-primary-color, #3b82f6);outline-offset:-2px}.gengage-chat-bubble--assistant:empty{display:none}.gengage-chat-bubble--assistant .gengage-chat-bubble-text a{color:var(--gengage-primary-color, #2563eb);text-decoration:underline}.gengage-chat-bubble--assistant .gengage-chat-bubble-text a:hover{text-decoration:none}.gengage-chat-bubble--assistant .gengage-chat-bubble-text p{margin:0 0 8px}.gengage-chat-bubble--assistant .gengage-chat-bubble-text p:last-child{margin-bottom:0}.gengage-chat-bubble--assistant .gengage-chat-bubble-text ul,.gengage-chat-bubble--assistant .gengage-chat-bubble-text ol{margin:6px 0;padding-left:20px}.gengage-chat-bubble--assistant .gengage-chat-bubble-text li{margin-bottom:6px;line-height:1.5}.gengage-chat-bubble--assistant .gengage-chat-bubble-text code{background:#0000000f;padding:1px 4px;border-radius:3px;font-size:.9em}.gengage-chat-bubble--assistant .gengage-chat-bubble-text pre{background:#0000000a;padding:8px;border-radius:6px;overflow-x:auto;margin:4px 0}.gengage-chat-bubble--assistant .gengage-chat-bubble-text table{border-collapse:collapse;margin:4px 0;font-size:.9em}.gengage-chat-bubble--assistant .gengage-chat-bubble-text th,.gengage-chat-bubble--assistant .gengage-chat-bubble-text td{border:1px solid var(--_gengage-border-color);padding:4px 8px}.gengage-chat-bubble--assistant .gengage-chat-bubble-text img{max-width:100%;height:auto;border-radius:4px;margin:4px 0}.gengage-chat-bubble--assistant .gengage-chat-bubble-text h1,.gengage-chat-bubble--assistant .gengage-chat-bubble-text h2,.gengage-chat-bubble--assistant .gengage-chat-bubble-text h3,.gengage-chat-bubble--assistant .gengage-chat-bubble-text h4,.gengage-chat-bubble--assistant .gengage-chat-bubble-text h5,.gengage-chat-bubble--assistant .gengage-chat-bubble-text h6{margin:8px 0 4px;line-height:1.3;color:#0f172a}.gengage-chat-bubble--assistant .gengage-chat-bubble-text blockquote{border-left:3px solid var(--_gengage-border-color);padding-left:12px;margin:4px 0;color:var(--_gengage-text-secondary)}.gengage-chat-bubble--assistant .gengage-chat-bubble-text{overflow-wrap:break-word}.gengage-chat-bubble--first{border-left:3px solid var(--gengage-primary-color, #3b82f6);padding-left:12px}.gengage-chat-bubble--first .gengage-chat-bubble-text{font-size:15px}@media(max-width:768px){.gengage-chat-bubble--assistant .gengage-chat-bubble-text{line-height:1.5}.gengage-chat-bubble--user{max-width:calc(100% - 16px);word-break:break-word}}.gengage-chat-typing{display:flex;align-items:center;gap:5px;padding:8px 4px;align-self:flex-start;max-width:85%}.gengage-chat-typing:has(.gengage-chat-typing-text),.gengage-chat-typing:has(.gengage-chat-thinking-steps){background:var(--_gengage-surface-secondary);padding:10px 14px;border-radius:12px 12px 12px 4px;gap:8px}.gengage-chat-typing-dots{display:flex;align-items:center;gap:5px}.gengage-chat-typing-dots span{width:6px;height:6px;border-radius:50%;background:#94a3b8;display:inline-block;animation:gengage-chat-typing-fade 1.4s ease-in-out infinite}.gengage-chat-typing-dots span:nth-child(2){animation-delay:.2s}.gengage-chat-typing-dots span:nth-child(3){animation-delay:.4s}@keyframes gengage-chat-typing-fade{0%,to{opacity:.25}50%{opacity:1}}.gengage-chat-typing-sparkle{animation:gengage-sparkle-pulse 1.2s infinite}@keyframes gengage-sparkle-pulse{0%,to{opacity:1}50%{opacity:.4}}.gengage-chat-typing-text{font-size:13px;color:var(--_gengage-text-secondary);font-style:italic;flex:1;min-width:0;word-wrap:break-word;overflow-wrap:break-word}.gengage-chat-stop-btn{display:flex;align-items:center;gap:6px;margin:4px 0 8px;padding:6px 16px;border:1px solid var(--gengage-primary-color, #3b82f6);border-radius:16px;background:var(--gengage-background-color, #fff);color:var(--gengage-primary-color, #3b82f6);font-size:12px;max-width:200px;align-self:center;cursor:pointer;transition:background .15s ease,border-color .15s ease}.gengage-chat-stop-btn:hover{background:var(--_gengage-surface-secondary);border-color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-stop-btn:focus-visible{outline:2px solid var(--gengage-chat-primary, #f27a1a);outline-offset:2px}.gengage-chat-stop-icon{display:inline-block;width:10px;height:10px;background:currentColor;border-radius:2px;flex-shrink:0}.gengage-chat-offline-bar{display:none;align-items:center;gap:6px;padding:6px 12px;font-size:12px;line-height:1.4;color:#92400e;background:#fef3c7;border-bottom:1px solid #fde68a}.gengage-chat-offline-bar--visible{display:flex}.gengage-chat-offline-bar:before{content:"";display:inline-block;width:8px;height:8px;background:var(--_gengage-rating-color);border-radius:50%;flex-shrink:0}.gengage-chat-still-working{font-size:12px;color:var(--gengage-chat-text-secondary, #666);margin-top:6px;animation:gengage-fade-in .3s ease}@keyframes gengage-fade-in{0%{opacity:0}to{opacity:1}}.gengage-chat-thinking-steps{display:flex;flex-direction:column;gap:4px;padding:4px 0}.gengage-chat-thinking-step{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--gengage-chat-text-secondary, #666)}.gengage-chat-thinking-step-marker{font-size:12px;width:16px;text-align:center;flex-shrink:0}.gengage-chat-thinking-step-marker--done{color:var(--gengage-chat-success, #4caf50)}.gengage-chat-thinking-step-marker--active{color:var(--gengage-chat-primary, #1976d2);animation:gengage-thinking-pulse 1.5s ease-in-out infinite}@keyframes gengage-thinking-pulse{0%,to{opacity:1}50%{opacity:.4}}.gengage-chat-thinking-step-text{line-height:1.4}.gengage-chat-error{display:flex;align-items:center;justify-content:center;gap:10px;padding:10px 14px;border-radius:10px;background:#fef2f2;color:var(--gengage-error, #991b1b);font-size:13px;text-align:center;border:1px solid #fecaca}.gengage-chat-error-retry{flex-shrink:0;padding:4px 12px;border:1px solid #fca5a5;border-radius:6px;background:#fff;color:#991b1b;font-size:12px;font-weight:500;cursor:pointer;transition:background .15s}.gengage-chat-error-retry:hover{background:#fee2e2}.gengage-chat-input-area{display:flex;flex-wrap:wrap;align-items:center;flex-shrink:0;gap:0;padding:8px 12px;border-top:1px solid var(--_gengage-border-color);background:var(--gengage-background-color, #fff)}.gengage-chat-input-pill{display:flex;align-items:center;gap:4px;flex:1;min-width:0;height:44px;background:var(--_gengage-surface-secondary);border:1px solid var(--_gengage-border-color);border-radius:30px;padding:2px 8px;overflow:hidden;transition:border-color .2s ease,box-shadow .2s ease}.gengage-chat-input-pill:focus-within{border-color:var(--gengage-primary-color, #3b82f6);box-shadow:0 0 0 2px #3b82f626}.gengage-chat-input{flex:1;min-width:0;min-height:40px;max-height:120px;padding:0 6px 0 14px;border:none;border-radius:0;font-size:14px;font-family:inherit;line-height:1.4;align-content:center;outline:none;background:transparent;color:var(--_gengage-text-primary);resize:none;overflow-y:hidden}.gengage-chat-root--mobile .gengage-chat-input-pill{height:52px;padding:3px 8px}.gengage-chat-root--mobile .gengage-chat-input{min-height:44px;max-height:44px;font-size:16px;white-space:nowrap;overflow:hidden}.gengage-chat-root--mobile .gengage-chat-input::placeholder{font-size:15px}.gengage-chat-input::placeholder{font-size:14px;color:#6b7280;line-height:normal}.gengage-chat-send{width:36px;height:36px;min-width:36px;padding:0;border:none;border-radius:50%;background:var(--gengage-primary-color, #3b82f6);color:var(--gengage-primary-foreground, #fff);font-weight:700;font-size:0;font-family:inherit;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background-color .2s cubic-bezier(.4,0,.2,1),box-shadow .2s ease,transform .15s ease;box-shadow:0 2px 6px #00000026}.gengage-chat-send:hover{filter:brightness(.92);transform:translateY(-1px);box-shadow:0 4px 8px #0000002e}.gengage-chat-send:active{transform:translateY(0);box-shadow:0 1px 2px #0000001f}.gengage-chat-send svg{width:18px;height:18px}.gengage-chat-send:disabled{background:#e5e7eb;opacity:.5;box-shadow:none;cursor:not-allowed}.gengage-chat-footer{padding:4px 10px;text-align:center;font-size:10px;color:#6b7280;border-top:1px solid var(--_gengage-surface-muted);background:var(--gengage-background-color, #fff)}.gengage-chat-uispec{width:100%}.gengage-chat-uispec:empty{display:none}.gengage-chat-uispec>*{animation:gengage-chat-widget-enter .16s cubic-bezier(.2,.7,.2,1) both}@keyframes gengage-chat-widget-enter{0%{opacity:0;transform:translateY(5px) scale(.99)}to{opacity:1;transform:translateY(0) scale(1)}}.gengage-chat-action-buttons{display:flex;flex-wrap:wrap;gap:8px;padding:6px 0 4px}.gengage-chat-action-btn{flex:0 0 auto;padding:8px 16px;border:none;border-radius:999px;background:var(--gengage-primary-color, #3b82f6);color:var(--gengage-primary-foreground, #fff);font-size:13px;font-weight:600;line-height:1.25;font-family:inherit;cursor:pointer;white-space:nowrap;transition:filter .15s ease,transform .1s ease}.gengage-chat-action-btn:hover{filter:brightness(.92)}.gengage-chat-action-btn:active{transform:scale(.97)}.gengage-chat-product-card{position:relative;display:flex;flex-direction:column;border:1px solid #eee;border-radius:16px;overflow:hidden;background:#fff;width:160px;min-width:160px;max-width:160px;box-shadow:0 2px 8px #0000000f;transition:transform .1s ease,box-shadow .2s ease}.gengage-chat-product-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px #0000001a}.gengage-chat-product-card-img{width:100%;height:120px;object-fit:contain;display:block;background:#fff;padding:8px;box-sizing:border-box}.gengage-chat-product-card-body{display:flex;flex-direction:column;flex:1;gap:4px;padding:8px 10px 10px;text-align:center}.gengage-chat-product-card-name{font-size:13px;font-weight:600;color:var(--_gengage-text-primary);line-height:1.35;margin-bottom:0;min-height:2.7em;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.gengage-chat-product-card-brand{font-size:10px;color:#666}.gengage-chat-product-card-rating{font-size:11px;color:var(--_gengage-rating-color);line-height:1}.gengage-star-half{display:inline-block;position:relative}.gengage-star-half>span{position:absolute;left:0;top:0;overflow:hidden;width:.5em}.gengage-chat-product-card-review-count{color:#475569;font-size:10px}.gengage-chat-product-card-price{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:center;gap:2px 4px;font-size:16px;font-weight:800;color:#0f172a}.gengage-chat-product-card-original-price{text-decoration:line-through;color:var(--_gengage-text-secondary);font-weight:400;font-size:inherit;margin-right:6px}.gengage-chat-price-skeleton{display:inline-block;width:80px;height:16px;background:linear-gradient(90deg,#e2e8f0 25%,#f1f5f9,#e2e8f0 75%);background-size:200% 100%;animation:gengage-skeleton-price-pulse 1.5s ease-in-out infinite;border-radius:4px;vertical-align:middle}@keyframes gengage-skeleton-price-pulse{0%{background-position:200% 0}to{background-position:-200% 0}}.gengage-chat-product-card-cta{display:block;margin-top:auto;padding:8px 10px;text-align:center;background:transparent;color:var(--gengage-primary-color, #3b82f6);text-decoration:none;font-size:12px;font-weight:700;letter-spacing:.01em;border-top:1px solid var(--_gengage-surface-muted);cursor:pointer;transition:color .15s ease,background .15s ease}.gengage-chat-product-card-cta:hover{color:var(--gengage-primary-color, #0b24d6);background:var(--_gengage-surface-muted)}.gengage-chat-product-card-cta:active{background:var(--_gengage-surface-muted)}.gengage-chat-product-summary{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--_gengage-border-color);border-radius:12px;background:#fff;cursor:pointer;transition:background .15s,box-shadow .15s;margin:4px 0}.gengage-chat-product-summary:hover{background:#f9fafb;box-shadow:0 1px 4px #0000000f}.gengage-chat-product-summary__image{flex-shrink:0;width:64px;height:64px;border-radius:8px;overflow:hidden;border:1px solid var(--_gengage-surface-secondary);background:#f9fafb}.gengage-chat-product-summary__image img{width:100%;height:100%;object-fit:cover;display:block}.gengage-chat-product-summary__content{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.gengage-chat-product-summary__name{font-size:13px;font-weight:500;line-height:1.3;color:#111827;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.gengage-chat-product-summary__rating{font-size:11px;color:var(--_gengage-rating-color);line-height:1}.gengage-chat-product-summary__review-count{color:#475569;font-size:11px}.gengage-chat-product-summary__price{font-size:13px;font-weight:600;color:#111827;line-height:1;margin-top:2px}.gengage-chat-product-summary__price-original{text-decoration:line-through;color:var(--_gengage-text-secondary);font-weight:400;font-size:11px}.gengage-chat-product-summary__price-current{color:var(--gengage-primary-color, #111827)}.gengage-chat-product-summary__cta{flex-shrink:0;font-size:12px;font-weight:500;color:var(--gengage-primary-color, #2563eb);text-decoration:none;padding:4px 10px;border-radius:8px;transition:background .15s;white-space:nowrap}.gengage-chat-product-summary__cta:hover{background:#0000000a}.gengage-chat-product-summary__cta:focus-visible{outline:2px solid var(--gengage-primary-color, #2563eb);outline-offset:2px}.gengage-chat-product-grid{display:flex;gap:12px;overflow-x:auto;padding:8px 0;-webkit-overflow-scrolling:touch;scrollbar-width:none;scroll-snap-type:x proximity;min-height:180px}.gengage-chat-product-grid>*{scroll-snap-align:start;flex:0 0 auto}.gengage-chat-product-grid::-webkit-scrollbar{display:none}.gengage-chat-review-highlights{padding:2px 0 6px}.gengage-chat-review-item{border:1px solid var(--_gengage-border-color);border-radius:12px;padding:10px 12px;background:#fff}.gengage-chat-review-item[data-tone=positive]{border-color:#bbf7d0;background:#f0fdf4}.gengage-chat-review-item[data-tone=negative]{border-color:#fecaca;background:#fef2f2}.gengage-chat-review-tag{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--_gengage-text-secondary);margin-bottom:4px}.gengage-chat-review-text{font-size:13px;line-height:1.45;color:var(--_gengage-text-primary);display:-webkit-box;-webkit-line-clamp:4;line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}.gengage-chat-review-rating{margin-top:6px;font-size:12px;font-weight:700;color:#0f172a}.gengage-chat-review-empty{font-size:12px;color:var(--_gengage-text-secondary)}.gengage-chat-review-tabs{display:flex;gap:6px;margin-bottom:10px}.gengage-chat-review-tab{padding:6px 14px;border:1px solid var(--_gengage-border-color);border-radius:999px;background:#fff;color:var(--_gengage-text-secondary);font-size:12px;font-weight:600;font-family:inherit;cursor:pointer;transition:background .15s,border-color .15s}.gengage-chat-review-tab:hover{background:var(--_gengage-surface-muted)}.gengage-chat-review-tab--active{background:var(--_gengage-surface-muted);border-color:#94a3b8;color:#0f172a}.gengage-chat-review-pills{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}.gengage-chat-review-pill{display:flex;align-items:center;gap:6px;padding:6px 10px;border:1px solid var(--_gengage-border-color);border-radius:8px;background:#fff;font-size:12px;font-family:inherit;color:#334155;box-shadow:0 1px 2px #0000000a;cursor:pointer;transition:background .15s,border-color .15s}.gengage-chat-review-pill:hover{background:var(--_gengage-surface-muted)}.gengage-chat-review-pill--active{background:var(--_gengage-surface-muted);border-color:var(--_gengage-text-secondary, #64748b);color:var(--_gengage-text-primary, #0f172a);font-weight:600}.gengage-chat-review-pill--active .gengage-chat-review-pill-count{background:var(--_gengage-border-color, #e2e8f0);color:var(--_gengage-text-primary, #0f172a)}.gengage-chat-review-pill[data-tone=positive]{border-color:#bbf7d0}.gengage-chat-review-pill[data-tone=negative]{border-color:#fecaca}.gengage-chat-review-pill-icon{font-size:11px;font-weight:700}.gengage-chat-review-pill[data-tone=positive] .gengage-chat-review-pill-icon{color:var(--_gengage-success-color)}.gengage-chat-review-pill[data-tone=negative] .gengage-chat-review-pill-icon{color:#dc2626}.gengage-chat-review-pill-count{font-size:10px;font-weight:700;background:var(--_gengage-surface-muted);color:var(--_gengage-text-secondary);border-radius:4px;padding:1px 5px}.gengage-chat-review-items{display:grid;gap:10px}.gengage-chat-favorites-page{padding:12px}.gengage-chat-favorites-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:48px 24px;text-align:center;color:var(--_gengage-text-secondary)}.gengage-chat-favorites-empty-icon{opacity:.25;color:var(--_gengage-danger-color, #ef4444)}.gengage-chat-favorites-empty p{font-size:13px;margin:0;line-height:1.5}.gengage-chat-favorites-list{display:flex;flex-direction:column;gap:10px}.gengage-chat-favorites-card{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--_gengage-border-color);border-radius:12px;background:var(--_gengage-surface-color, #fff);position:relative;transition:opacity .2s,transform .2s}.gengage-chat-favorites-card--removing{opacity:0;transform:translate(8px)}.gengage-chat-favorites-card__image{width:56px;height:56px;flex-shrink:0;border-radius:8px;overflow:hidden;background:var(--_gengage-surface-muted)}.gengage-chat-favorites-card__image img{width:100%;height:100%;object-fit:contain}.gengage-chat-favorites-card__info{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.gengage-chat-favorites-card__name{font-size:13px;font-weight:500;color:var(--_gengage-text-primary, #0f172a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gengage-chat-favorites-card__price{font-size:13px;font-weight:700;color:var(--_gengage-primary-color, #1d4ed8)}.gengage-chat-favorites-remove{flex-shrink:0;width:28px;height:28px;border-radius:50%;background:transparent;border:none;color:var(--_gengage-danger-color, #ef4444);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;opacity:.7;transition:opacity .15s,background .15s}.gengage-chat-favorites-remove:hover{opacity:1;background:var(--_gengage-danger-light, #fee2e2)}.gengage-chat-divider{border:none;border-top:1px solid var(--_gengage-border-color);margin:8px 0}.gengage-chat-divider-wrapper{display:flex;align-items:center;gap:8px;margin:8px 0}.gengage-chat-divider-wrapper hr{flex:1;border:none;border-top:1px solid var(--_gengage-border-color);margin:0}.gengage-chat-divider-label{font-size:11px;color:#6b7280;white-space:nowrap}.gengage-chat--overlay .gengage-chat-drawer{position:fixed;inset:0;width:100%;max-width:480px;max-height:100%;margin:0 auto;border-radius:0;animation:gengage-chat-overlay-in .24s cubic-bezier(.2,.72,.2,1)}.gengage-chat--overlay:before{content:"";position:fixed;inset:0;background:var(--gengage-chat-overlay-backdrop, rgba(0, 0, 0, .45));z-index:-1}@keyframes gengage-chat-overlay-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.gengage-chat-panel-skeleton{display:flex;flex-direction:column;gap:14px;padding:6px 0}.gengage-chat-panel-skeleton-block{height:110px;border-radius:10px;background:linear-gradient(90deg,#e5e7eb 25%,#f3f4f6,#e5e7eb 75%);background-size:200% 100%;animation:gengage-panel-shimmer 1.4s infinite}@keyframes gengage-panel-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.gengage-chat-panel-skeleton-block--image{height:200px;border-radius:8px;margin-bottom:12px}.gengage-chat-panel-skeleton-block--text{height:16px;border-radius:4px;margin-bottom:8px}.gengage-chat-panel-skeleton-block--text:nth-child(3){width:80%}.gengage-chat-panel-skeleton-block--text:nth-child(4){width:60%}.gengage-chat-panel-skeleton-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.gengage-chat-panel-skeleton-block--card{height:120px;border-radius:8px}.gengage-chat-panel-skeleton-block--row{height:32px;border-radius:4px;margin-bottom:4px}.gengage-chat-panel .gengage-chat-product-card{width:100%;max-width:100%;min-width:0;display:flex;flex-direction:column;border-radius:12px;border:1px solid var(--_gengage-border-color);box-shadow:0 1px 4px #0000000f;overflow:hidden;padding:0}.gengage-chat-panel .gengage-chat-product-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px #0000001a;border-color:#d1d5db}.gengage-chat-panel .gengage-chat-product-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));overflow-x:visible;gap:12px;min-height:auto;padding:4px 0}.gengage-chat-panel .gengage-chat-product-card-img{width:100%;height:160px;border-radius:0;object-fit:contain;background:#fafafa;padding:12px;box-sizing:border-box}.gengage-chat-panel .gengage-chat-product-card-body{padding:10px 12px 12px;text-align:left;gap:4px}.gengage-chat-panel .gengage-chat-product-card-name{min-height:0;margin-bottom:2px;font-size:13px;-webkit-line-clamp:2;line-clamp:2}.gengage-chat-panel .gengage-chat-product-card-price{justify-content:flex-start;font-size:15px}.gengage-chat-panel .gengage-chat-product-card-cta{display:block;padding:10px 12px;text-align:center;border-top:1px solid var(--_gengage-surface-muted);border-radius:0;background:transparent;color:var(--gengage-primary-color, #3b82f6);font-weight:700;font-size:13px}.gengage-chat-product-card--selected{border-color:var(--gengage-primary-color, #3b82f6);background:color-mix(in srgb,var(--gengage-primary-color, #3b82f6) 8%,transparent);box-shadow:0 0 0 1px var(--gengage-primary-color, #3b82f6)}.gengage-chat-panel--visible{min-height:0}.gengage-chat-panel--visible>*{flex-shrink:0}.gengage-chat-load-more-btn{display:block;margin:12px auto;padding:8px 24px;border:1px solid var(--_gengage-border-color);border-radius:8px;background:transparent;color:var(--gengage-primary-color, #3b82f6);cursor:pointer;font-size:14px}.gengage-chat-load-more-btn:hover{background:var(--_gengage-surface-muted, #f8fafc)}.gengage-chat-product-details-panel{display:flex;flex-direction:column;gap:12px;width:100%;background:#fff;border:1px solid var(--_gengage-border-color);border-radius:16px;padding:14px;box-sizing:border-box}.gengage-chat-product-details-media{border:1px solid var(--_gengage-surface-muted);border-radius:12px;background:#fafafa;padding:12px;display:flex;flex-direction:column;align-items:center}.gengage-chat-product-details-img{width:100%;height:auto;max-height:300px;object-fit:contain;border-radius:8px}.gengage-chat-product-details-content{display:flex;flex-direction:column;gap:8px;min-width:0}.gengage-chat-product-details-title{margin:0;font-size:17px;font-weight:700;line-height:1.3;color:#0f172a}.gengage-chat-product-details-rating{display:inline-flex;align-items:center;gap:4px;width:fit-content;padding:3px 8px;border-radius:999px;background:#fff7ed;color:#9a3412;font-size:13px;font-weight:700}.gengage-chat-product-details-review-count{color:#7c2d12;font-weight:600}.gengage-chat-product-details-price{display:flex;align-items:baseline;gap:6px}.gengage-chat-product-details-original-price{font-size:14px;color:#64748b;text-decoration:line-through}.gengage-chat-product-details-current-price{font-size:22px;font-weight:800;line-height:1.1;color:#0f172a}.gengage-chat-product-details-stock{width:fit-content;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:700}.gengage-chat-product-details-stock.is-in-stock{background:#dcfce7;color:#166534}.gengage-chat-product-details-stock.is-out-of-stock{background:#fee2e2;color:#991b1b}.gengage-chat-product-details-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:4px}.gengage-chat-product-details-cta{display:inline-flex;align-items:center;justify-content:center;min-height:40px;padding:0 20px;border-radius:999px;border:none;text-decoration:none;background:var(--gengage-primary-color, #3b82f6);color:var(--gengage-primary-foreground, #fff);font-size:14px;font-weight:700;cursor:pointer;transition:filter .14s ease,transform .12s ease}.gengage-chat-product-details-cta:hover{filter:brightness(1.05);transform:translateY(-1px)}.gengage-chat-product-details-cta:active{transform:translateY(1px)}.gengage-chat-product-details-atc{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:10px 20px;border:none;border-radius:10px;background:var(--_gengage-success-color);color:#fff;font-size:14px;font-weight:700;font-family:inherit;cursor:pointer;transition:filter .12s ease,transform .12s ease}.gengage-chat-product-details-atc:hover{filter:brightness(1.08);transform:translateY(-1px)}.gengage-chat-product-details-atc:active{transform:translateY(1px)}.gengage-chat-product-detail-tabs{margin-top:4px;border-top:1px solid var(--_gengage-border-color);padding-top:12px}.gengage-chat-product-detail-tab-bar{display:flex;gap:0;border-bottom:2px solid var(--_gengage-border-color);margin-bottom:12px}.gengage-chat-product-detail-tab{flex:1;padding:8px 12px;border:none;background:transparent;color:var(--_gengage-text-secondary);font-size:13px;font-weight:600;font-family:inherit;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:color .15s,border-color .15s}.gengage-chat-product-detail-tab:hover{color:#334155}.gengage-chat-product-detail-tab--active{color:var(--gengage-primary-color, #3b82f6);border-bottom-color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-product-detail-tab-panel{font-size:13px;line-height:1.6;color:#374151}.gengage-chat-product-specs-table{width:100%;border-collapse:collapse;font-size:13px}.gengage-chat-product-specs-table tr:nth-child(2n){background:var(--_gengage-surface-muted)}.gengage-chat-product-specs-key{padding:6px 10px;font-weight:600;color:#475569;white-space:nowrap;border-bottom:1px solid var(--_gengage-surface-muted);width:40%}.gengage-chat-product-specs-value{padding:6px 10px;color:var(--_gengage-text-primary);border-bottom:1px solid var(--_gengage-surface-muted)}.gengage-chat-product-card-atc{position:absolute;bottom:42px;right:6px;opacity:0;transition:opacity .15s ease;z-index:1}.gengage-chat-product-card:hover .gengage-chat-product-card-atc{opacity:1}@media(hover:none),(pointer:coarse){.gengage-chat-product-card-atc{opacity:1;position:relative;bottom:auto;right:auto;margin-top:4px}}.gengage-chat-drawer.gengage-chat-drawer--hidden{transform:translate(100%);opacity:0;pointer-events:none;box-shadow:none;visibility:hidden}.gengage-chat-root--mobile .gengage-chat-drawer.gengage-chat-drawer--hidden{transform:translateY(100%);opacity:0;pointer-events:none;box-shadow:none;visibility:hidden}@media(max-width:900px){.gengage-chat-drawer--with-panel .gengage-chat-panel--visible{width:clamp(280px,calc(100vw - var(--_gengage-chat-conversation-width)),560px);max-width:560px}}.gengage-chat-attachment-preview{display:flex;align-items:center;gap:8px;padding:6px 10px;background:var(--_gengage-surface-secondary);border:1px solid var(--_gengage-border-color);border-radius:8px;width:100%;box-sizing:border-box}.gengage-chat-attachment-preview--hidden{display:none}.gengage-chat-attachment-preview-thumb{width:40px;height:40px;border-radius:4px;object-fit:cover;flex-shrink:0}.gengage-chat-attachment-name{flex:1;font-size:12px;color:#4b5563;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gengage-chat-attachment-remove{background:none;border:none;cursor:pointer;font-size:18px;color:#6b7280;padding:0 4px;line-height:1;flex-shrink:0}.gengage-chat-attachment-remove:hover{color:#ef4444}.gengage-chat-attach-btn{background:none;border:none;cursor:pointer;width:32px;height:32px;padding:0;line-height:1;flex-shrink:0;display:flex;align-items:center;justify-content:center;border-radius:50%;color:#6b7280;transition:color .15s,background .15s}.gengage-chat-attach-btn:hover{color:#4b5563;background:#0000000d}.gengage-chat-attach-btn svg{width:20px;height:20px}.gengage-chat-mic-btn{background:none;border:none;cursor:pointer;width:32px;height:32px;padding:0;line-height:1;flex-shrink:0;display:flex;align-items:center;justify-content:center;border-radius:50%;color:#6b7280;transition:color .15s,background .15s}.gengage-chat-mic-btn:hover{color:#4b5563;background:#0000000d}.gengage-chat-mic-btn svg{width:20px;height:20px}.gengage-chat-mic-btn--active{color:#ef4444;animation:gengage-mic-pulse 1.2s ease-in-out infinite}.gengage-chat-mic-btn--active:hover{color:#dc2626}@keyframes gengage-mic-pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.15);opacity:.8}}.gengage-chat-input-area--dragover{outline:2px dashed var(--gengage-primary-color, #3b82f6);outline-offset:-2px;background:#eff6ff}.gengage-chat-attachment-thumb{width:120px;max-width:100%;height:auto;border-radius:8px;margin-bottom:6px;display:block}.gengage-chat-root--mobile{--_gengage-qty-btn-size: 44px;--_gengage-qty-btn-size-compact: 44px}.gengage-chat-root--mobile .gengage-chat-header-btn,.gengage-chat-root--mobile .gengage-chat-close{width:44px;height:44px;border-radius:12px}.gengage-chat-root--mobile .gengage-chat-attach-btn,.gengage-chat-root--mobile .gengage-chat-mic-btn,.gengage-chat-root--mobile .gengage-chat-send{width:44px;height:44px;min-width:44px}.gengage-chat-root--mobile .gengage-chat-attach-btn svg,.gengage-chat-root--mobile .gengage-chat-mic-btn svg{width:22px;height:22px}.gengage-chat-root--mobile .gengage-chat-panel-divider{display:flex;width:100%;height:20px;align-items:center;justify-content:center;cursor:ns-resize;background:transparent;touch-action:pan-y;position:relative;overflow:visible}.gengage-chat-root--mobile .gengage-chat-panel-divider--hidden{display:none}.gengage-chat-root--mobile .gengage-chat-drawer--with-panel{left:0;right:0;width:100%;border-radius:0}.gengage-chat-root--mobile .gengage-chat-panel{display:flex;flex-direction:column;position:absolute;inset:0;z-index:10;width:100%;min-width:0;max-width:none;max-height:none;border:none;box-shadow:none;border-radius:0;background:var(--gengage-chat-panel-bg, #fff);overflow-y:auto;overflow-x:hidden;transform:translate(100%);transition:transform .32s cubic-bezier(.4,0,.2,1);pointer-events:none;padding:0 12px 16px}.gengage-chat-root--mobile .gengage-chat-panel--visible{transform:translate(0);pointer-events:auto}.gengage-chat-root--mobile .gengage-chat-panel-divider,.gengage-chat-root--mobile .gengage-chat-drawer--with-panel .gengage-chat-panel-divider{display:none}.gengage-chat-root--mobile .gengage-chat-drawer--with-panel .gengage-chat-body{flex-direction:row}.gengage-chat-root--mobile .gengage-chat-drawer--with-panel .gengage-chat-conversation{width:100%;flex:1;border-left:none}.gengage-chat-root--mobile .gengage-qty-stepper--compact .gengage-qty-submit{min-height:44px;padding:0 12px;font-size:13px}.gengage-chat-root--mobile .gengage-chat-product-details-atc-stepper .gengage-qty-submit{min-height:44px;padding:0 16px}.gengage-chat-root--mobile .gengage-chat-product-details-share{width:44px;height:44px}.gengage-chat-root--mobile .gengage-chat-panel .gengage-chat-product-card{grid-template-columns:84px 1fr}.gengage-chat-root--mobile .gengage-chat-panel .gengage-chat-product-card-cta{grid-column:1 / -1;width:100%}.gengage-chat-root--mobile .gengage-chat-product-details-panel{padding:12px;gap:12px}.gengage-chat-root--mobile .gengage-chat-product-details-media{min-height:140px}.gengage-chat-root--mobile .gengage-chat-product-details-title{font-size:15px}.gengage-chat-root--mobile .gengage-chat-product-details-current-price{font-size:20px}.gengage-chat-root--mobile .gengage-chat-product-grid{scroll-snap-type:x mandatory}.gengage-chat-root--mobile .gengage-chat-product-card{width:280px;min-width:280px;scroll-snap-align:center}.gengage-chat-root--mobile .gengage-chat-product-card-img{height:180px}.gengage-chat-root--mobile .gengage-chat-drawer{position:fixed;inset:0;width:100%;max-height:100%;border-radius:0}.gengage-chat-root--mobile .gengage-chat-bubble{max-width:100%}.gengage-chat-root--mobile .gengage-chat-panel .gengage-chat-product-card-img{max-height:120px;object-fit:contain}.gengage-chat-root--mobile .gengage-chat-messages{scrollbar-width:none;padding:12px 16px}.gengage-chat-root--mobile .gengage-chat-messages::-webkit-scrollbar{display:none}.gengage-chat-root--mobile .gengage-chat-drawer{border-top:none}.gengage-chat-root--mobile .gengage-chat-header{border-radius:16px 16px 0 0}.gengage-chat-root--mobile .gengage-chat-conversation{overflow-y:auto;-webkit-overflow-scrolling:touch;min-height:0}.gengage-chat-root--mobile .gengage-chat-product-details-img{min-height:120px;object-fit:contain}.gengage-chat-root--mobile .gengage-chat-product-details-actions{flex-wrap:wrap;gap:8px}.gengage-chat-root--mobile .gengage-chat-product-card-promos,.gengage-chat-root--mobile .gengage-chat-product-details-promos{flex-wrap:wrap;gap:4px}.gengage-chat-root--mobile .gengage-chat-input::placeholder{font-size:13px}.gengage-chat-kvkk-banner{display:flex;align-items:flex-start;gap:8px;padding:10px 14px;background:#fffbeb;border-bottom:1px solid #fde68a;font-size:12px;line-height:1.5;color:#92400e}.gengage-chat-kvkk-content{flex:1;min-width:0}.gengage-chat-kvkk-content a{color:#b45309;text-decoration:underline}.gengage-chat-kvkk-dismiss{flex-shrink:0;width:20px;height:20px;border:none;background:transparent;color:#78350f;font-size:18px;cursor:pointer;padding:0;line-height:1}.gengage-chat-comparison{padding:16px}.gengage-chat-comparison-heading{font-size:14px;font-weight:700;letter-spacing:.05em;color:#0f172a;margin:0 0 16px}.gengage-chat-comparison-recommended{border:1px solid var(--_gengage-border-color);border-radius:12px;padding:16px;background:#fff;box-shadow:0 1px 3px #0000000f;margin-bottom:12px}.gengage-chat-comparison-recommended-label{font-size:12px;font-weight:700;color:var(--_gengage-success-color);text-transform:uppercase;letter-spacing:.04em;margin-bottom:12px}.gengage-chat-comparison-recommended-body{display:flex;gap:12px;align-items:flex-start}.gengage-chat-comparison-recommended-body img{width:80px;height:80px;object-fit:contain;border-radius:8px;background:var(--_gengage-surface-muted)}.gengage-chat-comparison-recommended-info{flex:1;min-width:0}.gengage-chat-comparison-recommended-title{font-size:14px;font-weight:600;color:#0f172a;margin-bottom:4px}.gengage-chat-comparison-recommended-price{font-size:16px;font-weight:700;color:#0f172a}.gengage-chat-comparison-highlights{margin-top:12px;padding-top:12px;border-top:1px solid var(--_gengage-surface-muted)}.gengage-chat-comparison-highlights-label{font-size:12px;font-weight:600;color:var(--_gengage-text-secondary);margin-bottom:6px}.gengage-chat-comparison-highlights ul{margin:0;padding-left:18px;font-size:13px;color:#334155;line-height:1.6}.gengage-chat-comparison-special{background:#fffbeb;border:1px solid #fde68a;border-radius:12px;padding:12px 16px;margin-bottom:12px;font-size:13px;color:#92400e}.gengage-chat-comparison-special summary{cursor:pointer;font-weight:600}.gengage-chat-comparison-special ul{margin:8px 0 0;padding-left:18px;line-height:1.6}.gengage-chat-comparison-table{width:100%;border-collapse:collapse;font-size:13px;margin-top:12px}.gengage-chat-comparison-table th,.gengage-chat-comparison-table td{padding:10px 12px;text-align:center;border-bottom:1px solid var(--_gengage-surface-muted);vertical-align:top}.gengage-chat-comparison-table th{font-weight:600;font-size:12px;color:#334155}.gengage-chat-comparison-table th img{width:60px;height:60px;object-fit:contain;border-radius:6px;background:var(--_gengage-surface-muted);margin-bottom:6px}.gengage-chat-comparison-table-price{font-weight:700;color:#0f172a}.gengage-chat-comparison-label{text-align:left;font-weight:600;color:var(--_gengage-text-secondary);white-space:nowrap}.gengage-chat-comparison-selected{background:#f0fdf4}.gengage-chat-comparison-recommended-text{padding:8px 12px;font-size:12px;color:var(--gengage-text-secondary, #475569);font-style:italic;border-top:1px solid var(--gengage-border-color, #e2e8f0);margin-top:8px}.gengage-chat-comparison-product-actions{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}.gengage-chat-comparison-view-btn{flex:1;min-width:0;padding:8px 12px;border:1px solid var(--gengage-primary-color, #3b82f6);border-radius:6px;background:transparent;color:var(--gengage-primary-color, #3b82f6);font-size:12px;font-weight:500;font-family:inherit;cursor:pointer;transition:background .15s ease,color .15s ease;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.gengage-chat-comparison-view-btn:hover{background:var(--gengage-primary-color, #3b82f6);color:#fff}.gengage-chat-pills{position:relative;padding:8px 12px;border-top:1px solid var(--_gengage-surface-muted);background:var(--gengage-background-color, #fff)}.gengage-chat-pills-scroll{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;padding-right:28px}.gengage-chat-pills-scroll::-webkit-scrollbar{display:none}.gengage-chat-root--mobile .gengage-chat-pills-scroll{flex-wrap:wrap;gap:6px}.gengage-chat-root--mobile .gengage-chat-pill{white-space:normal;max-width:100%}.gengage-chat-pill{flex:0 0 auto;padding:8px 16px;border:none;border-radius:999px;background:var(--gengage-primary-color, #3b82f6);color:var(--gengage-primary-foreground, #fff);font-size:13px;font-weight:600;font-family:inherit;white-space:nowrap;cursor:pointer;transition:filter .15s,transform .1s}.gengage-chat-pill:hover{filter:brightness(.92)}.gengage-chat-pill:active{transform:scale(.97)}.gengage-chat-pill--rich{display:flex;align-items:center;gap:8px;padding:6px 14px 6px 6px;border-radius:20px}.gengage-chat-pill-img{width:32px;height:32px;border-radius:50%;object-fit:cover;flex-shrink:0;background:#ffffff26}.gengage-chat-pill-text{font-size:13px;font-weight:600;line-height:1.2}.gengage-chat-pill-desc{display:none}.gengage-chat-pill--rich .gengage-chat-pill-desc{display:block;font-size:10px;font-weight:400;opacity:.8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px}.gengage-chat-pills-arrow{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:28px;height:28px;border-radius:50%;border:1px solid var(--_gengage-border-color);background:#fff;color:var(--_gengage-text-secondary);font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:-4px 0 8px #ffffffe6;z-index:1}.gengage-chat-pills-arrow:hover{background:var(--_gengage-surface-muted);color:#334155}@media(prefers-reduced-motion:reduce){.gengage-chat-uispec>*,.gengage-chat-action-btn,.gengage-chat-product-card,.gengage-chat-product-card-cta,.gengage-chat-send,.gengage-chat-launcher,.gengage-chat-pill,.gengage-chat-drawer,.gengage-chat-typing-dots span,.gengage-chat-typing-sparkle,.gengage-chat-thinking-step-marker--active,.gengage-chat-bubble,.gengage-chat-panel-skeleton-block,.gengage-chat-ai-toppick-card,.gengage-chat-mic-btn--active,.gengage-chat-ai-toppick-spinner:after,.gengage-chat-panel-shimmer,.gengage-chat-overlay,.gengage-chat-product-details-skeleton-price,.gengage-chat-still-working,.gengage-skeleton-card,.gengage-skeleton-line,.gengage-skeleton-img,.gengage-skeleton-text,.gengage-skeleton-price{animation:none!important;transition:none!important;transform:none!important}}.gengage-chat-bubble--user{position:relative}.gengage-chat-rollback-btn{position:absolute;left:-28px;top:50%;transform:translateY(-50%);width:24px;height:24px;border:none;border-radius:50%;background:var(--gengage-surface-color, #f1f5f9);color:var(--gengage-text-secondary, #64748b);cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s ease;padding:0}.gengage-chat-bubble--user:hover .gengage-chat-rollback-btn{opacity:1}.gengage-chat-rollback-btn:hover{background:var(--gengage-primary-color, #3b82f6);color:#fff}.gengage-chat-bubble--hidden{display:none}.gengage-chat-ai-top-picks{display:flex;flex-direction:column;gap:12px;padding:8px 0;scroll-margin-top:60px}.gengage-chat-ai-top-picks-title{font-size:15px;font-weight:600;color:var(--gengage-text-primary, #1e293b);margin:0 0 4px}.gengage-chat-ai-top-picks-cards{display:flex;flex-direction:column;gap:10px}.gengage-chat-ai-toppick-discount-badge{position:absolute;top:8px;right:8px;background:var(--gengage-discount-bg, #ef4444);color:#fff;font-size:11px;font-weight:700;padding:2px 6px;border-radius:4px;z-index:1}.gengage-chat-ai-toppick-card--winner{position:relative;display:flex;flex-direction:column;border:2px solid var(--gengage-primary-color, #3b82f6);border-radius:12px;background:#fff;overflow:hidden;transition:box-shadow .2s ease}.gengage-chat-ai-toppick-card--winner:hover{box-shadow:0 4px 16px #3b82f626}.gengage-chat-ai-toppick-card--winner .gengage-chat-ai-toppick-img{width:100%;height:140px;object-fit:contain;background:var(--_gengage-surface-muted)}.gengage-chat-ai-toppick-card--compact{position:relative;display:flex;flex-direction:row;align-items:center;gap:12px;border:1px solid var(--gengage-border-color, #e2e8f0);border-radius:10px;background:#fff;padding:10px;transition:box-shadow .2s ease,transform .15s ease}.gengage-chat-ai-toppick-card--compact:hover{box-shadow:0 2px 8px #00000014;transform:translateY(-1px)}.gengage-chat-ai-toppick-card--compact .gengage-chat-ai-toppick-img{width:64px;height:64px;object-fit:contain;border-radius:8px;background:var(--_gengage-surface-muted);flex-shrink:0}.gengage-chat-ai-toppick-badge{position:absolute;top:8px;left:8px;background:var(--gengage-primary-color, #3b82f6);color:#fff;font-size:10px;font-weight:700;text-transform:uppercase;padding:2px 8px;border-radius:4px;z-index:1;letter-spacing:.5px}.gengage-chat-ai-toppick-body{display:flex;flex-direction:column;gap:4px;padding:10px;flex:1;min-width:0}.gengage-chat-ai-toppick-card--compact .gengage-chat-ai-toppick-body{padding:0}.gengage-chat-ai-toppick-name{font-size:13px;font-weight:600;color:var(--gengage-text-primary, #1e293b);overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical}.gengage-chat-ai-toppick-role{font-size:11px;font-weight:600;color:var(--gengage-primary-color, #3b82f6);text-transform:uppercase;letter-spacing:.3px}.gengage-chat-ai-toppick-labels{display:flex;flex-wrap:wrap;gap:4px}.gengage-chat-ai-toppick-label{font-size:11px;padding:1px 6px;border-radius:4px;font-weight:500}.gengage-chat-ai-toppick-label[data-sentiment=positive]{background:#dcfce7;color:#166534}.gengage-chat-ai-toppick-label[data-sentiment=negative]{background:#fee2e2;color:#991b1b}.gengage-chat-ai-toppick-label[data-sentiment=neutral]{background:var(--_gengage-surface-muted);color:#475569}.gengage-chat-ai-toppick-score{font-size:12px;font-weight:700;color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-ai-toppick-reason{font-size:12px;color:var(--gengage-chat-text-secondary, #666);line-height:1.4;margin-top:4px}.gengage-chat-ai-toppick-review{font-size:12px;font-style:italic;color:var(--gengage-text-secondary, #64748b);margin:2px 0;padding-left:8px;border-left:2px solid var(--gengage-border-color, #e2e8f0)}.gengage-chat-ai-toppick-price{font-size:14px;font-weight:700;color:var(--gengage-text-primary, #1e293b)}.gengage-chat-ai-toppick-original-price{text-decoration:line-through;color:var(--gengage-text-secondary, #64748b);font-weight:400;font-size:12px}.gengage-chat-ai-toppick-cta{display:block;width:calc(100% - 20px);margin:6px 10px 10px;padding:8px 0;border:none;border-radius:8px;background:var(--gengage-primary-color, #3b82f6);color:#fff;font-size:13px;font-weight:600;cursor:pointer;text-align:center;transition:background .15s ease}.gengage-chat-ai-toppick-cta:hover{filter:brightness(.92)}.gengage-chat-ai-toppick-card--compact .gengage-chat-ai-toppick-cta{width:auto;margin:0;padding:6px 14px;flex-shrink:0;align-self:center}.gengage-chat-ai-toppick-spinner{position:absolute;inset:0;background:#ffffffb3;display:flex;align-items:center;justify-content:center;border-radius:12px;z-index:3}.gengage-chat-ai-toppick-spinner:after{content:"";width:24px;height:24px;border:3px solid var(--gengage-border, #e2e8f0);border-top-color:var(--gengage-accent-primary, #3b82f6);border-radius:50%;animation:gengage-spin .7s linear infinite}@keyframes gengage-spin{to{transform:rotate(360deg)}}.gengage-chat-root--mobile .gengage-chat-ai-top-picks-cards{flex-direction:row;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;gap:10px;padding-bottom:4px}.gengage-chat-root--mobile .gengage-chat-ai-toppick-card--winner,.gengage-chat-root--mobile .gengage-chat-ai-toppick-card--compact{min-width:280px;max-width:280px;flex-shrink:0;scroll-snap-align:start}.gengage-chat-root--mobile .gengage-chat-ai-toppick-card--compact{flex-direction:column;align-items:stretch}.gengage-chat-root--mobile .gengage-chat-ai-toppick-card--compact .gengage-chat-ai-toppick-img{width:100%;height:100px;border-radius:8px 8px 0 0}.gengage-chat-root--mobile .gengage-chat-ai-toppick-card--compact .gengage-chat-ai-toppick-cta{width:calc(100% - 20px);margin:6px 10px 10px;align-self:stretch}.gengage-chat-root--mobile .gengage-chat-rollback-btn{left:-24px}.gengage-chat-grounding-review{display:flex;align-items:center;gap:12px;padding:12px 16px;background:var(--gengage-surface-color, #f8fafc);border:1px solid var(--gengage-border-color, #e2e8f0);border-radius:10px;transition:background .15s ease,border-color .15s ease}.gengage-chat-grounding-review:hover{background:var(--gengage-hover-color, #f1f5f9);border-color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-grounding-review-icon{font-size:20px;flex-shrink:0}.gengage-chat-grounding-review-body{flex:1;min-width:0}.gengage-chat-grounding-review-title{font-weight:600;font-size:13px;color:var(--gengage-text-color, #1e293b)}.gengage-chat-grounding-review-subtitle{font-size:12px;color:var(--gengage-text-muted, #64748b);margin-top:2px}.gengage-chat-grounding-review-cta{font-size:13px;font-weight:500;color:var(--gengage-primary-color, #3b82f6);white-space:nowrap;flex-shrink:0}.gengage-chat-grouping-cards{display:flex;flex-direction:column;gap:6px}.gengage-chat-grouping-card{display:flex;align-items:center;gap:10px;padding:8px 12px;background:var(--gengage-surface-color, #f8fafc);border:1px solid var(--gengage-border-color, #e2e8f0);border-radius:8px;transition:background .15s ease,border-color .15s ease}.gengage-chat-grouping-card:hover{background:var(--gengage-hover-color, #f1f5f9);border-color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-grouping-card-arrow{display:none;font-size:14px;color:var(--gengage-primary-color, #3b82f6);flex-shrink:0}.gengage-chat-grouping-card-img{width:48px;height:48px;min-width:48px;min-height:48px;border-radius:4px;object-fit:cover;flex-shrink:0}.gengage-chat-grouping-card-body{flex:1;min-width:0;display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}.gengage-chat-grouping-card-name{font-weight:600;font-size:13px;color:var(--gengage-text-color, #1e293b)}.gengage-chat-grouping-card-desc{font-size:12px;color:var(--gengage-text-muted, #64748b)}.gengage-chat-grouping-card-labels{display:block;font-size:11px;color:var(--gengage-chat-text-secondary, #888);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gengage-chat-root--mobile .gengage-chat-grouping-card-img{display:none}.gengage-chat-root--mobile .gengage-chat-grouping-card-arrow{display:inline}.gengage-chat-suggested-search-cards{display:flex;flex-direction:column;gap:8px}.gengage-chat-suggested-search-card{display:flex;align-items:flex-start;gap:12px;padding:10px 14px;background:var(--gengage-surface-color, #f8fafc);border:1px solid var(--gengage-border-color, #e2e8f0);border-radius:10px;transition:background .15s ease,border-color .15s ease}.gengage-chat-suggested-search-card:hover{background:var(--gengage-hover-color, #f1f5f9);border-color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-suggested-search-card-img{width:40px;height:40px;border-radius:6px;object-fit:cover;flex-shrink:0}.gengage-chat-suggested-search-card-body{flex:1;min-width:0}.gengage-chat-suggested-search-card-name{font-weight:600;font-size:13px;color:var(--gengage-text-color, #1e293b)}.gengage-chat-suggested-search-card-desc{font-size:12px;color:var(--gengage-text-secondary, #475569);margin-top:2px}.gengage-chat-suggested-search-card-diff{font-size:11px;color:var(--gengage-text-muted, #64748b);margin-top:2px;font-style:italic}.gengage-chat-product-details-gallery{position:relative}.gengage-chat-product-details-gallery .gengage-chat-product-details-img{touch-action:pan-y}.gengage-chat-product-gallery-thumbs{display:flex;gap:8px;padding:10px 0 4px;overflow-x:auto;scrollbar-width:thin;justify-content:center;width:100%}.gengage-chat-product-gallery-thumb{width:56px;height:56px;object-fit:cover;border-radius:8px;border:2px solid transparent;cursor:pointer;flex-shrink:0;transition:border-color .15s ease;background:#fff}.gengage-chat-product-gallery-thumb:hover{border-color:var(--gengage-border-color, #cbd5e1)}.gengage-chat-product-gallery-thumb--active{border-color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-product-gallery-thumb-more{display:flex;align-items:center;justify-content:center;width:56px;height:56px;border-radius:8px;background:var(--_gengage-surface-muted, #f1f5f9);color:var(--_gengage-text-secondary, #64748b);font-size:13px;font-weight:600;flex-shrink:0}.gengage-chat-product-variants{margin-top:12px}.gengage-chat-product-variants-label{font-size:12px;font-weight:600;color:var(--gengage-text-muted, #64748b);margin-bottom:6px;text-transform:none;letter-spacing:.5px}.gengage-chat-product-variants-list{display:flex;flex-wrap:wrap;gap:6px}.gengage-chat-product-variant-btn{padding:6px 12px;border:1px solid var(--gengage-border-color, #e2e8f0);border-radius:6px;background:var(--gengage-surface-color, #f8fafc);color:var(--gengage-text-color, #1e293b);font-size:12px;cursor:pointer;transition:background .15s ease,border-color .15s ease}.gengage-chat-product-variant-btn:hover{background:var(--gengage-hover-color, #f1f5f9);border-color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-product-grid-wrapper{display:flex;flex-direction:column;gap:8px}.gengage-chat-product-sort-toolbar{display:flex;gap:4px;padding:4px;background:var(--gengage-surface-color, #f8fafc);border-radius:8px;border:1px solid var(--gengage-border-color, #e2e8f0)}.gengage-chat-product-sort-btn{flex:1;padding:6px 10px;border:1px solid var(--_gengage-border-color);border-radius:6px;background:transparent;color:var(--_gengage-text-secondary);font-size:12px;font-weight:500;cursor:pointer;transition:background .15s ease,color .15s ease}.gengage-chat-product-sort-btn:hover{background:var(--gengage-hover-color, #f1f5f9);color:var(--gengage-text-color, #1e293b)}.gengage-chat-product-sort-btn--active,.gengage-chat-product-sort-btn--active:hover{background:var(--gengage-primary-color, #3b82f6);color:#fff}.gengage-chat-product-sort-separator{width:1px;background:var(--gengage-border-color, #e2e8f0);margin:2px}.gengage-chat-comparison-toggle-btn{flex:none;padding:6px 10px;border:none;border-radius:6px;background:transparent;color:var(--gengage-text-muted, #64748b);font-size:12px;font-weight:500;cursor:pointer;transition:background .15s ease,color .15s ease;white-space:nowrap}.gengage-chat-comparison-toggle-btn:hover{background:var(--gengage-hover-color, #f1f5f9);color:var(--gengage-text-color, #1e293b)}.gengage-chat-comparison-toggle-btn--active{background:transparent;border:1px solid var(--gengage-primary-color, #3b82f6);color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-comparison-toggle-btn--active:hover{background:var(--gengage-primary-color, #3b82f6);color:#fff}.gengage-chat-comparison-select-wrapper{position:relative}.gengage-chat-comparison-checkbox{position:absolute;top:8px;right:8px;z-index:4;width:20px;height:20px;cursor:pointer;accent-color:var(--gengage-primary-color, #3b82f6);background:#fff;border-radius:4px;box-shadow:0 1px 3px #00000026}.gengage-chat-comparison-toggle-btn--hidden{opacity:0;pointer-events:none}@keyframes gengage-comparison-fade-in{0%{opacity:0}to{opacity:1}}.gengage-chat-comparison-toggle-btn--reveal{animation:gengage-comparison-fade-in .5s ease forwards}@media(prefers-reduced-motion:reduce){.gengage-chat-comparison-toggle-btn--reveal{animation:none;opacity:1}}.gengage-chat-comparison-floating-btn{display:block;width:100%;padding:10px 16px;border:none;border-radius:8px;background:var(--gengage-primary-color, #3b82f6);color:#fff;font-size:14px;font-weight:600;cursor:pointer;transition:background .15s ease;text-align:center;position:sticky;bottom:0;z-index:5;box-shadow:0 -2px 8px #0000001a}.gengage-chat-comparison-floating-btn:hover:not(:disabled){background:var(--gengage-primary-hover, #2563eb)}.gengage-chat-comparison-floating-btn--disabled{background:#94a3b8;cursor:default;opacity:.8}.gengage-chat-panel-topbar{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--_gengage-border-color);background:var(--_gengage-surface-muted);min-height:44px;flex-shrink:0;position:sticky;top:0;z-index:3}.gengage-chat-panel-topbar-back,.gengage-chat-panel-topbar-forward{width:28px;height:28px;min-width:28px;padding:0;border:1px solid #d1d5db;border-radius:6px;background:transparent;color:#374151;font-size:14px;font-family:inherit;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s ease,border-color .15s ease,opacity .15s ease}.gengage-chat-panel-topbar-back:hover:not(:disabled),.gengage-chat-panel-topbar-forward:hover:not(:disabled){background:var(--_gengage-surface-secondary);border-color:#9ca3af}.gengage-chat-panel-topbar-back:disabled,.gengage-chat-panel-topbar-forward:disabled{opacity:.3;cursor:default}.gengage-chat-panel-topbar-title{flex:1;font-size:14px;font-weight:600;color:var(--_gengage-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}@keyframes gengage-typewriter-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.gengage-chat-typewriter-block{display:block;animation:gengage-typewriter-fade-in .15s ease both}@media(prefers-reduced-motion:reduce){.gengage-chat-typewriter-block{animation:none}}.gengage-product-mention{color:var(--gengage-primary-color, #3b82f6);text-decoration:none;cursor:pointer;font-weight:500;border-bottom:1px dashed var(--gengage-primary-color, #3b82f6);transition:border-color .15s}.gengage-product-mention:hover{border-bottom-style:solid}@keyframes gengage-skeleton-pulse{0%,to{opacity:.4}50%{opacity:.8}}.gengage-chat-panel-skeleton-block{animation:gengage-skeleton-pulse 1.5s ease-in-out infinite}@media(prefers-reduced-motion:reduce){.gengage-chat-panel-skeleton-block{animation:none}}.gengage-chat-input-chips{display:flex;gap:6px;padding:4px 12px 2px;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none}.gengage-chat-input-chips::-webkit-scrollbar{display:none}.gengage-chat-input-chip{display:inline-flex;align-items:center;padding:4px 10px;border-radius:12px;border:1px solid var(--_gengage-border-color);background:#f9fafb;color:#374151;font-size:12px;font-weight:500;font-family:inherit;cursor:pointer;transition:background .12s,border-color .12s;white-space:nowrap}.gengage-chat-input-chip:hover{background:var(--_gengage-surface-secondary);border-color:#d1d5db}.gengage-chat-icon{width:14px;height:14px;flex-shrink:0}.gengage-chat-input-chip-icon,.gengage-chat-pill-icon{display:inline-flex;align-items:center;margin-right:4px}.gengage-chat-product-card-img-wrapper,.gengage-chat-product-details-img-wrap{position:relative;overflow:hidden}.gengage-chat-product-card-discount-badge{position:absolute;top:8px;left:8px;padding:3px 8px;border-radius:4px;background:var(--_gengage-discount-color);color:#fff;font-size:11px;font-weight:700;line-height:1.3;z-index:1}.gengage-chat-product-card-stock{font-size:11px;font-weight:600;margin-top:2px;padding:2px 6px;border-radius:4px;width:fit-content}.gengage-chat-product-card-stock.is-in-stock{background:#ecfdf5;color:#065f46}.gengage-chat-product-card-stock.is-out-of-stock{background:#fef2f2;color:#dc2626}.gengage-chat-find-similar-pill{position:absolute;top:40px;right:8px;opacity:0;pointer-events:none;transition:opacity .2s ease;padding:4px 10px;font-size:11px;font-weight:500;font-family:inherit;border:none;border-radius:12px;background:var(--gengage-chat-pill-bg, rgba(0, 0, 0, .7));color:var(--gengage-chat-pill-text, #fff);cursor:pointer;white-space:nowrap;z-index:2}.gengage-chat-product-card-img-wrapper:hover .gengage-chat-find-similar-pill,.gengage-chat-product-details-img-wrap:hover .gengage-chat-find-similar-pill{opacity:1;pointer-events:auto}.gengage-chat-favorite-btn{position:absolute;top:8px;right:8px;background:#ffffffe6;border:none;border-radius:50%;width:28px;height:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--gengage-text-secondary, #64748b);z-index:3;transition:color .2s;padding:0}.gengage-chat-favorite-btn:hover,.gengage-chat-favorite-btn--active{color:var(--gengage-accent-primary, #ef4444)}.gengage-chat-product-card-promos,.gengage-chat-product-details-promos{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.gengage-chat-product-card-promo-badge,.gengage-chat-product-details-promo-badge{display:inline-block;padding:2px 6px;font-size:10px;font-weight:500;border-radius:4px;background:var(--gengage-chat-promo-bg, #e8f5e9);color:var(--gengage-chat-promo-text, #2e7d32);white-space:nowrap;min-height:20px;box-sizing:border-box}.gengage-chat-thumbnails-column{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:4px;z-index:2;pointer-events:auto}.gengage-chat-thumbnail-btn{display:flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:2px solid var(--_gengage-border-color);border-radius:6px;background:#fff;cursor:pointer;overflow:hidden;transition:border-color .15s ease}.gengage-chat-thumbnail-btn:hover{border-color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-thumbnail-img{width:100%;height:100%;object-fit:cover}.gengage-chat-panel-float{position:sticky;bottom:0;height:0;overflow:visible;pointer-events:none;z-index:10}.gengage-chat-choice-prompter{position:absolute;bottom:12px;right:12px;pointer-events:auto;width:200px;padding:12px 14px;background:#fff;border:1px solid var(--_gengage-border-color);border-radius:10px;box-shadow:0 4px 12px #0000001a;z-index:5;animation:gengage-choice-prompter-in .2s ease}@keyframes gengage-choice-prompter-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.gengage-chat-choice-prompter-heading{font-size:13px;font-weight:600;color:var(--_gengage-text-primary);margin-bottom:4px}.gengage-chat-choice-prompter-suggestion{font-size:12px;color:#6b7280;margin-bottom:10px;line-height:1.4}.gengage-chat-choice-prompter-cta{display:block;width:100%;padding:6px 12px;border:none;border-radius:6px;background:var(--gengage-primary-color, #3b82f6);color:#fff;font-size:12px;font-weight:600;font-family:inherit;cursor:pointer;text-align:center;transition:opacity .15s ease}.gengage-chat-choice-prompter-cta:hover{opacity:.9}.gengage-chat-choice-prompter-dismiss{position:absolute;top:8px;right:8px;padding:4px 8px;min-width:28px;min-height:28px;display:flex;align-items:center;justify-content:center;border:none;background:none;color:#6b7280;font-size:16px;cursor:pointer;line-height:1}.gengage-chat-choice-prompter-dismiss:hover{color:#6b7280}@media(prefers-reduced-motion:reduce){.gengage-chat-choice-prompter{animation:none}}.gengage-chat-pros-cons{padding:12px 14px;background:var(--_gengage-surface-muted);border-radius:8px;margin:8px 0}.gengage-chat-pros-cons-heading{margin:0 0 10px;font-size:14px;font-weight:600;color:#0f172a}.gengage-chat-pros-cons-list{list-style:none;margin:0 0 8px;padding:0}.gengage-chat-pros-cons-list:last-child{margin-bottom:0}.gengage-chat-pros-cons-item{display:flex;align-items:flex-start;gap:8px;padding:4px 0;font-size:13px;line-height:1.5;color:#334155}.gengage-chat-pros-cons-icon{flex-shrink:0;width:18px;height:18px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;border-radius:50%}.gengage-chat-pros-cons-icon--pro{color:var(--_gengage-success-color);background:color-mix(in srgb,var(--_gengage-success-color) 15%,#fff)}.gengage-chat-pros-cons-icon--con{color:#dc2626;background:#fee2e2}.gengage-chat-categories{display:flex;flex-direction:column;gap:8px}.gengage-chat-categories-tabs{display:flex;gap:4px;overflow-x:auto;padding:4px 0;-webkit-overflow-scrolling:touch}.gengage-chat-categories-tab{padding:6px 14px;border:1px solid var(--gengage-border-color, #e5e7eb);border-radius:20px;background:var(--gengage-bg, #fff);color:var(--gengage-text, #374151);cursor:pointer;white-space:nowrap;font-size:13px;transition:background .15s,color .15s}.gengage-chat-categories-tab:hover{background:var(--gengage-bg-hover, #f3f4f6)}.gengage-chat-categories-tab--active{background:var(--gengage-primary, #2563eb);color:#fff;border-color:var(--gengage-primary, #2563eb)}.gengage-chat-categories-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px}.gengage-chat-categories-filter-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:4px}.gengage-chat-categories-filter-tag{padding:4px 10px;border:1px solid var(--gengage-border-color, #e5e7eb);border-radius:14px;background:var(--gengage-bg, #fff);color:var(--gengage-text-secondary, #6b7280);font-size:12px;cursor:pointer;transition:background .15s}.gengage-chat-categories-filter-tag:hover{background:var(--gengage-bg-hover, #f3f4f6)}.gengage-chat-product-grid-view-more{display:block;width:100%;padding:10px;margin-top:8px;border:1px solid var(--gengage-border-color, #e5e7eb);border-radius:8px;background:var(--gengage-bg, #fff);color:var(--gengage-primary, #2563eb);font-size:14px;font-weight:500;cursor:pointer;text-align:center;transition:background .15s;grid-column:1 / -1}.gengage-chat-product-grid-view-more:hover{background:var(--gengage-bg-hover, #f3f4f6)}.gengage-chat-product-grid--mobile{display:flex;overflow-x:auto;gap:8px;padding:8px 0;-webkit-overflow-scrolling:touch}.gengage-chat-product-grid--mobile .gengage-chat-product-card{min-width:160px;max-width:180px;flex-shrink:0}.gengage-chat-comparison--mobile{overflow-x:auto;-webkit-overflow-scrolling:touch;position:relative}.gengage-chat-comparison--mobile{-webkit-mask-image:linear-gradient(to right,#000 85%,transparent);mask-image:linear-gradient(to right,#000 85%,transparent)}.gengage-chat-comparison--mobile .gengage-chat-comparison-table{min-width:480px}.gengage-chat-comparison-key-differences{margin-top:12px;padding:12px;background:var(--gengage-bg-secondary, #f9fafb);border-radius:8px}.gengage-chat-comparison-key-differences h4{margin:0 0 8px;font-size:14px;font-weight:600;color:var(--gengage-text, #374151)}.gengage-chat-comparison-key-differences-content{font-size:13px;color:var(--gengage-text-secondary, #6b7280);line-height:1.5}.gengage-chat-comparison-key-differences-content ul{margin:0;padding-left:18px}.gengage-chat-comparison-key-differences-content li{margin-bottom:4px}.gengage-chat-product-details-similars-heading{margin:16px 0 8px;font-size:15px;font-weight:600;color:var(--gengage-text, #374151)}.gengage-chat-product-details-similars{margin-top:8px}.gengage-chat-handoff-notice{display:flex;flex-direction:column;align-items:center;gap:6px;padding:16px;margin:8px 0;background:#fef3c7;border:1px solid #fcd34d;border-radius:8px;text-align:center}.gengage-chat-handoff-notice-icon{font-size:24px}.gengage-chat-handoff-notice-heading{margin:0;font-size:14px;font-weight:600;color:#92400e}.gengage-chat-handoff-notice-summary{margin:0;font-size:13px;line-height:1.5;color:#78350f}.gengage-qty-stepper{display:inline-flex;align-items:center;gap:0;border:1px solid #d1d5db;border-radius:8px;overflow:hidden;background:#fff}.gengage-qty-btn{width:var(--_gengage-qty-btn-size);height:var(--_gengage-qty-btn-size);border:none;background:transparent;color:#374151;font-size:14px;font-weight:600;font-family:inherit;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color .12s}.gengage-qty-btn:hover:not(:disabled){background:var(--_gengage-surface-secondary)}.gengage-qty-btn:disabled{opacity:.35;cursor:default}.gengage-qty-value{min-width:24px;text-align:center;font-size:13px;font-weight:600;color:var(--_gengage-text-primary);-webkit-user-select:none;user-select:none}.gengage-qty-submit{border:none;border-left:1px solid #d1d5db;background:var(--_gengage-success-color);color:#fff;font-size:13px;font-weight:700;font-family:inherit;cursor:pointer;padding:6px 12px;transition:filter .12s ease,transform .12s ease}.gengage-qty-submit:hover{filter:brightness(1.08)}.gengage-qty-submit:active{transform:translateY(1px)}.gengage-qty-submit--success{background:var(--_gengage-success-color);transition:background .2s ease}.gengage-qty-stepper--compact{border-radius:14px;box-shadow:0 2px 6px #0000001f}.gengage-qty-stepper--compact .gengage-qty-btn{width:var(--_gengage-qty-btn-size-compact);height:var(--_gengage-qty-btn-size-compact);font-size:12px}.gengage-qty-stepper--compact .gengage-qty-value{min-width:18px;font-size:12px}.gengage-qty-stepper--compact .gengage-qty-submit{padding:4px 8px;font-size:13px;border-radius:0 14px 14px 0}.gengage-chat-panel .gengage-qty-stepper{border:1px solid var(--_gengage-border-color);border-radius:8px;overflow:hidden}.gengage-chat-panel .gengage-qty-stepper button,.gengage-chat-panel .gengage-qty-stepper .gengage-qty-value{border:none;border-right:1px solid var(--_gengage-border-color)}.gengage-chat-panel .gengage-qty-stepper .gengage-qty-submit{border-right:none}.gengage-chat-product-details-atc-stepper{border-radius:10px}.gengage-chat-product-details-atc-stepper .gengage-qty-btn{width:32px;height:32px}.gengage-chat-product-details-atc-stepper .gengage-qty-value{min-width:28px;font-size:14px}.gengage-chat-product-details-atc-stepper .gengage-qty-submit{padding:8px 18px;font-size:14px;border-radius:0 10px 10px 0}.gengage-chat-product-details-share{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid #d1d5db;border-radius:10px;background:transparent;color:#6b7280;cursor:pointer;transition:color .12s,border-color .12s,background-color .12s;position:relative;flex-shrink:0}.gengage-chat-product-details-share:hover{color:var(--gengage-primary-color, #3b82f6);border-color:var(--gengage-primary-color, #3b82f6);background:#f0f7ff}.gengage-chat-product-details-share:before{content:attr(aria-label);position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);padding:4px 8px;border-radius:4px;background:var(--_gengage-surface-dark);color:#fff;font-size:11px;font-weight:500;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .15s ease;z-index:2}.gengage-chat-product-details-share:hover:before{opacity:1}.gengage-chat-product-details-share--copied:after{content:"✓";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:var(--_gengage-success-color);color:#fff;border-radius:10px;font-size:16px;font-weight:700}.gengage-chat-product-details-share svg{width:20px;height:20px}.gengage-chat-review-link,.gengage-chat-grounding-link{text-decoration:underline;color:var(--gengage-primary-color, #3b82f6)}@media(max-width:768px){.gengage-chat-product-card-promo-badge,.gengage-chat-product-details-promo-badge{-webkit-line-clamp:2;line-clamp:2;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;white-space:normal}}.gengage-chat-launcher:focus-visible,.gengage-chat-close:focus-visible,.gengage-chat-header-btn:focus-visible,.gengage-chat-header-powered:focus-visible,.gengage-chat-send:focus-visible,.gengage-chat-action-btn:focus-visible,.gengage-chat-pill:focus-visible,.gengage-chat-input-chip:focus-visible,.gengage-chat-pills-arrow:focus-visible,.gengage-chat-error-retry:focus-visible,.gengage-chat-product-card-cta:focus-visible,.gengage-chat-product-details-cta:focus-visible,.gengage-chat-product-details-atc:focus-visible,.gengage-chat-product-detail-tab:focus-visible,.gengage-chat-panel-divider-toggle:focus-visible,.gengage-chat-panel-topbar-back:focus-visible,.gengage-chat-panel-topbar-forward:focus-visible,.gengage-chat-rollback-btn:focus-visible,.gengage-chat-ai-toppick-cta:focus-visible,.gengage-chat-comparison-view-btn:focus-visible,.gengage-chat-comparison-toggle-btn:focus-visible,.gengage-chat-comparison-floating-btn:focus-visible,.gengage-chat-comparison-checkbox:focus-visible,.gengage-chat-product-sort-btn:focus-visible,.gengage-chat-product-variant-btn:focus-visible,.gengage-chat-product-gallery-thumb:focus-visible,.gengage-chat-thumbnail-btn:focus-visible,.gengage-chat-find-similar-pill:focus-visible,.gengage-chat-favorite-btn:focus-visible,.gengage-chat-attach-btn:focus-visible,.gengage-chat-mic-btn:focus-visible,.gengage-chat-attachment-remove:focus-visible,.gengage-chat-kvkk-dismiss:focus-visible,.gengage-chat-choice-prompter-cta:focus-visible,.gengage-chat-choice-prompter-dismiss:focus-visible,.gengage-chat-categories-tab:focus-visible,.gengage-chat-categories-filter-tag:focus-visible,.gengage-chat-product-grid-view-more:focus-visible,.gengage-chat-product-details-share:focus-visible,.gengage-qty-btn:focus-visible,.gengage-qty-submit:focus-visible{outline:2px solid var(--gengage-primary-color, #3b82f6);outline-offset:2px}.gengage-chat-root--mobile .gengage-chat-choice-prompter{left:12px;right:12px;width:auto;max-width:none;bottom:12px;max-height:40vh;overflow-y:auto}.gengage-chat-root--mobile .gengage-chat-product-sort-btn,.gengage-chat-root--mobile .gengage-chat-comparison-toggle-btn{min-height:40px}.gengage-chat-root--mobile .gengage-chat-input-chip{min-height:40px;padding:8px 12px}.gengage-chat-root--mobile .gengage-chat-choice-prompter-dismiss{width:32px;height:32px}.gengage-chat-root--mobile .gengage-chat-panel-divider-toggle{min-height:44px}.gengage-chat-root--mobile .gengage-chat-product-details-atc-stepper .gengage-qty-btn{width:44px;height:44px}.gengage-chat-root--mobile .gengage-chat-product-details-atc-stepper .gengage-qty-submit,.gengage-chat-root--mobile .gengage-qty-stepper--compact .gengage-qty-submit{min-height:44px}.gengage-chat-root--mobile .gengage-qty-stepper--compact .gengage-qty-submit{min-width:44px;padding:0 10px}.gengage-chat-root--mobile .gengage-qty-stepper--compact .gengage-qty-btn{width:44px;height:44px;font-size:14px}.gengage-chat-root--mobile .gengage-qty-stepper--compact .gengage-qty-value{min-width:24px;font-size:13px}.gengage-chat-root--mobile .gengage-chat-product-card-cta,.gengage-chat-root--mobile .gengage-chat-choice-prompter-cta,.gengage-chat-root--mobile .gengage-chat-product-grid-view-more{min-height:44px;display:flex;align-items:center;justify-content:center}.gengage-chat-root--mobile .gengage-chat-panel-topbar-back,.gengage-chat-root--mobile .gengage-chat-panel-topbar-forward,.gengage-chat-root--mobile .gengage-chat-favorite-btn,.gengage-chat-root--mobile .gengage-chat-product-details-share{width:44px;height:44px}.gengage-skeleton{display:flex;gap:12px;padding:12px}.gengage-skeleton--message{flex-direction:column;gap:8px;padding:16px}.gengage-skeleton-card{flex:1;display:flex;flex-direction:column;gap:8px}.gengage-skeleton-img{height:120px;border-radius:8px}.gengage-skeleton-text{height:14px;border-radius:4px}.gengage-skeleton-price{height:14px;width:60%;border-radius:4px}.gengage-skeleton-line{height:12px;border-radius:4px}@media(prefers-reduced-motion:no-preference){.gengage-skeleton-card,.gengage-skeleton-line,.gengage-skeleton-img,.gengage-skeleton-text,.gengage-skeleton-price{background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:gengage-shimmer 1.5s infinite}@keyframes gengage-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}}@media(prefers-reduced-motion:reduce){.gengage-skeleton-card,.gengage-skeleton-line,.gengage-skeleton-img,.gengage-skeleton-text,.gengage-skeleton-price{background:#f0f0f0}}.gengage-chat-panel--has-scroll:after{content:"";position:sticky;bottom:0;display:block;height:40px;background:linear-gradient(transparent,var(--gengage-chat-panel-bg, #f5f5f5));pointer-events:none}@media(prefers-reduced-motion:no-preference){.gengage-chat-panel--transitioning{opacity:0;transition:opacity .15s ease}}', gn = z({
3336
- role: De(["user", "assistant"]),
3366
+ const gn = ':host{all:initial;font-family:var(--gengage-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);font-size:var(--gengage-font-size, 14px)}.gengage-chat-root button,.gengage-chat-root [role=button],.gengage-chat-root a{cursor:pointer}.gengage-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.gengage-chat-root{position:fixed;z-index:var(--gengage-z-index, 2147483647);--_gengage-chat-offset: var(--gengage-chat-offset, 20px);--_gengage-chat-launcher-bottom: var(--gengage-chat-launcher-bottom, 20px);--_gengage-chat-launcher-right: var(--gengage-chat-launcher-right, 20px);--_gengage-chat-launcher-size: var(--gengage-chat-launcher-size, 56px);--_gengage-chat-drawer-width: var(--gengage-chat-width, 400px);--_gengage-chat-radius: var(--gengage-chat-shell-radius, 12px);--_gengage-chat-header-height: var(--gengage-chat-header-height, 60px);--_gengage-chat-conversation-width: var(--gengage-chat-conversation-width, 396px);--_gengage-chat-panel-min-width: var(--gengage-chat-panel-min-width, 320px);--_gengage-chat-panel-max-width: var(--gengage-chat-panel-max-width, 860px);--_gengage-chat-input-height: var(--gengage-chat-input-height, 48px);--_gengage-chat-shadow: var(--gengage-chat-shadow, 0 12px 40px rgba(15, 23, 42, .18));--_gengage-border-color: var(--gengage-border-color, #e5e7eb);--_gengage-discount-color: var(--gengage-discount-color, #ef4444);--_gengage-success-color: var(--gengage-success-color, #16a34a);--_gengage-text-primary: var(--gengage-text-primary, #1f2937);--_gengage-text-secondary: var(--gengage-text-secondary, #64748b);--_gengage-surface-secondary: var(--gengage-surface-secondary, #f3f4f6);--_gengage-surface-muted: var(--gengage-surface-muted, #f8fafc);--_gengage-surface-dark: var(--gengage-surface-dark, #1e293b);--_gengage-rating-color: var(--gengage-rating-color, #d97706);--_gengage-error: var(--gengage-error, #dc2626);--_gengage-qty-btn-size: var(--gengage-qty-btn-size, 28px);--_gengage-qty-btn-size-compact: var(--gengage-qty-btn-size-compact, 24px)}.gengage-chat-launcher-container{position:fixed;bottom:var(--_gengage-chat-launcher-bottom);right:var(--_gengage-chat-launcher-right);display:flex;flex-direction:column;align-items:flex-end;gap:10px;z-index:var(--gengage-z-index, 2147483647)}.gengage-chat-launcher-content-area,.gengage-chat-launcher-content-area-bottom{display:flex;flex-direction:column;align-items:flex-end;gap:8px}.gengage-chat-launcher-content-area:empty,.gengage-chat-launcher-content-area-bottom:empty{display:none}.gengage-chat-root--open .gengage-chat-launcher-content-area,.gengage-chat-root--open .gengage-chat-launcher-content-area-bottom{display:none}.gengage-chat-root--open .gengage-chat-launcher-container{pointer-events:none;opacity:0;transition:opacity .2s ease}.gengage-chat-launcher{width:var(--_gengage-chat-launcher-size);height:var(--_gengage-chat-launcher-size);border-radius:50%;border:none;background:var(--gengage-primary-color, #3b82f6);color:var(--gengage-primary-foreground, #fff);cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 22px #0f172a47;transition:transform .18s cubic-bezier(.2,.8,.2,1),box-shadow .18s ease;position:relative;flex-shrink:0}.gengage-chat-launcher:hover{transform:scale(1.05);box-shadow:0 14px 28px #0f172a47}.gengage-chat-launcher svg{width:28px;height:28px}.gengage-chat-launcher--image-mode{background:none;border-radius:0;box-shadow:none;padding:0;overflow:hidden}.gengage-chat-launcher--image-mode:hover{box-shadow:none}.gengage-chat-launcher--image-mode img{width:100%;height:100%;object-fit:contain}.gengage-chat-launcher--hidden-mobile{display:none!important}.gengage-chat-launcher-tooltip{position:absolute;right:calc(100% + 12px);top:50%;transform:translateY(-50%);padding:6px 12px;border-radius:8px;background:var(--_gengage-surface-dark);color:#fff;font-size:13px;font-weight:500;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .2s ease;box-shadow:0 2px 8px #00000026}.gengage-chat-launcher-tooltip:after{content:"";position:absolute;left:100%;top:50%;transform:translateY(-50%);border:5px solid transparent;border-left-color:var(--_gengage-surface-dark)}.gengage-chat-launcher:hover .gengage-chat-launcher-tooltip{opacity:1}.gengage-chat-root--open .gengage-chat-launcher-tooltip{display:none}.gengage-chat-drawer{position:fixed;top:0;bottom:0;right:0;width:var(--_gengage-chat-drawer-width);max-height:-webkit-fill-available;max-height:100dvh;border-radius:0;background:var(--gengage-background-color, #fff);box-shadow:var(--_gengage-chat-shadow);display:flex;flex-direction:column;overflow:hidden;z-index:var(--gengage-z-index, 2147483647);transform:translate(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .2s ease;opacity:1}.gengage-chat-root--mobile .gengage-chat-launcher-container{right:var(--gengage-chat-launcher-mobile-right, 16px);bottom:calc(var(--gengage-chat-launcher-mobile-bottom, 16px) + env(safe-area-inset-bottom,0px))}.gengage-chat-root--mobile .gengage-chat-drawer{left:0;right:0;bottom:0;width:100%;max-width:none;max-height:-webkit-fill-available;max-height:100dvh;border-radius:16px 16px 0 0;border-top:none;box-shadow:0 -4px 16px #0000001a,0 12px 40px #0f172a2e;padding-bottom:env(safe-area-inset-bottom,0px);background:var(--gengage-chat-header-bg, #1d2939)}.gengage-chat-drawer-handle{display:none}.gengage-chat-root--mobile .gengage-chat-drawer-handle{display:flex;align-items:center;justify-content:center;height:22px;flex-shrink:0;cursor:grab;touch-action:none;background:var(--gengage-chat-header-bg, #1d2939);border-radius:16px 16px 0 0;user-select:none;-webkit-user-select:none}.gengage-chat-root--mobile .gengage-chat-drawer-handle:before{content:"";width:36px;height:4px;border-radius:999px;background:#ffffff4d;pointer-events:none}.gengage-chat-root--mobile.gengage-chat-root--open:before{content:"";position:fixed;inset:0;background:#0000001f;z-index:-1;pointer-events:none}.gengage-chat-root--mobile.gengage-chat-root--mobile-half .gengage-chat-drawer{top:auto;height:min(72dvh,620px);max-height:min(72dvh,620px)}.gengage-chat-root--mobile.gengage-chat-root--mobile-full .gengage-chat-drawer{top:0;height:100dvh;max-height:100dvh;border-radius:0}.gengage-chat-root--mobile.gengage-chat-root--mobile-full .gengage-chat-drawer-handle{border-radius:0}.gengage-chat-root--mobile .gengage-chat-input-area{padding-bottom:calc(10px + env(safe-area-inset-bottom,0px));border-top:1px solid var(--_gengage-border-color, #e5e7eb);transform:translateY(calc(-1 * var(--gengage-keyboard-offset, 0px)))}.gengage-chat-header{display:flex;align-items:center;justify-content:space-between;box-sizing:border-box;min-height:var(--_gengage-chat-header-height);padding:4px 12px;background:var(--gengage-chat-header-bg, #1d2939);color:var(--gengage-chat-header-foreground, #fff);box-shadow:0 4px 20px #00000014,0 0 2px #0000001f;border:none;position:relative;z-index:2}.gengage-chat-header-left{display:flex;align-items:center;gap:10px;min-width:0}.gengage-chat-header-avatar{width:40px;height:40px;border-radius:0;object-fit:contain;flex-shrink:0}.gengage-chat-header-info{display:flex;flex-direction:column;gap:2px;min-width:0}.gengage-chat-header-title-row{display:flex;align-items:center;gap:6px}.gengage-chat-header-title{font-weight:700;font-size:15px;line-height:1.25;letter-spacing:.01em;color:inherit}.gengage-chat-header-badge{display:inline-flex;align-items:center;padding:1px 6px;border-radius:4px;background:var(--gengage-primary-color, #3b82f6);color:#fff;font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;line-height:1.5}.gengage-chat-header-powered{display:flex;align-items:center;gap:4px;font-size:11px;color:#ffffffa6;text-decoration:none;transition:color .15s}.gengage-chat-header-powered:hover{color:#fffc}.gengage-chat-header-powered svg{width:12px;height:12px;opacity:.6}.gengage-chat-header-right{display:flex;align-items:center;gap:4px;flex-shrink:0}.gengage-chat-header-btn{width:32px;height:32px;border-radius:8px;background:transparent;border:1px solid rgba(255,255,255,.12);color:#ffffffb3;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;text-decoration:none;line-height:1;transition:background-color .15s ease,color .15s ease,border-color .15s ease}.gengage-chat-header-btn:hover{background:#ffffff1a;color:#fff;border-color:#ffffff40}.gengage-chat-header-btn--fav{position:relative}.gengage-chat-header-btn--reopen-panel{display:none}.gengage-chat-header-fav-badge{position:absolute;top:-4px;right:-4px;min-width:16px;height:16px;border-radius:999px;background:var(--_gengage-danger-color, #ef4444);color:var(--_gengage-on-danger, #fff);font-size:9px;font-weight:700;line-height:16px;text-align:center;padding:0 3px;pointer-events:none}.gengage-chat-close{width:32px;height:32px;min-width:32px;min-height:32px;border-radius:8px;background:transparent;border:1px solid rgba(255,255,255,.12);color:#ffffffb3;font-size:18px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1;transition:background-color .15s ease,color .15s ease,border-color .15s ease}.gengage-chat-close:hover{background:#ffffff1a;color:#fff;border-color:#ffffff40}.gengage-chat-body{display:flex;flex:1;overflow:hidden;min-height:0;position:relative}.gengage-chat-panel{display:none;width:0;overflow:hidden;transition:width .22s cubic-bezier(.2,.72,.2,1)}.gengage-chat-panel--visible{display:flex;flex-direction:column;position:relative;box-sizing:border-box;width:440px;min-width:440px;background:var(--gengage-chat-panel-bg, var(--_gengage-surface-muted, #fff));border-right:1px solid var(--_gengage-border-color);overflow-y:auto;padding:16px;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.15) transparent}.gengage-chat-panel--visible::-webkit-scrollbar{width:6px}.gengage-chat-panel--visible::-webkit-scrollbar-track{background:transparent}.gengage-chat-panel--visible::-webkit-scrollbar-thumb{background:#00000026;border-radius:3px}.gengage-chat-panel--visible::-webkit-scrollbar-thumb:hover{background:#00000040}.gengage-chat-panel-divider{display:flex;align-items:center;width:4px;cursor:pointer;background:var(--_gengage-border-color);position:relative;flex-shrink:0;transition:background .15s;z-index:2}.gengage-chat-panel-divider:hover{background:#cbd5e1}.gengage-chat-panel-divider--hidden{display:none}.gengage-chat-panel-divider-toggle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:28px;height:48px;border:1px solid var(--_gengage-border-color);border-radius:6px;background:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;color:var(--_gengage-text-secondary);box-shadow:0 1px 3px #00000014;transition:background .15s,color .15s;padding:0;line-height:1}.gengage-chat-panel-divider-toggle:hover{background:var(--_gengage-surface-muted);color:#334155}.gengage-chat-panel.gengage-chat-panel--collapsed{flex:0 0 0px;width:0;min-width:0;max-width:0;padding:0;border-right:none;overflow:hidden}.gengage-chat-panel--collapsed~.gengage-chat-panel-divider{width:0;background:transparent}.gengage-chat-panel--collapsed~.gengage-chat-panel-divider .gengage-chat-panel-divider-toggle{left:0;transform:translateY(-50%)}.gengage-chat-conversation{display:flex;flex-direction:column;flex:1;min-width:0;overflow:hidden;background:var(--gengage-background-color, #fff);position:relative;z-index:1}.gengage-chat-drawer--with-panel{width:auto;background:transparent;box-shadow:none}.gengage-chat-drawer--with-panel .gengage-chat-header{border-radius:0;flex-shrink:0}.gengage-chat-drawer--with-panel .gengage-chat-body{flex:1 1 0;min-height:0;gap:0;padding:0;align-items:stretch}.gengage-chat-drawer--with-panel .gengage-chat-panel--visible{flex:0 0 auto;width:clamp(var(--_gengage-chat-panel-min-width),50vw,var(--_gengage-chat-panel-max-width));min-width:var(--_gengage-chat-panel-min-width);max-width:var(--_gengage-chat-panel-max-width);border-right:none;background:var(--gengage-chat-panel-bg, var(--_gengage-surface, #fff));padding:0 16px 16px;overflow-y:auto;margin:0;border-radius:0;box-shadow:0 8px 32px #0f172a1f,0 2px 8px #0f172a0f;max-height:100dvh}.gengage-chat-drawer--with-panel .gengage-chat-panel-divider{width:0;background:transparent}.gengage-chat-drawer--with-panel .gengage-chat-panel-divider-toggle{width:20px;height:48px;border-radius:10px;background:var(--gengage-primary-color, #3b82f6);color:#fff;border:2px solid #fff;box-shadow:0 2px 8px #0f172a2e;font-size:12px;z-index:10}.gengage-chat-drawer--with-panel .gengage-chat-panel-divider-toggle:hover{background:var(--gengage-primary-hover, #2563eb);color:#fff}.gengage-chat-drawer--with-panel .gengage-chat-conversation{flex:0 0 var(--_gengage-chat-conversation-width);width:var(--_gengage-chat-conversation-width);border-left:none;background:var(--gengage-background-color, #fff);box-shadow:-4px 0 24px #0f172a1f,-1px 0 4px #0f172a0f}.gengage-chat-drawer--with-panel .gengage-chat-messages{padding-right:6px;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.12) transparent}.gengage-chat-drawer--with-panel .gengage-chat-messages::-webkit-scrollbar{width:0}.gengage-chat-drawer--with-panel .gengage-chat-panel.gengage-chat-panel--collapsed{flex:0 0 0px;width:0;min-width:0;max-width:0;padding:0;overflow:hidden}.gengage-chat-drawer--with-panel:has(.gengage-chat-panel--collapsed){width:var(--_gengage-chat-conversation-width);background:var(--gengage-background-color, #fff);box-shadow:var(--_gengage-chat-shadow)}.gengage-chat-drawer--with-panel .gengage-chat-footer{display:none}.gengage-chat-messages{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:16px;min-height:0;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;touch-action:pan-y}.gengage-chat-messages::-webkit-scrollbar{width:6px}.gengage-chat-messages::-webkit-scrollbar-track{background:transparent}.gengage-chat-messages::-webkit-scrollbar-thumb{background:#0000001f;border-radius:3px}.gengage-chat-messages::-webkit-scrollbar-thumb:hover{background:#0003}.gengage-chat-bubble{max-width:85%;padding:12px 16px;border-radius:12px;line-height:1.5;font-size:14px;font-weight:500;word-wrap:break-word;overflow-wrap:break-word;animation:gengage-chat-msg-in .3s cubic-bezier(.2,.7,.2,1)}@keyframes gengage-chat-msg-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.gengage-chat-bubble--user{align-self:flex-end;background:var(--gengage-primary-color, #3b82f6);color:var(--gengage-primary-foreground, #fff);border-bottom-right-radius:4px}.gengage-chat-bubble--assistant{align-self:flex-start;background:var(--_gengage-surface-secondary);color:var(--_gengage-text-primary);border-bottom-left-radius:4px;min-width:120px}.gengage-chat-bubble--active{outline:2px solid var(--gengage-primary-color, #3b82f6);outline-offset:-2px}.gengage-chat-bubble--assistant:empty{display:none}.gengage-chat-bubble--assistant .gengage-chat-bubble-text a{color:var(--gengage-primary-color, #2563eb);text-decoration:underline}.gengage-chat-bubble--assistant .gengage-chat-bubble-text a:hover{text-decoration:none}.gengage-chat-bubble--assistant .gengage-chat-bubble-text p{margin:0 0 8px}.gengage-chat-bubble--assistant .gengage-chat-bubble-text p:last-child{margin-bottom:0}.gengage-chat-bubble--assistant .gengage-chat-bubble-text ul,.gengage-chat-bubble--assistant .gengage-chat-bubble-text ol{margin:6px 0;padding-left:20px}.gengage-chat-bubble--assistant .gengage-chat-bubble-text li{margin-bottom:6px;line-height:1.5}.gengage-chat-bubble--assistant .gengage-chat-bubble-text code{background:#0000000f;padding:1px 4px;border-radius:3px;font-size:.9em}.gengage-chat-bubble--assistant .gengage-chat-bubble-text pre{background:#0000000a;padding:8px;border-radius:6px;overflow-x:auto;margin:4px 0}.gengage-chat-bubble--assistant .gengage-chat-bubble-text table{border-collapse:collapse;margin:4px 0;font-size:.9em}.gengage-chat-bubble--assistant .gengage-chat-bubble-text th,.gengage-chat-bubble--assistant .gengage-chat-bubble-text td{border:1px solid var(--_gengage-border-color);padding:4px 8px}.gengage-chat-bubble--assistant .gengage-chat-bubble-text img{max-width:100%;height:auto;border-radius:4px;margin:4px 0}.gengage-chat-bubble--assistant .gengage-chat-bubble-text h1,.gengage-chat-bubble--assistant .gengage-chat-bubble-text h2,.gengage-chat-bubble--assistant .gengage-chat-bubble-text h3,.gengage-chat-bubble--assistant .gengage-chat-bubble-text h4,.gengage-chat-bubble--assistant .gengage-chat-bubble-text h5,.gengage-chat-bubble--assistant .gengage-chat-bubble-text h6{margin:8px 0 4px;line-height:1.3;color:#0f172a}.gengage-chat-bubble--assistant .gengage-chat-bubble-text blockquote{border-left:3px solid var(--_gengage-border-color);padding-left:12px;margin:4px 0;color:var(--_gengage-text-secondary)}.gengage-chat-bubble--assistant .gengage-chat-bubble-text{overflow-wrap:break-word}.gengage-chat-bubble--first{border-left:3px solid var(--gengage-primary-color, #3b82f6);padding-left:12px}.gengage-chat-bubble--first .gengage-chat-bubble-text{font-size:15px}@media(max-width:768px){.gengage-chat-bubble--assistant .gengage-chat-bubble-text{line-height:1.5}.gengage-chat-bubble--user{max-width:calc(100% - 16px);word-break:break-word}}.gengage-chat-typing{display:flex;align-items:center;gap:5px;padding:8px 4px;align-self:flex-start;max-width:85%}.gengage-chat-typing:has(.gengage-chat-typing-text),.gengage-chat-typing:has(.gengage-chat-thinking-steps){background:var(--_gengage-surface-secondary);padding:10px 14px;border-radius:12px 12px 12px 4px;gap:8px}.gengage-chat-typing-dots{display:flex;align-items:center;gap:5px}.gengage-chat-typing-dots span{width:6px;height:6px;border-radius:50%;background:#94a3b8;display:inline-block;animation:gengage-chat-typing-fade 1.4s ease-in-out infinite}.gengage-chat-typing-dots span:nth-child(2){animation-delay:.2s}.gengage-chat-typing-dots span:nth-child(3){animation-delay:.4s}@keyframes gengage-chat-typing-fade{0%,to{opacity:.25}50%{opacity:1}}.gengage-chat-typing-sparkle{animation:gengage-sparkle-pulse 1.2s infinite}@keyframes gengage-sparkle-pulse{0%,to{opacity:1}50%{opacity:.4}}.gengage-chat-typing-text{font-size:13px;color:var(--_gengage-text-secondary);font-style:italic;flex:1;min-width:0;word-wrap:break-word;overflow-wrap:break-word}.gengage-chat-stop-btn{display:flex;align-items:center;gap:6px;margin:4px 0 8px;padding:6px 16px;border:1px solid var(--gengage-primary-color, #3b82f6);border-radius:16px;background:var(--gengage-background-color, #fff);color:var(--gengage-primary-color, #3b82f6);font-size:12px;max-width:200px;align-self:center;cursor:pointer;transition:background .15s ease,border-color .15s ease}.gengage-chat-stop-btn:hover{background:var(--_gengage-surface-secondary);border-color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-stop-btn:focus-visible{outline:2px solid var(--gengage-primary-color, #3b82f6);outline-offset:2px}.gengage-chat-stop-icon{display:inline-block;width:10px;height:10px;background:currentColor;border-radius:2px;flex-shrink:0}.gengage-chat-offline-bar{display:none;align-items:center;gap:6px;padding:6px 12px;font-size:12px;line-height:1.4;color:#92400e;background:#fef3c7;border-bottom:1px solid #fde68a}.gengage-chat-offline-bar--visible{display:flex}.gengage-chat-offline-bar:before{content:"";display:inline-block;width:8px;height:8px;background:var(--_gengage-rating-color);border-radius:50%;flex-shrink:0}.gengage-chat-still-working{font-size:12px;color:var(--gengage-chat-text-secondary, #666);margin-top:6px;animation:gengage-fade-in .3s ease}@keyframes gengage-fade-in{0%{opacity:0}to{opacity:1}}.gengage-chat-thinking-steps{display:flex;flex-direction:column;gap:4px;padding:4px 0}.gengage-chat-thinking-step{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--gengage-chat-text-secondary, #666)}.gengage-chat-thinking-step-marker{font-size:12px;width:16px;text-align:center;flex-shrink:0}.gengage-chat-thinking-step-marker--done{color:var(--_gengage-success-color)}.gengage-chat-thinking-step-marker--active{color:var(--gengage-primary-color, #3b82f6);animation:gengage-thinking-pulse 1.5s ease-in-out infinite}@keyframes gengage-thinking-pulse{0%,to{opacity:1}50%{opacity:.4}}.gengage-chat-thinking-step-text{line-height:1.4}.gengage-chat-error{display:flex;align-items:center;justify-content:center;gap:10px;padding:10px 14px;border-radius:10px;background:#fef2f2;color:var(--gengage-error, #991b1b);font-size:13px;text-align:center;border:1px solid #fecaca}.gengage-chat-error-retry{flex-shrink:0;padding:4px 12px;border:1px solid #fca5a5;border-radius:6px;background:#fff;color:#991b1b;font-size:12px;font-weight:500;cursor:pointer;transition:background .15s}.gengage-chat-error-retry:hover{background:#fee2e2}.gengage-chat-input-area{display:flex;flex-wrap:wrap;align-items:center;flex-shrink:0;gap:0;padding:8px 12px;border-top:1px solid var(--_gengage-border-color);background:var(--gengage-background-color, #fff)}.gengage-chat-input-pill{display:flex;align-items:center;gap:4px;flex:1;min-width:0;height:44px;background:var(--_gengage-surface-secondary);border:1px solid var(--_gengage-border-color);border-radius:30px;padding:2px 8px;overflow:hidden;transition:border-color .2s ease,box-shadow .2s ease}.gengage-chat-input-pill:focus-within{border-color:var(--gengage-primary-color, #3b82f6);box-shadow:0 0 0 2px #3b82f626}.gengage-chat-input{flex:1;min-width:0;min-height:40px;max-height:120px;padding:0 6px 0 14px;border:none;border-radius:0;font-size:14px;font-family:inherit;line-height:1.4;align-content:center;outline:none;background:transparent;color:var(--_gengage-text-primary);resize:none;overflow-y:hidden}.gengage-chat-root--mobile .gengage-chat-input-pill{height:52px;padding:3px 8px}.gengage-chat-root--mobile .gengage-chat-input{min-height:44px;max-height:44px;font-size:16px;white-space:nowrap;overflow:hidden}.gengage-chat-root--mobile .gengage-chat-input::placeholder{font-size:15px}.gengage-chat-input::placeholder{font-size:14px;color:#6b7280;line-height:normal}.gengage-chat-send{width:36px;height:36px;min-width:36px;padding:0;border:none;border-radius:50%;background:var(--gengage-primary-color, #3b82f6);color:var(--gengage-primary-foreground, #fff);font-weight:700;font-size:0;font-family:inherit;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background-color .2s cubic-bezier(.4,0,.2,1),box-shadow .2s ease,transform .15s ease;box-shadow:0 2px 6px #00000026}.gengage-chat-send:hover{filter:brightness(.92);transform:translateY(-1px);box-shadow:0 4px 8px #0000002e}.gengage-chat-send:active{transform:translateY(0);box-shadow:0 1px 2px #0000001f}.gengage-chat-send svg{width:18px;height:18px}.gengage-chat-send:disabled{background:#e5e7eb;opacity:.5;box-shadow:none;cursor:not-allowed}.gengage-chat-footer{padding:4px 10px;text-align:center;font-size:10px;color:#6b7280;border-top:1px solid var(--_gengage-surface-muted);background:var(--gengage-background-color, #fff)}.gengage-chat-uispec{width:100%}.gengage-chat-uispec:empty{display:none}.gengage-chat-uispec>*{animation:gengage-chat-widget-enter .16s cubic-bezier(.2,.7,.2,1) both}@keyframes gengage-chat-widget-enter{0%{opacity:0;transform:translateY(5px) scale(.99)}to{opacity:1;transform:translateY(0) scale(1)}}.gengage-chat-action-buttons{display:flex;flex-wrap:wrap;gap:8px;padding:6px 0 4px}.gengage-chat-action-btn{flex:0 0 auto;padding:8px 16px;border:none;border-radius:999px;background:var(--gengage-primary-color, #3b82f6);color:var(--gengage-primary-foreground, #fff);font-size:13px;font-weight:600;line-height:1.25;font-family:inherit;cursor:pointer;white-space:nowrap;transition:filter .15s ease,transform .1s ease}.gengage-chat-action-btn:hover{filter:brightness(.92)}.gengage-chat-action-btn:active{transform:scale(.97)}.gengage-chat-product-card{position:relative;display:flex;flex-direction:column;border:1px solid #eee;border-radius:16px;overflow:hidden;background:#fff;width:160px;min-width:160px;max-width:160px;box-shadow:0 2px 8px #0000000f;transition:transform .1s ease,box-shadow .2s ease}.gengage-chat-product-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px #0000001a}.gengage-chat-product-card-img{width:100%;height:120px;object-fit:contain;display:block;background:#fff;padding:8px;box-sizing:border-box}.gengage-chat-product-card-body{display:flex;flex-direction:column;flex:1;gap:4px;padding:8px 10px 10px;text-align:center}.gengage-chat-product-card-name{font-size:13px;font-weight:600;color:var(--_gengage-text-primary);line-height:1.35;margin-bottom:0;min-height:2.7em;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.gengage-chat-product-card-brand{font-size:10px;color:#666}.gengage-chat-product-card-rating{font-size:11px;color:var(--_gengage-rating-color);line-height:1}.gengage-star-half{display:inline-block;position:relative}.gengage-star-half>span{position:absolute;left:0;top:0;overflow:hidden;width:.5em}.gengage-chat-product-card-review-count{color:#475569;font-size:10px}.gengage-chat-product-card-price{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:center;gap:2px 4px;font-size:16px;font-weight:800;color:#0f172a}.gengage-chat-product-card-original-price{text-decoration:line-through;color:var(--_gengage-text-secondary);font-weight:400;font-size:inherit;margin-right:6px}.gengage-chat-price-skeleton{display:inline-block;width:80px;height:16px;background:linear-gradient(90deg,#e2e8f0 25%,#f1f5f9,#e2e8f0 75%);background-size:200% 100%;animation:gengage-skeleton-price-pulse 1.5s ease-in-out infinite;border-radius:4px;vertical-align:middle}@keyframes gengage-skeleton-price-pulse{0%{background-position:200% 0}to{background-position:-200% 0}}.gengage-chat-product-card-cta{display:block;margin-top:auto;padding:8px 10px;text-align:center;background:transparent;color:var(--gengage-primary-color, #3b82f6);text-decoration:none;font-size:12px;font-weight:700;letter-spacing:.01em;border-top:1px solid var(--_gengage-surface-muted);cursor:pointer;transition:color .15s ease,background .15s ease}.gengage-chat-product-card-cta:hover{color:var(--gengage-primary-color, #0b24d6);background:var(--_gengage-surface-muted)}.gengage-chat-product-card-cta:active{background:var(--_gengage-surface-muted)}.gengage-chat-product-summary{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--_gengage-border-color);border-radius:12px;background:#fff;cursor:pointer;transition:background .15s,box-shadow .15s;margin:4px 0}.gengage-chat-product-summary:hover{background:#f9fafb;box-shadow:0 1px 4px #0000000f}.gengage-chat-product-summary__image{flex-shrink:0;width:64px;height:64px;border-radius:8px;overflow:hidden;border:1px solid var(--_gengage-surface-secondary);background:#f9fafb}.gengage-chat-product-summary__image img{width:100%;height:100%;object-fit:cover;display:block}.gengage-chat-product-summary__content{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.gengage-chat-product-summary__name{font-size:13px;font-weight:500;line-height:1.3;color:#111827;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.gengage-chat-product-summary__rating{font-size:11px;color:var(--_gengage-rating-color);line-height:1}.gengage-chat-product-summary__review-count{color:#475569;font-size:11px}.gengage-chat-product-summary__price{font-size:13px;font-weight:600;color:#111827;line-height:1;margin-top:2px}.gengage-chat-product-summary__price-original{text-decoration:line-through;color:var(--_gengage-text-secondary);font-weight:400;font-size:11px}.gengage-chat-product-summary__price-current{color:var(--gengage-primary-color, #111827)}.gengage-chat-product-summary__cta{flex-shrink:0;font-size:12px;font-weight:500;color:var(--gengage-primary-color, #2563eb);text-decoration:none;padding:4px 10px;border-radius:8px;transition:background .15s;white-space:nowrap}.gengage-chat-product-summary__cta:hover{background:#0000000a}.gengage-chat-product-summary__cta:focus-visible{outline:2px solid var(--gengage-primary-color, #2563eb);outline-offset:2px}.gengage-chat-product-grid{display:flex;gap:12px;overflow-x:auto;padding:8px 0;-webkit-overflow-scrolling:touch;scrollbar-width:none;scroll-snap-type:x proximity;min-height:180px}.gengage-chat-product-grid>*{scroll-snap-align:start;flex:0 0 auto}.gengage-chat-product-grid::-webkit-scrollbar{display:none}.gengage-chat-review-highlights{padding:2px 0 6px}.gengage-chat-review-item{border:1px solid var(--_gengage-border-color);border-radius:12px;padding:10px 12px;background:#fff}.gengage-chat-review-item[data-tone=positive]{border-color:#bbf7d0;background:#f0fdf4}.gengage-chat-review-item[data-tone=negative]{border-color:#fecaca;background:#fef2f2}.gengage-chat-review-tag{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--_gengage-text-secondary);margin-bottom:4px}.gengage-chat-review-text{font-size:13px;line-height:1.45;color:var(--_gengage-text-primary);display:-webkit-box;-webkit-line-clamp:4;line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}.gengage-chat-review-rating{margin-top:6px;font-size:12px;font-weight:700;color:#0f172a}.gengage-chat-review-empty{font-size:12px;color:var(--_gengage-text-secondary)}.gengage-chat-review-tabs{display:flex;gap:6px;margin-bottom:10px}.gengage-chat-review-tab{padding:6px 14px;border:1px solid var(--_gengage-border-color);border-radius:999px;background:#fff;color:var(--_gengage-text-secondary);font-size:12px;font-weight:600;font-family:inherit;cursor:pointer;transition:background .15s,border-color .15s}.gengage-chat-review-tab:hover{background:var(--_gengage-surface-muted)}.gengage-chat-review-tab--active{background:var(--_gengage-surface-muted);border-color:#94a3b8;color:#0f172a}.gengage-chat-review-pills{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}.gengage-chat-review-pill{display:flex;align-items:center;gap:6px;padding:6px 10px;border:1px solid var(--_gengage-border-color);border-radius:8px;background:#fff;font-size:12px;font-family:inherit;color:#334155;box-shadow:0 1px 2px #0000000a;cursor:pointer;transition:background .15s,border-color .15s}.gengage-chat-review-pill:hover{background:var(--_gengage-surface-muted)}.gengage-chat-review-pill--active{background:var(--_gengage-surface-muted);border-color:var(--_gengage-text-secondary, #64748b);color:var(--_gengage-text-primary, #0f172a);font-weight:600}.gengage-chat-review-pill--active .gengage-chat-review-pill-count{background:var(--_gengage-border-color, #e2e8f0);color:var(--_gengage-text-primary, #0f172a)}.gengage-chat-review-pill[data-tone=positive]{border-color:#bbf7d0}.gengage-chat-review-pill[data-tone=negative]{border-color:#fecaca}.gengage-chat-review-pill-icon{font-size:11px;font-weight:700}.gengage-chat-review-pill[data-tone=positive] .gengage-chat-review-pill-icon{color:var(--_gengage-success-color)}.gengage-chat-review-pill[data-tone=negative] .gengage-chat-review-pill-icon{color:#dc2626}.gengage-chat-review-pill-count{font-size:10px;font-weight:700;background:var(--_gengage-surface-muted);color:var(--_gengage-text-secondary);border-radius:4px;padding:1px 5px}.gengage-chat-review-items{display:grid;gap:10px}.gengage-chat-favorites-page{padding:12px}.gengage-chat-favorites-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:48px 24px;text-align:center;color:var(--_gengage-text-secondary)}.gengage-chat-favorites-empty-icon{opacity:.25;color:var(--_gengage-danger-color, #ef4444)}.gengage-chat-favorites-empty p{font-size:13px;margin:0;line-height:1.5}.gengage-chat-favorites-list{display:flex;flex-direction:column;gap:10px}.gengage-chat-favorites-card{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--_gengage-border-color);border-radius:12px;background:var(--_gengage-surface-color, #fff);position:relative;transition:opacity .2s,transform .2s}.gengage-chat-favorites-card--removing{opacity:0;transform:translate(8px)}.gengage-chat-favorites-card__image{width:56px;height:56px;flex-shrink:0;border-radius:8px;overflow:hidden;background:var(--_gengage-surface-muted)}.gengage-chat-favorites-card__image img{width:100%;height:100%;object-fit:contain}.gengage-chat-favorites-card__info{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.gengage-chat-favorites-card__name{font-size:13px;font-weight:500;color:var(--_gengage-text-primary, #0f172a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gengage-chat-favorites-card__price{font-size:13px;font-weight:700;color:var(--_gengage-primary-color, #1d4ed8)}.gengage-chat-favorites-remove{flex-shrink:0;width:28px;height:28px;border-radius:50%;background:transparent;border:none;color:var(--_gengage-danger-color, #ef4444);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;opacity:.7;transition:opacity .15s,background .15s}.gengage-chat-favorites-remove:hover{opacity:1;background:var(--_gengage-danger-light, #fee2e2)}.gengage-chat-divider{border:none;border-top:1px solid var(--_gengage-border-color);margin:8px 0}.gengage-chat-divider-wrapper{display:flex;align-items:center;gap:8px;margin:8px 0}.gengage-chat-divider-wrapper hr{flex:1;border:none;border-top:1px solid var(--_gengage-border-color);margin:0}.gengage-chat-divider-label{font-size:11px;color:#6b7280;white-space:nowrap}.gengage-chat--overlay .gengage-chat-drawer{position:fixed;inset:0;width:100%;max-width:480px;max-height:100%;margin:0 auto;border-radius:0;animation:gengage-chat-overlay-in .24s cubic-bezier(.2,.72,.2,1)}.gengage-chat--overlay:before{content:"";position:fixed;inset:0;background:var(--gengage-chat-overlay-backdrop, rgba(0, 0, 0, .45));z-index:-1}@keyframes gengage-chat-overlay-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.gengage-chat-panel-skeleton{display:flex;flex-direction:column;gap:14px;padding:6px 0}.gengage-chat-panel-skeleton-block{height:110px;border-radius:10px;background:linear-gradient(90deg,#e5e7eb 25%,#f3f4f6,#e5e7eb 75%);background-size:200% 100%;animation:gengage-panel-shimmer 1.4s infinite}@keyframes gengage-panel-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.gengage-chat-panel-skeleton-block--image{height:200px;border-radius:8px;margin-bottom:12px}.gengage-chat-panel-skeleton-block--text{height:16px;border-radius:4px;margin-bottom:8px}.gengage-chat-panel-skeleton-block--text:nth-child(3){width:80%}.gengage-chat-panel-skeleton-block--text:nth-child(4){width:60%}.gengage-chat-panel-skeleton-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.gengage-chat-panel-skeleton-block--card{height:120px;border-radius:8px}.gengage-chat-panel-skeleton-block--row{height:32px;border-radius:4px;margin-bottom:4px}.gengage-chat-panel .gengage-chat-product-card{width:100%;max-width:100%;min-width:0;display:flex;flex-direction:column;border-radius:12px;border:1px solid var(--_gengage-border-color);box-shadow:0 1px 4px #0000000f;overflow:hidden;padding:0}.gengage-chat-panel .gengage-chat-product-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px #0000001a;border-color:#d1d5db}.gengage-chat-panel .gengage-chat-product-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));overflow-x:visible;gap:12px;min-height:auto;padding:4px 0}.gengage-chat-panel .gengage-chat-product-card-img{width:100%;height:160px;border-radius:0;object-fit:contain;background:#fafafa;padding:12px;box-sizing:border-box}.gengage-chat-panel .gengage-chat-product-card-body{padding:10px 12px 12px;text-align:left;gap:4px}.gengage-chat-panel .gengage-chat-product-card-name{min-height:0;margin-bottom:2px;font-size:13px;-webkit-line-clamp:2;line-clamp:2}.gengage-chat-panel .gengage-chat-product-card-price{justify-content:flex-start;font-size:15px}.gengage-chat-panel .gengage-chat-product-card-cta{display:block;padding:10px 12px;text-align:center;border-top:1px solid var(--_gengage-surface-muted);border-radius:0;background:transparent;color:var(--gengage-primary-color, #3b82f6);font-weight:700;font-size:13px}.gengage-chat-product-card--selected{border-color:var(--gengage-primary-color, #3b82f6);background:color-mix(in srgb,var(--gengage-primary-color, #3b82f6) 8%,transparent);box-shadow:0 0 0 1px var(--gengage-primary-color, #3b82f6)}.gengage-chat-panel--visible{min-height:0}.gengage-chat-panel--visible>*{flex-shrink:0}.gengage-chat-load-more-btn{display:block;margin:12px auto;padding:8px 24px;border:1px solid var(--_gengage-border-color);border-radius:8px;background:transparent;color:var(--gengage-primary-color, #3b82f6);cursor:pointer;font-size:14px}.gengage-chat-load-more-btn:hover{background:var(--_gengage-surface-muted, #f8fafc)}.gengage-chat-product-details-panel{display:flex;flex-direction:column;gap:12px;width:100%;background:#fff;border:1px solid var(--_gengage-border-color);border-radius:16px;padding:14px;box-sizing:border-box}.gengage-chat-product-details-media{border:1px solid var(--_gengage-surface-muted);border-radius:12px;background:#fafafa;padding:12px;display:flex;flex-direction:column;align-items:center}.gengage-chat-product-details-img{width:100%;height:auto;max-height:300px;object-fit:contain;border-radius:8px}.gengage-chat-product-details-content{display:flex;flex-direction:column;gap:8px;min-width:0}.gengage-chat-product-details-title{margin:0;font-size:17px;font-weight:700;line-height:1.3;color:#0f172a}.gengage-chat-product-details-rating{display:inline-flex;align-items:center;gap:4px;width:fit-content;padding:3px 8px;border-radius:999px;background:#fff7ed;color:#9a3412;font-size:13px;font-weight:700}.gengage-chat-product-details-review-count{color:#7c2d12;font-weight:600}.gengage-chat-product-details-price{display:flex;align-items:baseline;gap:6px}.gengage-chat-product-details-original-price{font-size:14px;color:#64748b;text-decoration:line-through}.gengage-chat-product-details-current-price{font-size:22px;font-weight:800;line-height:1.1;color:#0f172a}.gengage-chat-product-details-stock{width:fit-content;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:700}.gengage-chat-product-details-stock.is-in-stock{background:#dcfce7;color:#166534}.gengage-chat-product-details-stock.is-out-of-stock{background:#fee2e2;color:#991b1b}.gengage-chat-product-details-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:4px}.gengage-chat-product-details-cta{display:inline-flex;align-items:center;justify-content:center;min-height:40px;padding:0 20px;border-radius:999px;border:none;text-decoration:none;background:var(--gengage-primary-color, #3b82f6);color:var(--gengage-primary-foreground, #fff);font-size:14px;font-weight:700;cursor:pointer;transition:filter .14s ease,transform .12s ease}.gengage-chat-product-details-cta:hover{filter:brightness(1.05);transform:translateY(-1px)}.gengage-chat-product-details-cta:active{transform:translateY(1px)}.gengage-chat-product-details-atc{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:10px 20px;border:none;border-radius:10px;background:var(--_gengage-success-color);color:#fff;font-size:14px;font-weight:700;font-family:inherit;cursor:pointer;transition:filter .12s ease,transform .12s ease}.gengage-chat-product-details-atc:hover{filter:brightness(1.08);transform:translateY(-1px)}.gengage-chat-product-details-atc:active{transform:translateY(1px)}.gengage-chat-product-detail-tabs{margin-top:4px;border-top:1px solid var(--_gengage-border-color);padding-top:12px}.gengage-chat-product-detail-tab-bar{display:flex;gap:0;border-bottom:2px solid var(--_gengage-border-color);margin-bottom:12px}.gengage-chat-product-detail-tab{flex:1;padding:8px 12px;border:none;background:transparent;color:var(--_gengage-text-secondary);font-size:13px;font-weight:600;font-family:inherit;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:color .15s,border-color .15s}.gengage-chat-product-detail-tab:hover{color:#334155}.gengage-chat-product-detail-tab--active{color:var(--gengage-primary-color, #3b82f6);border-bottom-color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-product-detail-tab-panel{font-size:13px;line-height:1.6;color:#374151}.gengage-chat-product-specs-table{width:100%;border-collapse:collapse;font-size:13px}.gengage-chat-product-specs-table tr:nth-child(2n){background:var(--_gengage-surface-muted)}.gengage-chat-product-specs-key{padding:6px 10px;font-weight:600;color:#475569;white-space:nowrap;border-bottom:1px solid var(--_gengage-surface-muted);width:40%}.gengage-chat-product-specs-value{padding:6px 10px;color:var(--_gengage-text-primary);border-bottom:1px solid var(--_gengage-surface-muted)}.gengage-chat-product-card-atc{position:absolute;bottom:42px;right:6px;opacity:0;transition:opacity .15s ease;z-index:1}.gengage-chat-product-card:hover .gengage-chat-product-card-atc{opacity:1}@media(hover:none),(pointer:coarse){.gengage-chat-product-card-atc{opacity:1;position:relative;bottom:auto;right:auto;margin-top:4px}}.gengage-chat-drawer.gengage-chat-drawer--hidden{transform:translate(100%);opacity:0;pointer-events:none;box-shadow:none;visibility:hidden}.gengage-chat-root--mobile .gengage-chat-drawer.gengage-chat-drawer--hidden{transform:translateY(100%);opacity:0;pointer-events:none;box-shadow:none;visibility:hidden}@media(max-width:900px){.gengage-chat-drawer--with-panel .gengage-chat-panel--visible{width:clamp(280px,calc(100vw - var(--_gengage-chat-conversation-width)),560px);max-width:560px}}.gengage-chat-attachment-preview{display:flex;align-items:center;gap:8px;padding:6px 10px;background:var(--_gengage-surface-secondary);border:1px solid var(--_gengage-border-color);border-radius:8px;width:100%;box-sizing:border-box}.gengage-chat-attachment-preview--hidden{display:none}.gengage-chat-attachment-preview-thumb{width:40px;height:40px;border-radius:4px;object-fit:cover;flex-shrink:0}.gengage-chat-attachment-name{flex:1;font-size:12px;color:#4b5563;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gengage-chat-attachment-remove{background:none;border:none;cursor:pointer;font-size:18px;color:#6b7280;padding:0 4px;line-height:1;flex-shrink:0}.gengage-chat-attachment-remove:hover{color:#ef4444}.gengage-chat-attach-btn{background:none;border:none;cursor:pointer;width:32px;height:32px;padding:0;line-height:1;flex-shrink:0;display:flex;align-items:center;justify-content:center;border-radius:50%;color:#6b7280;transition:color .15s,background .15s}.gengage-chat-attach-btn:hover{color:#4b5563;background:#0000000d}.gengage-chat-attach-btn svg{width:20px;height:20px}.gengage-chat-mic-btn{background:none;border:none;cursor:pointer;width:32px;height:32px;padding:0;line-height:1;flex-shrink:0;display:flex;align-items:center;justify-content:center;border-radius:50%;color:#6b7280;transition:color .15s,background .15s}.gengage-chat-mic-btn:hover{color:#4b5563;background:#0000000d}.gengage-chat-mic-btn svg{width:20px;height:20px}.gengage-chat-mic-btn--active{color:#ef4444;animation:gengage-mic-pulse 1.2s ease-in-out infinite}.gengage-chat-mic-btn--active:hover{color:#dc2626}@keyframes gengage-mic-pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.15);opacity:.8}}.gengage-chat-input-area--dragover{outline:2px dashed var(--gengage-primary-color, #3b82f6);outline-offset:-2px;background:#eff6ff}.gengage-chat-attachment-thumb{width:120px;max-width:100%;height:auto;border-radius:8px;margin-bottom:6px;display:block}.gengage-chat-root--mobile{--_gengage-qty-btn-size: 44px;--_gengage-qty-btn-size-compact: 44px}.gengage-chat-root--mobile .gengage-chat-header-btn,.gengage-chat-root--mobile .gengage-chat-close{width:44px;height:44px;border-radius:12px}.gengage-chat-root--mobile .gengage-chat-attach-btn,.gengage-chat-root--mobile .gengage-chat-mic-btn,.gengage-chat-root--mobile .gengage-chat-send{width:44px;height:44px;min-width:44px}.gengage-chat-root--mobile .gengage-chat-attach-btn svg,.gengage-chat-root--mobile .gengage-chat-mic-btn svg{width:22px;height:22px}.gengage-chat-root--mobile .gengage-chat-panel-divider{display:flex;width:100%;height:20px;align-items:center;justify-content:center;cursor:ns-resize;background:transparent;touch-action:pan-y;position:relative;overflow:visible}.gengage-chat-root--mobile .gengage-chat-panel-divider--hidden{display:none}.gengage-chat-root--mobile .gengage-chat-drawer--with-panel{left:0;right:0;width:100%;border-radius:0}.gengage-chat-root--mobile .gengage-chat-panel{display:flex;flex-direction:column;position:absolute;inset:0;z-index:10;width:100%;min-width:0;max-width:none;max-height:none;border:none;box-shadow:none;border-radius:0;background:var(--gengage-chat-panel-bg, #fff);overflow-y:auto;overflow-x:hidden;transform:translate(100%);transition:transform .32s cubic-bezier(.4,0,.2,1);pointer-events:none;padding:0 12px 16px}.gengage-chat-root--mobile .gengage-chat-panel--visible{transform:translate(0);pointer-events:auto}.gengage-chat-root--mobile .gengage-chat-panel-divider,.gengage-chat-root--mobile .gengage-chat-drawer--with-panel .gengage-chat-panel-divider{display:none}.gengage-chat-root--mobile .gengage-chat-drawer--with-panel .gengage-chat-body{flex-direction:row}.gengage-chat-root--mobile .gengage-chat-drawer--with-panel .gengage-chat-conversation{width:100%;flex:1;border-left:none}.gengage-chat-root--mobile .gengage-qty-stepper--compact .gengage-qty-submit{min-height:44px;padding:0 12px;font-size:13px}.gengage-chat-root--mobile .gengage-chat-product-details-atc-stepper .gengage-qty-submit{min-height:44px;padding:0 16px}.gengage-chat-root--mobile .gengage-chat-product-details-share{width:44px;height:44px}.gengage-chat-root--mobile .gengage-chat-panel .gengage-chat-product-card{grid-template-columns:84px 1fr}.gengage-chat-root--mobile .gengage-chat-panel .gengage-chat-product-card-cta{grid-column:1 / -1;width:100%}.gengage-chat-root--mobile .gengage-chat-product-details-panel{padding:12px;gap:12px}.gengage-chat-root--mobile .gengage-chat-product-details-media{min-height:140px}.gengage-chat-root--mobile .gengage-chat-product-details-title{font-size:15px}.gengage-chat-root--mobile .gengage-chat-product-details-current-price{font-size:20px}.gengage-chat-root--mobile .gengage-chat-product-grid{scroll-snap-type:x mandatory}.gengage-chat-root--mobile .gengage-chat-product-card{width:280px;min-width:280px;scroll-snap-align:center}.gengage-chat-root--mobile .gengage-chat-product-card-img{height:180px}.gengage-chat-root--mobile .gengage-chat-drawer{position:fixed;inset:0;width:100%;max-height:100%;border-radius:0}.gengage-chat-root--mobile .gengage-chat-bubble{max-width:100%}.gengage-chat-root--mobile .gengage-chat-panel .gengage-chat-product-card-img{max-height:120px;object-fit:contain}.gengage-chat-root--mobile .gengage-chat-messages{scrollbar-width:none;padding:12px 16px}.gengage-chat-root--mobile .gengage-chat-messages::-webkit-scrollbar{display:none}.gengage-chat-root--mobile .gengage-chat-drawer{border-top:none}.gengage-chat-root--mobile .gengage-chat-header{border-radius:16px 16px 0 0}.gengage-chat-root--mobile .gengage-chat-conversation{overflow-y:auto;-webkit-overflow-scrolling:touch;min-height:0}.gengage-chat-root--mobile .gengage-chat-product-details-img{min-height:120px;object-fit:contain}.gengage-chat-root--mobile .gengage-chat-product-details-actions{flex-wrap:wrap;gap:8px}.gengage-chat-root--mobile .gengage-chat-product-card-promos,.gengage-chat-root--mobile .gengage-chat-product-details-promos{flex-wrap:wrap;gap:4px}.gengage-chat-root--mobile .gengage-chat-input::placeholder{font-size:13px}.gengage-chat-kvkk-banner{display:flex;align-items:flex-start;gap:8px;padding:10px 14px;background:#fffbeb;border-bottom:1px solid #fde68a;font-size:12px;line-height:1.5;color:#92400e}.gengage-chat-kvkk-content{flex:1;min-width:0}.gengage-chat-kvkk-content a{color:#b45309;text-decoration:underline}.gengage-chat-kvkk-dismiss{flex-shrink:0;width:20px;height:20px;border:none;background:transparent;color:#78350f;font-size:18px;cursor:pointer;padding:0;line-height:1}.gengage-chat-comparison{padding:16px}.gengage-chat-comparison-heading{font-size:14px;font-weight:700;letter-spacing:.05em;color:#0f172a;margin:0 0 16px}.gengage-chat-comparison-recommended{border:1px solid var(--_gengage-border-color);border-radius:12px;padding:16px;background:#fff;box-shadow:0 1px 3px #0000000f;margin-bottom:12px}.gengage-chat-comparison-recommended-label{font-size:12px;font-weight:700;color:var(--_gengage-success-color);text-transform:uppercase;letter-spacing:.04em;margin-bottom:12px}.gengage-chat-comparison-recommended-body{display:flex;gap:12px;align-items:flex-start}.gengage-chat-comparison-recommended-body img{width:80px;height:80px;object-fit:contain;border-radius:8px;background:var(--_gengage-surface-muted)}.gengage-chat-comparison-recommended-info{flex:1;min-width:0}.gengage-chat-comparison-recommended-title{font-size:14px;font-weight:600;color:#0f172a;margin-bottom:4px}.gengage-chat-comparison-recommended-price{font-size:16px;font-weight:700;color:#0f172a}.gengage-chat-comparison-highlights{margin-top:12px;padding-top:12px;border-top:1px solid var(--_gengage-surface-muted)}.gengage-chat-comparison-highlights-label{font-size:12px;font-weight:600;color:var(--_gengage-text-secondary);margin-bottom:6px}.gengage-chat-comparison-highlights ul{margin:0;padding-left:18px;font-size:13px;color:#334155;line-height:1.6}.gengage-chat-comparison-special{background:#fffbeb;border:1px solid #fde68a;border-radius:12px;padding:12px 16px;margin-bottom:12px;font-size:13px;color:#92400e}.gengage-chat-comparison-special summary{cursor:pointer;font-weight:600}.gengage-chat-comparison-special ul{margin:8px 0 0;padding-left:18px;line-height:1.6}.gengage-chat-comparison-table{width:100%;border-collapse:collapse;font-size:13px;margin-top:12px}.gengage-chat-comparison-table th,.gengage-chat-comparison-table td{padding:10px 12px;text-align:center;border-bottom:1px solid var(--_gengage-surface-muted);vertical-align:top}.gengage-chat-comparison-table th{font-weight:600;font-size:12px;color:#334155}.gengage-chat-comparison-table th img{width:60px;height:60px;object-fit:contain;border-radius:6px;background:var(--_gengage-surface-muted);margin-bottom:6px}.gengage-chat-comparison-table-price{font-weight:700;color:#0f172a}.gengage-chat-comparison-label{text-align:left;font-weight:600;color:var(--_gengage-text-secondary);white-space:nowrap}.gengage-chat-comparison-selected{background:#f0fdf4}.gengage-chat-comparison-recommended-text{padding:8px 12px;font-size:12px;color:var(--gengage-text-secondary, #475569);font-style:italic;border-top:1px solid var(--gengage-border-color, #e2e8f0);margin-top:8px}.gengage-chat-comparison-product-actions{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}.gengage-chat-comparison-view-btn{flex:1;min-width:0;padding:8px 12px;border:1px solid var(--gengage-primary-color, #3b82f6);border-radius:6px;background:transparent;color:var(--gengage-primary-color, #3b82f6);font-size:12px;font-weight:500;font-family:inherit;cursor:pointer;transition:background .15s ease,color .15s ease;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.gengage-chat-comparison-view-btn:hover{background:var(--gengage-primary-color, #3b82f6);color:#fff}.gengage-chat-pills{position:relative;padding:8px 12px;border-top:1px solid var(--_gengage-surface-muted);background:var(--gengage-background-color, #fff)}.gengage-chat-pills-scroll{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;padding-right:28px}.gengage-chat-pills-scroll::-webkit-scrollbar{display:none}.gengage-chat-root--mobile .gengage-chat-pills-scroll{flex-wrap:wrap;gap:6px}.gengage-chat-root--mobile .gengage-chat-pill{white-space:normal;max-width:100%}.gengage-chat-pill{flex:0 0 auto;padding:8px 16px;border:none;border-radius:999px;background:var(--gengage-primary-color, #3b82f6);color:var(--gengage-primary-foreground, #fff);font-size:13px;font-weight:600;font-family:inherit;white-space:nowrap;cursor:pointer;transition:filter .15s,transform .1s}.gengage-chat-pill:hover{filter:brightness(.92)}.gengage-chat-pill:active{transform:scale(.97)}.gengage-chat-pill--rich{display:flex;align-items:center;gap:8px;padding:6px 14px 6px 6px;border-radius:20px}.gengage-chat-pill-img{width:32px;height:32px;border-radius:50%;object-fit:cover;flex-shrink:0;background:#ffffff26}.gengage-chat-pill-text{font-size:13px;font-weight:600;line-height:1.2}.gengage-chat-pill-desc{display:none}.gengage-chat-pill--rich .gengage-chat-pill-desc{display:block;font-size:10px;font-weight:400;opacity:.8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px}.gengage-chat-pills-arrow{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:28px;height:28px;border-radius:50%;border:1px solid var(--_gengage-border-color);background:#fff;color:var(--_gengage-text-secondary);font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:-4px 0 8px #ffffffe6;z-index:1}.gengage-chat-pills-arrow:hover{background:var(--_gengage-surface-muted);color:#334155}@media(prefers-reduced-motion:reduce){.gengage-chat-uispec>*,.gengage-chat-action-btn,.gengage-chat-product-card,.gengage-chat-product-card-cta,.gengage-chat-send,.gengage-chat-launcher,.gengage-chat-pill,.gengage-chat-drawer,.gengage-chat-typing-dots span,.gengage-chat-typing-sparkle,.gengage-chat-thinking-step-marker--active,.gengage-chat-bubble,.gengage-chat-panel-skeleton-block,.gengage-chat-ai-toppick-card,.gengage-chat-mic-btn--active,.gengage-chat-ai-toppick-spinner:after,.gengage-chat-panel-shimmer,.gengage-chat-overlay,.gengage-chat-product-details-skeleton-price,.gengage-chat-still-working,.gengage-skeleton-card,.gengage-skeleton-line,.gengage-skeleton-img,.gengage-skeleton-text,.gengage-skeleton-price{animation:none!important;transition:none!important;transform:none!important}}.gengage-chat-bubble--user{position:relative}.gengage-chat-rollback-btn{position:absolute;left:-28px;top:50%;transform:translateY(-50%);width:24px;height:24px;border:none;border-radius:50%;background:var(--gengage-surface-color, #f1f5f9);color:var(--gengage-text-secondary, #64748b);cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s ease;padding:0}.gengage-chat-bubble--user:hover .gengage-chat-rollback-btn{opacity:1}.gengage-chat-rollback-btn:hover{background:var(--gengage-primary-color, #3b82f6);color:#fff}.gengage-chat-bubble--hidden{display:none}.gengage-chat-ai-top-picks{display:flex;flex-direction:column;gap:12px;padding:8px 0;scroll-margin-top:60px}.gengage-chat-ai-top-picks-title{font-size:15px;font-weight:600;color:var(--gengage-text-primary, #1e293b);margin:0 0 4px}.gengage-chat-ai-top-picks-cards{display:flex;flex-direction:column;gap:10px}.gengage-chat-ai-toppick-discount-badge{position:absolute;top:8px;right:8px;background:var(--gengage-discount-bg, #ef4444);color:#fff;font-size:11px;font-weight:700;padding:2px 6px;border-radius:4px;z-index:1}.gengage-chat-ai-toppick-card--winner{position:relative;display:flex;flex-direction:column;border:2px solid var(--gengage-primary-color, #3b82f6);border-radius:12px;background:#fff;overflow:hidden;transition:box-shadow .2s ease}.gengage-chat-ai-toppick-card--winner:hover{box-shadow:0 4px 16px #3b82f626}.gengage-chat-ai-toppick-card--winner .gengage-chat-ai-toppick-img{width:100%;height:140px;object-fit:contain;background:var(--_gengage-surface-muted)}.gengage-chat-ai-toppick-card--compact{position:relative;display:flex;flex-direction:row;align-items:center;gap:12px;border:1px solid var(--gengage-border-color, #e2e8f0);border-radius:10px;background:#fff;padding:10px;transition:box-shadow .2s ease,transform .15s ease}.gengage-chat-ai-toppick-card--compact:hover{box-shadow:0 2px 8px #00000014;transform:translateY(-1px)}.gengage-chat-ai-toppick-card--compact .gengage-chat-ai-toppick-img{width:64px;height:64px;object-fit:contain;border-radius:8px;background:var(--_gengage-surface-muted);flex-shrink:0}.gengage-chat-ai-toppick-badge{position:absolute;top:8px;left:8px;background:var(--gengage-primary-color, #3b82f6);color:#fff;font-size:10px;font-weight:700;text-transform:uppercase;padding:2px 8px;border-radius:4px;z-index:1;letter-spacing:.5px}.gengage-chat-ai-toppick-body{display:flex;flex-direction:column;gap:4px;padding:10px;flex:1;min-width:0}.gengage-chat-ai-toppick-card--compact .gengage-chat-ai-toppick-body{padding:0}.gengage-chat-ai-toppick-name{font-size:13px;font-weight:600;color:var(--gengage-text-primary, #1e293b);overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical}.gengage-chat-ai-toppick-role{font-size:11px;font-weight:600;color:var(--gengage-primary-color, #3b82f6);text-transform:uppercase;letter-spacing:.3px}.gengage-chat-ai-toppick-labels{display:flex;flex-wrap:wrap;gap:4px}.gengage-chat-ai-toppick-label{font-size:11px;padding:1px 6px;border-radius:4px;font-weight:500}.gengage-chat-ai-toppick-label[data-sentiment=positive]{background:#dcfce7;color:#166534}.gengage-chat-ai-toppick-label[data-sentiment=negative]{background:#fee2e2;color:#991b1b}.gengage-chat-ai-toppick-label[data-sentiment=neutral]{background:var(--_gengage-surface-muted);color:#475569}.gengage-chat-ai-toppick-score{font-size:12px;font-weight:700;color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-ai-toppick-reason{font-size:12px;color:var(--gengage-chat-text-secondary, #666);line-height:1.4;margin-top:4px}.gengage-chat-ai-toppick-review{font-size:12px;font-style:italic;color:var(--gengage-text-secondary, #64748b);margin:2px 0;padding-left:8px;border-left:2px solid var(--gengage-border-color, #e2e8f0)}.gengage-chat-ai-toppick-price{font-size:14px;font-weight:700;color:var(--gengage-text-primary, #1e293b)}.gengage-chat-ai-toppick-original-price{text-decoration:line-through;color:var(--gengage-text-secondary, #64748b);font-weight:400;font-size:12px}.gengage-chat-ai-toppick-cta{display:block;width:calc(100% - 20px);margin:6px 10px 10px;padding:8px 0;border:none;border-radius:8px;background:var(--gengage-primary-color, #3b82f6);color:#fff;font-size:13px;font-weight:600;cursor:pointer;text-align:center;transition:background .15s ease}.gengage-chat-ai-toppick-cta:hover{filter:brightness(.92)}.gengage-chat-ai-toppick-card--compact .gengage-chat-ai-toppick-cta{width:auto;margin:0;padding:6px 14px;flex-shrink:0;align-self:center}.gengage-chat-ai-toppick-spinner{position:absolute;inset:0;background:#ffffffb3;display:flex;align-items:center;justify-content:center;border-radius:12px;z-index:3}.gengage-chat-ai-toppick-spinner:after{content:"";width:24px;height:24px;border:3px solid var(--gengage-border, #e2e8f0);border-top-color:var(--gengage-accent-primary, #3b82f6);border-radius:50%;animation:gengage-spin .7s linear infinite}@keyframes gengage-spin{to{transform:rotate(360deg)}}.gengage-chat-root--mobile .gengage-chat-ai-top-picks-cards{flex-direction:row;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;gap:10px;padding-bottom:4px}.gengage-chat-root--mobile .gengage-chat-ai-toppick-card--winner,.gengage-chat-root--mobile .gengage-chat-ai-toppick-card--compact{min-width:280px;max-width:280px;flex-shrink:0;scroll-snap-align:start}.gengage-chat-root--mobile .gengage-chat-ai-toppick-card--compact{flex-direction:column;align-items:stretch}.gengage-chat-root--mobile .gengage-chat-ai-toppick-card--compact .gengage-chat-ai-toppick-img{width:100%;height:100px;border-radius:8px 8px 0 0}.gengage-chat-root--mobile .gengage-chat-ai-toppick-card--compact .gengage-chat-ai-toppick-cta{width:calc(100% - 20px);margin:6px 10px 10px;align-self:stretch}.gengage-chat-root--mobile .gengage-chat-rollback-btn{left:-24px}.gengage-chat-grounding-review{display:flex;align-items:center;gap:12px;padding:12px 16px;background:var(--gengage-surface-color, #f8fafc);border:1px solid var(--gengage-border-color, #e2e8f0);border-radius:10px;transition:background .15s ease,border-color .15s ease}.gengage-chat-grounding-review:hover{background:var(--gengage-hover-color, #f1f5f9);border-color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-grounding-review-icon{font-size:20px;flex-shrink:0}.gengage-chat-grounding-review-body{flex:1;min-width:0}.gengage-chat-grounding-review-title{font-weight:600;font-size:13px;color:var(--gengage-text-color, #1e293b)}.gengage-chat-grounding-review-subtitle{font-size:12px;color:var(--gengage-text-muted, #64748b);margin-top:2px}.gengage-chat-grounding-review-cta{font-size:13px;font-weight:500;color:var(--gengage-primary-color, #3b82f6);white-space:nowrap;flex-shrink:0}.gengage-chat-grouping-cards{display:flex;flex-direction:column;gap:6px}.gengage-chat-grouping-card{display:flex;align-items:center;gap:10px;padding:8px 12px;background:var(--gengage-surface-color, #f8fafc);border:1px solid var(--gengage-border-color, #e2e8f0);border-radius:8px;transition:background .15s ease,border-color .15s ease}.gengage-chat-grouping-card:hover{background:var(--gengage-hover-color, #f1f5f9);border-color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-grouping-card-arrow{display:none;font-size:14px;color:var(--gengage-primary-color, #3b82f6);flex-shrink:0}.gengage-chat-grouping-card-img{width:48px;height:48px;min-width:48px;min-height:48px;border-radius:4px;object-fit:cover;flex-shrink:0}.gengage-chat-grouping-card-body{flex:1;min-width:0;display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}.gengage-chat-grouping-card-name{font-weight:600;font-size:13px;color:var(--gengage-text-color, #1e293b)}.gengage-chat-grouping-card-desc{font-size:12px;color:var(--gengage-text-muted, #64748b)}.gengage-chat-grouping-card-labels{display:block;font-size:11px;color:var(--gengage-chat-text-secondary, #888);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gengage-chat-root--mobile .gengage-chat-grouping-card-img{display:none}.gengage-chat-root--mobile .gengage-chat-grouping-card-arrow{display:inline}.gengage-chat-suggested-search-cards{display:flex;flex-direction:column;gap:8px}.gengage-chat-suggested-search-card{display:flex;align-items:flex-start;gap:12px;padding:10px 14px;background:var(--gengage-surface-color, #f8fafc);border:1px solid var(--gengage-border-color, #e2e8f0);border-radius:10px;transition:background .15s ease,border-color .15s ease}.gengage-chat-suggested-search-card:hover{background:var(--gengage-hover-color, #f1f5f9);border-color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-suggested-search-card-img{width:40px;height:40px;border-radius:6px;object-fit:cover;flex-shrink:0}.gengage-chat-suggested-search-card-body{flex:1;min-width:0}.gengage-chat-suggested-search-card-name{font-weight:600;font-size:13px;color:var(--gengage-text-color, #1e293b)}.gengage-chat-suggested-search-card-desc{font-size:12px;color:var(--gengage-text-secondary, #475569);margin-top:2px}.gengage-chat-suggested-search-card-diff{font-size:11px;color:var(--gengage-text-muted, #64748b);margin-top:2px;font-style:italic}.gengage-chat-product-details-gallery{position:relative}.gengage-chat-product-details-gallery .gengage-chat-product-details-img{touch-action:pan-y}.gengage-chat-product-gallery-thumbs{display:flex;gap:8px;padding:10px 0 4px;overflow-x:auto;scrollbar-width:thin;justify-content:center;width:100%}.gengage-chat-product-gallery-thumb{width:56px;height:56px;object-fit:cover;border-radius:8px;border:2px solid transparent;cursor:pointer;flex-shrink:0;transition:border-color .15s ease;background:#fff}.gengage-chat-product-gallery-thumb:hover{border-color:var(--gengage-border-color, #cbd5e1)}.gengage-chat-product-gallery-thumb--active{border-color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-product-gallery-thumb-more{display:flex;align-items:center;justify-content:center;width:56px;height:56px;border-radius:8px;background:var(--_gengage-surface-muted, #f1f5f9);color:var(--_gengage-text-secondary, #64748b);font-size:13px;font-weight:600;flex-shrink:0}.gengage-chat-product-variants{margin-top:12px}.gengage-chat-product-variants-label{font-size:12px;font-weight:600;color:var(--gengage-text-muted, #64748b);margin-bottom:6px;text-transform:none;letter-spacing:.5px}.gengage-chat-product-variants-list{display:flex;flex-wrap:wrap;gap:6px}.gengage-chat-product-variant-btn{padding:6px 12px;border:1px solid var(--gengage-border-color, #e2e8f0);border-radius:6px;background:var(--gengage-surface-color, #f8fafc);color:var(--gengage-text-color, #1e293b);font-size:12px;cursor:pointer;transition:background .15s ease,border-color .15s ease}.gengage-chat-product-variant-btn:hover{background:var(--gengage-hover-color, #f1f5f9);border-color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-product-grid-wrapper{display:flex;flex-direction:column;gap:8px}.gengage-chat-product-sort-toolbar{display:flex;gap:4px;padding:4px;background:var(--gengage-surface-color, #f8fafc);border-radius:8px;border:1px solid var(--gengage-border-color, #e2e8f0)}.gengage-chat-product-sort-btn{flex:1;padding:6px 10px;border:1px solid var(--_gengage-border-color);border-radius:6px;background:transparent;color:var(--_gengage-text-secondary);font-size:12px;font-weight:500;cursor:pointer;transition:background .15s ease,color .15s ease}.gengage-chat-product-sort-btn:hover{background:var(--gengage-hover-color, #f1f5f9);color:var(--gengage-text-color, #1e293b)}.gengage-chat-product-sort-btn--active,.gengage-chat-product-sort-btn--active:hover{background:var(--gengage-primary-color, #3b82f6);color:#fff}.gengage-chat-product-sort-separator{width:1px;background:var(--gengage-border-color, #e2e8f0);margin:2px}.gengage-chat-comparison-toggle-btn{flex:none;padding:6px 10px;border:none;border-radius:6px;background:transparent;color:var(--gengage-text-muted, #64748b);font-size:12px;font-weight:500;cursor:pointer;transition:background .15s ease,color .15s ease;white-space:nowrap}.gengage-chat-comparison-toggle-btn:hover{background:var(--gengage-hover-color, #f1f5f9);color:var(--gengage-text-color, #1e293b)}.gengage-chat-comparison-toggle-btn--active{background:transparent;border:1px solid var(--gengage-primary-color, #3b82f6);color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-comparison-toggle-btn--active:hover{background:var(--gengage-primary-color, #3b82f6);color:#fff}.gengage-chat-comparison-select-wrapper{position:relative}.gengage-chat-comparison-checkbox{position:absolute;top:8px;right:8px;z-index:4;width:20px;height:20px;cursor:pointer;accent-color:var(--gengage-primary-color, #3b82f6);background:#fff;border-radius:4px;box-shadow:0 1px 3px #00000026}.gengage-chat-comparison-toggle-btn--hidden{opacity:0;pointer-events:none}@keyframes gengage-comparison-fade-in{0%{opacity:0}to{opacity:1}}.gengage-chat-comparison-toggle-btn--reveal{animation:gengage-comparison-fade-in .5s ease forwards}@media(prefers-reduced-motion:reduce){.gengage-chat-comparison-toggle-btn--reveal{animation:none;opacity:1}}.gengage-chat-comparison-floating-btn{display:block;width:100%;padding:10px 16px;border:none;border-radius:8px;background:var(--gengage-primary-color, #3b82f6);color:#fff;font-size:14px;font-weight:600;cursor:pointer;transition:background .15s ease;text-align:center;position:sticky;bottom:0;z-index:5;box-shadow:0 -2px 8px #0000001a}.gengage-chat-comparison-floating-btn:hover:not(:disabled){background:var(--gengage-primary-hover, #2563eb)}.gengage-chat-comparison-floating-btn--disabled{background:#94a3b8;cursor:default;opacity:.8}.gengage-chat-panel-topbar{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--_gengage-border-color);background:var(--_gengage-surface-muted);min-height:44px;flex-shrink:0;position:sticky;top:0;z-index:3}.gengage-chat-panel-topbar-back,.gengage-chat-panel-topbar-forward{width:28px;height:28px;min-width:28px;padding:0;border:1px solid #d1d5db;border-radius:6px;background:transparent;color:#374151;font-size:14px;font-family:inherit;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s ease,border-color .15s ease,opacity .15s ease}.gengage-chat-panel-topbar-back:hover:not(:disabled),.gengage-chat-panel-topbar-forward:hover:not(:disabled){background:var(--_gengage-surface-secondary);border-color:#9ca3af}.gengage-chat-panel-topbar-back:disabled,.gengage-chat-panel-topbar-forward:disabled{opacity:.3;cursor:default}.gengage-chat-panel-topbar-title{flex:1;font-size:14px;font-weight:600;color:var(--_gengage-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}@keyframes gengage-typewriter-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.gengage-chat-typewriter-block{display:block;animation:gengage-typewriter-fade-in .15s ease both}@media(prefers-reduced-motion:reduce){.gengage-chat-typewriter-block{animation:none}}.gengage-product-mention{color:var(--gengage-primary-color, #3b82f6);text-decoration:none;cursor:pointer;font-weight:500;border-bottom:1px dashed var(--gengage-primary-color, #3b82f6);transition:border-color .15s}.gengage-product-mention:hover{border-bottom-style:solid}@keyframes gengage-skeleton-pulse{0%,to{opacity:.4}50%{opacity:.8}}.gengage-chat-panel-skeleton-block{animation:gengage-skeleton-pulse 1.5s ease-in-out infinite}@media(prefers-reduced-motion:reduce){.gengage-chat-panel-skeleton-block{animation:none}}.gengage-chat-input-chips{display:flex;gap:6px;padding:4px 12px 2px;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none}.gengage-chat-input-chips::-webkit-scrollbar{display:none}.gengage-chat-input-chip{display:inline-flex;align-items:center;padding:4px 10px;border-radius:12px;border:1px solid var(--_gengage-border-color);background:#f9fafb;color:#374151;font-size:12px;font-weight:500;font-family:inherit;cursor:pointer;transition:background .12s,border-color .12s;white-space:nowrap}.gengage-chat-input-chip:hover{background:var(--_gengage-surface-secondary);border-color:#d1d5db}.gengage-chat-icon{width:14px;height:14px;flex-shrink:0}.gengage-chat-input-chip-icon,.gengage-chat-pill-icon{display:inline-flex;align-items:center;margin-right:4px}.gengage-chat-product-card-img-wrapper,.gengage-chat-product-details-img-wrap{position:relative;overflow:hidden}.gengage-chat-product-card-discount-badge{position:absolute;top:8px;left:8px;padding:3px 8px;border-radius:4px;background:var(--_gengage-discount-color);color:#fff;font-size:11px;font-weight:700;line-height:1.3;z-index:1}.gengage-chat-product-card-stock{font-size:11px;font-weight:600;margin-top:2px;padding:2px 6px;border-radius:4px;width:fit-content}.gengage-chat-product-card-stock.is-in-stock{background:#ecfdf5;color:#065f46}.gengage-chat-product-card-stock.is-out-of-stock{background:#fef2f2;color:#dc2626}.gengage-chat-find-similar-pill{position:absolute;top:40px;right:8px;opacity:0;pointer-events:none;transition:opacity .2s ease;padding:4px 10px;font-size:11px;font-weight:500;font-family:inherit;border:none;border-radius:12px;background:var(--gengage-chat-pill-bg, rgba(0, 0, 0, .7));color:var(--gengage-chat-pill-text, #fff);cursor:pointer;white-space:nowrap;z-index:2}.gengage-chat-product-card-img-wrapper:hover .gengage-chat-find-similar-pill,.gengage-chat-product-details-img-wrap:hover .gengage-chat-find-similar-pill{opacity:1;pointer-events:auto}.gengage-chat-favorite-btn{position:absolute;top:8px;right:8px;background:#ffffffe6;border:none;border-radius:50%;width:28px;height:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--gengage-text-secondary, #64748b);z-index:3;transition:color .2s;padding:0}.gengage-chat-favorite-btn:hover,.gengage-chat-favorite-btn--active{color:var(--gengage-accent-primary, #ef4444)}.gengage-chat-product-card-promos,.gengage-chat-product-details-promos{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.gengage-chat-product-card-promo-badge,.gengage-chat-product-details-promo-badge{display:inline-block;padding:2px 6px;font-size:10px;font-weight:500;border-radius:4px;background:var(--gengage-chat-promo-bg, #e8f5e9);color:var(--gengage-chat-promo-text, #2e7d32);white-space:nowrap;min-height:20px;box-sizing:border-box}.gengage-chat-thumbnails-column{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:4px;z-index:2;pointer-events:auto}.gengage-chat-thumbnail-btn{display:flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:2px solid var(--_gengage-border-color);border-radius:6px;background:#fff;cursor:pointer;overflow:hidden;transition:border-color .15s ease}.gengage-chat-thumbnail-btn:hover{border-color:var(--gengage-primary-color, #3b82f6)}.gengage-chat-thumbnail-img{width:100%;height:100%;object-fit:cover}.gengage-chat-panel-float{position:sticky;bottom:0;height:0;overflow:visible;pointer-events:none;z-index:10}.gengage-chat-choice-prompter{position:absolute;bottom:12px;right:12px;pointer-events:auto;width:200px;padding:12px 14px;background:#fff;border:1px solid var(--_gengage-border-color);border-radius:10px;box-shadow:0 4px 12px #0000001a;z-index:5;animation:gengage-choice-prompter-in .2s ease}@keyframes gengage-choice-prompter-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.gengage-chat-choice-prompter-heading{font-size:13px;font-weight:600;color:var(--_gengage-text-primary);margin-bottom:4px}.gengage-chat-choice-prompter-suggestion{font-size:12px;color:#6b7280;margin-bottom:10px;line-height:1.4}.gengage-chat-choice-prompter-cta{display:block;width:100%;padding:6px 12px;border:none;border-radius:6px;background:var(--gengage-primary-color, #3b82f6);color:#fff;font-size:12px;font-weight:600;font-family:inherit;cursor:pointer;text-align:center;transition:opacity .15s ease}.gengage-chat-choice-prompter-cta:hover{opacity:.9}.gengage-chat-choice-prompter-dismiss{position:absolute;top:8px;right:8px;padding:4px 8px;min-width:28px;min-height:28px;display:flex;align-items:center;justify-content:center;border:none;background:none;color:#6b7280;font-size:16px;cursor:pointer;line-height:1}.gengage-chat-choice-prompter-dismiss:hover{color:#6b7280}@media(prefers-reduced-motion:reduce){.gengage-chat-choice-prompter{animation:none}}.gengage-chat-pros-cons{padding:12px 14px;background:var(--_gengage-surface-muted);border-radius:8px;margin:8px 0}.gengage-chat-pros-cons-heading{margin:0 0 10px;font-size:14px;font-weight:600;color:#0f172a}.gengage-chat-pros-cons-list{list-style:none;margin:0 0 8px;padding:0}.gengage-chat-pros-cons-list:last-child{margin-bottom:0}.gengage-chat-pros-cons-item{display:flex;align-items:flex-start;gap:8px;padding:4px 0;font-size:13px;line-height:1.5;color:#334155}.gengage-chat-pros-cons-icon{flex-shrink:0;width:18px;height:18px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;border-radius:50%}.gengage-chat-pros-cons-icon--pro{color:var(--_gengage-success-color);background:color-mix(in srgb,var(--_gengage-success-color) 15%,#fff)}.gengage-chat-pros-cons-icon--con{color:#dc2626;background:#fee2e2}.gengage-chat-categories{display:flex;flex-direction:column;gap:8px}.gengage-chat-categories-tabs{display:flex;gap:4px;overflow-x:auto;padding:4px 0;-webkit-overflow-scrolling:touch}.gengage-chat-categories-tab{padding:6px 14px;border:1px solid var(--gengage-border-color, #e5e7eb);border-radius:20px;background:var(--gengage-bg, #fff);color:var(--gengage-text, #374151);cursor:pointer;white-space:nowrap;font-size:13px;transition:background .15s,color .15s}.gengage-chat-categories-tab:hover{background:var(--gengage-bg-hover, #f3f4f6)}.gengage-chat-categories-tab--active{background:var(--gengage-primary, #2563eb);color:#fff;border-color:var(--gengage-primary, #2563eb)}.gengage-chat-categories-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px}.gengage-chat-categories-filter-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:4px}.gengage-chat-categories-filter-tag{padding:4px 10px;border:1px solid var(--gengage-border-color, #e5e7eb);border-radius:14px;background:var(--gengage-bg, #fff);color:var(--gengage-text-secondary, #6b7280);font-size:12px;cursor:pointer;transition:background .15s}.gengage-chat-categories-filter-tag:hover{background:var(--gengage-bg-hover, #f3f4f6)}.gengage-chat-product-grid-view-more{display:block;width:100%;padding:10px;margin-top:8px;border:1px solid var(--gengage-border-color, #e5e7eb);border-radius:8px;background:var(--gengage-bg, #fff);color:var(--gengage-primary, #2563eb);font-size:14px;font-weight:500;cursor:pointer;text-align:center;transition:background .15s;grid-column:1 / -1}.gengage-chat-product-grid-view-more:hover{background:var(--gengage-bg-hover, #f3f4f6)}.gengage-chat-product-grid--mobile{display:flex;overflow-x:auto;gap:8px;padding:8px 0;-webkit-overflow-scrolling:touch}.gengage-chat-product-grid--mobile .gengage-chat-product-card{min-width:160px;max-width:180px;flex-shrink:0}.gengage-chat-comparison--mobile{overflow-x:auto;-webkit-overflow-scrolling:touch;position:relative}.gengage-chat-comparison--mobile{-webkit-mask-image:linear-gradient(to right,#000 85%,transparent);mask-image:linear-gradient(to right,#000 85%,transparent)}.gengage-chat-comparison--mobile .gengage-chat-comparison-table{min-width:480px}.gengage-chat-comparison-key-differences{margin-top:12px;padding:12px;background:var(--gengage-bg-secondary, #f9fafb);border-radius:8px}.gengage-chat-comparison-key-differences h4{margin:0 0 8px;font-size:14px;font-weight:600;color:var(--gengage-text, #374151)}.gengage-chat-comparison-key-differences-content{font-size:13px;color:var(--gengage-text-secondary, #6b7280);line-height:1.5}.gengage-chat-comparison-key-differences-content ul{margin:0;padding-left:18px}.gengage-chat-comparison-key-differences-content li{margin-bottom:4px}.gengage-chat-product-details-similars-heading{margin:16px 0 8px;font-size:15px;font-weight:600;color:var(--gengage-text, #374151)}.gengage-chat-product-details-similars{margin-top:8px}.gengage-chat-handoff-notice{display:flex;flex-direction:column;align-items:center;gap:6px;padding:16px;margin:8px 0;background:#fef3c7;border:1px solid #fcd34d;border-radius:8px;text-align:center}.gengage-chat-handoff-notice-icon{font-size:24px}.gengage-chat-handoff-notice-heading{margin:0;font-size:14px;font-weight:600;color:#92400e}.gengage-chat-handoff-notice-summary{margin:0;font-size:13px;line-height:1.5;color:#78350f}.gengage-qty-stepper{display:inline-flex;align-items:center;gap:0;border:1px solid #d1d5db;border-radius:8px;overflow:hidden;background:#fff}.gengage-qty-btn{width:var(--_gengage-qty-btn-size);height:var(--_gengage-qty-btn-size);border:none;background:transparent;color:#374151;font-size:14px;font-weight:600;font-family:inherit;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color .12s}.gengage-qty-btn:hover:not(:disabled){background:var(--_gengage-surface-secondary)}.gengage-qty-btn:disabled{opacity:.35;cursor:default}.gengage-qty-value{min-width:24px;text-align:center;font-size:13px;font-weight:600;color:var(--_gengage-text-primary);-webkit-user-select:none;user-select:none}.gengage-qty-submit{border:none;border-left:1px solid #d1d5db;background:var(--_gengage-success-color);color:#fff;font-size:13px;font-weight:700;font-family:inherit;cursor:pointer;padding:6px 12px;transition:filter .12s ease,transform .12s ease}.gengage-qty-submit:hover{filter:brightness(1.08)}.gengage-qty-submit:active{transform:translateY(1px)}.gengage-qty-submit--success{background:var(--_gengage-success-color);transition:background .2s ease}.gengage-qty-stepper--compact{border-radius:14px;box-shadow:0 2px 6px #0000001f}.gengage-qty-stepper--compact .gengage-qty-btn{width:var(--_gengage-qty-btn-size-compact);height:var(--_gengage-qty-btn-size-compact);font-size:12px}.gengage-qty-stepper--compact .gengage-qty-value{min-width:18px;font-size:12px}.gengage-qty-stepper--compact .gengage-qty-submit{padding:4px 8px;font-size:13px;border-radius:0 14px 14px 0}.gengage-chat-panel .gengage-qty-stepper{border:1px solid var(--_gengage-border-color);border-radius:8px;overflow:hidden}.gengage-chat-panel .gengage-qty-stepper button,.gengage-chat-panel .gengage-qty-stepper .gengage-qty-value{border:none;border-right:1px solid var(--_gengage-border-color)}.gengage-chat-panel .gengage-qty-stepper .gengage-qty-submit{border-right:none}.gengage-chat-product-details-atc-stepper{border-radius:10px}.gengage-chat-product-details-atc-stepper .gengage-qty-btn{width:32px;height:32px}.gengage-chat-product-details-atc-stepper .gengage-qty-value{min-width:28px;font-size:14px}.gengage-chat-product-details-atc-stepper .gengage-qty-submit{padding:8px 18px;font-size:14px;border-radius:0 10px 10px 0}.gengage-chat-product-details-share{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid #d1d5db;border-radius:10px;background:transparent;color:#6b7280;cursor:pointer;transition:color .12s,border-color .12s,background-color .12s;position:relative;flex-shrink:0}.gengage-chat-product-details-share:hover{color:var(--gengage-primary-color, #3b82f6);border-color:var(--gengage-primary-color, #3b82f6);background:#f0f7ff}.gengage-chat-product-details-share:before{content:attr(aria-label);position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);padding:4px 8px;border-radius:4px;background:var(--_gengage-surface-dark);color:#fff;font-size:11px;font-weight:500;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .15s ease;z-index:2}.gengage-chat-product-details-share:hover:before{opacity:1}.gengage-chat-product-details-share--copied:after{content:"✓";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:var(--_gengage-success-color);color:#fff;border-radius:10px;font-size:16px;font-weight:700}.gengage-chat-product-details-share svg{width:20px;height:20px}.gengage-chat-review-link,.gengage-chat-grounding-link{text-decoration:underline;color:var(--gengage-primary-color, #3b82f6)}@media(max-width:768px){.gengage-chat-product-card-promo-badge,.gengage-chat-product-details-promo-badge{-webkit-line-clamp:2;line-clamp:2;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;white-space:normal}}.gengage-chat-launcher:focus-visible,.gengage-chat-close:focus-visible,.gengage-chat-header-btn:focus-visible,.gengage-chat-header-powered:focus-visible,.gengage-chat-send:focus-visible,.gengage-chat-action-btn:focus-visible,.gengage-chat-pill:focus-visible,.gengage-chat-input-chip:focus-visible,.gengage-chat-pills-arrow:focus-visible,.gengage-chat-error-retry:focus-visible,.gengage-chat-product-card-cta:focus-visible,.gengage-chat-product-details-cta:focus-visible,.gengage-chat-product-details-atc:focus-visible,.gengage-chat-product-detail-tab:focus-visible,.gengage-chat-panel-divider-toggle:focus-visible,.gengage-chat-panel-topbar-back:focus-visible,.gengage-chat-panel-topbar-forward:focus-visible,.gengage-chat-rollback-btn:focus-visible,.gengage-chat-ai-toppick-cta:focus-visible,.gengage-chat-comparison-view-btn:focus-visible,.gengage-chat-comparison-toggle-btn:focus-visible,.gengage-chat-comparison-floating-btn:focus-visible,.gengage-chat-comparison-checkbox:focus-visible,.gengage-chat-product-sort-btn:focus-visible,.gengage-chat-product-variant-btn:focus-visible,.gengage-chat-product-gallery-thumb:focus-visible,.gengage-chat-thumbnail-btn:focus-visible,.gengage-chat-find-similar-pill:focus-visible,.gengage-chat-favorite-btn:focus-visible,.gengage-chat-attach-btn:focus-visible,.gengage-chat-mic-btn:focus-visible,.gengage-chat-attachment-remove:focus-visible,.gengage-chat-kvkk-dismiss:focus-visible,.gengage-chat-choice-prompter-cta:focus-visible,.gengage-chat-choice-prompter-dismiss:focus-visible,.gengage-chat-categories-tab:focus-visible,.gengage-chat-categories-filter-tag:focus-visible,.gengage-chat-product-grid-view-more:focus-visible,.gengage-chat-product-details-share:focus-visible,.gengage-qty-btn:focus-visible,.gengage-qty-submit:focus-visible{outline:2px solid var(--gengage-primary-color, #3b82f6);outline-offset:2px}.gengage-chat-root--mobile .gengage-chat-choice-prompter{left:12px;right:12px;width:auto;max-width:none;bottom:12px;max-height:40vh;overflow-y:auto}.gengage-chat-root--mobile .gengage-chat-product-sort-btn,.gengage-chat-root--mobile .gengage-chat-comparison-toggle-btn{min-height:40px}.gengage-chat-root--mobile .gengage-chat-input-chip{min-height:40px;padding:8px 12px}.gengage-chat-root--mobile .gengage-chat-choice-prompter-dismiss{width:32px;height:32px}.gengage-chat-root--mobile .gengage-chat-panel-divider-toggle{min-height:44px}.gengage-chat-root--mobile .gengage-chat-product-details-atc-stepper .gengage-qty-btn{width:44px;height:44px}.gengage-chat-root--mobile .gengage-chat-product-details-atc-stepper .gengage-qty-submit,.gengage-chat-root--mobile .gengage-qty-stepper--compact .gengage-qty-submit{min-height:44px}.gengage-chat-root--mobile .gengage-qty-stepper--compact .gengage-qty-submit{min-width:44px;padding:0 10px}.gengage-chat-root--mobile .gengage-qty-stepper--compact .gengage-qty-btn{width:44px;height:44px;font-size:14px}.gengage-chat-root--mobile .gengage-qty-stepper--compact .gengage-qty-value{min-width:24px;font-size:13px}.gengage-chat-root--mobile .gengage-chat-product-card-cta,.gengage-chat-root--mobile .gengage-chat-choice-prompter-cta,.gengage-chat-root--mobile .gengage-chat-product-grid-view-more{min-height:44px;display:flex;align-items:center;justify-content:center}.gengage-chat-root--mobile .gengage-chat-panel-topbar-back,.gengage-chat-root--mobile .gengage-chat-panel-topbar-forward,.gengage-chat-root--mobile .gengage-chat-favorite-btn,.gengage-chat-root--mobile .gengage-chat-product-details-share{width:44px;height:44px}.gengage-skeleton{display:flex;gap:12px;padding:12px}.gengage-skeleton--message{flex-direction:column;gap:8px;padding:16px}.gengage-skeleton-card{flex:1;display:flex;flex-direction:column;gap:8px}.gengage-skeleton-img{height:120px;border-radius:8px}.gengage-skeleton-text{height:14px;border-radius:4px}.gengage-skeleton-price{height:14px;width:60%;border-radius:4px}.gengage-skeleton-line{height:12px;border-radius:4px}@media(prefers-reduced-motion:no-preference){.gengage-skeleton-card,.gengage-skeleton-line,.gengage-skeleton-img,.gengage-skeleton-text,.gengage-skeleton-price{background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:gengage-shimmer 1.5s infinite}@keyframes gengage-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}}@media(prefers-reduced-motion:reduce){.gengage-skeleton-card,.gengage-skeleton-line,.gengage-skeleton-img,.gengage-skeleton-text,.gengage-skeleton-price{background:#f0f0f0}}.gengage-chat-panel--has-scroll:after{content:"";position:sticky;bottom:0;display:block;height:40px;background:linear-gradient(transparent,var(--gengage-chat-panel-bg, #f5f5f5));pointer-events:none}@media(prefers-reduced-motion:no-preference){.gengage-chat-panel--transitioning{opacity:0;transition:opacity .15s ease}}', dn = z({
3367
+ role: He(["user", "assistant"]),
3337
3368
  content: v(),
3338
3369
  timestamp: se().optional()
3339
- }), dn = z({
3370
+ }), hn = z({
3340
3371
  sku: v(),
3341
3372
  name: v(),
3342
3373
  imageUrl: v().url().optional(),
@@ -3353,22 +3384,22 @@ const ln = ':host{all:initial;font-family:var(--gengage-font-family, -apple-syst
3353
3384
  action: z({
3354
3385
  title: v(),
3355
3386
  type: v(),
3356
- payload: ae().optional()
3387
+ payload: ne().optional()
3357
3388
  })
3358
3389
  })
3359
3390
  )
3360
- }), hn = z({}), un = z({
3391
+ }), un = z({}), mn = z({
3361
3392
  label: v().optional()
3362
- }), Fe = z({
3393
+ }), De = z({
3363
3394
  sku: v(),
3364
3395
  name: v(),
3365
3396
  price: v(),
3366
3397
  imageUrl: v().optional(),
3367
3398
  rating: se().optional(),
3368
3399
  reviewCount: se().optional()
3369
- }), mn = z({
3370
- recommended: Fe,
3371
- products: O(Fe),
3400
+ }), fn = z({
3401
+ recommended: De,
3402
+ products: O(De),
3372
3403
  attributes: O(
3373
3404
  z({
3374
3405
  label: v(),
@@ -3378,73 +3409,73 @@ const ln = ':host{all:initial;font-family:var(--gengage-font-family, -apple-syst
3378
3409
  highlights: O(v()),
3379
3410
  specialCases: O(v()).optional(),
3380
3411
  recommendedText: v().optional(),
3381
- winnerHits: pe(
3412
+ winnerHits: he(
3382
3413
  v(),
3383
3414
  z({
3384
3415
  positive: O(v()).optional(),
3385
3416
  negative: O(v()).optional()
3386
3417
  })
3387
3418
  ).optional(),
3388
- productActions: pe(
3419
+ productActions: he(
3389
3420
  v(),
3390
3421
  z({
3391
3422
  title: v(),
3392
3423
  type: v(),
3393
- payload: ae().optional()
3424
+ payload: ne().optional()
3394
3425
  })
3395
3426
  ).optional()
3396
- }), fn = z({
3397
- label: v(),
3398
- sentiment: De(["positive", "negative", "neutral"]).optional()
3399
3427
  }), bn = z({
3400
- product: pe(v(), ae()),
3428
+ label: v(),
3429
+ sentiment: He(["positive", "negative", "neutral"]).optional()
3430
+ }), vn = z({
3431
+ product: he(v(), ne()),
3401
3432
  role: v().optional(),
3402
3433
  reason: v().optional(),
3403
- labels: O(fn).optional(),
3434
+ labels: O(bn).optional(),
3404
3435
  expertQualityScore: se().optional(),
3405
3436
  reviewHighlight: v().optional(),
3406
3437
  action: z({
3407
3438
  title: v(),
3408
3439
  type: v(),
3409
- payload: ae().optional()
3440
+ payload: ne().optional()
3410
3441
  }).optional()
3411
- }), vn = z({
3412
- suggestions: O(bn)
3413
3442
  }), xn = z({
3443
+ suggestions: O(vn)
3444
+ }), _n = z({
3414
3445
  title: v().optional(),
3415
3446
  text: v().optional(),
3416
3447
  reviewCount: v().optional(),
3417
- action: z({ title: v(), type: v(), payload: ae().optional() })
3448
+ action: z({ title: v(), type: v(), payload: ne().optional() })
3418
3449
  }), wn = z({
3419
3450
  entries: O(
3420
3451
  z({
3421
3452
  name: v(),
3422
3453
  image: v().optional(),
3423
3454
  description: v().optional(),
3424
- action: z({ title: v(), type: v(), payload: ae().optional() })
3455
+ action: z({ title: v(), type: v(), payload: ne().optional() })
3425
3456
  })
3426
3457
  )
3427
- }), _n = z({
3458
+ }), yn = z({
3428
3459
  entries: O(
3429
3460
  z({
3430
3461
  shortName: v(),
3431
3462
  detailedMessage: v().optional(),
3432
3463
  whyDifferent: v().optional(),
3433
3464
  image: v().optional(),
3434
- action: z({ title: v(), type: v(), payload: ae().optional() })
3465
+ action: z({ title: v(), type: v(), payload: ne().optional() })
3435
3466
  })
3436
3467
  )
3437
- }), Qe = z({
3468
+ }), Je = z({
3438
3469
  title: v(),
3439
3470
  type: v(),
3440
- payload: ae().optional()
3441
- }), yn = z({
3471
+ payload: ne().optional()
3472
+ }), kn = z({
3442
3473
  name: v().optional(),
3443
3474
  value: v().optional(),
3444
3475
  variant_name: v().optional(),
3445
3476
  sku: v().optional(),
3446
- price: we([se(), v()]).optional()
3447
- }), kn = z({
3477
+ price: _e([se(), v()]).optional()
3478
+ }), Cn = z({
3448
3479
  product: z({
3449
3480
  sku: v().optional(),
3450
3481
  name: v().optional(),
@@ -3457,51 +3488,51 @@ const ln = ':host{all:initial;font-family:var(--gengage-font-family, -apple-syst
3457
3488
  price_async: fe().optional(),
3458
3489
  inStock: fe().optional(),
3459
3490
  promotions: O(v()).optional(),
3460
- variants: O(yn).optional(),
3491
+ variants: O(kn).optional(),
3461
3492
  url: v().optional(),
3462
3493
  cartCode: v().optional(),
3463
3494
  description: v().optional(),
3464
- specifications: we([pe(v(), v()), O(z({ key: v(), value: v() }))]).optional()
3495
+ specifications: _e([he(v(), v()), O(z({ key: v(), value: v() }))]).optional()
3465
3496
  }).optional(),
3466
- action: Qe.optional()
3467
- }), Cn = z({
3468
- endOfList: fe().optional()
3497
+ action: Je.optional()
3469
3498
  }), En = z({
3499
+ endOfList: fe().optional()
3500
+ }), Sn = z({
3470
3501
  review_class: v().optional(),
3471
3502
  review_text: v().optional(),
3472
- review_rating: we([v(), se()]).optional(),
3503
+ review_rating: _e([v(), se()]).optional(),
3473
3504
  review_tag: v().optional()
3474
- }), Sn = z({
3475
- reviews: O(En).optional()
3476
3505
  }), Tn = z({
3506
+ reviews: O(Sn).optional()
3507
+ }), Ln = z({
3477
3508
  productName: v().optional(),
3478
3509
  pros: O(v()).optional(),
3479
3510
  cons: O(v()).optional()
3480
- }), Ln = z({
3511
+ }), Pn = z({
3481
3512
  groups: O(
3482
3513
  z({
3483
3514
  groupName: v(),
3484
- products: O(pe(v(), ae())).optional()
3515
+ products: O(he(v(), ne())).optional()
3485
3516
  })
3486
3517
  ).optional(),
3487
3518
  filterTags: O(
3488
3519
  z({
3489
3520
  title: v(),
3490
- action: Qe.optional()
3521
+ action: Je.optional()
3491
3522
  })
3492
3523
  ).optional()
3493
- }), Pn = z({
3524
+ }), An = z({
3494
3525
  summary: v().optional(),
3495
3526
  products_discussed: O(v()).optional(),
3496
3527
  user_sentiment: v().optional()
3497
- }), Bn = {
3528
+ }), zn = {
3498
3529
  components: {
3499
3530
  MessageBubble: {
3500
- schema: gn,
3531
+ schema: dn,
3501
3532
  description: "A single chat message bubble for user or assistant turns."
3502
3533
  },
3503
3534
  ProductCard: {
3504
- schema: dn,
3535
+ schema: hn,
3505
3536
  description: "A product card rendered inline in the chat stream."
3506
3537
  },
3507
3538
  ActionButtons: {
@@ -3509,23 +3540,23 @@ const ln = ':host{all:initial;font-family:var(--gengage-font-family, -apple-syst
3509
3540
  description: "A horizontal row of quick-reply action buttons."
3510
3541
  },
3511
3542
  TypingIndicator: {
3512
- schema: hn,
3543
+ schema: un,
3513
3544
  description: "An animated indicator shown while the assistant is typing."
3514
3545
  },
3515
3546
  Divider: {
3516
- schema: un,
3547
+ schema: mn,
3517
3548
  description: "A horizontal rule with an optional label."
3518
3549
  },
3519
3550
  ComparisonTable: {
3520
- schema: mn,
3551
+ schema: fn,
3521
3552
  description: "A product comparison table with recommended pick, attribute rows, and highlights."
3522
3553
  },
3523
3554
  AITopPicks: {
3524
- schema: vn,
3555
+ schema: xn,
3525
3556
  description: "Rich AI-curated product suggestion cards with roles, sentiment labels, scores, and review quotes."
3526
3557
  },
3527
3558
  GroundingReviewCard: {
3528
- schema: xn,
3559
+ schema: _n,
3529
3560
  description: "A card showing review grounding data with review count and CTA."
3530
3561
  },
3531
3562
  AIGroupingCards: {
@@ -3533,49 +3564,49 @@ const ln = ':host{all:initial;font-family:var(--gengage-font-family, -apple-syst
3533
3564
  description: "Category grouping cards with images and labels for product discovery."
3534
3565
  },
3535
3566
  AISuggestedSearchCards: {
3536
- schema: _n,
3567
+ schema: yn,
3537
3568
  description: "Suggested search cards with images, descriptions, and differentiation."
3538
3569
  },
3539
3570
  ProductDetailsPanel: {
3540
- schema: kn,
3571
+ schema: Cn,
3541
3572
  description: "Full product detail view with images, specs, variants, and purchase actions."
3542
3573
  },
3543
3574
  ProductGrid: {
3544
- schema: Cn,
3575
+ schema: En,
3545
3576
  description: 'A scrollable grid of ProductCard children with optional "more" pagination.'
3546
3577
  },
3547
3578
  ReviewHighlights: {
3548
- schema: Sn,
3579
+ schema: Tn,
3549
3580
  description: "A list of highlighted customer reviews with sentiment and ratings."
3550
3581
  },
3551
3582
  ProsAndCons: {
3552
- schema: Tn,
3583
+ schema: Ln,
3553
3584
  description: "A pros and cons list for a product."
3554
3585
  },
3555
3586
  CategoriesContainer: {
3556
- schema: Ln,
3587
+ schema: Pn,
3557
3588
  description: "Tabbed product groups with optional filter tag buttons."
3558
3589
  },
3559
3590
  HandoffNotice: {
3560
- schema: Pn,
3591
+ schema: An,
3561
3592
  description: "A notice shown when the conversation is escalated to a human agent."
3562
3593
  }
3563
3594
  }
3564
3595
  };
3565
- function An(o) {
3596
+ function In(o) {
3566
3597
  return o.length > 120 ? !1 : /^[a-zA-Z0-9#(),.\s%/\-]+$/.test(o);
3567
3598
  }
3568
3599
  function me(o) {
3569
3600
  return typeof o == "object" && o !== null && typeof o.type == "string";
3570
3601
  }
3571
- const de = class de extends it {
3602
+ const de = class de extends ot {
3572
3603
  constructor() {
3573
3604
  super(...arguments), this._shadow = null, this._rootEl = null, this._launcher = null, this._drawer = null, this._bridge = null, this._drawerVisible = !1, this._messages = [], this._currentMessageId = 0, this._abortControllers = /* @__PURE__ */ new Set(), this._currentThreadId = null, this._lastThreadId = null, this._chatCreatedAt = "", this._lastBackendContext = null, this._productSort = { type: "related" }, this._comparisonSelectMode = !1, this._comparisonSelectedSkus = [], this._viewedProductSkus = /* @__PURE__ */ new Set(), this._thumbnailEntries = [], this._choicePrompterEl = null, this._openState = "full", this._mobileBreakpoint = 768, this._isMobileViewport = !1, this._pdpLaunched = !1, this._pdpPrimingInFlight = !1, this._queuedUserMessages = [], this._productContextUnavailableSku = null, this._i18n = ye, this._extendedModeManager = null, this._activeTypewriter = null, this._activeTtsHandle = null, this._activeRequestThreadId = null, this._skuToProductItem = {}, this._conversationMode = null, this._initComplete = !1, this._pendingActions = [], this._bridgeContext = null, this._cartQuantity = null, this._threadsWithFirstBot = /* @__PURE__ */ new Set(), this._panel = null, this._localPanelHistory = [], this._currentPanelSource = null, this._session = null, this._eventCallbacks = /* @__PURE__ */ new Map(), this._lastSentAction = null, this._consecutiveErrorCount = 0, this._lastErrorMessage = "";
3574
3605
  }
3575
3606
  async onInit(e) {
3576
3607
  this._i18n = this._resolveI18n(e), this._chatCreatedAt = (/* @__PURE__ */ new Date()).toISOString(), this._shadow = this.root.attachShadow({ mode: "open" });
3577
3608
  const t = document.createElement("style");
3578
- t.textContent = ln, this._shadow.appendChild(t);
3609
+ t.textContent = gn, this._shadow.appendChild(t);
3579
3610
  const a = document.createElement("div");
3580
3611
  a.className = "gengage-chat-root", this._rootEl = a, this._shadow.appendChild(a);
3581
3612
  const n = e.variant ?? "floating";
@@ -3584,13 +3615,13 @@ const de = class de extends it {
3584
3615
  onClick: () => this.open(),
3585
3616
  ariaLabel: this._i18n.openButton
3586
3617
  };
3587
- e.launcherImageUrl !== void 0 ? g.imageUrl = e.launcherImageUrl : e.launcherSvg !== void 0 && (g.svgMarkup = e.launcherSvg), e.hideMobileLauncher !== void 0 && (g.hideMobile = e.hideMobileLauncher), e.mobileBreakpoint !== void 0 && (g.mobileBreakpoint = e.mobileBreakpoint), e.launcherTooltip !== void 0 && (g.tooltip = e.launcherTooltip), this._launcher = ta(g), a.appendChild(this._launcher.container);
3618
+ e.launcherImageUrl !== void 0 ? g.imageUrl = e.launcherImageUrl : e.launcherSvg !== void 0 && (g.svgMarkup = e.launcherSvg), e.hideMobileLauncher !== void 0 && (g.hideMobile = e.hideMobileLauncher), e.mobileBreakpoint !== void 0 && (g.mobileBreakpoint = e.mobileBreakpoint), e.launcherTooltip !== void 0 && (g.tooltip = e.launcherTooltip), this._launcher = na(g), a.appendChild(this._launcher.container);
3588
3619
  }
3589
3620
  n === "overlay" && a.classList.add("gengage-chat--overlay");
3590
3621
  const i = document.createElement("div");
3591
- a.appendChild(i), this._drawer = new Zt(i, {
3622
+ a.appendChild(i), this._drawer = new ta(i, {
3592
3623
  i18n: this._i18n,
3593
- onSend: (g, h) => this._sendMessage(g, h),
3624
+ onSend: (g, p) => this._sendMessage(g, p),
3594
3625
  onClose: () => this.close(),
3595
3626
  onAttachment: (g) => this._handleAttachment(g),
3596
3627
  onPanelToggle: () => {
@@ -3609,7 +3640,7 @@ const de = class de extends it {
3609
3640
  e.headerCartUrl ? this._saveSessionAndOpenURL(e.headerCartUrl) : e.onCartClick?.();
3610
3641
  },
3611
3642
  onFavoritesClick: () => {
3612
- ot(), e.onFavoritesClick?.(), this._openFavoritesPanel();
3643
+ rt(), e.onFavoritesClick?.(), this._openFavoritesPanel();
3613
3644
  },
3614
3645
  getMobileState: () => this._openState ?? "full",
3615
3646
  getMobileViewport: () => this._isMobileViewport,
@@ -3623,12 +3654,12 @@ const de = class de extends it {
3623
3654
  voiceEnabled: e.voiceEnabled,
3624
3655
  voiceLang: e.locale ? `${e.locale.split("-")[0] ?? "tr"}-${(e.locale.split("-")[1] ?? e.locale.split("-")[0] ?? "TR").toUpperCase()}` : void 0,
3625
3656
  onNewChat: () => {
3626
- this._abortControllers.forEach((g) => g.abort()), this._abortControllers.clear(), this._activeTypewriter?.cancel(), this._activeTypewriter = null, this._activeTtsHandle?.stop(), this._activeTtsHandle = null, this._messages = [], this._drawer?.clearMessages(), this._currentThreadId = he(), this._lastThreadId = this._currentThreadId, this._choicePrompterEl?.remove(), this._choicePrompterEl = null, this._viewedProductSkus.clear(), this._drawer?.clearPanel(), this._consecutiveErrorCount = 0, this._lastErrorMessage = "", this._thumbnailEntries = [], this._drawer?.setThumbnails([]), this._panel.snapshots.clear(), this._panel.threads = [], this._showWelcomeIfNeeded();
3657
+ this._abortControllers.forEach((g) => g.abort()), this._abortControllers.clear(), this._activeTypewriter?.cancel(), this._activeTypewriter = null, this._activeTtsHandle?.stop(), this._activeTtsHandle = null, this._messages = [], this._drawer?.clearMessages(), this._currentThreadId = pe(), this._lastThreadId = this._currentThreadId, this._choicePrompterEl?.remove(), this._choicePrompterEl = null, this._viewedProductSkus.clear(), this._drawer?.clearPanel(), this._consecutiveErrorCount = 0, this._lastErrorMessage = "", this._thumbnailEntries = [], this._drawer?.setThumbnails([]), this._panel.snapshots.clear(), this._panel.threads = [], this._showWelcomeIfNeeded();
3627
3658
  }
3628
- }), this._extendedModeManager = new Ja({
3659
+ }), this._extendedModeManager = new en({
3629
3660
  onChange: (g) => this._panel?.notifyExtension(g),
3630
3661
  productDetailsInPanel: e.isDemoWebsite ?? !1
3631
- }), this._panel = new Za({
3662
+ }), this._panel = new tn({
3632
3663
  drawer: () => this._drawer,
3633
3664
  shadow: () => this._shadow,
3634
3665
  currentThreadId: () => this._currentThreadId,
@@ -3642,7 +3673,7 @@ const de = class de extends it {
3642
3673
  const s = sessionStorage.getItem("gengage_restore_session_id"), l = sessionStorage.getItem("gengage_restore_sku"), c = !!(s && l);
3643
3674
  c && (sessionStorage.removeItem("gengage_restore_session_id"), sessionStorage.removeItem("gengage_restore_sku"));
3644
3675
  try {
3645
- const g = new Xa();
3676
+ const g = new Ja();
3646
3677
  await g.open(), this._session = new ze(g), await this._restoreFromIndexedDB(c);
3647
3678
  } catch {
3648
3679
  this._session = new ze(null);
@@ -3652,28 +3683,28 @@ const de = class de extends it {
3652
3683
  if (window.addEventListener("resize", d, { passive: !0 }), this.addCleanup(() => window.removeEventListener("resize", d)), window.visualViewport) {
3653
3684
  const g = () => {
3654
3685
  if (!this._drawerVisible || !this._isMobileViewport) return;
3655
- const h = this._drawer?.getElement();
3656
- if (!h) return;
3657
- const w = window.innerHeight - (window.visualViewport?.height ?? window.innerHeight);
3658
- h.style.setProperty("--gengage-keyboard-offset", `${Math.max(0, w)}px`);
3686
+ const p = this._drawer?.getElement();
3687
+ if (!p) return;
3688
+ const _ = window.innerHeight - (window.visualViewport?.height ?? window.innerHeight);
3689
+ p.style.setProperty("--gengage-keyboard-offset", `${Math.max(0, _)}px`);
3659
3690
  };
3660
3691
  window.visualViewport.addEventListener("resize", g), this.addCleanup(() => window.visualViewport?.removeEventListener("resize", g));
3661
3692
  }
3662
3693
  n === "inline" && (this._drawerVisible = !0, this.isVisible = !0, this._applyOpenStateClasses());
3663
- const p = {
3694
+ const h = {
3664
3695
  namespace: "chat",
3665
3696
  onMessage: (g) => this._handleBridgeMessage(g)
3666
3697
  };
3667
- e.allowedOrigins !== void 0 && (p.allowedOrigins = e.allowedOrigins), this._bridge = new At(p), this._lastSku = this.config.pageContext?.sku, this._initComplete = !0;
3698
+ e.allowedOrigins !== void 0 && (h.allowedOrigins = e.allowedOrigins), this._bridge = new Nt(h), this._lastSku = this.config.pageContext?.sku, this._initComplete = !0;
3668
3699
  for (const g of this._pendingActions)
3669
3700
  this._sendAction(g.action, g.options);
3670
- this._pendingActions = [], Q("gengage:chat:ready", {}), rt("chat"), e.onReady?.();
3701
+ this._pendingActions = [], J("gengage:chat:ready", {}), st("chat"), e.onReady?.();
3671
3702
  }
3672
3703
  onUpdate(e) {
3673
3704
  e.sku !== void 0 && e.sku !== this._lastSku && (this._lastSku = e.sku, this._resetForNewPage());
3674
3705
  }
3675
3706
  onShow() {
3676
- this._showDrawer(), this.emit("open"), Q("gengage:chat:open", { state: this._openState }), st("chat"), this.config.onOpen?.(), this._showWelcomeIfNeeded(), !this._pdpLaunched && this.config.pageContext?.sku && (this._pdpLaunched = !0, this._pdpPrimingInFlight = !0, this._sendAction(
3707
+ this._showDrawer(), this.emit("open"), J("gengage:chat:open", { state: this._openState }), ct("chat"), this.config.onOpen?.(), this._showWelcomeIfNeeded(), !this._pdpLaunched && this.config.pageContext?.sku && (this._pdpLaunched = !0, this._pdpPrimingInFlight = !0, this._sendAction(
3677
3708
  {
3678
3709
  title: "",
3679
3710
  type: "launchSingleProduct",
@@ -3683,7 +3714,7 @@ const de = class de extends it {
3683
3714
  ));
3684
3715
  }
3685
3716
  onHide() {
3686
- (this.config.variant ?? "floating") === "floating" && (this.root.style.display = ""), this._hideDrawer(), this.emit("close"), Q("gengage:chat:close", {}), this.config.onClose?.();
3717
+ (this.config.variant ?? "floating") === "floating" && (this.root.style.display = ""), this._hideDrawer(), this.emit("close"), J("gengage:chat:close", {}), this.config.onClose?.();
3687
3718
  }
3688
3719
  onDestroy() {
3689
3720
  this._abortControllers.forEach((e) => e.abort()), this._abortControllers.clear(), this._activeTypewriter?.cancel(), this._activeTypewriter = null, this._activeTtsHandle?.stop(), this._activeTtsHandle = null, this._drawer?.destroy(), this._drawer = null, this._bridge?.destroy(), this._bridge = null, this._extendedModeManager = null, this._panel?.destroy(), this._panel = null, this._session?.close(), this._session = null, this._localPanelHistory = [], this._currentPanelSource = null, window.gengage && delete window.gengage.chat, this._shadow && (this._shadow.innerHTML = "", this._shadow = null), this._rootEl = null;
@@ -3781,7 +3812,7 @@ const de = class de extends it {
3781
3812
  break;
3782
3813
  case "bgColorChange": {
3783
3814
  const a = e.payload?.color;
3784
- typeof a == "string" && An(a) && this._shadow && this._shadow.host.style.setProperty("--gengage-chat-bg", a);
3815
+ typeof a == "string" && In(a) && this._shadow && this._shadow.host.style.setProperty("--gengage-chat-bg", a);
3785
3816
  break;
3786
3817
  }
3787
3818
  }
@@ -3816,7 +3847,7 @@ const de = class de extends it {
3816
3847
  _showWelcomeIfNeeded() {
3817
3848
  if (this._messages.length !== 0 || !this.config.welcomeMessage) return;
3818
3849
  const e = {
3819
- id: he(),
3850
+ id: pe(),
3820
3851
  role: "assistant",
3821
3852
  content: this.config.welcomeMessage,
3822
3853
  timestamp: Date.now(),
@@ -3850,10 +3881,10 @@ const de = class de extends it {
3850
3881
  this._rootEl.classList.toggle("gengage-chat-root--open", this._drawerVisible), this._rootEl.classList.toggle("gengage-chat-root--mobile-half", e), this._rootEl.classList.toggle("gengage-chat-root--mobile-full", t);
3851
3882
  }
3852
3883
  _handleAttachment(e) {
3853
- const t = Dt(e);
3884
+ const t = Ut(e);
3854
3885
  if (!t.ok) {
3855
3886
  const a = t.reason === "invalid_type" ? this._i18n.invalidFileType : this._i18n.fileTooLarge;
3856
- Q("gengage:global:error", {
3887
+ J("gengage:global:error", {
3857
3888
  message: a,
3858
3889
  source: "chat"
3859
3890
  });
@@ -3866,7 +3897,7 @@ const de = class de extends it {
3866
3897
  this._queuedUserMessages.push(t !== void 0 ? { text: e, attachment: t } : { text: e });
3867
3898
  return;
3868
3899
  }
3869
- ct(), this._messages.some((i) => i.role === "user") || lt();
3900
+ lt(), this._messages.some((i) => i.role === "user") || gt();
3870
3901
  const n = t !== void 0 ? { title: e, type: "findSimilar", payload: e ? { text: e } : {} } : { title: e, type: "user_message", payload: e };
3871
3902
  t !== void 0 ? this._sendAction(n, { attachment: t }) : this._sendAction(n);
3872
3903
  }
@@ -3883,23 +3914,23 @@ const de = class de extends it {
3883
3914
  return;
3884
3915
  }
3885
3916
  if (this._choicePrompterEl?.remove(), this._choicePrompterEl = null, !t?.preservePanel && this._comparisonSelectMode && (this._comparisonSelectMode = !1, this._comparisonSelectedSkus = []), t?.preservePanel || (this._localPanelHistory = []), this._currentThreadId && this._lastThreadId && this._lastThreadId > this._currentThreadId) {
3886
- const u = this._currentThreadId, m = this._messages.filter((_) => _.threadId !== void 0 && _.threadId > u);
3887
- this._messages = this._messages.filter((_) => !_.threadId || _.threadId <= u);
3888
- for (const _ of m)
3889
- this._shadow?.querySelector(`[data-message-id="${CSS.escape(_.id)}"]`)?.remove(), this._panel.snapshots.delete(_.id), this._panel.snapshotTypes.delete(_.id);
3890
- this._shadow?.querySelectorAll("[data-thread-id]")?.forEach((_) => {
3891
- _ instanceof HTMLElement && _.dataset.threadId && _.dataset.threadId > u && _.remove();
3917
+ const u = this._currentThreadId, m = this._messages.filter((w) => w.threadId !== void 0 && w.threadId > u);
3918
+ this._messages = this._messages.filter((w) => !w.threadId || w.threadId <= u);
3919
+ for (const w of m)
3920
+ this._shadow?.querySelector(`[data-message-id="${CSS.escape(w.id)}"]`)?.remove(), this._panel.snapshots.delete(w.id), this._panel.snapshotTypes.delete(w.id);
3921
+ this._shadow?.querySelectorAll("[data-thread-id]")?.forEach((w) => {
3922
+ w instanceof HTMLElement && w.dataset.threadId && w.dataset.threadId > u && w.remove();
3892
3923
  });
3893
3924
  }
3894
3925
  this._drawer?.setPills([]), this._drawer?.clearInputAreaChips(), this._bridge?.send("isResponding", !0);
3895
- const a = he();
3926
+ const a = pe();
3896
3927
  this._currentThreadId = a, this._lastThreadId = a, this._panel && e.type !== "launchSingleProduct" && (this._panel.lastActionType = e.type);
3897
3928
  const n = t?.preservePanel === !0, i = e.type === "launchSingleProduct" && t?.silent === !0 && t?.isPdpPrime === !0;
3898
3929
  if (n || (this._activeRequestThreadId = a), !t?.silent) {
3899
3930
  const u = typeof e.payload == "string" ? e.payload : e.title, m = this._messages.length > 0 ? this._messages[this._messages.length - 1] : void 0;
3900
3931
  if (!(m !== void 0 && m.role === "user" && m.content === u)) {
3901
- const _ = this._createMessage("user", u);
3902
- _.threadId = a, t?.attachment !== void 0 && (_.attachment = t.attachment), this._drawer?.addMessage(_), this._messages.push(_);
3932
+ const w = this._createMessage("user", u);
3933
+ w.threadId = a, t?.attachment !== void 0 && (w.attachment = t.attachment), this._drawer?.addMessage(w), this._messages.push(w);
3903
3934
  }
3904
3935
  }
3905
3936
  if (!t?.silent && this._hasUnavailableProductContext() && (e.type === "user_message" || e.type === "inputText")) {
@@ -3922,19 +3953,19 @@ const de = class de extends it {
3922
3953
  }
3923
3954
  };
3924
3955
  this._drawer?.showTypingIndicator();
3925
- let p = "";
3956
+ let h = "";
3926
3957
  const g = this._createMessage("assistant", "");
3927
3958
  g.threadId = a, g.status = "streaming", t?.silent && (g.silent = !0), this._messages.push(g), t?.preservePanel || (this._abortControllers.forEach((u) => u.abort()), this._abortControllers.clear());
3928
- const h = {
3959
+ const p = {
3929
3960
  middlewareUrl: this.config.middlewareUrl,
3930
3961
  ...this.config.accountId ? { accountId: this.config.accountId } : {}
3931
3962
  };
3932
- t?.attachment !== void 0 && (h.attachment = t.attachment);
3963
+ t?.attachment !== void 0 && (p.attachment = t.attachment);
3933
3964
  const T = this._getVisibleMessages().filter((u) => u !== g && (u.content || u.role === "assistant")).slice(-50).map((u) => ({
3934
3965
  role: u.role === "user" ? "user" : "model",
3935
3966
  content: u.content ?? ""
3936
3967
  })), S = {
3937
- outputLanguage: cn(this.config.locale),
3968
+ outputLanguage: ln(this.config.locale),
3938
3969
  parentUrl: window.location.href,
3939
3970
  windowWidth: String(window.innerWidth),
3940
3971
  windowHeight: String(window.innerHeight),
@@ -3951,7 +3982,7 @@ const de = class de extends it {
3951
3982
  isMobile: this._isMobileViewport
3952
3983
  };
3953
3984
  this.config.session?.viewId !== void 0 && (S.viewId = this.config.session.viewId);
3954
- const k = Ht(e, {
3985
+ const k = qt(e, {
3955
3986
  pageContext: this.config.pageContext,
3956
3987
  backendContext: this._lastBackendContext,
3957
3988
  isMobile: this._isMobileViewport
@@ -3974,61 +4005,61 @@ const de = class de extends it {
3974
4005
  };
3975
4006
  this.config.session?.userId !== void 0 && (y.user_id = this.config.session.userId), this.config.session?.viewId !== void 0 && (y.view_id = this.config.session.viewId), k.payload !== void 0 && (y.payload = k.payload), this.config.pageContext?.sku !== void 0 && (y.sku = this.config.pageContext.sku), this.config.pageContext?.pageType !== void 0 && (y.page_type = this.config.pageContext.pageType);
3976
4007
  const A = crypto.randomUUID(), f = Date.now();
3977
- let C = 0, M = !1, H = !1;
4008
+ let C = 0, B = !1, U = !1;
3978
4009
  this.track(
3979
- gt(this.analyticsContext(), {
4010
+ dt(this.analyticsContext(), {
3980
4011
  endpoint: "process_action",
3981
4012
  request_id: A,
3982
4013
  widget: "chat"
3983
4014
  })
3984
4015
  );
3985
4016
  let x = null;
3986
- if (x = Ot(
4017
+ if (x = jt(
3987
4018
  y,
3988
4019
  {
3989
4020
  onTextChunk: (u, m, E) => {
3990
- if (!n && a !== this._activeRequestThreadId || (p += u, this._drawer?.removeTypingIndicator(), E?.skuToProductItem && (this._skuToProductItem = { ...this._skuToProductItem, ...E.skuToProductItem }), E?.conversationMode && (this._conversationMode = E.conversationMode), this.track(
3991
- Lt(this.analyticsContext(), {
4021
+ if (!n && a !== this._activeRequestThreadId || (h += u, this._drawer?.removeTypingIndicator(), E?.skuToProductItem && (this._skuToProductItem = { ...this._skuToProductItem, ...E.skuToProductItem }), E?.conversationMode && (this._conversationMode = E.conversationMode), this.track(
4022
+ At(this.analyticsContext(), {
3992
4023
  request_id: A,
3993
4024
  chunk_index: C++,
3994
4025
  widget: "chat"
3995
4026
  })
3996
4027
  ), !this._drawer)) return;
3997
- let _ = p;
3998
- if (m && ke(_)) {
3999
- const B = this.config.accountId;
4000
- if (!Re(B)) {
4001
- const R = rn(_);
4002
- R && this._drawer?.showKvkkBanner(R, () => {
4003
- this._drawer?.hideKvkkBanner();
4004
- }), nn(B);
4028
+ let w = h;
4029
+ if (m && ke(w)) {
4030
+ const N = this.config.accountId;
4031
+ if (!Re(N)) {
4032
+ const R = sn(w);
4033
+ R ? this._drawer?.showKvkkBanner(R, () => {
4034
+ this._drawer?.hideKvkkBanner(), Fe(N);
4035
+ }) : Fe(N);
4005
4036
  }
4006
- _ = on(_);
4037
+ w = rn(w);
4007
4038
  }
4008
4039
  const L = this._shadow?.querySelector(
4009
4040
  `[data-message-id="${g.id}"] .gengage-chat-bubble-text`
4010
4041
  );
4011
- if (L ? L.innerHTML = Z(_) : (g.content = _, g.role === "assistant" && g.threadId && !this._threadsWithFirstBot.has(g.threadId) && (this._threadsWithFirstBot.add(g.threadId), this._drawer.markFirstBotMessage(g.id)), this._drawer.addMessage(g)), m) {
4012
- g.content = _, g.status = "done", Pe();
4013
- const B = this._shadow?.querySelector(
4042
+ if (L ? L.innerHTML = ee(w) : (g.content = w, g.role === "assistant" && g.threadId && !this._threadsWithFirstBot.has(g.threadId) && (this._threadsWithFirstBot.add(g.threadId), this._drawer.markFirstBotMessage(g.id)), this._drawer.addMessage(g)), m) {
4043
+ g.content = w, g.status = "done", Pe();
4044
+ const N = this._shadow?.querySelector(
4014
4045
  `[data-message-id="${g.id}"] .gengage-chat-bubble-text`
4015
4046
  );
4016
- if (B) {
4047
+ if (N) {
4017
4048
  this._activeTypewriter?.cancel();
4018
4049
  const R = E?.productMentions;
4019
- this._activeTypewriter = Ua({
4020
- container: B,
4021
- html: Z(_),
4050
+ this._activeTypewriter = Oa({
4051
+ container: N,
4052
+ html: ee(w),
4022
4053
  onTick: () => this._drawer?.scrollToBottomIfNeeded(),
4023
4054
  onComplete: () => {
4024
- this._activeTypewriter = null, R && R.length > 0 && B && qa({
4025
- container: B,
4055
+ this._activeTypewriter = null, R && R.length > 0 && N && Va({
4056
+ container: N,
4026
4057
  mentions: R,
4027
- onProductClick: (F) => {
4058
+ onProductClick: (D) => {
4028
4059
  this._sendAction({
4029
- title: R.find((N) => N.sku === F)?.short_name ?? F,
4060
+ title: R.find((M) => M.sku === D)?.short_name ?? D,
4030
4061
  type: "launchSingleProduct",
4031
- payload: { sku: F }
4062
+ payload: { sku: D }
4032
4063
  });
4033
4064
  }
4034
4065
  });
@@ -4039,81 +4070,81 @@ const de = class de extends it {
4039
4070
  },
4040
4071
  onUISpec: (u, m, E) => {
4041
4072
  if (!n && a !== this._activeRequestThreadId || m !== "chat") return;
4042
- const _ = u.elements[u.root], L = _?.type ?? "unknown";
4073
+ const w = u.elements[u.root], L = w?.type ?? "unknown";
4043
4074
  this.track(
4044
- Et(this.analyticsContext(), {
4075
+ Tt(this.analyticsContext(), {
4045
4076
  request_id: A,
4046
4077
  chunk_index: C,
4047
4078
  component_type: L,
4048
4079
  widget: "chat"
4049
4080
  })
4050
4081
  );
4051
- const B = this._buildRenderContext();
4052
- if (B.isStreaming = !0, L === "ComparisonTable") {
4053
- const N = _?.props?.products;
4054
- St(Array.isArray(N) ? N.length : 0);
4082
+ const N = this._buildRenderContext();
4083
+ if (N.isStreaming = !0, L === "ComparisonTable") {
4084
+ const M = w?.props?.products;
4085
+ Lt(Array.isArray(M) ? M.length : 0);
4055
4086
  }
4056
4087
  if (L === "ProductGrid") {
4057
- const N = _?.children?.length ?? 0;
4058
- Tt(void 0, N);
4088
+ const M = w?.children?.length ?? 0;
4089
+ Pt(void 0, M);
4059
4090
  }
4060
- const R = E === "panel" && this._panel ? this._panel.toPanelSpec(u) : u, F = !g.silent && (E !== "panel" || L === "ProductCard") && L !== "ActionButtons";
4091
+ const R = E === "panel" && this._panel ? this._panel.toPanelSpec(u) : u, D = !g.silent && (E !== "panel" || L === "ProductCard") && L !== "ActionButtons";
4061
4092
  if (E === "panel" && this._panel) {
4062
- const N = !H;
4063
- H = !0;
4064
- const D = en({
4093
+ const M = !U;
4094
+ U = !0;
4095
+ const H = an({
4065
4096
  componentType: L,
4066
- similarsAppend: _?.props?.similarsAppend === !0,
4097
+ similarsAppend: w?.props?.similarsAppend === !0,
4067
4098
  currentPanelType: this._panel.currentType,
4068
4099
  hasPanelContent: this._drawer?.hasPanelContent() ?? !1,
4069
4100
  isPanelLoading: this._drawer?.isPanelLoading() ?? !1,
4070
- isFirstPanelContentInStream: N
4101
+ isFirstPanelContentInStream: M
4071
4102
  });
4072
- D === "appendSimilars" ? this._appendSimilarsToPanel(R, B) : D === "append" ? this._drawer?.appendPanelContent(this._renderUISpec(R, B)) : (this._comparisonSelectMode = !1, this._comparisonSelectedSkus = [], this._drawer?.setPanelContent(this._renderUISpec(R, B)), this._currentPanelSource = { kind: "spec", spec: R }, this._panel.currentType = L), L === "ProductDetailsPanel" && e.type === "launchSingleProduct" && this._clearUnavailableProductContext(), g.threadId && !this._panel.threads.includes(g.threadId) && this._panel.threads.push(g.threadId);
4073
- const P = this._panel.currentType ?? L, I = _?.props?.panelTitle;
4103
+ H === "appendSimilars" ? this._appendSimilarsToPanel(R, N) : H === "append" ? (this._drawer?.appendPanelContent(this._renderUISpec(R, N)), this._comparisonSelectMode && this._refreshComparisonUI()) : (this._comparisonSelectMode = !1, this._comparisonSelectedSkus = [], this._drawer?.setPanelContent(this._renderUISpec(R, N)), this._currentPanelSource = { kind: "spec", spec: R }, this._panel.currentType = L), L === "ProductDetailsPanel" && e.type === "launchSingleProduct" && this._clearUnavailableProductContext(), g.threadId && !this._panel.threads.includes(g.threadId) && this._panel.threads.push(g.threadId);
4104
+ const P = this._panel.currentType ?? L, I = w?.props?.panelTitle;
4074
4105
  this._panel.updateTopBar(P, I), this._panel.updateExtendedMode(L);
4075
4106
  }
4076
4107
  if (L === "ProductDetailsPanel" && !g.silent && E === "panel") {
4077
- const N = _?.props?.product;
4078
- if (N) {
4079
- const D = {
4108
+ const M = w?.props?.product;
4109
+ if (M) {
4110
+ const H = {
4080
4111
  root: "root",
4081
4112
  elements: {
4082
4113
  root: {
4083
4114
  type: "ProductSummaryCard",
4084
- props: { product: N }
4115
+ props: { product: M }
4085
4116
  }
4086
4117
  }
4087
4118
  }, P = this._shadow?.querySelector(".gengage-chat-messages");
4088
4119
  if (P) {
4089
- const I = this._renderUISpec(D, B);
4120
+ const I = this._renderUISpec(H, N);
4090
4121
  g.threadId && (I.dataset.threadId = g.threadId), P.appendChild(I), I.scrollIntoView({ behavior: "auto", block: "end" });
4091
4122
  }
4092
4123
  }
4093
4124
  }
4094
- if (F) {
4095
- const N = this._shadow?.querySelector(".gengage-chat-messages");
4096
- if (N) {
4097
- const D = this._renderUISpec(u, B);
4098
- g.threadId && (D.dataset.threadId = g.threadId), N.appendChild(D), D.scrollIntoView({ behavior: "auto", block: "end" });
4125
+ if (D) {
4126
+ const M = this._shadow?.querySelector(".gengage-chat-messages");
4127
+ if (M) {
4128
+ const H = this._renderUISpec(u, N);
4129
+ g.threadId && (H.dataset.threadId = g.threadId), M.appendChild(H), H.scrollIntoView({ behavior: "auto", block: "end" });
4099
4130
  }
4100
4131
  }
4101
4132
  if ((L === "ProductGrid" || L === "ProductCard") && g.threadId) {
4102
- const N = _?.children ?? [], D = L === "ProductGrid" ? N.map((P) => u.elements[P]?.props?.product).filter(Boolean) : [_?.props?.product].filter(Boolean);
4103
- for (const P of D) {
4133
+ const M = w?.children ?? [], H = L === "ProductGrid" ? M.map((P) => u.elements[P]?.props?.product).filter(Boolean) : [w?.props?.product].filter(Boolean);
4134
+ for (const P of H) {
4104
4135
  const I = P.sku, q = P.imageUrl;
4105
4136
  I && q && this._thumbnailEntries.push({ sku: I, imageUrl: q, threadId: g.threadId }), I && this._viewedProductSkus.add(I);
4106
4137
  }
4107
4138
  this._drawer?.setThumbnails(this._thumbnailEntries);
4108
4139
  }
4109
4140
  if (L === "ProductGrid" || L === "ProductDetailsPanel") {
4110
- const D = (L === "ProductGrid" ? (_?.children ?? []).map((P) => u.elements[P]?.props?.product).filter(Boolean) : [
4111
- _?.props?.product ?? _?.props
4141
+ const H = (L === "ProductGrid" ? (w?.children ?? []).map((P) => u.elements[P]?.props?.product).filter(Boolean) : [
4142
+ w?.props?.product ?? w?.props
4112
4143
  ].filter(Boolean)).map((P) => P.imageUrl).filter((P) => typeof P == "string").slice(0, 5);
4113
- D.length > 0 && this._bridge?.send("previewImages", { images: D });
4144
+ H.length > 0 && this._bridge?.send("previewImages", { images: H });
4114
4145
  }
4115
- if (L === "ProductGrid" && E === "panel" && this._viewedProductSkus.size >= 2 && !this._comparisonSelectMode && !$a() && !Ya(this._currentThreadId ?? "")) {
4116
- this._choicePrompterEl?.remove(), this._shadow?.querySelectorAll(".gengage-chat-choice-prompter").forEach((D) => D.remove()), this._choicePrompterEl = Wa({
4146
+ if (L === "ProductGrid" && E === "panel" && this._viewedProductSkus.size >= 2 && !this._comparisonSelectMode && !Ga() && !Ka(this._currentThreadId ?? "")) {
4147
+ this._choicePrompterEl?.remove(), this._shadow?.querySelectorAll(".gengage-chat-choice-prompter").forEach((H) => H.remove()), this._choicePrompterEl = Ya({
4117
4148
  heading: this._i18n.choicePrompterHeading,
4118
4149
  suggestion: this._i18n.choicePrompterSuggestion,
4119
4150
  ctaLabel: this._i18n.choicePrompterCta,
@@ -4126,11 +4157,11 @@ const de = class de extends it {
4126
4157
  this._choicePrompterEl = null;
4127
4158
  }
4128
4159
  });
4129
- const N = this._shadow?.querySelector(".gengage-chat-panel-float");
4130
- if (N) {
4131
- if (N.appendChild(this._choicePrompterEl), this._isMobileViewport && window.visualViewport) {
4132
- const D = this._choicePrompterEl, P = () => {
4133
- window.visualViewport.height / window.innerHeight < 0.75 && (D.remove(), this._choicePrompterEl === D && (this._choicePrompterEl = null), window.visualViewport.removeEventListener("resize", P));
4160
+ const M = this._shadow?.querySelector(".gengage-chat-panel-float");
4161
+ if (M) {
4162
+ if (M.appendChild(this._choicePrompterEl), this._isMobileViewport && window.visualViewport) {
4163
+ const H = this._choicePrompterEl, P = () => {
4164
+ window.visualViewport.height / window.innerHeight < 0.75 && (H.remove(), this._choicePrompterEl === H && (this._choicePrompterEl = null), window.visualViewport.removeEventListener("resize", P));
4134
4165
  };
4135
4166
  window.visualViewport.addEventListener("resize", P);
4136
4167
  }
@@ -4138,20 +4169,20 @@ const de = class de extends it {
4138
4169
  this._choicePrompterEl = null;
4139
4170
  }
4140
4171
  if (L === "ActionButtons") {
4141
- const N = _?.props?.buttons;
4142
- if (N && N.length > 0) {
4143
- const D = [], P = [];
4144
- for (const I of N)
4145
- if (ja(I)) {
4172
+ const M = w?.props?.buttons;
4173
+ if (M && M.length > 0) {
4174
+ const H = [], P = [];
4175
+ for (const I of M)
4176
+ if ($a(I)) {
4146
4177
  const q = {
4147
4178
  label: I.label,
4148
4179
  action: I.action
4149
4180
  };
4150
- I.icon && (q.icon = I.icon), D.push(q);
4181
+ I.icon && (q.icon = I.icon), H.push(q);
4151
4182
  } else
4152
4183
  P.push(I);
4153
- D.length > 0 && this._drawer?.setInputAreaChips(
4154
- D.map((I) => ({
4184
+ H.length > 0 && this._drawer?.setInputAreaChips(
4185
+ H.map((I) => ({
4155
4186
  label: I.label,
4156
4187
  onAction: () => this._sendAction(I.action),
4157
4188
  ...I.icon ? { icon: I.icon } : {}
@@ -4172,19 +4203,19 @@ const de = class de extends it {
4172
4203
  onAction: (u) => {
4173
4204
  if (!(!n && a !== this._activeRequestThreadId) && u.type === "action") {
4174
4205
  const m = {};
4175
- this.config.actionHandling?.unknownActionPolicy !== void 0 && (m.unknownActionPolicy = this.config.actionHandling.unknownActionPolicy), this.config.actionHandling?.allowScriptCall !== void 0 && (m.allowScriptCall = this.config.actionHandling.allowScriptCall), Mt(
4206
+ this.config.actionHandling?.unknownActionPolicy !== void 0 && (m.unknownActionPolicy = this.config.actionHandling.unknownActionPolicy), this.config.actionHandling?.allowScriptCall !== void 0 && (m.allowScriptCall = this.config.actionHandling.allowScriptCall), zt(
4176
4207
  u,
4177
4208
  {
4178
4209
  openChat: () => this.open(),
4179
4210
  navigate: (E) => {
4180
- $(E.url) && (this._bridge?.send("navigate", E), E.newTab ? window.open(E.url, "_blank", "noopener,noreferrer") : window.location.href = E.url);
4211
+ W(E.url) && (this._bridge?.send("navigate", E), E.newTab ? window.open(E.url, "_blank", "noopener,noreferrer") : window.location.href = E.url);
4181
4212
  },
4182
4213
  saveSession: (E) => this.saveSession(E.sessionId, E.sku),
4183
4214
  addToCart: (E) => {
4184
- Q("gengage:similar:add-to-cart", E);
4215
+ J("gengage:similar:add-to-cart", E);
4185
4216
  },
4186
4217
  scriptCall: (E) => {
4187
- Q("gengage:chat:script-call", E), this.config.onScriptCall?.(E);
4218
+ J("gengage:chat:script-call", E), this.config.onScriptCall?.(E);
4188
4219
  }
4189
4220
  },
4190
4221
  m
@@ -4194,7 +4225,7 @@ const de = class de extends it {
4194
4225
  onMetadata: (u) => {
4195
4226
  if (!(!n && a !== this._activeRequestThreadId) && u.type === "metadata" && u.meta) {
4196
4227
  if ((u.meta.panel !== void 0 || u.meta.messages !== void 0 || u.meta.message_id !== void 0) && (this._lastBackendContext = u.meta), u.meta.panelLoading) {
4197
- M = !0, H = !1, c();
4228
+ B = !0, U = !1, c();
4198
4229
  const E = typeof u.meta.panelPendingType == "string" ? u.meta.panelPendingType : void 0;
4199
4230
  this._panel && (this._panel.currentType = null), this._drawer?.showPanelLoading(E), E && this._panel?.updateTopBarForLoading(E);
4200
4231
  }
@@ -4203,25 +4234,25 @@ const de = class de extends it {
4203
4234
  detail: { payload: u.meta.voice },
4204
4235
  bubbles: !1,
4205
4236
  cancelable: !0
4206
- }), _ = window.dispatchEvent(E);
4207
- if (kt(), _) {
4237
+ }), w = window.dispatchEvent(E);
4238
+ if (Et(), w) {
4208
4239
  const L = u.meta.voice;
4209
- L.audio_base64 && (this._activeTtsHandle?.stop(), this._activeTtsHandle = na(
4240
+ L.audio_base64 && (this._activeTtsHandle?.stop(), this._activeTtsHandle = oa(
4210
4241
  L.audio_base64,
4211
4242
  L.content_type ?? "audio/ogg"
4212
4243
  ));
4213
4244
  }
4214
4245
  }
4215
- (u.meta.redirectTarget || u.meta.redirect) && Q("gengage:chat:redirect", {
4246
+ (u.meta.redirectTarget || u.meta.redirect) && J("gengage:chat:redirect", {
4216
4247
  target: u.meta.redirectTarget ?? null,
4217
4248
  payload: u.meta.redirect ?? null
4218
- }), u.meta.analyzeAnimation && (M = !0, H = !1, c(), this._panel && (this._panel.currentType = null), this._drawer?.showPanelLoading(), this._panel?.updateTopBarForLoading("productDetails")), u.meta.loading && typeof u.meta.loadingText == "string" && (this._drawer?.addThinkingStep(u.meta.loadingText), this._bridge?.send("loadingMessage", { text: u.meta.loadingText })), u.meta.visitorDataResponse && this._bridge?.send("engagingMessage", u.meta.visitorDataResponse), u.meta.formType && this._bridge?.send("glovOtokoc", {
4249
+ }), u.meta.analyzeAnimation && (B = !0, U = !1, c(), this._panel && (this._panel.currentType = null), this._drawer?.showPanelLoading(), this._panel?.updateTopBarForLoading("productDetails")), u.meta.loading && typeof u.meta.loadingText == "string" && (this._drawer?.addThinkingStep(u.meta.loadingText), this._bridge?.send("loadingMessage", { text: u.meta.loadingText })), u.meta.visitorDataResponse && this._bridge?.send("engagingMessage", u.meta.visitorDataResponse), u.meta.formType && this._bridge?.send("glovOtokoc", {
4219
4250
  type: u.meta.formType,
4220
4251
  data: u.meta.formPayload
4221
- }), u.meta.launcherContent && this._bridge?.send("launcherContent", u.meta.launcherContent), Q("gengage:chat:metadata", { payload: u.meta });
4252
+ }), u.meta.launcherContent && this._bridge?.send("launcherContent", u.meta.launcherContent), J("gengage:chat:metadata", { payload: u.meta });
4222
4253
  const m = u.meta;
4223
4254
  typeof m.prompt_tokens == "number" && typeof m.completion_tokens == "number" && this.track(
4224
- Ct(this.analyticsContext(), {
4255
+ St(this.analyticsContext(), {
4225
4256
  model: u.model ?? "unknown",
4226
4257
  prompt_tokens: m.prompt_tokens,
4227
4258
  completion_tokens: m.completion_tokens,
@@ -4233,15 +4264,15 @@ const de = class de extends it {
4233
4264
  onError: (u) => {
4234
4265
  if (x && this._abortControllers.delete(x), !n && a !== this._activeRequestThreadId) return;
4235
4266
  this._bridge?.send("isResponding", !1), this._bridge?.send("loadingMessage", { text: null }), this._drawer?.removeTypingIndicator();
4236
- const m = H;
4237
- if (M && !H && d(), M = !1, H = !1, !(g.silent || g.content != null && g.content.length > 0 || p.length > 0 || m))
4267
+ const m = U;
4268
+ if (B && !U && d(), B = !1, U = !1, !(g.silent || g.content != null && g.content.length > 0 || h.length > 0 || m))
4238
4269
  if (i || this._hasUnavailableProductContext()) {
4239
- const _ = this._i18n.productNotFoundMessage;
4240
- g.content = _, g.status = "done", this._ensureAssistantMessageRendered(g), this._drawer?.updateBotMessage(g.id, _), this._markUnavailableProductContext();
4270
+ const w = this._i18n.productNotFoundMessage;
4271
+ g.content = w, g.status = "done", this._ensureAssistantMessageRendered(g), this._drawer?.updateBotMessage(g.id, w), this._markUnavailableProductContext();
4241
4272
  } else {
4242
4273
  this.emit("error", u);
4243
- const _ = u.message;
4244
- _ === this._lastErrorMessage ? this._consecutiveErrorCount++ : (this._consecutiveErrorCount = 1, this._lastErrorMessage = _), this._consecutiveErrorCount >= 2 ? this._drawer?.showErrorWithRecovery(this._i18n.accountInactiveMessage, {
4274
+ const w = u.message;
4275
+ w === this._lastErrorMessage ? this._consecutiveErrorCount++ : (this._consecutiveErrorCount = 1, this._lastErrorMessage = w), this._consecutiveErrorCount >= 2 ? this._drawer?.showErrorWithRecovery(this._i18n.accountInactiveMessage, {
4245
4276
  onRetry: () => {
4246
4277
  this._lastSentAction && this._sendAction(this._lastSentAction.action, this._lastSentAction.options);
4247
4278
  },
@@ -4258,7 +4289,7 @@ const de = class de extends it {
4258
4289
  });
4259
4290
  }
4260
4291
  i && (this._pdpPrimingInFlight = !1, this._flushQueuedUserMessages()), g.status === "streaming" && (g.status = "error"), this.track(
4261
- yt(this.analyticsContext(), {
4292
+ Ct(this.analyticsContext(), {
4262
4293
  request_id: A,
4263
4294
  error_code: "STREAM_ERROR",
4264
4295
  error_message: u.message,
@@ -4268,7 +4299,7 @@ const de = class de extends it {
4268
4299
  },
4269
4300
  onDone: () => {
4270
4301
  if (x && this._abortControllers.delete(x), !n && a !== this._activeRequestThreadId) return;
4271
- if (this._activeRequestThreadId = null, this._consecutiveErrorCount = 0, this._lastErrorMessage = "", this._bridge?.send("isResponding", !1), this._bridge?.send("loadingMessage", { text: null }), this._drawer?.removeTypingIndicator(), M && !H && d(), M = !1, H = !1, i && !p && !H) {
4302
+ if (this._activeRequestThreadId = null, this._consecutiveErrorCount = 0, this._lastErrorMessage = "", this._bridge?.send("isResponding", !1), this._bridge?.send("loadingMessage", { text: null }), this._drawer?.removeTypingIndicator(), B && !U && d(), B = !1, U = !1, i && !h && !U) {
4272
4303
  const E = this._i18n.productNotFoundMessage;
4273
4304
  g.content = E, this._ensureAssistantMessageRendered(g), this._drawer?.updateBotMessage(g.id, E), this._markUnavailableProductContext();
4274
4305
  }
@@ -4283,20 +4314,20 @@ const de = class de extends it {
4283
4314
  return m.kind === "favorites" ? this._buildFavoritesPageEl() : this._renderUISpec(m.spec, E);
4284
4315
  } : void 0
4285
4316
  ), this._panel?.attachClickHandler(g.id), this.track(
4286
- xt(this.analyticsContext(), {
4317
+ wt(this.analyticsContext(), {
4287
4318
  request_id: A,
4288
4319
  latency_ms: Date.now() - f,
4289
4320
  chunk_count: C,
4290
4321
  widget: "chat"
4291
4322
  })
4292
4323
  ), this.track(
4293
- wt(this.analyticsContext(), {
4324
+ yt(this.analyticsContext(), {
4294
4325
  meter_key: "chat_request",
4295
4326
  quantity: 1,
4296
4327
  unit: "request"
4297
4328
  })
4298
4329
  ), this.track(
4299
- _t(this.analyticsContext(), {
4330
+ kt(this.analyticsContext(), {
4300
4331
  message_count: this._messages.length,
4301
4332
  history_ref: this.config.session?.sessionId ?? "",
4302
4333
  redaction_level: "none"
@@ -4305,7 +4336,7 @@ const de = class de extends it {
4305
4336
  });
4306
4337
  }
4307
4338
  },
4308
- h
4339
+ p
4309
4340
  ), this._abortControllers.add(x), !t?.silent && !n) {
4310
4341
  const u = x;
4311
4342
  this._drawer?.showStopButton(() => {
@@ -4336,6 +4367,8 @@ const de = class de extends it {
4336
4367
  }
4337
4368
  /** Rewind the conversation to the given thread. */
4338
4369
  _rollbackToThread(e) {
4370
+ if (this._panel && this._panel.threads.length > 0 && !this._panel.threads.includes(e) && !this._messages.some((i) => i.threadId === e))
4371
+ return;
4339
4372
  this._currentThreadId = e, this._extendedModeManager?.setHiddenByUser(!1);
4340
4373
  for (const i of this._messages) {
4341
4374
  const r = this._shadow?.querySelector(`[data-message-id="${CSS.escape(i.id)}"]`);
@@ -4344,14 +4377,19 @@ const de = class de extends it {
4344
4377
  this._shadow?.querySelectorAll("[data-thread-id]").forEach((i) => {
4345
4378
  i instanceof HTMLElement && i.dataset.threadId && i.dataset.threadId > e ? i.classList.add("gengage-chat-bubble--hidden") : i instanceof HTMLElement && i.classList.remove("gengage-chat-bubble--hidden");
4346
4379
  });
4347
- const t = this._messages.find((i) => i.role === "assistant" && i.threadId === e);
4348
- t && this._panel?.restoreForMessage(t.id) || (this._drawer?.clearPanel(), this._currentPanelSource = null);
4380
+ const t = this._messages.find((i) => i.role === "assistant" && i.threadId === e), a = t ? this._panel?.restoreForMessage(t.id) : !1;
4381
+ a || (this._drawer?.clearPanel(), this._currentPanelSource = null), a && t && (this._currentPanelSource = null);
4349
4382
  const n = this._panel.currentType ?? "";
4350
- this._panel?.updateTopBar(n), this._drawer?.setPills([]), this._session?.db && this.config.session?.sessionId && this._session?.db.loadContext(this.config.session.sessionId, e).then((i) => {
4351
- i && (this._lastBackendContext = i.context);
4352
- }).catch(() => {
4353
- }), this._session?.db && this.config.session?.sessionId && this._session?.db.deleteContextsAfterThread(this.config.session.sessionId, e).catch(() => {
4354
- });
4383
+ if (this._panel?.updateTopBar(n), this._drawer?.setPills([]), this._session?.db && this.config.session?.sessionId) {
4384
+ const i = this.config.session.sessionId;
4385
+ (async () => {
4386
+ try {
4387
+ const r = await this._session?.db?.loadContext(i, e);
4388
+ r && (this._lastBackendContext = r.context), await this._session?.db?.deleteContextsAfterThread(i, e);
4389
+ } catch {
4390
+ }
4391
+ })();
4392
+ }
4355
4393
  }
4356
4394
  // ---------------------------------------------------------------------------
4357
4395
  // IndexedDB persistence (delegates to SessionPersistence)
@@ -4419,10 +4457,10 @@ const de = class de extends it {
4419
4457
  if (!i || i.messages.length === 0) return;
4420
4458
  const r = this.config.pageContext?.sku;
4421
4459
  if (r && i.sku && i.sku !== r) return;
4422
- if (this._pdpLaunched = !0, this._drawer?.lockScrollForRestore(), this._currentThreadId = i.currentThreadId, this._lastThreadId = i.lastThreadId, this._chatCreatedAt = i.createdAt, i.panelThreads && (this._panel.threads = i.panelThreads), i.thumbnailEntries && (this._thumbnailEntries = i.thumbnailEntries, this._drawer?.setThumbnails(this._thumbnailEntries)), i.panelSnapshotHtml)
4460
+ if (this._pdpLaunched = !0, this._drawer?.lockScrollForRestore(), this._currentThreadId = i.currentThreadId, this._lastThreadId = i.lastThreadId, this._currentThreadId && this._lastThreadId && this._currentThreadId > this._lastThreadId && (this._currentThreadId = this._lastThreadId), this._chatCreatedAt = i.createdAt, i.panelThreads && (this._panel.threads = i.panelThreads), i.thumbnailEntries && (this._thumbnailEntries = i.thumbnailEntries, this._drawer?.setThumbnails(this._thumbnailEntries)), i.panelSnapshotHtml)
4423
4461
  for (const [l, c] of Object.entries(i.panelSnapshotHtml)) {
4424
4462
  const d = document.createElement("div");
4425
- d.innerHTML = Z(c), this._panel.snapshots.set(l, d);
4463
+ d.innerHTML = ee(c), this._panel.snapshots.set(l, d);
4426
4464
  }
4427
4465
  let s = 0;
4428
4466
  for (const l of i.messages) {
@@ -4436,8 +4474,8 @@ const de = class de extends it {
4436
4474
  c.role === "assistant" && c.threadId && !this._threadsWithFirstBot.has(c.threadId) && (this._threadsWithFirstBot.add(c.threadId), this._drawer?.markFirstBotMessage(c.id)), this._drawer?.addMessage(c);
4437
4475
  const d = parseInt(l.id.replace("msg-", ""), 10);
4438
4476
  if (!isNaN(d) && d > s && (s = d), c.role === "assistant" && c.threadId) {
4439
- const p = await this._loadPayload(c.threadId, c.id);
4440
- p && (c.uiSpec = p, this._restoreInlineUISpec(c), this._panel?.attachClickHandler(c.id), delete c.uiSpec);
4477
+ const h = await this._loadPayload(c.threadId, c.id);
4478
+ h && (c.uiSpec = h, this._restoreInlineUISpec(c), this._panel?.attachClickHandler(c.id), delete c.uiSpec);
4441
4479
  }
4442
4480
  }
4443
4481
  if (s > this._currentMessageId && (this._currentMessageId = s), this._currentThreadId) {
@@ -4463,8 +4501,8 @@ const de = class de extends it {
4463
4501
  if (c?.threadId) {
4464
4502
  const d = await this._loadPayload(c.threadId, c.id);
4465
4503
  if (d) {
4466
- const p = d.elements[d.root];
4467
- p && this._panel?.updateTopBar(p.type);
4504
+ const h = d.elements[d.root];
4505
+ h && this._panel?.updateTopBar(h.type);
4468
4506
  }
4469
4507
  }
4470
4508
  }
@@ -4498,7 +4536,7 @@ const de = class de extends it {
4498
4536
  this._panel?.navigateBack();
4499
4537
  }
4500
4538
  _toggleComparisonSku(e) {
4501
- e === "" ? (this._comparisonSelectMode = !this._comparisonSelectMode, this._comparisonSelectMode || (this._comparisonSelectedSkus = [], dt())) : this._comparisonSelectedSkus.indexOf(e) >= 0 ? this._comparisonSelectedSkus = this._comparisonSelectedSkus.filter((a) => a !== e) : (this._comparisonSelectedSkus = [...this._comparisonSelectedSkus, e], pt(e)), this._refreshComparisonUI();
4539
+ e === "" ? (this._comparisonSelectMode = !this._comparisonSelectMode, this._comparisonSelectMode || (this._comparisonSelectedSkus = [], ht())) : this._comparisonSelectedSkus.indexOf(e) >= 0 ? this._comparisonSelectedSkus = this._comparisonSelectedSkus.filter((a) => a !== e) : (this._comparisonSelectedSkus = [...this._comparisonSelectedSkus, e], pt(e)), this._refreshComparisonUI();
4502
4540
  }
4503
4541
  /**
4504
4542
  * Refresh the panel DOM to reflect the current comparison state without
@@ -4517,8 +4555,8 @@ const de = class de extends it {
4517
4555
  const r = a.querySelectorAll(".gengage-chat-product-card[data-sku]");
4518
4556
  for (const s of r) {
4519
4557
  if (s.parentElement?.classList.contains("gengage-chat-comparison-select-wrapper")) {
4520
- const p = s.parentElement.querySelector(".gengage-chat-comparison-checkbox");
4521
- p && (p.checked = this._comparisonSelectedSkus.includes(s.dataset.sku));
4558
+ const h = s.parentElement.querySelector(".gengage-chat-comparison-checkbox");
4559
+ h && (h.checked = this._comparisonSelectedSkus.includes(s.dataset.sku));
4522
4560
  continue;
4523
4561
  }
4524
4562
  const l = s.dataset.sku, c = document.createElement("div");
@@ -4526,8 +4564,8 @@ const de = class de extends it {
4526
4564
  const d = document.createElement("input");
4527
4565
  d.type = "checkbox", d.className = "gengage-chat-comparison-checkbox", d.checked = this._comparisonSelectedSkus.includes(l), d.addEventListener("change", () => {
4528
4566
  this._toggleComparisonSku(l);
4529
- }), s.parentNode.insertBefore(c, s), c.appendChild(d), c.appendChild(s), c.style.cursor = "pointer", c.addEventListener("click", (p) => {
4530
- p.target !== d && (d.checked = !d.checked, this._toggleComparisonSku(l));
4567
+ }), s.parentNode.insertBefore(c, s), c.appendChild(d), c.appendChild(s), c.style.cursor = "pointer", c.addEventListener("click", (h) => {
4568
+ h.target !== d && (d.checked = !d.checked, this._toggleComparisonSku(l));
4531
4569
  });
4532
4570
  }
4533
4571
  } else {
@@ -4562,16 +4600,16 @@ const de = class de extends it {
4562
4600
  _buildRenderContext() {
4563
4601
  const e = {
4564
4602
  onAction: (t) => {
4565
- if (bt(t.title, t.type), t.type === "findSimilar") {
4603
+ if (xt(t.title, t.type), t.type === "findSimilar") {
4566
4604
  const n = typeof t.payload == "object" && t.payload !== null && "sku" in t.payload ? String(t.payload.sku) : "";
4567
- vt(n);
4605
+ _t(n);
4568
4606
  }
4569
4607
  t.type === "getComparisonTable" && Le(this._comparisonSelectedSkus);
4570
4608
  const a = t.type === "addToCart" || t.type === "like";
4571
4609
  this._sendAction(t, a ? { preservePanel: !0 } : void 0);
4572
4610
  },
4573
4611
  onProductClick: (t) => {
4574
- ft(t.sku), this.config.isDemoWebsite !== !0 && this._isSameOriginUrl(t.url) ? (Q("gengage:similar:product-click", {
4612
+ vt(t.sku), this.config.isDemoWebsite !== !0 && this._isSameOriginUrl(t.url) ? (J("gengage:similar:product-click", {
4575
4613
  sku: t.sku,
4576
4614
  url: t.url,
4577
4615
  sessionId: this.config.session?.sessionId ?? null
@@ -4582,12 +4620,22 @@ const de = class de extends it {
4582
4620
  });
4583
4621
  },
4584
4622
  onAddToCart: (t) => {
4585
- mt(t.sku, t.quantity);
4623
+ ft(t.sku, t.quantity);
4586
4624
  const a = {
4587
4625
  ...t,
4588
4626
  sessionId: this.config.session?.sessionId ?? null
4589
4627
  };
4590
- Q("gengage:chat:add-to-cart", a), this._bridge?.send("addToCart", t), this._runEventCallbacks("gengage-cart-add", a), this._sendAction(
4628
+ J("gengage:chat:add-to-cart", a), this._bridge?.send("addToCart", t), this._runEventCallbacks("gengage-cart-add", a), this.track(
4629
+ bt(this.analyticsContext(), {
4630
+ attribution_source: "chat",
4631
+ attribution_action_id: crypto.randomUUID(),
4632
+ cart_value: 0,
4633
+ // Host page should enrich via event listener
4634
+ currency: "TRY",
4635
+ line_items: t.quantity,
4636
+ sku: t.sku
4637
+ })
4638
+ ), this._sendAction(
4591
4639
  {
4592
4640
  title: this._i18n.addToCartButton ?? "Add to Cart",
4593
4641
  type: "addToCart",
@@ -4627,7 +4675,7 @@ const de = class de extends it {
4627
4675
  onFavoriteToggle: (t, a) => {
4628
4676
  const n = this._session?.favoritedSkus.has(t) ?? !1;
4629
4677
  if (this._toggleFavorite(t, a), !n) {
4630
- ut(t);
4678
+ mt(t);
4631
4679
  const i = a.name ?? t;
4632
4680
  this._sendAction(
4633
4681
  {
@@ -4749,14 +4797,14 @@ const de = class de extends it {
4749
4797
  };
4750
4798
  }
4751
4799
  _resolveI18n(e) {
4752
- return { ...Wt(e.locale), ...e.i18n };
4800
+ return { ...Yt(e.locale), ...e.i18n };
4753
4801
  }
4754
4802
  _resolveUISpecRegistry() {
4755
- const e = Ea();
4756
- return ht(e, this.config.renderer?.registry);
4803
+ const e = Ta();
4804
+ return ut(e, this.config.renderer?.registry);
4757
4805
  }
4758
4806
  _renderUISpec(e, t) {
4759
- const a = this._resolveUISpecRegistry(), n = this.config.renderer?.unknownRenderer ?? Ge, i = (l, c) => Sa(l, c, a, n), r = this.config.renderer?.renderUISpec;
4807
+ const a = this._resolveUISpecRegistry(), n = this.config.renderer?.unknownRenderer ?? Ke, i = (l, c) => La(l, c, a, n), r = this.config.renderer?.renderUISpec;
4760
4808
  return r ? r(e, t, {
4761
4809
  registry: a,
4762
4810
  unknownRenderer: n,
@@ -4766,18 +4814,18 @@ const de = class de extends it {
4766
4814
  };
4767
4815
  de._MAX_PANEL_HISTORY = 10;
4768
4816
  let xe = de;
4769
- function zn() {
4817
+ function Rn() {
4770
4818
  return new xe();
4771
4819
  }
4772
4820
  export {
4773
4821
  xe as G,
4774
- Yt as V,
4775
- Ea as a,
4776
- Sa as b,
4777
- zn as c,
4778
- Ge as d,
4779
- Bn as e,
4780
- $t as i,
4781
- Mt as r
4822
+ Kt as V,
4823
+ Ta as a,
4824
+ La as b,
4825
+ Rn as c,
4826
+ Ke as d,
4827
+ zn as e,
4828
+ Gt as i,
4829
+ zt as r
4782
4830
  };
4783
- //# sourceMappingURL=index-Cdmhc_35.js.map
4831
+ //# sourceMappingURL=index-D5UPIXIA.js.map