@akropolys/kiku 1.7.16 → 1.7.20
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.
- package/README.md +32 -28
- package/dist/index.d.mts +111 -41
- package/dist/index.d.ts +111 -41
- package/dist/index.js +46 -3312
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +46 -3279
- package/dist/index.mjs.map +1 -1
- package/dist/kiku.iife.global.js +107 -0
- package/dist/kiku.iife.global.js.map +1 -0
- package/dist/kiku.iife.js +107 -0
- package/dist/kiku.iife.js.map +1 -0
- package/dist/shopify.global.js +107 -0
- package/dist/shopify.global.js.map +1 -0
- package/dist/shopify.js +107 -0
- package/dist/shopify.js.map +1 -0
- package/dist/styles.css +1 -4047
- package/dist/styles.css.map +1 -1
- package/package.json +67 -68
- package/shopify/README.md +71 -0
- package/shopify/blocks/kiku-button.liquid +121 -0
- package/shopify/snippets/kiku-embed.liquid +45 -0
package/dist/index.mjs
CHANGED
|
@@ -1,3281 +1,48 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
|
|
3
|
-
// src/components/SearchBar.tsx
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return twMerge(clsx(inputs));
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
clear();
|
|
45
|
-
setOpen(false);
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
setOpen(true);
|
|
49
|
-
search(query, limit);
|
|
50
|
-
}, [query]);
|
|
51
|
-
useEffect(() => {
|
|
52
|
-
const h = (e) => {
|
|
53
|
-
if (wrap.current && !wrap.current.contains(e.target)) setOpen(false);
|
|
54
|
-
};
|
|
55
|
-
document.addEventListener("mousedown", h);
|
|
56
|
-
return () => document.removeEventListener("mousedown", h);
|
|
57
|
-
}, []);
|
|
58
|
-
const handleSelect = (r) => {
|
|
59
|
-
if (query.trim()) {
|
|
60
|
-
client.api.searchVector(query, 1, void 0, true).catch(() => {
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
ignoreNextQueryChange.current = true;
|
|
64
|
-
setOpen(false);
|
|
65
|
-
setQuery(r.entity.title ?? r.entity.name ?? "");
|
|
66
|
-
onSelect?.(r);
|
|
67
|
-
};
|
|
68
|
-
const handleCommitSearch = () => {
|
|
69
|
-
if (!query.trim()) return;
|
|
70
|
-
client.api.searchVector(query, 1, void 0, true).catch(() => {
|
|
71
|
-
});
|
|
72
|
-
if (results.length > 0) {
|
|
73
|
-
handleSelect(results[0]);
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
const showDrop = open && query.trim().length > 0;
|
|
77
|
-
const customStyles = {
|
|
78
|
-
...theme?.primaryColor && { "--hsk-primary": theme.primaryColor },
|
|
79
|
-
...theme?.backgroundColor && { "--hsk-bg": theme.backgroundColor },
|
|
80
|
-
...theme?.textColor && { "--hsk-text": theme.textColor },
|
|
81
|
-
...theme?.fontFamily && { "--hsk-font": theme.fontFamily },
|
|
82
|
-
...theme?.borderRadius && { "--hsk-border-radius": theme.borderRadius }
|
|
83
|
-
};
|
|
84
|
-
return /* @__PURE__ */ jsxs("div", { className: cn("hsk-sb-wrap", classNames.root, className), ref: wrap, style: customStyles, children: [
|
|
85
|
-
/* @__PURE__ */ jsx("span", { className: "hsk-sb-icon", children: /* @__PURE__ */ jsx(SearchIcon, {}) }),
|
|
86
|
-
/* @__PURE__ */ jsx(
|
|
87
|
-
"input",
|
|
88
|
-
{
|
|
89
|
-
className: cn("hsk-sb-input", classNames.input, inputClassName),
|
|
90
|
-
type: "text",
|
|
91
|
-
value: query,
|
|
92
|
-
placeholder,
|
|
93
|
-
onChange: (e) => setQuery(e.target.value),
|
|
94
|
-
onFocus: () => results.length > 0 && query.trim() && setOpen(true),
|
|
95
|
-
onKeyDown: (e) => {
|
|
96
|
-
if (e.key === "Enter") {
|
|
97
|
-
handleCommitSearch();
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
autoComplete: "off",
|
|
101
|
-
spellCheck: false
|
|
102
|
-
}
|
|
103
|
-
),
|
|
104
|
-
showDrop && /* @__PURE__ */ jsxs("div", { className: cn("hsk-sb-drop", classNames.dropdown, dropdownClassName), style: { position: "absolute" }, children: [
|
|
105
|
-
loading && /* @__PURE__ */ jsx("div", { className: "hsk-sb-loading-bar" }),
|
|
106
|
-
loading && results.length === 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
107
|
-
/* @__PURE__ */ jsxs("div", { className: "hsk-sb-skeleton-row", children: [
|
|
108
|
-
/* @__PURE__ */ jsx("span", { className: "hsk-sb-skeleton-icon" }),
|
|
109
|
-
/* @__PURE__ */ jsxs("div", { className: "hsk-sb-row-body", children: [
|
|
110
|
-
/* @__PURE__ */ jsx("div", { className: "hsk-sb-skeleton-text1" }),
|
|
111
|
-
/* @__PURE__ */ jsx("div", { className: "hsk-sb-skeleton-text2" })
|
|
112
|
-
] })
|
|
113
|
-
] }),
|
|
114
|
-
/* @__PURE__ */ jsxs("div", { className: "hsk-sb-skeleton-row", children: [
|
|
115
|
-
/* @__PURE__ */ jsx("span", { className: "hsk-sb-skeleton-icon" }),
|
|
116
|
-
/* @__PURE__ */ jsxs("div", { className: "hsk-sb-row-body", children: [
|
|
117
|
-
/* @__PURE__ */ jsx("div", { className: "hsk-sb-skeleton-text1", style: { width: "45%" } }),
|
|
118
|
-
/* @__PURE__ */ jsx("div", { className: "hsk-sb-skeleton-text2", style: { width: "25%" } })
|
|
119
|
-
] })
|
|
120
|
-
] })
|
|
121
|
-
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
122
|
-
results.length === 0 && !loading && /* @__PURE__ */ jsxs("div", { className: "hsk-sb-empty", children: [
|
|
123
|
-
"No results for \u201C",
|
|
124
|
-
query,
|
|
125
|
-
"\u201D"
|
|
126
|
-
] }),
|
|
127
|
-
results.map((r, i) => {
|
|
128
|
-
if (renderResult) {
|
|
129
|
-
return /* @__PURE__ */ jsx(
|
|
130
|
-
"div",
|
|
131
|
-
{
|
|
132
|
-
onClick: () => handleSelect(r),
|
|
133
|
-
className: "hsk-sb-fade",
|
|
134
|
-
style: { animationDelay: `${i * 18}ms` },
|
|
135
|
-
children: renderResult(r)
|
|
136
|
-
},
|
|
137
|
-
r.id
|
|
138
|
-
);
|
|
139
|
-
}
|
|
140
|
-
const thumb = r.entity.image ?? r.entity.thumbnail ?? r.entity.images?.[0];
|
|
141
|
-
return /* @__PURE__ */ jsxs(
|
|
142
|
-
"div",
|
|
143
|
-
{
|
|
144
|
-
className: cn("hsk-sb-row hsk-sb-fade", classNames.row),
|
|
145
|
-
style: { animationDelay: `${i * 18}ms` },
|
|
146
|
-
onClick: () => handleSelect(r),
|
|
147
|
-
children: [
|
|
148
|
-
/* @__PURE__ */ jsx("span", { className: "hsk-sb-row-thumb", children: thumb ? /* @__PURE__ */ jsx(
|
|
149
|
-
"img",
|
|
150
|
-
{
|
|
151
|
-
src: thumb,
|
|
152
|
-
alt: "",
|
|
153
|
-
loading: "lazy",
|
|
154
|
-
onError: (e) => {
|
|
155
|
-
e.currentTarget.style.display = "none";
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
) : /* @__PURE__ */ jsx(SearchIcon, {}) }),
|
|
159
|
-
/* @__PURE__ */ jsxs("div", { className: "hsk-sb-row-body", children: [
|
|
160
|
-
/* @__PURE__ */ jsx("div", { className: "hsk-sb-row-title", children: r.entity.title ?? r.entity.name }),
|
|
161
|
-
(r.entity.category || r.entity.brand) && /* @__PURE__ */ jsx("div", { className: "hsk-sb-row-sub", children: r.entity.category ?? r.entity.brand })
|
|
162
|
-
] })
|
|
163
|
-
]
|
|
164
|
-
},
|
|
165
|
-
r.id
|
|
166
|
-
);
|
|
167
|
-
})
|
|
168
|
-
] })
|
|
169
|
-
] })
|
|
170
|
-
] });
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// src/components/ChatWidget.tsx
|
|
174
|
-
import { useState as useState4, useRef as useRef4, useEffect as useEffect2 } from "react";
|
|
175
|
-
import { useKiku } from "@akropolys/sdk";
|
|
176
|
-
|
|
177
|
-
// src/utils/markdown.tsx
|
|
178
|
-
import { Fragment as Fragment2, jsx as jsx2 } from "react/jsx-runtime";
|
|
179
|
-
var parseInline = (text, keyPrefix) => {
|
|
180
|
-
const tokenRegex = /(!\[[^\]]*\]\([^)]+\)|\[[^\]]+\]\([^)]+\)|\*\*[^*]+\*\*|`[^`]+`)/g;
|
|
181
|
-
const parts = text.split(tokenRegex);
|
|
182
|
-
return parts.map((part, index) => {
|
|
183
|
-
if (!part) return null;
|
|
184
|
-
const key = `${keyPrefix}-inline-${index}`;
|
|
185
|
-
if (part.startsWith("`") && part.endsWith("`")) {
|
|
186
|
-
return /* @__PURE__ */ jsx2("code", { className: "hsk-markdown-code", children: part.slice(1, -1) }, key);
|
|
187
|
-
}
|
|
188
|
-
if (part.startsWith("**") && part.endsWith("**")) {
|
|
189
|
-
return /* @__PURE__ */ jsx2("strong", { children: parseInline(part.slice(2, -2), key) }, key);
|
|
190
|
-
}
|
|
191
|
-
const imageMatch = part.match(/^!\[([^\]]*)\]\(([^)]+)\)$/);
|
|
192
|
-
if (imageMatch) {
|
|
193
|
-
const alt = imageMatch[1];
|
|
194
|
-
const url = imageMatch[2];
|
|
195
|
-
const isSafeUrl = /^(https?|data:image):/i.test(url);
|
|
196
|
-
if (isSafeUrl) {
|
|
197
|
-
return /* @__PURE__ */ jsx2(
|
|
198
|
-
"img",
|
|
199
|
-
{
|
|
200
|
-
src: url,
|
|
201
|
-
alt: alt || "Product image",
|
|
202
|
-
className: "hsk-markdown-img",
|
|
203
|
-
loading: "lazy",
|
|
204
|
-
onError: (e) => {
|
|
205
|
-
e.target.style.display = "none";
|
|
206
|
-
}
|
|
207
|
-
},
|
|
208
|
-
key
|
|
209
|
-
);
|
|
210
|
-
}
|
|
211
|
-
return null;
|
|
212
|
-
}
|
|
213
|
-
const linkMatch = part.match(/^\[([^\]]+)\]\(([^)]+)\)$/);
|
|
214
|
-
if (linkMatch) {
|
|
215
|
-
const url = linkMatch[2];
|
|
216
|
-
const isSafeUrl = /^(https?|mailto|tel):/i.test(url) || url.startsWith("/");
|
|
217
|
-
if (isSafeUrl) {
|
|
218
|
-
return /* @__PURE__ */ jsx2("a", { href: url, target: "_blank", rel: "noopener noreferrer", className: "hsk-markdown-link", children: parseInline(linkMatch[1], key) }, key);
|
|
219
|
-
}
|
|
220
|
-
return /* @__PURE__ */ jsx2("span", { children: parseInline(linkMatch[1], key) }, key);
|
|
221
|
-
}
|
|
222
|
-
return part;
|
|
223
|
-
});
|
|
224
|
-
};
|
|
225
|
-
function isTableLine(line, inTable) {
|
|
226
|
-
const t = line.trim();
|
|
227
|
-
if (inTable) return t.includes("|");
|
|
228
|
-
return t.startsWith("|");
|
|
229
|
-
}
|
|
230
|
-
function splitTableCells(rowLine) {
|
|
231
|
-
let t = rowLine.trim();
|
|
232
|
-
if (t.startsWith("|")) t = t.slice(1);
|
|
233
|
-
if (t.endsWith("|")) t = t.slice(0, -1);
|
|
234
|
-
return t.split("|").map((c) => c.trim());
|
|
235
|
-
}
|
|
236
|
-
function renderMarkdown(content, streaming = false) {
|
|
237
|
-
const lines = content.split("\n");
|
|
238
|
-
if (streaming && lines.length > 0) {
|
|
239
|
-
const last = lines[lines.length - 1];
|
|
240
|
-
if (last.trim().startsWith("|") && !last.trim().endsWith("|")) {
|
|
241
|
-
lines.pop();
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
const elements = [];
|
|
245
|
-
let i = 0;
|
|
246
|
-
while (i < lines.length) {
|
|
247
|
-
const line = lines[i];
|
|
248
|
-
const key = `md-line-${i}`;
|
|
249
|
-
if (!line.trim()) {
|
|
250
|
-
i++;
|
|
251
|
-
continue;
|
|
252
|
-
}
|
|
253
|
-
const standaloneImageMatch = line.trim().match(/^!\[([^\]]*)\]\(([^)]+)\)$/);
|
|
254
|
-
if (standaloneImageMatch) {
|
|
255
|
-
const alt = standaloneImageMatch[1];
|
|
256
|
-
const url = standaloneImageMatch[2];
|
|
257
|
-
const isSafeUrl = /^(https?|data:image):/i.test(url);
|
|
258
|
-
if (isSafeUrl) {
|
|
259
|
-
elements.push(
|
|
260
|
-
/* @__PURE__ */ jsx2("div", { className: "hsk-markdown-img-block", children: /* @__PURE__ */ jsx2(
|
|
261
|
-
"img",
|
|
262
|
-
{
|
|
263
|
-
src: url,
|
|
264
|
-
alt: alt || "Product image",
|
|
265
|
-
className: "hsk-markdown-img",
|
|
266
|
-
loading: "lazy",
|
|
267
|
-
onError: (e) => {
|
|
268
|
-
e.target.style.display = "none";
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
) }, key)
|
|
272
|
-
);
|
|
273
|
-
}
|
|
274
|
-
i++;
|
|
275
|
-
continue;
|
|
276
|
-
}
|
|
277
|
-
const headerMatch = line.match(/^(#{1,3})\s+(.*)/);
|
|
278
|
-
if (headerMatch) {
|
|
279
|
-
const level = headerMatch[1].length;
|
|
280
|
-
const Tag = `h${level + 3}`;
|
|
281
|
-
elements.push(/* @__PURE__ */ jsx2(Tag, { className: `hsk-markdown-h${level}`, children: parseInline(headerMatch[2], key) }, key));
|
|
282
|
-
i++;
|
|
283
|
-
continue;
|
|
284
|
-
}
|
|
285
|
-
if (line.match(/^[-*]\s+/)) {
|
|
286
|
-
const listItems = [];
|
|
287
|
-
while (i < lines.length && lines[i].match(/^[-*]\s+/)) {
|
|
288
|
-
const itemText = lines[i].replace(/^[-*]\s+/, "");
|
|
289
|
-
listItems.push(/* @__PURE__ */ jsx2("li", { children: parseInline(itemText, `li-${i}`) }, `li-${i}`));
|
|
290
|
-
i++;
|
|
291
|
-
}
|
|
292
|
-
elements.push(/* @__PURE__ */ jsx2("ul", { className: "hsk-markdown-list", children: listItems }, `ul-${key}`));
|
|
293
|
-
continue;
|
|
294
|
-
}
|
|
295
|
-
if (line.match(/^\d+[.)]\s+/)) {
|
|
296
|
-
const listItems = [];
|
|
297
|
-
while (i < lines.length && lines[i].match(/^\d+[.)]\s+/)) {
|
|
298
|
-
const itemText = lines[i].replace(/^\d+[.)]\s+/, "");
|
|
299
|
-
listItems.push(/* @__PURE__ */ jsx2("li", { children: parseInline(itemText, `li-${i}`) }, `li-${i}`));
|
|
300
|
-
i++;
|
|
301
|
-
}
|
|
302
|
-
elements.push(/* @__PURE__ */ jsx2("ol", { className: "hsk-markdown-list", children: listItems }, `ol-${key}`));
|
|
303
|
-
continue;
|
|
304
|
-
}
|
|
305
|
-
if (isTableLine(line, false)) {
|
|
306
|
-
const tableRows = [];
|
|
307
|
-
let isHeader = true;
|
|
308
|
-
while (i < lines.length && isTableLine(lines[i], true)) {
|
|
309
|
-
const rowLine = lines[i].trim();
|
|
310
|
-
if (rowLine.match(/^\|?[-:| ]+\|?$/) && rowLine.includes("-")) {
|
|
311
|
-
i++;
|
|
312
|
-
isHeader = false;
|
|
313
|
-
continue;
|
|
314
|
-
}
|
|
315
|
-
const cells = splitTableCells(rowLine);
|
|
316
|
-
const Tag = isHeader ? "th" : "td";
|
|
317
|
-
tableRows.push(
|
|
318
|
-
/* @__PURE__ */ jsx2("tr", { children: cells.map((cell, cIdx) => /* @__PURE__ */ jsx2(Tag, { children: parseInline(cell, `td-${i}-${cIdx}`) }, `td-${i}-${cIdx}`)) }, `tr-${i}`)
|
|
319
|
-
);
|
|
320
|
-
i++;
|
|
321
|
-
}
|
|
322
|
-
elements.push(
|
|
323
|
-
/* @__PURE__ */ jsx2("div", { className: "hsk-table-wrapper", children: /* @__PURE__ */ jsx2("table", { className: "hsk-markdown-table", children: /* @__PURE__ */ jsx2("tbody", { children: tableRows }) }) }, `table-wrapper-${key}`)
|
|
324
|
-
);
|
|
325
|
-
continue;
|
|
326
|
-
}
|
|
327
|
-
elements.push(
|
|
328
|
-
/* @__PURE__ */ jsx2("p", { className: "hsk-markdown-p", children: parseInline(line, key) }, key)
|
|
329
|
-
);
|
|
330
|
-
i++;
|
|
331
|
-
}
|
|
332
|
-
return /* @__PURE__ */ jsx2(Fragment2, { children: elements });
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
// src/utils/icons.tsx
|
|
336
|
-
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
337
|
-
var ArrowUpIcon = () => /* @__PURE__ */ jsxs2("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
338
|
-
/* @__PURE__ */ jsx3("path", { d: "m5 12 7-7 7 7" }),
|
|
339
|
-
/* @__PURE__ */ jsx3("path", { d: "M12 19V5" })
|
|
340
|
-
] });
|
|
341
|
-
|
|
342
|
-
// src/utils/theme.ts
|
|
343
|
-
function resolveTheme(theme) {
|
|
344
|
-
if (typeof theme === "string") {
|
|
345
|
-
return { themeAttr: theme, vars: void 0 };
|
|
346
|
-
}
|
|
347
|
-
if (!theme) {
|
|
348
|
-
return { themeAttr: void 0, vars: void 0 };
|
|
349
|
-
}
|
|
350
|
-
const vars = {};
|
|
351
|
-
if (theme.primaryColor) vars["--hsk-primary"] = theme.primaryColor;
|
|
352
|
-
if (theme.backgroundColor) {
|
|
353
|
-
vars["--hsk-bg"] = theme.backgroundColor;
|
|
354
|
-
vars["--hsk-chat-bg"] = theme.backgroundColor;
|
|
355
|
-
}
|
|
356
|
-
if (theme.textColor) {
|
|
357
|
-
vars["--hsk-text"] = theme.textColor;
|
|
358
|
-
vars["--hsk-chat-text"] = theme.textColor;
|
|
359
|
-
}
|
|
360
|
-
if (theme.fontFamily) vars["--hsk-font"] = theme.fontFamily;
|
|
361
|
-
if (theme.fontSize) vars["--hsk-font-size"] = theme.fontSize;
|
|
362
|
-
if (theme.borderRadius) vars["--hsk-border-radius"] = theme.borderRadius;
|
|
363
|
-
return { themeAttr: void 0, vars };
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
// src/components/VoiceButton.tsx
|
|
367
|
-
import { useState as useState2, useRef as useRef2, useCallback } from "react";
|
|
368
|
-
import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
369
|
-
var MicIcon = ({ active }) => /* @__PURE__ */ jsxs3("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
370
|
-
/* @__PURE__ */ jsx4("rect", { x: "9", y: "2", width: "6", height: "11", rx: "3", fill: active ? "currentColor" : "none" }),
|
|
371
|
-
/* @__PURE__ */ jsx4("path", { d: "M5 10a7 7 0 0 0 14 0" }),
|
|
372
|
-
/* @__PURE__ */ jsx4("line", { x1: "12", y1: "19", x2: "12", y2: "23" }),
|
|
373
|
-
/* @__PURE__ */ jsx4("line", { x1: "8", y1: "23", x2: "16", y2: "23" })
|
|
374
|
-
] });
|
|
375
|
-
function VoiceButton({
|
|
376
|
-
onTranscript,
|
|
377
|
-
onInterim,
|
|
378
|
-
lang = "en-US",
|
|
379
|
-
className = "",
|
|
380
|
-
disabled = false
|
|
381
|
-
}) {
|
|
382
|
-
const [listening, setListening] = useState2(false);
|
|
383
|
-
const recognitionRef = useRef2(null);
|
|
384
|
-
const isSupported = typeof window !== "undefined" && ("SpeechRecognition" in window || "webkitSpeechRecognition" in window);
|
|
385
|
-
const start = useCallback(() => {
|
|
386
|
-
if (!isSupported || listening) return;
|
|
387
|
-
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
|
|
388
|
-
const recognition = new SR();
|
|
389
|
-
recognition.lang = lang;
|
|
390
|
-
recognition.interimResults = true;
|
|
391
|
-
recognition.maxAlternatives = 1;
|
|
392
|
-
recognitionRef.current = recognition;
|
|
393
|
-
recognition.onstart = () => setListening(true);
|
|
394
|
-
recognition.onend = () => setListening(false);
|
|
395
|
-
recognition.onerror = () => setListening(false);
|
|
396
|
-
recognition.onresult = (e) => {
|
|
397
|
-
const results = Array.from(e.results);
|
|
398
|
-
const transcript = results.map((r) => r[0].transcript).join("");
|
|
399
|
-
const isFinal = e.results[e.results.length - 1].isFinal;
|
|
400
|
-
if (isFinal) {
|
|
401
|
-
onTranscript(transcript);
|
|
402
|
-
setListening(false);
|
|
403
|
-
} else {
|
|
404
|
-
onInterim?.(transcript);
|
|
405
|
-
}
|
|
406
|
-
};
|
|
407
|
-
recognition.start();
|
|
408
|
-
}, [isSupported, listening, lang, onTranscript, onInterim]);
|
|
409
|
-
const stop = useCallback(() => {
|
|
410
|
-
recognitionRef.current?.stop();
|
|
411
|
-
setListening(false);
|
|
412
|
-
}, []);
|
|
413
|
-
if (!isSupported) return null;
|
|
414
|
-
return /* @__PURE__ */ jsxs3(
|
|
415
|
-
"button",
|
|
416
|
-
{
|
|
417
|
-
type: "button",
|
|
418
|
-
className: `kiku-voice-btn${listening ? " kiku-voice-btn--active" : ""} ${className}`,
|
|
419
|
-
onClick: listening ? stop : start,
|
|
420
|
-
disabled,
|
|
421
|
-
title: listening ? "Stop listening" : "Speak your search",
|
|
422
|
-
"aria-label": listening ? "Stop voice input" : "Start voice input",
|
|
423
|
-
children: [
|
|
424
|
-
/* @__PURE__ */ jsx4(MicIcon, { active: listening }),
|
|
425
|
-
listening && /* @__PURE__ */ jsx4("span", { className: "kiku-voice-ripple", "aria-hidden": "true" })
|
|
426
|
-
]
|
|
427
|
-
}
|
|
428
|
-
);
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
// src/components/VisualSearch.tsx
|
|
432
|
-
import { useRef as useRef3, useState as useState3 } from "react";
|
|
433
|
-
import { useAkropolysContext as useAkropolysContext2 } from "@akropolys/sdk";
|
|
434
|
-
import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
435
|
-
var CameraIcon = () => /* @__PURE__ */ jsxs4("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
436
|
-
/* @__PURE__ */ jsx5("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" }),
|
|
437
|
-
/* @__PURE__ */ jsx5("circle", { cx: "12", cy: "13", r: "4" })
|
|
438
|
-
] });
|
|
439
|
-
var SpinnerIcon = () => /* @__PURE__ */ jsx5("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", className: "kiku-vs-spin", children: /* @__PURE__ */ jsx5("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" }) });
|
|
440
|
-
function fileToBase64(file) {
|
|
441
|
-
return new Promise((resolve, reject) => {
|
|
442
|
-
const reader = new FileReader();
|
|
443
|
-
reader.onload = () => resolve(reader.result);
|
|
444
|
-
reader.onerror = reject;
|
|
445
|
-
reader.readAsDataURL(file);
|
|
446
|
-
});
|
|
447
|
-
}
|
|
448
|
-
function VisualSearch({
|
|
449
|
-
onResults,
|
|
450
|
-
onError,
|
|
451
|
-
categoryHint,
|
|
452
|
-
className = "",
|
|
453
|
-
disabled = false
|
|
454
|
-
}) {
|
|
455
|
-
const client = useAkropolysContext2();
|
|
456
|
-
const inputRef = useRef3(null);
|
|
457
|
-
const [loading, setLoading] = useState3(false);
|
|
458
|
-
const handleFile = async (file) => {
|
|
459
|
-
if (!file.type.startsWith("image/")) return;
|
|
460
|
-
setLoading(true);
|
|
461
|
-
try {
|
|
462
|
-
const base64 = await fileToBase64(file);
|
|
463
|
-
const res = await client.api.searchByImage(base64, categoryHint);
|
|
464
|
-
onResults(res, base64);
|
|
465
|
-
} catch (e) {
|
|
466
|
-
onError?.(e instanceof Error ? e : new Error(String(e)));
|
|
467
|
-
} finally {
|
|
468
|
-
setLoading(false);
|
|
469
|
-
if (inputRef.current) inputRef.current.value = "";
|
|
470
|
-
}
|
|
471
|
-
};
|
|
472
|
-
return /* @__PURE__ */ jsxs4(
|
|
473
|
-
"label",
|
|
474
|
-
{
|
|
475
|
-
className: `kiku-vs-btn${loading ? " kiku-vs-btn--loading" : ""} ${className}`,
|
|
476
|
-
title: "Search by photo",
|
|
477
|
-
"aria-label": "Search by uploading a photo",
|
|
478
|
-
style: { cursor: disabled || loading ? "not-allowed" : "pointer" },
|
|
479
|
-
children: [
|
|
480
|
-
/* @__PURE__ */ jsx5(
|
|
481
|
-
"input",
|
|
482
|
-
{
|
|
483
|
-
ref: inputRef,
|
|
484
|
-
type: "file",
|
|
485
|
-
accept: "image/*",
|
|
486
|
-
capture: "environment",
|
|
487
|
-
onChange: (e) => e.target.files?.[0] && handleFile(e.target.files[0]),
|
|
488
|
-
disabled: disabled || loading,
|
|
489
|
-
hidden: true
|
|
490
|
-
}
|
|
491
|
-
),
|
|
492
|
-
loading ? /* @__PURE__ */ jsx5(SpinnerIcon, {}) : /* @__PURE__ */ jsx5(CameraIcon, {})
|
|
493
|
-
]
|
|
494
|
-
}
|
|
495
|
-
);
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
// src/components/ChatWidget.tsx
|
|
499
|
-
import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
500
|
-
var SparkleIcon = () => /* @__PURE__ */ jsx6("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx6("path", { d: "m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z" }) });
|
|
501
|
-
function SourceCard({
|
|
502
|
-
source,
|
|
503
|
-
defaultCurrency,
|
|
504
|
-
onSelect,
|
|
505
|
-
isReferenced
|
|
506
|
-
}) {
|
|
507
|
-
return /* @__PURE__ */ jsxs5(
|
|
508
|
-
"div",
|
|
509
|
-
{
|
|
510
|
-
className: cn("hsk-source-card", isReferenced && "hsk-source-card--referenced"),
|
|
511
|
-
onClick: () => onSelect?.(source),
|
|
512
|
-
children: [
|
|
513
|
-
source.image && /* @__PURE__ */ jsx6("img", { src: source.image, alt: source.name, className: "hsk-source-img" }),
|
|
514
|
-
/* @__PURE__ */ jsxs5("div", { style: { flex: 1, minWidth: 0, position: "relative" }, children: [
|
|
515
|
-
isReferenced && /* @__PURE__ */ jsx6("div", { className: "hsk-cb-source-ref-badge", title: "Featured in response", style: { top: "0", right: "0" }, children: /* @__PURE__ */ jsx6(SparkleIcon, {}) }),
|
|
516
|
-
/* @__PURE__ */ jsx6("div", { className: "hsk-source-name", style: { paddingRight: isReferenced ? "20px" : void 0 }, children: source.name }),
|
|
517
|
-
source.price && /* @__PURE__ */ jsxs5("div", { className: "hsk-source-price", children: [
|
|
518
|
-
source.currency ?? defaultCurrency,
|
|
519
|
-
" ",
|
|
520
|
-
source.price
|
|
521
|
-
] })
|
|
522
|
-
] })
|
|
523
|
-
]
|
|
524
|
-
}
|
|
525
|
-
);
|
|
526
|
-
}
|
|
527
|
-
function ChatWidget({
|
|
528
|
-
title = "kiku",
|
|
529
|
-
placeholder = "Ask about anything in our store\u2026",
|
|
530
|
-
emptyStateText = "Ask me anything about our products",
|
|
531
|
-
emptyStateSuggestions = '"Find me headphones under KSh 5,000" \xB7 "Gift ideas"',
|
|
532
|
-
defaultCurrency = "KES",
|
|
533
|
-
className,
|
|
534
|
-
theme,
|
|
535
|
-
classNames = {},
|
|
536
|
-
onSelectSource,
|
|
537
|
-
enableVoice = false,
|
|
538
|
-
enableVision = false,
|
|
539
|
-
visionCategoryHint
|
|
540
|
-
}) {
|
|
541
|
-
const { messages, sources, referencedIds, loading: chatLoading, streaming, error, send, reset } = useKiku();
|
|
542
|
-
const [input, setInput] = useState4("");
|
|
543
|
-
const [visualLoading, setVisualLoading] = useState4(false);
|
|
544
|
-
const bottomRef = useRef4(null);
|
|
545
|
-
const textareaRef = useRef4(null);
|
|
546
|
-
const loading = chatLoading || visualLoading;
|
|
547
|
-
const [chatHistory, setChatHistory] = useState4([]);
|
|
548
|
-
const lastSyncedCount = useRef4(0);
|
|
549
|
-
useEffect2(() => {
|
|
550
|
-
if (messages.length === 0) {
|
|
551
|
-
setChatHistory([]);
|
|
552
|
-
lastSyncedCount.current = 0;
|
|
553
|
-
return;
|
|
554
|
-
}
|
|
555
|
-
if (messages.length > lastSyncedCount.current) {
|
|
556
|
-
const newMsgs = messages.slice(lastSyncedCount.current);
|
|
557
|
-
setChatHistory((prev) => [...prev, ...newMsgs]);
|
|
558
|
-
lastSyncedCount.current = messages.length;
|
|
559
|
-
} else if (messages.length < lastSyncedCount.current) {
|
|
560
|
-
setChatHistory(messages);
|
|
561
|
-
lastSyncedCount.current = messages.length;
|
|
562
|
-
} else {
|
|
563
|
-
setChatHistory((prev) => {
|
|
564
|
-
const next = [...prev];
|
|
565
|
-
let hookIdx = messages.length - 1;
|
|
566
|
-
let historyIdx = next.length - 1;
|
|
567
|
-
while (hookIdx >= 0 && historyIdx >= 0) {
|
|
568
|
-
if (next[historyIdx].role === messages[hookIdx].role) {
|
|
569
|
-
next[historyIdx] = {
|
|
570
|
-
...next[historyIdx],
|
|
571
|
-
content: messages[hookIdx].content,
|
|
572
|
-
actionType: messages[hookIdx].actionType,
|
|
573
|
-
thinking: messages[hookIdx].thinking,
|
|
574
|
-
thoughtForSeconds: messages[hookIdx].thoughtForSeconds,
|
|
575
|
-
statusMessage: messages[hookIdx].statusMessage
|
|
576
|
-
};
|
|
577
|
-
break;
|
|
578
|
-
}
|
|
579
|
-
historyIdx--;
|
|
580
|
-
}
|
|
581
|
-
return next;
|
|
582
|
-
});
|
|
583
|
-
}
|
|
584
|
-
}, [messages]);
|
|
585
|
-
useEffect2(() => {
|
|
586
|
-
bottomRef.current?.scrollIntoView({ behavior: "smooth" });
|
|
587
|
-
}, [chatHistory, loading]);
|
|
588
|
-
const handleSend = async () => {
|
|
589
|
-
const q = input.trim();
|
|
590
|
-
if (!q || loading) return;
|
|
591
|
-
setInput("");
|
|
592
|
-
if (textareaRef.current) textareaRef.current.style.height = "auto";
|
|
593
|
-
await send(q);
|
|
594
|
-
};
|
|
595
|
-
const handleKey = (e) => {
|
|
596
|
-
if (e.key === "Enter" && !e.shiftKey) {
|
|
597
|
-
e.preventDefault();
|
|
598
|
-
handleSend();
|
|
599
|
-
}
|
|
600
|
-
};
|
|
601
|
-
const handleInput = (e) => {
|
|
602
|
-
setInput(e.target.value);
|
|
603
|
-
const t = e.target;
|
|
604
|
-
t.style.height = "auto";
|
|
605
|
-
t.style.height = Math.min(t.scrollHeight, 120) + "px";
|
|
606
|
-
};
|
|
607
|
-
const handleVisualResults = (res, preview) => {
|
|
608
|
-
const userMsg = {
|
|
609
|
-
role: "user",
|
|
610
|
-
content: "Uploaded a photo for visual search",
|
|
611
|
-
imagePreview: preview
|
|
612
|
-
};
|
|
613
|
-
const dna = res.style_dna;
|
|
614
|
-
let content = `I've analyzed your image! Here is the Style DNA I found:
|
|
615
|
-
`;
|
|
616
|
-
if (dna) {
|
|
617
|
-
if (dna.color_palette) content += `* **Palette:** ${dna.color_palette}
|
|
618
|
-
`;
|
|
619
|
-
if (dna.dominant_colors && dna.dominant_colors.length > 0) {
|
|
620
|
-
content += `* **Colors:** ${dna.dominant_colors.join(", ")}
|
|
621
|
-
`;
|
|
622
|
-
}
|
|
623
|
-
if (dna.aesthetic && dna.aesthetic.length > 0) {
|
|
624
|
-
content += `* **Aesthetic:** ${dna.aesthetic.join(", ")}
|
|
625
|
-
`;
|
|
626
|
-
}
|
|
627
|
-
if (dna.texture) content += `* **Texture:** ${dna.texture}
|
|
628
|
-
`;
|
|
629
|
-
if (dna.formality) content += `* **Formality:** ${dna.formality}
|
|
630
|
-
`;
|
|
631
|
-
}
|
|
632
|
-
const results = res.results || [];
|
|
633
|
-
if (results.length > 0) {
|
|
634
|
-
content += `
|
|
635
|
-
I found ${results.length} matching products in the store for you.`;
|
|
636
|
-
} else {
|
|
637
|
-
content += `
|
|
638
|
-
I couldn't find any matching products in the store.`;
|
|
639
|
-
}
|
|
640
|
-
const assistantMsg = {
|
|
641
|
-
role: "assistant",
|
|
642
|
-
content,
|
|
643
|
-
styleDNA: dna,
|
|
644
|
-
visualSources: results.map((r) => ({
|
|
645
|
-
id: r.id,
|
|
646
|
-
name: r.product.name,
|
|
647
|
-
price: r.product.price,
|
|
648
|
-
currency: r.product.currency,
|
|
649
|
-
category: r.product.category,
|
|
650
|
-
url: r.product.url,
|
|
651
|
-
image: r.product.images && r.product.images.length > 0 ? r.product.images[0] : void 0,
|
|
652
|
-
brand: r.product.brand
|
|
653
|
-
}))
|
|
654
|
-
};
|
|
655
|
-
setChatHistory((prev) => [...prev, userMsg, assistantMsg]);
|
|
656
|
-
};
|
|
657
|
-
const { vars: customStyles } = resolveTheme(theme);
|
|
658
|
-
return /* @__PURE__ */ jsxs5(
|
|
659
|
-
"div",
|
|
660
|
-
{
|
|
661
|
-
className: cn("hsk-chat-widget", classNames.root, className),
|
|
662
|
-
style: customStyles,
|
|
663
|
-
children: [
|
|
664
|
-
/* @__PURE__ */ jsxs5("div", { className: cn("hsk-chat-header", classNames.header), children: [
|
|
665
|
-
/* @__PURE__ */ jsx6("span", { className: "hsk-chat-header-icon", children: /* @__PURE__ */ jsx6(SparkleIcon, {}) }),
|
|
666
|
-
/* @__PURE__ */ jsx6("span", { className: "hsk-chat-title", children: title }),
|
|
667
|
-
/* @__PURE__ */ jsx6("span", { className: "hsk-chat-badge", children: "AI" }),
|
|
668
|
-
chatHistory.length > 0 && /* @__PURE__ */ jsx6("button", { className: "hsk-chat-reset", onClick: reset, style: { marginLeft: "auto" }, children: "Clear" })
|
|
669
|
-
] }),
|
|
670
|
-
/* @__PURE__ */ jsxs5("div", { className: "hsk-chat-messages", children: [
|
|
671
|
-
chatHistory.length === 0 ? /* @__PURE__ */ jsxs5("div", { className: "hsk-chat-empty", children: [
|
|
672
|
-
/* @__PURE__ */ jsx6("div", { className: "hsk-chat-empty-icon", children: /* @__PURE__ */ jsx6(SparkleIcon, {}) }),
|
|
673
|
-
/* @__PURE__ */ jsx6("div", { children: emptyStateText }),
|
|
674
|
-
/* @__PURE__ */ jsx6("div", { className: "hsk-chat-empty-suggestions", children: emptyStateSuggestions })
|
|
675
|
-
] }) : chatHistory.map((msg, idx) => /* @__PURE__ */ jsxs5("div", { children: [
|
|
676
|
-
/* @__PURE__ */ jsxs5("div", { className: `hsk-msg-row ${msg.role}`, children: [
|
|
677
|
-
/* @__PURE__ */ jsx6("div", { className: cn("hsk-msg-avatar", msg.role === "assistant" ? "ai" : "user"), children: msg.role === "assistant" ? /* @__PURE__ */ jsx6(SparkleIcon, {}) : "U" }),
|
|
678
|
-
/* @__PURE__ */ jsxs5("div", { className: cn("hsk-msg-bubble", msg.role, classNames.messageBubble), children: [
|
|
679
|
-
msg.imagePreview && /* @__PURE__ */ jsx6("div", { className: "kiku-vs-preview-bubble", style: { marginBottom: "8px" }, children: /* @__PURE__ */ jsx6("img", { src: msg.imagePreview, alt: "Uploaded Preview", className: "kiku-vs-preview-bubble-img", style: { maxWidth: "200px", borderRadius: "8px" } }) }),
|
|
680
|
-
msg.thinking && /* @__PURE__ */ jsxs5("details", { className: "hsk-thinking-details", open: streaming && idx === chatHistory.length - 1 && !msg.content, children: [
|
|
681
|
-
/* @__PURE__ */ jsxs5("summary", { className: "hsk-thinking-summary", children: [
|
|
682
|
-
"Thought for ",
|
|
683
|
-
msg.thoughtForSeconds ?? 1,
|
|
684
|
-
"s"
|
|
685
|
-
] }),
|
|
686
|
-
/* @__PURE__ */ jsx6("div", { className: "hsk-thinking-text", children: msg.thinking })
|
|
687
|
-
] }),
|
|
688
|
-
!msg.content && !msg.thinking && msg.role === "assistant" && idx === chatHistory.length - 1 && /* @__PURE__ */ jsxs5("div", { className: "hsk-status-live", children: [
|
|
689
|
-
/* @__PURE__ */ jsx6("span", { className: "hsk-status-dot" }),
|
|
690
|
-
/* @__PURE__ */ jsx6("span", { children: msg.statusMessage || "Thinking..." })
|
|
691
|
-
] }),
|
|
692
|
-
renderMarkdown(msg.content),
|
|
693
|
-
streaming && idx === chatHistory.length - 1 && msg.role === "assistant" && /* @__PURE__ */ jsx6("span", { className: "hsk-streaming-cursor" }),
|
|
694
|
-
msg.styleDNA && /* @__PURE__ */ jsxs5("div", { className: "kiku-vs-preview-banner", style: { marginTop: "10px" }, children: [
|
|
695
|
-
chatHistory[idx - 1]?.imagePreview && /* @__PURE__ */ jsx6("img", { src: chatHistory[idx - 1].imagePreview, alt: "Visual Search Input", className: "kiku-vs-preview-img" }),
|
|
696
|
-
/* @__PURE__ */ jsxs5("div", { className: "kiku-vs-preview-info", children: [
|
|
697
|
-
/* @__PURE__ */ jsx6("div", { className: "kiku-vs-preview-label", children: "Visual Match Palette" }),
|
|
698
|
-
/* @__PURE__ */ jsx6("div", { className: "kiku-vs-preview-palette", children: msg.styleDNA.color_palette || "Detected Style DNA" }),
|
|
699
|
-
msg.styleDNA.style_tags && msg.styleDNA.style_tags.length > 0 && /* @__PURE__ */ jsx6("div", { className: "kiku-style-tags", children: msg.styleDNA.style_tags.map((tag, ti) => /* @__PURE__ */ jsxs5("span", { className: "kiku-style-tag", children: [
|
|
700
|
-
"#",
|
|
701
|
-
tag
|
|
702
|
-
] }, ti)) })
|
|
703
|
-
] })
|
|
704
|
-
] })
|
|
705
|
-
] })
|
|
706
|
-
] }),
|
|
707
|
-
msg.role === "assistant" && msg.visualSources && msg.visualSources.length > 0 && /* @__PURE__ */ jsx6("div", { className: "hsk-sources-container", children: /* @__PURE__ */ jsx6("div", { className: "hsk-sources", children: msg.visualSources.map((src, si) => /* @__PURE__ */ jsx6(SourceCard, { source: src, defaultCurrency, onSelect: onSelectSource }, si)) }) }),
|
|
708
|
-
msg.role === "assistant" && idx === chatHistory.length - 1 && !msg.visualSources && sources.length > 0 && (() => {
|
|
709
|
-
const isStreamingActive = chatLoading || streaming;
|
|
710
|
-
if (isStreamingActive) {
|
|
711
|
-
return /* @__PURE__ */ jsx6("div", { className: "hsk-sources-container", children: /* @__PURE__ */ jsx6("div", { className: "hsk-sources", children: sources.map((src, si) => {
|
|
712
|
-
const isReferenced = !!(src.id && referencedIds.includes(src.id));
|
|
713
|
-
return /* @__PURE__ */ jsx6(
|
|
714
|
-
SourceCard,
|
|
715
|
-
{
|
|
716
|
-
source: src,
|
|
717
|
-
defaultCurrency,
|
|
718
|
-
onSelect: onSelectSource,
|
|
719
|
-
isReferenced
|
|
720
|
-
},
|
|
721
|
-
si
|
|
722
|
-
);
|
|
723
|
-
}) }) });
|
|
724
|
-
}
|
|
725
|
-
const featured = sources.filter((src) => src.id && referencedIds.includes(src.id));
|
|
726
|
-
const general = referencedIds.length > 0 ? [] : sources.filter((src) => !src.id || !referencedIds.includes(src.id));
|
|
727
|
-
return /* @__PURE__ */ jsxs5("div", { className: "hsk-sources-container", children: [
|
|
728
|
-
featured.length > 0 && /* @__PURE__ */ jsxs5("div", { className: "hsk-sources-group", style: { marginBottom: "10px" }, children: [
|
|
729
|
-
/* @__PURE__ */ jsx6("div", { className: "hsk-sources-group-title", children: "\u2B50 Featured in response" }),
|
|
730
|
-
/* @__PURE__ */ jsx6("div", { className: "hsk-sources", children: featured.map((src, si) => /* @__PURE__ */ jsx6(
|
|
731
|
-
SourceCard,
|
|
732
|
-
{
|
|
733
|
-
source: src,
|
|
734
|
-
defaultCurrency,
|
|
735
|
-
onSelect: onSelectSource,
|
|
736
|
-
isReferenced: true
|
|
737
|
-
},
|
|
738
|
-
`feat-${si}`
|
|
739
|
-
)) })
|
|
740
|
-
] }),
|
|
741
|
-
general.length > 0 && /* @__PURE__ */ jsxs5("div", { className: "hsk-sources-group", children: [
|
|
742
|
-
featured.length > 0 && /* @__PURE__ */ jsx6("div", { className: "hsk-sources-group-title", children: "All matches" }),
|
|
743
|
-
/* @__PURE__ */ jsx6("div", { className: "hsk-sources", children: general.map((src, si) => /* @__PURE__ */ jsx6(
|
|
744
|
-
SourceCard,
|
|
745
|
-
{
|
|
746
|
-
source: src,
|
|
747
|
-
defaultCurrency,
|
|
748
|
-
onSelect: onSelectSource,
|
|
749
|
-
isReferenced: false
|
|
750
|
-
},
|
|
751
|
-
`gen-${si}`
|
|
752
|
-
)) })
|
|
753
|
-
] })
|
|
754
|
-
] });
|
|
755
|
-
})()
|
|
756
|
-
] }, idx)),
|
|
757
|
-
loading && /* @__PURE__ */ jsxs5("div", { className: "hsk-msg-row", children: [
|
|
758
|
-
/* @__PURE__ */ jsx6("div", { className: "hsk-msg-avatar ai", children: /* @__PURE__ */ jsx6(SparkleIcon, {}) }),
|
|
759
|
-
/* @__PURE__ */ jsxs5("div", { className: "hsk-pending", role: "status", "aria-live": "polite", children: [
|
|
760
|
-
/* @__PURE__ */ jsxs5("div", { className: "hsk-pending-glyph", children: [
|
|
761
|
-
/* @__PURE__ */ jsx6("span", { className: "hsk-pending-ring" }),
|
|
762
|
-
/* @__PURE__ */ jsx6("span", { className: "hsk-pending-dot" })
|
|
763
|
-
] }),
|
|
764
|
-
/* @__PURE__ */ jsxs5("div", { className: "hsk-pending-text", children: [
|
|
765
|
-
/* @__PURE__ */ jsx6("span", { className: "hsk-pending-step step-1", children: "Searching catalog" }),
|
|
766
|
-
/* @__PURE__ */ jsx6("span", { className: "hsk-pending-step step-2", children: "Reasoning" }),
|
|
767
|
-
/* @__PURE__ */ jsx6("span", { className: "hsk-pending-step step-3", children: "Composing" })
|
|
768
|
-
] })
|
|
769
|
-
] })
|
|
770
|
-
] }),
|
|
771
|
-
error && /* @__PURE__ */ jsx6("div", { className: "hsk-chat-error", children: (() => {
|
|
772
|
-
try {
|
|
773
|
-
const parsed = JSON.parse(error);
|
|
774
|
-
return parsed.error || parsed.message || error;
|
|
775
|
-
} catch {
|
|
776
|
-
return error;
|
|
777
|
-
}
|
|
778
|
-
})() }),
|
|
779
|
-
/* @__PURE__ */ jsx6("div", { ref: bottomRef })
|
|
780
|
-
] }),
|
|
781
|
-
/* @__PURE__ */ jsxs5("div", { className: "hsk-chat-input-area", style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
|
|
782
|
-
enableVision && /* @__PURE__ */ jsx6(
|
|
783
|
-
VisualSearch,
|
|
784
|
-
{
|
|
785
|
-
onResults: handleVisualResults,
|
|
786
|
-
onError: (err) => console.error("[VisualSearch] error:", err),
|
|
787
|
-
categoryHint: visionCategoryHint,
|
|
788
|
-
disabled: loading
|
|
789
|
-
}
|
|
790
|
-
),
|
|
791
|
-
/* @__PURE__ */ jsx6(
|
|
792
|
-
"textarea",
|
|
793
|
-
{
|
|
794
|
-
ref: textareaRef,
|
|
795
|
-
className: cn("hsk-chat-input", classNames.input),
|
|
796
|
-
value: input,
|
|
797
|
-
onChange: handleInput,
|
|
798
|
-
onKeyDown: handleKey,
|
|
799
|
-
placeholder,
|
|
800
|
-
rows: 1,
|
|
801
|
-
disabled: loading,
|
|
802
|
-
style: { flex: 1 }
|
|
803
|
-
}
|
|
804
|
-
),
|
|
805
|
-
enableVoice && /* @__PURE__ */ jsx6(
|
|
806
|
-
VoiceButton,
|
|
807
|
-
{
|
|
808
|
-
onTranscript: (text) => {
|
|
809
|
-
setInput(text);
|
|
810
|
-
send(text);
|
|
811
|
-
setInput("");
|
|
812
|
-
},
|
|
813
|
-
onInterim: (text) => setInput(text),
|
|
814
|
-
disabled: loading
|
|
815
|
-
}
|
|
816
|
-
),
|
|
817
|
-
/* @__PURE__ */ jsx6(
|
|
818
|
-
"button",
|
|
819
|
-
{
|
|
820
|
-
className: "hsk-chat-send",
|
|
821
|
-
onClick: handleSend,
|
|
822
|
-
disabled: !input.trim() || loading,
|
|
823
|
-
"aria-label": "Send message",
|
|
824
|
-
children: /* @__PURE__ */ jsx6(ArrowUpIcon, {})
|
|
825
|
-
}
|
|
826
|
-
)
|
|
827
|
-
] })
|
|
828
|
-
]
|
|
829
|
-
}
|
|
830
|
-
);
|
|
831
|
-
}
|
|
832
|
-
|
|
833
|
-
// src/components/KikuButton.tsx
|
|
834
|
-
import { useState as useState6, useEffect as useEffect4, useRef as useRef6, useCallback as useCallback2 } from "react";
|
|
835
|
-
import { createPortal } from "react-dom";
|
|
836
|
-
import { useKiku as useKiku2 } from "@akropolys/sdk";
|
|
837
|
-
import { useAkropolysContext as useAkropolysContext3 } from "@akropolys/sdk";
|
|
838
|
-
|
|
839
|
-
// src/components/ComparisonMatrix.tsx
|
|
840
|
-
import { resolveDisplayFields } from "@akropolys/sdk";
|
|
841
|
-
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
842
|
-
function normalizeKey(key) {
|
|
843
|
-
let s = key.replace(/[_-]+/g, " ");
|
|
844
|
-
s = s.replace(/([a-z])([A-Z])/g, "$1 $2");
|
|
845
|
-
return s.split(" ").map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(" ");
|
|
846
|
-
}
|
|
847
|
-
function getBaseGroup(normalized) {
|
|
848
|
-
const norm = normalized.toLowerCase().trim();
|
|
849
|
-
if (norm.startsWith("salary") || norm.startsWith("pay") || norm.startsWith("wage")) {
|
|
850
|
-
return "Salary";
|
|
851
|
-
}
|
|
852
|
-
if (norm.startsWith("price") || norm.startsWith("cost") || norm.startsWith("rate")) {
|
|
853
|
-
return "Price";
|
|
854
|
-
}
|
|
855
|
-
if (norm.startsWith("location") || norm.startsWith("address") || norm.startsWith("city")) {
|
|
856
|
-
return "Location";
|
|
857
|
-
}
|
|
858
|
-
if (norm.startsWith("image") || norm.startsWith("photo") || norm.startsWith("pic") || norm.startsWith("thumb")) {
|
|
859
|
-
return "Image";
|
|
860
|
-
}
|
|
861
|
-
if (norm.startsWith("title") || norm.startsWith("name") || norm.startsWith("label") || norm.startsWith("heading")) {
|
|
862
|
-
return "Title";
|
|
863
|
-
}
|
|
864
|
-
return normalized;
|
|
865
|
-
}
|
|
866
|
-
function buildRows(products, displayConfig, defaultCurrency = "KES") {
|
|
867
|
-
const rows = [];
|
|
868
|
-
const resolved = products.map((p) => resolveDisplayFields(p.fields || p, displayConfig));
|
|
869
|
-
rows.push({
|
|
870
|
-
label: "Product Preview",
|
|
871
|
-
values: resolved.map((r) => r.image || null),
|
|
872
|
-
type: "image"
|
|
873
|
-
});
|
|
874
|
-
const prices = resolved.map((r) => {
|
|
875
|
-
const n = parseFloat(String(r.price ?? "").replace(/[^0-9.]/g, ""));
|
|
876
|
-
return isNaN(n) ? null : n;
|
|
877
|
-
});
|
|
878
|
-
const priceLabels = products.map((p, i) => {
|
|
879
|
-
const c = p.fields?.currency || p.currency || defaultCurrency;
|
|
880
|
-
const n = prices[i];
|
|
881
|
-
return n !== null ? `${c} ${n.toLocaleString("en-KE", { minimumFractionDigits: 2, maximumFractionDigits: 2 })}` : null;
|
|
882
|
-
});
|
|
883
|
-
const validPrices = prices.filter((p) => p !== null);
|
|
884
|
-
const minPrice = validPrices.length ? Math.min(...validPrices) : null;
|
|
885
|
-
rows.push({
|
|
886
|
-
label: "Price",
|
|
887
|
-
values: priceLabels,
|
|
888
|
-
type: "price",
|
|
889
|
-
bestIdx: minPrice !== null ? prices.indexOf(minPrice) : void 0
|
|
890
|
-
});
|
|
891
|
-
const keysToExclude = /* @__PURE__ */ new Set([
|
|
892
|
-
"url",
|
|
893
|
-
"fields",
|
|
894
|
-
"id",
|
|
895
|
-
"score",
|
|
896
|
-
"currency",
|
|
897
|
-
"status",
|
|
898
|
-
"indexed_at",
|
|
899
|
-
"indexedAt"
|
|
900
|
-
]);
|
|
901
|
-
if (displayConfig) {
|
|
902
|
-
Object.values(displayConfig).forEach((v) => {
|
|
903
|
-
if (v) keysToExclude.add(v);
|
|
904
|
-
});
|
|
905
|
-
}
|
|
906
|
-
const commonKeys = [
|
|
907
|
-
"title",
|
|
908
|
-
"name",
|
|
909
|
-
"label",
|
|
910
|
-
"headline",
|
|
911
|
-
"subject",
|
|
912
|
-
"job_title",
|
|
913
|
-
"listing_title",
|
|
914
|
-
"common_name",
|
|
915
|
-
"product_name",
|
|
916
|
-
"image",
|
|
917
|
-
"images",
|
|
918
|
-
"thumbnail",
|
|
919
|
-
"photo",
|
|
920
|
-
"cover",
|
|
921
|
-
"featured_image",
|
|
922
|
-
"hero_image",
|
|
923
|
-
"listing_image",
|
|
924
|
-
"logo",
|
|
925
|
-
"price",
|
|
926
|
-
"cost",
|
|
927
|
-
"listingPrice",
|
|
928
|
-
"rate",
|
|
929
|
-
"fee",
|
|
930
|
-
"startingFrom",
|
|
931
|
-
"brand",
|
|
932
|
-
"category",
|
|
933
|
-
"location",
|
|
934
|
-
"type",
|
|
935
|
-
"variety",
|
|
936
|
-
"make"
|
|
937
|
-
];
|
|
938
|
-
commonKeys.forEach((k) => keysToExclude.add(k));
|
|
939
|
-
const allFieldKeys = /* @__PURE__ */ new Set();
|
|
940
|
-
products.forEach((p) => {
|
|
941
|
-
const f = p.fields || p;
|
|
942
|
-
if (f) {
|
|
943
|
-
Object.keys(f).forEach((k) => {
|
|
944
|
-
if (!keysToExclude.has(k)) {
|
|
945
|
-
allFieldKeys.add(k);
|
|
946
|
-
}
|
|
947
|
-
});
|
|
948
|
-
}
|
|
949
|
-
});
|
|
950
|
-
const groupedKeys = /* @__PURE__ */ new Map();
|
|
951
|
-
allFieldKeys.forEach((k) => {
|
|
952
|
-
const norm = normalizeKey(k);
|
|
953
|
-
const base = getBaseGroup(norm);
|
|
954
|
-
if (!groupedKeys.has(base)) {
|
|
955
|
-
groupedKeys.set(base, []);
|
|
956
|
-
}
|
|
957
|
-
groupedKeys.get(base).push(k);
|
|
958
|
-
});
|
|
959
|
-
const sortedGroups = Array.from(groupedKeys.keys()).sort();
|
|
960
|
-
sortedGroups.forEach((group) => {
|
|
961
|
-
const originalKeys = groupedKeys.get(group);
|
|
962
|
-
const values = products.map((p) => {
|
|
963
|
-
const f = p.fields || p;
|
|
964
|
-
if (!f) return null;
|
|
965
|
-
for (const k of originalKeys) {
|
|
966
|
-
if (f[k] !== void 0 && f[k] !== null) {
|
|
967
|
-
if (typeof f[k] === "object") {
|
|
968
|
-
return JSON.stringify(f[k]);
|
|
969
|
-
}
|
|
970
|
-
return String(f[k]);
|
|
971
|
-
}
|
|
972
|
-
}
|
|
973
|
-
return null;
|
|
974
|
-
});
|
|
975
|
-
if (values.some((v) => v !== null)) {
|
|
976
|
-
rows.push({
|
|
977
|
-
label: group,
|
|
978
|
-
values,
|
|
979
|
-
type: "text"
|
|
980
|
-
});
|
|
981
|
-
}
|
|
982
|
-
});
|
|
983
|
-
const avail = products.map((s) => {
|
|
984
|
-
const f = s.fields || s;
|
|
985
|
-
const a = f.availability || "";
|
|
986
|
-
if (!a) return null;
|
|
987
|
-
if (/in.?stock/i.test(a)) return "In-Stock";
|
|
988
|
-
if (/out.?of.?stock/i.test(a)) return "Out of Stock";
|
|
989
|
-
return a;
|
|
990
|
-
});
|
|
991
|
-
if (avail.some(Boolean)) {
|
|
992
|
-
rows.push({ label: "Availability", values: avail, type: "availability" });
|
|
993
|
-
}
|
|
994
|
-
const cats = products.map((s) => {
|
|
995
|
-
const f = s.fields || s;
|
|
996
|
-
return f.category || null;
|
|
997
|
-
});
|
|
998
|
-
if (cats.some(Boolean)) rows.push({ label: "Category", values: cats });
|
|
999
|
-
return rows;
|
|
1000
|
-
}
|
|
1001
|
-
function ImageCell({ value, name }) {
|
|
1002
|
-
if (!value) {
|
|
1003
|
-
return /* @__PURE__ */ jsx7("div", { style: { fontSize: 28, textAlign: "center" }, children: "\u{1F4E6}" });
|
|
1004
|
-
}
|
|
1005
|
-
return /* @__PURE__ */ jsx7(
|
|
1006
|
-
"img",
|
|
1007
|
-
{
|
|
1008
|
-
src: value,
|
|
1009
|
-
alt: name,
|
|
1010
|
-
style: {
|
|
1011
|
-
width: 72,
|
|
1012
|
-
height: 72,
|
|
1013
|
-
objectFit: "contain",
|
|
1014
|
-
borderRadius: 8,
|
|
1015
|
-
background: "#f5f5f5",
|
|
1016
|
-
display: "block"
|
|
1017
|
-
}
|
|
1018
|
-
}
|
|
1019
|
-
);
|
|
1020
|
-
}
|
|
1021
|
-
function AvailabilityCell({ value }) {
|
|
1022
|
-
if (!value) return /* @__PURE__ */ jsx7("span", { style: { color: "#9ca3af" }, children: "\u2014" });
|
|
1023
|
-
const inStock = /in.?stock/i.test(value);
|
|
1024
|
-
return /* @__PURE__ */ jsxs6("span", { style: { display: "flex", alignItems: "center", gap: 6, fontSize: 13, color: "var(--hsk-text, #111827)" }, children: [
|
|
1025
|
-
/* @__PURE__ */ jsx7("span", { style: {
|
|
1026
|
-
width: 8,
|
|
1027
|
-
height: 8,
|
|
1028
|
-
borderRadius: "50%",
|
|
1029
|
-
flexShrink: 0,
|
|
1030
|
-
background: inStock ? "#22c55e" : "#ef4444",
|
|
1031
|
-
boxShadow: inStock ? "0 0 0 3px rgba(34,197,94,0.2)" : "0 0 0 3px rgba(239,68,68,0.2)",
|
|
1032
|
-
display: "inline-block"
|
|
1033
|
-
} }),
|
|
1034
|
-
value
|
|
1035
|
-
] });
|
|
1036
|
-
}
|
|
1037
|
-
function ComparisonMatrix({ sources, defaultCurrency = "KES", displayConfig }) {
|
|
1038
|
-
if (!sources || sources.length < 2) return null;
|
|
1039
|
-
const products = sources.slice(0, 3);
|
|
1040
|
-
const rows = buildRows(products, displayConfig, defaultCurrency);
|
|
1041
|
-
const colTemplate = `140px repeat(${products.length}, 1fr)`;
|
|
1042
|
-
const labelStyle = {
|
|
1043
|
-
padding: "10px 12px",
|
|
1044
|
-
fontSize: 11,
|
|
1045
|
-
fontWeight: 700,
|
|
1046
|
-
color: "var(--hsk-text-muted, #4b5563)",
|
|
1047
|
-
textTransform: "uppercase",
|
|
1048
|
-
letterSpacing: "0.05em",
|
|
1049
|
-
borderBottom: "1px solid var(--hsk-border, rgba(0,0,0,0.07))",
|
|
1050
|
-
verticalAlign: "middle",
|
|
1051
|
-
whiteSpace: "nowrap",
|
|
1052
|
-
display: "flex",
|
|
1053
|
-
alignItems: "center"
|
|
1054
|
-
};
|
|
1055
|
-
const cellBase = {
|
|
1056
|
-
padding: "10px 14px",
|
|
1057
|
-
fontSize: 13,
|
|
1058
|
-
color: "var(--hsk-text, #111827)",
|
|
1059
|
-
borderBottom: "1px solid var(--hsk-border, rgba(0,0,0,0.07))",
|
|
1060
|
-
verticalAlign: "middle",
|
|
1061
|
-
display: "flex",
|
|
1062
|
-
alignItems: "center"
|
|
1063
|
-
};
|
|
1064
|
-
return /* @__PURE__ */ jsxs6(
|
|
1065
|
-
"div",
|
|
1066
|
-
{
|
|
1067
|
-
className: "hsk-compare-matrix",
|
|
1068
|
-
style: {
|
|
1069
|
-
marginTop: 10,
|
|
1070
|
-
borderRadius: 12,
|
|
1071
|
-
overflow: "hidden",
|
|
1072
|
-
border: "1px solid var(--hsk-border, rgba(0,0,0,0.09))",
|
|
1073
|
-
background: "var(--hsk-surface, #fff)",
|
|
1074
|
-
fontSize: 13
|
|
1075
|
-
},
|
|
1076
|
-
children: [
|
|
1077
|
-
/* @__PURE__ */ jsxs6("div", { style: { display: "grid", gridTemplateColumns: colTemplate, background: "var(--hsk-surface2, #f9fafb)", borderBottom: "2px solid var(--hsk-border, rgba(0,0,0,0.09))" }, children: [
|
|
1078
|
-
/* @__PURE__ */ jsx7("div", { style: { ...labelStyle, borderBottom: "none", color: "var(--hsk-text, #111)", fontSize: 12 }, children: "Feature" }),
|
|
1079
|
-
products.map((p, i) => {
|
|
1080
|
-
const { title } = resolveDisplayFields(p.fields || p, displayConfig);
|
|
1081
|
-
return /* @__PURE__ */ jsx7(
|
|
1082
|
-
"a",
|
|
1083
|
-
{
|
|
1084
|
-
href: p.url || "#",
|
|
1085
|
-
target: "_blank",
|
|
1086
|
-
rel: "noopener noreferrer",
|
|
1087
|
-
style: {
|
|
1088
|
-
display: "flex",
|
|
1089
|
-
alignItems: "center",
|
|
1090
|
-
padding: "10px 14px",
|
|
1091
|
-
fontSize: 12,
|
|
1092
|
-
fontWeight: 700,
|
|
1093
|
-
color: "var(--hsk-primary, #16a34a)",
|
|
1094
|
-
textDecoration: "none",
|
|
1095
|
-
lineHeight: 1.3,
|
|
1096
|
-
borderLeft: i > 0 ? "1px solid var(--hsk-border, rgba(0,0,0,0.07))" : "none"
|
|
1097
|
-
},
|
|
1098
|
-
children: title
|
|
1099
|
-
},
|
|
1100
|
-
i
|
|
1101
|
-
);
|
|
1102
|
-
})
|
|
1103
|
-
] }),
|
|
1104
|
-
rows.map((row, rowIdx) => /* @__PURE__ */ jsxs6(
|
|
1105
|
-
"div",
|
|
1106
|
-
{
|
|
1107
|
-
style: {
|
|
1108
|
-
display: "grid",
|
|
1109
|
-
gridTemplateColumns: colTemplate,
|
|
1110
|
-
background: rowIdx % 2 === 1 ? "var(--hsk-surface2, rgba(0,0,0,0.015))" : "transparent"
|
|
1111
|
-
},
|
|
1112
|
-
children: [
|
|
1113
|
-
/* @__PURE__ */ jsx7("div", { style: labelStyle, children: row.label }),
|
|
1114
|
-
products.map((p, i) => {
|
|
1115
|
-
const val = row.values[i];
|
|
1116
|
-
const isBest = row.bestIdx === i && row.values.filter(Boolean).length > 1;
|
|
1117
|
-
const { title } = resolveDisplayFields(p.fields || p, displayConfig);
|
|
1118
|
-
if (row.type === "image") {
|
|
1119
|
-
return /* @__PURE__ */ jsx7("div", { style: { ...cellBase, justifyContent: "center", padding: "12px", borderLeft: i > 0 ? "1px solid var(--hsk-border, rgba(0,0,0,0.07))" : "none" }, children: /* @__PURE__ */ jsx7(ImageCell, { value: val, name: title }) }, i);
|
|
1120
|
-
}
|
|
1121
|
-
if (row.type === "availability") {
|
|
1122
|
-
return /* @__PURE__ */ jsx7("div", { style: { ...cellBase, borderLeft: i > 0 ? "1px solid var(--hsk-border, rgba(0,0,0,0.07))" : "none" }, children: /* @__PURE__ */ jsx7(AvailabilityCell, { value: val }) }, i);
|
|
1123
|
-
}
|
|
1124
|
-
return /* @__PURE__ */ jsx7(
|
|
1125
|
-
"div",
|
|
1126
|
-
{
|
|
1127
|
-
style: {
|
|
1128
|
-
...cellBase,
|
|
1129
|
-
fontWeight: isBest ? 700 : 400,
|
|
1130
|
-
color: isBest ? "var(--hsk-primary, #ea580c)" : row.type === "price" ? "var(--hsk-text, #374151)" : "var(--hsk-text, #111827)",
|
|
1131
|
-
borderLeft: i > 0 ? "1px solid var(--hsk-border, rgba(0,0,0,0.07))" : "none"
|
|
1132
|
-
},
|
|
1133
|
-
children: val ?? /* @__PURE__ */ jsx7("span", { style: { color: "#9ca3af" }, children: "\u2014" })
|
|
1134
|
-
},
|
|
1135
|
-
i
|
|
1136
|
-
);
|
|
1137
|
-
})
|
|
1138
|
-
]
|
|
1139
|
-
},
|
|
1140
|
-
rowIdx
|
|
1141
|
-
))
|
|
1142
|
-
]
|
|
1143
|
-
}
|
|
1144
|
-
);
|
|
1145
|
-
}
|
|
1146
|
-
|
|
1147
|
-
// src/components/MarkupEditor.tsx
|
|
1148
|
-
import { useEffect as useEffect3, useRef as useRef5, useState as useState5 } from "react";
|
|
1149
|
-
import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
1150
|
-
var COLORS = ["#111111", "#ff5a5a", "#ffb300", "#22c55e", "#06b6d4", "#d946ef", "#9ca3af"];
|
|
1151
|
-
var MAX_EXPORT_DIM = 1280;
|
|
1152
|
-
function MarkupEditor({ src, onCancel, onSend }) {
|
|
1153
|
-
const [img, setImg] = useState5(null);
|
|
1154
|
-
const [loadError, setLoadError] = useState5(false);
|
|
1155
|
-
const [tool, setTool] = useState5("pen");
|
|
1156
|
-
const [color, setColor] = useState5(COLORS[1]);
|
|
1157
|
-
const [actions, setActions] = useState5([]);
|
|
1158
|
-
const [pendingText, setPendingText] = useState5(null);
|
|
1159
|
-
const [textValue, setTextValue] = useState5("");
|
|
1160
|
-
const [instruction, setInstruction] = useState5("");
|
|
1161
|
-
const [exportError, setExportError] = useState5(false);
|
|
1162
|
-
const canvasRef = useRef5(null);
|
|
1163
|
-
const drawingRef = useRef5(null);
|
|
1164
|
-
const textInputRef = useRef5(null);
|
|
1165
|
-
useEffect3(() => {
|
|
1166
|
-
const el = new Image();
|
|
1167
|
-
el.crossOrigin = "anonymous";
|
|
1168
|
-
el.onload = () => setImg(el);
|
|
1169
|
-
el.onerror = () => setLoadError(true);
|
|
1170
|
-
el.src = src;
|
|
1171
|
-
}, [src]);
|
|
1172
|
-
const dims = (() => {
|
|
1173
|
-
if (!img) return { w: 0, h: 0 };
|
|
1174
|
-
const scale = Math.min(1, MAX_EXPORT_DIM / Math.max(img.naturalWidth, img.naturalHeight));
|
|
1175
|
-
return { w: Math.round(img.naturalWidth * scale), h: Math.round(img.naturalHeight * scale) };
|
|
1176
|
-
})();
|
|
1177
|
-
const markLayer = useRef5(null);
|
|
1178
|
-
const paint = (live) => {
|
|
1179
|
-
const canvas = canvasRef.current;
|
|
1180
|
-
if (!canvas || !img) return;
|
|
1181
|
-
const ctx = canvas.getContext("2d");
|
|
1182
|
-
if (!ctx) return;
|
|
1183
|
-
if (!markLayer.current) markLayer.current = document.createElement("canvas");
|
|
1184
|
-
const layer = markLayer.current;
|
|
1185
|
-
layer.width = canvas.width;
|
|
1186
|
-
layer.height = canvas.height;
|
|
1187
|
-
const lctx = layer.getContext("2d");
|
|
1188
|
-
const all = live ? [...actions, live] : actions;
|
|
1189
|
-
for (const a of all) {
|
|
1190
|
-
if (a.kind === "stroke") {
|
|
1191
|
-
lctx.save();
|
|
1192
|
-
lctx.globalCompositeOperation = a.tool === "eraser" ? "destination-out" : "source-over";
|
|
1193
|
-
lctx.strokeStyle = a.color;
|
|
1194
|
-
lctx.lineWidth = a.tool === "eraser" ? a.size * 3 : a.size;
|
|
1195
|
-
lctx.lineCap = "round";
|
|
1196
|
-
lctx.lineJoin = "round";
|
|
1197
|
-
lctx.beginPath();
|
|
1198
|
-
a.points.forEach((p, i) => i === 0 ? lctx.moveTo(p.x, p.y) : lctx.lineTo(p.x, p.y));
|
|
1199
|
-
if (a.points.length === 1) lctx.lineTo(a.points[0].x + 0.01, a.points[0].y);
|
|
1200
|
-
lctx.stroke();
|
|
1201
|
-
lctx.restore();
|
|
1202
|
-
} else {
|
|
1203
|
-
lctx.save();
|
|
1204
|
-
lctx.fillStyle = a.color;
|
|
1205
|
-
lctx.font = `600 ${a.size}px system-ui, sans-serif`;
|
|
1206
|
-
lctx.fillText(a.value, a.x, a.y);
|
|
1207
|
-
lctx.restore();
|
|
1208
|
-
}
|
|
1209
|
-
}
|
|
1210
|
-
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
1211
|
-
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
|
|
1212
|
-
ctx.drawImage(layer, 0, 0);
|
|
1213
|
-
};
|
|
1214
|
-
useEffect3(() => {
|
|
1215
|
-
paint();
|
|
1216
|
-
}, [img, actions, dims.w, dims.h]);
|
|
1217
|
-
useEffect3(() => {
|
|
1218
|
-
if (pendingText) textInputRef.current?.focus();
|
|
1219
|
-
}, [pendingText]);
|
|
1220
|
-
const toCanvasPoint = (e) => {
|
|
1221
|
-
const canvas = canvasRef.current;
|
|
1222
|
-
const rect = canvas.getBoundingClientRect();
|
|
1223
|
-
return {
|
|
1224
|
-
x: (e.clientX - rect.left) / rect.width * canvas.width,
|
|
1225
|
-
y: (e.clientY - rect.top) / rect.height * canvas.height
|
|
1226
|
-
};
|
|
1227
|
-
};
|
|
1228
|
-
const strokeSize = () => Math.max(4, Math.round(dims.w / 180));
|
|
1229
|
-
const textSize = () => Math.max(18, Math.round(dims.w / 28));
|
|
1230
|
-
const onPointerDown = (e) => {
|
|
1231
|
-
if (!img) return;
|
|
1232
|
-
const p = toCanvasPoint(e);
|
|
1233
|
-
if (tool === "text") {
|
|
1234
|
-
setPendingText({ x: p.x, y: p.y });
|
|
1235
|
-
setTextValue("");
|
|
1236
|
-
return;
|
|
1237
|
-
}
|
|
1238
|
-
e.target.setPointerCapture(e.pointerId);
|
|
1239
|
-
drawingRef.current = { kind: "stroke", tool, color, size: strokeSize(), points: [p] };
|
|
1240
|
-
paint(drawingRef.current);
|
|
1241
|
-
};
|
|
1242
|
-
const onPointerMove = (e) => {
|
|
1243
|
-
if (!drawingRef.current) return;
|
|
1244
|
-
drawingRef.current.points.push(toCanvasPoint(e));
|
|
1245
|
-
paint(drawingRef.current);
|
|
1246
|
-
};
|
|
1247
|
-
const onPointerUp = () => {
|
|
1248
|
-
if (!drawingRef.current) return;
|
|
1249
|
-
const done = drawingRef.current;
|
|
1250
|
-
drawingRef.current = null;
|
|
1251
|
-
setActions((prev) => [...prev, done]);
|
|
1252
|
-
};
|
|
1253
|
-
const commitText = () => {
|
|
1254
|
-
if (pendingText && textValue.trim()) {
|
|
1255
|
-
setActions((prev) => [...prev, { kind: "text", x: pendingText.x, y: pendingText.y, color, value: textValue.trim(), size: textSize() }]);
|
|
1256
|
-
}
|
|
1257
|
-
setPendingText(null);
|
|
1258
|
-
setTextValue("");
|
|
1259
|
-
};
|
|
1260
|
-
const handleSend = () => {
|
|
1261
|
-
const canvas = canvasRef.current;
|
|
1262
|
-
if (!canvas) return;
|
|
1263
|
-
try {
|
|
1264
|
-
paint();
|
|
1265
|
-
const dataUrl = canvas.toDataURL("image/jpeg", 0.92);
|
|
1266
|
-
onSend(dataUrl, instruction.trim());
|
|
1267
|
-
} catch {
|
|
1268
|
-
setExportError(true);
|
|
1269
|
-
}
|
|
1270
|
-
};
|
|
1271
|
-
const hasMarks = actions.length > 0;
|
|
1272
|
-
return /* @__PURE__ */ jsxs7("div", { className: "hsk-markup", role: "dialog", "aria-label": "Mark up image", children: [
|
|
1273
|
-
/* @__PURE__ */ jsxs7("div", { className: "hsk-markup-head", children: [
|
|
1274
|
-
/* @__PURE__ */ jsx8("span", { className: "hsk-markup-title", children: "Mark where you want the change" }),
|
|
1275
|
-
/* @__PURE__ */ jsx8("button", { className: "hsk-markup-cancel", onClick: onCancel, children: "Cancel" })
|
|
1276
|
-
] }),
|
|
1277
|
-
/* @__PURE__ */ jsx8("div", { className: "hsk-markup-stage", children: loadError ? /* @__PURE__ */ jsx8("div", { className: "hsk-markup-error", children: "This image can't be edited here." }) : !img ? /* @__PURE__ */ jsx8("div", { className: "hsk-markup-loading", children: "Loading image\u2026" }) : /* @__PURE__ */ jsxs7("div", { className: "hsk-markup-canvas-wrap", children: [
|
|
1278
|
-
/* @__PURE__ */ jsx8(
|
|
1279
|
-
"canvas",
|
|
1280
|
-
{
|
|
1281
|
-
ref: canvasRef,
|
|
1282
|
-
width: dims.w,
|
|
1283
|
-
height: dims.h,
|
|
1284
|
-
className: `hsk-markup-canvas hsk-markup-canvas--${tool}`,
|
|
1285
|
-
onPointerDown,
|
|
1286
|
-
onPointerMove,
|
|
1287
|
-
onPointerUp,
|
|
1288
|
-
onPointerLeave: onPointerUp
|
|
1289
|
-
}
|
|
1290
|
-
),
|
|
1291
|
-
pendingText && canvasRef.current && /* @__PURE__ */ jsx8(
|
|
1292
|
-
"input",
|
|
1293
|
-
{
|
|
1294
|
-
ref: textInputRef,
|
|
1295
|
-
className: "hsk-markup-textinput",
|
|
1296
|
-
style: {
|
|
1297
|
-
left: `${pendingText.x / dims.w * 100}%`,
|
|
1298
|
-
top: `${pendingText.y / dims.h * 100}%`,
|
|
1299
|
-
color
|
|
1300
|
-
},
|
|
1301
|
-
value: textValue,
|
|
1302
|
-
placeholder: "Type, then Enter",
|
|
1303
|
-
onChange: (e) => setTextValue(e.target.value),
|
|
1304
|
-
onKeyDown: (e) => {
|
|
1305
|
-
if (e.key === "Enter") commitText();
|
|
1306
|
-
if (e.key === "Escape") {
|
|
1307
|
-
setPendingText(null);
|
|
1308
|
-
setTextValue("");
|
|
1309
|
-
}
|
|
1310
|
-
},
|
|
1311
|
-
onBlur: commitText
|
|
1312
|
-
}
|
|
1313
|
-
)
|
|
1314
|
-
] }) }),
|
|
1315
|
-
/* @__PURE__ */ jsxs7("div", { className: "hsk-markup-tools", children: [
|
|
1316
|
-
/* @__PURE__ */ jsx8("div", { className: "hsk-markup-colors", children: COLORS.map((c) => /* @__PURE__ */ jsx8(
|
|
1317
|
-
"button",
|
|
1318
|
-
{
|
|
1319
|
-
className: `hsk-markup-color${color === c ? " hsk-markup-color--on" : ""}`,
|
|
1320
|
-
style: { background: c },
|
|
1321
|
-
onClick: () => {
|
|
1322
|
-
setColor(c);
|
|
1323
|
-
if (tool === "eraser") setTool("pen");
|
|
1324
|
-
},
|
|
1325
|
-
"aria-label": `Colour ${c}`
|
|
1326
|
-
},
|
|
1327
|
-
c
|
|
1328
|
-
)) }),
|
|
1329
|
-
/* @__PURE__ */ jsxs7("div", { className: "hsk-markup-actions", children: [
|
|
1330
|
-
/* @__PURE__ */ jsx8("button", { className: `hsk-markup-tool${tool === "pen" ? " hsk-markup-tool--on" : ""}`, onClick: () => setTool("pen"), children: "Sketch" }),
|
|
1331
|
-
/* @__PURE__ */ jsx8("button", { className: `hsk-markup-tool${tool === "text" ? " hsk-markup-tool--on" : ""}`, onClick: () => setTool("text"), children: "Text" }),
|
|
1332
|
-
/* @__PURE__ */ jsx8("button", { className: `hsk-markup-tool${tool === "eraser" ? " hsk-markup-tool--on" : ""}`, onClick: () => setTool("eraser"), children: "Eraser" }),
|
|
1333
|
-
/* @__PURE__ */ jsx8("button", { className: "hsk-markup-tool", onClick: () => setActions((prev) => prev.slice(0, -1)), disabled: !hasMarks, children: "Undo" }),
|
|
1334
|
-
/* @__PURE__ */ jsx8("button", { className: "hsk-markup-tool", onClick: () => setActions([]), disabled: !hasMarks, children: "Clear" })
|
|
1335
|
-
] })
|
|
1336
|
-
] }),
|
|
1337
|
-
/* @__PURE__ */ jsxs7("div", { className: "hsk-markup-send", children: [
|
|
1338
|
-
/* @__PURE__ */ jsx8(
|
|
1339
|
-
"input",
|
|
1340
|
-
{
|
|
1341
|
-
className: "hsk-markup-instruction",
|
|
1342
|
-
value: instruction,
|
|
1343
|
-
placeholder: "Describe the change \u2014 e.g. add the sofa here",
|
|
1344
|
-
onChange: (e) => setInstruction(e.target.value),
|
|
1345
|
-
onKeyDown: (e) => {
|
|
1346
|
-
if (e.key === "Enter" && (hasMarks || instruction.trim())) handleSend();
|
|
1347
|
-
}
|
|
1348
|
-
}
|
|
1349
|
-
),
|
|
1350
|
-
/* @__PURE__ */ jsx8(
|
|
1351
|
-
"button",
|
|
1352
|
-
{
|
|
1353
|
-
className: "hsk-markup-go",
|
|
1354
|
-
onClick: handleSend,
|
|
1355
|
-
disabled: !img || !hasMarks && !instruction.trim(),
|
|
1356
|
-
children: "Send"
|
|
1357
|
-
}
|
|
1358
|
-
)
|
|
1359
|
-
] }),
|
|
1360
|
-
exportError && /* @__PURE__ */ jsx8("div", { className: "hsk-markup-error", children: "Couldn't process this image \u2014 try a newer visualization." })
|
|
1361
|
-
] });
|
|
1362
|
-
}
|
|
1363
|
-
|
|
1364
|
-
// src/components/KikuButton.tsx
|
|
1365
|
-
import { Fragment as Fragment3, jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1366
|
-
var KikuIcon = ({ className, size = 18 }) => /* @__PURE__ */ jsx9(
|
|
1367
|
-
"svg",
|
|
1368
|
-
{
|
|
1369
|
-
className: cn("hsk-brand-mark", className),
|
|
1370
|
-
width: size,
|
|
1371
|
-
height: size,
|
|
1372
|
-
viewBox: "0 0 100 100",
|
|
1373
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
1374
|
-
"aria-label": "kiku",
|
|
1375
|
-
children: /* @__PURE__ */ jsxs8("g", { transform: "translate(22.7 19) scale(0.62)", fill: "currentColor", fillRule: "evenodd", children: [
|
|
1376
|
-
/* @__PURE__ */ jsx9("path", { d: "M39.4 10.4 Q44 0 48.6 10.4 L86.1 95.8 Q88 100 83.4 100 L4.6 100 Q0 100 1.9 95.8 Z M24 100 L24 65 Q24 60 27.4 56.3 Q44 38 60.6 56.3 Q64 60 64 65 L64 100 Z" }),
|
|
1377
|
-
/* @__PURE__ */ jsx9("circle", { cx: "55", cy: "82", r: "3.4" })
|
|
1378
|
-
] })
|
|
1379
|
-
}
|
|
1380
|
-
);
|
|
1381
|
-
var SparkleIcon2 = KikuIcon;
|
|
1382
|
-
var StopIcon = () => /* @__PURE__ */ jsx9("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx9("rect", { x: "5", y: "5", width: "14", height: "14", rx: "2" }) });
|
|
1383
|
-
var ExternalIcon = () => /* @__PURE__ */ jsxs8("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1384
|
-
/* @__PURE__ */ jsx9("path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }),
|
|
1385
|
-
/* @__PURE__ */ jsx9("polyline", { points: "15 3 21 3 21 9" }),
|
|
1386
|
-
/* @__PURE__ */ jsx9("line", { x1: "10", y1: "14", x2: "21", y2: "3" })
|
|
1387
|
-
] });
|
|
1388
|
-
var ContinueIcon = () => /* @__PURE__ */ jsx9("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx9("path", { d: "M8 5v14l11-7z" }) });
|
|
1389
|
-
var CloseIcon = () => /* @__PURE__ */ jsxs8("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1390
|
-
/* @__PURE__ */ jsx9("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
1391
|
-
/* @__PURE__ */ jsx9("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
1392
|
-
] });
|
|
1393
|
-
var ChevronRightIcon = () => /* @__PURE__ */ jsx9("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx9("path", { d: "m9 18 6-6-6-6" }) });
|
|
1394
|
-
var HistoryIcon = () => /* @__PURE__ */ jsxs8("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1395
|
-
/* @__PURE__ */ jsx9("path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }),
|
|
1396
|
-
/* @__PURE__ */ jsx9("path", { d: "M3 3v5h5" }),
|
|
1397
|
-
/* @__PURE__ */ jsx9("path", { d: "M12 7v5l4 2" })
|
|
1398
|
-
] });
|
|
1399
|
-
var BookmarkIcon = () => /* @__PURE__ */ jsx9("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx9("path", { d: "M19 21 12 16l-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z" }) });
|
|
1400
|
-
var TrashIcon = () => /* @__PURE__ */ jsxs8("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1401
|
-
/* @__PURE__ */ jsx9("path", { d: "M3 6h18" }),
|
|
1402
|
-
/* @__PURE__ */ jsx9("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
|
|
1403
|
-
] });
|
|
1404
|
-
var PaperclipIcon = () => /* @__PURE__ */ jsx9("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx9("path", { d: "m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48" }) });
|
|
1405
|
-
var MicIcon2 = () => /* @__PURE__ */ jsxs8("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1406
|
-
/* @__PURE__ */ jsx9("path", { d: "M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3z" }),
|
|
1407
|
-
/* @__PURE__ */ jsx9("path", { d: "M19 10v2a7 7 0 0 1-14 0v-2" }),
|
|
1408
|
-
/* @__PURE__ */ jsx9("line", { x1: "12", y1: "19", x2: "12", y2: "22" })
|
|
1409
|
-
] });
|
|
1410
|
-
var MicOffIcon = () => /* @__PURE__ */ jsxs8("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1411
|
-
/* @__PURE__ */ jsx9("line", { x1: "2", y1: "2", x2: "22", y2: "22" }),
|
|
1412
|
-
/* @__PURE__ */ jsx9("path", { d: "M18.89 13.23A7.12 7.12 0 0 0 19 12v-2" }),
|
|
1413
|
-
/* @__PURE__ */ jsx9("path", { d: "M5 10v2a7 7 0 0 0 12 5" }),
|
|
1414
|
-
/* @__PURE__ */ jsx9("path", { d: "M15 9.34V5a3 3 0 0 0-5.68-1.33" }),
|
|
1415
|
-
/* @__PURE__ */ jsx9("path", { d: "M9 9v3a3 3 0 0 0 5.12 2.12" }),
|
|
1416
|
-
/* @__PURE__ */ jsx9("line", { x1: "12", y1: "19", x2: "12", y2: "22" })
|
|
1417
|
-
] });
|
|
1418
|
-
var DEFAULT_CHIPS = [];
|
|
1419
|
-
function extractName(raw) {
|
|
1420
|
-
let s = raw.trim();
|
|
1421
|
-
if (!s || s.length > 40 || s.includes("?")) return null;
|
|
1422
|
-
s = s.replace(/^(hi|hey|hello|yo)[,!.\s]+/i, "");
|
|
1423
|
-
s = s.replace(/^(i['’]?m|im|my name is|call me|it['’]?s|this is|name['’]?s)\s+/i, "");
|
|
1424
|
-
s = s.trim().replace(/[.!,]+$/, "");
|
|
1425
|
-
const words = s.split(/\s+/);
|
|
1426
|
-
if (words.length === 0 || words.length > 3) return null;
|
|
1427
|
-
if (!/^[\p{L}][\p{L}\-'’ ]{0,30}$/u.test(s)) return null;
|
|
1428
|
-
const q = s.toLowerCase();
|
|
1429
|
-
const queryish = ["phone", "laptop", "tv", "cheap", "best", "under", "buy", "search", "find", "show", "need", "want", "price", "sofa", "shoe", "headphone", "camera", "gift", "help"];
|
|
1430
|
-
if (queryish.some((w) => q.includes(w))) return null;
|
|
1431
|
-
const name = words[0];
|
|
1432
|
-
return name.charAt(0).toUpperCase() + name.slice(1);
|
|
1433
|
-
}
|
|
1434
|
-
function parseAtKiku(raw) {
|
|
1435
|
-
const trimmed = raw.trim();
|
|
1436
|
-
if (!/^@kiku\b/i.test(trimmed)) return null;
|
|
1437
|
-
const rest = trimmed.slice(5).trim();
|
|
1438
|
-
if (rest === "" || /^(capture|save)\b/i.test(rest)) {
|
|
1439
|
-
return {
|
|
1440
|
-
intent: "capture",
|
|
1441
|
-
cleanQuery: rest.replace(/^(capture|save)\s*/i, "").trim() || trimmed
|
|
1442
|
-
};
|
|
1443
|
-
}
|
|
1444
|
-
if (/^(history|what have you|show my|my items|what did you|saved|captures|recall)\b/i.test(rest)) {
|
|
1445
|
-
return { intent: "view_history", cleanQuery: "show my saved items" };
|
|
1446
|
-
}
|
|
1447
|
-
if (/^(delete|forget|remove|unsave)\b/i.test(rest)) {
|
|
1448
|
-
return {
|
|
1449
|
-
intent: "delete",
|
|
1450
|
-
cleanQuery: rest.replace(/^(delete|forget|remove|unsave)\s*/i, "").trim() || trimmed
|
|
1451
|
-
};
|
|
1452
|
-
}
|
|
1453
|
-
return { intent: "capture", cleanQuery: rest || trimmed };
|
|
1454
|
-
}
|
|
1455
|
-
function KikuPickerMenu({
|
|
1456
|
-
sources,
|
|
1457
|
-
referencedIds,
|
|
1458
|
-
defaultCurrency,
|
|
1459
|
-
onCapture,
|
|
1460
|
-
onCaptureAll,
|
|
1461
|
-
onViewHistory,
|
|
1462
|
-
onDelete,
|
|
1463
|
-
onDismiss
|
|
1464
|
-
}) {
|
|
1465
|
-
const discussed = sources.filter((s) => s.id && referencedIds.includes(s.id));
|
|
1466
|
-
return /* @__PURE__ */ jsxs8(
|
|
1467
|
-
"div",
|
|
1468
|
-
{
|
|
1469
|
-
className: "hsk-kiku-picker",
|
|
1470
|
-
role: "menu",
|
|
1471
|
-
"aria-label": "@kiku commands",
|
|
1472
|
-
onMouseDown: (e) => e.preventDefault(),
|
|
1473
|
-
children: [
|
|
1474
|
-
discussed.map((src, i) => /* @__PURE__ */ jsxs8(
|
|
1475
|
-
"button",
|
|
1476
|
-
{
|
|
1477
|
-
className: "hsk-kiku-picker-item",
|
|
1478
|
-
role: "menuitem",
|
|
1479
|
-
onClick: () => {
|
|
1480
|
-
onCapture(src);
|
|
1481
|
-
onDismiss();
|
|
1482
|
-
},
|
|
1483
|
-
children: [
|
|
1484
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-kiku-picker-icon", children: src.image ? /* @__PURE__ */ jsx9("img", { src: src.image, alt: "" }) : /* @__PURE__ */ jsx9(BookmarkIcon, {}) }),
|
|
1485
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-kiku-picker-item-name", children: src.name }),
|
|
1486
|
-
src.price && /* @__PURE__ */ jsxs8("span", { className: "hsk-kiku-picker-item-price", children: [
|
|
1487
|
-
src.currency ?? defaultCurrency,
|
|
1488
|
-
" ",
|
|
1489
|
-
parseFloat(String(src.price).replace(/[^0-9.]/g, "") || "0").toLocaleString()
|
|
1490
|
-
] })
|
|
1491
|
-
]
|
|
1492
|
-
},
|
|
1493
|
-
src.id ?? i
|
|
1494
|
-
)),
|
|
1495
|
-
discussed.length > 1 && /* @__PURE__ */ jsxs8(
|
|
1496
|
-
"button",
|
|
1497
|
-
{
|
|
1498
|
-
className: "hsk-kiku-picker-item",
|
|
1499
|
-
role: "menuitem",
|
|
1500
|
-
onClick: () => {
|
|
1501
|
-
onCaptureAll(discussed);
|
|
1502
|
-
onDismiss();
|
|
1503
|
-
},
|
|
1504
|
-
children: [
|
|
1505
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-kiku-picker-icon", children: /* @__PURE__ */ jsx9(BookmarkIcon, {}) }),
|
|
1506
|
-
/* @__PURE__ */ jsxs8("span", { className: "hsk-kiku-picker-item-name", children: [
|
|
1507
|
-
"Capture all (",
|
|
1508
|
-
discussed.length,
|
|
1509
|
-
")"
|
|
1510
|
-
] })
|
|
1511
|
-
]
|
|
1512
|
-
}
|
|
1513
|
-
),
|
|
1514
|
-
discussed.length === 0 && /* @__PURE__ */ jsxs8(
|
|
1515
|
-
"button",
|
|
1516
|
-
{
|
|
1517
|
-
className: "hsk-kiku-picker-item",
|
|
1518
|
-
role: "menuitem",
|
|
1519
|
-
onClick: () => {
|
|
1520
|
-
onCapture({ name: "current page", id: void 0 });
|
|
1521
|
-
onDismiss();
|
|
1522
|
-
},
|
|
1523
|
-
children: [
|
|
1524
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-kiku-picker-icon", children: /* @__PURE__ */ jsx9(BookmarkIcon, {}) }),
|
|
1525
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-kiku-picker-item-name", children: "Capture current page" })
|
|
1526
|
-
]
|
|
1527
|
-
}
|
|
1528
|
-
),
|
|
1529
|
-
/* @__PURE__ */ jsxs8(
|
|
1530
|
-
"button",
|
|
1531
|
-
{
|
|
1532
|
-
className: "hsk-kiku-picker-item",
|
|
1533
|
-
role: "menuitem",
|
|
1534
|
-
onClick: () => {
|
|
1535
|
-
onViewHistory();
|
|
1536
|
-
onDismiss();
|
|
1537
|
-
},
|
|
1538
|
-
children: [
|
|
1539
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-kiku-picker-icon", children: /* @__PURE__ */ jsx9(HistoryIcon, {}) }),
|
|
1540
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-kiku-picker-item-name", children: "What have you saved?" })
|
|
1541
|
-
]
|
|
1542
|
-
}
|
|
1543
|
-
),
|
|
1544
|
-
/* @__PURE__ */ jsxs8(
|
|
1545
|
-
"button",
|
|
1546
|
-
{
|
|
1547
|
-
className: "hsk-kiku-picker-item",
|
|
1548
|
-
role: "menuitem",
|
|
1549
|
-
onClick: () => {
|
|
1550
|
-
onDelete();
|
|
1551
|
-
onDismiss();
|
|
1552
|
-
},
|
|
1553
|
-
children: [
|
|
1554
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-kiku-picker-icon", children: /* @__PURE__ */ jsx9(TrashIcon, {}) }),
|
|
1555
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-kiku-picker-item-name", children: "Delete this" })
|
|
1556
|
-
]
|
|
1557
|
-
}
|
|
1558
|
-
)
|
|
1559
|
-
]
|
|
1560
|
-
}
|
|
1561
|
-
);
|
|
1562
|
-
}
|
|
1563
|
-
function AtPickerMenu({ onSelect, onDismiss }) {
|
|
1564
|
-
return /* @__PURE__ */ jsx9(
|
|
1565
|
-
"div",
|
|
1566
|
-
{
|
|
1567
|
-
className: "hsk-kiku-picker",
|
|
1568
|
-
role: "menu",
|
|
1569
|
-
"aria-label": "Extensions",
|
|
1570
|
-
onMouseDown: (e) => e.preventDefault(),
|
|
1571
|
-
children: /* @__PURE__ */ jsxs8(
|
|
1572
|
-
"button",
|
|
1573
|
-
{
|
|
1574
|
-
className: "hsk-kiku-picker-item",
|
|
1575
|
-
role: "menuitem",
|
|
1576
|
-
onClick: () => onSelect("@kiku"),
|
|
1577
|
-
children: [
|
|
1578
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-kiku-picker-icon hsk-kiku-picker-icon--accent", children: /* @__PURE__ */ jsx9(SparkleIcon2, {}) }),
|
|
1579
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-kiku-picker-item-name", children: "kiku \u2014 capture & remember" })
|
|
1580
|
-
]
|
|
1581
|
-
}
|
|
1582
|
-
)
|
|
1583
|
-
}
|
|
1584
|
-
);
|
|
1585
|
-
}
|
|
1586
|
-
function SourceImg({ src, alt, onImageClick }) {
|
|
1587
|
-
const [failed, setFailed] = useState6(false);
|
|
1588
|
-
if (failed) {
|
|
1589
|
-
return /* @__PURE__ */ jsx9("div", { style: { width: "100%", height: "100%", display: "flex", alignItems: "center", justifyContent: "center", background: "var(--hsk-chat-source-bg, rgba(0,0,0,.04))", color: "var(--hsk-chat-muted, #888)" }, children: /* @__PURE__ */ jsx9(SparkleIcon2, {}) });
|
|
1590
|
-
}
|
|
1591
|
-
return /* @__PURE__ */ jsx9(
|
|
1592
|
-
"img",
|
|
1593
|
-
{
|
|
1594
|
-
src,
|
|
1595
|
-
alt: alt ?? "",
|
|
1596
|
-
onError: () => setFailed(true),
|
|
1597
|
-
onClick: onImageClick ? (e) => {
|
|
1598
|
-
e.stopPropagation();
|
|
1599
|
-
onImageClick(src);
|
|
1600
|
-
} : void 0
|
|
1601
|
-
}
|
|
1602
|
-
);
|
|
1603
|
-
}
|
|
1604
|
-
function SourcesCarousel({ sources, defaultCurrency, onSelectSource, onImageClick, referencedIds = [], compact = false }) {
|
|
1605
|
-
const client = useAkropolysContext3();
|
|
1606
|
-
const isProperty = client?.vertical === "property";
|
|
1607
|
-
const railRef = useRef6(null);
|
|
1608
|
-
const [showNext, setShowNext] = useState6(false);
|
|
1609
|
-
const measure = useCallback2(() => {
|
|
1610
|
-
const el = railRef.current;
|
|
1611
|
-
if (!el) return;
|
|
1612
|
-
const atEnd = el.scrollLeft + el.clientWidth >= el.scrollWidth - 8;
|
|
1613
|
-
setShowNext(el.scrollWidth > el.clientWidth + 4 && !atEnd);
|
|
1614
|
-
}, []);
|
|
1615
|
-
useEffect4(() => {
|
|
1616
|
-
measure();
|
|
1617
|
-
const el = railRef.current;
|
|
1618
|
-
if (!el) return;
|
|
1619
|
-
const ro = new ResizeObserver(measure);
|
|
1620
|
-
ro.observe(el);
|
|
1621
|
-
el.addEventListener("scroll", measure, { passive: true });
|
|
1622
|
-
return () => {
|
|
1623
|
-
ro.disconnect();
|
|
1624
|
-
el.removeEventListener("scroll", measure);
|
|
1625
|
-
};
|
|
1626
|
-
}, [measure, sources]);
|
|
1627
|
-
const scrollNext = () => {
|
|
1628
|
-
railRef.current?.scrollBy({ left: 170, behavior: "smooth" });
|
|
1629
|
-
};
|
|
1630
|
-
const display = sources.filter((s) => s.id && referencedIds.includes(s.id));
|
|
1631
|
-
if (display.length === 0) return null;
|
|
1632
|
-
return /* @__PURE__ */ jsxs8("div", { className: cn("hsk-cb-sources-wrap", compact && "hsk-cb-sources-wrap--compact"), children: [
|
|
1633
|
-
/* @__PURE__ */ jsx9("div", { className: "hsk-cb-sources", ref: railRef, children: display.map((src, si) => {
|
|
1634
|
-
const isReferenced = !!(src.id && referencedIds.includes(src.id));
|
|
1635
|
-
return /* @__PURE__ */ jsxs8(
|
|
1636
|
-
"div",
|
|
1637
|
-
{
|
|
1638
|
-
className: cn("hsk-cb-source", isReferenced && "hsk-cb-source--referenced"),
|
|
1639
|
-
style: { animationDelay: `${si * 50}ms` },
|
|
1640
|
-
onClick: () => onSelectSource?.(src),
|
|
1641
|
-
children: [
|
|
1642
|
-
src.image ? /* @__PURE__ */ jsxs8("div", { className: "hsk-cb-src-imgwrap", style: { position: "relative" }, children: [
|
|
1643
|
-
/* @__PURE__ */ jsx9(SourceImg, { src: src.image, alt: src.name, onImageClick }),
|
|
1644
|
-
isReferenced && /* @__PURE__ */ jsx9("div", { className: "hsk-cb-source-ref-badge", title: "Featured in response", children: /* @__PURE__ */ jsx9(SparkleIcon2, { size: 10 }) }),
|
|
1645
|
-
isProperty && /* @__PURE__ */ jsx9("div", { style: {
|
|
1646
|
-
position: "absolute",
|
|
1647
|
-
top: "6px",
|
|
1648
|
-
right: "6px",
|
|
1649
|
-
background: "rgba(14, 14, 15, 0.75)",
|
|
1650
|
-
backdropFilter: "blur(4px)",
|
|
1651
|
-
borderRadius: "50%",
|
|
1652
|
-
width: "24px",
|
|
1653
|
-
height: "24px",
|
|
1654
|
-
display: "flex",
|
|
1655
|
-
alignItems: "center",
|
|
1656
|
-
justifyContent: "center",
|
|
1657
|
-
color: "#fbbf24",
|
|
1658
|
-
// Gold sparkle badge
|
|
1659
|
-
boxShadow: "0 2px 4px rgba(0,0,0,0.2)"
|
|
1660
|
-
}, children: /* @__PURE__ */ jsx9(SparkleIcon2, { size: 12 }) })
|
|
1661
|
-
] }) : /* @__PURE__ */ jsxs8("div", { className: "hsk-cb-src-imgwrap-empty", style: { position: "relative" }, children: [
|
|
1662
|
-
/* @__PURE__ */ jsx9(SparkleIcon2, {}),
|
|
1663
|
-
isReferenced && /* @__PURE__ */ jsx9("div", { className: "hsk-cb-source-ref-badge", title: "Featured in response", children: /* @__PURE__ */ jsx9(SparkleIcon2, { size: 10 }) })
|
|
1664
|
-
] }),
|
|
1665
|
-
/* @__PURE__ */ jsxs8("div", { className: "hsk-cb-src-info", children: [
|
|
1666
|
-
/* @__PURE__ */ jsx9("div", { className: "hsk-cb-src-name", children: src.name }),
|
|
1667
|
-
src.price && /* @__PURE__ */ jsxs8("div", { className: "hsk-cb-src-price", children: [
|
|
1668
|
-
src.currency ?? defaultCurrency,
|
|
1669
|
-
" ",
|
|
1670
|
-
parseFloat(String(src.price).replace(/[^0-9.]/g, "") || "0").toLocaleString()
|
|
1671
|
-
] })
|
|
1672
|
-
] })
|
|
1673
|
-
]
|
|
1674
|
-
},
|
|
1675
|
-
src.id ?? si
|
|
1676
|
-
);
|
|
1677
|
-
}) }),
|
|
1678
|
-
showNext && /* @__PURE__ */ jsxs8(Fragment3, { children: [
|
|
1679
|
-
/* @__PURE__ */ jsx9(
|
|
1680
|
-
"div",
|
|
1681
|
-
{
|
|
1682
|
-
className: "hsk-cb-sources-fade",
|
|
1683
|
-
style: { background: "linear-gradient(to right, transparent, var(--hsk-fade-bg, #0e0e0f))" }
|
|
1684
|
-
}
|
|
1685
|
-
),
|
|
1686
|
-
/* @__PURE__ */ jsx9("button", { className: "hsk-cb-sources-next", onClick: scrollNext, "aria-label": "See more", children: /* @__PURE__ */ jsx9(ChevronRightIcon, {}) })
|
|
1687
|
-
] })
|
|
1688
|
-
] });
|
|
1689
|
-
}
|
|
1690
|
-
function stripMarkdownTables(content) {
|
|
1691
|
-
const lines = content.split("\n");
|
|
1692
|
-
const out = [];
|
|
1693
|
-
for (const line of lines) {
|
|
1694
|
-
if (line.trim().startsWith("|")) continue;
|
|
1695
|
-
out.push(line);
|
|
1696
|
-
}
|
|
1697
|
-
return out.join("\n").replace(/\n{3,}/g, "\n\n").trim();
|
|
1698
|
-
}
|
|
1699
|
-
function SmartContextPills({
|
|
1700
|
-
intent,
|
|
1701
|
-
sources,
|
|
1702
|
-
onSend,
|
|
1703
|
-
loading
|
|
1704
|
-
}) {
|
|
1705
|
-
const client = useAkropolysContext3();
|
|
1706
|
-
const isProperty = client?.vertical === "property";
|
|
1707
|
-
if (!intent) return null;
|
|
1708
|
-
const pills = [];
|
|
1709
|
-
const cheapest = sources.length > 0 ? sources.reduce((min, s) => {
|
|
1710
|
-
const p = parseFloat(String(s.price ?? "").replace(/[^0-9.]/g, ""));
|
|
1711
|
-
const m = parseFloat(String(min.price ?? "").replace(/[^0-9.]/g, ""));
|
|
1712
|
-
return !isNaN(p) && (isNaN(m) || p < m) ? s : min;
|
|
1713
|
-
}, sources[0]) : null;
|
|
1714
|
-
const firstName = sources[0]?.name ?? "";
|
|
1715
|
-
const firstTwo = sources.slice(0, 2).map((s) => s.name);
|
|
1716
|
-
if (intent === "search" && sources.length > 0) {
|
|
1717
|
-
if (firstTwo.length >= 2) {
|
|
1718
|
-
pills.push({
|
|
1719
|
-
emoji: "\u2696\uFE0F",
|
|
1720
|
-
label: "Compare top 2",
|
|
1721
|
-
query: `Compare the ${firstTwo[0]} and ${firstTwo[1]}`
|
|
1722
|
-
});
|
|
1723
|
-
}
|
|
1724
|
-
if (cheapest && !isProperty && cheapest.name) {
|
|
1725
|
-
const short = cheapest.name.split(" ").slice(0, 3).join(" ");
|
|
1726
|
-
pills.push({
|
|
1727
|
-
emoji: "\u{1F4A1}",
|
|
1728
|
-
label: `More on ${short}`,
|
|
1729
|
-
query: `Tell me more about the ${cheapest.name}`
|
|
1730
|
-
});
|
|
1731
|
-
}
|
|
1732
|
-
if (isProperty) {
|
|
1733
|
-
pills.push({ emoji: "\u{1F4B0}", label: "Under KSh 5M", query: "Show me options under KSh 5,000,000" });
|
|
1734
|
-
} else {
|
|
1735
|
-
pills.push({ emoji: "\u{1F4B0}", label: "Under KSh 20K", query: "Show me options under KSh 20,000" });
|
|
1736
|
-
}
|
|
1737
|
-
} else if (intent === "compare" && sources.length > 0) {
|
|
1738
|
-
if (firstName) {
|
|
1739
|
-
pills.push({
|
|
1740
|
-
emoji: "\u{1F50D}",
|
|
1741
|
-
label: "Similar options",
|
|
1742
|
-
query: isProperty ? `Show me more properties similar to the ${firstName}` : `Show me more products similar to the ${firstName}`
|
|
1743
|
-
});
|
|
1744
|
-
}
|
|
1745
|
-
pills.push({ emoji: "\u{1F4A1}", label: "Which is best?", query: "Which one would you recommend and why?" });
|
|
1746
|
-
} else if (intent === "specs" && sources.length > 0) {
|
|
1747
|
-
if (firstName) {
|
|
1748
|
-
pills.push({
|
|
1749
|
-
emoji: "\u{1F504}",
|
|
1750
|
-
label: "Find alternatives",
|
|
1751
|
-
query: `What are good alternatives to the ${firstName}?`
|
|
1752
|
-
});
|
|
1753
|
-
}
|
|
1754
|
-
} else if (intent === "general") {
|
|
1755
|
-
if (isProperty) {
|
|
1756
|
-
pills.push({ emoji: "\u{1F50D}", label: "Show popular listings", query: "What are your most popular properties?" });
|
|
1757
|
-
} else {
|
|
1758
|
-
pills.push({ emoji: "\u{1F50D}", label: "Show popular items", query: "What are your most popular products?" });
|
|
1759
|
-
}
|
|
1760
|
-
pills.push({ emoji: "\u{1F4A1}", label: "Recommend something", query: "What do you recommend for me?" });
|
|
1761
|
-
}
|
|
1762
|
-
if (pills.length === 0) return null;
|
|
1763
|
-
return /* @__PURE__ */ jsx9("div", { className: "hsk-action-pills", children: pills.map((pill) => /* @__PURE__ */ jsxs8(
|
|
1764
|
-
"button",
|
|
1765
|
-
{
|
|
1766
|
-
className: "hsk-action-pill",
|
|
1767
|
-
onClick: () => onSend(pill.query),
|
|
1768
|
-
disabled: loading,
|
|
1769
|
-
children: [
|
|
1770
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-pill-emoji", children: pill.emoji }),
|
|
1771
|
-
pill.label
|
|
1772
|
-
]
|
|
1773
|
-
},
|
|
1774
|
-
pill.query
|
|
1775
|
-
)) });
|
|
1776
|
-
}
|
|
1777
|
-
var getFriendlyError = (err) => {
|
|
1778
|
-
let str = "";
|
|
1779
|
-
if (typeof err === "string") str = err;
|
|
1780
|
-
else if (err && typeof err === "object" && err.message) str = err.message;
|
|
1781
|
-
else try {
|
|
1782
|
-
str = JSON.stringify(err);
|
|
1783
|
-
} catch {
|
|
1784
|
-
str = String(err);
|
|
1785
|
-
}
|
|
1786
|
-
const lower = str.toLowerCase();
|
|
1787
|
-
if (lower.includes("429") || lower.includes("too many requests") || lower.includes("requests per minute limit exceeded") || lower.includes("too_many_requests_error") || lower.includes("request_quota_exceeded") || lower.includes("quota")) {
|
|
1788
|
-
return "The assistant is currently receiving too many requests. Please try again in a few moments.";
|
|
1789
|
-
}
|
|
1790
|
-
if (lower.includes("token limit")) {
|
|
1791
|
-
return "You've reached your usage limit. Please update your billing limits in your dashboard to continue.";
|
|
1792
|
-
}
|
|
1793
|
-
if (lower.includes("failed to fetch") || lower.includes("networkerror") || lower.includes("request failed")) {
|
|
1794
|
-
return "The assistant couldn't respond just now \u2014 please try again in a moment.";
|
|
1795
|
-
}
|
|
1796
|
-
try {
|
|
1797
|
-
const parsed = JSON.parse(str);
|
|
1798
|
-
return parsed.error || parsed.message || str;
|
|
1799
|
-
} catch {
|
|
1800
|
-
return str;
|
|
1801
|
-
}
|
|
1802
|
-
};
|
|
1803
|
-
var KIKU_KEY_REVEAL_SECONDS = 60;
|
|
1804
|
-
function parseThinking(text) {
|
|
1805
|
-
const openMatch = text.match(/<\s*thinking\s*>/i);
|
|
1806
|
-
if (!openMatch) {
|
|
1807
|
-
return { thinking: "", content: text, isComplete: true };
|
|
1808
|
-
}
|
|
1809
|
-
const openIdx = openMatch.index ?? 0;
|
|
1810
|
-
const openTagLength = openMatch[0].length;
|
|
1811
|
-
const start = openIdx + openTagLength;
|
|
1812
|
-
const contentBefore = text.slice(0, openIdx);
|
|
1813
|
-
const textAfterOpen = text.slice(start);
|
|
1814
|
-
const closeMatch = textAfterOpen.match(/<\/\s*thinking\s*>/i);
|
|
1815
|
-
if (!closeMatch) {
|
|
1816
|
-
return {
|
|
1817
|
-
thinking: textAfterOpen,
|
|
1818
|
-
content: contentBefore,
|
|
1819
|
-
isComplete: false
|
|
1820
|
-
};
|
|
1821
|
-
}
|
|
1822
|
-
const closeIdx = closeMatch.index ?? 0;
|
|
1823
|
-
const closeTagLength = closeMatch[0].length;
|
|
1824
|
-
return {
|
|
1825
|
-
thinking: textAfterOpen.slice(0, closeIdx),
|
|
1826
|
-
content: contentBefore + textAfterOpen.slice(closeIdx + closeTagLength),
|
|
1827
|
-
isComplete: true
|
|
1828
|
-
};
|
|
1829
|
-
}
|
|
1830
|
-
function ThinkingBlock({ text, isComplete, seconds: fixedSeconds }) {
|
|
1831
|
-
const startRef = useRef6(Date.now());
|
|
1832
|
-
const [seconds, setSeconds] = useState6(() => isComplete ? null : 0);
|
|
1833
|
-
const [isOpen, setIsOpen] = useState6(!isComplete);
|
|
1834
|
-
useEffect4(() => {
|
|
1835
|
-
if (isComplete) {
|
|
1836
|
-
if (seconds !== null) {
|
|
1837
|
-
setSeconds(Math.max(1, Math.round((Date.now() - startRef.current) / 1e3)));
|
|
1838
|
-
setIsOpen(false);
|
|
1839
|
-
}
|
|
1840
|
-
return;
|
|
1841
|
-
}
|
|
1842
|
-
setIsOpen(true);
|
|
1843
|
-
const t = setInterval(() => {
|
|
1844
|
-
setSeconds(Math.round((Date.now() - startRef.current) / 1e3));
|
|
1845
|
-
}, 1e3);
|
|
1846
|
-
return () => clearInterval(t);
|
|
1847
|
-
}, [isComplete]);
|
|
1848
|
-
const finalSeconds = fixedSeconds ?? seconds;
|
|
1849
|
-
const label = isComplete ? finalSeconds !== null && finalSeconds !== void 0 ? `Thought for ${finalSeconds}s` : "Thought process" : `Thinking${seconds ? ` \xB7 ${seconds}s` : "\u2026"}`;
|
|
1850
|
-
const expandable = !!text;
|
|
1851
|
-
return /* @__PURE__ */ jsxs8("div", { className: cn("hsk-cb-think", !isComplete && "hsk-cb-think--live"), children: [
|
|
1852
|
-
/* @__PURE__ */ jsxs8(
|
|
1853
|
-
"button",
|
|
1854
|
-
{
|
|
1855
|
-
type: "button",
|
|
1856
|
-
className: cn("hsk-cb-think-head", !expandable && "hsk-cb-think-head--static"),
|
|
1857
|
-
onClick: expandable ? () => setIsOpen((o) => !o) : void 0,
|
|
1858
|
-
"aria-expanded": expandable ? isOpen : void 0,
|
|
1859
|
-
children: [
|
|
1860
|
-
/* @__PURE__ */ jsxs8("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: !isComplete ? "hsk-cb-think-spin" : void 0, children: [
|
|
1861
|
-
/* @__PURE__ */ jsx9("circle", { cx: "12", cy: "12", r: "10" }),
|
|
1862
|
-
/* @__PURE__ */ jsx9("path", { d: "M12 6v6l4 2" })
|
|
1863
|
-
] }),
|
|
1864
|
-
/* @__PURE__ */ jsx9("span", { children: label }),
|
|
1865
|
-
expandable && /* @__PURE__ */ jsx9("span", { className: cn("hsk-cb-think-chevron", isOpen && "hsk-cb-think-chevron--open"), children: "\u25B6" })
|
|
1866
|
-
]
|
|
1867
|
-
}
|
|
1868
|
-
),
|
|
1869
|
-
expandable && isOpen && /* @__PURE__ */ jsx9("div", { className: "hsk-cb-think-body", children: text })
|
|
1870
|
-
] });
|
|
1871
|
-
}
|
|
1872
|
-
function ChatModal({
|
|
1873
|
-
title = "kiku",
|
|
1874
|
-
placeholder = "Ask me anything\u2026",
|
|
1875
|
-
backdropColor,
|
|
1876
|
-
backdropBlur,
|
|
1877
|
-
onClose,
|
|
1878
|
-
onSelectSource,
|
|
1879
|
-
defaultCurrency = "KES",
|
|
1880
|
-
chips = DEFAULT_CHIPS,
|
|
1881
|
-
theme,
|
|
1882
|
-
classNames = {},
|
|
1883
|
-
enableVoice = false,
|
|
1884
|
-
voiceLang,
|
|
1885
|
-
enableVision = false,
|
|
1886
|
-
visionCategoryHint
|
|
1887
|
-
}) {
|
|
1888
|
-
const client = useAkropolysContext3();
|
|
1889
|
-
const { messages, sources, loading, streaming, error, lastAction, lastIntent, send, stop, stopped, interrupted, continueGenerating, reset, referencedIds } = useKiku2();
|
|
1890
|
-
const [input, setInput] = useState6("");
|
|
1891
|
-
const [shopperName, setShopperNameState] = useState6(() => {
|
|
1892
|
-
try {
|
|
1893
|
-
return client.getShopperName?.() ?? "";
|
|
1894
|
-
} catch {
|
|
1895
|
-
return "";
|
|
1896
|
-
}
|
|
1897
|
-
});
|
|
1898
|
-
const [nameSkipped, setNameSkipped] = useState6(false);
|
|
1899
|
-
const awaitingName = messages.length === 0 && !shopperName && !nameSkipped;
|
|
1900
|
-
const [attachments, setAttachments] = useState6([]);
|
|
1901
|
-
const imageInputRef = useRef6(null);
|
|
1902
|
-
const handleImageFiles = (files) => {
|
|
1903
|
-
if (!files || files.length === 0) return;
|
|
1904
|
-
Array.from(files).forEach((file) => {
|
|
1905
|
-
if (!file.type.startsWith("image/")) return;
|
|
1906
|
-
const reader = new FileReader();
|
|
1907
|
-
reader.onload = (e) => {
|
|
1908
|
-
const dataUrl = e.target?.result;
|
|
1909
|
-
if (dataUrl) {
|
|
1910
|
-
setAttachments((prev) => [...prev, { type: "image", data: dataUrl }]);
|
|
1911
|
-
}
|
|
1912
|
-
};
|
|
1913
|
-
reader.readAsDataURL(file);
|
|
1914
|
-
});
|
|
1915
|
-
};
|
|
1916
|
-
const removeAttachment = (idx) => {
|
|
1917
|
-
setAttachments((prev) => prev.filter((_, i) => i !== idx));
|
|
1918
|
-
};
|
|
1919
|
-
const [voiceState, setVoiceState] = useState6("idle");
|
|
1920
|
-
const recognitionRef = useRef6(null);
|
|
1921
|
-
const pendingVoiceRef = useRef6(null);
|
|
1922
|
-
const hasSpeechAPI = typeof window !== "undefined" && ("SpeechRecognition" in window || "webkitSpeechRecognition" in window);
|
|
1923
|
-
const startVoice = useCallback2(() => {
|
|
1924
|
-
if (!hasSpeechAPI || voiceState !== "idle") return;
|
|
1925
|
-
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
|
|
1926
|
-
const recognition = new SR();
|
|
1927
|
-
recognition.lang = voiceLang || document.documentElement.lang || navigator.language || "en-US";
|
|
1928
|
-
recognition.interimResults = true;
|
|
1929
|
-
recognition.maxAlternatives = 1;
|
|
1930
|
-
recognitionRef.current = recognition;
|
|
1931
|
-
recognition.onstart = () => setVoiceState("listening");
|
|
1932
|
-
recognition.onresult = (event) => {
|
|
1933
|
-
let finalText = "";
|
|
1934
|
-
let interimText = "";
|
|
1935
|
-
for (let i = 0; i < event.results.length; i++) {
|
|
1936
|
-
const seg = event.results[i][0].transcript;
|
|
1937
|
-
if (event.results[i].isFinal) finalText += seg;
|
|
1938
|
-
else interimText += seg;
|
|
1939
|
-
}
|
|
1940
|
-
const live = (finalText + " " + interimText).trim();
|
|
1941
|
-
if (live) setInput(live);
|
|
1942
|
-
if (finalText.trim()) {
|
|
1943
|
-
pendingVoiceRef.current = finalText.trim();
|
|
1944
|
-
setVoiceState("processing");
|
|
1945
|
-
}
|
|
1946
|
-
};
|
|
1947
|
-
recognition.onerror = (event) => {
|
|
1948
|
-
const err = event?.error;
|
|
1949
|
-
if (err === "not-allowed" || err === "service-not-allowed") {
|
|
1950
|
-
setInput("Microphone access was blocked \u2014 enable it in your browser to use voice.");
|
|
1951
|
-
} else if (err === "no-speech") {
|
|
1952
|
-
setInput("Didn't catch that \u2014 tap the mic and try again.");
|
|
1953
|
-
}
|
|
1954
|
-
setVoiceState("idle");
|
|
1955
|
-
};
|
|
1956
|
-
recognition.onend = () => {
|
|
1957
|
-
setVoiceState((prev) => prev === "listening" ? "idle" : prev);
|
|
1958
|
-
};
|
|
1959
|
-
recognition.start();
|
|
1960
|
-
}, [hasSpeechAPI, voiceState, voiceLang]);
|
|
1961
|
-
const stopVoice = useCallback2(() => {
|
|
1962
|
-
recognitionRef.current?.stop();
|
|
1963
|
-
setVoiceState("idle");
|
|
1964
|
-
}, []);
|
|
1965
|
-
useEffect4(() => {
|
|
1966
|
-
return () => recognitionRef.current?.abort();
|
|
1967
|
-
}, []);
|
|
1968
|
-
const activeChips = chips;
|
|
1969
|
-
const activeTitle = title;
|
|
1970
|
-
const activePlaceholder = awaitingName ? "Type your name\u2026" : placeholder;
|
|
1971
|
-
const [selectedProduct, setSelectedProduct] = useState6(null);
|
|
1972
|
-
const [lightboxSrc, setLightboxSrc] = useState6(null);
|
|
1973
|
-
const [markupSrc, setMarkupSrc] = useState6(null);
|
|
1974
|
-
const bottomRef = useRef6(null);
|
|
1975
|
-
const textareaRef = useRef6(null);
|
|
1976
|
-
const [keyInput, setKeyInput] = useState6("");
|
|
1977
|
-
const [keyPhase, setKeyPhase] = useState6("idle");
|
|
1978
|
-
const [mintedKey, setMintedKey] = useState6(null);
|
|
1979
|
-
const [mintedPub, setMintedPub] = useState6(null);
|
|
1980
|
-
const [copied, setCopied] = useState6(null);
|
|
1981
|
-
const copyValue = (value, which) => {
|
|
1982
|
-
try {
|
|
1983
|
-
navigator.clipboard?.writeText(value);
|
|
1984
|
-
} catch {
|
|
1985
|
-
}
|
|
1986
|
-
setCopied(which);
|
|
1987
|
-
setTimeout(() => setCopied((c) => c === which ? null : c), 1600);
|
|
1988
|
-
};
|
|
1989
|
-
const [keyCountdown, setKeyCountdown] = useState6(KIKU_KEY_REVEAL_SECONDS);
|
|
1990
|
-
const [minting, setMinting] = useState6(false);
|
|
1991
|
-
const [showKikuPicker, setShowKikuPicker] = useState6(false);
|
|
1992
|
-
const [showAtPicker, setShowAtPicker] = useState6(false);
|
|
1993
|
-
useEffect4(() => {
|
|
1994
|
-
if (!lastAction) return;
|
|
1995
|
-
if (lastAction.type === "request_kiku_key") {
|
|
1996
|
-
setKeyPhase("prompt_key");
|
|
1997
|
-
}
|
|
1998
|
-
}, [lastAction]);
|
|
1999
|
-
useEffect4(() => {
|
|
2000
|
-
if (!mintedKey) return;
|
|
2001
|
-
setKeyCountdown(KIKU_KEY_REVEAL_SECONDS);
|
|
2002
|
-
const t = setInterval(() => {
|
|
2003
|
-
setKeyCountdown((s) => {
|
|
2004
|
-
if (s <= 1) {
|
|
2005
|
-
clearInterval(t);
|
|
2006
|
-
setMintedKey(null);
|
|
2007
|
-
setMintedPub(null);
|
|
2008
|
-
return 0;
|
|
2009
|
-
}
|
|
2010
|
-
return s - 1;
|
|
2011
|
-
});
|
|
2012
|
-
}, 1e3);
|
|
2013
|
-
return () => clearInterval(t);
|
|
2014
|
-
}, [mintedKey]);
|
|
2015
|
-
const { themeAttr: hskThemeAttr, vars: customStyles } = resolveTheme(theme);
|
|
2016
|
-
const retryLastMessage = async () => {
|
|
2017
|
-
const lastUserMsg = [...messages].reverse().find((m) => m.role === "user");
|
|
2018
|
-
if (lastUserMsg) await handleSend(lastUserMsg.content);
|
|
2019
|
-
};
|
|
2020
|
-
const handleUseExistingKey = async () => {
|
|
2021
|
-
const pub = keyInput.trim();
|
|
2022
|
-
if (!pub) return;
|
|
2023
|
-
client.setKikuPub(pub);
|
|
2024
|
-
setKeyInput("");
|
|
2025
|
-
setKeyPhase("idle");
|
|
2026
|
-
await retryLastMessage();
|
|
2027
|
-
};
|
|
2028
|
-
const handleCreateKey = async () => {
|
|
2029
|
-
if (minting) return;
|
|
2030
|
-
setMinting(true);
|
|
2031
|
-
try {
|
|
2032
|
-
const { secret, publicId } = await client.mintKikuKey();
|
|
2033
|
-
setMintedKey(secret);
|
|
2034
|
-
setMintedPub(publicId);
|
|
2035
|
-
setKeyPhase("idle");
|
|
2036
|
-
await retryLastMessage();
|
|
2037
|
-
} catch {
|
|
2038
|
-
} finally {
|
|
2039
|
-
setMinting(false);
|
|
2040
|
-
}
|
|
2041
|
-
};
|
|
2042
|
-
const msgsContainerRef = useRef6(null);
|
|
2043
|
-
const messageRefs = useRef6([]);
|
|
2044
|
-
useEffect4(() => {
|
|
2045
|
-
const container = msgsContainerRef.current;
|
|
2046
|
-
if (!container) return;
|
|
2047
|
-
const lastMsg = messages[messages.length - 1];
|
|
2048
|
-
if (lastMsg?.role === "user") {
|
|
2049
|
-
messageRefs.current[messages.length - 1]?.scrollIntoView({ behavior: "smooth", block: "start" });
|
|
2050
|
-
return;
|
|
2051
|
-
}
|
|
2052
|
-
const distanceFromBottom = container.scrollHeight - container.scrollTop - container.clientHeight;
|
|
2053
|
-
if (distanceFromBottom < 120) {
|
|
2054
|
-
bottomRef.current?.scrollIntoView({ behavior: "smooth" });
|
|
2055
|
-
}
|
|
2056
|
-
}, [messages, loading, selectedProduct]);
|
|
2057
|
-
useEffect4(() => {
|
|
2058
|
-
const prev = document.body.style.overflow;
|
|
2059
|
-
document.body.style.overflow = "hidden";
|
|
2060
|
-
return () => {
|
|
2061
|
-
document.body.style.overflow = prev;
|
|
2062
|
-
};
|
|
2063
|
-
}, []);
|
|
2064
|
-
useEffect4(() => {
|
|
2065
|
-
const h = (e) => {
|
|
2066
|
-
if (e.key !== "Escape") return;
|
|
2067
|
-
if (lightboxSrc) {
|
|
2068
|
-
setLightboxSrc(null);
|
|
2069
|
-
return;
|
|
2070
|
-
}
|
|
2071
|
-
onClose();
|
|
2072
|
-
};
|
|
2073
|
-
document.addEventListener("keydown", h);
|
|
2074
|
-
return () => document.removeEventListener("keydown", h);
|
|
2075
|
-
}, [lightboxSrc, onClose]);
|
|
2076
|
-
const handleReset = useCallback2(() => {
|
|
2077
|
-
reset();
|
|
2078
|
-
setKeyPhase("idle");
|
|
2079
|
-
}, [reset]);
|
|
2080
|
-
const handleSourceClick = (src) => {
|
|
2081
|
-
setSelectedProduct(src);
|
|
2082
|
-
onSelectSource?.(src);
|
|
2083
|
-
const lastAssistant = [...messages].reverse().find((m) => m.role === "assistant");
|
|
2084
|
-
if (lastAssistant && lastAssistant.content.trim().endsWith("?")) {
|
|
2085
|
-
send(`The ${src.name}`);
|
|
2086
|
-
return;
|
|
2087
|
-
}
|
|
2088
|
-
const q = `Tell me more about the ${src.name}${src.price ? ` (${src.currency ?? defaultCurrency} ${src.price})` : ""} \u2014 what are its key specs, who is it best for, and is it worth buying?`;
|
|
2089
|
-
send(q);
|
|
2090
|
-
};
|
|
2091
|
-
const handleSend = async (text, extraAttachments, forcedIntent, captureTargets) => {
|
|
2092
|
-
const raw = (text ?? input).trim();
|
|
2093
|
-
if (!raw || loading) return;
|
|
2094
|
-
if (awaitingName) {
|
|
2095
|
-
const name = extractName(raw);
|
|
2096
|
-
if (name) {
|
|
2097
|
-
try {
|
|
2098
|
-
client.setShopperName?.(name);
|
|
2099
|
-
} catch {
|
|
2100
|
-
}
|
|
2101
|
-
setShopperNameState(name);
|
|
2102
|
-
setInput("");
|
|
2103
|
-
if (textareaRef.current) textareaRef.current.style.height = "auto";
|
|
2104
|
-
return;
|
|
2105
|
-
}
|
|
2106
|
-
setNameSkipped(true);
|
|
2107
|
-
}
|
|
2108
|
-
const kiku = parseAtKiku(raw);
|
|
2109
|
-
const q = kiku ? kiku.cleanQuery : raw;
|
|
2110
|
-
const resolvedForcedIntent = forcedIntent ?? kiku?.intent;
|
|
2111
|
-
setSelectedProduct(null);
|
|
2112
|
-
setShowKikuPicker(false);
|
|
2113
|
-
setShowAtPicker(false);
|
|
2114
|
-
setInput("");
|
|
2115
|
-
if (textareaRef.current) {
|
|
2116
|
-
textareaRef.current.style.height = "auto";
|
|
2117
|
-
}
|
|
2118
|
-
const toSend = extraAttachments ?? attachments;
|
|
2119
|
-
setAttachments([]);
|
|
2120
|
-
await send(q, raw, toSend.length > 0 ? toSend : void 0, resolvedForcedIntent, captureTargets);
|
|
2121
|
-
};
|
|
2122
|
-
const handleSelectExtension = (ext) => {
|
|
2123
|
-
setInput(ext + " ");
|
|
2124
|
-
setShowAtPicker(false);
|
|
2125
|
-
setShowKikuPicker(true);
|
|
2126
|
-
if (textareaRef.current) {
|
|
2127
|
-
textareaRef.current.focus();
|
|
2128
|
-
}
|
|
2129
|
-
};
|
|
2130
|
-
const handleKikuCapture = useCallback2((product) => {
|
|
2131
|
-
const name = product.name || "";
|
|
2132
|
-
const display = `@kiku capture${name ? " " + name : ""}`;
|
|
2133
|
-
const q = name || "capture current page";
|
|
2134
|
-
setInput("");
|
|
2135
|
-
setSelectedProduct(null);
|
|
2136
|
-
const toSend = attachments;
|
|
2137
|
-
setAttachments([]);
|
|
2138
|
-
send(q, display, toSend.length > 0 ? toSend : void 0, "capture");
|
|
2139
|
-
}, [attachments, send]);
|
|
2140
|
-
const handleKikuCaptureAll = useCallback2((products) => {
|
|
2141
|
-
const targets = products.filter((p) => p.id).map((p) => ({
|
|
2142
|
-
name: p.name || "",
|
|
2143
|
-
url: p.url || "",
|
|
2144
|
-
image: p.image || "",
|
|
2145
|
-
price: p.price ? String(p.price) : "",
|
|
2146
|
-
currency: p.currency || defaultCurrency
|
|
2147
|
-
}));
|
|
2148
|
-
const names = products.map((p) => p.name).filter(Boolean).join(", ");
|
|
2149
|
-
const display = `@kiku capture all (${products.length} items)`;
|
|
2150
|
-
setInput("");
|
|
2151
|
-
setSelectedProduct(null);
|
|
2152
|
-
setAttachments([]);
|
|
2153
|
-
send(names || "capture all", display, void 0, "capture_all", targets);
|
|
2154
|
-
}, [defaultCurrency, send]);
|
|
2155
|
-
const handleKikuViewHistory = useCallback2(() => {
|
|
2156
|
-
const display = "@kiku what have you saved?";
|
|
2157
|
-
setInput("");
|
|
2158
|
-
setSelectedProduct(null);
|
|
2159
|
-
setAttachments([]);
|
|
2160
|
-
send("show my saved items", display, void 0, "view_history");
|
|
2161
|
-
}, [send]);
|
|
2162
|
-
const handleKikuDelete = useCallback2(() => {
|
|
2163
|
-
const display = "@kiku delete this";
|
|
2164
|
-
setInput("");
|
|
2165
|
-
setSelectedProduct(null);
|
|
2166
|
-
setAttachments([]);
|
|
2167
|
-
send("delete this", display, void 0, "delete");
|
|
2168
|
-
}, [send]);
|
|
2169
|
-
const handleKeyDown = (e) => {
|
|
2170
|
-
if (e.key === "Escape" && showKikuPicker) {
|
|
2171
|
-
e.preventDefault();
|
|
2172
|
-
setShowKikuPicker(false);
|
|
2173
|
-
return;
|
|
2174
|
-
}
|
|
2175
|
-
if (e.key === "Escape" && showAtPicker) {
|
|
2176
|
-
e.preventDefault();
|
|
2177
|
-
setShowAtPicker(false);
|
|
2178
|
-
return;
|
|
2179
|
-
}
|
|
2180
|
-
if (e.key === "Enter" && !e.shiftKey) {
|
|
2181
|
-
e.preventDefault();
|
|
2182
|
-
handleSend();
|
|
2183
|
-
}
|
|
2184
|
-
};
|
|
2185
|
-
const handleInput = (e) => {
|
|
2186
|
-
const val = e.target.value;
|
|
2187
|
-
setInput(val);
|
|
2188
|
-
const trimmed = val.trim();
|
|
2189
|
-
setShowAtPicker(trimmed === "@");
|
|
2190
|
-
setShowKikuPicker(/^@kiku\s*$/i.test(trimmed));
|
|
2191
|
-
const t = e.target;
|
|
2192
|
-
t.style.height = "auto";
|
|
2193
|
-
t.style.height = `${Math.min(t.scrollHeight, 140)}px`;
|
|
2194
|
-
};
|
|
2195
|
-
useEffect4(() => {
|
|
2196
|
-
if (voiceState !== "processing") return;
|
|
2197
|
-
const transcript = pendingVoiceRef.current;
|
|
2198
|
-
if (!transcript) {
|
|
2199
|
-
setVoiceState("idle");
|
|
2200
|
-
return;
|
|
2201
|
-
}
|
|
2202
|
-
pendingVoiceRef.current = null;
|
|
2203
|
-
const timer = setTimeout(() => {
|
|
2204
|
-
setVoiceState("idle");
|
|
2205
|
-
handleSend(transcript);
|
|
2206
|
-
}, 400);
|
|
2207
|
-
return () => clearTimeout(timer);
|
|
2208
|
-
}, [voiceState]);
|
|
2209
|
-
const blurVal = typeof backdropBlur === "number" ? `${backdropBlur}px` : backdropBlur ?? "20px";
|
|
2210
|
-
const displayMessages = messages;
|
|
2211
|
-
return /* @__PURE__ */ jsx9(
|
|
2212
|
-
"div",
|
|
2213
|
-
{
|
|
2214
|
-
className: cn("hsk-cb-overlay", classNames.overlay),
|
|
2215
|
-
onClick: onClose,
|
|
2216
|
-
"data-hsk-theme": hskThemeAttr,
|
|
2217
|
-
style: {
|
|
2218
|
-
backdropFilter: `blur(${blurVal})`,
|
|
2219
|
-
WebkitBackdropFilter: `blur(${blurVal})`,
|
|
2220
|
-
...backdropColor ? { background: backdropColor } : {},
|
|
2221
|
-
...customStyles
|
|
2222
|
-
},
|
|
2223
|
-
children: /* @__PURE__ */ jsxs8(
|
|
2224
|
-
"div",
|
|
2225
|
-
{
|
|
2226
|
-
className: cn("hsk-cb-panel", classNames.panel),
|
|
2227
|
-
onClick: (e) => {
|
|
2228
|
-
e.stopPropagation();
|
|
2229
|
-
const target = e.target;
|
|
2230
|
-
if (target.tagName === "IMG" && (target.classList.contains("hsk-markdown-img") || target.classList.contains("hsk-cb-user-img-thumb"))) {
|
|
2231
|
-
const src = target.src;
|
|
2232
|
-
if (src) setLightboxSrc(src);
|
|
2233
|
-
}
|
|
2234
|
-
},
|
|
2235
|
-
children: [
|
|
2236
|
-
lightboxSrc && /* @__PURE__ */ jsxs8("div", { className: "hsk-lightbox", onClick: () => setLightboxSrc(null), children: [
|
|
2237
|
-
/* @__PURE__ */ jsx9("button", { className: "hsk-lightbox-close", onClick: () => setLightboxSrc(null), "aria-label": "Close image", children: /* @__PURE__ */ jsx9(CloseIcon, {}) }),
|
|
2238
|
-
/* @__PURE__ */ jsx9("img", { src: lightboxSrc, alt: "", className: "hsk-lightbox-img", onClick: (e) => e.stopPropagation() })
|
|
2239
|
-
] }),
|
|
2240
|
-
markupSrc && /* @__PURE__ */ jsx9("div", { className: "hsk-markup-overlay", children: /* @__PURE__ */ jsx9(
|
|
2241
|
-
MarkupEditor,
|
|
2242
|
-
{
|
|
2243
|
-
src: markupSrc,
|
|
2244
|
-
onCancel: () => setMarkupSrc(null),
|
|
2245
|
-
onSend: (dataUrl, instruction) => {
|
|
2246
|
-
setMarkupSrc(null);
|
|
2247
|
-
handleSend(
|
|
2248
|
-
instruction || "Apply the change indicated by the markings on the image.",
|
|
2249
|
-
[{ type: "image", data: dataUrl, annotated: true }]
|
|
2250
|
-
);
|
|
2251
|
-
}
|
|
2252
|
-
}
|
|
2253
|
-
) }),
|
|
2254
|
-
/* @__PURE__ */ jsxs8("div", { className: "hsk-cb-main", children: [
|
|
2255
|
-
/* @__PURE__ */ jsxs8("div", { className: "hsk-cb-topbar", children: [
|
|
2256
|
-
/* @__PURE__ */ jsxs8("div", { className: "hsk-cb-topbar-left", children: [
|
|
2257
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-cb-topbar-icon", style: { display: "flex", alignItems: "center" }, children: /* @__PURE__ */ jsx9(SparkleIcon2, {}) }),
|
|
2258
|
-
/* @__PURE__ */ jsx9("div", { children: /* @__PURE__ */ jsx9("div", { className: "hsk-cb-topbar-title", children: activeTitle }) })
|
|
2259
|
-
] }),
|
|
2260
|
-
/* @__PURE__ */ jsxs8("div", { className: "hsk-cb-topbar-actions", children: [
|
|
2261
|
-
messages.length > 0 && /* @__PURE__ */ jsx9("button", { className: "hsk-cb-topbar-btn", onClick: handleReset, children: "Clear chat" }),
|
|
2262
|
-
/* @__PURE__ */ jsx9("button", { className: "hsk-cb-close", onClick: onClose, "aria-label": "Close", children: /* @__PURE__ */ jsx9(CloseIcon, {}) })
|
|
2263
|
-
] })
|
|
2264
|
-
] }),
|
|
2265
|
-
/* @__PURE__ */ jsxs8("div", { className: "hsk-cb-msgs", ref: msgsContainerRef, children: [
|
|
2266
|
-
displayMessages.length === 0 ? /* @__PURE__ */ jsxs8("div", { className: "hsk-cb-empty", children: [
|
|
2267
|
-
awaitingName ? /* @__PURE__ */ jsxs8(Fragment3, { children: [
|
|
2268
|
-
/* @__PURE__ */ jsxs8("h2", { className: "hsk-cb-hello", children: [
|
|
2269
|
-
"Hi, I'm ",
|
|
2270
|
-
/* @__PURE__ */ jsx9("b", { children: "kiku" }),
|
|
2271
|
-
"."
|
|
2272
|
-
] }),
|
|
2273
|
-
/* @__PURE__ */ jsx9("p", { className: "hsk-cb-hello-lead", children: "I can search, visualize, or capture anything for you \u2014 on this site or any other." }),
|
|
2274
|
-
/* @__PURE__ */ jsx9("p", { className: "hsk-cb-hello-ask", children: "What should I call you?" }),
|
|
2275
|
-
/* @__PURE__ */ jsx9("button", { className: "hsk-cb-hello-skip", onClick: () => setNameSkipped(true), children: "Skip for now" })
|
|
2276
|
-
] }) : shopperName ? /* @__PURE__ */ jsxs8(Fragment3, { children: [
|
|
2277
|
-
/* @__PURE__ */ jsxs8("h2", { className: "hsk-cb-hello", children: [
|
|
2278
|
-
"Hi, ",
|
|
2279
|
-
shopperName,
|
|
2280
|
-
"."
|
|
2281
|
-
] }),
|
|
2282
|
-
/* @__PURE__ */ jsx9("p", { className: "hsk-cb-hello-lead", children: "What can I find for you today?" })
|
|
2283
|
-
] }) : /* @__PURE__ */ jsxs8(Fragment3, { children: [
|
|
2284
|
-
/* @__PURE__ */ jsxs8("h2", { className: "hsk-cb-hello", children: [
|
|
2285
|
-
"Hi, I'm ",
|
|
2286
|
-
/* @__PURE__ */ jsx9("b", { children: "kiku" }),
|
|
2287
|
-
"."
|
|
2288
|
-
] }),
|
|
2289
|
-
/* @__PURE__ */ jsx9("p", { className: "hsk-cb-hello-lead", children: "Ask me to search, visualize, or capture anything \u2014 I look across the whole site in real time." })
|
|
2290
|
-
] }),
|
|
2291
|
-
!awaitingName && activeChips.length > 0 && /* @__PURE__ */ jsx9("div", { className: "hsk-cb-chips", children: activeChips.map((chip) => /* @__PURE__ */ jsx9(
|
|
2292
|
-
"button",
|
|
2293
|
-
{
|
|
2294
|
-
className: "hsk-cb-chip",
|
|
2295
|
-
onClick: () => handleSend(chip),
|
|
2296
|
-
children: chip
|
|
2297
|
-
},
|
|
2298
|
-
chip
|
|
2299
|
-
)) })
|
|
2300
|
-
] }) : displayMessages.map((msg, idx) => {
|
|
2301
|
-
const isLast = idx === displayMessages.length - 1;
|
|
2302
|
-
const isLastUser = msg.role === "user" && !displayMessages.slice(idx + 1).some((m) => m.role === "user");
|
|
2303
|
-
const isUser = msg.role === "user";
|
|
2304
|
-
const compareSources = sources.filter((s) => s.id && referencedIds.includes(s.id));
|
|
2305
|
-
const showMatrix = isLast && lastIntent === "compare" && compareSources.length >= 2;
|
|
2306
|
-
const displayContent = !isUser && showMatrix ? stripMarkdownTables(msg.content) : msg.content;
|
|
2307
|
-
return /* @__PURE__ */ jsx9("div", { className: "hsk-cb-msg-group", ref: (el) => {
|
|
2308
|
-
messageRefs.current[idx] = el;
|
|
2309
|
-
}, children: isUser ? /* @__PURE__ */ jsxs8("div", { className: `hsk-cb-user-msg${isLastUser ? " hsk-sent" : ""}`, children: [
|
|
2310
|
-
msg.images && msg.images.length > 0 && /* @__PURE__ */ jsx9("div", { className: "hsk-cb-user-imgs", children: msg.images.map((img, i) => /* @__PURE__ */ jsx9("img", { src: img, alt: `attachment ${i + 1}`, className: "hsk-cb-user-img-thumb" }, i)) }),
|
|
2311
|
-
msg.content && /* @__PURE__ */ jsx9("div", { className: "hsk-cb-user-bubble", children: /^@kiku\b/i.test(msg.content) ? /* @__PURE__ */ jsxs8(Fragment3, { children: [
|
|
2312
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-kiku-badge", children: "@kiku" }),
|
|
2313
|
-
msg.content.replace(/^@kiku\s*/i, "")
|
|
2314
|
-
] }) : msg.content })
|
|
2315
|
-
] }) : /* @__PURE__ */ jsxs8("div", { className: "hsk-cb-ai-msg", children: [
|
|
2316
|
-
/* @__PURE__ */ jsx9("div", { className: "hsk-cb-ai-icon", style: { display: "flex", alignItems: "center" }, children: /* @__PURE__ */ jsx9(SparkleIcon2, {}) }),
|
|
2317
|
-
/* @__PURE__ */ jsxs8("div", { className: "hsk-cb-ai-body", children: [
|
|
2318
|
-
(() => {
|
|
2319
|
-
const parsed = parseThinking(displayContent);
|
|
2320
|
-
const thinking = msg.thinking || parsed.thinking;
|
|
2321
|
-
const content = parsed.content;
|
|
2322
|
-
const isComplete = msg.thinking ? content.length > 0 || !(isLast && streaming) : parsed.isComplete;
|
|
2323
|
-
return /* @__PURE__ */ jsxs8(Fragment3, { children: [
|
|
2324
|
-
(thinking || msg.thoughtForSeconds != null) && /* @__PURE__ */ jsx9(ThinkingBlock, { text: thinking, isComplete, seconds: msg.thoughtForSeconds }),
|
|
2325
|
-
content && /* @__PURE__ */ jsxs8("div", { className: "hsk-cb-ai-text", children: [
|
|
2326
|
-
renderMarkdown(content, isLast && streaming),
|
|
2327
|
-
isLast && streaming && /* @__PURE__ */ jsx9("span", { style: { display: "inline-block", width: "0.5em", height: "1.05em", marginLeft: "2px", verticalAlign: "text-bottom", background: "currentColor", opacity: 0.55, borderRadius: "1px" } })
|
|
2328
|
-
] })
|
|
2329
|
-
] });
|
|
2330
|
-
})(),
|
|
2331
|
-
msg.visualizing && /* @__PURE__ */ jsxs8("div", { className: "hsk-cb-viz hsk-cb-viz--loading", children: [
|
|
2332
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-cb-viz-spinner" }),
|
|
2333
|
-
/* @__PURE__ */ jsx9("span", { children: msg.visualizingText || "Visualizing\u2026" })
|
|
2334
|
-
] }),
|
|
2335
|
-
msg.visualization && /* @__PURE__ */ jsxs8("div", { className: "hsk-cb-viz", children: [
|
|
2336
|
-
/* @__PURE__ */ jsxs8("div", { className: "hsk-cb-viz-imgwrap", children: [
|
|
2337
|
-
msg.visualizationType === "video" || msg.visualization.includes("/videos/") ? /* @__PURE__ */ jsx9(
|
|
2338
|
-
"video",
|
|
2339
|
-
{
|
|
2340
|
-
src: msg.visualization,
|
|
2341
|
-
controls: true,
|
|
2342
|
-
autoPlay: true,
|
|
2343
|
-
loop: true,
|
|
2344
|
-
muted: true,
|
|
2345
|
-
playsInline: true,
|
|
2346
|
-
className: "hsk-markdown-video",
|
|
2347
|
-
style: { display: "block", maxHeight: "400px", objectFit: "contain", width: "100%" }
|
|
2348
|
-
}
|
|
2349
|
-
) : /* @__PURE__ */ jsx9(
|
|
2350
|
-
"img",
|
|
2351
|
-
{
|
|
2352
|
-
src: msg.visualization,
|
|
2353
|
-
alt: "Product visualized in your photo",
|
|
2354
|
-
className: "hsk-markdown-img",
|
|
2355
|
-
onError: (e) => {
|
|
2356
|
-
e.target.style.display = "none";
|
|
2357
|
-
}
|
|
2358
|
-
}
|
|
2359
|
-
),
|
|
2360
|
-
isLast && !streaming && (msg.visualizationType !== "video" && !msg.visualization.includes("/videos/")) && /* @__PURE__ */ jsxs8("button", { className: "hsk-cb-viz-mark", onClick: () => setMarkupSrc(msg.visualization), children: [
|
|
2361
|
-
/* @__PURE__ */ jsxs8("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
2362
|
-
/* @__PURE__ */ jsx9("path", { d: "M12 20h9" }),
|
|
2363
|
-
/* @__PURE__ */ jsx9("path", { d: "M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4Z" })
|
|
2364
|
-
] }),
|
|
2365
|
-
"Mark & edit"
|
|
2366
|
-
] })
|
|
2367
|
-
] }),
|
|
2368
|
-
/* @__PURE__ */ jsx9("div", { className: "hsk-cb-viz-disclaimer", children: msg.visualizationType === "video" || msg.visualization.includes("/videos/") ? "AI-generated video makeover \u2014 colors, size and movement may differ from the real product." : "AI-generated preview \u2014 colours, size and placement may differ from the real product." })
|
|
2369
|
-
] }),
|
|
2370
|
-
!isUser && (msg.knowledgeImages?.length ?? 0) > 0 && /* @__PURE__ */ jsx9("div", { className: "hsk-cb-kimgs", children: msg.knowledgeImages.map((ref) => /* @__PURE__ */ jsxs8("div", { className: "hsk-cb-kimg-group", children: [
|
|
2371
|
-
/* @__PURE__ */ jsx9("div", { className: "hsk-cb-kimg-grid", children: ref.images.map((img, i) => /* @__PURE__ */ jsx9(
|
|
2372
|
-
"img",
|
|
2373
|
-
{
|
|
2374
|
-
src: img.url,
|
|
2375
|
-
alt: img.note || ref.title || "Reference image",
|
|
2376
|
-
className: "hsk-cb-kimg",
|
|
2377
|
-
loading: "lazy",
|
|
2378
|
-
onClick: () => setLightboxSrc(img.url),
|
|
2379
|
-
onError: (e) => {
|
|
2380
|
-
e.target.style.display = "none";
|
|
2381
|
-
}
|
|
2382
|
-
},
|
|
2383
|
-
i
|
|
2384
|
-
)) }),
|
|
2385
|
-
(ref.title || ref.images[0]?.note) && /* @__PURE__ */ jsx9("div", { className: "hsk-cb-kimg-caption", children: ref.title || ref.images[0]?.note })
|
|
2386
|
-
] }, ref.entryId)) }),
|
|
2387
|
-
showMatrix && /* @__PURE__ */ jsx9(ComparisonMatrix, { sources: compareSources, defaultCurrency }),
|
|
2388
|
-
(() => {
|
|
2389
|
-
const msgReferencedIds = isLast ? referencedIds : msg.referencedIds ?? [];
|
|
2390
|
-
const msgSources = isLast ? sources : msg.sources ?? [];
|
|
2391
|
-
const msgIntent = isLast ? lastIntent : msg.intent;
|
|
2392
|
-
const hiddenIntent = msgIntent === "compare" || msgIntent === "capture" || msgIntent === "capture_all" || msgIntent === "delete" || msgIntent === "view_history";
|
|
2393
|
-
const showCarousel = msgReferencedIds.length > 0 && !hiddenIntent && (!isLast || lastAction?.type !== "request_kiku_key");
|
|
2394
|
-
return showCarousel && /* @__PURE__ */ jsx9(
|
|
2395
|
-
SourcesCarousel,
|
|
2396
|
-
{
|
|
2397
|
-
sources: msgSources,
|
|
2398
|
-
defaultCurrency,
|
|
2399
|
-
onSelectSource: handleSourceClick,
|
|
2400
|
-
onImageClick: setLightboxSrc,
|
|
2401
|
-
referencedIds: msgReferencedIds,
|
|
2402
|
-
compact: !!msg.visualization
|
|
2403
|
-
}
|
|
2404
|
-
);
|
|
2405
|
-
})(),
|
|
2406
|
-
isLast && !loading && lastAction?.url && /* @__PURE__ */ jsx9("div", { className: "hsk-action-pills", children: /* @__PURE__ */ jsxs8("a", { className: "hsk-action-pill", href: lastAction.url, children: [
|
|
2407
|
-
String(lastAction.type || "continue").replace(/_/g, " "),
|
|
2408
|
-
" \u2192"
|
|
2409
|
-
] }) }),
|
|
2410
|
-
isLast && !loading && /* @__PURE__ */ jsx9(
|
|
2411
|
-
SmartContextPills,
|
|
2412
|
-
{
|
|
2413
|
-
intent: lastIntent,
|
|
2414
|
-
sources: sources.filter((s) => s.id && referencedIds.includes(s.id)),
|
|
2415
|
-
onSend: handleSend,
|
|
2416
|
-
loading
|
|
2417
|
-
}
|
|
2418
|
-
)
|
|
2419
|
-
] })
|
|
2420
|
-
] }) }, idx);
|
|
2421
|
-
}),
|
|
2422
|
-
selectedProduct && loading && /* @__PURE__ */ jsxs8(
|
|
2423
|
-
"div",
|
|
2424
|
-
{
|
|
2425
|
-
className: "hsk-cb-selected-product",
|
|
2426
|
-
onClick: () => selectedProduct.url && window.open(selectedProduct.url, "_blank"),
|
|
2427
|
-
children: [
|
|
2428
|
-
selectedProduct.image && /* @__PURE__ */ jsx9("img", { className: "hsk-cb-selected-img", src: selectedProduct.image, alt: selectedProduct.name }),
|
|
2429
|
-
/* @__PURE__ */ jsxs8("div", { className: "hsk-cb-selected-info", children: [
|
|
2430
|
-
/* @__PURE__ */ jsx9("div", { className: "hsk-cb-selected-name", children: selectedProduct.name }),
|
|
2431
|
-
selectedProduct.price && /* @__PURE__ */ jsxs8("div", { className: "hsk-cb-selected-price", children: [
|
|
2432
|
-
selectedProduct.currency ?? defaultCurrency,
|
|
2433
|
-
" ",
|
|
2434
|
-
parseFloat(String(selectedProduct.price ?? "").replace(/[^0-9.]/g, "") || "0").toLocaleString()
|
|
2435
|
-
] })
|
|
2436
|
-
] })
|
|
2437
|
-
]
|
|
2438
|
-
}
|
|
2439
|
-
),
|
|
2440
|
-
loading && !streaming && /* @__PURE__ */ jsxs8("div", { className: "hsk-cb-typing-row", style: { display: "flex", alignItems: "center", gap: "10px" }, children: [
|
|
2441
|
-
/* @__PURE__ */ jsxs8("div", { className: "hsk-cb-thinking-icon", children: [
|
|
2442
|
-
/* @__PURE__ */ jsx9("svg", { className: "hsk-brand-mark", viewBox: "0 0 100 100", "aria-hidden": "true", children: /* @__PURE__ */ jsx9("path", { d: "M39.4 10.4 Q44 0 48.6 10.4 L86.1 95.8 Q88 100 83.4 100 L4.6 100 Q0 100 1.9 95.8 Z M24 100 L24 65 Q24 60 27.4 56.3 Q44 38 60.6 56.3 Q64 60 64 65 L64 100 Z", transform: "translate(22.7 19) scale(0.62)", fillRule: "evenodd" }) }),
|
|
2443
|
-
/* @__PURE__ */ jsx9("svg", { className: "hsk-brand-mark hsk-brand-mark--sheen", viewBox: "0 0 100 100", "aria-hidden": "true", children: /* @__PURE__ */ jsx9("path", { d: "M39.4 10.4 Q44 0 48.6 10.4 L86.1 95.8 Q88 100 83.4 100 L4.6 100 Q0 100 1.9 95.8 Z M24 100 L24 65 Q24 60 27.4 56.3 Q44 38 60.6 56.3 Q64 60 64 65 L64 100 Z", transform: "translate(22.7 19) scale(0.62)", fillRule: "evenodd" }) }),
|
|
2444
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-handle-orbit", children: /* @__PURE__ */ jsxs8("span", { className: "hsk-handle-ring", children: [
|
|
2445
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-handle-ball" }),
|
|
2446
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-handle-ball" }),
|
|
2447
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-handle-ball" }),
|
|
2448
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-handle-ball" }),
|
|
2449
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-handle-ball" })
|
|
2450
|
-
] }) }),
|
|
2451
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-handle-rest" })
|
|
2452
|
-
] }),
|
|
2453
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-cb-thinking-text", children: "Thinking\u2026" })
|
|
2454
|
-
] }),
|
|
2455
|
-
lastAction?.type === "open_memory" && lastAction.url && !loading && !streaming && /* @__PURE__ */ jsxs8(
|
|
2456
|
-
"a",
|
|
2457
|
-
{
|
|
2458
|
-
className: "hsk-cb-memory-pill",
|
|
2459
|
-
href: String(lastAction.url),
|
|
2460
|
-
target: "_blank",
|
|
2461
|
-
rel: "noopener noreferrer",
|
|
2462
|
-
children: [
|
|
2463
|
-
"Open my memory on mimi",
|
|
2464
|
-
/* @__PURE__ */ jsx9(ExternalIcon, {})
|
|
2465
|
-
]
|
|
2466
|
-
}
|
|
2467
|
-
),
|
|
2468
|
-
(stopped || interrupted) && !loading && !streaming && messages.length > 0 && /* @__PURE__ */ jsxs8("div", { className: "hsk-cb-stopped", children: [
|
|
2469
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-cb-stopped-label", children: stopped ? "You stopped this response." : "This response was interrupted." }),
|
|
2470
|
-
/* @__PURE__ */ jsxs8("button", { className: "hsk-cb-continue", onClick: continueGenerating, children: [
|
|
2471
|
-
/* @__PURE__ */ jsx9(ContinueIcon, {}),
|
|
2472
|
-
messages[messages.length - 1]?.role === "assistant" ? "Continue generating" : "Generate response"
|
|
2473
|
-
] })
|
|
2474
|
-
] }),
|
|
2475
|
-
error && /* @__PURE__ */ jsx9("div", { className: "hsk-cb-error", children: getFriendlyError(error) }),
|
|
2476
|
-
keyPhase === "prompt_key" && /* @__PURE__ */ jsxs8("div", { className: "hsk-cb-ai-msg", children: [
|
|
2477
|
-
/* @__PURE__ */ jsx9("div", { className: "hsk-cb-ai-icon", style: { display: "flex", alignItems: "center" }, children: /* @__PURE__ */ jsx9(SparkleIcon2, {}) }),
|
|
2478
|
-
/* @__PURE__ */ jsx9("div", { className: "hsk-cb-ai-body", children: /* @__PURE__ */ jsx9("div", { className: "hsk-cb-ai-text", children: /* @__PURE__ */ jsxs8("div", { className: "hsk-cb-phone-form", children: [
|
|
2479
|
-
/* @__PURE__ */ jsx9("label", { className: "hsk-cb-phone-label", children: "Paste your public id \u2014 or create one" }),
|
|
2480
|
-
/* @__PURE__ */ jsx9(
|
|
2481
|
-
"input",
|
|
2482
|
-
{
|
|
2483
|
-
type: "text",
|
|
2484
|
-
className: "hsk-cb-phone-input",
|
|
2485
|
-
placeholder: "your public id\u2026",
|
|
2486
|
-
value: keyInput,
|
|
2487
|
-
onChange: (e) => setKeyInput(e.target.value),
|
|
2488
|
-
onKeyDown: (e) => e.key === "Enter" && handleUseExistingKey(),
|
|
2489
|
-
autoFocus: true
|
|
2490
|
-
}
|
|
2491
|
-
),
|
|
2492
|
-
/* @__PURE__ */ jsxs8("div", { style: { display: "flex", gap: 8 }, children: [
|
|
2493
|
-
/* @__PURE__ */ jsx9("button", { className: "hsk-cb-phone-submit", onClick: handleUseExistingKey, disabled: !keyInput.trim(), children: "Use my id" }),
|
|
2494
|
-
/* @__PURE__ */ jsx9("button", { className: "hsk-cb-phone-submit", onClick: handleCreateKey, disabled: minting, children: minting ? "Creating\u2026" : "I'm new \u2014 create one" })
|
|
2495
|
-
] })
|
|
2496
|
-
] }) }) })
|
|
2497
|
-
] }),
|
|
2498
|
-
mintedKey && /* @__PURE__ */ jsxs8("div", { className: "hsk-cb-ai-msg", children: [
|
|
2499
|
-
/* @__PURE__ */ jsx9("div", { className: "hsk-cb-ai-icon", style: { display: "flex", alignItems: "center" }, children: /* @__PURE__ */ jsx9(SparkleIcon2, {}) }),
|
|
2500
|
-
/* @__PURE__ */ jsx9("div", { className: "hsk-cb-ai-body", children: /* @__PURE__ */ jsx9("div", { className: "hsk-cb-ai-text", children: /* @__PURE__ */ jsxs8("div", { style: { padding: "12px 14px", border: "1px solid var(--hsk-border, #e5e5e5)", borderRadius: "var(--hsk-border-radius, 0px)", display: "flex", flexDirection: "column", gap: 12 }, children: [
|
|
2501
|
-
/* @__PURE__ */ jsxs8("div", { children: [
|
|
2502
|
-
/* @__PURE__ */ jsx9("div", { style: { fontSize: 12, fontWeight: 600, marginBottom: 4 }, children: "Your secret \u2014 shown only once" }),
|
|
2503
|
-
/* @__PURE__ */ jsx9("code", { style: { display: "block", fontSize: 14, fontWeight: 700, marginBottom: 6, wordBreak: "break-all" }, children: mintedKey }),
|
|
2504
|
-
/* @__PURE__ */ jsxs8("div", { style: { display: "flex", gap: 8, alignItems: "center" }, children: [
|
|
2505
|
-
/* @__PURE__ */ jsx9("button", { className: "hsk-cb-phone-submit", style: { padding: "4px 10px" }, onClick: () => copyValue(mintedKey, "secret"), children: copied === "secret" ? "Copied" : "Copy secret" }),
|
|
2506
|
-
/* @__PURE__ */ jsx9("span", { style: { fontSize: 11, opacity: 0.7 }, children: "Keep it private \u2014 use it to unlock your memory at mimi.akropolys.cloud. If lost, the memory is lost with it." })
|
|
2507
|
-
] })
|
|
2508
|
-
] }),
|
|
2509
|
-
mintedPub && /* @__PURE__ */ jsxs8("div", { children: [
|
|
2510
|
-
/* @__PURE__ */ jsx9("div", { style: { fontSize: 12, fontWeight: 600, marginBottom: 4 }, children: "Your public id" }),
|
|
2511
|
-
/* @__PURE__ */ jsx9("code", { style: { display: "block", fontSize: 13, fontWeight: 600, marginBottom: 6, wordBreak: "break-all", opacity: 0.85 }, children: mintedPub }),
|
|
2512
|
-
/* @__PURE__ */ jsxs8("div", { style: { display: "flex", gap: 8, alignItems: "center" }, children: [
|
|
2513
|
-
/* @__PURE__ */ jsx9("button", { className: "hsk-cb-phone-submit", style: { padding: "4px 10px" }, onClick: () => copyValue(mintedPub, "pub"), children: copied === "pub" ? "Copied" : "Copy id" }),
|
|
2514
|
-
/* @__PURE__ */ jsx9("span", { style: { fontSize: 11, opacity: 0.7 }, children: "Paste this on any site to keep saving to the same memory." })
|
|
2515
|
-
] })
|
|
2516
|
-
] }),
|
|
2517
|
-
/* @__PURE__ */ jsxs8("div", { style: { fontSize: 11, opacity: 0.6 }, children: [
|
|
2518
|
-
"Hidden in ",
|
|
2519
|
-
keyCountdown,
|
|
2520
|
-
"s."
|
|
2521
|
-
] })
|
|
2522
|
-
] }) }) })
|
|
2523
|
-
] }),
|
|
2524
|
-
/* @__PURE__ */ jsx9("div", { ref: bottomRef, style: { height: 1 } })
|
|
2525
|
-
] }),
|
|
2526
|
-
/* @__PURE__ */ jsxs8("div", { className: "hsk-cb-input-wrap", children: [
|
|
2527
|
-
showAtPicker && /* @__PURE__ */ jsx9(
|
|
2528
|
-
AtPickerMenu,
|
|
2529
|
-
{
|
|
2530
|
-
onSelect: handleSelectExtension,
|
|
2531
|
-
onDismiss: () => setShowAtPicker(false)
|
|
2532
|
-
}
|
|
2533
|
-
),
|
|
2534
|
-
showKikuPicker && /* @__PURE__ */ jsx9(
|
|
2535
|
-
KikuPickerMenu,
|
|
2536
|
-
{
|
|
2537
|
-
sources,
|
|
2538
|
-
referencedIds,
|
|
2539
|
-
defaultCurrency,
|
|
2540
|
-
onCapture: handleKikuCapture,
|
|
2541
|
-
onCaptureAll: handleKikuCaptureAll,
|
|
2542
|
-
onViewHistory: handleKikuViewHistory,
|
|
2543
|
-
onDelete: handleKikuDelete,
|
|
2544
|
-
onDismiss: () => setShowKikuPicker(false)
|
|
2545
|
-
}
|
|
2546
|
-
),
|
|
2547
|
-
attachments.length > 0 && /* @__PURE__ */ jsx9("div", { className: "hsk-cb-img-strip", children: attachments.map((att, i) => /* @__PURE__ */ jsxs8("div", { className: "hsk-cb-img-thumb-wrap", children: [
|
|
2548
|
-
/* @__PURE__ */ jsx9("img", { src: att.data, alt: `attachment ${i + 1}`, className: "hsk-cb-img-thumb" }),
|
|
2549
|
-
/* @__PURE__ */ jsx9(
|
|
2550
|
-
"button",
|
|
2551
|
-
{
|
|
2552
|
-
className: "hsk-cb-img-thumb-remove",
|
|
2553
|
-
onClick: () => removeAttachment(i),
|
|
2554
|
-
"aria-label": "Remove image",
|
|
2555
|
-
children: "\xD7"
|
|
2556
|
-
}
|
|
2557
|
-
)
|
|
2558
|
-
] }, i)) }),
|
|
2559
|
-
/* @__PURE__ */ jsxs8("div", { className: "hsk-cb-input-box", children: [
|
|
2560
|
-
/* @__PURE__ */ jsx9(
|
|
2561
|
-
"input",
|
|
2562
|
-
{
|
|
2563
|
-
ref: imageInputRef,
|
|
2564
|
-
type: "file",
|
|
2565
|
-
accept: "image/*",
|
|
2566
|
-
multiple: true,
|
|
2567
|
-
style: { display: "none" },
|
|
2568
|
-
onChange: (e) => handleImageFiles(e.target.files)
|
|
2569
|
-
}
|
|
2570
|
-
),
|
|
2571
|
-
enableVision && /* @__PURE__ */ jsx9(
|
|
2572
|
-
"button",
|
|
2573
|
-
{
|
|
2574
|
-
className: "hsk-cb-attach-btn",
|
|
2575
|
-
onClick: () => imageInputRef.current?.click(),
|
|
2576
|
-
disabled: loading,
|
|
2577
|
-
"aria-label": "Attach image",
|
|
2578
|
-
title: "Attach image",
|
|
2579
|
-
children: /* @__PURE__ */ jsx9(PaperclipIcon, {})
|
|
2580
|
-
}
|
|
2581
|
-
),
|
|
2582
|
-
/* @__PURE__ */ jsx9(
|
|
2583
|
-
"textarea",
|
|
2584
|
-
{
|
|
2585
|
-
ref: textareaRef,
|
|
2586
|
-
className: cn("hsk-cb-textarea", classNames.input),
|
|
2587
|
-
value: input,
|
|
2588
|
-
onChange: handleInput,
|
|
2589
|
-
onKeyDown: handleKeyDown,
|
|
2590
|
-
placeholder: voiceState === "listening" ? "\u{1F399}\uFE0F Listening\u2026 tap the mic to stop" : voiceState === "processing" ? "Got it \u2014 sending\u2026" : activePlaceholder,
|
|
2591
|
-
rows: 1,
|
|
2592
|
-
disabled: loading,
|
|
2593
|
-
autoFocus: true
|
|
2594
|
-
}
|
|
2595
|
-
),
|
|
2596
|
-
hasSpeechAPI && enableVoice && /* @__PURE__ */ jsxs8(
|
|
2597
|
-
"button",
|
|
2598
|
-
{
|
|
2599
|
-
className: cn(
|
|
2600
|
-
"hsk-cb-mic-btn",
|
|
2601
|
-
voiceState === "listening" && "hsk-cb-mic-btn--listening",
|
|
2602
|
-
voiceState === "processing" && "hsk-cb-mic-btn--processing"
|
|
2603
|
-
),
|
|
2604
|
-
onClick: voiceState === "idle" ? startVoice : stopVoice,
|
|
2605
|
-
disabled: loading,
|
|
2606
|
-
"aria-label": voiceState === "idle" ? "Start voice input" : "Stop recording",
|
|
2607
|
-
title: voiceState === "idle" ? "Voice input" : "Stop",
|
|
2608
|
-
children: [
|
|
2609
|
-
voiceState === "listening" ? /* @__PURE__ */ jsx9(MicOffIcon, {}) : /* @__PURE__ */ jsx9(MicIcon2, {}),
|
|
2610
|
-
voiceState === "listening" && /* @__PURE__ */ jsx9("span", { className: "hsk-cb-mic-pulse" })
|
|
2611
|
-
]
|
|
2612
|
-
}
|
|
2613
|
-
),
|
|
2614
|
-
loading || streaming ? /* @__PURE__ */ jsx9(
|
|
2615
|
-
"button",
|
|
2616
|
-
{
|
|
2617
|
-
className: cn("hsk-cb-send", "hsk-cb-send--stop", classNames.sendButton),
|
|
2618
|
-
onClick: stop,
|
|
2619
|
-
"aria-label": "Stop generating",
|
|
2620
|
-
title: "Stop generating",
|
|
2621
|
-
children: /* @__PURE__ */ jsx9(StopIcon, {})
|
|
2622
|
-
}
|
|
2623
|
-
) : /* @__PURE__ */ jsx9(
|
|
2624
|
-
"button",
|
|
2625
|
-
{
|
|
2626
|
-
className: cn("hsk-cb-send", classNames.sendButton),
|
|
2627
|
-
onClick: () => handleSend(),
|
|
2628
|
-
disabled: !input.trim() && attachments.length === 0,
|
|
2629
|
-
"aria-label": "Send message",
|
|
2630
|
-
children: /* @__PURE__ */ jsx9(ArrowUpIcon, {})
|
|
2631
|
-
}
|
|
2632
|
-
)
|
|
2633
|
-
] }),
|
|
2634
|
-
/* @__PURE__ */ jsx9("div", { className: "hsk-cb-hint", children: "kiku \xB7 searches the whole catalogue in real time" })
|
|
2635
|
-
] })
|
|
2636
|
-
] })
|
|
2637
|
-
]
|
|
2638
|
-
}
|
|
2639
|
-
)
|
|
2640
|
-
}
|
|
2641
|
-
);
|
|
2642
|
-
}
|
|
2643
|
-
function KikuButton({
|
|
2644
|
-
label,
|
|
2645
|
-
title,
|
|
2646
|
-
placeholder,
|
|
2647
|
-
backdropColor,
|
|
2648
|
-
backdropBlur,
|
|
2649
|
-
className,
|
|
2650
|
-
onSelectSource,
|
|
2651
|
-
defaultCurrency,
|
|
2652
|
-
chips,
|
|
2653
|
-
theme,
|
|
2654
|
-
classNames = {},
|
|
2655
|
-
enableVoice = false,
|
|
2656
|
-
voiceLang,
|
|
2657
|
-
enableVision = false,
|
|
2658
|
-
visionCategoryHint
|
|
2659
|
-
}) {
|
|
2660
|
-
const [open, setOpen] = useState6(false);
|
|
2661
|
-
const [mounted, setMounted] = useState6(false);
|
|
2662
|
-
useEffect4(() => {
|
|
2663
|
-
setMounted(true);
|
|
2664
|
-
if (typeof window !== "undefined" && !window.__akropolys_nav_patched) {
|
|
2665
|
-
window.__akropolys_nav_patched = true;
|
|
2666
|
-
const originalPush = window.history.pushState;
|
|
2667
|
-
const originalReplace = window.history.replaceState;
|
|
2668
|
-
window.history.pushState = function(...args) {
|
|
2669
|
-
originalPush.apply(this, args);
|
|
2670
|
-
window.dispatchEvent(new CustomEvent("akropolys:navigation"));
|
|
2671
|
-
};
|
|
2672
|
-
window.history.replaceState = function(...args) {
|
|
2673
|
-
originalReplace.apply(this, args);
|
|
2674
|
-
window.dispatchEvent(new CustomEvent("akropolys:navigation"));
|
|
2675
|
-
};
|
|
2676
|
-
}
|
|
2677
|
-
const handleNavigation = () => {
|
|
2678
|
-
setOpen(false);
|
|
2679
|
-
};
|
|
2680
|
-
window.addEventListener("popstate", handleNavigation);
|
|
2681
|
-
window.addEventListener("akropolys:navigation", handleNavigation);
|
|
2682
|
-
return () => {
|
|
2683
|
-
window.removeEventListener("popstate", handleNavigation);
|
|
2684
|
-
window.removeEventListener("akropolys:navigation", handleNavigation);
|
|
2685
|
-
};
|
|
2686
|
-
}, []);
|
|
2687
|
-
const { themeAttr: hskThemeAttr, vars: customStyles } = resolveTheme(theme);
|
|
2688
|
-
return /* @__PURE__ */ jsxs8(Fragment3, { children: [
|
|
2689
|
-
/* @__PURE__ */ jsxs8(
|
|
2690
|
-
"button",
|
|
2691
|
-
{
|
|
2692
|
-
className: cn("hsk-cb-btn", classNames.button, className),
|
|
2693
|
-
onClick: () => setOpen(true),
|
|
2694
|
-
style: customStyles,
|
|
2695
|
-
"data-hsk-theme": hskThemeAttr,
|
|
2696
|
-
"aria-label": "Open AI chat",
|
|
2697
|
-
children: [
|
|
2698
|
-
/* @__PURE__ */ jsx9("span", { className: "hsk-cb-btn-icon", style: { display: "flex", alignItems: "center" }, children: /* @__PURE__ */ jsx9(SparkleIcon2, {}) }),
|
|
2699
|
-
label !== void 0 ? label : null
|
|
2700
|
-
]
|
|
2701
|
-
}
|
|
2702
|
-
),
|
|
2703
|
-
open && mounted && createPortal(
|
|
2704
|
-
/* @__PURE__ */ jsx9(
|
|
2705
|
-
ChatModal,
|
|
2706
|
-
{
|
|
2707
|
-
title,
|
|
2708
|
-
placeholder,
|
|
2709
|
-
backdropColor,
|
|
2710
|
-
backdropBlur,
|
|
2711
|
-
onClose: () => setOpen(false),
|
|
2712
|
-
onSelectSource,
|
|
2713
|
-
defaultCurrency,
|
|
2714
|
-
chips,
|
|
2715
|
-
theme,
|
|
2716
|
-
classNames,
|
|
2717
|
-
enableVoice,
|
|
2718
|
-
voiceLang,
|
|
2719
|
-
enableVision,
|
|
2720
|
-
visionCategoryHint
|
|
2721
|
-
}
|
|
2722
|
-
),
|
|
2723
|
-
document.body
|
|
2724
|
-
)
|
|
2725
|
-
] });
|
|
2726
|
-
}
|
|
2727
|
-
|
|
2728
|
-
// src/components/Sparkle.tsx
|
|
2729
|
-
import { useState as useState7, useEffect as useEffect5, useRef as useRef7 } from "react";
|
|
2730
|
-
import { createPortal as createPortal2 } from "react-dom";
|
|
2731
|
-
import { useSearch as useSearch2, useKiku as useKiku3, useAkropolysContext as useAkropolysContext4 } from "@akropolys/sdk";
|
|
2732
|
-
import { Fragment as Fragment4, jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
2733
|
-
var SparkleIcon3 = ({ className, size = 16 }) => /* @__PURE__ */ jsx10(
|
|
2734
|
-
"svg",
|
|
2735
|
-
{
|
|
2736
|
-
className: cn("hsk-brand-mark", className),
|
|
2737
|
-
width: size,
|
|
2738
|
-
height: size,
|
|
2739
|
-
viewBox: "0 0 100 100",
|
|
2740
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
2741
|
-
"aria-label": "kiku",
|
|
2742
|
-
children: /* @__PURE__ */ jsxs9("g", { transform: "translate(22.7 19) scale(0.62)", fill: "currentColor", fillRule: "evenodd", children: [
|
|
2743
|
-
/* @__PURE__ */ jsx10("path", { d: "M39.4 10.4 Q44 0 48.6 10.4 L86.1 95.8 Q88 100 83.4 100 L4.6 100 Q0 100 1.9 95.8 Z M24 100 L24 65 Q24 60 27.4 56.3 Q44 38 60.6 56.3 Q64 60 64 65 L64 100 Z" }),
|
|
2744
|
-
/* @__PURE__ */ jsx10("circle", { cx: "55", cy: "82", r: "3.4" })
|
|
2745
|
-
] })
|
|
2746
|
-
}
|
|
2747
|
-
);
|
|
2748
|
-
var CloseIcon2 = () => /* @__PURE__ */ jsxs9("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
2749
|
-
/* @__PURE__ */ jsx10("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
2750
|
-
/* @__PURE__ */ jsx10("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
2751
|
-
] });
|
|
2752
|
-
var getFriendlyError2 = (err) => {
|
|
2753
|
-
let str = "";
|
|
2754
|
-
if (typeof err === "string") str = err;
|
|
2755
|
-
else if (err && typeof err === "object" && err.message) str = err.message;
|
|
2756
|
-
else try {
|
|
2757
|
-
str = JSON.stringify(err);
|
|
2758
|
-
} catch {
|
|
2759
|
-
str = String(err);
|
|
2760
|
-
}
|
|
2761
|
-
if (str.toLowerCase().includes("token limit")) {
|
|
2762
|
-
return "You've reached your usage limit. Please update your billing limits in your dashboard to continue.";
|
|
2763
|
-
}
|
|
2764
|
-
try {
|
|
2765
|
-
const parsed = JSON.parse(str);
|
|
2766
|
-
return parsed.error || parsed.message || str;
|
|
2767
|
-
} catch {
|
|
2768
|
-
return str;
|
|
2769
|
-
}
|
|
2770
|
-
};
|
|
2771
|
-
function SparkleModal({
|
|
2772
|
-
productName,
|
|
2773
|
-
limit,
|
|
2774
|
-
backdropColor,
|
|
2775
|
-
backdropBlur,
|
|
2776
|
-
onClose,
|
|
2777
|
-
onNavigate,
|
|
2778
|
-
onResult,
|
|
2779
|
-
theme,
|
|
2780
|
-
classNames = {},
|
|
2781
|
-
product: initialProduct
|
|
2782
|
-
}) {
|
|
2783
|
-
const client = useAkropolysContext4();
|
|
2784
|
-
const [fetchedProduct, setFetchedProduct] = useState7(null);
|
|
2785
|
-
const displayProduct = initialProduct || fetchedProduct;
|
|
2786
|
-
const { results, loading: searchLoading, search } = useSearch2({ type: "vector" });
|
|
2787
|
-
const { messages, sources, loading: chatLoading, error: chatError, send } = useKiku3();
|
|
2788
|
-
const [chatInput, setChatInput] = useState7("");
|
|
2789
|
-
const [isMobile, setIsMobile] = useState7(false);
|
|
2790
|
-
const [showSpecs, setShowSpecs] = useState7(false);
|
|
2791
|
-
const [collapseSimilar, setCollapseSimilar] = useState7(false);
|
|
2792
|
-
const chatBottomRef = useRef7(null);
|
|
2793
|
-
const chatTextareaRef = useRef7(null);
|
|
2794
|
-
useEffect5(() => {
|
|
2795
|
-
if (!initialProduct && !fetchedProduct) {
|
|
2796
|
-
client.api.searchVector(productName, 1).then((res) => {
|
|
2797
|
-
if (res.results && res.results.length > 0) {
|
|
2798
|
-
setFetchedProduct(res.results[0].entity);
|
|
2799
|
-
}
|
|
2800
|
-
}).catch((err) => console.error("[Akropolys] Failed to fetch product details", err));
|
|
2801
|
-
}
|
|
2802
|
-
search(productName, limit);
|
|
2803
|
-
}, [productName, initialProduct, fetchedProduct, client, limit, search]);
|
|
2804
|
-
useEffect5(() => {
|
|
2805
|
-
const handleResize = () => setIsMobile(window.innerWidth <= 768);
|
|
2806
|
-
handleResize();
|
|
2807
|
-
if (typeof window !== "undefined") {
|
|
2808
|
-
window.addEventListener("resize", handleResize);
|
|
2809
|
-
return () => window.removeEventListener("resize", handleResize);
|
|
2810
|
-
}
|
|
2811
|
-
}, []);
|
|
2812
|
-
useEffect5(() => {
|
|
2813
|
-
if (results.length > 0) onResult?.(results);
|
|
2814
|
-
}, [results, onResult]);
|
|
2815
|
-
useEffect5(() => {
|
|
2816
|
-
const h = (e) => {
|
|
2817
|
-
if (e.key === "Escape") onClose();
|
|
2818
|
-
};
|
|
2819
|
-
document.addEventListener("keydown", h);
|
|
2820
|
-
return () => document.removeEventListener("keydown", h);
|
|
2821
|
-
}, [onClose]);
|
|
2822
|
-
useEffect5(() => {
|
|
2823
|
-
chatBottomRef.current?.scrollIntoView({ behavior: "smooth" });
|
|
2824
|
-
}, [messages, chatLoading]);
|
|
2825
|
-
const blurVal = typeof backdropBlur === "number" ? `${backdropBlur}px` : backdropBlur ?? "16px";
|
|
2826
|
-
const bg = backdropColor ?? void 0;
|
|
2827
|
-
const handleNav = (r) => {
|
|
2828
|
-
const prevent = onNavigate?.(r);
|
|
2829
|
-
if (prevent !== false) {
|
|
2830
|
-
onClose();
|
|
2831
|
-
if (r.entity.url) window.location.href = r.entity.url;
|
|
2832
|
-
}
|
|
2833
|
-
};
|
|
2834
|
-
const handleSend = async (text) => {
|
|
2835
|
-
const q = (text ?? chatInput).trim();
|
|
2836
|
-
if (!q || chatLoading) return;
|
|
2837
|
-
setChatInput("");
|
|
2838
|
-
if (chatTextareaRef.current) {
|
|
2839
|
-
chatTextareaRef.current.style.height = "auto";
|
|
2840
|
-
}
|
|
2841
|
-
if (messages.length === 0 && displayProduct) {
|
|
2842
|
-
const contextQuery = `[Context: Shopper is viewing "${displayProduct.name}". Price: ${displayProduct.price}. Description: ${displayProduct.description || ""}]
|
|
2843
|
-
|
|
2844
|
-
Question: ${q}`;
|
|
2845
|
-
await send(contextQuery, q);
|
|
2846
|
-
} else {
|
|
2847
|
-
await send(q);
|
|
2848
|
-
}
|
|
2849
|
-
};
|
|
2850
|
-
const handleKeyDown = (e) => {
|
|
2851
|
-
if (e.key === "Enter" && !e.shiftKey) {
|
|
2852
|
-
e.preventDefault();
|
|
2853
|
-
handleSend();
|
|
2854
|
-
}
|
|
2855
|
-
};
|
|
2856
|
-
const handleInput = (e) => {
|
|
2857
|
-
setChatInput(e.target.value);
|
|
2858
|
-
const t = e.target;
|
|
2859
|
-
t.style.height = "auto";
|
|
2860
|
-
t.style.height = `${Math.min(t.scrollHeight, 140)}px`;
|
|
2861
|
-
};
|
|
2862
|
-
const customStyles = {
|
|
2863
|
-
...theme?.primaryColor && { "--hsk-primary": theme.primaryColor },
|
|
2864
|
-
...theme?.backgroundColor && { "--hsk-bg": theme.backgroundColor },
|
|
2865
|
-
...theme?.textColor && { "--hsk-text": theme.textColor },
|
|
2866
|
-
...theme?.fontFamily && { "--hsk-font": theme.fontFamily },
|
|
2867
|
-
...theme?.borderRadius && { "--hsk-border-radius": theme.borderRadius }
|
|
2868
|
-
};
|
|
2869
|
-
const displayMessages = messages.length === 0 && displayProduct ? [
|
|
2870
|
-
{
|
|
2871
|
-
role: "assistant",
|
|
2872
|
-
content: `Hi! I can help you with **${displayProduct.name}**. Ask me about its specifications, features, compare it with other options, or find alternatives!`
|
|
2873
|
-
}
|
|
2874
|
-
] : messages;
|
|
2875
|
-
if (isMobile) {
|
|
2876
|
-
return /* @__PURE__ */ jsx10(
|
|
2877
|
-
"div",
|
|
2878
|
-
{
|
|
2879
|
-
className: cn("hsk-sp-backdrop hsk-sp-mobile-view", classNames.backdrop),
|
|
2880
|
-
onClick: onClose,
|
|
2881
|
-
style: {
|
|
2882
|
-
backdropFilter: `blur(${blurVal})`,
|
|
2883
|
-
WebkitBackdropFilter: `blur(${blurVal})`,
|
|
2884
|
-
background: bg ?? void 0,
|
|
2885
|
-
...customStyles
|
|
2886
|
-
},
|
|
2887
|
-
children: /* @__PURE__ */ jsxs9("div", { className: cn("hsk-sp-card hsk-sp-fullscreen hsk-sp-mobile-card", classNames.card), onClick: (e) => e.stopPropagation(), children: [
|
|
2888
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-header", children: [
|
|
2889
|
-
/* @__PURE__ */ jsx10("span", { className: "hsk-sp-header-icon", style: { display: "flex", alignItems: "center" }, children: /* @__PURE__ */ jsx10(SparkleIcon3, {}) }),
|
|
2890
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-header-body", children: [
|
|
2891
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-header-title-row", children: [
|
|
2892
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-sp-header-title", children: displayProduct?.name || productName }),
|
|
2893
|
-
displayProduct && /* @__PURE__ */ jsx10(
|
|
2894
|
-
"button",
|
|
2895
|
-
{
|
|
2896
|
-
type: "button",
|
|
2897
|
-
className: "hsk-sp-header-specs-btn",
|
|
2898
|
-
onClick: () => setShowSpecs(true),
|
|
2899
|
-
children: "Specs"
|
|
2900
|
-
}
|
|
2901
|
-
)
|
|
2902
|
-
] }),
|
|
2903
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-sp-header-sub", children: "kiku" })
|
|
2904
|
-
] }),
|
|
2905
|
-
/* @__PURE__ */ jsx10("button", { className: "hsk-sp-close", onClick: onClose, "aria-label": "Close", children: /* @__PURE__ */ jsx10(CloseIcon2, {}) })
|
|
2906
|
-
] }),
|
|
2907
|
-
searchLoading && /* @__PURE__ */ jsx10("div", { className: "hsk-sp-bar" }),
|
|
2908
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-mobile-chat-container", children: [
|
|
2909
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-cb-msgs", children: [
|
|
2910
|
-
displayMessages.map((msg, idx) => {
|
|
2911
|
-
const isUser = msg.role === "user";
|
|
2912
|
-
return /* @__PURE__ */ jsx10("div", { className: "hsk-cb-msg-group", children: isUser ? /* @__PURE__ */ jsx10("div", { className: "hsk-cb-user-msg", children: /* @__PURE__ */ jsx10("div", { className: "hsk-cb-user-bubble", children: msg.content }) }) : /* @__PURE__ */ jsxs9("div", { className: "hsk-cb-ai-msg", children: [
|
|
2913
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-cb-ai-icon", style: { display: "flex", alignItems: "center" }, children: /* @__PURE__ */ jsx10(SparkleIcon3, {}) }),
|
|
2914
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-cb-ai-body", children: [
|
|
2915
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-cb-ai-text", children: renderMarkdown(msg.content) }),
|
|
2916
|
-
idx === 0 && displayProduct && /* @__PURE__ */ jsxs9("div", { className: "hsk-sp-mobile-attachment-deck", children: [
|
|
2917
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-mobile-main-card", children: [
|
|
2918
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-sp-mobile-main-card-img", children: displayProduct.images?.[0] ? /* @__PURE__ */ jsx10("img", { src: displayProduct.images[0], alt: displayProduct.name }) : /* @__PURE__ */ jsx10("span", { children: "\xF0\u0178\u203A\x8D" }) }),
|
|
2919
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-mobile-main-card-info", children: [
|
|
2920
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-sp-mobile-main-card-brand", children: displayProduct.brand || displayProduct.category || "Product" }),
|
|
2921
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-sp-mobile-main-card-name", children: displayProduct.name }),
|
|
2922
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-mobile-main-card-price", children: [
|
|
2923
|
-
displayProduct.currency ?? "KES",
|
|
2924
|
-
" ",
|
|
2925
|
-
parseFloat(displayProduct.price?.replace(/[^0-9.]/g, "") || "0").toLocaleString()
|
|
2926
|
-
] })
|
|
2927
|
-
] }),
|
|
2928
|
-
(displayProduct.specs && Object.keys(displayProduct.specs).length > 0 || displayProduct.description) && /* @__PURE__ */ jsx10(
|
|
2929
|
-
"button",
|
|
2930
|
-
{
|
|
2931
|
-
type: "button",
|
|
2932
|
-
className: "hsk-sp-mobile-main-card-specs-btn",
|
|
2933
|
-
onClick: () => setShowSpecs(true),
|
|
2934
|
-
children: "Specs"
|
|
2935
|
-
}
|
|
2936
|
-
)
|
|
2937
|
-
] }),
|
|
2938
|
-
(() => {
|
|
2939
|
-
const similarProducts = results.filter(
|
|
2940
|
-
(r) => {
|
|
2941
|
-
const isSameName = !!(r.entity.name && displayProduct?.name && r.entity.name.toLowerCase() === displayProduct.name.toLowerCase());
|
|
2942
|
-
const isSameSlug = r.entity.slug && displayProduct?.slug && r.entity.slug.toLowerCase() === displayProduct.slug.toLowerCase();
|
|
2943
|
-
return !isSameName && !isSameSlug;
|
|
2944
|
-
}
|
|
2945
|
-
);
|
|
2946
|
-
if (similarProducts.length === 0) return null;
|
|
2947
|
-
return /* @__PURE__ */ jsxs9("div", { className: "hsk-sp-mobile-similar-carousel-inline", children: [
|
|
2948
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-sp-mobile-similar-carousel-title", children: "Similar Products" }),
|
|
2949
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-sp-mobile-similar-carousel-list", children: similarProducts.map((r) => {
|
|
2950
|
-
const price = parseFloat(r.entity.price?.replace(/[^0-9.]/g, "") || "0");
|
|
2951
|
-
const currency = r.entity.currency ?? "KES";
|
|
2952
|
-
return /* @__PURE__ */ jsxs9(
|
|
2953
|
-
"div",
|
|
2954
|
-
{
|
|
2955
|
-
className: "hsk-sp-mobile-similar-carousel-item",
|
|
2956
|
-
onClick: () => handleNav(r),
|
|
2957
|
-
children: [
|
|
2958
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-sp-mobile-similar-carousel-img", children: r.entity.images?.[0] ? /* @__PURE__ */ jsx10("img", { src: r.entity.images[0], alt: r.entity.name }) : /* @__PURE__ */ jsx10("span", { children: "\xF0\u0178\u203A\x8D" }) }),
|
|
2959
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-mobile-similar-carousel-meta", children: [
|
|
2960
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-sp-mobile-similar-carousel-name", title: r.entity.name, children: r.entity.name }),
|
|
2961
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-mobile-similar-carousel-price", children: [
|
|
2962
|
-
currency,
|
|
2963
|
-
" ",
|
|
2964
|
-
price.toLocaleString()
|
|
2965
|
-
] })
|
|
2966
|
-
] })
|
|
2967
|
-
]
|
|
2968
|
-
},
|
|
2969
|
-
r.id
|
|
2970
|
-
);
|
|
2971
|
-
}) })
|
|
2972
|
-
] });
|
|
2973
|
-
})()
|
|
2974
|
-
] })
|
|
2975
|
-
] })
|
|
2976
|
-
] }) }, idx);
|
|
2977
|
-
}),
|
|
2978
|
-
chatLoading && /* @__PURE__ */ jsxs9("div", { className: "hsk-cb-typing-row", children: [
|
|
2979
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-cb-ai-icon", style: { display: "flex", alignItems: "center" }, children: /* @__PURE__ */ jsx10(SparkleIcon3, {}) }),
|
|
2980
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-cb-typing", children: [
|
|
2981
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-cb-dot" }),
|
|
2982
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-cb-dot" }),
|
|
2983
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-cb-dot" })
|
|
2984
|
-
] })
|
|
2985
|
-
] }),
|
|
2986
|
-
chatError && /* @__PURE__ */ jsx10("div", { className: "hsk-cb-error", children: getFriendlyError2(chatError) }),
|
|
2987
|
-
/* @__PURE__ */ jsx10("div", { ref: chatBottomRef, style: { height: 1 } })
|
|
2988
|
-
] }),
|
|
2989
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-cb-input-wrap", children: /* @__PURE__ */ jsxs9("div", { className: "hsk-cb-input-box", children: [
|
|
2990
|
-
/* @__PURE__ */ jsx10(
|
|
2991
|
-
"textarea",
|
|
2992
|
-
{
|
|
2993
|
-
ref: chatTextareaRef,
|
|
2994
|
-
className: "hsk-cb-textarea",
|
|
2995
|
-
value: chatInput,
|
|
2996
|
-
onChange: handleInput,
|
|
2997
|
-
onKeyDown: handleKeyDown,
|
|
2998
|
-
placeholder: "Ask about this product, specs, or comparison...",
|
|
2999
|
-
rows: 1,
|
|
3000
|
-
disabled: chatLoading
|
|
3001
|
-
}
|
|
3002
|
-
),
|
|
3003
|
-
/* @__PURE__ */ jsx10(
|
|
3004
|
-
"button",
|
|
3005
|
-
{
|
|
3006
|
-
className: "hsk-cb-send",
|
|
3007
|
-
onClick: () => handleSend(),
|
|
3008
|
-
disabled: !chatInput.trim() || chatLoading,
|
|
3009
|
-
"aria-label": "Send message",
|
|
3010
|
-
children: /* @__PURE__ */ jsx10(ArrowUpIcon, {})
|
|
3011
|
-
}
|
|
3012
|
-
)
|
|
3013
|
-
] }) })
|
|
3014
|
-
] }),
|
|
3015
|
-
showSpecs && displayProduct && /* @__PURE__ */ jsx10("div", { className: "hsk-sp-mobile-specs-overlay", onClick: () => setShowSpecs(false), children: /* @__PURE__ */ jsxs9("div", { className: "hsk-sp-mobile-specs-drawer", onClick: (e) => e.stopPropagation(), children: [
|
|
3016
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-mobile-specs-header", children: [
|
|
3017
|
-
/* @__PURE__ */ jsx10("h3", { children: "Specifications" }),
|
|
3018
|
-
/* @__PURE__ */ jsx10("button", { type: "button", onClick: () => setShowSpecs(false), children: "Close" })
|
|
3019
|
-
] }),
|
|
3020
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-mobile-specs-body", children: [
|
|
3021
|
-
/* @__PURE__ */ jsx10("h4", { className: "hsk-sp-mobile-specs-title", children: displayProduct.name }),
|
|
3022
|
-
displayProduct.description && /* @__PURE__ */ jsxs9("div", { className: "hsk-sp-mobile-specs-desc", children: [
|
|
3023
|
-
/* @__PURE__ */ jsx10("h5", { children: "Description" }),
|
|
3024
|
-
/* @__PURE__ */ jsx10("p", { children: displayProduct.description })
|
|
3025
|
-
] }),
|
|
3026
|
-
displayProduct.specs && Object.keys(displayProduct.specs).length > 0 && /* @__PURE__ */ jsxs9("div", { className: "hsk-sp-mobile-specs-list", children: [
|
|
3027
|
-
/* @__PURE__ */ jsx10("h5", { children: "Details" }),
|
|
3028
|
-
Object.entries(displayProduct.specs).map(([key, val]) => /* @__PURE__ */ jsxs9("div", { className: "hsk-sp-mobile-spec-row", children: [
|
|
3029
|
-
/* @__PURE__ */ jsx10("span", { className: "hsk-sp-mobile-spec-label", children: key }),
|
|
3030
|
-
/* @__PURE__ */ jsx10("span", { className: "hsk-sp-mobile-spec-value", children: val })
|
|
3031
|
-
] }, key))
|
|
3032
|
-
] })
|
|
3033
|
-
] })
|
|
3034
|
-
] }) })
|
|
3035
|
-
] })
|
|
3036
|
-
}
|
|
3037
|
-
);
|
|
3038
|
-
}
|
|
3039
|
-
return /* @__PURE__ */ jsx10(
|
|
3040
|
-
"div",
|
|
3041
|
-
{
|
|
3042
|
-
className: cn("hsk-sp-backdrop", classNames.backdrop),
|
|
3043
|
-
onClick: onClose,
|
|
3044
|
-
style: {
|
|
3045
|
-
backdropFilter: `blur(${blurVal})`,
|
|
3046
|
-
WebkitBackdropFilter: `blur(${blurVal})`,
|
|
3047
|
-
background: bg ?? void 0,
|
|
3048
|
-
...customStyles
|
|
3049
|
-
},
|
|
3050
|
-
children: /* @__PURE__ */ jsxs9("div", { className: cn("hsk-sp-card hsk-sp-fullscreen", classNames.card), onClick: (e) => e.stopPropagation(), children: [
|
|
3051
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-header", children: [
|
|
3052
|
-
/* @__PURE__ */ jsx10("span", { className: "hsk-sp-header-icon", style: { display: "flex", alignItems: "center" }, children: /* @__PURE__ */ jsx10(SparkleIcon3, {}) }),
|
|
3053
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-header-body", children: [
|
|
3054
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-sp-header-title", children: displayProduct?.name || productName }),
|
|
3055
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-sp-header-sub", children: "Ask questions, compare specs, or check similar products" })
|
|
3056
|
-
] }),
|
|
3057
|
-
/* @__PURE__ */ jsx10("button", { className: "hsk-sp-close", onClick: onClose, "aria-label": "Close", children: /* @__PURE__ */ jsx10(CloseIcon2, {}) })
|
|
3058
|
-
] }),
|
|
3059
|
-
searchLoading && /* @__PURE__ */ jsx10("div", { className: "hsk-sp-bar" }),
|
|
3060
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-body", children: [
|
|
3061
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-details-pane", children: [
|
|
3062
|
-
displayProduct && /* @__PURE__ */ jsxs9("div", { className: "hsk-sp-product-profile-container", children: [
|
|
3063
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-product-profile", children: [
|
|
3064
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-sp-details-imgwrap", children: displayProduct.images?.[0] ? /* @__PURE__ */ jsx10("img", { src: displayProduct.images[0], alt: displayProduct.name }) : /* @__PURE__ */ jsx10("span", { className: "hsk-sp-img-placeholder", children: "\xF0\u0178\u203A\x8D" }) }),
|
|
3065
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-details-meta", children: [
|
|
3066
|
-
displayProduct.brand && /* @__PURE__ */ jsx10("span", { className: "hsk-sp-item-brand", children: displayProduct.brand }),
|
|
3067
|
-
displayProduct.category && /* @__PURE__ */ jsx10("span", { className: "hsk-sp-item-cat", children: displayProduct.category }),
|
|
3068
|
-
/* @__PURE__ */ jsx10("h2", { className: "hsk-sp-details-name", children: displayProduct.name }),
|
|
3069
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-item-price-row", children: [
|
|
3070
|
-
/* @__PURE__ */ jsx10("span", { className: "hsk-sp-item-currency", children: displayProduct.currency ?? "KES" }),
|
|
3071
|
-
/* @__PURE__ */ jsx10("span", { className: "hsk-sp-item-price", children: parseFloat(displayProduct.price?.replace(/[^0-9.]/g, "") || "0").toLocaleString() }),
|
|
3072
|
-
displayProduct.originalPrice && /* @__PURE__ */ jsx10("span", { className: "hsk-sp-item-original-price", children: parseFloat(displayProduct.originalPrice.replace(/[^0-9.]/g, "") || "0").toLocaleString() }),
|
|
3073
|
-
displayProduct.discount && /* @__PURE__ */ jsxs9("span", { className: "hsk-sp-item-discount", children: [
|
|
3074
|
-
"(",
|
|
3075
|
-
displayProduct.discount,
|
|
3076
|
-
")"
|
|
3077
|
-
] })
|
|
3078
|
-
] }),
|
|
3079
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-item-meta-badges", children: [
|
|
3080
|
-
displayProduct.rating && /* @__PURE__ */ jsxs9("span", { className: "hsk-sp-meta-badge hsk-sp-meta-badge-rating", children: [
|
|
3081
|
-
"\xE2\u02DC\u2026 ",
|
|
3082
|
-
parseFloat(displayProduct.rating.toString()).toFixed(1),
|
|
3083
|
-
" ",
|
|
3084
|
-
displayProduct.reviewCount ? `(${displayProduct.reviewCount})` : ""
|
|
3085
|
-
] }),
|
|
3086
|
-
displayProduct.availability && /* @__PURE__ */ jsx10("span", { className: `hsk-sp-meta-badge hsk-sp-meta-badge-avail ${displayProduct.availability.toLowerCase().includes("in") ? "in-stock" : "out-stock"}`, children: displayProduct.availability }),
|
|
3087
|
-
displayProduct.stock && !displayProduct.availability && /* @__PURE__ */ jsxs9("span", { className: "hsk-sp-meta-badge hsk-sp-meta-badge-stock", children: [
|
|
3088
|
-
"Stock: ",
|
|
3089
|
-
displayProduct.stock
|
|
3090
|
-
] })
|
|
3091
|
-
] })
|
|
3092
|
-
] })
|
|
3093
|
-
] }),
|
|
3094
|
-
displayProduct.specs && Object.keys(displayProduct.specs).length > 0 && /* @__PURE__ */ jsx10("div", { className: "hsk-sp-specs-horizontal", children: Object.entries(displayProduct.specs).map(([key, val]) => /* @__PURE__ */ jsxs9("div", { className: "hsk-sp-spec-item-horizontal", children: [
|
|
3095
|
-
/* @__PURE__ */ jsxs9("span", { className: "hsk-sp-spec-label-horizontal", children: [
|
|
3096
|
-
key,
|
|
3097
|
-
":"
|
|
3098
|
-
] }),
|
|
3099
|
-
/* @__PURE__ */ jsx10("span", { className: "hsk-sp-spec-value-horizontal", title: val, children: val })
|
|
3100
|
-
] }, key)) }),
|
|
3101
|
-
displayProduct.description && /* @__PURE__ */ jsxs9("div", { className: "hsk-sp-details-desc", children: [
|
|
3102
|
-
/* @__PURE__ */ jsx10("h4", { children: "Description" }),
|
|
3103
|
-
/* @__PURE__ */ jsx10("p", { children: displayProduct.description })
|
|
3104
|
-
] })
|
|
3105
|
-
] }),
|
|
3106
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-similar-section", children: [
|
|
3107
|
-
/* @__PURE__ */ jsx10("h3", { children: "Similar Products" }),
|
|
3108
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-sp-results", children: (() => {
|
|
3109
|
-
const similarProducts = results.filter(
|
|
3110
|
-
(r) => {
|
|
3111
|
-
const isSameName = !!(r.entity.name && displayProduct?.name && r.entity.name.toLowerCase() === displayProduct.name.toLowerCase());
|
|
3112
|
-
const isSameSlug = r.entity.slug && displayProduct?.slug && r.entity.slug.toLowerCase() === displayProduct.slug.toLowerCase();
|
|
3113
|
-
return !isSameName && !isSameSlug;
|
|
3114
|
-
}
|
|
3115
|
-
);
|
|
3116
|
-
if (!searchLoading && similarProducts.length === 0) {
|
|
3117
|
-
return /* @__PURE__ */ jsx10("div", { className: "hsk-sp-empty", children: "No similar products found." });
|
|
3118
|
-
}
|
|
3119
|
-
return similarProducts.map((r, i) => {
|
|
3120
|
-
const price = parseFloat(r.entity.price?.replace(/[^0-9.]/g, "") || "0");
|
|
3121
|
-
const currency = r.entity.currency ?? "KES";
|
|
3122
|
-
return /* @__PURE__ */ jsxs9(
|
|
3123
|
-
"div",
|
|
3124
|
-
{
|
|
3125
|
-
className: cn("hsk-sp-item", classNames.item),
|
|
3126
|
-
style: { animationDelay: `${i * 55}ms`, cursor: "pointer" },
|
|
3127
|
-
onClick: () => handleNav(r),
|
|
3128
|
-
children: [
|
|
3129
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-sp-img-wrap", children: r.entity.images?.[0] ? /* @__PURE__ */ jsx10("img", { src: r.entity.images[0], alt: r.entity.name }) : /* @__PURE__ */ jsx10("span", { className: "hsk-sp-img-placeholder", children: "\xF0\u0178\u203A\x8D" }) }),
|
|
3130
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-item-body", children: [
|
|
3131
|
-
/* @__PURE__ */ jsxs9("div", { children: [
|
|
3132
|
-
r.entity.category && /* @__PURE__ */ jsx10("div", { className: "hsk-sp-item-cat", children: r.entity.category }),
|
|
3133
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-sp-item-name", title: r.entity.name, children: r.entity.name })
|
|
3134
|
-
] }),
|
|
3135
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-item-price-row", children: [
|
|
3136
|
-
/* @__PURE__ */ jsx10("span", { className: "hsk-sp-item-currency", children: currency }),
|
|
3137
|
-
/* @__PURE__ */ jsx10("span", { className: "hsk-sp-item-price", children: price.toLocaleString() })
|
|
3138
|
-
] }),
|
|
3139
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-sp-actions", children: /* @__PURE__ */ jsx10(
|
|
3140
|
-
"button",
|
|
3141
|
-
{
|
|
3142
|
-
className: "hsk-sp-action hsk-sp-action-primary",
|
|
3143
|
-
onClick: (e) => {
|
|
3144
|
-
e.stopPropagation();
|
|
3145
|
-
handleNav(r);
|
|
3146
|
-
},
|
|
3147
|
-
children: "View"
|
|
3148
|
-
}
|
|
3149
|
-
) })
|
|
3150
|
-
] })
|
|
3151
|
-
]
|
|
3152
|
-
},
|
|
3153
|
-
r.id
|
|
3154
|
-
);
|
|
3155
|
-
});
|
|
3156
|
-
})() })
|
|
3157
|
-
] })
|
|
3158
|
-
] }),
|
|
3159
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-sp-chat-pane", children: [
|
|
3160
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-cb-msgs", children: [
|
|
3161
|
-
displayMessages.map((msg, idx) => {
|
|
3162
|
-
const isUser = msg.role === "user";
|
|
3163
|
-
return /* @__PURE__ */ jsx10("div", { className: "hsk-cb-msg-group", children: isUser ? /* @__PURE__ */ jsx10("div", { className: "hsk-cb-user-msg", children: /* @__PURE__ */ jsx10("div", { className: "hsk-cb-user-bubble", children: msg.content }) }) : /* @__PURE__ */ jsxs9("div", { className: "hsk-cb-ai-msg", children: [
|
|
3164
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-cb-ai-icon", style: { display: "flex", alignItems: "center" }, children: /* @__PURE__ */ jsx10(SparkleIcon3, {}) }),
|
|
3165
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-cb-ai-body", children: /* @__PURE__ */ jsx10("div", { className: "hsk-cb-ai-text", children: renderMarkdown(msg.content) }) })
|
|
3166
|
-
] }) }, idx);
|
|
3167
|
-
}),
|
|
3168
|
-
chatLoading && /* @__PURE__ */ jsxs9("div", { className: "hsk-cb-typing-row", children: [
|
|
3169
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-cb-ai-icon", style: { display: "flex", alignItems: "center" }, children: /* @__PURE__ */ jsx10(SparkleIcon3, {}) }),
|
|
3170
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-cb-typing", children: [
|
|
3171
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-cb-dot" }),
|
|
3172
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-cb-dot" }),
|
|
3173
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-cb-dot" })
|
|
3174
|
-
] })
|
|
3175
|
-
] }),
|
|
3176
|
-
chatError && /* @__PURE__ */ jsx10("div", { className: "hsk-cb-error", children: getFriendlyError2(chatError) }),
|
|
3177
|
-
/* @__PURE__ */ jsx10("div", { ref: chatBottomRef, style: { height: 1 } })
|
|
3178
|
-
] }),
|
|
3179
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-cb-input-wrap", children: [
|
|
3180
|
-
/* @__PURE__ */ jsxs9("div", { className: "hsk-cb-input-box", children: [
|
|
3181
|
-
/* @__PURE__ */ jsx10(
|
|
3182
|
-
"textarea",
|
|
3183
|
-
{
|
|
3184
|
-
ref: chatTextareaRef,
|
|
3185
|
-
className: "hsk-cb-textarea",
|
|
3186
|
-
value: chatInput,
|
|
3187
|
-
onChange: handleInput,
|
|
3188
|
-
onKeyDown: handleKeyDown,
|
|
3189
|
-
placeholder: "Ask about this product, specs, or comparison...",
|
|
3190
|
-
rows: 1,
|
|
3191
|
-
disabled: chatLoading
|
|
3192
|
-
}
|
|
3193
|
-
),
|
|
3194
|
-
/* @__PURE__ */ jsx10(
|
|
3195
|
-
"button",
|
|
3196
|
-
{
|
|
3197
|
-
className: "hsk-cb-send",
|
|
3198
|
-
onClick: () => handleSend(),
|
|
3199
|
-
disabled: !chatInput.trim() || chatLoading,
|
|
3200
|
-
"aria-label": "Send message",
|
|
3201
|
-
children: /* @__PURE__ */ jsx10(ArrowUpIcon, {})
|
|
3202
|
-
}
|
|
3203
|
-
)
|
|
3204
|
-
] }),
|
|
3205
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-cb-hint", children: "Akropolys \xB7 instant product knowledge" })
|
|
3206
|
-
] })
|
|
3207
|
-
] })
|
|
3208
|
-
] }),
|
|
3209
|
-
/* @__PURE__ */ jsx10("div", { className: "hsk-sp-footer", children: /* @__PURE__ */ jsx10("span", { className: "hsk-sp-esc", children: "Esc to close" }) })
|
|
3210
|
-
] })
|
|
3211
|
-
}
|
|
3212
|
-
);
|
|
3213
|
-
}
|
|
3214
|
-
function Sparkle({
|
|
3215
|
-
productName,
|
|
3216
|
-
limit = 8,
|
|
3217
|
-
onResult,
|
|
3218
|
-
backdropColor,
|
|
3219
|
-
backdropBlur,
|
|
3220
|
-
className,
|
|
3221
|
-
onNavigate,
|
|
3222
|
-
theme,
|
|
3223
|
-
classNames = {},
|
|
3224
|
-
product,
|
|
3225
|
-
children
|
|
3226
|
-
}) {
|
|
3227
|
-
const [open, setOpen] = useState7(false);
|
|
3228
|
-
const [mounted, setMounted] = useState7(false);
|
|
3229
|
-
useEffect5(() => {
|
|
3230
|
-
setMounted(true);
|
|
3231
|
-
}, []);
|
|
3232
|
-
const customStyles = {
|
|
3233
|
-
...theme?.primaryColor && { "--hsk-primary": theme.primaryColor },
|
|
3234
|
-
...theme?.backgroundColor && { "--hsk-bg": theme.backgroundColor },
|
|
3235
|
-
...theme?.textColor && { "--hsk-text": theme.textColor },
|
|
3236
|
-
...theme?.fontFamily && { "--hsk-font": theme.fontFamily },
|
|
3237
|
-
...theme?.borderRadius && { "--hsk-border-radius": theme.borderRadius }
|
|
3238
|
-
};
|
|
3239
|
-
return /* @__PURE__ */ jsxs9(Fragment4, { children: [
|
|
3240
|
-
/* @__PURE__ */ jsx10(
|
|
3241
|
-
"button",
|
|
3242
|
-
{
|
|
3243
|
-
className: cn("hsk-sp-btn", classNames.button, className),
|
|
3244
|
-
onClick: () => setOpen(true),
|
|
3245
|
-
style: customStyles,
|
|
3246
|
-
title: "Find similar products",
|
|
3247
|
-
"aria-label": "Find similar products",
|
|
3248
|
-
children: children || /* @__PURE__ */ jsx10(SparkleIcon3, {})
|
|
3249
|
-
}
|
|
3250
|
-
),
|
|
3251
|
-
open && mounted && createPortal2(
|
|
3252
|
-
/* @__PURE__ */ jsx10(
|
|
3253
|
-
SparkleModal,
|
|
3254
|
-
{
|
|
3255
|
-
productName,
|
|
3256
|
-
limit,
|
|
3257
|
-
onResult,
|
|
3258
|
-
backdropColor,
|
|
3259
|
-
backdropBlur,
|
|
3260
|
-
onClose: () => setOpen(false),
|
|
3261
|
-
onNavigate,
|
|
3262
|
-
theme,
|
|
3263
|
-
classNames,
|
|
3264
|
-
product
|
|
3265
|
-
}
|
|
3266
|
-
),
|
|
3267
|
-
document.body
|
|
3268
|
-
)
|
|
3269
|
-
] });
|
|
3270
|
-
}
|
|
3271
|
-
export {
|
|
3272
|
-
ChatWidget,
|
|
3273
|
-
ComparisonMatrix,
|
|
3274
|
-
KikuButton,
|
|
3275
|
-
ChatWidget as KikuChat,
|
|
3276
|
-
SearchBar,
|
|
3277
|
-
Sparkle,
|
|
3278
|
-
VisualSearch,
|
|
3279
|
-
VoiceButton
|
|
3280
|
-
};
|
|
2
|
+
import{useState as hn,useEffect as pn,useRef as un}from"react";import{useSearch as ac,useAkropolysContext as rc}from"@akropolys/sdk";function ln(e){var r,t,a="";if(typeof e=="string"||typeof e=="number")a+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(r=0;r<o;r++)e[r]&&(t=ln(e[r]))&&(a&&(a+=" "),a+=t)}else for(t in e)e[t]&&(a&&(a+=" "),a+=t);return a}function dn(){for(var e,r,t=0,a="",o=arguments.length;t<o;t++)(e=arguments[t])&&(r=ln(e))&&(a&&(a+=" "),a+=r);return a}function Z(...e){return dn(e)}import{Fragment as kn,jsx as De,jsxs as st}from"react/jsx-runtime";var mn=()=>st("svg",{width:"15",height:"15",viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[De("circle",{cx:"8.5",cy:"8.5",r:"5.5"}),De("line",{x1:"13",y1:"13",x2:"18",y2:"18"})]});function oc({placeholder:e="Search products\u2026",limit:r=10,debounceMs:t=150,onSelect:a,className:o,inputClassName:i,dropdownClassName:s,renderResult:c,theme:n,classNames:l={}}){let[m,p]=hn(""),[u,d]=hn(!1),{results:k,loading:g,search:v,clear:x}=ac({debounceMs:t}),S=rc(),L=un(null),b=un(!1);pn(()=>{if(b.current){b.current=!1;return}if(!m.trim()){x(),d(!1);return}d(!0),v(m,r)},[m]),pn(()=>{let w=U=>{L.current&&!L.current.contains(U.target)&&d(!1)};return document.addEventListener("mousedown",w),()=>document.removeEventListener("mousedown",w)},[]);let M=w=>{m.trim()&&S.api.searchVector(m,1,void 0,!0).catch(()=>{}),b.current=!0,d(!1),p(w.entity.title??w.entity.name??""),a?.(w)},N=()=>{m.trim()&&(S.api.searchVector(m,1,void 0,!0).catch(()=>{}),k.length>0&&M(k[0]))},y=u&&m.trim().length>0,O={...n?.primaryColor&&{"--hsk-primary":n.primaryColor},...n?.backgroundColor&&{"--hsk-bg":n.backgroundColor},...n?.textColor&&{"--hsk-text":n.textColor},...n?.fontFamily&&{"--hsk-font":n.fontFamily},...n?.borderRadius&&{"--hsk-border-radius":n.borderRadius}};return st("div",{className:Z("hsk-sb-wrap",l.root,o),ref:L,style:O,children:[De("span",{className:"hsk-sb-icon",children:De(mn,{})}),De("input",{className:Z("hsk-sb-input",l.input,i),type:"text",value:m,placeholder:e,onChange:w=>p(w.target.value),onFocus:()=>k.length>0&&m.trim()&&d(!0),onKeyDown:w=>{w.key==="Enter"&&N()},autoComplete:"off",spellCheck:!1}),y&&st("div",{className:Z("hsk-sb-drop",l.dropdown,s),style:{position:"absolute"},children:[g&&De("div",{className:"hsk-sb-loading-bar"}),g&&k.length===0?st(kn,{children:[st("div",{className:"hsk-sb-skeleton-row",children:[De("span",{className:"hsk-sb-skeleton-icon"}),st("div",{className:"hsk-sb-row-body",children:[De("div",{className:"hsk-sb-skeleton-text1"}),De("div",{className:"hsk-sb-skeleton-text2"})]})]}),st("div",{className:"hsk-sb-skeleton-row",children:[De("span",{className:"hsk-sb-skeleton-icon"}),st("div",{className:"hsk-sb-row-body",children:[De("div",{className:"hsk-sb-skeleton-text1",style:{width:"45%"}}),De("div",{className:"hsk-sb-skeleton-text2",style:{width:"25%"}})]})]})]}):st(kn,{children:[k.length===0&&!g&&st("div",{className:"hsk-sb-empty",children:["No results for \u201C",m,"\u201D"]}),k.map((w,U)=>{if(c)return De("div",{onClick:()=>M(w),className:"hsk-sb-fade",style:{animationDelay:`${U*18}ms`},children:c(w)},w.id);let F=w.entity.image??w.entity.thumbnail??w.entity.images?.[0];return st("div",{className:Z("hsk-sb-row hsk-sb-fade",l.row),style:{animationDelay:`${U*18}ms`},onClick:()=>M(w),children:[De("span",{className:"hsk-sb-row-thumb",children:F?De("img",{src:F,alt:"",loading:"lazy",onError:I=>{I.currentTarget.style.display="none"}}):De(mn,{})}),st("div",{className:"hsk-sb-row-body",children:[De("div",{className:"hsk-sb-row-title",children:w.entity.title??w.entity.name}),(w.entity.category||w.entity.brand)&&De("div",{className:"hsk-sb-row-sub",children:w.entity.category??w.entity.brand})]})]},w.id)})]})]})]})}import{useState as Oa,useRef as Wa,useEffect as no}from"react";import{useKiku as Yc,useAkropolysContext as Gc,resolveDisplayFields as Qc}from"@akropolys/sdk";import ma from"react";import{Fragment as xc,jsx as ge,jsxs as yc}from"react/jsx-runtime";var nc=/[ \t]{2,}/g,ic=/ ([.,!?:;])/g,sc=/\(([ \t]+)/g,cc=/([ \t]+)\)/g,lc=/(\d+)\s+(MP|mAh|W|GB|MB|KHz|Hz|KSh|KES|USD|EUR)\b/gi,dc=/(!\[[^\]]*\]\([^)]+\)|\[[^\]]+\]\([^)]+\)|\*\*[^*]+\*\*|`[^`]+`)/g,hc=/^!\[([^\]]*)\]\(([^)]+)\)$/,pc=/^\[([^\]]+)\]\(([^)]+)\)$/,uc=/^(https?|data:image|blob):/i,mc=/^(https?|mailto|tel):/i,kc=/memory|mimi/i,bc=/mimi\.akropolys/i,fc=e=>e&&e.replace(nc," ").replace(ic,"$1").replace(sc,"(").replace(cc,")").replace(lc,"$1 $2"),Tt=(e,r)=>fc(e).split(dc).map((o,i)=>{if(!o)return null;let s=`${r}-inline-${i}`;if(o.startsWith("`")&&o.endsWith("`"))return ge("code",{className:"hsk-markdown-code",children:o.slice(1,-1)},s);if(o.startsWith("**")&&o.endsWith("**"))return ge("strong",{children:Tt(o.slice(2,-2),s)},s);let c=o.match(hc);if(c){let l=c[1],m=c[2];return uc.test(m)||m.startsWith("/")?ge("img",{src:m,alt:l||"Product image",className:"hsk-markdown-img",loading:"lazy",onError:u=>{u.target.style.display="none"}},s):null}let n=o.match(pc);if(n){let l=n[1],m=n[2];return kc.test(l)||bc.test(m)?null:mc.test(m)||m.startsWith("/")?ge("a",{href:m,target:"_blank",rel:"noopener noreferrer",className:"hsk-markdown-link",children:Tt(l,s)},s):ge("span",{children:Tt(l,s)},s)}return o});function bn(e,r){let t=e.trim();return r?t.includes("|"):t.startsWith("|")}function fn(e){let r=e.trim();return r.startsWith("|")&&(r=r.slice(1)),r.endsWith("|")&&(r=r.slice(0,-1)),r.split("|").map(t=>t.trim())}function gc({children:e}){let r=ma.useRef(null),[t,a]=ma.useState("none"),[o,i]=ma.useState(!1),s=ma.useRef({startX:0,scrollLeft:0,isDown:!1,hasMoved:!1}),c=ma.useCallback(()=>{let p=r.current;if(!p)return;if(!(p.scrollWidth>p.clientWidth+2)){a("none");return}let d=getComputedStyle(p).direction==="rtl",k=Math.abs(p.scrollLeft),g=k<=4,v=k+p.clientWidth>=p.scrollWidth-4;a(g?d?"right":"left":v?d?"left":"right":"middle")},[]);ma.useEffect(()=>{c();let p=r.current;if(!p)return;let u=typeof ResizeObserver<"u"?new ResizeObserver(c):null;return u?.observe(p),()=>u?.disconnect()},[c]);let n=p=>{let u=r.current;!u||u.scrollWidth<=u.clientWidth||p.target.closest("a, button, input")||(s.current={startX:p.pageX-u.offsetLeft,scrollLeft:u.scrollLeft,isDown:!0,hasMoved:!1},i(!0))},l=p=>{if(!s.current.isDown)return;let u=r.current;if(!u)return;let k=(p.pageX-u.offsetLeft-s.current.startX)*1.5;Math.abs(k)>3&&(s.current.hasMoved=!0,p.preventDefault(),u.scrollLeft=s.current.scrollLeft-k)},m=()=>{s.current.isDown=!1,i(!1)};return ge("div",{ref:r,className:`hsk-table-wrapper hsk-table-wrapper--${t}${o?" is-dragging":""}`,onScroll:c,onMouseDown:n,onMouseMove:l,onMouseUp:m,onMouseLeave:m,children:e})}function Xt(e,r=!1){return vc(e,r)}function vc(e,r){let t=e.split(`
|
|
3
|
+
`);if(r&&t.length>0){let n=t[t.length-1];n.trim().startsWith("|")&&!n.trim().endsWith("|")&&t.pop()}let a=[],o=[],i=0,s=()=>{o.length>0&&(a.push(ge("div",{className:"hsk-cb-ai-text",children:o},`text-bubble-${i++}`)),o=[])},c=0;for(;c<t.length;){let n=t[c],l=`md-line-${c}`;if(!n.trim()){c++;continue}let m=n.trim().match(/^!\[([^\]]*)\]\(([^)]+)\)$/);if(m){s();let u=m[1],d=m[2];(/^(https?|data:image|blob):/i.test(d)||d.startsWith("/"))&&a.push(ge("div",{className:"hsk-markdown-img-block",children:ge("img",{src:d,alt:u||"Product image",className:"hsk-markdown-img",loading:"lazy",onError:g=>{g.target.style.display="none"}})},l)),c++;continue}let p=n.match(/^(#{1,3})\s+(.*)/);if(p){let u=p[1].length,d=`h${u+3}`;o.push(ge(d,{className:`hsk-markdown-h${u}`,children:Tt(p[2],l)},l)),c++;continue}if(n.match(/^[\s]*[-*+•]\s+/)){let u=[];for(;c<t.length&&t[c].match(/^[\s]*[-*+•]\s+/);){let d=t[c].replace(/^[\s]*[-*+•]\s+/,"");u.push(ge("li",{children:Tt(d,`li-${c}`)},`li-${c}`)),c++}o.push(ge("ul",{className:"hsk-markdown-list hsk-markdown-ul",children:u},`ul-${l}`));continue}if(n.match(/^[\s]*\d+[\.\)]\s+/)){let u=[];for(;c<t.length&&t[c].match(/^[\s]*\d+[\.\)]\s+/);){let d=t[c].replace(/^[\s]*\d+[\.\)]\s+/,"");u.push(ge("li",{children:Tt(d,`li-${c}`)},`li-${c}`)),c++}o.push(ge("ol",{className:"hsk-markdown-list hsk-markdown-ol",children:u},`ol-${l}`));continue}if(bn(n,!1)){s();let u=[],d=[],k=[],g=!0;for(;c<t.length&&bn(t[c],!0);){let b=t[c].trim();if(b.match(/^\|?[-:| ]+\|?$/)&&b.includes("-")){k=fn(b).map(y=>{let O=y.trim(),w=O.startsWith(":"),U=O.endsWith(":");return w&&U?"center":U?"end":"start"}),c++,g=!1;continue}let M=fn(b);g&&u.length===0?u=M:d.push(M),c++}let v=Math.max(u.length,...d.map(b=>b.length)),x=[];for(let b=0;b<v;b++)if(k[b])x[b]=k[b];else if(b===0)x[b]="start";else{let M=d.filter(N=>{let y=(N[b]||"").trim();return/^[\$€£¥+-]?\d+([.,]\d+)?%?$/.test(y)||/^[\$€£¥+-]?\d+([.,]\d+)?\s*(bps|M|K|B)?$/i.test(y)}).length;x[b]=M>=Math.ceil(d.length/2)?"end":"start"}let S=u.length>0?ge("tr",{children:u.map((b,M)=>ge("th",{style:{textAlign:x[M]||"start"},children:ge("bdi",{children:Tt(b,`th-${l}-${M}`)})},`th-${l}-${M}`))},`tr-head-${l}`):null,L=d.map((b,M)=>ge("tr",{children:b.map((N,y)=>ge("td",{style:{textAlign:x[y]||"start"},children:ge("bdi",{children:Tt(N,`td-${l}-${M}-${y}`)})},`td-${l}-${M}-${y}`))},`tr-body-${l}-${M}`));a.push(ge(gc,{children:yc("table",{className:"hsk-markdown-table",children:[S&&ge("thead",{children:S}),ge("tbody",{children:L})]})},`table-wrapper-${l}`));continue}o.push(ge("p",{className:"hsk-markdown-p",children:Tt(n,l)},l)),c++}return s(),ge(xc,{children:a})}import{jsx as gn,jsxs as wc}from"react/jsx-runtime";var Va=()=>wc("svg",{className:"hsk-telegram-icon",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[gn("line",{x1:"22",y1:"2",x2:"11",y2:"13"}),gn("polygon",{points:"22 2 15 22 11 13 2 9 22 2"})]});function ka(e){if(typeof e=="string")return{themeAttr:e,vars:void 0};if(!e)return{themeAttr:void 0,vars:void 0};let r={};return e.primaryColor&&(r["--hsk-primary"]=e.primaryColor),e.backgroundColor&&(r["--hsk-bg"]=e.backgroundColor,r["--hsk-chat-bg"]=e.backgroundColor),e.textColor&&(r["--hsk-text"]=e.textColor,r["--hsk-chat-text"]=e.textColor),e.fontFamily&&(r["--hsk-font"]=e.fontFamily),e.fontSize&&(r["--hsk-font-size"]=e.fontSize),e.mobileFontSize&&(r["--hsk-mobile-font-size"]=e.mobileFontSize),e.borderRadius&&(r["--hsk-border-radius"]=e.borderRadius),{themeAttr:void 0,vars:r}}import{useCallback as Bc,useEffect as to,useRef as Sn}from"react";import{useCallback as gt,useEffect as Ht,useRef as ve,useState as fr}from"react";var bt=null,qt=null,Ut=null,fa=null,ft=0,Bt=!1,ba=0,Jr=!1;function Sc(){if(typeof window>"u")return null;let e=window.AudioContext||window.webkitAudioContext;return e?(bt||(bt=new e,qt=bt.createAnalyser(),qt.fftSize=1024,qt.smoothingTimeConstant=.25,Ut=bt.createGain(),Ut.gain.value=1,qt.connect(Ut),Ut.connect(bt.destination),fa=new Uint8Array(qt.fftSize)),{ctx:bt,analyser:qt}):null}function Ka(e,r=130){let t=Ut;if(!t||!bt)return;let a=bt.currentTime;t.gain.cancelScheduledValues(a),t.gain.setValueAtTime(t.gain.value,a),t.gain.linearRampToValueAtTime(Math.max(0,Math.min(1,e)),a+r/1e3)}function yn(){if(!Bt)return ba*=.85,ba;if(Jr||!qt||!fa){let a=Date.now()/1e3;return .35+.18*Math.sin(a*7.1)+.1*Math.sin(a*3.3)}qt.getByteTimeDomainData(fa);let e=0;for(let a=0;a<fa.length;a++){let o=(fa[a]-128)/128;e+=o*o}let r=Math.sqrt(e/fa.length),t=Math.min(1,r*3.2);return ba+=(t-ba)*(t>ba?.6:.12),ba}function Rt(){if(ft++,Bt=!1,Ut&&bt&&(Ut.gain.cancelScheduledValues(bt.currentTime),Ut.gain.value=1),typeof window<"u"&&"speechSynthesis"in window)try{window.speechSynthesis.cancel()}catch{}}function Cc(e){return e.replace(/```[\s\S]*?```/g," ").replace(/`([^`]+)`/g,"$1").replace(/!\[[^\]]*\]\([^)]*\)/g," ").replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/https?:\/\/\S+/g," ").replace(/^\s{0,3}#{1,6}\s+/gm,"").replace(/^\s*[-*+]\s+/gm,"").replace(/[*_~>|]/g,"").replace(/\s*\n\s*\n\s*/g,". ").replace(/\s*\n\s*/g," ").replace(/\s+/g," ").replace(/\s+([.,!?;:])/g,"$1").trim()}var Mc=/([.!?…。!?؟۔।]+["'”’)\]]*\s+)/,Nc=240;function Tc(e,r=Nc){let t=e.split(Mc).filter(Boolean),a=[],o="";for(let i of t)for(o&&(o+i).length>r&&(a.push(o.trim()),o=""),o+=i;o.length>r*2;){let s=o.lastIndexOf(" ",r*2);a.push(o.slice(0,s>r?s:r*2).trim()),o=o.slice(s>r?s:r*2)}return o.trim()&&a.push(o.trim()),a.filter(i=>/\S/.test(i))}function Rc(e,r,t){return new Promise(a=>{if(t!==ft)return a();let o=e.ctx.createBufferSource();o.buffer=r,o.connect(e.analyser),o.onended=()=>a(),o.start();let i=setInterval(()=>{if(t!==ft){clearInterval(i);try{o.stop()}catch{}a()}},100);o.onended=()=>{clearInterval(i),a()}})}async function Zr({client:e,text:r,voice:t,language:a,bcp47:o,onStart:i,onEnd:s,onError:c,onRefused:n,onSecondsLeft:l}){Rt();let m=++ft;Jr=!1;let p=Cc(r);if(!p){s?.();return}let u=Sc();if(!u){vn(p,o,i,s,c);return}if(u.ctx.state==="suspended")try{await u.ctx.resume()}catch{}let d=Tc(p),k=x=>e.synthesizeSpeech(x,t,a).catch(()=>null),g=!1,v=k(d[0]);for(let x=0;x<d.length&&m===ft;x++){let S=await v;if(v=x+1<d.length?k(d[x+1]):Promise.resolve(null),S&&"refused"in S&&S.refused){n?.(S.refused),s?.();return}if(!S){if(!g){vn(d.slice(x).join(" "),o,i,s,c);return}continue}if(S.secondsLeft!==void 0&&l?.(S.secondsLeft),m!==ft)break;let L;try{L=await u.ctx.decodeAudioData(S.audio.slice(0))}catch(b){c?.(b);continue}if(m!==ft)break;g||(g=!0,Bt=!0,i?.()),await Rc(u,L,m)}m===ft&&(Bt=!1,s?.())}function zc(e){let r=window.speechSynthesis.getVoices?.()??[];if(!r.length||!e)return;let t=e.toLowerCase(),a=t.split("-")[0],o=r.filter(s=>s.lang?.toLowerCase().replace("_","-")===t),i=o.length?o:r.filter(s=>s.lang?.toLowerCase().split(/[-_]/)[0]===a);if(i.length)return i.find(s=>s.localService===!1)??i[0]}function vn(e,r,t,a,o){if(typeof window>"u"||!("speechSynthesis"in window)){o?.("speech-unavailable"),a?.();return}let i=ft;Jr=!0;try{window.speechSynthesis.cancel();let s=new SpeechSynthesisUtterance(e),c=r||document.documentElement.lang||navigator.language||"";c&&(s.lang=c);let n=zc(c);n&&(s.voice=n),s.rate=1,s.pitch=1,s.onstart=()=>{Bt=!0,t?.()},s.onend=()=>{i===ft&&(Bt=!1,a?.())},s.onerror=l=>{Bt=!1,o?.(l),a?.()},window.speechSynthesis.speak(s)}catch(s){Bt=!1,o?.(s),a?.()}}var Pc=1100,eo=.012,Lc=320,Ac=.09,Ic=.25,xn=130,Ec=700,Dc=12,Fc=48,_c=.45,qc=.35,Uc=.2,wn=.55;function gr({lang:e,onUtterance:r,onError:t,onBargeIn:a,silenceMs:o=Pc,paused:i=!1}){let[s,c]=fr(!1),[n,l]=fr(!1),[m,p]=fr(""),[u,d]=fr(!1),k=ve(null),g=ve(null),v=ve(null),x=ve(null),S=ve(null),L=ve(null),b=ve(0),M=ve(.008),N=ve(0),y=ve(0),O=ve(""),w=ve(0),U=ve(0),F=ve(!1),I=ve(i),H=ve(!1),E=ve(!1),D=ve(r),Q=ve(t),R=ve(a);Ht(()=>{D.current=r},[r]),Ht(()=>{Q.current=t},[t]),Ht(()=>{R.current=a},[a]),Ht(()=>{I.current=i},[i]),Ht(()=>{d(typeof window<"u"&&("SpeechRecognition"in window||"webkitSpeechRecognition"in window)&&!!navigator.mediaDevices?.getUserMedia)},[]);let q=gt(()=>b.current,[]),re=gt(j=>{let J=x.current;return!J||j.length!==J.frequencyBinCount?!1:(J.getByteFrequencyData(j),!0)},[]),ee=gt(()=>x.current?.frequencyBinCount??0,[]),h=ve([]),z=ve(null),_=ve(!1),W=ve(0),V=ve(0),A=gt(j=>{let J=x.current;if(!J)return 0;let te=h.current;te.push(j),te.length>Fc&&te.shift();let le=0;if(te.length>=12){let xe=0;for(let nt of te)xe+=nt;if(xe/=te.length,xe>1e-4){let nt=0;for(let dt of te)nt+=(dt-xe)*(dt-xe);le=Math.min(1,Math.sqrt(nt/te.length)/xe/.6)}}let B=0;(!z.current||z.current.length!==J.frequencyBinCount)&&(z.current=new Uint8Array(J.frequencyBinCount));let ce=z.current;J.getByteFrequencyData(ce);let je=(v.current?.sampleRate??48e3)/2/ce.length,ze=Math.floor(300/je),Pe=Math.min(ce.length-1,Math.ceil(3400/je)),Wt=0,We=0;for(let xe=0;xe<ce.length;xe++)We+=ce[xe],xe>=ze&&xe<=Pe&&(Wt+=ce[xe]);We>0&&(B=Wt/We);let wt=Math.min(1,j/(M.current+eo*3));return _c*wt+qc*le+Uc*B},[]),C=gt(()=>{let j=O.current.trim();O.current="",w.current=U.current,p(""),l(!1),j&&D.current(j)},[]),G=gt(()=>{let j=x.current,J=L.current;if(!j||!J)return;j.getByteTimeDomainData(J);let te=0;for(let ze=0;ze<J.length;ze++){let Pe=(J[ze]-128)/128;te+=Pe*Pe}let le=Math.sqrt(te/J.length),B=Math.min(1,le*4);b.current+=(B-b.current)*(B>b.current?.6:.12);let ce=Date.now(),fe=I.current?yn()*Ac:0;le>M.current+eo+fe?(N.current=ce,y.current||(y.current=ce)):(y.current=0,M.current=Math.min(M.current*1.02+2e-5,Math.max(.004,le))),I.current?_.current?(A(le)>wn?V.current+=1:V.current=Math.max(0,V.current-2),V.current>=Dc?(_.current=!1,V.current=0,Ka(1,0),R.current?.()):ce-W.current>Ec&&(_.current=!1,V.current=0,Ka(1,xn*2))):y.current&&ce-y.current>Lc&&A(le)>wn&&(y.current=0,_.current=!0,W.current=ce,V.current=0,Ka(Ic,xn)):O.current.trim()&&ce-N.current>o&&C(),S.current=requestAnimationFrame(G)},[C,o,A]),K=gt(()=>{if(k.current||!F.current)return;let j=window.SpeechRecognition||window.webkitSpeechRecognition,J=new j;w.current=0,U.current=0,J.lang=e||document.documentElement.lang||navigator.language||"en-US",J.interimResults=!0,J.maxAlternatives=1,J.continuous=!0,J.onresult=te=>{let le="";for(let B=w.current;B<te.results.length;B++)le+=te.results[B][0].transcript;U.current=te.results.length,le=le.trim(),le&&(O.current=le,p(le),l(!0))},J.onerror=te=>{let le=te?.error||"";le==="no-speech"||le==="aborted"||Q.current?.(le)},J.onend=()=>{k.current=null,F.current&&H.current&&setTimeout(()=>{K()},120)},k.current=J;try{J.start()}catch{k.current=null,Q.current?.("failed-to-start")}},[e]),f=gt(()=>{H.current=!1;let j=k.current;k.current=null;try{j?.stop()}catch{}},[]),Y=gt(()=>{F.current=!1,_.current=!1,V.current=0,h.current=[],Ka(1,0),H.current=!1,c(!1),l(!1),p(""),O.current="",b.current=0;let j=k.current;k.current=null;try{j?.abort()}catch{}S.current!==null&&(cancelAnimationFrame(S.current),S.current=null),g.current?.getTracks().forEach(J=>J.stop()),g.current=null,x.current=null,v.current?.close().catch(()=>{}),v.current=null},[]),$=gt(async()=>{if(!(F.current||!u)){F.current=!0,c(!0);try{let j=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}});g.current=j;let J=window.AudioContext||window.webkitAudioContext,te=new J;v.current=te;let le=te.createAnalyser();le.fftSize=1024,le.smoothingTimeConstant=.25,te.createMediaStreamSource(j).connect(le),x.current=le,L.current=new Uint8Array(le.fftSize),M.current=.008,N.current=Date.now(),S.current=requestAnimationFrame(G)}catch(j){F.current=!1,c(!1),Q.current?.(j?.name==="NotAllowedError"?"not-allowed":"audio-capture");return}H.current=!0,K()}},[u,G,K]);return Ht(()=>{s&&(i?(O.current="",p(""),_.current=!1,V.current=0,h.current=[],f()):(_.current=!1,N.current=Date.now(),H.current=!0,K()))},[i,s,K,f]),Ht(()=>{if(!s||i)return;let j=setInterval(()=>{let J=!!k.current,te=b.current>M.current+eo;J&&te&&O.current},2e3);return()=>clearInterval(j)},[s,i]),Ht(()=>()=>{Y()},[Y]),{supported:u,active:s,hearing:n,interim:m,micLevel:q,micSpectrum:re,spectrumBins:ee,start:$,stop:Y}}import{jsx as ga,jsxs as Cn}from"react/jsx-runtime";var Hc=({active:e})=>Cn("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[ga("rect",{x:"9",y:"2",width:"6",height:"11",rx:"3",fill:e?"currentColor":"none"}),ga("path",{d:"M5 10a7 7 0 0 0 14 0"}),ga("line",{x1:"12",y1:"19",x2:"12",y2:"23"}),ga("line",{x1:"8",y1:"23",x2:"16",y2:"23"})]});function ao({onTranscript:e,onInterim:r,lang:t,className:a="",disabled:o=!1,onError:i}){let s=Sn(e);to(()=>{s.current=e},[e]);let c=Sn(()=>{}),n=Bc(m=>{c.current(),s.current(m)},[]),l=gr({lang:t,onUtterance:n,onError:i});return to(()=>{c.current=l.stop},[l.stop]),to(()=>{l.interim&&r?.(l.interim)},[l.interim,r]),l.supported?Cn("button",{type:"button",className:`kiku-voice-btn${l.active?" kiku-voice-btn--active":""} ${a}`,onClick:()=>l.active?l.stop():void l.start(),disabled:o,title:l.active?"Stop listening":"Speak your search","aria-label":l.active?"Stop voice input":"Start voice input",children:[ga(Hc,{active:l.active}),l.active&&ga("span",{className:"kiku-voice-ripple","aria-hidden":"true"})]}):null}import{useRef as $c,useState as jc}from"react";function ro(e){let r=e.indexOf(","),t=r===-1?e:e.slice(r+1);return Math.floor(t.length*.75)}async function vr(e){let r=await new Promise((t,a)=>{let o=new FileReader;o.onload=()=>t(o.result),o.onerror=()=>a(o.error??new Error("read failed")),o.readAsDataURL(e)});if(e.type==="image/gif"||e.type==="image/svg+xml"||ro(r)<=307200)return r;try{let t=await createImageBitmap(e);try{let a=Math.min(1,1536/Math.max(t.width,t.height)),o=Math.max(1,Math.round(t.width*a)),i=Math.max(1,Math.round(t.height*a)),s=document.createElement("canvas");s.width=o,s.height=i;let c=s.getContext("2d");if(!c)return r;c.drawImage(t,0,0,o,i);let n=e.type==="image/png",l=s.toDataURL(n?"image/png":"image/jpeg",.85);return ro(l)<ro(r)?l:r}finally{t.close?.()}}catch{return r}}import{useAkropolysContext as Vc}from"@akropolys/sdk";import{jsx as Jt,jsxs as Mn}from"react/jsx-runtime";var Kc=()=>Mn("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[Jt("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"}),Jt("circle",{cx:"12",cy:"13",r:"4"})]}),Oc=()=>Jt("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"kiku-vs-spin",children:Jt("path",{d:"M21 12a9 9 0 1 1-6.219-8.56"})});function Wc(e){return vr(e)}function oo({onResults:e,onError:r,categoryHint:t,className:a="",disabled:o=!1}){let i=Vc(),s=$c(null),[c,n]=jc(!1),l=async m=>{if(m.type.startsWith("image/")){n(!0);try{let p=await Wc(m),u=await i.api.searchByImage(p,t);e(u,p)}catch(p){r?.(p instanceof Error?p:new Error(String(p)))}finally{n(!1),s.current&&(s.current.value="")}}};return Mn("label",{className:`kiku-vs-btn${c?" kiku-vs-btn--loading":""} ${a}`,title:"Search by photo","aria-label":"Search by uploading a photo",style:{cursor:o||c?"not-allowed":"pointer"},children:[Jt("input",{ref:s,type:"file",accept:"image/*",capture:"environment",onChange:m=>m.target.files?.[0]&&l(m.target.files[0]),disabled:o||c,hidden:!0}),c?Jt(Oc,{}):Jt(Kc,{})]})}import{Fragment as Xc,jsx as ne,jsxs as be}from"react/jsx-runtime";var Ya=()=>ne("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:ne("path",{d:"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z"})}),Nn=({active:e})=>be("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[ne("polygon",{points:"11 5 6 9 2 9 2 15 6 15 11 19 11 5",fill:e?"currentColor":"none"}),e?be(Xc,{children:[ne("path",{d:"M15.54 8.46a5 5 0 0 1 0 7.07"}),ne("path",{d:"M19.07 4.93a10 10 0 0 1 0 14.14"})]}):ne("line",{x1:"23",y1:"9",x2:"17",y2:"15"})]});function yr({source:e,defaultCurrency:r,onSelect:t,isReferenced:a}){return be("div",{className:Z("hsk-source-card",a&&"hsk-source-card--referenced"),onClick:()=>t?.(e),children:[e.image&&ne("img",{src:e.image,alt:e.name,className:"hsk-source-img"}),be("div",{style:{flex:1,minWidth:0,position:"relative"},children:[a&&ne("div",{className:"hsk-cb-source-ref-badge",title:"Featured in response",style:{top:"0",right:"0"},children:ne(Ya,{})}),ne("div",{className:"hsk-source-name",style:{paddingRight:a?"20px":void 0},children:e.name}),e.price&&be("div",{className:"hsk-source-price",children:[e.currency??r," ",e.price]})]})]})}function Tn({title:e="kiku",placeholder:r="Ask about anything in our store\u2026",emptyStateText:t="Ask me anything about our products",emptyStateSuggestions:a='"Find me headphones under KSh 5,000" \xB7 "Gift ideas"',defaultCurrency:o="KES",className:i,theme:s,classNames:c={},onSelectSource:n,enableVoice:l=!1,enableVision:m=!1,visionCategoryHint:p,enableAudioResponse:u=!0,ttsVoice:d,autoSpeakResponses:k=!0}){let g=Gc(),{messages:v,sources:x,referencedIds:S,loading:L,streaming:b,error:M,send:N,reset:y}=Yc(),[O,w]=Oa(""),[U,F]=Oa(!1),I=Wa(null),H=Wa(null),[E,D]=Oa(u),[Q,R]=Oa(null),q=Wa(b),re=Wa(!1),ee=L||U,[h,z]=Oa([]),_=Wa(0);no(()=>{if(v.length===0){z([]),_.current=0;return}if(v.length>_.current){let f=v.slice(_.current);z(Y=>[...Y,...f]),_.current=v.length}else v.length<_.current?(z(v),_.current=v.length):z(f=>{let Y=[...f],$=v.length-1,j=Y.length-1;for(;$>=0&&j>=0;){if(Y[j].role===v[$].role){Y[j]={...Y[j],content:v[$].content,actionType:v[$].actionType,thinking:v[$].thinking,thoughtForSeconds:v[$].thoughtForSeconds,statusMessage:v[$].statusMessage};break}j--}return Y})},[v]),no(()=>{let f=q.current;q.current=b;let Y=re.current;if(re.current=!1,f&&!b&&Y&&E&&k){let $=h.length-1,j=h[$];j&&j.role==="assistant"&&j.content&&(R($),Zr({client:g,text:j.content,voice:d,language:g.getShopperLanguage?.(),onEnd:()=>R(null),onError:()=>R(null)}))}},[b,E,k,h,d,g]),no(()=>{I.current?.scrollIntoView({behavior:ee?"auto":"smooth"})},[h,ee]);let W=async()=>{let f=O.trim();!f||ee||(Rt(),R(null),w(""),H.current&&(H.current.style.height="auto"),await N(f))},V=f=>{f.key==="Enter"&&!f.shiftKey&&!f.nativeEvent.isComposing&&(f.preventDefault(),W())},A=f=>{w(f.target.value);let Y=f.target;Y.style.height="auto",Y.style.height=Math.min(Y.scrollHeight,120)+"px"},C=(f,Y)=>{Q===f?(Rt(),R(null)):(R(f),Zr({client:g,text:Y,voice:d,language:g.getShopperLanguage?.(),onEnd:()=>R(null),onError:()=>R(null)}))},G=(f,Y)=>{let $={role:"user",content:"Uploaded a photo for visual search",imagePreview:Y},j=f.style_dna,J=`I've analyzed your image! Here is the Style DNA I found:
|
|
4
|
+
`;j&&(j.color_palette&&(J+=`* **Palette:** ${j.color_palette}
|
|
5
|
+
`),j.dominant_colors&&j.dominant_colors.length>0&&(J+=`* **Colors:** ${j.dominant_colors.join(", ")}
|
|
6
|
+
`),j.aesthetic&&j.aesthetic.length>0&&(J+=`* **Aesthetic:** ${j.aesthetic.join(", ")}
|
|
7
|
+
`),j.texture&&(J+=`* **Texture:** ${j.texture}
|
|
8
|
+
`),j.formality&&(J+=`* **Formality:** ${j.formality}
|
|
9
|
+
`));let te=f.results||[];te.length>0?J+=`
|
|
10
|
+
I found ${te.length} matching products in the store for you.`:J+=`
|
|
11
|
+
I couldn't find any matching products in the store.`;let le={role:"assistant",content:J,styleDNA:j,visualSources:te.map(B=>{let ce=B.entity??{},fe=Qc(ce,void 0);return{id:B.id,url:B.url??ce.url,fields:ce,name:fe.title,price:fe.price,image:fe.image,brand:fe.subtitle,currency:typeof ce.currency=="string"?ce.currency:void 0}})};z(B=>[...B,$,le])},{vars:K}=ka(s);return be("div",{className:Z("hsk-chat-widget",c.root,i),style:K,children:[be("div",{className:Z("hsk-chat-header",c.header),children:[ne("span",{className:"hsk-chat-header-icon",children:ne(Ya,{})}),ne("span",{className:"hsk-chat-title",children:e}),ne("span",{className:"hsk-chat-badge",children:"AI"}),be("div",{style:{marginLeft:"auto",display:"flex",alignItems:"center",gap:"8px"},children:[u&&ne("button",{type:"button",className:Z("hsk-audio-toggle-btn",E&&"hsk-audio-toggle-btn--active"),onClick:()=>{let f=!E;D(f),f||(Rt(),R(null))},title:E?"Mute AI audio response":"Enable AI audio response","aria-label":E?"Mute voice":"Enable voice",children:ne(Nn,{active:E})}),h.length>0&&ne("button",{className:"hsk-chat-reset",onClick:()=>{Rt(),y()},children:"Clear"})]})]}),be("div",{className:"hsk-chat-messages",children:[h.length===0?be("div",{className:"hsk-chat-empty",children:[ne("div",{className:"hsk-chat-empty-icon",children:ne(Ya,{})}),ne("div",{children:t}),ne("div",{className:"hsk-chat-empty-suggestions",children:a})]}):h.map((f,Y)=>be("div",{children:[be("div",{className:`hsk-msg-row ${f.role}`,children:[ne("div",{className:Z("hsk-msg-avatar",f.role==="assistant"?"ai":"user"),children:f.role==="assistant"?ne(Ya,{}):"U"}),be("div",{className:Z("hsk-msg-bubble",f.role,c.messageBubble),children:[f.imagePreview&&ne("div",{className:"kiku-vs-preview-bubble",style:{marginBottom:"8px"},children:ne("img",{src:f.imagePreview,alt:"Uploaded Preview",className:"kiku-vs-preview-bubble-img",style:{maxWidth:"200px",borderRadius:"8px"}})}),f.thinking&&be("details",{className:"hsk-thinking-details",open:b&&Y===h.length-1&&!f.content,children:[be("summary",{className:"hsk-thinking-summary",children:["Thought for ",f.thoughtForSeconds??1,"s"]}),ne("div",{className:"hsk-thinking-text",children:f.thinking})]}),!f.content&&!f.thinking&&f.role==="assistant"&&Y===h.length-1&&be("div",{className:"hsk-status-live",children:[ne("span",{className:"hsk-status-dot"}),ne("span",{children:f.statusMessage||"Thinking..."})]}),Xt(f.content),f.role==="assistant"&&f.content&&!b&&ne("button",{type:"button",className:Z("hsk-msg-audio-btn",Q===Y&&"hsk-msg-audio-btn--active"),onClick:()=>C(Y,f.content),title:Q===Y?"Stop speaking":"Listen to response","aria-label":"Toggle speech",children:ne(Nn,{active:Q===Y})}),b&&Y===h.length-1&&f.role==="assistant"&&ne("span",{className:"hsk-streaming-cursor"}),f.styleDNA&&be("div",{className:"kiku-vs-preview-banner",style:{marginTop:"10px"},children:[h[Y-1]?.imagePreview&&ne("img",{src:h[Y-1].imagePreview,alt:"Visual Search Input",className:"kiku-vs-preview-img"}),be("div",{className:"kiku-vs-preview-info",children:[ne("div",{className:"kiku-vs-preview-label",children:"Visual Match Palette"}),ne("div",{className:"kiku-vs-preview-palette",children:f.styleDNA.color_palette||"Detected Style DNA"}),f.styleDNA.style_tags&&f.styleDNA.style_tags.length>0&&ne("div",{className:"kiku-style-tags",children:f.styleDNA.style_tags.map(($,j)=>be("span",{className:"kiku-style-tag",children:["#",$]},j))})]})]})]})]}),f.role==="assistant"&&f.visualSources&&f.visualSources.length>0&&ne("div",{className:"hsk-sources-container",children:ne("div",{className:"hsk-sources",children:f.visualSources.map(($,j)=>ne(yr,{source:$,defaultCurrency:o,onSelect:n},j))})}),f.role==="assistant"&&Y===h.length-1&&!f.visualSources&&x.length>0&&(()=>{if(L||b)return ne("div",{className:"hsk-sources-container",children:ne("div",{className:"hsk-sources",children:x.map((te,le)=>{let B=!!(te.id&&S.includes(te.id));return ne(yr,{source:te,defaultCurrency:o,onSelect:n,isReferenced:B},le)})})});let j=x.filter(te=>te.id&&S.includes(te.id)),J=S.length>0?[]:x.filter(te=>!te.id||!S.includes(te.id));return be("div",{className:"hsk-sources-container",children:[j.length>0&&be("div",{className:"hsk-sources-group",style:{marginBottom:"10px"},children:[ne("div",{className:"hsk-sources-group-title",children:"\u2B50 Featured in response"}),ne("div",{className:"hsk-sources",children:j.map((te,le)=>ne(yr,{source:te,defaultCurrency:o,onSelect:n,isReferenced:!0},`feat-${le}`))})]}),J.length>0&&be("div",{className:"hsk-sources-group",children:[j.length>0&&ne("div",{className:"hsk-sources-group-title",children:"All matches"}),ne("div",{className:"hsk-sources",children:J.map((te,le)=>ne(yr,{source:te,defaultCurrency:o,onSelect:n,isReferenced:!1},`gen-${le}`))})]})]})})()]},Y)),ee&&be("div",{className:"hsk-msg-row",children:[ne("div",{className:"hsk-msg-avatar ai",children:ne(Ya,{})}),be("div",{className:"hsk-pending",role:"status","aria-live":"polite",children:[be("div",{className:"hsk-pending-glyph",children:[ne("span",{className:"hsk-pending-ring"}),ne("span",{className:"hsk-pending-dot"})]}),be("div",{className:"hsk-pending-text",children:[ne("span",{className:"hsk-pending-step step-1",children:"Searching catalog"}),ne("span",{className:"hsk-pending-step step-2",children:"Reasoning"}),ne("span",{className:"hsk-pending-step step-3",children:"Composing"})]})]})]}),M&&ne("div",{className:"hsk-chat-error",children:(()=>{try{let f=JSON.parse(M);return f.error||f.message||M}catch{return M}})()}),ne("div",{ref:I})]}),be("div",{className:"hsk-chat-input-area",style:{display:"flex",alignItems:"center",gap:"8px"},children:[m&&ne(oo,{onResults:G,onError:f=>console.error("[VisualSearch] error:",f),categoryHint:p,disabled:ee}),ne("textarea",{ref:H,className:Z("hsk-chat-input",c.input),value:O,onChange:A,onKeyDown:V,placeholder:r,rows:1,disabled:ee,style:{flex:1}}),l&&ne(ao,{onTranscript:f=>{re.current=!0,Rt(),R(null),w(f),N(f),w("")},onInterim:f=>w(f),disabled:ee}),ne("button",{className:"hsk-chat-send",onClick:W,disabled:!O.trim()||ee,"aria-label":"Send message",children:ne(Va,{})})]})]})}import{useState as Ko,useEffect as yd,useCallback as ds}from"react";import{createPortal as xd}from"react-dom";var io=`@property --hsk-chat-bg{syntax:'<color>';inherits:true;initial-value:#0a0a0a}@property --hsk-chat-text{syntax:'<color>';inherits:true;initial-value:#f0efed}@property --hsk-chat-muted{syntax:'<color>';inherits:true;initial-value:#888888}@property --hsk-chat-divide{syntax:'<color>';inherits:true;initial-value:rgba(255,255,255,.08)}@property --hsk-chat-input-bg{syntax:'<color>';inherits:true;initial-value:#191919}@property --hsk-chat-source-bg{syntax:'<color>';inherits:true;initial-value:rgba(255,255,255,.04)}@property --hsk-fade-bg{syntax:'<color>';inherits:true;initial-value:#0a0a0a}@property --hsk-surface-1{syntax:'<color>';inherits:true;initial-value:rgba(255,255,255,.06)}@property --hsk-surface-2{syntax:'<color>';inherits:true;initial-value:#1f1f22}@property --hsk-bubble-bg{syntax:'<color>';inherits:true;initial-value:#1f1f22}@property --hsk-think-text{syntax:'<color>';inherits:true;initial-value:#a6a6a6}@property --hsk-placeholder{syntax:'<color>';inherits:true;initial-value:#555555}@property --hsk-grid-bg{syntax:'<color>';inherits:true;initial-value:#1a1a1c}@property --hsk-active-bg{syntax:'<color>';inherits:true;initial-value:#f0efed}@property --hsk-on-active{syntax:'<color>';inherits:true;initial-value:#0a0a0a}@property --hsk-src-title{syntax:'<color>';inherits:true;initial-value:#f9fafb}@property --hsk-src-desc{syntax:'<color>';inherits:true;initial-value:#9ca3af}@property --hsk-price-bg{syntax:'<color>';inherits:true;initial-value:rgba(255,255,255,.08)}@property --hsk-price-text{syntax:'<color>';inherits:true;initial-value:#ff7a45}@property --hsk-sheet-bg{syntax:'<color>';inherits:true;initial-value:#1f1f22}@property --hsk-primary{syntax:'<color>';inherits:true;initial-value:#ff6a33}:host,:root{--hsk-border-radius:0;--hsk-brand-green:#2D7A4B;--hsk-font:"Geist","Inter",-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro Display","Segoe UI",Roboto,Helvetica,Arial,sans-serif;--hsk-default-font-size:15px}.hsk-cb-btn,.hsk-cb-close,.hsk-cb-topbar-btn,.hsk-cb-chip,.hsk-cb-source,.hsk-cb-sources-next,.hsk-action-pill,.hsk-chat-send,.hsk-chat-reset,.hsk-close-btn,.hsk-cb-overlay{--hsk-font-size:16px;touch-action:manipulation;-webkit-tap-highlight-color:transparent;font-family:var(--hsk-font)}.hsk-cb-overlay{transition:--hsk-chat-bg .45s cubic-bezier(.16,1,.3,1),--hsk-chat-text .45s cubic-bezier(.16,1,.3,1),--hsk-chat-muted .45s cubic-bezier(.16,1,.3,1),--hsk-chat-divide .45s cubic-bezier(.16,1,.3,1),--hsk-chat-input-bg .45s cubic-bezier(.16,1,.3,1),--hsk-surface-1 .45s cubic-bezier(.16,1,.3,1),--hsk-surface-2 .45s cubic-bezier(.16,1,.3,1),--hsk-bubble-bg .45s cubic-bezier(.16,1,.3,1),--hsk-primary .45s cubic-bezier(.16,1,.3,1),--hsk-grid-bg .45s cubic-bezier(.16,1,.3,1),--hsk-active-bg .45s cubic-bezier(.16,1,.3,1),--hsk-on-active .45s cubic-bezier(.16,1,.3,1),--hsk-src-title .45s cubic-bezier(.16,1,.3,1),--hsk-src-desc .45s cubic-bezier(.16,1,.3,1),--hsk-price-bg .45s cubic-bezier(.16,1,.3,1),--hsk-price-text .45s cubic-bezier(.16,1,.3,1),--hsk-sheet-bg .45s cubic-bezier(.16,1,.3,1),background-color .45s cubic-bezier(.16,1,.3,1),border-color .45s cubic-bezier(.16,1,.3,1),color .45s cubic-bezier(.16,1,.3,1),fill .45s cubic-bezier(.16,1,.3,1),stroke .45s cubic-bezier(.16,1,.3,1),box-shadow .45s cubic-bezier(.16,1,.3,1)}.hsk-kiku-avatar,.hsk-kiku-avatar *{transition:none}@media (prefers-reduced-motion:reduce){.hsk-cb-overlay,.hsk-cb-overlay *,.hsk-cb-overlay *::before,.hsk-cb-overlay *::after{transition:none}}.hsk-cb-overlay button,.hsk-cb-overlay [role="button"],.hsk-cb-overlay input,.hsk-cb-overlay textarea,.hsk-cb-overlay select,.hsk-chat button,.hsk-chat [role="button"],.hsk-chat input,.hsk-chat textarea,.hsk-chat select,.hsk-cb-btn,.hsk-search button,.hsk-search [role="button"],.hsk-search input,.hsk-search textarea,.hsk-search select{touch-action:manipulation;-webkit-tap-highlight-color:transparent;font-family:var(--hsk-font)}:host,:root,.hsk-cb-btn,.hsk-cb-overlay,.hsk-chat-widget{--hsk-marble-1:color-mix(in srgb,var(--hsk-primary,#ff6a33) 12%,#fffaf4);--hsk-marble-2:color-mix(in srgb,var(--hsk-primary,#ff6a33) 30%,#fdf0e4);--hsk-marble-3:color-mix(in srgb,var(--hsk-primary,#ff6a33) 62%,#e8cbb0);--hsk-marble-4:color-mix(in srgb,var(--hsk-primary,#ff6a33) 85%,#6d3a1c);--hsk-marble-sheen:.5}@media (prefers-color-scheme:dark){:host,:root,.hsk-cb-btn,.hsk-cb-overlay,.hsk-chat-widget{--hsk-marble-1:#FFFDF6;--hsk-marble-2:#FBF3E2;--hsk-marble-3:color-mix(in srgb,var(--hsk-primary,#ff6a33) 20%,#EDDFC4);--hsk-marble-4:color-mix(in srgb,var(--hsk-primary,#ff6a33) 42%,#D8C39C);--hsk-marble-sheen:.9}}.hsk-chat-widget{--hsk-bg:var(--chat-bg-color,#ffffff);--hsk-text:var(--chat-text-color,#1f1f1f);--hsk-primary:var(--chat-primary-color,#ff6a33);--hsk-font:var(--chat-font-family,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif);--hsk-font-size:var(--chat-font-size,16px);display:flex;flex-direction:column;height:100%;min-height:320px;font-family:var(--hsk-font);letter-spacing:normal;word-spacing:normal;text-transform:none;background:var(--hsk-bg);border:1px solid #f1f3f4;border-radius:var(--hsk-border-radius,0);overflow:hidden}@media (prefers-color-scheme:dark){.hsk-chat-widget{--hsk-bg:var(--chat-bg-color,#0a0a0a);--hsk-text:var(--chat-text-color,#e8eaed);border-color:#202124}}.hsk-chat-header{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid #f1f3f4;background:var(--hsk-bg);flex-shrink:0}@media (prefers-color-scheme:dark){.hsk-chat-header{border-bottom-color:#202124}}.hsk-chat-header-icon{color:var(--hsk-primary);display:flex;align-items:center}.hsk-chat-title{font-size:14px;font-weight:600;color:var(--hsk-text)}.hsk-chat-badge{font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--hsk-primary);background:rgba(255,106,51,.09);border:1px solid rgba(255,106,51,.18);padding:2px 8px;border-radius:var(--hsk-border-radius,0)}.hsk-chat-messages{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px;overscroll-behavior:contain}.hsk-chat-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:8px;color:#555;font-size:13px;text-align:center;padding:24px}.hsk-chat-empty-icon{font-size:28px;margin-bottom:4px;color:var(--hsk-primary);display:flex;align-items:center;justify-content:center}.hsk-chat-empty-suggestions{font-size:12px;color:#666;margin-top:4px}.hsk-msg-row{display:flex;gap:8px;align-items:flex-start}.hsk-msg-row.user{flex-direction:row-reverse}.hsk-msg-avatar{width:28px;height:28px;border-radius:var(--hsk-border-radius,0);flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700}.hsk-msg-avatar.ai{background:rgba(255,106,51,.12);border:1px solid rgba(255,106,51,.25);color:var(--hsk-primary);display:flex;align-items:center;justify-content:center}.hsk-msg-avatar.user{background:#f1f3f4;color:#5f6368}@media (prefers-color-scheme:dark){.hsk-msg-avatar.user{background:#202124;color:#888}}.hsk-msg-bubble{max-width:78%;padding:10px 14px;border-radius:var(--hsk-border-radius,0);font-size:var(--hsk-font-size,13px);line-height:1.6}.hsk-msg-bubble.ai{background:var(--hsk-bg);border:1px solid #f1f3f4;color:var(--hsk-text)}@media (prefers-color-scheme:dark){.hsk-msg-bubble.ai{border-color:#202124}}.hsk-msg-bubble.user{background:var(--hsk-primary);color:#fff}.hsk-streaming-cursor{display:inline-block;width:6px;height:1.1em;margin-inline-start:3px;vertical-align:-2px;background-color:var(--hsk-primary);animation:hsk-cursor-blink .9s infinite}@keyframes hsk-cursor-blink{0%,100%{opacity:1}50%{opacity:0}}.hsk-status-live{display:flex;align-items:center;gap:8px;font-size:12px;color:#666;padding:4px 0 8px 0;font-weight:500}.hsk-status-dot{width:8px;height:8px;border-radius:50%;background-color:var(--hsk-primary);animation:hsk-pulse 1.4s infinite ease-in-out}@keyframes hsk-pulse{0%,100%{transform:scale(.8);opacity:.5}50%{transform:scale(1.2);opacity:1}}.hsk-thinking-details{margin-bottom:10px;padding:8px 12px;background:rgba(0,0,0,.03);border:1px solid rgba(0,0,0,.06);border-radius:8px;font-size:12px}.hsk-thinking-summary{cursor:pointer;font-weight:600;color:#666;user-select:none}.hsk-thinking-text{margin-top:8px;white-space:pre-wrap;color:#555;font-family:monospace;font-size:11px;line-height:1.4;max-height:200px;overflow-y:auto}.hsk-sources-container{margin-inline-start:36px}.hsk-sources{margin-top:10px;display:flex;flex-direction:column;gap:6px}.hsk-source-card{display:flex;align-items:center;gap:10px;padding:8px 10px;background:#f8f9fa;border:1px solid #f1f3f4;border-radius:var(--hsk-border-radius,0);cursor:pointer;transition:border-color .15s}@media (prefers-color-scheme:dark){.hsk-source-card{background:#1a1a1b;border-color:#202124}}.hsk-source-card:hover{border-color:rgba(255,106,51,.37)}.hsk-source-img{width:36px;height:36px;object-fit:cover;border-radius:var(--hsk-border-radius,0);background:#fff}.hsk-source-name{font-size:12px;font-weight:500;color:var(--hsk-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hsk-source-price{font-size:11px;color:var(--hsk-primary);font-weight:700;margin-top:2px}.hsk-typing{display:flex;gap:4px;align-items:center;padding:10px 14px;background:var(--hsk-bg);border:1px solid #f1f3f4;border-radius:var(--hsk-border-radius,0);width:fit-content}@media (prefers-color-scheme:dark){.hsk-typing{border-color:#202124}}.hsk-typing-dot{width:6px;height:6px;background:var(--hsk-primary);border-radius:50%;animation:hsk-chat-bounce 1.2s infinite}.hsk-typing-dot:nth-child(2){animation-delay:.2s}.hsk-typing-dot:nth-child(3){animation-delay:.4s}@keyframes hsk-chat-bounce{0%,100%{opacity:.3;transform:translateY(0)}50%{opacity:1;transform:translateY(-4px)}}.hsk-pending{display:inline-flex;align-items:center;gap:10px;padding:10px 14px;background:var(--hsk-bg);border:1px solid #f1f3f4;border-radius:var(--hsk-border-radius,0);position:relative}@media (prefers-color-scheme:dark){.hsk-pending{border-color:#202124}}.hsk-pending-glyph{width:18px;height:18px;position:relative;display:inline-flex;align-items:center;justify-content:center}.hsk-pending-ring{width:18px;height:18px;border-radius:50%;border:2px solid rgba(255,106,51,.25);border-top-color:var(--hsk-primary);animation:hsk-pending-spin 1.1s linear infinite}.hsk-pending-dot{position:absolute;width:6px;height:6px;border-radius:50%;background:var(--hsk-primary);box-shadow:0 0 8px rgba(255,106,51,.45);animation:hsk-pending-pulse 1.4s ease-in-out infinite}.hsk-pending-text{position:relative;min-width:140px;height:16px;font-size:12px;color:var(--hsk-text);letter-spacing:.01em}.hsk-pending-step{position:absolute;left:0;top:0;opacity:0;animation:hsk-pending-cycle 6s infinite}.hsk-pending-step.step-1{animation-delay:0s}.hsk-pending-step.step-2{animation-delay:2s}.hsk-pending-step.step-3{animation-delay:4s}@keyframes hsk-pending-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes hsk-pending-pulse{0%,100%{transform:scale(.75);opacity:.6}50%{transform:scale(1);opacity:1}}@keyframes hsk-pending-cycle{0%,10%{opacity:0;transform:translateY(2px)}20%,45%{opacity:1;transform:translateY(0)}55%,100%{opacity:0;transform:translateY(-2px)}}.hsk-chat-input-area{display:flex;align-items:center;gap:8px;padding:12px 14px;border-top:1px solid #f1f3f4;background:var(--hsk-bg);flex-shrink:0}@media (prefers-color-scheme:dark){.hsk-chat-input-area{border-top-color:#202124}}.hsk-chat-input{flex:1;background:#f1f3f4;border:1px solid #f1f3f4;border-radius:var(--hsk-border-radius,0);padding:9px 14px;font-size:13px;color:var(--hsk-text);outline:none;font-family:inherit;transition:border-color .2s;resize:none;min-height:38px;max-height:120px;line-height:1.5}@media (prefers-color-scheme:dark){.hsk-chat-input{background:#1a1a1b;border-color:#202124}}.hsk-chat-input::placeholder{color:#888}.hsk-chat-input:focus{border-color:var(--hsk-primary)}.hsk-chat-send{width:34px;height:34px;border-radius:var(--hsk-border-radius,0);background:var(--hsk-primary);border:none;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:16px;transition:opacity .15s,transform .1s}.hsk-chat-send:hover{opacity:.88}.hsk-chat-send:active{transform:scale(.93)}.hsk-chat-send:disabled{opacity:.4;cursor:not-allowed}.hsk-chat-reset{font-size:11px;color:#555;cursor:pointer;padding:0 4px;transition:color .15s;background:none;border:none;font-family:inherit}.hsk-chat-reset:hover{color:var(--hsk-primary)}.hsk-chat-error{font-size:12px;color:#ef4444;text-align:center;padding:8px}.hsk-cb-btn{--hsk-primary:var(--chat-primary-color,#ff6a33);display:inline-flex;align-items:center;gap:7px;padding:8px 16px;border-radius:var(--hsk-border-radius,0);border:1px solid rgba(255,106,51,.4);background:rgba(255,106,51,.1);color:var(--hsk-primary);font-size:13px;font-weight:600;cursor:pointer;transition:background .15s,border-color .15s,transform .12s,box-shadow .15s;font-family:inherit;white-space:nowrap}.hsk-cb-btn:hover{background:rgba(255,106,51,.18);border-color:rgba(255,106,51,.7);box-shadow:0 4px 16px rgba(255,106,51,.2)}.hsk-cb-btn:active{transform:scale(.95)}.hsk-cb-btn-icon{font-size:15px;line-height:1;display:flex;align-items:center}.hsk-cb-overlay{--hsk-primary:var(--chat-primary-color,#ff6a33);--hsk-font:var(--chat-font-family,"Geist",ui-sans-serif,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif);letter-spacing:normal;word-spacing:normal;font-kerning:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--hsk-font-size:var(--hsk-desktop-font-size,15px);--hsk-mobile-font-size:14px;position:fixed !important;inset:0 !important;width:100vw !important;height:100vh !important;height:100dvh !important;z-index:2147483647 !important;display:flex !important;flex-direction:column !important;overflow:hidden !important;animation:hsk-overlay-in .2s ease-out;background:var(--hsk-chat-bg,#ffffff) !important;box-sizing:border-box !important;margin:0 !important;padding:0 !important}@keyframes hsk-overlay-in{from{opacity:0}to{opacity:1}}.hsk-cb-overlay.hsk-cb-overlay--grows{animation:hsk-overlay-in .18s cubic-bezier(.16,1,.3,1) both !important}.hsk-cb-overlay.hsk-cb-overlay--grows .hsk-cb-panel{transform-origin:var(--hsk-ox,50%) var(--hsk-oy,50%);animation:hsk-panel-float-in .22s cubic-bezier(.16,1,.3,1) both !important}@keyframes hsk-panel-float-in{0%{opacity:0;transform:translateY(8px) scale(.985)}100%{opacity:1;transform:translateY(0) scale(1)}}.hsk-cb-overlay.hsk-cb-overlay--grows .hsk-cb-msgs{animation:hsk-content-fade .2s cubic-bezier(.16,1,.3,1) both}@keyframes hsk-content-fade{0%{opacity:0;transform:translateY(4px)}100%{opacity:1;transform:translateY(0)}}.hsk-cb-lang-chip,.hsk-cb-chip{animation:hsk-pill-wave .22s cubic-bezier(.16,1,.3,1) both;animation-delay:calc(.04s+var(--hsk-pill-idx,0) * .012s)}.hsk-cb-lang-chips-hint{animation:hsk-content-fade .22s cubic-bezier(.16,1,.3,1) both;animation-delay:calc(.04s+var(--hsk-pill-idx,0) * .012s)}@keyframes hsk-pill-wave{0%{opacity:0;transform:translateY(6px) scale(.96)}100%{opacity:1;transform:translateY(0) scale(1)}}.hsk-cb-overlay.hsk-cb-overlay--grows .hsk-cb-input-wrap{animation:hsk-input-dock .22s cubic-bezier(.16,1,.3,1) both}@keyframes hsk-input-dock{0%{opacity:0;transform:translateY(10px)}100%{opacity:1;transform:translateY(0)}}.hsk-cb-overlay.hsk-cb-overlay--grows .hsk-cb-hello-avatar{animation:hsk-avatar-spring .22s cubic-bezier(.16,1,.3,1) both}@keyframes hsk-avatar-spring{0%{opacity:0;transform:scale(.92)}100%{opacity:1;transform:scale(1)}}.hsk-cb-overlay.hsk-cb-overlay--grows .hsk-cb-hello-wrap{animation:hsk-hello-spring .2s cubic-bezier(.16,1,.3,1) both}@keyframes hsk-hello-spring{0%{opacity:0;transform:translateY(6px)}100%{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.hsk-cb-overlay.hsk-cb-overlay--grows{animation:none !important;-webkit-clip-path:none !important;clip-path:none !important}.hsk-cb-overlay.hsk-cb-overlay--grows .hsk-cb-panel,.hsk-cb-overlay.hsk-cb-overlay--grows .hsk-cb-msgs,.hsk-cb-overlay.hsk-cb-overlay--grows .hsk-cb-lang-chip,.hsk-cb-overlay.hsk-cb-overlay--grows .hsk-cb-chip,.hsk-cb-overlay.hsk-cb-overlay--grows .hsk-cb-input-wrap,.hsk-cb-overlay.hsk-cb-overlay--grows .hsk-cb-hello-avatar,.hsk-cb-overlay.hsk-cb-overlay--grows .hsk-cb-hello-wrap{animation:none !important}}.hsk-cb-panel{position:relative;display:flex;flex-direction:column;height:100%;max-width:720px;width:100%;margin:0 auto;animation:hsk-panel-in .28s cubic-bezier(.34,1.2,.64,1)}.hsk-cb-main{flex:1;min-width:0;display:flex;flex-direction:column;height:100%;overflow:hidden}@keyframes hsk-panel-in{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}.hsk-cb-topbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:14px var(--hsk-gutter,24px) 10px;flex-shrink:0;position:relative;z-index:10;background:transparent !important;backdrop-filter:none !important;-webkit-backdrop-filter:none !important}.hsk-cb-topbar::after{display:none !important}.hsk-cb-topbar-left{display:flex;align-items:center;gap:10px;justify-self:start;min-width:0}.hsk-cb-topbar-mark{justify-self:center;display:flex;flex-direction:column;align-items:center;line-height:0;cursor:pointer;user-select:none;touch-action:manipulation;transition:transform .22s cubic-bezier(.34,1.56,.64,1)}.hsk-cb-topbar-mark:hover{transform:translateY(-1px)}.hsk-cb-topbar-mark[data-unread="true"] .hsk-cb-topbar-name{background:var(--hsk-primary,#ff6a33);color:#fff;box-shadow:0 0 0 3px var(--hsk-chat-bg,#ffffff);animation:hsk-unread-pill .9s cubic-bezier(.34,1.56,.64,1) infinite}@keyframes hsk-unread-pill{0%,100%{transform:scale(1,1)}38%{transform:scale(1.08,.92)}62%{transform:scale(.97,1.03)}}@media (prefers-reduced-motion:reduce){.hsk-cb-topbar-mark[data-unread="true"] .hsk-cb-topbar-name{animation:none}}.hsk-cb-topbar-name{margin-top:-5px;padding:3px 13px;white-space:nowrap;border-radius:999px;background:var(--hsk-surface-2);box-shadow:0 0 0 3px var(--hsk-chat-bg),0 1px 3px rgba(0,0,0,.12);font-size:12px;font-weight:700;line-height:18px;letter-spacing:-.01em;color:var(--hsk-name-text,var(--hsk-chat-text));transform-origin:50% 0;transition:transform .18s cubic-bezier(.34,1.8,.64,1)}.hsk-cb-topbar-mark{position:relative;z-index:100}.hsk-cb-topbar-ooze-menu{position:absolute;top:calc(100%+12px) !important;left:50%;transform:translateX(-50%);width:216px;padding:6px;border-radius:20px;background:var(--hsk-chat-source-bg,rgba(255,255,255,.08));border:none !important;box-shadow:none !important;z-index:1000;animation:hsk-topbar-ooze .25s cubic-bezier(.16,1,.3,1) both}.hsk-cb-topbar-ooze-menu .hsk-cb-theme-2x2-grid{display:grid !important;grid-template-columns:repeat(2,1fr) !important;gap:6px !important;width:100% !important;box-shadow:none !important}.hsk-cb-topbar-ooze-menu .hsk-cb-theme-grid-item{width:100%;display:inline-flex;align-items:center;justify-content:flex-start;gap:6px;padding:8px 11px;border-radius:14px;border:none !important;box-shadow:none !important;font-size:11.5px;font-weight:550;box-sizing:border-box;white-space:nowrap}@keyframes hsk-topbar-ooze{0%{opacity:0;transform:translateX(-50%) translateY(-6px) scale(.94)}100%{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}}.hsk-cb-topbar-mark[data-impacting="true"] .hsk-cb-topbar-name{transform:translateY(1.5px) scale(1.09,.91);box-shadow:0 0 0 3px var(--hsk-chat-bg,#ffffff),0 2px 10px var(--hsk-contact-glow,rgba(19,78,61,.45))}.hsk-cb-back{width:34px;height:34px;border-radius:999px;border:none;padding:0;display:flex;align-items:center;justify-content:center;background:var(--hsk-surface-1);color:var(--hsk-chat-muted);cursor:pointer;transition:transform .18s cubic-bezier(.34,1.56,.64,1)}.hsk-cb-back:hover{background:var(--hsk-chat-divide,rgba(0,0,0,.09))}.hsk-cb-back:active{transform:scale(.94)}.hsk-cb-panel[dir="rtl"] .hsk-cb-back-icon{display:inline-flex;transform:scaleX(-1)}.hsk-cb-topbar-actions{justify-self:end}.hsk-cb-topbar-title{font-size:16px;font-weight:500;color:var(--hsk-chat-text,#1f1f1f);letter-spacing:-.01em}.hsk-cb-topbar-sub{font-size:12px;color:var(--hsk-chat-muted,#5f6368);margin-top:2px}.hsk-cb-kiku-id-rail{display:none}@media (min-width:900px){.hsk-cb-kiku-id-rail.hsk-cb-kiku-id-rail--left{display:flex;position:absolute;left:auto !important;right:100% !important;margin-right:28px !important;transform:none !important;top:auto !important;bottom:48px !important;flex-direction:column;justify-content:flex-end;align-items:flex-start;gap:8px;max-width:240px;min-width:0;padding:0;border:0;background:none;font-family:inherit;z-index:10}.hsk-cb-kiku-id-rail.hsk-cb-kiku-id-rail--right{display:flex;position:absolute;left:100% !important;right:auto !important;margin-left:28px !important;transform:none !important;top:auto !important;bottom:48px !important;flex-direction:column;justify-content:flex-end;align-items:flex-start;gap:8px;max-width:240px;min-width:0;padding:0;border:0;background:none;font-family:inherit;z-index:10}.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-kiku-id-rail{bottom:50px !important}.hsk-cb-panel[data-nastaliq="true"] .hsk-cb-kiku-id-rail{bottom:58px !important}.hsk-cb-kiku-id-pill{display:inline-flex;align-items:center;gap:6px;max-width:100%;padding:5px 12px;border-radius:999px;border:none !important;background:var(--hsk-chat-source-bg,rgba(255,255,255,.05));color:var(--hsk-chat-muted,#71717a);cursor:pointer;font-family:inherit;transition:all .22s cubic-bezier(.16,1,.3,1)}.hsk-cb-kiku-id-pill:hover{color:var(--hsk-primary,#ff6a33)}.hsk-cb-kiku-id-rail-val{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;letter-spacing:-.01em;max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hsk-cb-kiku-id-pill svg{flex:none;opacity:.8}.hsk-cb-theme-squircle-wrap{position:relative;display:flex;flex-direction:column;align-items:flex-start;padding:0;margin:0;border:none !important;box-shadow:none !important;background:transparent !important}.hsk-cb-theme-squircle-wrap.is-open{padding:0;background:transparent !important;box-shadow:none !important}.hsk-cb-theme-squircle-trigger{display:inline-flex;align-items:center;gap:7px;height:32px;padding:0 12px;border-radius:16px;border:none !important;outline:none !important;background:var(--hsk-surface-1) !important;color:var(--hsk-chat-text) !important;font-size:11.5px;font-weight:600;cursor:pointer;font-family:inherit;transition:transform .2s cubic-bezier(.16,1,.3,1);box-shadow:none !important}.hsk-cb-theme-squircle-trigger:hover{background:var(--hsk-primary,#ff6a33);color:#ffffff;box-shadow:none !important}.hsk-cb-theme-trigger-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.hsk-cb-theme-trigger-icon svg{width:13px;height:13px}.hsk-cb-theme-trigger-label{letter-spacing:-0.01em}.hsk-cb-theme-2x2-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:5px;padding:6px;border-radius:18px;background:var(--hsk-surface-2);box-shadow:none !important;transform-origin:bottom center;animation:hsk-theme-morph-in .26s cubic-bezier(.16,1,.3,1) both}.hsk-cb-theme-squircle-wrap.is-closing .hsk-cb-theme-2x2-grid{animation:hsk-theme-morph-out .2s cubic-bezier(.4,0,.9,.4) both}.hsk-cb-theme-grid-item{display:inline-flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:6px;padding:7px 11px;border-radius:13px;border:none !important;outline:none !important;background:var(--hsk-chat-bg,#1a1a1c);color:var(--hsk-chat-muted,#a1a1aa);font-size:11px;font-weight:550;cursor:pointer;font-family:inherit;transition:all .18s cubic-bezier(.16,1,.3,1);box-shadow:none !important}.hsk-cb-theme-grid-item svg{flex-shrink:0;width:12px;height:12px}.hsk-cb-theme-grid-item:hover{background:rgba(255,255,255,.1);color:var(--hsk-chat-text,#f0efed);box-shadow:none !important}.hsk-cb-theme-grid-item.is-active{background:var(--hsk-primary,#ff6a33) !important;color:#ffffff !important;box-shadow:none !important}}@keyframes hsk-ooze-in{0%{opacity:0;transform:translateX(-50%) translateY(-16px) scale(.88);filter:blur(6px)}65%{transform:translateX(-50%) translateY(3px) scale(1.02);filter:blur(0)}100%{opacity:1;transform:translateX(-50%) translateY(0) scale(1);filter:blur(0)}}.hsk-cb-topbar-actions{display:flex;align-items:center;gap:8px}.hsk-cb-topbar-btn{height:34px;padding:0 14px;border-radius:var(--hsk-control-radius,999px);border:1px solid transparent;background:var(--hsk-chat-subtle,rgba(0,0,0,.045));color:var(--hsk-chat-muted,#5f6368);font-size:12px;font-weight:500;cursor:pointer;transition:all .15s;font-family:inherit}.hsk-cb-topbar-btn:hover{background:color-mix(in srgb,var(--hsk-primary) 12%,transparent);color:var(--hsk-primary)}.hsk-cb-close{width:34px;height:34px;border-radius:var(--hsk-control-radius,999px);border:1px solid transparent;background:var(--hsk-chat-subtle,rgba(0,0,0,.045));color:var(--hsk-chat-muted,#5f6368);cursor:pointer;font-size:20px;display:flex;align-items:center;justify-content:center;transition:all .15s;flex-shrink:0;font-family:inherit;line-height:1}.hsk-cb-close:hover{background:color-mix(in srgb,var(--hsk-primary) 12%,transparent);color:var(--hsk-primary)}.hsk-cb-msgs{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;touch-action:pan-y;overscroll-behavior-y:none;overflow-anchor:none;padding:16px var(--hsk-gutter,24px) 16px;display:flex;flex-direction:column;gap:0;scrollbar-width:none;-ms-overflow-style:none;mask-image:linear-gradient(to bottom,transparent 0,#000000 8px,#000000 100%);-webkit-mask-image:linear-gradient(to bottom,transparent 0,#000000 8px,#000000 100%)}.hsk-cb-msgs>:first-child{margin-top:auto}.hsk-cb-msgs.hsk-scrolling>*{pointer-events:none}.hsk-cb-msgs::-webkit-scrollbar{display:none !important;width:0 !important;height:0 !important}.hsk-cb-empty{flex:1;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:14px;padding:24px 0 32px;width:100%;text-align:start}.hsk-cb-onboarding-card{display:flex;flex-direction:column;align-items:flex-start;width:100%;gap:10px}.hsk-cb-onboarding-head{display:flex;align-items:center;justify-content:flex-end;width:100%;margin-bottom:8px}.hsk-cb-step-badge{font-size:11px;font-weight:600;letter-spacing:.05em;color:var(--hsk-chat-muted,#71717a);background:var(--hsk-chat-source-bg,rgba(255,255,255,.06));border:1px solid var(--hsk-chat-border,rgba(255,255,255,.08));padding:4px 10px;border-radius:999px;line-height:1}.hsk-cb-hello-wrap{display:flex;flex-direction:column;align-items:flex-start;text-align:start;gap:6px;padding:0;width:100%}.hsk-cb-hello-avatar{--hsk-avatar-size:80px;display:flex;align-items:center;justify-content:flex-start;width:auto;margin-inline-start:calc(var(--hsk-avatar-size,80px) * -0.25);margin-inline-end:0;margin-top:0;margin-bottom:0;animation:hsk-avatar-spring .42s cubic-bezier(.16,1,.3,1) both}.hsk-cb-hello{margin:0;font-size:clamp(24px,4.5vw,34px);font-weight:500;line-height:1.2;letter-spacing:-0.02em;color:color-mix(in srgb,var(--hsk-chat-text,#111) 55%,var(--hsk-chat-muted,#8b8b8f));text-align:start}.hsk-cb-hello b{font-weight:700;color:var(--hsk-primary,#ff6a33)}.hsk-cb-hello-lead{margin:0;font-size:15px;line-height:22px;color:var(--hsk-chat-muted,#5f6368);max-width:42ch;text-align:start}.hsk-cb-hello-ask{margin:2px 0 2px;font-size:16px;font-weight:500;color:var(--hsk-chat-text,#111);text-align:start}.hsk-cb-step{font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--hsk-chat-muted,#9aa0a6)}.hsk-cb-panel[dir="rtl"] .hsk-cb-msgs{direction:ltr}.hsk-cb-panel[dir="rtl"] .hsk-cb-msgs>*{direction:rtl}.hsk-cb-panel[dir="rtl"] .hsk-cb-user-imgs{margin-left:0;margin-right:auto}.hsk-cb-panel[dir="rtl"] .hsk-cb-user-bubble,.hsk-cb-panel[dir="rtl"] .hsk-cb-ai-text{word-break:normal;overflow-wrap:break-word;letter-spacing:normal}.hsk-cb-panel[dir="rtl"] .hsk-cb-hello{line-height:1.6;letter-spacing:normal}.hsk-cb-panel[dir="rtl"] .hsk-cb-entlang-cards{justify-content:end}.hsk-cb-lang-chips{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 4px}.hsk-cb-lang-chip{display:inline-flex;align-items:center;justify-content:center;min-height:36px;padding:6px 16px;font-size:14px;font-weight:500;line-height:1;color:var(--hsk-chat-text,#111);background:var(--hsk-chat-source-bg,rgba(0,0,0,.04));border:1px solid var(--hsk-chat-border,rgba(0,0,0,.09));border-radius:999px;cursor:pointer;box-shadow:0 1px 2px rgba(0,0,0,.03);transition:all .18s cubic-bezier(.16,1,.3,1);user-select:none;-webkit-font-smoothing:antialiased}.hsk-cb-lang-chip:hover{background:var(--hsk-primary,#ff6a33);color:#ffffff;border-color:var(--hsk-primary,#ff6a33);transform:translateY(-1px);box-shadow:0 4px 12px color-mix(in srgb,var(--hsk-primary,#ff6a33) 25%,transparent)}.hsk-cb-lang-chip:active{transform:scale(.96)}@media (prefers-color-scheme:dark){.hsk-cb-lang-chip{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.1);color:#f4f4f5}}[data-hsk-theme="dark"] .hsk-cb-lang-chip{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.1);color:#f4f4f5}.hsk-cb-lang-chips-hint{display:inline-flex;align-items:center;font-size:13px;color:var(--hsk-chat-muted,#71717a);padding:0 6px;margin-inline-start:4px;user-select:none;align-self:center}.hsk-cb-chrome-loading{display:flex;flex-direction:column;align-items:flex-start;text-align:start;gap:12px;width:100%;max-width:480px;margin:4px 0 2px;animation:hsk-content-fade .3s ease-out both}.hsk-cb-chrome-loading-header{display:flex;flex-direction:column;align-items:flex-start;text-align:start;gap:6px;width:100%}.hsk-cb-chrome-loading-sub{margin:0;font-size:15px;color:var(--hsk-chat-muted,#71717a);line-height:1.45;text-align:start}.hsk-cb-chrome-loading-sub b{color:var(--hsk-chat-text,#f4f4f5);font-weight:600}.hsk-cb-chrome-progress{height:3px;width:100%;border-radius:3px;background:var(--hsk-chat-source-bg,rgba(255,255,255,.08));overflow:hidden;margin-top:4px}.hsk-cb-chrome-progress-track{height:100%;width:100%;border-radius:3px;background:linear-gradient( 90deg,#ff6a33,#f7b733,#43c59e,#3d8bfd,#9b5de5,#ff5d8f,#ff6a33 );background-size:300% 100%;animation:hsk-chrome-rainbow 2.6s linear infinite}.hsk-cb-chrome-progress{position:relative;overflow:hidden}.hsk-cb-chrome-progress::after{content:'';position:absolute;inset:0;background:linear-gradient( 100deg,transparent 20%,rgba(255,255,255,.55) 50%,transparent 80% );transform:translateX(-100%);animation:hsk-chrome-sheen 1.9s cubic-bezier(.55,0,.45,1) infinite;pointer-events:none}@keyframes hsk-chrome-rainbow{0%{background-position:0 0}100%{background-position:-300% 0}}@keyframes hsk-chrome-sheen{0%{transform:translateX(-100%)}100%{transform:translateX(200%)}}@media (prefers-reduced-motion:reduce){.hsk-cb-chrome-progress-track{animation:none;opacity:.5}.hsk-cb-chrome-progress::after{animation:none;opacity:0}}.hsk-cb-chrome-back-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;margin-top:6px;font-size:13px;font-weight:500;color:var(--hsk-chat-muted,#a1a1aa);background:var(--hsk-chat-source-bg,rgba(255,255,255,.05));border:1px solid var(--hsk-chat-border,rgba(255,255,255,.09));border-radius:999px;cursor:pointer;transition:all .15s ease;user-select:none}.hsk-cb-chrome-back-btn:hover{background:var(--hsk-chat-source-bg,rgba(255,255,255,.12));color:var(--hsk-chat-text,#ffffff);border-color:var(--hsk-chat-border,rgba(255,255,255,.18))}.hsk-cb-chrome-notice{display:flex;flex-direction:column;gap:6px;max-width:48ch;margin:24px 0 0;padding:14px 16px;border-radius:14px;background:var(--hsk-chat-source-bg,rgba(255,255,255,.04));border:1px solid var(--hsk-chat-border,rgba(255,255,255,.09));text-align:start;font-family:var(--hsk-font,system-ui,sans-serif);animation:hsk-content-fade .4s ease-out both}.hsk-cb-chrome-notice-header{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.hsk-cb-chrome-notice-pill{display:inline-flex;align-items:center;padding:2px 7px;border-radius:6px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;background:rgba(255,106,51,.15);color:var(--hsk-primary,#ff6a33);border:1px solid rgba(255,106,51,.28)}.hsk-cb-chrome-notice-title{font-size:12px;font-weight:600;letter-spacing:.01em;color:var(--hsk-chat-text,#ffffff)}.hsk-cb-chrome-notice-body{font-size:12px;line-height:1.55;color:var(--hsk-chat-muted,#a1a1aa)}.hsk-cb-chrome-notice-body b{color:var(--hsk-chat-text,#ffffff)}@media (prefers-color-scheme:light){.hsk-cb-chrome-loading-sub b{color:var(--hsk-chat-text,#18181b)}.hsk-cb-chrome-progress{background:var(--hsk-chat-source-bg,rgba(0,0,0,.06))}.hsk-cb-chrome-back-btn{color:#52525b;background:rgba(0,0,0,.04);border-color:rgba(0,0,0,.08)}.hsk-cb-chrome-back-btn:hover{background:rgba(0,0,0,.08);color:#09090b;border-color:rgba(0,0,0,.14)}}.hsk-cb-input-box--waiting{opacity:.45;pointer-events:none}.hsk-cb-entlang-opts{display:flex;flex-direction:column;gap:10px;width:100%;max-width:440px;margin-top:6px}.hsk-cb-entlang-opt{position:relative;display:flex;flex-direction:row;align-items:center;width:100%;padding:16px 20px;text-align:start;background:transparent !important;border:none !important;outline:none !important;border-radius:16px;cursor:pointer;user-select:none;overflow:hidden;box-shadow:none !important;animation:hsk-entlang-opt-in .22s cubic-bezier(.16,1,.3,1) both;animation-delay:calc(.04s+var(--hsk-opt-idx,0) * .02s)}@media (prefers-color-scheme:light){.hsk-cb-entlang-opt{background:transparent !important}}[data-hsk-theme="light"] .hsk-cb-entlang-opt{background:transparent !important}@keyframes hsk-entlang-opt-in{0%{opacity:0;transform:translateY(6px)}100%{opacity:1;transform:translateY(0)}}.hsk-cb-entlang-opt:hover{background:transparent !important;border:none !important;box-shadow:none !important}.hsk-cb-entlang-opt:active{opacity:.8}.hsk-cb-entlang-radio{position:relative;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;min-width:18px;min-height:18px;border-radius:999px;border:1.5px solid var(--hsk-chat-divide,rgba(255,255,255,.22));flex-shrink:0;margin-inline-end:14px;box-sizing:border-box;transform:none !important;transition:border-color .2s cubic-bezier(.16,1,.3,1),background-color .2s ease}.hsk-cb-entlang-radio-dot{width:9px;height:9px;border-radius:999px;background:var(--hsk-primary,#ff6a33);opacity:0;transition:opacity .15s ease;pointer-events:none}.hsk-cb-entlang-opt:hover .hsk-cb-entlang-radio,.hsk-cb-entlang-opt.is-selected .hsk-cb-entlang-radio{border-color:var(--hsk-primary,#ff6a33)}.hsk-cb-entlang-opt.is-selected .hsk-cb-entlang-radio-dot{opacity:1}.hsk-cb-entlang-opt-text{display:flex;flex-direction:column;gap:3px;width:100%}.hsk-cb-entlang-opt-title{font-size:15px;font-weight:600;color:var(--hsk-chat-text,#1f1f1f);letter-spacing:-0.01em}.hsk-cb-entlang-opt-note{font-size:12.5px;color:var(--hsk-chat-muted,#71717a);line-height:1.45}.hsk-cb-shimmer-char{display:inline;color:inherit;font-family:inherit}.hsk-cb-entlang-opt:hover .hsk-cb-entlang-opt-title .hsk-cb-shimmer-char{animation:hsk-entlang-char-shimmer-title .5s cubic-bezier(.16,1,.3,1) both;animation-delay:calc(var(--hsk-char-idx,0) * 16ms)}.hsk-cb-entlang-opt:hover .hsk-cb-entlang-opt-note .hsk-cb-shimmer-char{animation:hsk-entlang-char-shimmer-note .5s cubic-bezier(.16,1,.3,1) both;animation-delay:calc(var(--hsk-char-idx,0) * 16ms)}@keyframes hsk-entlang-char-shimmer-title{0%{color:var(--hsk-chat-text,#1f1f1f)}45%{color:hsl(var(--hsk-ph-hue,0) 80% 60%)}100%{color:var(--hsk-primary,#ff6a33)}}@keyframes hsk-entlang-char-shimmer-note{0%{color:var(--hsk-chat-muted,#71717a)}45%{color:hsl(var(--hsk-ph-hue,0) 75% 55%)}100%{color:var(--hsk-chat-muted,#71717a)}}.hsk-cb-entlang-opt-note{font-size:12.5px;color:var(--hsk-chat-muted,#71717a);line-height:1.45}@keyframes hsk-hello-rise{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.hsk-cb-hello,.hsk-cb-hello-lead,.hsk-cb-hello-ask,.hsk-cb-hello-skip{opacity:0;animation:hsk-hello-rise .9s cubic-bezier(.22,1,.36,1) both}.hsk-cb-hello{animation-delay:.06s}.hsk-cb-hello-lead{animation-delay:.26s}.hsk-cb-hello-ask{animation-delay:.44s}.hsk-cb-hello-skip{animation-delay:.60s}.hsk-cb-hello.hsk-cascade,.hsk-cb-hello-lead.hsk-cascade,.hsk-cb-hello-ask.hsk-cascade{opacity:1;animation:none;filter:none}.hsk-cascade__w{display:inline-block;white-space:nowrap;opacity:0;animation:hsk-cascade-rise .44s cubic-bezier(.16,1,.3,1) both}@keyframes hsk-cascade-rise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.hsk-cb-hello,.hsk-cb-hello-lead,.hsk-cb-hello-ask,.hsk-cb-hello-skip,.hsk-cascade__w{animation:none;opacity:1;transform:none;filter:none}}.hsk-cb-chips{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-start;margin-top:4px}.hsk-cb-chip{padding:8px 16px;border-radius:var(--hsk-border-radius,0);border:1px solid var(--hsk-chat-divide,rgba(0,0,0,.1));background:var(--hsk-chat-source-bg,rgba(0,0,0,.03));color:var(--hsk-chat-text,#333);font-size:13px;cursor:pointer;transition:all .15s;font-family:inherit}.hsk-cb-chip:hover{border-color:var(--hsk-primary);color:var(--hsk-primary);background:rgba(255,106,51,.06)}.hsk-cb-msg-group{padding:16px 0;border-bottom:none;animation:hsk-msg-in .22s ease-out both}.hsk-cb-spoken-mark{position:absolute;top:50%;margin-top:-5px;inset-inline-start:-17px;opacity:.4;pointer-events:none}.hsk-cb-msg-group--run-mid{padding-bottom:0}.hsk-cb-msg-group--run-mid .hsk-cb-user-msg{margin-bottom:0}.hsk-cb-msg-group--run-cont{padding-top:2px}.hsk-cb-msg-group:last-child{border-bottom:none}@keyframes hsk-msg-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.hsk-cb-user-msg{display:flex;flex-direction:column;align-items:flex-end;align-self:flex-end;max-width:min(75%,420px);margin-inline-start:auto;margin-inline-end:0;gap:6px;margin-bottom:20px}@media (max-width:640px){.hsk-cb-user-msg{max-width:84%}}.hsk-cb-user-msg.hsk-sent{transform-origin:bottom right;animation:hsk-send-in .42s cubic-bezier(.2,.9,.3,1.2) both}.hsk-cb-panel[dir="rtl"] .hsk-cb-user-msg.hsk-sent{transform-origin:bottom left}@keyframes hsk-send-in{0%{opacity:0;transform:translateY(28px) scale(.55)}55%{opacity:1}75%{transform:translateY(-2px) scale(1.02)}100%{opacity:1;transform:translateY(0) scale(1)}}@media (prefers-reduced-motion:reduce){.hsk-cb-user-msg.hsk-sent{animation:none}}.hsk-cb-user-bubble{background:var(--hsk-user-bubble-bg,#007aff);color:#ffffff;padding:10px 18px;border-radius:20px;position:relative;font-size:var(--hsk-font-size,15.5px);font-family:var(--hsk-font);line-height:1.45;max-width:100%;font-weight:500;word-break:break-word;overflow-wrap:anywhere;letter-spacing:-0.01em}.hsk-cb-user-bubble--tail::before,.hsk-cb-user-bubble--tail::after{content:'';position:absolute;bottom:0;height:25px;pointer-events:none}.hsk-cb-user-bubble--tail::before{right:-7px;width:20px;background:var(--hsk-user-bubble-bg,#007aff);border-bottom-left-radius:16px 14px}.hsk-cb-user-bubble--tail::after{right:-26px;width:26px;background:var(--hsk-chat-bg,#ffffff);border-bottom-left-radius:10px}.hsk-cb-panel[dir="rtl"] .hsk-cb-user-bubble--tail::before{right:auto;left:-7px;border-bottom-left-radius:0;border-bottom-right-radius:16px 14px}.hsk-cb-panel[dir="rtl"] .hsk-cb-user-bubble--tail::after{right:auto;left:-26px;border-bottom-left-radius:0;border-bottom-right-radius:10px}.hsk-cb-ai-msg{display:block}.hsk-cb-ai-icon{width:32px;height:32px;border-radius:0;background:transparent !important;border:none !important;color:var(--hsk-primary,#ff6a33);display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:-2px}.hsk-cb-ai-icon>svg{width:30px !important;height:30px !important}.hsk-cb-ai-icon>.hsk-cb-ai-mark{width:40px !important;height:40px !important}.hsk-cb-ai-body{flex:1;min-width:0}.hsk-cb-ai-content{display:flex;flex-direction:column;gap:10px;align-items:flex-start;width:100%}.hsk-cb-think+.hsk-cb-ai-content>.hsk-cb-ai-text:first-child{padding-top:20px}.hsk-cb-ai-text{font-size:var(--hsk-font-size,14.5px);font-family:var(--hsk-font);line-height:1.48;color:var(--hsk-chat-text,#111827);background:var(--hsk-chat-ai-bg,#eeeef0);padding:11px 15px;border-radius:18px;position:relative;display:inline-block;width:fit-content;box-sizing:border-box;max-width:min(88%,560px);word-break:break-word;overflow-wrap:anywhere;margin-top:4px}.hsk-cb-ai-text:not(:has(~.hsk-cb-ai-text))::before,.hsk-cb-ai-text:not(:has(~.hsk-cb-ai-text))::after{content:'';position:absolute;bottom:0;height:25px;pointer-events:none}.hsk-cb-ai-text:not(:has(~.hsk-cb-ai-text))::before{left:-7px;width:20px;background:var(--hsk-chat-ai-bg,#eeeef0);border-bottom-right-radius:16px 14px}.hsk-cb-ai-text:not(:has(~.hsk-cb-ai-text))::after{left:-26px;width:26px;background:var(--hsk-chat-bg,#ffffff);border-bottom-right-radius:10px}.hsk-cb-panel[dir="rtl"] .hsk-cb-ai-text:not(:has(~.hsk-cb-ai-text))::before{left:auto;right:-7px;border-bottom-right-radius:0;border-bottom-left-radius:16px 14px}.hsk-cb-panel[dir="rtl"] .hsk-cb-ai-text:not(:has(~.hsk-cb-ai-text))::after{left:auto;right:-26px;border-bottom-right-radius:0;border-bottom-left-radius:10px}.hsk-cb-sent-status{font-size:11px;line-height:1;color:var(--hsk-chat-muted,#8a8f98);padding:4px 6px 0 0;animation:hsk-sent-in .2s ease-out both}@keyframes hsk-sent-in{from{opacity:0}to{opacity:1}}.hsk-cb-user-bubble--queued{opacity:.55}.hsk-cb-queued-status{display:inline-flex;align-items:center;gap:5px;font-size:11px;line-height:1;color:var(--hsk-chat-muted,#8a8f98);padding:4px 0 0;background:none;border:none;cursor:pointer;font-family:var(--hsk-font);animation:hsk-sent-in .2s ease-out both}.hsk-cb-queued-dot{width:5px;height:5px;border-radius:999px;background:currentColor;animation:hsk-queued-pulse 1.1s ease-in-out infinite}@keyframes hsk-queued-pulse{0%,100%{opacity:.35;transform:scale(.85)}50%{opacity:1;transform:scale(1)}}.hsk-cb-queued-now{color:var(--hsk-primary,#ff6a33);font-weight:600;transition:opacity .15s ease}.hsk-cb-queued-status:hover .hsk-cb-queued-now{opacity:.7}@media (prefers-reduced-motion:reduce){.hsk-cb-queued-dot{animation:none;opacity:.8}}.hsk-cb-timeline{display:none}@media (min-width:900px){.hsk-cb-timeline.hsk-cb-timeline--left{display:block;position:absolute;left:auto !important;right:100% !important;margin-right:28px !important;top:50%;transform:translateY(-50%) !important;width:180px;max-height:60%;overflow:hidden;z-index:10;pointer-events:auto;direction:ltr !important;-webkit-mask-image:linear-gradient(to bottom,transparent,#000 14%,#000 86%,transparent);mask-image:linear-gradient(to bottom,transparent,#000 14%,#000 86%,transparent)}.hsk-cb-timeline.hsk-cb-timeline--right{display:block;position:absolute;left:100% !important;right:auto !important;margin-left:28px !important;top:50%;transform:translateY(-50%) !important;width:180px;max-height:60%;overflow:hidden;z-index:10;pointer-events:auto;direction:ltr !important;-webkit-mask-image:linear-gradient(to bottom,transparent,#000 14%,#000 86%,transparent);mask-image:linear-gradient(to bottom,transparent,#000 14%,#000 86%,transparent)}.hsk-cb-timeline-track{animation:hsk-tl-in .32s cubic-bezier(.22,1,.36,1) both}}@keyframes hsk-tl-in{from{opacity:0;transform:translateX(-10px)}to{opacity:1;transform:translateX(0)}}.hsk-cb-timeline-track{--hsk-tl-x:9px;position:relative;padding-left:26px !important;padding-right:6px !important}.hsk-cb-timeline-track::before,.hsk-cb-timeline-track::after{content:'';position:absolute;left:calc(var(--hsk-tl-x) - 1px) !important;right:auto !important;top:8px;bottom:8px;width:2px;border-radius:2px}.hsk-cb-timeline-track::before{background:var(--hsk-chat-divide,rgba(0,0,0,.09))}.hsk-cb-timeline-track::after{background:var(--hsk-primary,#ff6a33);opacity:.5;transform-origin:top;transform:scaleY(var(--hsk-tl-progress,0));transition:transform .18s linear}.hsk-cb-tl-item{--hsk-tl-d:0;position:relative;display:block;width:100%;padding:7px 6px 7px 0 !important;border:none;background:none;text-align:left !important;cursor:pointer;font-family:var(--hsk-font)}.hsk-cb-tl-dot{position:absolute;left:calc(var(--hsk-tl-x,9px) - 3.5px) !important;right:auto !important;top:50%;width:7px;height:7px;margin-top:-3.5px;border-radius:999px;background:var(--hsk-chat-divide,rgba(0,0,0,.18));opacity:max(.25,calc(1 - var(--hsk-tl-d) * .22));transition:transform .28s cubic-bezier(.34,1.4,.64,1),opacity .46s cubic-bezier(.22,1,.36,1),background .2s ease}.hsk-cb-tl-label{display:block;font-size:12px;line-height:1.4;color:var(--hsk-chat-muted,#8a8f98);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transform:translateX(calc(var(--hsk-tl-d) * 7px));opacity:max(.32,calc(.9 - var(--hsk-tl-d) * .15));transition:transform .46s cubic-bezier(.22,1,.36,1),opacity .46s cubic-bezier(.22,1,.36,1),color .2s ease}.hsk-cb-tl-item:hover .hsk-cb-tl-label{opacity:1;transform:translateX(calc(var(--hsk-tl-d) * 7px - 2px))}.hsk-cb-tl-item:hover .hsk-cb-tl-dot{transform:scale(1.25)}.hsk-cb-tl-cursor{position:absolute;left:calc(var(--hsk-tl-x,9px) - 4.5px) !important;right:auto !important;top:0;width:9px;height:9px;margin-top:-4.5px;border-radius:999px;background:var(--hsk-primary,#ff6a33);transform:translateY(0);transition:transform .44s cubic-bezier(.22,1,.36,1);will-change:transform;pointer-events:none}.hsk-cb-tl-item--on .hsk-cb-tl-dot{opacity:.35}.hsk-cb-tl-item--on .hsk-cb-tl-label{color:var(--hsk-chat-text,#1f1f1f);opacity:1;font-weight:500}@media (prefers-reduced-motion:reduce){.hsk-cb-timeline-track{animation:none}.hsk-cb-timeline-track::after,.hsk-cb-tl-label,.hsk-cb-tl-cursor,.hsk-cb-tl-dot{transition:none}}@media (prefers-color-scheme:dark){.hsk-cb-ai-text{--hsk-chat-ai-bg:#26262a;background:var(--hsk-chat-ai-bg);color:#f9fafb}}.hsk-cb-sources-wrap{position:relative;margin-top:20px}.hsk-cb-sources{display:flex;flex-direction:row;gap:14px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;-ms-overflow-style:none;padding-bottom:4px}.hsk-cb-sources::-webkit-scrollbar{display:none}.hsk-cb-sources-fade-left,.hsk-cb-sources-fade-right{position:absolute;top:0;bottom:4px;width:30px;pointer-events:none;z-index:2}.hsk-cb-sources-fade-left,.hsk-cb-sources-fade-right{background-color:var(--hsk-fade-bg,var(--hsk-chat-bg,#0e0e0f))}.hsk-cb-sources-fade-left,[dir="rtl"] .hsk-cb-sources-fade-right{-webkit-mask-image:linear-gradient(to right,#000 0,rgba(0,0,0,.55) 45%,transparent 100%);mask-image:linear-gradient(to right,#000 0,rgba(0,0,0,.55) 45%,transparent 100%)}.hsk-cb-sources-fade-right,[dir="rtl"] .hsk-cb-sources-fade-left{-webkit-mask-image:linear-gradient(to left,#000 0,rgba(0,0,0,.55) 45%,transparent 100%);mask-image:linear-gradient(to left,#000 0,rgba(0,0,0,.55) 45%,transparent 100%)}.hsk-cb-sources-fade-left{inset-inline-start:0}.hsk-cb-sources-fade-right{inset-inline-end:0}.hsk-cb-sources-next,.hsk-cb-sources-prev{position:absolute;top:42%;transform:translateY(-50%);width:34px;height:34px;border-radius:50% !important;background:var(--hsk-chat-bg,#ffffff) !important;border:1px solid var(--hsk-chat-divide,rgba(0,0,0,.12)) !important;color:var(--hsk-primary,#ff6a33) !important;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 14px rgba(0,0,0,.14);z-index:10;cursor:pointer;transition:transform .2s cubic-bezier(.34,1.56,.64,1),background .18s ease,color .18s ease,box-shadow .18s ease}.hsk-cb-sources-next:hover,.hsk-cb-sources-prev:hover{background:var(--hsk-primary,#ff6a33) !important;color:#ffffff !important;border-color:var(--hsk-primary,#ff6a33) !important;transform:translateY(-50%) scale(1.1);box-shadow:0 6px 18px rgba(255,106,51,.35)}.hsk-cb-sources-next{inset-inline-end:2px}.hsk-cb-sources-prev{inset-inline-start:2px}[dir="rtl"] .hsk-cb-sources-next svg,[dir="rtl"] .hsk-cb-sources-prev svg{transform:scaleX(-1)}.hsk-cb-carousel-dots{display:flex;align-items:center;justify-content:center;gap:5px;margin-top:10px}.hsk-cb-dot-item{width:6px;height:6px;border-radius:50%;background:rgba(150,150,150,.35);transition:all .25s cubic-bezier(.34,1.56,.64,1);cursor:pointer}.hsk-cb-dot-item--active{width:18px;border-radius:999px;background:var(--hsk-primary,#ff6a33)}.hsk-cb-source{flex:0 0 188px;scroll-snap-align:start;border-radius:var(--hsk-border-radius,0);border:none;background:transparent;cursor:pointer;transition:transform .14s,opacity .14s;animation:hsk-card-in .26s ease-out both;overflow:visible}@keyframes hsk-card-in{from{opacity:0;transform:translateX(16px)}to{opacity:1;transform:none}}.hsk-cb-source:hover{transform:translateY(-3px);opacity:.92}.hsk-cb-src-imgwrap{width:188px;height:188px;overflow:hidden;border-radius:var(--hsk-border-radius,0);display:block;background:var(--hsk-chat-source-bg,#f8f9fa)}.hsk-cb-src-imgwrap img{width:100%;height:100%;object-fit:cover;transition:transform .22s;display:block}.hsk-cb-source:hover .hsk-cb-src-imgwrap img{transform:scale(1.05)}.hsk-cb-src-imgwrap-empty{width:188px;height:188px;background:var(--hsk-chat-divide,rgba(0,0,0,.06));display:flex;align-items:center;justify-content:center;color:var(--hsk-chat-muted,#555);font-size:32px}.hsk-cb-src-info{padding:8px 2px 0}.hsk-cb-sources-wrap--compact{margin-top:10px}.hsk-cb-sources-wrap--compact .hsk-cb-sources{gap:10px}.hsk-cb-sources-wrap--compact .hsk-cb-source{flex:0 0 96px}.hsk-cb-sources-wrap--compact .hsk-cb-src-imgwrap,.hsk-cb-sources-wrap--compact .hsk-cb-src-imgwrap-empty{width:96px;height:96px}.hsk-cb-sources-wrap--compact .hsk-cb-src-imgwrap-empty{font-size:20px}.hsk-cb-sources-wrap--compact .hsk-cb-src-name{font-size:12px;-webkit-line-clamp:1}.hsk-cb-sources-wrap--compact .hsk-cb-src-price{font-size:11px;padding:1px 6px}.hsk-cb-sources-wrap--compact .hsk-cb-source-ref-badge{display:none}.hsk-cb-src-name{font-size:13px;font-weight:600;color:var(--hsk-chat-text,#333);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.hsk-cb-src-price{display:inline-flex;align-items:center;width:fit-content;max-width:100%;padding:2px 9px;border-radius:9999px;background:var(--hsk-chat-source-bg,rgba(0,0,0,.05));border:1px solid var(--hsk-chat-divide,rgba(0,0,0,.08));font-size:12px;font-weight:600;color:var(--hsk-primary,#ff6a33);margin-top:5px;line-height:1.2}.hsk-cb-typing-row{display:flex;align-items:flex-start;gap:14px;padding:20px 0}@keyframes hsk-shimmer{0%{background-position:130% 0}100%{background-position:-110% 0}}.hsk-cb-input-wrap{position:relative;--hsk-composer-pad-top:16px;--hsk-composer-pad-x:var(--hsk-gutter,24px);padding:var(--hsk-composer-pad-top) var(--hsk-composer-pad-x) 24px;flex-shrink:0;background:transparent !important;z-index:10}.hsk-cb-input-wrap::after{display:none !important}.hsk-cb-input-card{border-radius:20px;background:var(--hsk-chat-input-bg,#ffffff);border:none !important;outline:none !important;box-shadow:0 3px 14px -1px rgba(0,0,0,.05),0 1px 4px rgba(0,0,0,.03) !important;overflow:hidden;position:relative;z-index:1;transition:height .22s cubic-bezier(.32,.72,0,1)}.hsk-cb-input-card:focus-within{border:none !important;outline:none !important;box-shadow:0 4px 18px -1px rgba(0,0,0,.07),0 2px 6px rgba(0,0,0,.04) !important}.hsk-cb-docked-header{display:flex;align-items:center;gap:8px;padding:10px 16px 6px;background:transparent;border-bottom:none !important;user-select:none}.hsk-cb-docked-icon{display:flex;align-items:center;justify-content:center;width:18px;height:18px;color:var(--hsk-primary,#ff6a33)}.hsk-cb-docked-title{font-size:13px;font-weight:700;color:var(--hsk-primary,#ff6a33);letter-spacing:-0.01em}.hsk-cb-docked-sub{font-size:12px;font-weight:500;letter-spacing:-0.01em;color:var(--hsk-chat-text,#1f1f1f);flex:1}.hsk-cb-docked-close{background:none;border:none;color:var(--hsk-chat-muted,rgba(0,0,0,.4));font-size:16px;line-height:1;cursor:pointer;padding:2px 6px;border-radius:50%;transition:background .12s,color .12s}.hsk-cb-docked-close:hover{background:rgba(0,0,0,.08);color:var(--hsk-chat-text,#111111)}.hsk-cb-field{margin-inline:5px}.hsk-cb-input-box[data-expanded="true"]>.hsk-cb-field{margin-inline:0}.hsk-cb-docked-options{display:flex;flex-direction:column;padding:4px 6px;background:transparent;border-bottom:none !important;max-height:220px;overflow-y:auto;scrollbar-width:thin}.hsk-cb-docked-option{display:flex;align-items:center;gap:10px;width:100%;padding:8px 12px;border:none;background:transparent !important;border-radius:10px;color:var(--hsk-chat-text,#1f1f1f);font-family:inherit;font-size:14px;text-align:start;cursor:pointer;transition:color .15s ease}.hsk-cb-docked-option:hover,.hsk-cb-docked-option:focus{background:transparent !important;color:var(--hsk-primary,#ff6a33)}.hsk-cb-docked-option-icon{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:8px;background:color-mix(in srgb,var(--hsk-primary,#ff6a33) 12%,transparent);color:var(--hsk-primary,#ff6a33);flex-shrink:0;overflow:hidden;transition:transform .2s cubic-bezier(.34,1.56,.64,1),background .18s ease}.hsk-cb-docked-option:hover .hsk-cb-docked-option-icon,.hsk-cb-docked-option:focus .hsk-cb-docked-option-icon{background:color-mix(in srgb,var(--hsk-primary,#ff6a33) 22%,transparent);transform:scale(1.15) rotate(4deg)}.hsk-cb-docked-option-icon img{width:100%;height:100%;object-fit:cover}.hsk-cb-docked-option-title{font-weight:500;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .15s ease}.hsk-cb-docked-option-desc{font-size:12px;color:var(--hsk-chat-muted,#6b7280);font-weight:400}.hsk-cb-docked-option-price{font-size:12px;font-weight:600;color:var(--hsk-chat-muted,#6b7280)}.hsk-cb-input-box{position:relative;display:grid;grid-template-columns:auto auto 1fr auto auto;grid-template-rows:auto 0;align-items:center;justify-items:start;column-gap:10px;row-gap:0;transition:grid-template-rows .2s cubic-bezier(.32,.72,0,1),row-gap .2s cubic-bezier(.32,.72,0,1);background:transparent !important;border:none !important;outline:none !important;border-radius:0 !important;padding-block:12px;padding-inline:18px 14px;box-shadow:none !important}.hsk-cb-tools-toggle{display:none}.hsk-cb-toolsheet-wrap{position:absolute;bottom:calc(100% - 6px);inset-inline-start:var(--hsk-composer-pad-x,14px);inset-inline-end:auto;z-index:100;transform-origin:bottom left;animation:hsk-toolsheet-in .22s cubic-bezier(.16,1,.3,1) both;pointer-events:auto}[dir="rtl"] .hsk-cb-toolsheet-wrap,.hsk-cb-panel[dir="rtl"] .hsk-cb-toolsheet-wrap{transform-origin:bottom right}.hsk-cb-toolsheet{position:relative;z-index:1;min-width:200px;padding:6px;border-radius:16px;background:var(--hsk-chat-source-bg,rgba(255,255,255,.08));border:none !important;box-shadow:none !important}@keyframes hsk-toolsheet-in{0%{opacity:0;transform:translateY(8px) scale(.92)}100%{opacity:1;transform:translateY(0) scale(1)}}.hsk-cb-toolsheet-scrim{position:fixed;inset:0;z-index:90;background:transparent;cursor:default}.hsk-cb-toolsheet-item{display:flex;align-items:center;gap:11px;width:100%;padding:10px 12px;border:none;border-radius:11px;background:transparent;color:var(--hsk-chat-text,#111827);font-family:var(--hsk-font);font-size:15px;text-align:start;cursor:pointer;transition:background-color .15s ease}.hsk-cb-toolsheet-item:hover:not(:disabled){background:var(--hsk-chat-subtle,rgba(0,0,0,.05))}.hsk-cb-toolsheet-item:disabled{opacity:.45;cursor:default}.hsk-cb-toolsheet-item>svg{flex-shrink:0;color:var(--hsk-chat-muted,#6b7280)}[data-hsk-theme] .hsk-cb-toolsheet{background:var(--hsk-sheet-bg,var(--hsk-chat-input-bg,#f3f4f6)) !important;border:none !important}[data-hsk-theme] .hsk-cb-toolsheet-item{color:var(--hsk-chat-text,#111827) !important}[data-hsk-theme] .hsk-cb-toolsheet-item:hover:not(:disabled){background:var(--hsk-sheet-hover,var(--hsk-surface-2,rgba(0,0,0,.05))) !important}[data-hsk-theme] .hsk-cb-toolsheet-item>svg{color:var(--hsk-chat-muted,#6b7280) !important}@media (prefers-reduced-motion:reduce){.hsk-cb-toolsheet-wrap,.hsk-cb-toolsheet-stem{animation:none}.hsk-cb-toolsheet-stem{transform:scale(.62)}}.hsk-cb-input-box>.hsk-cb-attach-btn{grid-column:1;grid-row:1}.hsk-cb-input-box>.hsk-cb-voice-mode-btn{grid-column:2;grid-row:1}.hsk-cb-input-box>.hsk-cb-field{grid-column:3;grid-row:1}.hsk-cb-input-box>.hsk-cb-mic-btn{grid-column:4;grid-row:1}.hsk-cb-input-box>.hsk-cb-send,.hsk-cb-input-box>.hsk-chat-send{grid-column:5;grid-row:1}.hsk-cb-input-box[data-expanded="true"]{grid-template-rows:auto 36px;row-gap:6px}.hsk-cb-input-box[data-expanded="true"]>.hsk-cb-field{grid-column:1 / -1;grid-row:1}.hsk-cb-input-box[data-expanded="true"]>.hsk-cb-attach-btn,.hsk-cb-input-box[data-expanded="true"]>.hsk-cb-voice-mode-btn,.hsk-cb-input-box[data-expanded="true"]>.hsk-cb-mic-btn,.hsk-cb-input-box[data-expanded="true"]>.hsk-cb-send,.hsk-cb-input-box[data-expanded="true"]>.hsk-chat-send{grid-row:2}.hsk-cb-textarea{width:100%;background:transparent;border:none;outline:none;resize:none;font-size:var(--hsk-input-font-size,16px);font-family:var(--hsk-font);color:var(--hsk-chat-text,#111);min-height:28px;max-height:140px;field-sizing:content;line-height:var(--hsk-input-line-height,1.55);word-break:break-word;overflow-wrap:break-word;padding:0;transition:height .18s cubic-bezier(.32,.72,0,1),color .42s cubic-bezier(.16,1,.3,1);scrollbar-width:none}.hsk-cb-textarea::-webkit-scrollbar{width:0;height:0}.hsk-cb-textarea::placeholder{color:var(--hsk-chat-muted,#9ca3af);font-family:var(--hsk-font);font-size:16px}.hsk-cb-attach-btn,.hsk-cb-mic-btn,.hsk-cb-send,.hsk-chat-send{width:36px;height:36px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0;border:none;cursor:pointer;transition:transform .2s cubic-bezier(.34,1.56,.64,1),box-shadow .2s cubic-bezier(.34,1.56,.64,1),background-color .42s cubic-bezier(.16,1,.3,1),opacity .2s ease;font-family:inherit;margin:0;padding:0}.hsk-cb-send,.hsk-chat-send{background:linear-gradient(135deg,#007aff 0,#0056b3 100%);color:#ffffff;border-radius:12px !important;box-shadow:0 4px 14px rgba(0,122,255,.38),inset 0 1px 0 rgba(255,255,255,.35);position:relative;overflow:hidden}.hsk-cb-send .hsk-telegram-icon,.hsk-chat-send .hsk-telegram-icon{transition:transform .25s cubic-bezier(.34,1.56,.64,1)}.hsk-cb-send:hover:not(:disabled),.hsk-chat-send:hover:not(:disabled){opacity:1;transform:translateY(-1px) scale(1.05);box-shadow:0 6px 18px rgba(0,122,255,.48),inset 0 1px 0 rgba(255,255,255,.45)}.hsk-cb-send:hover:not(:disabled) .hsk-telegram-icon,.hsk-chat-send:hover:not(:disabled) .hsk-telegram-icon{transform:translate(2px,-2px) rotate(-10deg) scale(1.1)}.hsk-cb-send:active:not(:disabled),.hsk-chat-send:active:not(:disabled){transform:translateY(0) scale(.94);box-shadow:0 1px 4px rgba(0,122,255,.3)}.hsk-cb-send:disabled,.hsk-chat-send:disabled{opacity:.4;cursor:not-allowed;background:var(--hsk-chat-muted,#ccc);box-shadow:none}.hsk-cb-send--stop{background:#e5342a !important}.hsk-cb-send--stop:hover{background:#c92a21 !important;opacity:1}.hsk-cb-hint{text-align:center;font-size:9px;line-height:14px;color:var(--hsk-chat-muted,#bbb);margin-top:10px}.hsk-cb-field{position:relative;grid-area:field;display:flex;align-items:center;width:100%;min-width:0;--hsk-input-font-size:16px;--hsk-input-line-height:1.55;--hsk-input-control:36px;--hsk-input-line-box:calc(var(--hsk-input-font-size) * var(--hsk-input-line-height))}.hsk-cb-listening{position:absolute;inset:0;display:flex;align-items:center;justify-content:space-between;pointer-events:none}.hsk-cb-listening span{width:2px;height:2px;border-radius:999px;background:var(--hsk-primary,#ff6a33);opacity:.3;transform-origin:center;will-change:transform,opacity;transition:transform 90ms linear,opacity 90ms linear}.hsk-animated-placeholder{position:absolute;inset:0;display:flex;align-items:center;height:100%;pointer-events:none;overflow:hidden;user-select:none;padding:0;z-index:1}.hsk-cb-input-box>*{--hsk-cascade-ease:cubic-bezier(.45,0,.55,1);--hsk-cascade-dur:.44s;--hsk-cascade-step:55ms}.hsk-cb-input-box[data-cascade]>*:not([type="file"]):not(.hsk-cb-field){animation-duration:var(--hsk-cascade-dur);animation-timing-function:var(--hsk-cascade-ease);animation-fill-mode:none}.hsk-cb-input-box[data-cascade="a"]>*:not([type="file"]):not(.hsk-cb-field){animation-name:hsk-leaf-settle-a}.hsk-cb-input-box[data-cascade="b"]>*:not([type="file"]):not(.hsk-cb-field){animation-name:hsk-leaf-settle-b}.hsk-cb-input-box[data-cascade]>*:not([type="file"]):not(.hsk-cb-field),.hsk-animated-placeholder__char{will-change:transform}.hsk-cb-input-box:hover>*,.hsk-cb-input-box:focus-within>*{will-change:auto}.hsk-cb-input-box>*{--hsk-cascade-field:110ms}.hsk-cb-input-box[data-cascade]>.hsk-cb-attach-btn{animation-delay:0ms}.hsk-cb-input-box[data-cascade]>.hsk-cb-voice-mode-btn{animation-delay:var(--hsk-cascade-step)}.hsk-cb-input-box[data-cascade]>.hsk-cb-mic-btn{animation-delay:calc(var(--hsk-cascade-field)+var(--hsk-text-sweep,0ms))}.hsk-cb-input-box[data-cascade]>.hsk-cb-send,.hsk-cb-input-box[data-cascade]>.hsk-chat-send{animation-delay:calc(var(--hsk-cascade-field)+var(--hsk-text-sweep,0ms)+var(--hsk-cascade-step))}@keyframes hsk-leaf-settle-a{0%{transform:translateY(0) scale(1)}42%{transform:translateY(-3px) scale(1.05)}100%{transform:translateY(0) scale(1)}}@keyframes hsk-leaf-settle-b{0%{transform:translateY(0) scale(1)}42%{transform:translateY(-3px) scale(1.05)}100%{transform:translateY(0) scale(1)}}.hsk-cb-input-box>.hsk-cb-field .hsk-animated-placeholder__char{animation-name:hsk-placeholder-animate-up}@media (prefers-reduced-motion:reduce){.hsk-cb-input-box[data-cascade="a"]>*,.hsk-cb-input-box[data-cascade="b"]>*{animation:none;transform:none;opacity:1}.hsk-cb-textarea,.hsk-cb-input-card{transition-property:background-color,box-shadow}}.hsk-animated-placeholder__char{display:inline-block;font-size:var(--hsk-input-font-size,16px);line-height:var(--hsk-input-line-height,1.55);color:var(--hsk-chat-muted,#9ca3af);font-family:var(--hsk-font);white-space:pre;animation:hsk-placeholder-animate-up .46s cubic-bezier(.16,1,.3,1) both}@keyframes hsk-placeholder-animate-up{0%{opacity:0;transform:translateY(9px);color:hsl(var(--hsk-ph-hue,0) var(--hsk-ph-sat,68%) var(--hsk-ph-light,55%))}55%{opacity:1;color:hsl(var(--hsk-ph-hue,0) var(--hsk-ph-sat,68%) var(--hsk-ph-light,55%))}100%{opacity:1;transform:translateY(0);color:var(--hsk-chat-muted,#9ca3af)}}@media (prefers-reduced-motion:reduce){.hsk-animated-placeholder__char{animation:none;transform:none;opacity:1;color:var(--hsk-chat-muted,#9ca3af);animation-delay:0ms !important}}.hsk-cb-voice-error{display:flex;align-items:center;justify-content:center;gap:8px;font-size:12px;line-height:1.4;max-width:90%;margin-inline:auto;text-wrap:balance;color:#ff6b6b;margin-top:8px;padding:4px 12px;border-radius:12px;background:rgba(229,72,77,.12);border:none;cursor:pointer;animation:hsk-msg-in .2s ease-out both}.hsk-cb-voice-error-dismiss{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;border:none;background:rgba(255,255,255,.12);color:inherit;font-size:14px;line-height:1;cursor:pointer;padding:0;flex-shrink:0;transition:background .15s ease,transform .15s ease}.hsk-cb-voice-error-dismiss:hover{background:rgba(255,255,255,.25);transform:scale(1.1)}.hsk-cb-img-strip{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:10px 18px 2px 18px;background:transparent;border:none;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none;animation:hsk-msg-in .2s ease-out both}.hsk-cb-img-thumb-wrap{position:relative;width:60px;height:60px;flex-shrink:0;border-radius:12px;box-shadow:0 2px 8px rgba(0,0,0,.08),0 0 0 1px rgba(255,255,255,.12);transition:transform .2s cubic-bezier(.16,1,.3,1),box-shadow .2s cubic-bezier(.16,1,.3,1);overflow:visible}.hsk-cb-img-thumb-wrap:hover{transform:translateY(-2px);box-shadow:0 6px 14px rgba(0,0,0,.12),0 0 0 1px rgba(255,255,255,.2)}.hsk-cb-img-thumb{width:100%;height:100%;object-fit:cover;border-radius:12px;border:none;display:block}.hsk-cb-img-thumb-remove{position:absolute;top:-5px;inset-inline-end:-5px;width:18px;height:18px;border-radius:50%;background:rgba(20,20,24,.75);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);color:#ffffff;border:1px solid rgba(255,255,255,.25);box-shadow:0 2px 6px rgba(0,0,0,.25);display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;transition:transform .15s cubic-bezier(.16,1,.3,1),background-color .15s ease;z-index:2}.hsk-cb-img-thumb-remove:hover{background:rgba(239,68,68,.92);border-color:rgba(255,255,255,.4);transform:scale(1.15)}.hsk-cb-attach-btn,.hsk-cb-mic-btn,.hsk-cb-voice-mode-btn{position:relative;width:36px;height:36px;border-radius:12px;border:none !important;outline:none !important;background:transparent;color:var(--hsk-chat-muted,#71717a);cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:none !important;opacity:.75;transition:transform .35s cubic-bezier(.34,1.8,.64,1),background-color .2s ease,color .2s ease,opacity .2s ease;font-family:inherit;overflow:visible}.hsk-cb-attach-btn:hover:not(:disabled),.hsk-cb-mic-btn:hover:not(:disabled),.hsk-cb-voice-mode-btn:hover:not(:disabled){opacity:1;color:var(--hsk-chat-text,#1f1f1f);background:transparent;transform:translateY(-1px)}.hsk-cb-attach-btn:active:not(:disabled),.hsk-cb-mic-btn:active:not(:disabled),.hsk-cb-voice-mode-btn:active:not(:disabled){transform:translateY(0) scale(.94);transition-duration:.1s}.hsk-cb-attach-btn svg,.hsk-cb-mic-btn svg,.hsk-cb-voice-mode-btn svg{overflow:visible}.hsk-cb-attach-btn svg{transition:transform .34s cubic-bezier(.22,1,.36,1)}.hsk-cb-attach-btn:hover:not(:disabled) svg{transform:rotate(-14deg) translateY(-1px)}.hsk-mic-cap{transform-box:fill-box;transform-origin:center;transition:transform .32s cubic-bezier(.34,1.56,.64,1)}.hsk-cb-mic-btn:hover:not(:disabled) .hsk-mic-cap{transform:translateY(-1.5px)}.hsk-wave-bar{transform-box:fill-box;transform-origin:center;transition:transform .3s cubic-bezier(.34,1.56,.64,1)}.hsk-cb-voice-mode-btn:hover:not(:disabled) .hsk-wave-bar{animation:hsk-wave-wake .52s cubic-bezier(.34,1.8,.64,1) both,hsk-wave-live var(--hsk-period,1.1s) ease-in-out .52s infinite;animation-delay:calc(var(--hsk-bar,0) * 55ms),calc(.52s+var(--hsk-bar,0) * 55ms)}.hsk-cb-voice-mode-btn:hover:not(:disabled) .hsk-wave-bar--tip{animation-name:hsk-wave-wake-tip,hsk-wave-live-tip}@keyframes hsk-wave-wake{0%{transform:scaleY(.12)}55%{transform:scaleY(calc(var(--hsk-amp,1.6) * 1.12))}100%{transform:scaleY(1)}}@keyframes hsk-wave-live{0%,100%{transform:scaleY(1)}30%{transform:scaleY(var(--hsk-amp,1.6))}55%{transform:scaleY(calc(1+(var(--hsk-amp,1.6) - 1) * .22))}78%{transform:scaleY(calc(1+(var(--hsk-amp,1.6) - 1) * .62))}}@keyframes hsk-wave-wake-tip{0%{transform:scaleX(.2);opacity:.4}55%{transform:scaleX(calc(var(--hsk-amp,1.9) * 1.1));opacity:1}100%{transform:scaleX(1);opacity:.8}}@keyframes hsk-wave-live-tip{0%,100%{transform:scaleX(1);opacity:.7}30%{transform:scaleX(var(--hsk-amp,1.9));opacity:1}70%{transform:scaleX(1.15);opacity:.8}}.hsk-copy-sheet,.hsk-copy-back{transform-box:fill-box;transform-origin:center;transition:transform .3s cubic-bezier(.22,1,.36,1)}.hsk-cb-kiku-id-pill:hover .hsk-copy-sheet{transform:translate(.9px,.9px)}.hsk-cb-kiku-id-pill:hover .hsk-copy-back{transform:translate(-0.9px,-0.9px)}@media (prefers-reduced-motion:reduce){.hsk-cb-attach-btn:hover:not(:disabled) svg,.hsk-cb-mic-btn:hover:not(:disabled) .hsk-mic-cap,.hsk-cb-kiku-id-pill:hover .hsk-copy-sheet,.hsk-cb-kiku-id-pill:hover .hsk-copy-back{transform:none}.hsk-cb-voice-mode-btn:hover:not(:disabled) .hsk-wave-bar{animation:none}}.hsk-cb-attach-btn:disabled,.hsk-cb-mic-btn:disabled,.hsk-cb-voice-mode-btn:disabled{opacity:.3;cursor:not-allowed;transform:none}.hsk-cb-mic-btn--listening{color:#ef4444 !important;background:rgba(239,68,68,.16) !important;transform:scale(1.1) !important}.hsk-cb-mic-btn--processing{color:var(--hsk-primary,#ff6a33) !important;opacity:.85}.hsk-cb-user-imgs{display:grid;gap:2px;width:fit-content;max-width:min(78%,320px);margin-bottom:4px;margin-left:auto;border-radius:18px 18px 4px 18px;overflow:hidden;box-shadow:0 4px 16px rgba(0,0,0,.16)}.hsk-cb-user-imgs[data-count="1"]{grid-template-columns:1fr}.hsk-cb-user-imgs[data-count="2"]{grid-template-columns:1fr 1fr}.hsk-cb-user-imgs[data-count="3"]{grid-template-columns:2fr 1fr;grid-template-rows:1fr 1fr}.hsk-cb-user-imgs[data-count="3"]>:first-child{grid-row:span 2}.hsk-cb-user-imgs[data-count="4"]{grid-template-columns:1fr 1fr}.hsk-cb-user-img-cell{position:relative;display:block;padding:0;border:none;background:none;cursor:pointer;overflow:hidden;min-width:0;line-height:0}.hsk-cb-user-imgs[data-count="1"] .hsk-cb-user-img-cell{aspect-ratio:auto}.hsk-cb-user-imgs:not([data-count="1"]) .hsk-cb-user-img-cell{aspect-ratio:1}.hsk-cb-user-img-more{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.45);color:#fff;font-size:20px;font-weight:600;line-height:1}.hsk-cb-user-img-thumb{width:100%;height:100%;object-fit:cover;display:block;cursor:pointer}.hsk-cb-user-imgs[data-count="1"] .hsk-cb-user-img-thumb{height:auto;max-height:300px;object-fit:contain}.hsk-cb-user-img-cell:hover .hsk-cb-user-img-thumb{filter:brightness(.93)}.hsk-cb-error{display:block;width:fit-content;max-width:min(560px,100%);margin:10px auto 8px;padding:10px 14px;border-radius:10px;background:rgba(239,68,68,.08);border:1px solid rgba(239,68,68,.2);color:#ef4444;font-size:13px;line-height:1.5;font-family:var(--hsk-font);text-align:center}.hsk-kiku-badge{display:inline-block;font-size:var(--hsk-font-size,16px);font-family:var(--hsk-font);font-weight:600;background:rgba(255,255,255,.22);border:1px solid rgba(255,255,255,.35);color:#ffffff;padding:1px 7px;border-radius:6px;margin-inline-end:6px}.hsk-cb-memory-pill{display:inline-flex;align-items:center;gap:10px;align-self:flex-start;margin:12px 0 6px 0;padding:12px 22px;font-size:15px;font-weight:600;text-decoration:none;color:#ffffff;background:linear-gradient(135deg,#007aff 0,#0056b3 100%);border:none;border-radius:18px 18px 18px 4px !important;box-shadow:0 4px 16px -2px rgba(0,122,255,.38),inset 0 1px 0 rgba(255,255,255,.28);transition:transform .18s cubic-bezier(.34,1.56,.64,1),opacity .15s,box-shadow .18s ease;cursor:pointer}.hsk-cb-memory-pill:hover{opacity:.96;transform:translateY(-1px) scale(1.02);box-shadow:0 6px 20px rgba(0,122,255,.48)}.hsk-cb-think{position:relative;z-index:2;margin-bottom:-11px;margin-inline-start:12px;font-size:14px;font-family:var(--hsk-font)}.hsk-cb-think-head{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 11px;border:none;border-radius:999px;background:var(--hsk-chat-ai-bg,#eeeef0);box-shadow:0 0 0 3px var(--hsk-chat-bg,#ffffff),0 1px 3px rgba(0,0,0,.13);font-family:var(--hsk-font);font-size:12px;font-weight:600;color:var(--hsk-chat-muted,#6b7280);cursor:pointer;user-select:none;line-height:28px}.hsk-cb-think-head:hover{color:var(--hsk-chat-text,#111827)}.hsk-cb-think-head--static{cursor:default}.hsk-cb-think-head--static:hover{color:var(--hsk-chat-muted,#6b7280)}.hsk-cb-think-spin{animation:hsk-think-spin 3s linear infinite}@keyframes hsk-think-spin{to{transform:rotate(360deg)}}.hsk-cb-think-chevron{font-size:9px;transition:transform .12s}.hsk-cb-think-chevron--open{transform:rotate(90deg)}.hsk-cb-think-body{margin-top:6px;padding:8px 12px;border-left:2px solid var(--hsk-chat-border,rgba(128,128,128,.25));color:var(--hsk-chat-muted,#4b5563);white-space:pre-wrap;line-height:1.5;font-family:var(--hsk-font);font-size:14px}.hsk-cb-stopped{display:flex;flex-direction:column;align-items:start;gap:8px;margin:10px 0 14px}.hsk-cb-stopped--empty{align-items:center;text-align:center;margin:22px auto 18px}.hsk-cb-stopped--empty .hsk-cb-stopped-label{text-align:center}.hsk-cb-stopped-dots{display:flex;gap:5px;margin-bottom:2px}.hsk-cb-stopped-dots i{width:5px;height:5px;border-radius:50%;background:var(--hsk-chat-muted,#888);opacity:.4}.hsk-cb-stopped-label{font-size:13px;line-height:1.5;color:var(--hsk-chat-muted,#888);font-family:var(--hsk-font);text-align:start}.hsk-cb-continue{display:inline-flex;align-items:center;gap:7px;padding:7px 14px;font-size:13px;font-weight:500;font-family:var(--hsk-font);color:var(--hsk-chat-text,#111);background:var(--hsk-chat-source-bg,rgba(0,0,0,.04));border:1px solid transparent;border-radius:999px;cursor:pointer;transition:border-color .15s,color .15s,background .15s}.hsk-cb-continue:hover{border-color:var(--hsk-primary);color:var(--hsk-primary);background:transparent}.hsk-cb-continue svg{flex:none}[dir="rtl"] .hsk-cb-continue svg{transform:scaleX(-1)}@media (prefers-color-scheme:dark){.hsk-cb-continue{background:rgba(255,255,255,.06);color:#f0efed}.hsk-cb-continue:hover{background:transparent}}.hsk-sb-wrap{--hsk-bg:#ffffff;--hsk-border:#f1f3f4;--hsk-text:#1f1f1f;--hsk-muted:#5f6368;--hsk-hover:#f8f9fa;--hsk-drop-shadow:0 8px 30px rgba(0,0,0,.06);--hsk-primary:var(--chat-primary-color,#ff6a33);position:relative;width:100%;font-family:inherit}@media (prefers-color-scheme:dark){.hsk-sb-wrap{--hsk-bg:#0a0a0a;--hsk-border:#202124;--hsk-text:#e8eaed;--hsk-muted:#888;--hsk-hover:#1a1a1b;--hsk-drop-shadow:0 12px 40px rgba(0,0,0,.4)}}.hsk-sb-input{width:100%;padding:10px 16px 10px 40px;font-size:14px;border-radius:var(--hsk-border-radius,0);border:1.5px solid var(--hsk-border);outline:none;box-sizing:border-box;background:var(--hsk-bg);color:var(--hsk-text);transition:border-color .15s,box-shadow .15s;font-family:inherit}.hsk-sb-input::placeholder{color:var(--hsk-muted)}.hsk-sb-input:focus{border-color:var(--hsk-primary);box-shadow:0 0 0 3px rgba(255,106,51,.12)}.hsk-sb-icon{position:absolute;inset-inline-start:14px;top:50%;transform:translateY(-50%);color:var(--hsk-muted);pointer-events:none;display:flex;align-items:center}.hsk-sb-drop{position:absolute;top:calc(100%+6px);left:0;right:0;background:var(--hsk-bg);border:1px solid var(--hsk-border);border-radius:var(--hsk-border-radius,0);box-shadow:var(--hsk-drop-shadow);z-index:9999;overflow:hidden;padding:6px 0}.hsk-sb-row{display:flex;align-items:center;gap:12px;padding:9px 16px;cursor:pointer;transition:background .1s}.hsk-sb-row:hover{background:var(--hsk-hover)}.hsk-sb-row-icon{color:var(--hsk-muted);flex-shrink:0;display:flex;align-items:center}.hsk-sb-row-thumb{width:38px;height:38px;flex-shrink:0;display:flex;align-items:center;justify-content:center;color:var(--hsk-muted);background:var(--hsk-hover);border-radius:var(--hsk-border-radius,0);overflow:hidden}.hsk-sb-row-thumb img{width:100%;height:100%;object-fit:cover;display:block}.hsk-sb-row-body{flex:1;min-width:0}.hsk-sb-row-title{font-size:13px;font-weight:500;color:var(--hsk-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.hsk-sb-row-sub{font-size:11px;color:var(--hsk-muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hsk-sb-empty{padding:14px 16px;font-size:13px;color:var(--hsk-muted)}.hsk-sb-loading-bar{height:2px;background:linear-gradient(90deg,transparent,var(--hsk-primary),transparent);background-size:200% 100%;animation:hsk-sweep .9s linear infinite;position:absolute;top:0;left:0;right:0}@keyframes hsk-sweep{0%{background-position:200% 0}100%{background-position:-200% 0}}.hsk-sb-fade{animation:hsk-fin .1s ease-out both}@keyframes hsk-fin{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}.hsk-sb-skeleton-row{display:flex;align-items:center;gap:12px;padding:9px 16px}.hsk-sb-skeleton-icon{width:38px;height:38px;background:var(--hsk-hover,rgba(0,0,0,.05));border-radius:var(--hsk-border-radius,0);flex-shrink:0;animation:hsk-pulse 1.5s ease-in-out infinite}.hsk-sb-skeleton-text1{height:12px;background:var(--hsk-hover,rgba(0,0,0,.05));border-radius:3px;width:60%;animation:hsk-pulse 1.5s ease-in-out infinite}.hsk-sb-skeleton-text2{height:8px;background:var(--hsk-hover,rgba(0,0,0,.05));border-radius:2px;width:35%;margin-top:5px;animation:hsk-pulse 1.5s ease-in-out infinite}@keyframes hsk-pulse{0%,100%{opacity:.6}50%{opacity:1}}.hsk-sp-btn{--hsk-primary:var(--chat-primary-color,#ff6a33);display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--hsk-border-radius,0);border:1px solid var(--hsk-sp-border,rgba(255,106,51,.35));background:var(--hsk-sp-bg,rgba(255,106,51,.08));color:var(--hsk-primary);cursor:pointer;font-size:15px;line-height:1;transition:background .15s,border-color .15s,transform .12s;flex-shrink:0;padding:0}.hsk-sp-btn:hover{background:rgba(255,106,51,.18);border-color:rgba(255,106,51,.7);transform:scale(1.1)}.hsk-sp-btn:active{transform:scale(.92)}.hsk-sp-backdrop{position:fixed;inset:0;width:100vw;height:100vh;min-height:100dvh;z-index:2147483647 !important;display:flex;align-items:center;justify-content:center;padding:24px;animation:hsk-bd-in .2s ease-out both;background:var(--hsk-chat-bg,#ffffff) !important;box-sizing:border-box}@keyframes hsk-bd-in{from{opacity:0}to{opacity:1}}.hsk-sp-card{--hsk-primary:var(--chat-primary-color,#ff6a33);width:100%;max-width:600px;border-radius:var(--hsk-border-radius,0);overflow:hidden;animation:hsk-card-in .24s cubic-bezier(.34,1.36,.64,1) both;flex-shrink:0;background:var(--hsk-modal-card-bg,#ffffff);border:1px solid var(--hsk-modal-card-border,#f1f3f4);box-shadow:0 32px 80px rgba(0,0,0,.08),0 2px 8px rgba(0,0,0,.04);display:flex;flex-direction:column}.hsk-sp-card.hsk-sp-fullscreen{max-width:1000px;width:90vw;height:85vh;max-height:800px}@media (max-width:768px){.hsk-sp-backdrop{padding:0}.hsk-sp-card.hsk-sp-fullscreen{width:100vw;height:100vh;height:100dvh;max-height:100vh;max-height:100dvh;border:none;border-radius:0}}@keyframes hsk-card-in{from{opacity:0;transform:scale(.96) translateY(-12px)}to{opacity:1;transform:scale(1) translateY(0)}}.hsk-sp-header{display:flex;align-items:center;gap:10px;padding:18px 20px 14px;border-bottom:1px solid var(--hsk-modal-divide,#f1f3f4);flex-shrink:0}.hsk-sp-header-icon{font-size:18px;color:var(--hsk-primary);flex-shrink:0;display:flex;align-items:center}.hsk-sp-header-body{flex:1;min-width:0}.hsk-sp-header-title{font-size:14px;font-weight:600;color:var(--hsk-modal-text,#1f1f1f);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hsk-sp-header-sub{font-size:11px;color:var(--hsk-modal-muted,#5f6368);margin-top:2px}.hsk-sp-close{width:30px;height:30px;border-radius:var(--hsk-border-radius,0);border:1px solid var(--hsk-modal-divide,#f1f3f4);background:none;color:var(--hsk-modal-muted,#5f6368);cursor:pointer;font-size:18px;display:flex;align-items:center;justify-content:center;transition:all .15s;flex-shrink:0}.hsk-sp-close:hover{border-color:var(--hsk-primary);color:var(--hsk-primary)}.hsk-sp-bar{height:2px;background:linear-gradient(90deg,transparent 0,var(--hsk-primary) 40%,#ffaa80 60%,transparent 100%);background-size:200% 100%;animation:hsk-bar .9s linear infinite;flex-shrink:0}@keyframes hsk-bar{0%{background-position:200% 0}100%{background-position:-200% 0}}.hsk-sp-body{display:flex;flex:1;overflow:hidden}.hsk-sp-details-pane{flex:1;overflow-y:auto;padding:24px;border-right:1px solid var(--hsk-modal-divide,#f1f3f4);display:flex;flex-direction:column;gap:20px}.hsk-sp-chat-pane{flex:1.2;display:flex;flex-direction:column;background:var(--hsk-chat-bg,#ffffff)}.hsk-sp-product-profile{display:flex;gap:20px}@media (max-width:480px){.hsk-sp-product-profile{flex-direction:column}}.hsk-sp-details-imgwrap{width:140px;height:140px;flex-shrink:0;border:1px solid var(--hsk-modal-divide,#f1f3f4);background:#ffffff;display:flex;align-items:center;justify-content:center;padding:8px;border-radius:var(--hsk-border-radius,0)}.hsk-sp-details-imgwrap img{max-width:100%;max-height:100%;object-fit:contain}.hsk-sp-details-meta{flex:1;display:flex;flex-direction:column;gap:6px}.hsk-sp-details-name{font-size:20px;font-weight:700;color:var(--hsk-modal-text,#1f1f1f);margin:0;line-height:1.3}.hsk-sp-details-desc{margin-top:12px}.hsk-sp-details-desc h4{font-size:13px;font-weight:600;color:var(--hsk-modal-text,#1f1f1f);margin:0 0 4px 0}.hsk-sp-details-desc p{font-size:13px;line-height:1.5;color:var(--hsk-modal-muted,#5f6368);margin:0}.hsk-sp-similar-section{border-top:1px solid var(--hsk-modal-divide,#f1f3f4);padding-top:20px}.hsk-sp-similar-section h3{font-size:14px;font-weight:600;color:var(--hsk-modal-text,#1f1f1f);margin:0 0 12px 0}.hsk-sp-results{padding:10px 0;display:flex;flex-direction:row;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;padding-bottom:8px}.hsk-sp-empty{padding:40px;text-align:center;font-size:13px;color:var(--hsk-modal-muted,#999)}.hsk-sp-item{display:flex;flex-direction:column;gap:10px;padding:12px;border-radius:var(--hsk-border-radius,0);border:1px solid var(--hsk-modal-item-border,#f1f3f4);background:var(--hsk-modal-item-bg,#f8f9fa);animation:hsk-toast-up .28s cubic-bezier(.22,.68,0,1.2) both;overflow:hidden;flex:0 0 170px;scroll-snap-align:start}@keyframes hsk-toast-up{from{opacity:0;transform:translateY(18px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}.hsk-sp-img-wrap{width:100%;height:120px;border-radius:var(--hsk-border-radius,0);background:#fff;border:1px solid var(--hsk-modal-divide,#f1f3f4);flex-shrink:0;overflow:hidden;display:flex;align-items:center;justify-content:center;padding:6px}.hsk-sp-img-wrap img{max-width:100%;max-height:100%;object-fit:contain}.hsk-sp-img-placeholder{font-size:26px}.hsk-sp-item-body{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:space-between;gap:6px}.hsk-sp-item-name{font-size:13px;font-weight:600;color:var(--hsk-modal-text,#1f1f1f);line-height:1.35;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.hsk-sp-item-cat{font-size:11px;font-weight:600;color:var(--hsk-primary);text-transform:uppercase;letter-spacing:.05em}.hsk-sp-item-price-row{display:flex;align-items:baseline;gap:4px;margin-top:2px;flex-wrap:wrap}.hsk-sp-item-price{font-size:15px;font-weight:700;color:var(--hsk-modal-text,#1f1f1f)}.hsk-sp-item-currency{font-size:11px;color:var(--hsk-modal-muted,#5f6368)}.hsk-sp-actions{display:flex;gap:6px;margin-top:auto}.hsk-sp-action{flex:1;padding:6px 8px;border-radius:var(--hsk-border-radius,0);font-size:11px;font-weight:600;cursor:pointer;border:1px solid transparent;transition:all .15s;text-align:center;font-family:inherit}.hsk-sp-action-primary{background:var(--hsk-primary);color:#fff;border-color:var(--hsk-primary)}.hsk-sp-action-primary:hover{opacity:.88}.hsk-sp-action-secondary{background:var(--hsk-action-sec-bg,#f1f3f4);color:var(--hsk-modal-muted,#5f6368);border-color:var(--hsk-modal-divide,#f1f3f4)}.hsk-sp-action-secondary:hover{background:var(--hsk-action-sec-bg-hover,#e8eaed);color:var(--hsk-modal-text,#1f1f1f)}.hsk-sp-footer{padding:12px 20px;border-top:1px solid var(--hsk-modal-divide,#f1f3f4);display:flex;align-items:center;gap:8px;flex-shrink:0}.hsk-sp-badge{font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--hsk-primary);background:rgba(255,106,51,.1);border:1px solid rgba(255,106,51,.25);padding:2px 8px;border-radius:var(--hsk-border-radius,0)}.hsk-sp-esc{font-size:11px;color:var(--hsk-modal-muted,#5f6368);margin-inline-start:auto}@media (max-width:768px){.hsk-cb-overlay{--hsk-font-size:var(--hsk-mobile-font-size,14px) !important;position:fixed !important;inset:0 !important;top:0 !important;left:0 !important;right:0 !important;width:100vw !important;height:100% !important;height:var(--hsk-vvh,100dvh) !important;min-height:0 !important;z-index:2147483647 !important;display:flex !important;flex-direction:column !important;overflow:hidden !important;overscroll-behavior:contain !important;background:var(--hsk-chat-bg,#0a0a0a) !important;box-sizing:border-box !important}.hsk-cb-panel{position:relative !important;height:100% !important;width:100% !important;max-width:100% !important;margin:0 !important;display:flex !important;flex-direction:column !important;overflow:hidden !important;border-radius:0 !important;background:var(--hsk-chat-bg,#0a0a0a) !important;box-sizing:border-box !important}.hsk-cb-main{flex:1 1 auto !important;height:100% !important;min-height:0 !important;display:flex !important;flex-direction:column !important;justify-content:space-between !important;overflow:hidden !important;background:var(--hsk-chat-bg,#0a0a0a) !important;box-sizing:border-box !important}.hsk-cb-topbar{padding:14px 14px 8px !important}.hsk-cb-msgs{flex:1 1 auto !important;min-height:0 !important;overflow-y:auto !important;-webkit-overflow-scrolling:touch !important;padding:10px 14px 0 !important}.hsk-cb-empty{flex:1 1 auto !important;min-height:0 !important;justify-content:center !important;padding:16px 4px !important}.hsk-cb-input-box{grid-template-columns:auto 1fr auto auto}.hsk-cb-input-box>.hsk-cb-attach-btn,.hsk-cb-input-box>.hsk-cb-voice-mode-btn{display:none}.hsk-cb-input-box>.hsk-cb-field{grid-column:2}.hsk-cb-input-box>.hsk-cb-mic-btn{grid-column:3}.hsk-cb-input-box>.hsk-cb-send,.hsk-cb-input-box>.hsk-chat-send{grid-column:4}.hsk-cb-tools-toggle{display:flex;grid-column:1;grid-row:1;width:36px;height:36px;align-items:center;justify-content:center;flex-shrink:0;padding:0;border:none;border-radius:12px;background:var(--hsk-chat-subtle,rgba(0,0,0,.045));color:var(--hsk-chat-muted,#6b7280);cursor:pointer;transition:transform .26s cubic-bezier(.34,1.56,.64,1),background-color .2s ease}.hsk-cb-tools-toggle--open{transform:rotate(45deg);background:var(--hsk-chat-divide,rgba(0,0,0,.09))}.hsk-cb-toolsheet-wrap,.hsk-cb-toolsheet-scrim{display:block}.hsk-cb-toolsheet-item{display:flex}.hsk-cb-input-box[data-expanded="true"]>.hsk-cb-tools-toggle{grid-row:2}.hsk-cb-ai-msg--inline{display:block !important;padding-inline-end:34px}.hsk-cb-hello-avatar{display:none !important}.hsk-cb-hello-wrap{align-items:center !important;text-align:center !important;gap:3px !important;max-width:30ch;margin-inline:auto}.hsk-cb-hello{font-size:21px !important;font-weight:600 !important;letter-spacing:-.015em;color:var(--hsk-chat-muted,#8b8b8f) !important;text-align:center !important}.hsk-cb-hello-lead,.hsk-cb-hello-ask{font-size:14px !important;font-weight:400 !important;text-align:center !important;color:color-mix(in srgb,var(--hsk-chat-muted,#8b8b8f) 78%,transparent) !important}.hsk-cb-onboarding-head{justify-content:flex-end !important;margin-bottom:12px !important}.hsk-cb-hello{font-size:clamp(26px,6.8vw,36px) !important;font-weight:600 !important;line-height:1.22 !important;letter-spacing:-0.025em !important}.hsk-cb-hello-lead{font-size:15px !important;line-height:1.45 !important;color:var(--hsk-chat-muted,#71717a) !important;margin-top:4px !important}.hsk-cb-doodles{opacity:.92 !important}.hsk-cb-input-wrap{margin-top:auto !important;flex-shrink:0 !important;--hsk-composer-pad-top:8px;--hsk-composer-pad-x:14px;padding:8px 14px !important;padding-bottom:max(12px,env(safe-area-inset-bottom)) !important;background:var(--hsk-chat-bg,#0a0a0a) !important;position:relative !important;z-index:10 !important}.hsk-cb-attach-btn,.hsk-cb-mic-btn,.hsk-cb-send,.hsk-chat-send{width:32px !important;height:32px !important;border-radius:8px !important}.hsk-cb-attach-btn svg,.hsk-cb-mic-btn svg,.hsk-cb-send svg,.hsk-chat-send svg{width:15px !important;height:15px !important}.hsk-sp-backdrop.hsk-sp-mobile-view{position:fixed !important;top:0 !important;left:0 !important;right:0 !important;bottom:auto !important;width:100vw !important;height:var(--hsk-vvh,100dvh) !important;min-height:0 !important;z-index:2147483647 !important;display:flex !important;flex-direction:column !important;overflow:hidden !important;overscroll-behavior:contain !important;background:var(--hsk-chat-bg,#0a0a0a) !important;padding:0 !important;box-sizing:border-box !important}.hsk-sp-card.hsk-sp-mobile-card{position:relative !important;width:100% !important;height:100% !important;max-width:100% !important;margin:0 !important;display:flex !important;flex-direction:column !important;justify-content:space-between !important;overflow:hidden !important;border-radius:0 !important;background:var(--hsk-chat-bg,#0a0a0a) !important;box-sizing:border-box !important}.hsk-sp-body{flex:1 1 auto !important;min-height:0 !important;display:flex !important;flex-direction:column !important;overflow-y:auto !important;-webkit-overflow-scrolling:touch !important;background:var(--hsk-chat-bg,#0a0a0a) !important}.hsk-cb-input-box{padding:10px 10px 10px 14px}.hsk-cb-user-bubble{max-width:85%}.hsk-sp-footer{padding:8px 12px}}@media (prefers-color-scheme:dark){.hsk-sp-backdrop{background:#000000 !important}.hsk-sp-card{--hsk-modal-card-bg:#0a0a0a;--hsk-modal-card-border:#202124;--hsk-modal-text:#e8eaed;--hsk-modal-muted:#888;--hsk-action-sec-bg:#202124;--hsk-action-sec-bg-hover:#2d2f34}.hsk-sp-details-imgwrap{background:#202124;border-color:#202124}.hsk-sp-img-wrap{background:#202124;border-color:#202124}.hsk-sp-chat-pane{background:var(--hsk-chat-bg,#0a0a0a)}}@media (prefers-color-scheme:light){.hsk-sp-backdrop{background:#ffffff !important}}.hsk-table-wrapper{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:12px 0 8px;width:100%;max-width:100%;min-width:0;border-radius:0;padding:0 0 6px;background:transparent;box-shadow:none;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:var(--hsk-chat-divide,rgba(0,0,0,.2)) transparent;cursor:grab;user-select:auto;transition:mask-image .15s ease,-webkit-mask-image .15s ease}.hsk-table-wrapper.is-dragging{cursor:grabbing;user-select:none}.hsk-table-wrapper::-webkit-scrollbar{height:5px}.hsk-table-wrapper::-webkit-scrollbar-track{background:transparent}.hsk-table-wrapper::-webkit-scrollbar-thumb{background:var(--hsk-chat-divide,rgba(0,0,0,.25));border-radius:4px}.hsk-table-wrapper::-webkit-scrollbar-thumb:hover{background:var(--hsk-chat-muted,rgba(0,0,0,.5))}.hsk-cb-ai-text .hsk-markdown-p{margin:0 0 10px}.hsk-cb-ai-text .hsk-markdown-p:last-child{margin-bottom:0}.hsk-cb-ai-text .hsk-markdown-list{margin:0 0 10px;padding-inline-start:1.2em}.hsk-cb-ai-text .hsk-markdown-list:last-child{margin-bottom:0}.hsk-cb-ai-text .hsk-markdown-ul{list-style:disc outside}.hsk-cb-ai-text .hsk-markdown-ol{list-style:decimal outside}.hsk-cb-ai-text .hsk-markdown-list li{margin:0 0 7px;padding-left:3px;line-height:1.5}.hsk-cb-ai-text .hsk-markdown-list li:last-child{margin-bottom:0}.hsk-cb-ai-text .hsk-markdown-list li::marker{color:var(--hsk-primary,#ff6a33)}.hsk-cb-ai-text .hsk-markdown-h1,.hsk-cb-ai-text .hsk-markdown-h2,.hsk-cb-ai-text .hsk-markdown-h3{margin:14px 0 7px;font-weight:650;line-height:1.3;letter-spacing:-0.01em}.hsk-cb-ai-text .hsk-markdown-h1{font-size:1.09em}.hsk-cb-ai-text .hsk-markdown-h2{font-size:1.03em}.hsk-cb-ai-text .hsk-markdown-h3{font-size:1em}.hsk-cb-ai-text>:first-child{margin-top:0}.hsk-markdown-table{width:max-content;min-width:100%;border-collapse:collapse;border-spacing:0;text-align:start;font-size:13px;background:transparent;margin:0;border:none;font-variant-numeric:tabular-nums}.hsk-markdown-table th{padding:8px 16px 6px 16px;vertical-align:bottom;line-height:1.35;font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;color:var(--hsk-chat-muted,rgba(0,0,0,.55));border-bottom:1px solid var(--hsk-chat-divide,rgba(0,0,0,.1));background:transparent !important}.hsk-markdown-table td{padding:8px 16px 8px 16px;vertical-align:middle;line-height:1.45;font-size:13px;white-space:nowrap;color:var(--hsk-chat-text,inherit);border-bottom:.5px solid var(--hsk-chat-divide,rgba(0,0,0,.06));background:transparent !important}.hsk-markdown-table th:first-child,.hsk-markdown-table td:first-child{padding-inline-start:0;font-weight:590;white-space:normal;max-width:280px;min-width:150px;line-height:1.35}.hsk-markdown-table th:last-child,.hsk-markdown-table td:last-child{padding-inline-end:0}.hsk-markdown-table tbody tr:last-child td{border-bottom:none}.hsk-markdown-table td *{color:inherit}.hsk-markdown-table .hsk-markdown-link{display:inline-flex;align-items:center;padding:2px 8px;background-color:var(--hsk-chat-source-bg,rgba(0,0,0,.04));border:1px solid var(--hsk-chat-divide,rgba(0,0,0,.08));color:var(--hsk-primary,#ff6a33);font-size:12px;font-weight:500;border-radius:6px;text-decoration:none !important;margin:2px 0;transition:opacity .15s ease}.hsk-markdown-table .hsk-markdown-link:hover{opacity:.8}@media (prefers-color-scheme:dark){.hsk-markdown-table th{color:var(--hsk-chat-muted,rgba(255,255,255,.5));border-bottom-color:var(--hsk-chat-divide,rgba(255,255,255,.1))}.hsk-markdown-table td{color:var(--hsk-chat-text,#f0efed);border-bottom-color:var(--hsk-chat-divide,rgba(255,255,255,.06))}}.hsk-markdown-link{color:var(--hsk-primary,#ff6a33);text-decoration:underline;text-underline-offset:2px}.hsk-markdown-code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace,var(--hsk-font);font-size:.85em;background-color:rgba(128,128,128,.15);padding:.2em .4em;border-radius:var(--hsk-border-radius,0);color:inherit;word-break:break-word}.hsk-markdown-img-block{margin:8px 0;line-height:0}.hsk-markdown-img{display:block;max-width:100%;width:auto;max-height:220px;border-radius:10px;box-shadow:0 2px 12px rgba(0,0,0,.18);object-fit:cover;background:rgba(128,128,128,.08)}.hsk-sp-item-original-price{font-size:12px;text-decoration:line-through;color:var(--hsk-modal-muted,#888);margin-left:6px}.hsk-sp-item-discount{font-size:11px;font-weight:600;color:#10b981;margin-left:6px}.hsk-sp-item-meta-badges{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}.hsk-sp-meta-badge{font-size:11px;font-weight:500;padding:3px 8px;border-radius:var(--hsk-border-radius,0);background:var(--hsk-modal-item-bg,#f8f9fa);border:1px solid var(--hsk-modal-divide,#f1f3f4);color:var(--hsk-modal-muted,#5f6368)}.hsk-sp-meta-badge-rating{color:#f59e0b;background:rgba(245,158,11,.08);border-color:rgba(245,158,11,.2)}.hsk-sp-meta-badge-avail.in-stock{color:#10b981;background:rgba(16,185,129,.08);border-color:rgba(16,185,129,.2)}.hsk-sp-meta-badge-avail.out-stock{color:#ef4444;background:rgba(239,68,68,.08);border-color:rgba(239,68,68,.2)}.hsk-sp-item-brand{font-size:11px;font-weight:700;color:var(--hsk-modal-muted,#888);text-transform:uppercase;letter-spacing:.05em;margin-bottom:-2px}.hsk-chat-widget::-webkit-scrollbar,.hsk-sp-card::-webkit-scrollbar,.hsk-cb-msgs::-webkit-scrollbar,.hsk-sp-details-pane::-webkit-scrollbar,.hsk-sp-results::-webkit-scrollbar,.hsk-chat-messages::-webkit-scrollbar{width:3px;height:3px}.hsk-chat-widget::-webkit-scrollbar-track,.hsk-sp-card::-webkit-scrollbar-track,.hsk-cb-msgs::-webkit-scrollbar-track,.hsk-sp-details-pane::-webkit-scrollbar-track,.hsk-sp-results::-webkit-scrollbar-track,.hsk-chat-messages::-webkit-scrollbar-track{background:transparent}.hsk-chat-widget::-webkit-scrollbar-thumb,.hsk-sp-card::-webkit-scrollbar-thumb,.hsk-cb-msgs::-webkit-scrollbar-thumb,.hsk-sp-details-pane::-webkit-scrollbar-thumb,.hsk-sp-results::-webkit-scrollbar-thumb,.hsk-chat-messages::-webkit-scrollbar-thumb{background:rgba(0,0,0,.06);border-radius:99px;transition:background .2s ease}.hsk-chat-widget::-webkit-scrollbar-thumb:hover,.hsk-cb-msgs::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.15)}@media (prefers-color-scheme:dark){.hsk-chat-widget::-webkit-scrollbar-thumb,.hsk-sp-card::-webkit-scrollbar-thumb,.hsk-cb-msgs::-webkit-scrollbar-thumb,.hsk-sp-details-pane::-webkit-scrollbar-thumb,.hsk-sp-results::-webkit-scrollbar-thumb,.hsk-chat-messages::-webkit-scrollbar-thumb{background:rgba(255,255,255,.08)}.hsk-chat-widget::-webkit-scrollbar-thumb:hover,.hsk-cb-msgs::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.2)}}.hsk-sp-details-pane,.hsk-sp-results,.hsk-chat-messages{scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.06) transparent}@media (prefers-color-scheme:dark){.hsk-sp-details-pane,.hsk-sp-results,.hsk-chat-messages{scrollbar-color:rgba(255,255,255,.08) transparent}}.hsk-sp-specs-horizontal{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.hsk-sp-spec-item-horizontal{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;background:var(--hsk-modal-item-bg,#f8f9fa);border:1px solid var(--hsk-modal-divide,#f1f3f4);border-radius:var(--hsk-border-radius,0);font-size:11px}.hsk-sp-spec-label-horizontal{font-weight:500;color:var(--hsk-modal-muted,#888)}.hsk-sp-spec-value-horizontal{font-weight:600;color:var(--hsk-modal-text,#1f1f1f)}@media (prefers-color-scheme:dark){.hsk-sp-spec-item-horizontal{background:#1a1a1b;border-color:#202124}}.hsk-cb-phone-form{display:flex;flex-direction:column;gap:8px;margin-top:8px}.hsk-cb-phone-label{font-size:.875rem;color:var(--hsk-chat-text,#111);margin:0}.hsk-cb-phone-input{width:100%;box-sizing:border-box;padding:8px 12px;border:1px solid var(--hsk-chat-divide,rgba(0,0,0,.12));border-radius:var(--hsk-border-radius,0);background:var(--hsk-chat-input-bg,rgba(0,0,0,.04));color:var(--hsk-chat-text,#111);font-size:.9rem;outline:none;transition:border-color .15s}.hsk-cb-phone-input::placeholder{color:var(--hsk-chat-muted,#888)}.hsk-cb-phone-input:focus{border-color:var(--hsk-primary,#ff6a33)}.hsk-cb-phone-submit{align-self:flex-start;padding:8px 16px;border:1px solid var(--hsk-chat-divide,rgba(0,0,0,.12));border-radius:var(--hsk-border-radius,0);background:transparent;color:var(--hsk-chat-text,#111);font-size:.875rem;font-weight:500;cursor:pointer;transition:background .15s,border-color .15s,color .15s}.hsk-cb-phone-submit:hover{border-color:var(--hsk-primary,#ff6a33);color:var(--hsk-primary,#ff6a33)}.hsk-cb-main{flex:1;min-width:0;display:flex;flex-direction:column;height:100%;overflow:hidden}@keyframes hsk-fade-in-up{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.hsk-action-pills{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;animation:hsk-fade-in-up .35s ease .1s both}.hsk-action-pill{display:inline-flex;align-items:center;gap:5px;padding:6px 12px;border-radius:20px;border:1px solid var(--hsk-chat-divide,rgba(0,0,0,.12));background:var(--hsk-pill-bg,rgba(255,255,255,.8));color:var(--hsk-chat-text,#1f1f1f);font-size:12px;font-weight:500;cursor:pointer;font-family:inherit;transition:all .15s;white-space:nowrap;backdrop-filter:blur(4px)}.hsk-action-pill:hover:not(:disabled){border-color:var(--hsk-primary,#ff6a33);background:color-mix(in srgb,var(--hsk-primary,#ff6a33) 8%,transparent);color:var(--hsk-primary,#ff6a33);transform:translateY(-1px);box-shadow:0 2px 8px rgba(0,0,0,.08)}.hsk-action-pill:disabled{opacity:.4;cursor:not-allowed}.hsk-pill-emoji{font-size:13px;line-height:1}@media (prefers-color-scheme:dark){.hsk-action-pill{--hsk-pill-bg:rgba(40,40,42,.85);border-color:rgba(255,255,255,.1);color:var(--hsk-chat-text,#e8eaed)}}[data-hsk-theme="dark"] .hsk-action-pill{--hsk-pill-bg:rgba(40,40,42,.85);border-color:rgba(255,255,255,.1);color:var(--hsk-chat-text,#e8eaed)}.hsk-sp-tabs-mobile{display:none}@media (max-width:768px){.hsk-sp-tabs-mobile{display:flex;border-bottom:1px solid var(--hsk-modal-divide,#f1f3f4);background:var(--hsk-modal-card-bg,#ffffff);flex-shrink:0}.hsk-sp-tab-btn{flex:1;padding:12px 8px;background:none;border:none;border-bottom:2px solid transparent;font-size:13px;font-weight:600;color:var(--hsk-modal-muted,#5f6368);cursor:pointer;text-align:center;transition:all .15s;font-family:inherit}.hsk-sp-tab-btn.active{color:var(--hsk-primary);border-bottom-color:var(--hsk-primary)}.hsk-sp-pane-hidden-mobile{display:none !important}.hsk-sp-details-pane,.hsk-sp-chat-pane{flex:1 !important;height:100% !important;max-height:none !important}}@media (max-width:768px){.hsk-sp-header-title-row{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%}.hsk-sp-header-specs-btn{flex-shrink:0;padding:4px 10px;font-size:11px;font-weight:600;color:var(--hsk-modal-muted,#5f6368);background:var(--hsk-action-sec-bg,#f1f3f4);border:1px solid var(--hsk-modal-divide,#f1f3f4);border-radius:20px;cursor:pointer;font-family:inherit;transition:all .2s ease}.hsk-sp-header-specs-btn:hover{background:var(--hsk-action-sec-bg-hover,#e8eaed);color:var(--hsk-primary)}.hsk-sp-mobile-attachment-deck{margin-top:10px;display:flex;flex-direction:column;gap:10px;width:100%}.hsk-sp-mobile-main-card{display:flex;align-items:center;gap:12px;padding:10px 12px;background:var(--hsk-modal-item-bg,#f8f9fa);border:1px solid var(--hsk-modal-divide,#f1f3f4);border-radius:8px;width:100%;box-sizing:border-box}.hsk-sp-mobile-main-card-img{width:44px;height:44px;flex-shrink:0;border:1px solid var(--hsk-modal-divide,#f1f3f4);border-radius:6px;background:#ffffff;display:flex;align-items:center;justify-content:center;padding:3px;overflow:hidden}.hsk-sp-mobile-main-card-img img{max-width:100%;max-height:100%;object-fit:contain}.hsk-sp-mobile-main-card-info{flex:1;min-width:0}.hsk-sp-mobile-main-card-brand{font-size:9px;font-weight:700;color:var(--hsk-modal-muted,#888);text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hsk-sp-mobile-main-card-name{font-size:13px;font-weight:600;color:var(--hsk-modal-text,#1f1f1f);line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}.hsk-sp-mobile-main-card-price{font-size:12px;font-weight:700;color:var(--hsk-primary);margin-top:1px}.hsk-sp-mobile-main-card-specs-btn{padding:5px 10px;font-size:11px;font-weight:600;color:var(--hsk-primary);background:transparent;border:1px solid var(--hsk-primary);border-radius:4px;cursor:pointer;font-family:inherit;transition:all .2s ease}.hsk-sp-mobile-main-card-specs-btn:hover{background:var(--hsk-primary);color:#ffffff}.hsk-sp-mobile-similar-carousel-inline{display:flex;flex-direction:column;gap:6px;width:100%}.hsk-sp-mobile-similar-carousel-title{font-size:10px;font-weight:700;color:var(--hsk-modal-muted,#888);text-transform:uppercase;letter-spacing:.05em;padding-left:2px}.hsk-sp-mobile-similar-carousel-list{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;padding-bottom:2px}.hsk-sp-mobile-similar-carousel-list::-webkit-scrollbar{display:none}.hsk-sp-mobile-similar-carousel-item{flex:0 0 160px;display:flex;align-items:center;gap:8px;padding:6px 8px;background:var(--hsk-modal-item-bg,#f8f9fa);border:1px solid var(--hsk-modal-divide,#f1f3f4);border-radius:6px;cursor:pointer;box-sizing:border-box;transition:transform .15s ease,border-color .15s ease}.hsk-sp-mobile-similar-carousel-item:hover{border-color:var(--hsk-primary)}.hsk-sp-mobile-similar-carousel-img{width:32px;height:32px;flex-shrink:0;border-radius:4px;background:#ffffff;border:1px solid var(--hsk-modal-divide,#f1f3f4);display:flex;align-items:center;justify-content:center;padding:2px;overflow:hidden}.hsk-sp-mobile-similar-carousel-img img{max-width:100%;max-height:100%;object-fit:contain}.hsk-sp-mobile-similar-carousel-meta{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center}.hsk-sp-mobile-similar-carousel-name{font-size:11px;font-weight:600;color:var(--hsk-modal-text,#1f1f1f);line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hsk-sp-mobile-similar-carousel-price{font-size:10px;font-weight:700;color:var(--hsk-primary);margin-top:1px}.hsk-sp-mobile-chat-container{flex:1;display:flex;flex-direction:column;overflow:hidden;background:var(--hsk-chat-bg,#ffffff)}.hsk-sp-mobile-specs-overlay{position:fixed;inset:0;z-index:100000;background:rgba(0,0,0,.4);display:flex;align-items:flex-end;animation:hsk-bd-in .2s ease-out}.hsk-sp-mobile-specs-drawer{width:100%;background:var(--hsk-modal-card-bg,#ffffff);border-top-left-radius:12px;border-top-right-radius:12px;max-height:70vh;display:flex;flex-direction:column;animation:hsk-drawer-in .25s cubic-bezier(0,0,.2,1);box-shadow:0 -8px 24px rgba(0,0,0,.15)}@keyframes hsk-drawer-in{from{transform:translateY(100%)}to{transform:translateY(0)}}.hsk-sp-mobile-specs-header{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;border-bottom:1px solid var(--hsk-modal-divide,#f1f3f4)}.hsk-sp-mobile-specs-header h3{margin:0;font-size:14px;font-weight:700;color:var(--hsk-modal-text,#1f1f1f)}.hsk-sp-mobile-specs-header button{background:none;border:none;font-size:12px;font-weight:600;color:var(--hsk-primary);cursor:pointer;font-family:inherit}.hsk-sp-mobile-specs-body{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:16px}.hsk-sp-mobile-specs-title{font-size:15px;font-weight:700;color:var(--hsk-modal-text,#1f1f1f);margin:0}.hsk-sp-mobile-specs-desc h5,.hsk-sp-mobile-specs-list h5{margin:0 0 6px 0;font-size:11px;font-weight:700;color:var(--hsk-modal-muted,#888);text-transform:uppercase;letter-spacing:.05em}.hsk-sp-mobile-specs-desc p{margin:0;font-size:13px;line-height:1.5;color:var(--hsk-modal-text,#333)}.hsk-sp-mobile-specs-list{display:flex;flex-direction:column;gap:8px}.hsk-sp-mobile-spec-row{display:flex;justify-content:space-between;padding:8px 10px;background:var(--hsk-modal-item-bg,#f8f9fa);border:1px solid var(--hsk-modal-divide,#f1f3f4);border-radius:var(--hsk-border-radius,4px);font-size:12px;gap:12px}.hsk-sp-mobile-spec-label{color:var(--hsk-modal-muted,#5f6368);font-weight:500}.hsk-sp-mobile-spec-value{color:var(--hsk-modal-text,#1f1f1f);font-weight:600;text-align:right}}@media (prefers-color-scheme:dark){.hsk-sp-mobile-main-card{background:#0a0a0a !important}.hsk-sp-mobile-main-card-img{background:#1a1a1b !important}.hsk-sp-mobile-similar-carousel-item{background:#0a0a0a !important}.hsk-sp-mobile-similar-carousel-img{background:#1a1a1b !important}.hsk-sp-mobile-specs-drawer{background:#0a0a0a !important}.hsk-sp-mobile-spec-row{background:#1a1a1b !important}}.kiku-voice-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;border:none;background:transparent;color:var(--hsk-text-muted,#888);cursor:pointer;transition:color .2s,background .2s;flex-shrink:0}.kiku-voice-btn:hover{background:var(--hsk-hover-bg,rgba(0,0,0,.06));color:var(--hsk-primary,#6c47ff)}.kiku-voice-btn--active{color:#ef4444;background:rgba(239,68,68,.1)}.kiku-voice-btn:disabled{opacity:.4;cursor:not-allowed}.kiku-voice-ripple{position:absolute;inset:-4px;border-radius:50%;border:2px solid #ef4444;animation:kiku-voice-pulse 1.2s ease-out infinite;pointer-events:none}@keyframes kiku-voice-pulse{0%{transform:scale(1);opacity:1}100%{transform:scale(1.6);opacity:0}}.kiku-vs-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;border:none;background:transparent;color:var(--hsk-text-muted,#888);cursor:pointer;transition:color .2s,background .2s;flex-shrink:0}.kiku-vs-btn:hover{background:var(--hsk-hover-bg,rgba(0,0,0,.06));color:var(--hsk-primary,#6c47ff)}.kiku-vs-btn--loading{opacity:.6;pointer-events:none}@keyframes kiku-vs-rotate{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.kiku-vs-spin{animation:kiku-vs-rotate .8s linear infinite}.kiku-style-tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}.kiku-style-tag{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;border-radius:99px;background:var(--hsk-primary-alpha,rgba(108,71,255,.1));color:var(--hsk-primary,#6c47ff);font-size:11px;font-weight:500;white-space:nowrap}.kiku-vs-preview-banner{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--hsk-surface,#f9f9f9);border-radius:10px;margin-bottom:12px;border:1px solid var(--hsk-border,#e5e5e5)}.kiku-vs-preview-img{width:44px;height:44px;object-fit:cover;border-radius:8px;flex-shrink:0}.kiku-vs-preview-info{flex:1;min-width:0}.kiku-vs-preview-label{font-size:11px;color:var(--hsk-text-muted,#888);margin-bottom:2px}.kiku-vs-preview-palette{font-size:13px;font-weight:600;color:var(--hsk-text,#1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kiku-voice-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;border:none;background:transparent;color:var(--hsk-text-muted,#888);cursor:pointer;transition:color .2s,background .2s;flex-shrink:0}.kiku-voice-btn:hover{background:var(--hsk-hover-bg,rgba(0,0,0,.06));color:var(--hsk-primary,#ff6a33)}.kiku-voice-btn--active{color:#ef4444;background:rgba(239,68,68,.1)}.kiku-voice-btn:disabled{opacity:.4;cursor:not-allowed}.kiku-voice-ripple{position:absolute;inset:-4px;border-radius:50%;border:2px solid #ef4444;animation:kiku-voice-pulse 1.2s ease-out infinite;pointer-events:none}@keyframes kiku-voice-pulse{0%{transform:scale(1);opacity:1}100%{transform:scale(1.7);opacity:0}}.kiku-vs-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;border:none;background:transparent;color:var(--hsk-text-muted,#888);cursor:pointer;transition:color .2s,background .2s;flex-shrink:0}.kiku-vs-btn:hover{background:var(--hsk-hover-bg,rgba(0,0,0,.06));color:var(--hsk-primary,#ff6a33)}.kiku-vs-btn--loading{opacity:.6;pointer-events:none}@keyframes kiku-vs-rotate{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.kiku-vs-spin{animation:kiku-vs-rotate .8s linear infinite}.kiku-style-tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}.kiku-style-tag{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;border-radius:99px;background:rgba(255,106,51,.1);color:var(--hsk-primary,#ff6a33);font-size:11px;font-weight:500;white-space:nowrap}.kiku-vs-preview-banner{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--hsk-surface,#f9f9f9);border-radius:10px;margin-bottom:12px;border:1px solid var(--hsk-border,#e5e5e5);animation:hsk-msg-in .22s ease-out both}.kiku-vs-preview-img{width:44px;height:44px;object-fit:cover;border-radius:8px;flex-shrink:0}.kiku-vs-preview-info{flex:1;min-width:0}.kiku-vs-preview-label{font-size:11px;color:var(--hsk-text-muted,#888);margin-bottom:2px}.kiku-vs-preview-palette{font-size:13px;font-weight:600;color:var(--hsk-text,#1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hsk-cb-source--referenced{}.hsk-source-card--referenced{}.hsk-cb-source-ref-badge{position:absolute;top:6px;right:6px;background:#fbbf24;color:#fff;border-radius:50%;width:20px;height:20px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 4px rgba(0,0,0,.15);z-index:10;animation:hsk-badge-pop .3s cubic-bezier(.34,1.56,.64,1) both}@keyframes hsk-badge-pop{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}.hsk-sources-group-title{font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#888;margin:14px 0 8px 0;display:flex;align-items:center;gap:4px}.hsk-kiku-badge{display:inline-flex;align-items:center;gap:3px;font-size:13px;font-weight:700;letter-spacing:-0.01em;color:#ffffff;background:rgba(255,255,255,.28);border:1px solid rgba(255,255,255,.45);padding:2px 8px;border-radius:8px;margin-inline-end:8px;vertical-align:middle;position:relative;top:-1px;box-shadow:0 1px 3px rgba(0,0,0,.12)}.hsk-markdown-img,.hsk-cb-user-img-thumb,.hsk-cb-source .hsk-cb-src-imgwrap img{cursor:zoom-in}.hsk-lightbox{position:fixed;inset:0;z-index:999999;background:rgba(0,0,0,.85);display:flex;align-items:center;justify-content:center;padding:24px;animation:hsk-lightbox-in .15s ease-out both;cursor:zoom-out}@keyframes hsk-lightbox-in{from{opacity:0}to{opacity:1}}.hsk-lightbox-img{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain;border-radius:4px;cursor:default}.hsk-lightbox-close{position:absolute;top:16px;right:16px;width:36px;height:36px;border-radius:50%;border:none;background:rgba(255,255,255,.15);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .15s}.hsk-lightbox-close:hover{background:rgba(255,255,255,.28)}.hsk-cb-viz{margin-top:10px;animation:hsk-msg-in .2s ease-out both}.hsk-cb-viz img,.hsk-cb-viz video{width:100%;max-width:420px;border-radius:8px;display:block}.hsk-cb-viz-disclaimer{max-width:420px;margin-top:4px;font-size:11px;line-height:1.4;color:var(--hsk-chat-muted,#9aa0a6)}.hsk-cb-calc-disclaimer{max-width:440px;margin-top:8px;padding:8px 12px;font-size:11.5px;line-height:1.45;color:var(--hsk-chat-muted,rgba(255,255,255,.65));background:var(--hsk-chat-callout-bg,rgba(255,255,255,.04));border:1px solid var(--hsk-border-subtle,rgba(255,255,255,.08));border-radius:8px}[data-hsk-theme="light"] .hsk-cb-calc-disclaimer{color:rgba(0,0,0,.6);background:rgba(0,0,0,.03);border-color:rgba(0,0,0,.08)}.hsk-cb-stale{max-width:420px;margin-top:8px;padding:8px 10px;border:1px solid rgba(220,38,38,.35);border-left-width:3px;border-radius:6px;background:rgba(220,38,38,.06)}.hsk-cb-stale-title{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#dc2626}.hsk-cb-stale-item{margin-top:3px;font-size:12px;line-height:1.45;color:var(--hsk-chat-text,#202124)}.hsk-cb-stale-reason{color:var(--hsk-chat-muted,#9aa0a6)}.hsk-cb-viz-imgwrap{position:relative;display:inline-block;max-width:100%}.hsk-cb-viz-mark{position:absolute;right:10px;bottom:10px;display:inline-flex;align-items:center;gap:6px;padding:8px 14px;font-size:13px;font-weight:600;color:#fff;background:rgba(0,0,0,.62);backdrop-filter:blur(6px);border:1px solid rgba(255,255,255,.35);border-radius:999px;cursor:pointer;transition:background .15s}.hsk-cb-viz-mark:hover{background:var(--hsk-primary,#ff6a33);border-color:transparent}.hsk-markup-overlay{position:fixed;inset:0;z-index:999999;background:rgba(0,0,0,.88);display:flex;align-items:center;justify-content:center;padding:16px;animation:hsk-lightbox-in .15s ease-out both}.hsk-markup{display:flex;flex-direction:column;gap:12px;width:min(720px,100%);max-height:100%;overflow-y:auto}.hsk-markup-head{display:flex;align-items:center;justify-content:space-between}.hsk-markup-title{font-size:14px;font-weight:600;color:#fff}.hsk-markup-cancel{padding:6px 12px;font-size:12px;font-weight:600;color:#fff;background:rgba(255,255,255,.12);border:none;border-radius:var(--hsk-border-radius,0);cursor:pointer}.hsk-markup-cancel:hover{background:rgba(255,255,255,.22)}.hsk-markup-stage{display:flex;justify-content:center}.hsk-markup-canvas-wrap{position:relative;max-width:100%}.hsk-markup-canvas{display:block;max-width:100%;max-height:60vh;border-radius:var(--hsk-border-radius,0);touch-action:none}.hsk-markup-canvas--pen,.hsk-markup-canvas--eraser{cursor:crosshair}.hsk-markup-canvas--text{cursor:text}.hsk-markup-textinput{position:absolute;transform:translateY(-100%);min-width:140px;padding:4px 6px;font-size:14px;font-weight:600;background:rgba(0,0,0,.55);border:1px dashed rgba(255,255,255,.6);border-radius:4px;outline:none}.hsk-markup-loading,.hsk-markup-error{padding:40px 16px;font-size:13px;color:rgba(255,255,255,.75);text-align:center}.hsk-markup-tools{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.hsk-markup-colors{display:flex;gap:8px}.hsk-markup-color{width:22px;height:22px;border-radius:50%;border:2px solid transparent;cursor:pointer;padding:0}.hsk-markup-color--on{border-color:#fff;transform:scale(1.15)}.hsk-markup-actions{display:flex;gap:6px}.hsk-markup-tool{padding:6px 11px;font-size:12px;font-weight:600;color:#fff;background:rgba(255,255,255,.12);border:none;border-radius:var(--hsk-border-radius,0);cursor:pointer}.hsk-markup-tool:hover:not(:disabled){background:rgba(255,255,255,.22)}.hsk-markup-tool--on{background:var(--hsk-primary,#ff6a33)}.hsk-markup-tool--on:hover:not(:disabled){background:var(--hsk-primary,#ff6a33)}.hsk-markup-tool:disabled{opacity:.4;cursor:default}.hsk-markup-send{display:flex;gap:8px}.hsk-markup-instruction{flex:1;min-width:0;padding:10px 12px;font-size:14px;color:#fff;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.25);border-radius:var(--hsk-border-radius,0);outline:none}.hsk-markup-instruction::placeholder{color:rgba(255,255,255,.5)}.hsk-markup-instruction:focus{border-color:var(--hsk-primary,#ff6a33)}.hsk-markup-go{padding:10px 20px;font-size:13px;font-weight:600;color:#fff;background:var(--hsk-primary,#ff6a33);border:none;border-radius:var(--hsk-border-radius,0);cursor:pointer}.hsk-markup-go:hover:not(:disabled){opacity:.9}.hsk-markup-go:disabled{opacity:.45;cursor:default}.hsk-cb-kimgs{margin-top:10px;display:flex;flex-direction:column;gap:10px;animation:hsk-msg-in .2s ease-out both}.hsk-cb-kimg-grid{display:flex;flex-wrap:wrap;gap:6px}.hsk-cb-kimg{width:132px;height:132px;object-fit:cover;border-radius:8px;cursor:zoom-in;border:1px solid var(--hsk-chat-border,rgba(0,0,0,.08))}.hsk-cb-kimg:only-child{width:100%;max-width:320px;height:auto}.hsk-cb-kimg-caption{margin-top:4px;font-size:11px;line-height:1.4;color:var(--hsk-chat-muted,#9aa0a6)}.hsk-cb-viz--loading{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--hsk-chat-muted,#888);padding:10px 0}.hsk-cb-viz-spinner{width:14px;height:14px;border-radius:50%;border:2px solid var(--hsk-chat-divide,rgba(0,0,0,.15));border-top-color:var(--hsk-primary,#ff6a33);animation:hsk-viz-spin .7s linear infinite}@keyframes hsk-viz-spin{to{transform:rotate(360deg)}}.hsk-cb-panel[data-script="nonlatin"][data-host-font="gap"]{--hsk-font:"Geist",system-ui,-apple-system,'Segoe UI',Roboto,'Noto Sans',sans-serif}.hsk-cb-panel[data-script="nonlatin"],.hsk-cb-panel[data-script="nonlatin"] *{letter-spacing:normal;font-family:var(--hsk-font)}.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-hello,.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-hello-lead,.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-hello-ask,.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-ai-text,.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-user-bubble,.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-hint,.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-chip,.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-topbar-btn,.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-textarea,.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-entlang-opt-title,.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-entlang-opt-note,.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-ai-text .hsk-markdown-list li,.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-ai-text .hsk-markdown-h1,.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-ai-text .hsk-markdown-h2,.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-ai-text .hsk-markdown-h3,.hsk-cb-panel[data-script="nonlatin"] .hsk-markdown-table th,.hsk-cb-panel[data-script="nonlatin"] .hsk-markdown-table td{line-height:1.9}.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-hint{font-size:11px;line-height:16px;bottom:4px}.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-voice-error{font-size:12px;line-height:22px;max-width:30ch}.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-hello{font-size:clamp(20px,3.4vw,26px);line-height:1.5;text-wrap:balance;overflow-wrap:break-word}.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-hello-ask{font-size:15px;line-height:1.75}.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-hello-wrap{max-width:100%;min-width:0}.hsk-cb-panel[data-nastaliq="true"] .hsk-cb-hello,.hsk-cb-panel[data-nastaliq="true"] .hsk-cb-hello-lead,.hsk-cb-panel[data-nastaliq="true"] .hsk-cb-hello-ask,.hsk-cb-panel[data-nastaliq="true"] .hsk-cb-ai-text,.hsk-cb-panel[data-nastaliq="true"] .hsk-cb-user-bubble,.hsk-cb-panel[data-nastaliq="true"] .hsk-cb-hint,.hsk-cb-panel[data-nastaliq="true"] .hsk-cb-chip,.hsk-cb-panel[data-nastaliq="true"] .hsk-cb-topbar-btn,.hsk-cb-panel[data-nastaliq="true"] .hsk-cb-textarea,.hsk-cb-panel[data-nastaliq="true"] .hsk-cb-entlang-opt-title,.hsk-cb-panel[data-nastaliq="true"] .hsk-cb-entlang-opt-note,.hsk-cb-panel[data-nastaliq="true"] .hsk-cb-ai-text .hsk-markdown-list li,.hsk-cb-panel[data-nastaliq="true"] .hsk-cb-ai-text .hsk-markdown-h1,.hsk-cb-panel[data-nastaliq="true"] .hsk-cb-ai-text .hsk-markdown-h2,.hsk-cb-panel[data-nastaliq="true"] .hsk-cb-ai-text .hsk-markdown-h3,.hsk-cb-panel[data-nastaliq="true"] .hsk-markdown-table th,.hsk-cb-panel[data-nastaliq="true"] .hsk-markdown-table td{line-height:2.2}.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-chip{font-size:14px}.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-topbar-btn{height:auto;min-height:34px;padding:5px 14px}.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-field{--hsk-input-line-height:1.9}.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-textarea{min-height:34px}.hsk-cb-panel[data-nastaliq="true"] .hsk-cb-field{--hsk-input-line-height:2.2}.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-user-bubble,.hsk-cb-panel[data-script="nonlatin"] .hsk-cb-ai-text{overflow-wrap:break-word;word-break:normal}.hsk-cb-viz-broken{font-size:13px;color:var(--hsk-chat-muted,#71717a);padding:14px 16px;border:1px dashed var(--hsk-chat-divide,rgba(0,0,0,.12));border-radius:12px}.hsk-msg-audio-btn{background:transparent;border:none;color:#888;cursor:pointer;padding:4px;border-radius:4px;display:inline-flex;align-items:center}.hsk-cb-voice-mode-btn{width:36px;height:36px;display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;background:transparent;border:1px solid transparent;border-radius:12px;color:var(--hsk-chat-muted,#71717a);cursor:pointer;transition:all .2s cubic-bezier(.34,1.56,.64,1);font-family:inherit}.hsk-cb-voice-mode-btn:hover:not(:disabled),.hsk-cb-mic-btn:hover:not(:disabled){border-color:color-mix(in srgb,var(--hsk-primary,#ff6a33) 25%,transparent);color:var(--hsk-primary,#ff6a33);background:color-mix(in srgb,var(--hsk-primary,#ff6a33) 8%,transparent);transform:translateY(-1px)}.hsk-cb-voice-mode-btn:disabled{opacity:.35;cursor:not-allowed}.hsk-cb-voice-mode-btn--active,.hsk-cb-mic-btn--listening{color:var(--hsk-primary,#ff6a33);background:color-mix(in srgb,var(--hsk-primary,#ff6a33) 12%,transparent)}.hsk-cb-mic-btn--processing{color:var(--hsk-primary,#ff6a33);opacity:.7}.hsk-voice-overlay{position:absolute;inset:0;z-index:30;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:clamp(12px,2.2vh,26px);padding:clamp(14px,2.5vh,24px);overflow-y:auto;overscroll-behavior:contain;background:var(--hsk-chat-bg,#ffffff);animation:hsk-voice-in .32s cubic-bezier(.2,.8,.2,1);will-change:opacity;contain:paint}.hsk-voice-overlay::before{content:'';position:absolute;inset:0;background:radial-gradient(42% 26% at 50% 40%,color-mix(in srgb,var(--hsk-primary,#ff6a33) 8%,transparent) 0,transparent 68%);pointer-events:none}.hsk-voice-overlay>*{position:relative}@keyframes hsk-voice-in{from{opacity:0}to{opacity:1}}.hsk-voice-allowance{position:absolute;top:14px;left:14px;display:flex;align-items:center;justify-content:center;min-width:36px;height:36px;padding:0 10px;font-size:12px;font-variant-numeric:tabular-nums;font-weight:600;border:1px solid color-mix(in srgb,var(--hsk-chat-text,#1f1f1f) 14%,transparent);border-radius:999px;color:var(--hsk-chat-muted,#71717a);transition:color .18s ease,border-color .18s ease}.hsk-voice-allowance--low{color:#dc2626;border-color:color-mix(in srgb,#dc2626 40%,transparent)}.hsk-voice-exit{position:absolute;top:14px;right:14px;display:flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;background:transparent;border:1px solid color-mix(in srgb,var(--hsk-chat-text,#1f1f1f) 14%,transparent);border-radius:999px;color:var(--hsk-chat-muted,#71717a);cursor:pointer;transition:color .18s ease,border-color .18s ease}.hsk-voice-exit:hover{color:var(--hsk-chat-text,#1f1f1f);border-color:color-mix(in srgb,var(--hsk-chat-text,#1f1f1f) 32%,transparent)}.hsk-voice-stage{width:min(560px,100%);height:clamp(110px,24vh,240px);flex:none}.hsk-voice-canvas{display:block;width:100%;height:100%}.hsk-voice-controls{display:flex;align-items:center;gap:12px}.hsk-voice-control{display:flex;align-items:center;justify-content:center;width:52px;height:52px;padding:0;background:var(--hsk-surface-2,rgba(255,255,255,.95));border:1px solid color-mix(in srgb,var(--hsk-chat-text,#000000) 10%,transparent);border-radius:999px;color:var(--hsk-chat-text,#1f1f1f);cursor:pointer;box-shadow:0 2px 12px rgba(0,0,0,.08),0 1px 3px rgba(0,0,0,.04);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);transition:color .2s ease,border-color .2s ease,background .2s ease,transform .2s cubic-bezier(.16,1,.3,1),box-shadow .2s ease}.hsk-voice-control:hover{transform:scale(1.06);box-shadow:0 4px 18px rgba(0,0,0,.12)}.hsk-voice-control:active{transform:scale(.92);transition-duration:.08s}.hsk-voice-control--muted{color:var(--hsk-chat-muted,#888888);border-color:color-mix(in srgb,var(--hsk-chat-text,#000000) 12%,transparent);background:color-mix(in srgb,var(--hsk-chat-bg,#ffffff) 85%,transparent);box-shadow:0 1px 4px rgba(0,0,0,.04)}.hsk-voice-control-icon{display:inline-flex;align-items:center;justify-content:center;z-index:2;transition:transform .2s ease}@keyframes hsk-voice-icon-in{from{opacity:0;transform:scale(.6) rotate(-12deg)}to{opacity:1;transform:scale(1) rotate(0deg)}}@keyframes hsk-voice-control-pulse{0%{transform:scale(1);box-shadow:0 0 0 0 color-mix(in srgb,var(--hsk-primary,#ff6a33) 45%,transparent)}40%{transform:scale(1.08);box-shadow:0 0 0 8px color-mix(in srgb,var(--hsk-primary,#ff6a33) 0,transparent)}100%{transform:scale(1);box-shadow:0 0 0 0 transparent}}@media (prefers-reduced-motion:reduce){.hsk-voice-control-icon,.hsk-voice-control--muted{animation:none}}.hsk-voice-caption{display:flex;flex-direction:column;align-items:center;gap:10px;max-width:min(520px,100%);text-align:center}.hsk-voice-phase{font-family:var(--hsk-font);font-size:.72rem;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--hsk-chat-muted,#71717a);transition:color .25s ease}.hsk-voice-phase--listening,.hsk-voice-phase--speaking{color:var(--hsk-primary,#ff6a33)}.hsk-voice-phase--thinking{animation:hsk-voice-breathe 1.6s ease-in-out infinite}@keyframes hsk-voice-breathe{0%,100%{opacity:.45}50%{opacity:1}}.hsk-voice-stage--connecting{opacity:.4;transition:opacity .25s ease}.hsk-voice-connecting{display:flex;align-items:center;gap:7px;font-family:var(--hsk-font);font-size:13px;color:var(--hsk-chat-muted,#8a8f98);animation:hsk-sent-in .2s ease-out both}.hsk-voice-connecting-dot{width:6px;height:6px;border-radius:999px;background:currentColor;animation:hsk-queued-pulse 1s ease-in-out infinite}@media (prefers-reduced-motion:reduce){.hsk-voice-connecting-dot{animation:none;opacity:.7}}.hsk-voice-heard{font-family:var(--hsk-font);font-size:1.05rem;line-height:1.5;color:var(--hsk-chat-text,#1f1f1f)}.hsk-voice-hint-sub{font-family:var(--hsk-font);font-size:14px;color:var(--hsk-chat-muted,#a1a1aa);line-height:1.4;opacity:.85}.hsk-voice-items{display:flex;flex-wrap:wrap;align-items:stretch;justify-content:center;gap:10px;width:min(620px,100%)}.hsk-voice-item{display:flex;flex-direction:column;align-items:flex-start;gap:6px;width:clamp(108px,30vw,132px);padding:8px;text-align:start;background:transparent;border:1px solid color-mix(in srgb,var(--hsk-chat-text,#1f1f1f) 10%,transparent);border-radius:12px;cursor:pointer;font-family:var(--hsk-font);animation:hsk-voice-item-in .34s cubic-bezier(.2,.8,.2,1) both;transition:border-color .18s ease,transform .18s ease}.hsk-voice-item:hover{border-color:color-mix(in srgb,var(--hsk-primary,#ff6a33) 45%,transparent);transform:translateY(-2px)}@keyframes hsk-voice-item-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.hsk-voice-item-img{width:100%;height:clamp(52px,8.5vh,78px);object-fit:cover;border-radius:8px;background:color-mix(in srgb,var(--hsk-chat-text,#1f1f1f) 5%,transparent)}.hsk-voice-item-img--empty{display:flex;align-items:center;justify-content:center;color:color-mix(in srgb,var(--hsk-chat-text,#1f1f1f) 30%,transparent)}.hsk-voice-item-name{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:.78rem;line-height:1.35;color:var(--hsk-chat-text,#1f1f1f)}.hsk-voice-item-price{font-size:.78rem;font-weight:600;color:var(--hsk-primary,#ff6a33)}@media (prefers-reduced-motion:reduce){.hsk-voice-item{animation:none}}.hsk-voice-error{font-family:var(--hsk-font);font-size:.85rem;color:#e5484d;text-align:center}@media (prefers-reduced-motion:reduce){.hsk-voice-overlay,.hsk-voice-phase--thinking{animation:none}}.hsk-cb-listen{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;margin-top:6px;padding:0;background:transparent;border:none;border-radius:999px;color:var(--hsk-chat-muted,#71717a);cursor:pointer;opacity:0;transition:opacity .18s ease,color .18s ease}.hsk-cb-msg-group:hover .hsk-cb-listen,.hsk-cb-listen:focus-visible,.hsk-cb-listen--active{opacity:1}.hsk-cb-listen:hover,.hsk-cb-listen--active{color:var(--hsk-primary,#ff6a33)}.hsk-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.hsk-voice-picker{position:absolute;top:clamp(14px,3vh,28px);left:50%;transform:translateX(-50%);display:flex;gap:8px;flex-wrap:nowrap;justify-content:center;max-width:min(100%,420px);padding:0 56px;z-index:2}.hsk-voice-pill{display:inline-flex;align-items:center;gap:7px;padding:5px 11px;border-radius:999px;border:1px solid rgba(0,0,0,.09);background:rgba(255,255,255,.72);backdrop-filter:blur(8px);font:inherit;font-size:11px;letter-spacing:.01em;color:#5b5b5b;cursor:pointer;transition:background 160ms ease,border-color 160ms ease,color 160ms ease,transform 160ms ease;opacity:0;animation:hsk-voice-pill-in 420ms cubic-bezier(.16,1,.3,1) forwards}.hsk-voice-pill--on{animation:hsk-voice-pill-in 420ms cubic-bezier(.16,1,.3,1) forwards,hsk-voice-pill-pop 260ms ease}@keyframes hsk-voice-pill-in{from{opacity:0;transform:translateY(-6px) scale(.92)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes hsk-voice-pill-pop{0%{transform:scale(1)}40%{transform:scale(1.06)}100%{transform:scale(1)}}@media (prefers-reduced-motion:reduce){.hsk-voice-pill{opacity:1;animation:none}}@media (max-width:520px){.hsk-voice-picker{gap:5px;padding:0 44px}.hsk-voice-pill{padding:5px 8px;gap:4px}}.hsk-voice-pill:hover{background:rgba(255,255,255,.95);border-color:rgba(0,0,0,.16)}.hsk-voice-pill--on:hover{background:#1c1c1c;border-color:#1c1c1c;color:#fff}.hsk-voice-pill--on{background:#1a1a1a;border-color:#1a1a1a;color:#fff}@media (prefers-color-scheme:dark){.hsk-voice-pill{border-color:rgba(255,255,255,.14);background:rgba(30,30,30,.7);color:#cfcfcf}.hsk-voice-pill:hover{background:rgba(45,45,45,.9)}.hsk-voice-pill--on:hover{background:#f2f2f2;border-color:#f2f2f2;color:#141414}.hsk-voice-pill--on{background:#f2f2f2;border-color:#f2f2f2;color:#141414}}@media (max-width:520px){.hsk-cb-input-box{gap:6px;padding:10px 10px 10px 12px}.hsk-cb-attach-btn,.hsk-cb-mic-btn,.hsk-cb-send,.hsk-cb-voice-mode-btn,.hsk-chat-send{width:32px;height:32px;border-radius:10px}.hsk-cb-textarea{flex:1 1 auto;min-width:0;font-size:16px}.hsk-cb-input-box .hsk-cb-listening{display:none}}.hsk-cb-main{position:relative}.hsk-cb-main,.hsk-voice-overlay{--hsk-doodle-ink:31,31,31;--hsk-doodle-tint:255,106,51}@keyframes hsk-doodles-shimmer-in{0%{opacity:0}100%{opacity:.9}}.hsk-cb-doodles{position:absolute;inset:0;width:100%;height:100%;z-index:0;pointer-events:none;opacity:.9;animation:hsk-doodles-shimmer-in .28s cubic-bezier(.16,1,.3,1) both}.hsk-cb-main>*:not(.hsk-cb-doodles){position:relative}@media (prefers-color-scheme:dark){.hsk-cb-main,.hsk-voice-overlay{--hsk-doodle-ink:240,239,237;--hsk-doodle-tint:255,150,110}}[data-hsk-theme="light"] .hsk-cb-main,[data-hsk-theme="light"] .hsk-voice-overlay{--hsk-doodle-ink:31,31,31;--hsk-doodle-tint:255,106,51}[data-hsk-theme="dark"] .hsk-cb-main,[data-hsk-theme="dark"] .hsk-voice-overlay{--hsk-doodle-ink:240,239,237;--hsk-doodle-tint:255,150,110}.hsk-cb-docked-option-price,.hsk-cb-entlang-price,.hsk-cb-src-price,.hsk-kiku-picker-item-price,.hsk-source-price,.hsk-sp-item-discount,.hsk-sp-item-original-price,.hsk-sp-item-price,.hsk-sp-mobile-main-card-price,.hsk-sp-mobile-similar-carousel-price,.hsk-voice-item-price,.hsk-live-cell{font-variant-numeric:tabular-nums}.hsk-live-wrap{margin:8px 0 2px;max-width:min(88%,560px);box-sizing:border-box}.hsk-live-carousel{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-start}.hsk-live-card{flex:0 1 auto;min-width:0;max-width:100%;background:var(--hsk-chat-source-bg,rgba(0,0,0,.035));border:1px solid var(--hsk-chat-divide,rgba(0,0,0,.08));border-radius:14px;padding:10px 12px;box-sizing:border-box;display:flex;flex-direction:column;gap:8px;transition:opacity .2s ease}.hsk-live-card.is-stale{opacity:.75}.hsk-live-card__header{display:flex;align-items:center;justify-content:space-between;gap:8px}.hsk-live-card__status{display:flex;align-items:center;gap:6px;min-width:0}.hsk-live-dot{width:7px;height:7px;border-radius:50%;background:#10b981;flex-shrink:0}@media (prefers-reduced-motion:no-preference){.hsk-live-dot:not(.is-stale){animation:hsk-live-pulse 2s ease-in-out infinite}}.hsk-live-dot.is-stale{background:var(--hsk-chat-muted,#9ca3af)}.hsk-live-card__title{font-size:12px;font-weight:600;color:var(--hsk-chat-text,#111827);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:-0.01em}.hsk-live-card__meta{display:flex;align-items:center;gap:8px;flex-shrink:0}.hsk-live-card__close{font-size:11px;font-weight:500;color:var(--hsk-chat-muted,#6b7280);opacity:.85;white-space:nowrap}.hsk-live-card__age{font-size:11px;font-weight:400;color:var(--hsk-chat-muted,#6b7280);white-space:nowrap;flex-shrink:0}.hsk-live-card__pills{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.hsk-live-pill{display:inline-flex;align-items:center;gap:5px;padding:3px 8px;background:var(--hsk-chat-bg,#ffffff);border:1px solid var(--hsk-chat-divide,rgba(0,0,0,.08));border-radius:8px;font-size:12px;font-variant-numeric:tabular-nums;line-height:1.3;color:var(--hsk-chat-text,#111827);box-shadow:0 1px 2px rgba(0,0,0,.03)}.hsk-live-pill__label{font-weight:500;color:var(--hsk-chat-muted,#6b7280);font-size:11px;text-transform:capitalize}.hsk-live-pill__value{font-weight:650;color:var(--hsk-chat-text,#111827)}@media (prefers-reduced-motion:no-preference){.hsk-live-pill.is-changed{animation:hsk-live-pill-flash 1.2s ease-out}@keyframes hsk-live-pill-flash{0%{background:rgba(16,185,129,.25);border-color:#10b981}100%{background:var(--hsk-chat-bg,#ffffff);border-color:var(--hsk-chat-divide,rgba(0,0,0,.08))}}}@media (max-width:640px){.hsk-cb-source{flex:0 0 128px}.hsk-cb-src-imgwrap,.hsk-cb-src-imgwrap-empty{width:128px;height:128px;font-size:24px}.hsk-cb-sources{gap:10px}.hsk-cb-src-name{font-size:12px;line-height:1.35}.hsk-cb-src-price{font-size:11px;padding:1px 7px;margin-top:4px}.hsk-cb-ai-text,.hsk-live{max-width:100%;width:100%}}@media (max-width:480px){.hsk-cb-source{flex:0 0 114px}.hsk-cb-src-imgwrap,.hsk-cb-src-imgwrap-empty{width:114px;height:114px;font-size:20px}.hsk-cb-sources{gap:8px}.hsk-live{border-radius:12px;padding:2px 0 8px;margin:8px 0 2px}.hsk-live-card{flex:1 1 100%}}.hsk-cb-overlay[data-hsk-theme],[data-hsk-theme] .hsk-cb-overlay{background:var(--hsk-chat-bg) !important;color:var(--hsk-chat-text) !important}[data-hsk-theme] .hsk-cb-panel{background:transparent !important;color:var(--hsk-chat-text) !important}[data-hsk-theme] .hsk-cb-topbar-name{background:var(--hsk-surface-2) !important;color:var(--hsk-name-text,var(--hsk-chat-text)) !important;box-shadow:0 0 0 3px var(--hsk-chat-bg),0 1px 3px rgba(var(--hsk-primary-rgb),.2) !important}[data-hsk-theme] .hsk-cb-think-head{background:var(--hsk-surface-2) !important;color:var(--hsk-think-text) !important;box-shadow:0 0 0 3px var(--hsk-chat-bg),0 1px 3px rgba(var(--hsk-primary-rgb),.2) !important}[data-hsk-theme] .hsk-cb-chip,[data-hsk-theme] .hsk-cb-lang-chip,[data-hsk-theme] .hsk-action-pill{border:var(--hsk-chip-border,none) !important;background:var(--hsk-surface-1) !important;color:var(--hsk-chat-text) !important}[data-hsk-theme] .hsk-cb-chip:hover,[data-hsk-theme] .hsk-cb-lang-chip:hover,[data-hsk-theme] .hsk-action-pill:hover{background:rgba(var(--hsk-primary-rgb),.12) !important;color:var(--hsk-primary) !important}[data-hsk-theme] .hsk-cb-ai-text{background:var(--hsk-bubble-bg) !important;color:var(--hsk-chat-text) !important}[data-hsk-theme] .hsk-cb-ai-text:not(:has(~.hsk-cb-ai-text))::before{background:var(--hsk-bubble-bg) !important}[data-hsk-theme] .hsk-cb-ai-text:not(:has(~.hsk-cb-ai-text))::after{background:var(--hsk-chat-bg) !important}[data-hsk-theme] .hsk-cb-user-bubble--tail::before{background:#007aff !important}[data-hsk-theme] .hsk-cb-user-bubble--tail::after{background:var(--hsk-chat-bg) !important}[data-hsk-theme] .hsk-cb-topbar-title{color:var(--hsk-chat-text) !important}[data-hsk-theme] .hsk-cb-topbar-btn,[data-hsk-theme] .hsk-cb-back{background:var(--hsk-surface-1) !important;color:var(--hsk-chat-muted) !important}[data-hsk-theme] .hsk-cb-input-box{background:transparent !important;border:none !important;border-radius:inherit !important}[data-hsk-theme] .hsk-cb-textarea{color:var(--hsk-chat-text) !important}[data-hsk-theme] .hsk-cb-textarea::placeholder{color:var(--hsk-placeholder) !important}[data-hsk-theme] .hsk-markdown-table th{color:var(--hsk-chat-muted) !important;border-bottom:1px solid var(--hsk-chat-divide) !important}[data-hsk-theme] .hsk-markdown-table td{color:var(--hsk-chat-text) !important;border-bottom:1px solid var(--hsk-chat-divide) !important}[data-hsk-theme] .hsk-cb-kiku-id-pill{background:var(--hsk-surface-1) !important;border:none !important;box-shadow:none !important;color:var(--hsk-chat-muted) !important}[data-hsk-theme] .hsk-cb-kiku-id-pill:hover{color:var(--hsk-primary) !important}[data-hsk-theme] .hsk-cb-theme-2x2-grid,[data-hsk-theme] .hsk-cb-topbar-ooze-menu{background:var(--hsk-surface-2) !important;box-shadow:none !important}[data-hsk-theme] .hsk-cb-theme-squircle-trigger{background:var(--hsk-surface-1) !important;color:var(--hsk-chat-text) !important;border:none !important;box-shadow:none !important}[data-hsk-theme] .hsk-cb-theme-grid-item{background:var(--hsk-grid-bg) !important;color:var(--hsk-chat-muted) !important;border:none !important;box-shadow:none !important}[data-hsk-theme] .hsk-cb-theme-grid-item.is-active{background:var(--hsk-active-bg) !important;color:var(--hsk-on-active) !important;box-shadow:none !important}[data-hsk-theme] .hsk-cb-src-name,[data-hsk-theme] .hsk-source-card__title{color:var(--hsk-src-title) !important;font-weight:650 !important}[data-hsk-theme] .hsk-cb-src-desc,[data-hsk-theme] .hsk-cb-src-detail,[data-hsk-theme] .hsk-source-card__desc{color:var(--hsk-src-desc) !important}[data-hsk-theme] .hsk-cb-src-price{background:var(--hsk-price-bg) !important;color:var(--hsk-price-text) !important;font-weight:700 !important}[data-hsk-theme] .hsk-cb-main,[data-hsk-theme] .hsk-voice-overlay{--hsk-doodle-ink:var(--hsk-ink) !important;--hsk-doodle-tint:var(--hsk-tint) !important}[data-hsk-theme] .hsk-voice-pill{background:var(--hsk-chat-input-bg) !important;border-color:var(--hsk-chat-divide) !important;color:var(--hsk-chat-muted) !important}[data-hsk-theme] .hsk-voice-pill:hover{background:var(--hsk-surface-2) !important;color:var(--hsk-chat-text) !important}[data-hsk-theme] .hsk-voice-pill--on,[data-hsk-theme] .hsk-voice-pill--on:hover{background:var(--hsk-active-bg) !important;border-color:var(--hsk-active-bg) !important;color:var(--hsk-on-active) !important}.hsk-cb-overlay[data-hsk-theme="light"],[data-hsk-theme="light"] .hsk-cb-overlay{--hsk-primary:#ff6a33 !important;--hsk-primary-rgb:255,106,51 !important;--hsk-chat-bg:#ffffff !important;--hsk-chat-text:#1f1f1f !important;--hsk-chat-muted:#5f6368 !important;--hsk-chat-divide:#e5e7eb !important;--hsk-chat-input-bg:#f3f4f6 !important;--hsk-chat-source-bg:#f9fafb !important;--hsk-fade-bg:#ffffff !important;--hsk-goo-fill:#ffffff !important;--hsk-surface-1:rgba(0,0,0,.05) !important;--hsk-surface-2:#f1f3f4 !important;--hsk-bubble-bg:#f3f4f6 !important;--hsk-think-text:#4b5563 !important;--hsk-placeholder:#757575 !important;--hsk-grid-bg:#ffffff !important;--hsk-active-bg:#1f1f1f !important;--hsk-on-active:#ffffff !important;--hsk-src-title:#111827 !important;--hsk-src-desc:#4b5563 !important;--hsk-price-bg:#f3f4f6 !important;--hsk-price-text:#ea580c !important;--hsk-sheet-bg:#f3f4f6 !important;--hsk-chip-border:1px solid rgba(0,0,0,.08) !important;--hsk-ink:55,65,81 !important;--hsk-tint:145,77,47 !important}.hsk-cb-overlay[data-hsk-theme="dark"],[data-hsk-theme="dark"] .hsk-cb-overlay{--hsk-primary:#ff6a33 !important;--hsk-primary-rgb:255,106,51 !important;--hsk-chat-bg:#0a0a0a !important;--hsk-chat-text:#f0efed !important;--hsk-chat-muted:#888888 !important;--hsk-chat-divide:rgba(255,255,255,.08) !important;--hsk-chat-input-bg:#191919 !important;--hsk-chat-source-bg:rgba(255,255,255,.04) !important;--hsk-fade-bg:#0a0a0a !important;--hsk-goo-fill:#1a1a1c !important;--hsk-surface-1:rgba(255,255,255,.06) !important;--hsk-surface-2:#1f1f22 !important;--hsk-bubble-bg:#1f1f22 !important;--hsk-think-text:#a6a6a6 !important;--hsk-placeholder:#555555 !important;--hsk-grid-bg:#1a1a1c !important;--hsk-active-bg:#f0efed !important;--hsk-on-active:#0a0a0a !important;--hsk-src-title:#f9fafb !important;--hsk-src-desc:#9ca3af !important;--hsk-price-bg:rgba(255,255,255,.08) !important;--hsk-price-text:#ff7a45 !important;--hsk-sheet-bg:#1f1f22 !important;--hsk-ink:240,239,237 !important;--hsk-tint:248,195,174 !important}.hsk-cb-overlay[data-hsk-theme="mahogany"],[data-hsk-theme="mahogany"] .hsk-cb-overlay{--hsk-primary:#e07a38 !important;--hsk-primary-rgb:224,122,56 !important;--hsk-chat-bg:#140d09 !important;--hsk-chat-text:#f6eee3 !important;--hsk-chat-muted:#a89485 !important;--hsk-chat-divide:rgba(217,140,85,.18) !important;--hsk-chat-input-bg:#211610 !important;--hsk-chat-source-bg:#1c130d !important;--hsk-fade-bg:#140d09 !important;--hsk-goo-fill:#211610 !important;--hsk-surface-1:#211610 !important;--hsk-surface-2:#2b1c14 !important;--hsk-bubble-bg:#261912 !important;--hsk-think-text:#c4b1a1 !important;--hsk-placeholder:#7a6557 !important;--hsk-grid-bg:#2b1c14 !important;--hsk-active-bg:#e07a38 !important;--hsk-on-active:#ffffff !important;--hsk-src-title:#fdf8f4 !important;--hsk-src-desc:#c4b1a1 !important;--hsk-price-bg:#2b1c14 !important;--hsk-price-text:#f59e0b !important;--hsk-sheet-bg:#211610 !important;--hsk-ink:246,238,227 !important;--hsk-tint:235,180,142 !important}.hsk-cb-overlay[data-hsk-theme="blush"],[data-hsk-theme="blush"] .hsk-cb-overlay{--hsk-primary:#ec4899 !important;--hsk-primary-rgb:236,72,153 !important;--hsk-chat-bg:#fff5f7 !important;--hsk-chat-text:#3d1424 !important;--hsk-chat-muted:#94536d !important;--hsk-chat-divide:rgba(236,72,153,.18) !important;--hsk-chat-input-bg:#ffe4ec !important;--hsk-chat-source-bg:#fff0f4 !important;--hsk-fade-bg:#fff5f7 !important;--hsk-goo-fill:#ffe4ec !important;--hsk-surface-1:#ffe4ec !important;--hsk-surface-2:#fbcfe8 !important;--hsk-bubble-bg:#ffebf1 !important;--hsk-think-text:#831843 !important;--hsk-name-text:#831843 !important;--hsk-placeholder:#b57a91 !important;--hsk-grid-bg:#fff0f4 !important;--hsk-active-bg:#ec4899 !important;--hsk-on-active:#ffffff !important;--hsk-src-title:#2b0c19 !important;--hsk-src-desc:#702648 !important;--hsk-price-bg:#fce7f3 !important;--hsk-price-text:#db2777 !important;--hsk-sheet-bg:#ffe4ec !important;--hsk-sheet-hover:#ffd2e0 !important;--hsk-ink:130,36,75 !important;--hsk-tint:175,38,97 !important}.hsk-cb-overlay[data-hsk-theme="coffee"],[data-hsk-theme="coffee"] .hsk-cb-overlay{--hsk-primary:#a9714b !important;--hsk-primary-rgb:169,113,75 !important;--hsk-chat-bg:#f7f1e8 !important;--hsk-chat-text:#3b2a1d !important;--hsk-chat-muted:#8a7561 !important;--hsk-chat-divide:rgba(169,113,75,.18) !important;--hsk-chat-input-bg:#efe4d6 !important;--hsk-chat-source-bg:#f2eade !important;--hsk-fade-bg:#f7f1e8 !important;--hsk-goo-fill:#efe4d6 !important;--hsk-surface-1:#efe4d6 !important;--hsk-surface-2:#e6d7c4 !important;--hsk-bubble-bg:#f0e7da !important;--hsk-think-text:#6b543f !important;--hsk-placeholder:#a89680 !important;--hsk-grid-bg:#f2eade !important;--hsk-active-bg:#a9714b !important;--hsk-on-active:#ffffff !important;--hsk-src-title:#2a1c11 !important;--hsk-src-desc:#6b543f !important;--hsk-price-bg:#ece0cf !important;--hsk-price-text:#9a5f32 !important;--hsk-sheet-bg:#efe4d6 !important;--hsk-sheet-hover:#e6d7c4 !important;--hsk-ink:59,42,29 !important;--hsk-tint:120,88,62 !important}.hsk-cb-overlay[data-hsk-theme="midnight"],[data-hsk-theme="midnight"] .hsk-cb-overlay{--hsk-primary:#6366f1 !important;--hsk-primary-rgb:99,102,241 !important;--hsk-chat-bg:#0f1420 !important;--hsk-chat-text:#dfe6f5 !important;--hsk-chat-muted:#8792ad !important;--hsk-chat-divide:rgba(99,102,241,.18) !important;--hsk-chat-input-bg:#1a2133 !important;--hsk-chat-source-bg:#161d2c !important;--hsk-fade-bg:#0f1420 !important;--hsk-goo-fill:#1a2133 !important;--hsk-surface-1:#1a2133 !important;--hsk-surface-2:#222b40 !important;--hsk-bubble-bg:#1e2637 !important;--hsk-think-text:#a8b3cc !important;--hsk-placeholder:#5c6780 !important;--hsk-grid-bg:#222b40 !important;--hsk-active-bg:#6366f1 !important;--hsk-on-active:#ffffff !important;--hsk-src-title:#f2f5fc !important;--hsk-src-desc:#a8b3cc !important;--hsk-price-bg:#222b40 !important;--hsk-price-text:#818cf8 !important;--hsk-sheet-bg:#1a2133 !important;--hsk-sheet-hover:#222b40 !important;--hsk-ink:223,230,245 !important;--hsk-tint:150,160,200 !important}.hsk-cb-back-icon{display:inline-flex;transition:transform .22s cubic-bezier(.22,1,.36,1)}.hsk-cb-back:hover:not(:disabled) .hsk-cb-back-icon{transform:translateX(-2px)}.hsk-cb-panel[dir="rtl"] .hsk-cb-back:hover:not(:disabled) .hsk-cb-back-icon{transform:scaleX(-1) translateX(-2px)}.hsk-cb-tools-toggle{transition:transform .26s cubic-bezier(.34,1.56,.64,1),background-color .42s cubic-bezier(.16,1,.3,1),color .42s cubic-bezier(.16,1,.3,1)}.hsk-cb-tools-toggle:hover:not(:disabled){color:var(--hsk-primary,#ff6a33);transform:rotate(90deg)}.hsk-cb-tools-toggle--open:hover:not(:disabled){transform:rotate(135deg)}.hsk-cb-tools-toggle:active:not(:disabled){transform:scale(.9);transition-duration:.1s}.hsk-cb-theme-trigger-icon{display:inline-flex;transition:transform .3s cubic-bezier(.34,1.56,.64,1)}.hsk-cb-theme-squircle-trigger:hover .hsk-cb-theme-trigger-icon{transform:translateY(-1.5px) rotate(-8deg)}.hsk-cb-dot-item:hover:not(.hsk-cb-dot-item--active){background:var(--hsk-chat-muted,rgba(120,120,120,.6));transform:scale(1.35)}.hsk-msg-audio-btn{transition:color .18s ease,transform .22s cubic-bezier(.34,1.56,.64,1)}.hsk-msg-audio-btn:hover:not(:disabled){color:var(--hsk-primary,#ff6a33);transform:scale(1.12)}.hsk-msg-audio-btn:active:not(:disabled){transform:scale(.94);transition-duration:.1s}.hsk-markup-color{transition:transform .22s cubic-bezier(.34,1.56,.64,1),border-color .18s ease}.hsk-markup-color:hover:not(.hsk-markup-color--on){transform:scale(1.22)}.hsk-markup-color--on:hover{transform:scale(1.15)}@media (prefers-reduced-motion:reduce){.hsk-cb-back:hover:not(:disabled) .hsk-cb-back-icon,.hsk-cb-panel[dir="rtl"] .hsk-cb-back:hover:not(:disabled) .hsk-cb-back-icon,.hsk-cb-theme-squircle-trigger:hover .hsk-cb-theme-trigger-icon,.hsk-cb-dot-item:hover:not(.hsk-cb-dot-item--active),.hsk-msg-audio-btn:hover:not(:disabled),.hsk-markup-color:hover:not(.hsk-markup-color--on){transform:none}.hsk-cb-tools-toggle:hover:not(:disabled),.hsk-cb-tools-toggle--open:hover:not(:disabled){transform:none}}.hsk-voice-control{position:relative;isolation:isolate;border-radius:999px}.hsk-voice-control:not(.hsk-voice-control--muted)::before{content:'';position:absolute;inset:-1.5px;border-radius:inherit;background:conic-gradient( from 0deg,#ff3b30,#ff9500,#ffd60a,#34c759,#00c7be,#30b0c7,#007aff,#5856d6,#af52de,#ff2d55,#ff3b30 );-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 2.5px),#000 calc(100% - 2px));mask:radial-gradient(farthest-side,transparent calc(100% - 2.5px),#000 calc(100% - 2px));animation:hsk-apple-siri-spin 3s linear infinite;pointer-events:none;z-index:1}.hsk-voice-control::after{display:none !important}.hsk-voice-control-icon{will-change:transform}.hsk-voice-control:not(.hsk-voice-control--muted) .hsk-voice-control-icon{animation:hsk-apple-siri-mic-pulse 2.2s ease-in-out infinite}@keyframes hsk-apple-siri-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes hsk-apple-siri-breathe{0%,100%{transform:scale(.95);opacity:.55}50%{transform:scale(1.15);opacity:.95}}@keyframes hsk-apple-siri-mic-pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}.hsk-voice-control--muted::before,.hsk-voice-control--muted::after{display:none}@media (prefers-reduced-motion:reduce){.hsk-voice-control:not(:hover):not(.hsk-voice-control--muted) .hsk-voice-control-icon,.hsk-voice-control:hover::before,.hsk-voice-control--muted::before,.hsk-voice-control--muted::after{animation:none}.hsk-voice-control:hover,.hsk-voice-control:hover .hsk-mic-cap{transform:none}}.hsk-cb-voice-error{animation:hsk-error-shake .26s cubic-bezier(.36,.07,.19,.97) both}@keyframes hsk-error-shake{0%,100%{transform:translateX(0)}22%{transform:translateX(-3px)}55%{transform:translateX(2px)}80%{transform:translateX(-1px)}}@media (prefers-reduced-motion:reduce){.hsk-cb-voice-error{animation:none}}.hsk-sun-rays,.hsk-sun-core,.hsk-moon-body,.hsk-wood-layer,.hsk-heart-body,.hsk-steam,.hsk-star-spark,.hsk-check-mark,.hsk-send-tail,.hsk-send-body{transform-box:fill-box;transform-origin:center}.hsk-sun-rays{transform-origin:12px 12px;transition:transform .5s cubic-bezier(.22,1,.36,1)}.hsk-cb-theme-grid-item:hover .hsk-sun-rays,.hsk-cb-theme-squircle-trigger:hover .hsk-sun-rays{transform:rotate(45deg)}.hsk-sun-core{transition:transform .32s cubic-bezier(.34,1.56,.64,1)}.hsk-cb-theme-grid-item:hover .hsk-sun-core,.hsk-cb-theme-squircle-trigger:hover .hsk-sun-core{transform:scale(1.14)}.hsk-moon-body{transition:transform .34s cubic-bezier(.34,1.56,.64,1)}.hsk-cb-theme-grid-item:hover .hsk-moon-body,.hsk-cb-theme-squircle-trigger:hover .hsk-moon-body{transform:rotate(-16deg)}.hsk-wood-layer{transition:transform .34s cubic-bezier(.34,1.56,.64,1)}.hsk-wood-layer{transition-delay:calc(var(--hsk-layer,0) * 45ms)}.hsk-cb-theme-grid-item:hover .hsk-wood-layer,.hsk-cb-theme-squircle-trigger:hover .hsk-wood-layer{transform:translateY(-1.2px)}.hsk-cb-theme-grid-item:hover .hsk-heart-body,.hsk-cb-theme-squircle-trigger:hover .hsk-heart-body{animation:hsk-heartbeat 1.1s ease-in-out infinite}@keyframes hsk-heartbeat{0%,100%{transform:scale(1)}14%{transform:scale(1.18)}28%{transform:scale(1)}42%{transform:scale(1.12)}56%{transform:scale(1)}}.hsk-steam{opacity:.9}.hsk-cb-theme-grid-item:hover .hsk-steam,.hsk-cb-theme-squircle-trigger:hover .hsk-steam{animation:hsk-steam-rise 1.6s ease-out infinite;animation-delay:calc(var(--hsk-steam,0) * 220ms)}@keyframes hsk-steam-rise{0%{transform:translateY(2px) scaleY(.5);opacity:0}35%{opacity:.95}100%{transform:translateY(-3px) scaleY(1.15);opacity:0}}.hsk-cb-theme-grid-item:hover .hsk-star-spark,.hsk-cb-theme-squircle-trigger:hover .hsk-star-spark{animation:hsk-twinkle 1.4s ease-in-out infinite}@keyframes hsk-twinkle{0%,100%{transform:scale(1) rotate(0deg);opacity:.85}50%{transform:scale(1.45) rotate(20deg);opacity:1}}.hsk-check-mark{stroke-dasharray:30;stroke-dashoffset:30;animation:hsk-check-draw .42s cubic-bezier(.65,0,.35,1) forwards}@keyframes hsk-check-draw{to{stroke-dashoffset:0}}.hsk-send-body,.hsk-send-tail{transition:transform .28s cubic-bezier(.22,1,.36,1)}.hsk-send-tail{transition-delay:40ms}.hsk-chat-send:hover:not(:disabled) .hsk-send-body,.hsk-cb-send:hover:not(:disabled) .hsk-send-body{transform:translate(1.5px,-1.5px)}.hsk-chat-send:hover:not(:disabled) .hsk-send-tail,.hsk-cb-send:hover:not(:disabled) .hsk-send-tail{transform:translate(2.5px,-2.5px)}@media (prefers-reduced-motion:reduce){.hsk-sun-rays,.hsk-sun-core,.hsk-moon-body,.hsk-wood-layer,.hsk-send-body,.hsk-send-tail{transition:none;transform:none !important}.hsk-cb-theme-grid-item:hover .hsk-heart-body,.hsk-cb-theme-squircle-trigger:hover .hsk-heart-body,.hsk-cb-theme-grid-item:hover .hsk-steam,.hsk-cb-theme-squircle-trigger:hover .hsk-steam,.hsk-cb-theme-grid-item:hover .hsk-star-spark,.hsk-cb-theme-squircle-trigger:hover .hsk-star-spark{animation:none}.hsk-check-mark{animation:none;stroke-dashoffset:0}}.hsk-cb-send-stage{position:relative;display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%;overflow:visible}.hsk-cb-send-seam{position:absolute;top:50%;left:50%;width:2px;height:15px;border-radius:2px;background:currentColor;transform:translate(-50%,-50%) rotate(38deg) scaleY(0);transform-origin:center;opacity:0;pointer-events:none}.hsk-cb-send-kite{display:inline-flex;transform-origin:center;will-change:transform}.hsk-cb-send:hover:not(:disabled) .hsk-cb-send-kite{transform:translate(1.5px,-1.5px);transition:transform .26s cubic-bezier(.22,1,.36,1)}.hsk-cb-send.is-launching .hsk-cb-send-kite{animation:hsk-kite-tear .55s cubic-bezier(.22,1,.36,1) both}.hsk-cb-send.is-launching .hsk-cb-send-seam{animation:hsk-seam-heal .55s cubic-bezier(.4,0,.3,1) both}@keyframes hsk-kite-tear{0%{transform:translate(0,0) scale(1) rotate(0deg);opacity:1}18%{transform:translate(-1px,2.5px) scale(.92,1.08) rotate(-4deg);opacity:1}45%{transform:translate(3px,-16px) scale(1.2,.8) rotate(6deg);opacity:.95}75%{transform:translate(6px,-38px) scale(1.05,.7) rotate(10deg);opacity:.6}100%{transform:translate(8px,-56px) scale(.6,.4) rotate(12deg);opacity:0}}@keyframes hsk-seam-heal{0%{transform:translate(-50%,-50%) rotate(38deg) scaleY(0);opacity:0}22%{transform:translate(-50%,-50%) rotate(38deg) scaleY(1);opacity:.9}45%{transform:translate(-50%,-50%) rotate(38deg) scaleY(1.3);opacity:.8}72%{transform:translate(-50%,-50%) rotate(38deg) scaleY(.3);opacity:.35}100%{transform:translate(-50%,-50%) rotate(38deg) scaleY(0);opacity:0}}.hsk-kite-wing{transform-box:fill-box;transform-origin:100% 0}.hsk-cb-send:not(:disabled):not(.is-launching) .hsk-kite-wing--far{animation:hsk-wing-beat-far .62s ease-in-out infinite}.hsk-cb-send:not(:disabled):not(.is-launching) .hsk-kite-wing--near{animation:hsk-wing-beat-near .62s ease-in-out .07s infinite}.hsk-cb-send:not(:disabled):not(.is-launching) .hsk-cb-send-kite{animation:hsk-kite-strain 2.4s cubic-bezier(.45,0,.35,1) infinite}.hsk-cb-send:not(:disabled):not(.is-launching) .hsk-cb-send-seam{animation:hsk-seam-strain 2.4s cubic-bezier(.45,0,.35,1) infinite}@keyframes hsk-kite-strain{0%,10%{transform:translate(0,0) scale(1) rotate(0deg)}20%{transform:translate(-1.2px,2px) scale(.94,1.05) rotate(-4deg)}34%{transform:translate(3.5px,-5px) scale(1.16,.86) rotate(8deg)}42%{transform:translate(4.2px,-6px) scale(1.2,.82) rotate(9deg)}50%{transform:translate(2.4px,-3.4px) scale(1.06,.94) rotate(5deg)}64%{transform:translate(-.6px,1.2px) scale(.97,1.03) rotate(-2deg)}78%,100%{transform:translate(0,0) scale(1) rotate(0deg)}}@keyframes hsk-seam-strain{0%,22%{transform:translate(-50%,-50%) rotate(38deg) scaleY(0);opacity:0}34%{transform:translate(-50%,-50%) rotate(38deg) scaleY(.6);opacity:.34}42%{transform:translate(-50%,-50%) rotate(38deg) scaleY(.95);opacity:.5}52%{transform:translate(-50%,-50%) rotate(38deg) scaleY(.55);opacity:.3}66%,100%{transform:translate(-50%,-50%) rotate(38deg) scaleY(0);opacity:0}}@keyframes hsk-wing-beat-far{0%,100%{transform:scaleX(1) skewY(0deg)}50%{transform:scaleX(.86) skewY(-4deg)}}@keyframes hsk-wing-beat-near{0%,100%{transform:scaleX(1) skewY(0deg)}50%{transform:scaleX(1.1) skewY(3deg)}}.hsk-stop-ring{transform-box:fill-box;transform-origin:center;stroke-dasharray:22 38;opacity:.85;animation:hsk-stop-orbit 1.4s linear infinite}.hsk-stop-core{transform-box:fill-box;transform-origin:center;animation:hsk-stop-pulse 1.4s ease-in-out infinite;transition:rx .2s ease,transform .2s cubic-bezier(.34,1.56,.64,1)}.hsk-cb-send--stop:hover .hsk-stop-core{transform:scale(1.16);animation-play-state:paused}.hsk-cb-send--stop:hover .hsk-stop-ring{animation-duration:.7s}@keyframes hsk-stop-orbit{to{transform:rotate(1turn)}}@keyframes hsk-stop-pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(.86);opacity:.75}}@media (prefers-reduced-motion:reduce){.hsk-cb-send.is-launching .hsk-cb-send-kite,.hsk-cb-send.is-launching .hsk-cb-send-seam,.hsk-cb-send:hover:not(:disabled) .hsk-cb-send-kite{animation:none;transform:none}}.hsk-cb-send.is-launching{overflow:visible !important}.hsk-cb-send-sheath{position:absolute;inset:-1px;background:radial-gradient(120% 90% at 32% 22%,rgba(255,255,255,.44) 0,rgba(255,255,255,0) 58%),linear-gradient(150deg,color-mix(in srgb,var(--hsk-primary,#1273e6) 72%,#ffffff) 0,var(--hsk-primary,#1273e6) 46%,color-mix(in srgb,var(--hsk-primary,#1273e6) 74%,#000000) 100%);border-radius:46% 54% 52% 48% / 50% 47% 53% 50%;box-shadow:inset 0 2px 3px rgba(255,255,255,.5),inset 0 -3px 5px color-mix(in srgb,var(--hsk-primary,#1273e6) 30%,rgba(0,0,0,.55)),0 2px 5px rgba(0,0,0,.20),0 7px 16px color-mix(in srgb,var(--hsk-primary,#1273e6) 16%,transparent);transform-origin:58% 62%;pointer-events:none;z-index:1;will-change:transform,border-radius;transition:border-radius .5s cubic-bezier(.34,1.6,.5,1),box-shadow .3s ease}.hsk-cb-send-stage{z-index:2;position:relative}.hsk-cb-send:not(:disabled):not(.is-launching) .hsk-cb-send-sheath{animation:hsk-sheath-press 2.4s cubic-bezier(.35,.8,.3,1) infinite}@keyframes hsk-sheath-press{0%,12%{transform:scale(1);border-radius:46% 54% 52% 48% / 50% 47% 53% 50%}22%{transform:scale(.94,1.08) translate(-1.4px,2.2px);border-radius:52% 48% 44% 56% / 58% 40% 60% 42%}36%{transform:scale(1.14,.87) translate(2.6px,-3.4px) rotate(2deg);border-radius:38% 66% 54% 46% / 40% 62% 38% 60%}46%{transform:scale(1.19,.83) translate(3.6px,-4.6px) rotate(2.8deg);border-radius:34% 72% 56% 44% / 36% 68% 32% 64%}58%{transform:scale(.93,1.09) translate(-1.2px,1.8px) rotate(-1.4deg);border-radius:56% 44% 42% 58% / 60% 38% 62% 40%}70%{transform:scale(1.05,.96) translate(.8px,-1px) rotate(.6deg);border-radius:44% 56% 50% 50% / 46% 54% 46% 54%}80%{transform:scale(.98,1.03);border-radius:50% 50% 48% 52% / 52% 48% 52% 48%}88%,100%{transform:scale(1);border-radius:46% 54% 52% 48% / 50% 47% 53% 50%}}.hsk-cb-send.is-launching .hsk-cb-send-sheath{animation:hsk-sheath-yield .55s cubic-bezier(.3,.7,.25,1) both}@keyframes hsk-sheath-yield{0%{transform:scale(1);border-radius:46% 54% 52% 48% / 50% 47% 53% 50%}20%{transform:scale(.88,1.14) translate(-2px,3.4px);border-radius:56% 44% 40% 60% / 64% 34% 66% 36%}45%{transform:scale(1.34,.68) translate(6px,-10px) rotate(4.6deg);border-radius:24% 86% 62% 38% / 26% 80% 20% 74%}65%{transform:scale(.86,1.16) translate(-2.2px,3.6px) rotate(-2.2deg);border-radius:60% 40% 38% 62% / 68% 30% 70% 32%}82%{transform:scale(1.06,.95) translate(1px,-1px) rotate(.8deg);border-radius:44% 56% 52% 48% / 46% 54% 46% 54%}100%{transform:scale(1);border-radius:46% 54% 52% 48% / 50% 47% 53% 50%}}.hsk-cb-send:disabled .hsk-cb-send-sheath{opacity:0}.hsk-cb-send--stop .hsk-cb-send-sheath{display:none}.hsk-cb-send:active:not(:disabled) .hsk-cb-send-sheath{box-shadow:inset 0 1px 2px rgba(255,255,255,.3),inset 0 -1px 3px color-mix(in srgb,var(--hsk-primary,#1273e6) 24%,rgba(0,0,0,.6)),0 1px 3px rgba(0,0,0,.24)}@media (prefers-reduced-motion:reduce){.hsk-cb-send:not(:disabled):not(.is-launching) .hsk-cb-send-sheath,.hsk-cb-send.is-launching .hsk-cb-send-sheath{animation:none}}.hsk-cb-send:not(.hsk-cb-send--stop):not(:disabled){background:transparent !important;box-shadow:none !important;overflow:visible !important}.hsk-cb-send:not(.hsk-cb-send--stop):not(:disabled):hover{box-shadow:none !important}.hsk-cb-send:not(:disabled):hover .hsk-cb-send-sheath{box-shadow:inset 0 2px 4px rgba(255,255,255,.58),inset 0 -3px 6px color-mix(in srgb,var(--hsk-primary,#1273e6) 28%,rgba(0,0,0,.5)),0 3px 7px rgba(0,0,0,.22),0 10px 22px color-mix(in srgb,var(--hsk-primary,#1273e6) 20%,transparent)}.hsk-cb-terms-sanctuary{display:flex;flex-direction:column;margin:18px 0 22px;width:100%;max-width:520px;text-align:start;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;border:none;border-radius:0;padding:0;box-shadow:none;opacity:0;animation:hsk-terms-delicate-in .5s cubic-bezier(.16,1,.3,1) .05s forwards}@keyframes hsk-terms-delicate-in{0%{opacity:0;transform:translateY(8px)}100%{opacity:1;transform:translateY(0)}}.hsk-cb-terms-item{display:flex;flex-direction:column;gap:4px;opacity:0;animation:hsk-terms-item-in .45s cubic-bezier(.16,1,.3,1) forwards;animation-delay:calc(var(--hsk-row-idx,0) * 60ms+80ms)}@keyframes hsk-terms-item-in{0%{opacity:0;transform:translateY(6px)}100%{opacity:1;transform:translateY(0)}}.hsk-cb-terms-head{display:flex;align-items:baseline;gap:10px}.hsk-cb-terms-numeral{font-family:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;font-style:italic;font-size:11px;font-weight:600;letter-spacing:.12em;color:var(--hsk-primary,#ff6a33);opacity:.85;flex-shrink:0;user-select:none}.hsk-cb-terms-title{margin:0;font-size:14.5px;font-weight:700;letter-spacing:-0.015em;color:var(--hsk-chat-text,#ffffff)}.hsk-cb-terms-desc{margin:0;padding-inline-start:22px;font-size:13px;line-height:1.55;color:var(--hsk-chat-muted,#9ca3af);font-weight:400}.hsk-cb-terms-divider{height:1px;margin:14px 0;background:linear-gradient( 90deg,transparent 0,color-mix(in srgb,var(--hsk-chat-text,#000000) 8%,transparent) 20%,color-mix(in srgb,var(--hsk-chat-text,#000000) 8%,transparent) 80%,transparent 100% )}.hsk-cb-terms-action-wrap{display:flex;justify-content:center;width:100%;margin-top:14px}.hsk-cb-terms-agree-btn{display:inline-flex;align-items:center;justify-content:center;padding:12px 34px;font-size:14px;font-weight:600;border-radius:9999px;border:1px solid var(--hsk-chat-divide,rgba(255,255,255,.08));background:var(--hsk-chat-divide,rgba(255,255,255,.06));color:var(--hsk-chat-muted,rgba(255,255,255,.4));cursor:not-allowed;transition:all .3s cubic-bezier(.16,1,.3,1);letter-spacing:-0.01em}.hsk-cb-terms-agree-btn.is-active{background:#ff6a33;color:#ffffff;border-color:#ff6a33;cursor:pointer;box-shadow:0 4px 14px rgba(255,106,51,.3)}.hsk-cb-terms-agree-btn.is-active:hover{background:#e55620;border-color:#e55620;transform:translateY(-1px);box-shadow:0 6px 18px rgba(255,106,51,.38)}.hsk-cb-terms-agree-btn.is-active:active{transform:translateY(0);box-shadow:0 2px 6px rgba(255,106,51,.2)}@keyframes hsk-theme-morph-in{0%{opacity:0;transform:scale(.92) translateY(4px)}100%{opacity:1;transform:scale(1) translateY(0)}}@keyframes hsk-theme-morph-out{0%{opacity:1;transform:scale(1) translateY(0)}100%{opacity:0;transform:scale(.92) translateY(4px)}}`;var Rn="akropolys-kiku-root",$t=null,Ga=null;function Jc(e){if(typeof CSSStyleSheet<"u"&&"replaceSync"in CSSStyleSheet.prototype)try{let t=new CSSStyleSheet;t.replaceSync(io),e.adoptedStyleSheets=[...e.adoptedStyleSheets,t];return}catch{}let r=document.createElement("style");r.textContent=io,e.appendChild(r)}function Qa(){return typeof document>"u"?null:Ga||($t=document.getElementById(Rn),$t||($t=document.createElement("div"),$t.id=Rn,$t.style.cssText="all: initial;",document.body.appendChild($t)),Ga=$t.shadowRoot??$t.attachShadow({mode:"open"}),Jc(Ga),Ga)}import{useAkropolysContext as wd}from"@akropolys/sdk";var zn=new WeakMap;function so(e){if(!e)return Promise.resolve(null);let r=zn.get(e);if(r)return r;let t=Promise.resolve().then(()=>e.baseFont?.()??null).catch(()=>null);return zn.set(e,t),t}function Pn(e,r,t){if(e&&(so(e),r))try{e.getUIStrings?.(r,t)?.catch?.(()=>{})}catch{}}import{useEffect as An}from"react";var vt=new Map;function Zc(e){let r=e.split("?")[0].split("#")[0].split(".").pop()?.toLowerCase();return r==="woff2"?"woff2":r==="woff"?"woff":r==="otf"?"opentype":r==="ttf"?"truetype":""}function In(e){let r=e.trim();return!r||/["'()\\\s]/.test(r)||/^(javascript|vbscript):/i.test(r)?null:r}var el=/^[Uu]\+[0-9A-Fa-f?]{1,6}(-[0-9A-Fa-f]{1,6})?$/,Ln=e=>{let r=e.split(",").map(t=>t.trim()).filter(Boolean);return r.length===0||!r.every(t=>el.test(t))?"":r.join(", ")},tl=e=>/^\d{3}( \d{3})?$/.test(e)?e:"400";function al(e,r){An(()=>{if(!e||!r||typeof document>"u")return;let t=5381;for(let o=0;o<e.length;o++)t=(t<<5)+t+e.charCodeAt(o)>>>0;let a=`hsk-font-${t.toString(36)}`;if(vt.set(e,(vt.get(e)??0)+1),!document.getElementById(a)){let o=document.createElement("style");o.id=a,o.textContent=r,document.head.appendChild(o)}return()=>{let o=(vt.get(e)??1)-1;if(o>0){vt.set(e,o);return}vt.delete(e),document.getElementById(a)?.remove()}},[e,r])}function En(e){return e.faces.map(r=>{let t=In(r.url);return t?`@font-face{font-family:"${e.family}";font-style:normal;font-weight:${tl(r.weight)};font-display:swap;src:url(${t}) format("woff2");`+(Ln(r.unicodeRange)?`unicode-range:${Ln(r.unicodeRange)};`:"")+"}":""}).join("")}function co(e){let r=e?.faces??[],t=e&&r.length?En(e):"";al(t?`script|${e.family}|${r.map(a=>a.url).join("|")}`:"",t)}async function Dn(e,r=1200){if(typeof document>"u"||!("fonts"in document))return;let t=En(e);if(!t)return;let a=`script|${e.family}|${e.faces.map(n=>n.url).join("|")}`,o=5381;for(let n=0;n<a.length;n++)o=(o<<5)+o+a.charCodeAt(n)>>>0;let i=`hsk-font-${o.toString(36)}`;if(!document.getElementById(i)){let n=document.createElement("style");n.id=i,n.textContent=t,document.head.appendChild(n)}let s=document.fonts,c=e.faces.map(()=>s.load(`16px "${e.family}"`).catch(()=>{}));await Promise.race([Promise.all(c),new Promise(n=>setTimeout(n,r))])}function xr(e){let r=typeof e=="object"&&e?e:void 0,t=r?.fontFamily?.split(",")[0].trim().replace(/^['"]|['"]$/g,"")??"",a=typeof r?.fontUrl=="string"?{normal:r.fontUrl}:r?.fontUrl??{},o=a.normal??"",i=a.bold??"",s=a.variable??"";An(()=>{if(!t||!o&&!i&&!s)return;let c=s?[["100 900",s]]:[["400",o],["700",i]],n=[];for(let[d,k]of c){if(!k)continue;let g=In(k);if(!g)continue;let v=Zc(g);n.push(`@font-face{font-family:"${t}";font-style:normal;font-weight:${d};font-display:swap;src:url(${g})${v?` format("${v}")`:""};}`)}if(n.length===0)return;let l=n.join(""),m=`${t}|${o}|${i}|${s}`,p=5381;for(let d=0;d<m.length;d++)p=(p<<5)+p+m.charCodeAt(d)>>>0;let u=`hsk-host-font-${p.toString(36)}`;if(vt.set(m,(vt.get(m)??0)+1),!document.getElementById(u)){let d=document.createElement("style");d.id=u,d.textContent=l,document.head.appendChild(d)}return()=>{let d=(vt.get(m)??1)-1;if(d>0){vt.set(m,d);return}vt.delete(m),document.getElementById(u)?.remove()}},[t,o,i,s])}import Un from"react";var Xa=[],wr=[{value:"English",native:"English",tag:"en",rtl:!1},{value:"Chinese",native:"\u4E2D\u6587",tag:"zh",rtl:!1},{value:"Spanish",native:"Espa\xF1ol",tag:"es",rtl:!1},{value:"Arabic",native:"\u0627\u0644\u0639\u0631\u0628\u064A\u0629",tag:"ar",rtl:!0},{value:"Hindi",native:"\u0939\u093F\u0928\u094D\u0926\u0940",tag:"hi",rtl:!1},{value:"French",native:"Fran\xE7ais",tag:"fr",rtl:!1},{value:"Swahili",native:"Kiswahili",tag:"sw",rtl:!1},{value:"Portuguese",native:"Portugu\xEAs",tag:"pt",rtl:!1},{value:"Japanese",native:"\u65E5\u672C\u8A9E",tag:"ja",rtl:!1},{value:"Urdu",native:"\u0627\u0631\u062F\u0648",tag:"ur",rtl:!0}];function lo(e){if(!e)return;let r=e.trim();if(!r)return;let t=r.toLowerCase(),a=wr.find(o=>o.value.toLowerCase()===t||o.native.toLowerCase()===t||o.tag===t);return a?a.native:r}function Fn(e){for(let r of e){let t=r.codePointAt(0)??0;if(t>=1424&&t<=2303||t>=64285&&t<=65023||t>=65136&&t<=65279)return!0}return!1}var rl={english:{preparing:"Preparing in English\u2026",changeLang:"Change language",endonym:"English"},swahili:{preparing:"Inatayarisha kwa Kiswahili\u2026",changeLang:"Badilisha lugha",endonym:"Kiswahili"},french:{preparing:"Configuration en fran\xE7ais\u2026",changeLang:"Changer de langue",endonym:"Fran\xE7ais"},spanish:{preparing:"Configurando en espa\xF1ol\u2026",changeLang:"Cambiar idioma",endonym:"Espa\xF1ol"},arabic:{preparing:"\u062C\u0627\u0631\u064D \u0627\u0644\u0625\u0639\u062F\u0627\u062F \u0628\u0627\u0644\u0644\u063A\u0629 \u0627\u0644\u0639\u0631\u0628\u064A\u0629\u2026",changeLang:"\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0644\u063A\u0629",rtl:!0,endonym:"\u0627\u0644\u0639\u0631\u0628\u064A\u0629"},portuguese:{preparing:"Configurando em portugu\xEAs\u2026",changeLang:"Alterar idioma",endonym:"Portugu\xEAs"},hindi:{preparing:"\u0939\u093F\u0928\u094D\u0926\u0940 \u092E\u0947\u0902 \u0924\u0948\u092F\u093E\u0930 \u0915\u093F\u092F\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948\u2026",changeLang:"\u092D\u093E\u0937\u093E \u092C\u0926\u0932\u0947\u0902",endonym:"\u0939\u093F\u0928\u094D\u0926\u0940"},chinese:{preparing:"\u6B63\u5728\u51C6\u5907\u4E2D\u6587\u73AF\u5883\u2026",changeLang:"\u66F4\u6539\u8BED\u8A00",endonym:"\u4E2D\u6587"},urdu:{preparing:"\u0627\u0631\u062F\u0648 \u0645\u06CC\u06BA \u062A\u06CC\u0627\u0631\u06CC \u062C\u0627\u0631\u06CC \u06C1\u06D2\u2026",changeLang:"\u0632\u0628\u0627\u0646 \u062A\u0628\u062F\u06CC\u0644 \u06A9\u0631\u06CC\u06BA",rtl:!0,endonym:"\u0627\u0631\u062F\u0648"},japanese:{preparing:"\u65E5\u672C\u8A9E\u3092\u8A2D\u5B9A\u4E2D\u2026",changeLang:"\u8A00\u8A9E\u3092\u5909\u66F4",endonym:"\u65E5\u672C\u8A9E"},german:{preparing:"Wird auf Deutsch eingerichtet\u2026",changeLang:"Sprache \xE4ndern",endonym:"Deutsch"},italian:{preparing:"Configurazione in italiano\u2026",changeLang:"Cambia lingua",endonym:"Italiano"},russian:{preparing:"\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u043D\u0430 \u0440\u0443\u0441\u0441\u043A\u043E\u043C\u2026",changeLang:"\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u044F\u0437\u044B\u043A",endonym:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"},korean:{preparing:"\uD55C\uAD6D\uC5B4\uB85C \uC124\uC815 \uC911\u2026",changeLang:"\uC5B8\uC5B4 \uBCC0\uACBD",endonym:"\uD55C\uAD6D\uC5B4"},turkish:{preparing:"T\xFCrk\xE7e olarak haz\u0131rlan\u0131yor\u2026",changeLang:"Dili de\u011Fi\u015Ftir",endonym:"T\xFCrk\xE7e"},vietnamese:{preparing:"\u0110ang thi\u1EBFt l\u1EADp b\u1EB1ng Ti\u1EBFng Vi\u1EC7t\u2026",changeLang:"\u0110\u1ED5i ng\xF4n ng\u1EEF",endonym:"Ti\u1EBFng Vi\u1EC7t"},indonesian:{preparing:"Menyiapkan dalam Bahasa Indonesia\u2026",changeLang:"Ubah bahasa",endonym:"Bahasa Indonesia"},polish:{preparing:"Przygotowywanie w j\u0119zyku polskim\u2026",changeLang:"Zmie\u0144 j\u0119zyk",endonym:"Polski"},dutch:{preparing:"Instellen in het Nederlands\u2026",changeLang:"Taal wijzigen",endonym:"Nederlands"},thai:{preparing:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E15\u0E31\u0E49\u0E07\u0E04\u0E48\u0E32\u0E40\u0E1B\u0E47\u0E19\u0E20\u0E32\u0E29\u0E32\u0E44\u0E17\u0E22\u2026",changeLang:"\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E20\u0E32\u0E29\u0E32",endonym:"\u0E44\u0E17\u0E22"},bengali:{preparing:"\u09AC\u09BE\u0982\u09B2\u09BE\u09AF\u09BC \u09AA\u09CD\u09B0\u09B8\u09CD\u09A4\u09C1\u09A4 \u0995\u09B0\u09BE \u09B9\u099A\u09CD\u099B\u09C7\u2026",changeLang:"\u09AD\u09BE\u09B7\u09BE \u09AA\u09B0\u09BF\u09AC\u09B0\u09CD\u09A4\u09A8 \u0995\u09B0\u09C1\u09A8",endonym:"\u09AC\u09BE\u0982\u09B2\u09BE"},tamil:{preparing:"\u0BA4\u0BAE\u0BBF\u0BB4\u0BBF\u0BB2\u0BCD \u0BA4\u0BAF\u0BBE\u0BB0\u0BCD \u0B9A\u0BC6\u0BAF\u0BCD\u0BAF\u0BAA\u0BCD\u0BAA\u0B9F\u0BC1\u0B95\u0BBF\u0BB1\u0BA4\u0BC1\u2026",changeLang:"\u0BAE\u0BCA\u0BB4\u0BBF\u0BAF\u0BC8 \u0BAE\u0BBE\u0BB1\u0BCD\u0BB1\u0BB5\u0BC1\u0BAE\u0BCD",endonym:"\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD"},telugu:{preparing:"\u0C24\u0C46\u0C32\u0C41\u0C17\u0C41\u0C32\u0C4B \u0C38\u0C3F\u0C26\u0C4D\u0C27\u0C02 \u0C1A\u0C47\u0C38\u0C4D\u0C24\u0C4B\u0C02\u0C26\u0C3F\u2026",changeLang:"\u0C2D\u0C3E\u0C37\u0C28\u0C41 \u0C2E\u0C3E\u0C30\u0C4D\u0C1A\u0C02\u0C21\u0C3F",endonym:"\u0C24\u0C46\u0C32\u0C41\u0C17\u0C41"},persian:{preparing:"\u062F\u0631 \u062D\u0627\u0644 \u0622\u0645\u0627\u062F\u0647\u200C\u0633\u0627\u0632\u06CC \u0628\u0647 \u0632\u0628\u0627\u0646 \u0641\u0627\u0631\u0633\u06CC\u2026",changeLang:"\u062A\u063A\u06CC\u06CC\u0631 \u0632\u0628\u0627\u0646",rtl:!0,endonym:"\u0641\u0627\u0631\u0633\u06CC"},farsi:{preparing:"\u062F\u0631 \u062D\u0627\u0644 \u0622\u0645\u0627\u062F\u0647\u200C\u0633\u0627\u0632\u06CC \u0628\u0647 \u0632\u0628\u0627\u0646 \u0641\u0627\u0631\u0633\u06CC\u2026",changeLang:"\u062A\u063A\u06CC\u06CC\u0631 \u0632\u0628\u0627\u0646",rtl:!0,endonym:"\u0641\u0627\u0631\u0633\u06CC"},greek:{preparing:"\u03A1\u03CD\u03B8\u03BC\u03B9\u03C3\u03B7 \u03C3\u03C4\u03B1 \u03B5\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC\u2026",changeLang:"\u0391\u03BB\u03BB\u03B1\u03B3\u03AE \u03B3\u03BB\u03CE\u03C3\u03C3\u03B1\u03C2",endonym:"\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC"},hebrew:{preparing:"\u05DE\u05D2\u05D3\u05D9\u05E8 \u05D1\u05E2\u05D1\u05E8\u05D9\u05EA\u2026",changeLang:"\u05E9\u05E0\u05D4 \u05E9\u05E4\u05D4",rtl:!0,endonym:"\u05E2\u05D1\u05E8\u05D9\u05EA"},swedish:{preparing:"St\xE4ller in p\xE5 svenska\u2026",changeLang:"Byt spr\xE5k",endonym:"Svenska"},kikuyu:{preparing:"G\u0129k\u0169y\u0169 g\u0129g\u0129thondekwo\u2026",changeLang:"Cenjia r\u0169thiomi",endonym:"G\u0129k\u0169y\u0169"},gikuyu:{preparing:"G\u0129k\u0169y\u0169 g\u0129g\u0129thondekwo\u2026",changeLang:"Cenjia r\u0169thiomi",endonym:"G\u0129k\u0169y\u0169"},akan:{preparing:"Y\u025Bresiesie w\u0254 Akan mu\u2026",changeLang:"Sesa kasa",endonym:"Akan"},twi:{preparing:"Y\u025Bresiesie w\u0254 Twi mu\u2026",changeLang:"Sesa kasa",endonym:"Twi"},yoruba:{preparing:"Ngbaradi ni \xC8d\xE8 Yor\xF9b\xE1\u2026",changeLang:"Yi ede pada",endonym:"\xC8d\xE8 Yor\xF9b\xE1"},amharic:{preparing:"\u1260\u12A0\u121B\u122D\u129B \u1260\u1218\u12D8\u130B\u1300\u1275 \u120B\u12ED\u2026",changeLang:"\u124B\u1295\u124B \u1240\u12ED\u122D",endonym:"\u12A0\u121B\u122D\u129B"},somali:{preparing:"Diyaarinta af Soomaali\u2026",changeLang:"Beddel luqadda",endonym:"Af-Soomaali"},hausa:{preparing:"Shirya cikin Hausa\u2026",changeLang:"Canja harshe",endonym:"Hausa"},zulu:{preparing:"Ilungiselela ngesiZulu\u2026",changeLang:"Shintsha ulimi",endonym:"isiZulu"},oromo:{preparing:"Afaan Oromootiin qophaa'aa jira\u2026",changeLang:"Afaan jijjiiri",endonym:"Afaan Oromoo"},luganda:{preparing:"Tuteekateeka mu Oluganda\u2026",changeLang:"Kyusa olulimi",endonym:"Oluganda"}};function _n(e){let r=e.trim();return r?r.charAt(0).toUpperCase()+r.slice(1):"\u2026"}function Ja(e){if(!e)return{nativeName:"\u2026",preparing:"Preparing\u2026",changeLang:"\u2190",rtl:!1,known:!0};let r=e.trim().toLowerCase(),t=Object.entries(rl).find(([s,c])=>s===r||c.endonym?.toLowerCase()===r||lo(s)?.toLowerCase()===r);if(t)return{nativeName:t[1].endonym||lo(e)||_n(e),preparing:t[1].preparing,changeLang:t[1].changeLang,rtl:!!t[1].rtl||Fn(t[1].preparing),known:!0};let a=lo(e)||e,o=_n(a),i=Fn(o);return{nativeName:o,preparing:`Preparing in ${o}\u2026`,changeLang:i?"\u062A\u063A\u064A\u064A\u0631":"Change",rtl:i,known:!1}}var Sr=[{name:"Puck",label:"Puck",gender:"male"},{name:"Charon",label:"Charon",gender:"male"},{name:"Kore",label:"Kore",gender:"female"},{name:"Aoede",label:"Aoede",gender:"female"}],ho="hsk-live-voice",Zt={langPlaceholder:"Type your preferred language\u2026",nameStepTitle:"Nice to meet you.",nameStepLead:"I can search, visualize, or capture anything for you \u2014 on this site or any other.",nameStepAsk:"What should I call you?",namePlaceholder:"Type your name\u2026",attachImage:"Attach a photo",vizUnavailable:"The preview could not be loaded.",vizDisclaimerImage:"Generated using Artificial Intelligence \u2014 colours, size and placement may differ from the real product.",vizDisclaimerVideo:"Generated using Artificial Intelligence \u2014 colours, size and movement may differ from the real product.",calcDisclaimer:"This is a calculation from live figures, not a guarantee \u2014 the market can move against it.",staleTitle:"No longer available",staleRemoved:"{title} has been removed and is no longer on offer.",staleUnavailable:"{title} is currently unavailable.",keyPastePrompt:"Paste your public id \u2014 or create one",keyPastePlaceholder:"your public id\u2026",keyUseMine:"Use my id",keyCreating:"Creating\u2026",keyCreateNew:"I'm new \u2014 create one",keySecretTitle:"Your secret \u2014 shown only once",keyDismiss:"Dismiss",keyCopySecret:"Copy secret",keyCopied:"Copied",keySecretHint:"Keep it private \u2014 use it to unlock your memory.",keyPublicTitle:"Your public id",keyCopyId:"Copy id",keyPublicHint:"Paste this on any site to save to the same memory.",keyAutoHide:"Hides automatically in {seconds}s.",greetReturning:"Hi, {name}.",greetReturningLead:"What can I find for you today?",howShouldResultsLook:"How should results look?",entityLangIntro:"I reply in {lang}. Product names stay as this site lists them \u2014 the details can too, or be translated.",asWritten:"As written",inLanguage:"In {lang}",namesAsWritten:"Details exactly as the site lists them.",detailsTranslated:"Details translated. Numbers and links stay exactly as listed.",entityLangPlaceholder:"Pick one of the two cards above\u2026",termsStepTitle:"Privacy & Terms of Use",termsStepSubtitle:"Transparent, anonymous, and zero-PII by design.",termsPiiTitle:"Zero PII Collection",termsPiiDesc:"We never collect or store personal identifying information (no emails, phone numbers, or real-world identities) from your chats or voice sessions.",termsSessionTitle:"Anonymous Session Tokens",termsSessionDesc:"Your session uses an anonymous client-side token solely to maintain context. It is never linked to your real identity.",termsMemoryTitle:"Ephemeral Chats vs. Mimi Vault",termsMemoryDesc:'Regular chats are ephemeral \u2014 closing the tab or clicking "Clear Chat" terminates them forever. Items you save with "@kiku" are encrypted and can be unlocked at mimi.akropolys.cloud with your Secret Access Key.',termsCookieTitle:"Host Website Telemetry",termsCookieDesc:"The host website where Kiku is embedded may collect cookies and analytics per their own cookie policy, outside Kiku's control.",termsAgreeButton:"Agree & Continue",termsAgreeCounting:"Agree & Continue ({seconds}s)",termsPlaceholder:"Please review and accept our Privacy & Terms above\u2026",allSet:"You're all set, {name}.",replyingTranslated:"Replying in {lang}, results translated too. Ask me anything.",replyingOriginal:"Replying in {lang}, results as this site wrote them. Ask me anything.",defaultPlaceholder:"Ask me anything\u2026",footerHint:"kiku \xB7 searches the whole catalogue in real time",voiceListening:"Listening\u2026 tap the mic to stop",voiceSending:"Got it \u2014 sending\u2026",voiceModeStart:"Hands-free conversation",voiceModeExit:"Leave hands-free",voicePhaseListening:"Listening",voicePhaseThinking:"Thinking",voicePhaseSpeaking:"Speaking",voiceHint:"Just talk \u2014 I'll answer when you pause.",voiceMuted:"Muted",voiceMutedHint:"Tap the microphone to speak again.",micDenied:"Microphone blocked. Allow mic access for this site, then try again.",micInsecure:"Voice needs a secure (https) connection.",micMissing:"No microphone found.",micLangUnsupported:"This browser cannot transcribe that language yet. Type instead.",micNetwork:"Couldn't reach voice. Try again in a moment.",voiceUnavailable:"Voice is unavailable right now. Try again in a moment.",voiceLimitReached:"You've used up today's voice time. It resets in a day \u2014 chat still works.",voiceSiteLimit:"Voice is out of allowance on this site for now. Chat still works.",voicePickerLabel:"Choose a voice",micNoSpeech:"Didn't catch anything. Try again, a little closer to the mic.",micFailed:"Couldn't hear that. Try again.",clearChat:"Clear chat",thinking:"Thinking",thoughtForSeconds:"Thought for {duration}",thoughtProcess:"Thought process",captureAndRemember:"kiku \u2014 capture & remember",captureCurrentPage:"Capture current page",captureAll:"Capture all ({count})",whatHaveYouSaved:"What have you saved?",deleteThis:"Delete this",errShopperReplyLimit:"You've reached this site's reply limit for your account.",errAccessRevoked:"Your access to the assistant has been revoked by the store.",errAccountRequired:"Please create an account to continue using the chat assistant.",errStreamInterrupted:"The reply was interrupted. Please try again.",errNetwork:"The assistant couldn't respond just now \u2014 please try again in a moment.",errGeneric:"Something went wrong. Please try again.",vizWorking:"Visualizing\u2026",vizMarkEdit:"Mark & edit",markupTitle:"Mark where you want the change",markupCancel:"Cancel",markupSketch:"Sketch",markupText:"Text",markupEraser:"Eraser",markupUndo:"Undo",markupClear:"Clear",markupSend:"Send",markupTextHint:"Type, then Enter",markupInstruction:"Describe the change \u2014 e.g. add the sofa here",markupDialogLabel:"Mark up image",markupColorLabel:"Colour {colour}",markupError:"Couldn't process this image \u2014 try a newer visualization.",markupLoadError:"This image can't be edited here.",markupLoading:"Loading image\u2026",markupApplyMarks:"Apply the change I marked on the image.",openMemory:"Open my memory on mimi",errTooManyRequests:"The assistant is currently receiving too many requests. Please try again in a few moments.",errTokenLimit:"You've reached your usage limit. Please update your billing limits in your dashboard to continue.",statusSent:"Sent",statusStopped:"Sent \xB7 reply stopped",queuedWaiting:"Queued",queuedSendNow:"Send now",jumpToLatest:"Scroll to latest",timelineLabel:"Questions in this conversation",voiceConnecting:"Connecting \u2014 wait for the tone before speaking",stoppedByYou:"You stopped this response.",stoppedInterrupted:"This response was interrupted.",continueGenerating:"Continue generating",generateResponse:"Generate response",pillCompareTop2:"Compare top 2",pillCompareTop2Query:"Compare the {a} and {b}",pillMoreOn:"More on {name}",pillMoreOnQuery:"Tell me more about the {name}",pillUnder:"Under {amount}",pillUnderQuery:"Show me options under {amount}",pillSimilarOptions:"Similar options",pillSimilarOptionsQuery:"Show me more like the {name}",pillWhichBest:"Which is best?",pillWhichBestQuery:"Which one would you recommend and why?",pillFindAlternatives:"Find alternatives",pillFindAlternativesQuery:"What are good alternatives to the {name}?",pillShowPopular:"Show popular items",pillShowPopularQuery:"What are your most popular items?",pillRecommend:"Recommend something",pillRecommendQuery:"What do you recommend for me?",cardClickAnswer:"The {name}",cardClickQuery:"Tell me more about the {name}{price} \u2014 what are its key details, who is it best suited for, and what should I know?",displayCapture:"capture {name}",displayCaptureAll:"capture all ({count} items)",displayViewHistory:"what have you saved?",displayDelete:"delete this"},po=Un.createContext((e,r)=>{let t=Zt[e];if(r)for(let[a,o]of Object.entries(r))t=t.split(`{${a}}`).join(o);return t}),jt=()=>Un.useContext(po);function Bn(e){let r=e.trim();if(!r||r.length>40||r.includes("?"))return null;r=r.replace(/^(hi|hey|hello|yo)[,!.\s]+/i,""),r=r.replace(/^(i['’]?m|im|my name is|call me|it['’]?s|this is|name['’]?s)\s+/i,""),r=r.trim().replace(/[.!,]+$/,"");let t=r.split(/\s+/);if(t.length===0||t.length>3||!/^[\p{L}][\p{L}\-'’ ]{0,30}$/u.test(r))return null;let a=r.toLowerCase();if(["phone","laptop","tv","cheap","best","under","buy","search","find","show","need","want","price","sofa","shoe","headphone","camera","gift","help"].some(s=>a.includes(s)))return null;let i=t[0];return i.charAt(0).toUpperCase()+i.slice(1)}var qn={shopper_reply_limit:"errShopperReplyLimit",RATE_LIMIT_EXCEEDED:"errShopperReplyLimit",access_revoked:"errAccessRevoked",account_required:"errAccountRequired",stream_interrupted:"errStreamInterrupted"};var Hn=(e,r)=>{let t=e&&typeof e=="object"?e.code:void 0;if(t&&qn[t])return r(qn[t]);let a="";if(typeof e=="string")a=e;else if(e&&typeof e=="object"&&e.message)a=e.message;else try{a=JSON.stringify(e)}catch{a=String(e)}let o=a.toLowerCase();if(o.includes("429")||o.includes("too many requests")||o.includes("requests per minute limit exceeded")||o.includes("too_many_requests_error")||o.includes("request_quota_exceeded")||o.includes("quota"))return r("errTooManyRequests");if(o.includes("token limit"))return r("errTokenLimit");if(o.includes("failed to fetch")||o.includes("networkerror")||o.includes("request failed"))return r("errNetwork");if(a)try{console.warn("[kiku] untranslated error:",a)}catch{}return r("errGeneric")},$n=()=>typeof window>"u"||window.isSecureContext!==!1,uo=15;import sr,{useState as Oe,useEffect as xt,useRef as et,useCallback as oa,useId as bd}from"react";import{Fragment as qh,jsx as X,jsxs as Be}from"react/jsx-runtime";var ol=({className:e,size:r=18,tight:t=!1})=>X("svg",{className:Z("hsk-brand-mark",e),width:r,height:r,viewBox:t?"10.2 17.4 79.5 79.5":"0 0 100 100",xmlns:"http://www.w3.org/2000/svg","aria-label":"kiku",children:Be("g",{transform:"translate(22.7 19) scale(0.62)",fill:"currentColor",fillRule:"evenodd",children:[X("path",{d:"M39.4 10.4 Q44 0 48.6 10.4 L86.1 95.8 Q88 100 83.4 100 L4.6 100 Q0 100 1.9 95.8 Z M24 100 L24 65 Q24 60 27.4 56.3 Q44 38 60.6 56.3 Q64 60 64 65 L64 100 Z"}),X("circle",{cx:"55",cy:"82",r:"3.4"})]})}),ut=ol,jn=()=>Be("svg",{className:"hsk-stop-icon",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",children:[X("circle",{className:"hsk-stop-ring",cx:"12",cy:"12",r:"9.5",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),X("rect",{className:"hsk-stop-core",x:"8.5",y:"8.5",width:"7",height:"7",rx:"1.8",fill:"currentColor"})]});var Vn=()=>Be("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.2",strokeLinecap:"round",strokeLinejoin:"round",children:[X("path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}),X("polyline",{points:"15 3 21 3 21 9"}),X("line",{x1:"10",y1:"14",x2:"21",y2:"3"})]}),Kn=()=>X("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"currentColor",children:X("path",{d:"M8 5v14l11-7z"})}),Cr=()=>Be("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[X("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),X("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]}),Mr=()=>X("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:X("path",{d:"m15 18-6-6 6-6"})}),On=()=>X("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:X("path",{d:"m9 18 6-6-6-6"})}),Wn=()=>Be("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[X("path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"}),X("path",{d:"M3 3v5h5"}),X("path",{d:"M12 7v5l4 2"})]}),Nr=()=>X("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:X("path",{d:"M19 21 12 16l-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"})}),Yn=()=>Be("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[X("path",{d:"M3 6h18"}),X("path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"})]});var Gn=()=>X("svg",{width:"19",height:"19",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:X("path",{d:"M12 5v14M5 12h14"})}),mo=()=>X("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:X("path",{d:"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48"})}),Qn=({size:e=13}={})=>Be("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[X("rect",{className:"hsk-copy-sheet",x:"9",y:"9",width:"13",height:"13",rx:"2"}),X("path",{className:"hsk-copy-back",d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]}),Xn=({size:e=13}={})=>X("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:X("polyline",{className:"hsk-check-mark",points:"20 6 9 17 4 12"})}),va=({className:e,size:r=18}={})=>Be("svg",{className:e,width:r,height:r,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[X("path",{className:"hsk-mic-cap",d:"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3z"}),X("path",{d:"M19 10v2a7 7 0 0 1-14 0v-2"}),X("line",{x1:"12",y1:"19",x2:"12",y2:"22"})]}),Tr=()=>Be("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[X("line",{x1:"2",y1:"2",x2:"22",y2:"22"}),X("path",{d:"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2"}),X("path",{d:"M5 10v2a7 7 0 0 0 12 5"}),X("path",{d:"M15 9.34V5a3 3 0 0 0-5.68-1.33"}),X("path",{d:"M9 9v3a3 3 0 0 0 5.12 2.12"}),X("line",{x1:"12",y1:"19",x2:"12",y2:"22"})]}),ko=({active:e})=>Be("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[X("path",{className:"hsk-wave-bar hsk-wave-bar--tip",style:{"--hsk-bar":0,"--hsk-amp":1.9,"--hsk-period":"1.24s"},d:"M2 12h2"}),X("path",{className:"hsk-wave-bar",style:{"--hsk-bar":1,"--hsk-amp":1.78,"--hsk-period":"0.94s"},d:"M6 8v8"}),X("path",{className:"hsk-wave-bar",style:{"--hsk-bar":2,"--hsk-amp":1.26,"--hsk-period":"1.42s"},d:"M10 4v16"}),X("path",{className:"hsk-wave-bar",style:{"--hsk-bar":3,"--hsk-amp":1.62,"--hsk-period":"1.08s"},d:"M14 7v10"}),X("path",{className:"hsk-wave-bar",style:{"--hsk-bar":4,"--hsk-amp":2.05,"--hsk-period":"0.86s"},d:"M18 9v6"}),X("path",{className:"hsk-wave-bar hsk-wave-bar--tip",style:{"--hsk-bar":5,"--hsk-amp":1.9,"--hsk-period":"1.32s"},d:"M22 12h-2"})]}),Jn=()=>Be("svg",{className:"hsk-telegram-icon",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[X("polygon",{className:"hsk-kite-wing hsk-kite-wing--far",points:"22 2 11 13 2 9"}),X("polygon",{className:"hsk-kite-wing hsk-kite-wing--near",points:"22 2 15 22 11 13"}),X("line",{className:"hsk-kite-spine",x1:"22",y1:"2",x2:"11",y2:"13"})]}),Zn=()=>Be("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[X("circle",{className:"hsk-sun-core",cx:"12",cy:"12",r:"5"}),Be("g",{className:"hsk-sun-rays",children:[X("line",{x1:"12",y1:"1",x2:"12",y2:"3"}),X("line",{x1:"12",y1:"21",x2:"12",y2:"23"}),X("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"}),X("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"}),X("line",{x1:"1",y1:"12",x2:"3",y2:"12"}),X("line",{x1:"21",y1:"12",x2:"23",y2:"12"}),X("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"}),X("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"})]})]}),ei=()=>X("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:X("path",{className:"hsk-moon-body",d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"})}),ti=()=>Be("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[X("path",{className:"hsk-wood-layer",style:{"--hsk-layer":0},d:"M12 2L2 7l10 5 10-5-10-5z"}),X("path",{className:"hsk-wood-layer",style:{"--hsk-layer":2},d:"M2 17l10 5 10-5"}),X("path",{className:"hsk-wood-layer",style:{"--hsk-layer":1},d:"M2 12l10 5 10-5"})]}),ai=()=>X("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:X("path",{className:"hsk-heart-body",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"})}),ri=()=>Be("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[X("path",{d:"M17 8h1a4 4 0 1 1 0 8h-1"}),X("path",{d:"M3 8h14v9a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4z"}),X("line",{className:"hsk-steam",style:{"--hsk-steam":0},x1:"6",y1:"1",x2:"6",y2:"4"}),X("line",{className:"hsk-steam",style:{"--hsk-steam":1},x1:"10",y1:"1",x2:"10",y2:"4"}),X("line",{className:"hsk-steam",style:{"--hsk-steam":2},x1:"14",y1:"1",x2:"14",y2:"4"})]}),oi=()=>Be("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[X("path",{d:"M12 3a6.5 6.5 0 0 0 9 9 9 9 0 1 1-9-9z"}),X("path",{className:"hsk-star-spark",d:"M18.5 2.5l.6 1.6 1.6.6-1.6.6-.6 1.6-.6-1.6-1.6-.6 1.6-.6z"})]});var ni=({size:e=11})=>Be("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.6",strokeLinecap:"round",strokeLinejoin:"round",children:[X("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),X("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]});var ea=[{id:"light",label:"Silver",Icon:Zn,dark:!1},{id:"dark",label:"Onyx",Icon:ei,dark:!0},{id:"mahogany",label:"Mahogany",Icon:ti,dark:!0},{id:"blush",label:"Blush",Icon:ai,dark:!1},{id:"coffee",label:"Coffee",Icon:ri,dark:!1},{id:"midnight",label:"Midnight",Icon:oi,dark:!0}],bo="dark",ii="light";function fo(e){return typeof e=="string"&&ea.some(r=>r.id===e)}function go(e){return ea.find(r=>r.id===e)??ea[0]}import{useKiku as fd,subscribeLiveStream as gd}from"@akropolys/sdk";import{useAkropolysContext as vd}from"@akropolys/sdk";import{useEffect as nl,useRef as il}from"react";function sl(e,r,t=.55){return r<=0?0:e*r*t/(r+t*Math.abs(e))}function cl({stiffness:e=500,damping:r=45,onFrame:t,onRest:a}){let o=0,i=0,s=0,c=null,n=0,l=p=>{let u=Math.min(.032,(p-n)/1e3)||.016666666666666666;n=p;let d=Math.max(1,Math.ceil(u/.008)),k=u/d;for(let g=0;g<d;g++){let v=-e*(o-s)-r*i;i+=v*k,o+=i*k}if(Math.abs(o-s)<.5&&Math.abs(i)<.5){o=s,i=0,c=null,t(o),a?.();return}t(o),c=requestAnimationFrame(l)},m=()=>{c===null&&(n=performance.now(),c=requestAnimationFrame(l))};return{track(p){c!==null&&(cancelAnimationFrame(c),c=null),o=p,i=0,t(o)},to(p,u=0){s=p,i=u,m()},get value(){return o},stop(){c!==null&&(cancelAnimationFrame(c),c=null)}}}function si({panel:e,scroller:r,onDismiss:t,quiescent:a,enabled:o=!0}){let i=il(t);i.current=t,nl(()=>{if(!o)return;let s=e();if(!s||typeof matchMedia=="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches)return;let c=!1,n=0,l=0,m=0,p=-1,u=0,d=0,k=0,g=!1,v=!1,S=cl({onFrame:y=>{s.style.transform=y===0?"":`translate3d(0, ${y}px, 0)`;let O=s.parentElement;O&&(O.style.opacity=y===0?"":String(Math.max(.35,1-y/(s.offsetHeight||1)*1.1)))},onRest:()=>{s.style.willChange="",v&&(v=!1,i.current())}}),L=()=>{let y=r();return y&&y.scrollTop>0?!1:a?a():!0},b=y=>{y.pointerType==="mouse"||!y.isPrimary||(c=!1,g=!1,p=y.pointerId,n=u=y.clientY,l=y.clientX,d=y.timeStamp,k=0,m=S.value)},M=y=>{if(y.pointerId!==p)return;let O=y.clientY-n,w=y.clientX-l;if(!g){if(Math.abs(O)<6&&Math.abs(w)<6)return;if(g=!0,c=O>0&&Math.abs(O)>Math.abs(w)&&L(),c){try{s.setPointerCapture(y.pointerId)}catch{}S.stop(),s.style.animation="none",s.style.willChange="transform"}}if(!c)return;let U=y.timeStamp-d;U>0&&(k=(y.clientY-u)/U*1e3),u=y.clientY,d=y.timeStamp;let F=m+O;S.track(F<0?-sl(-F,s.offsetHeight||1):F),y.cancelable&&y.preventDefault()},N=y=>{if(y.pointerId!==p)return;try{s.hasPointerCapture(y.pointerId)&&s.releasePointerCapture(y.pointerId)}catch{}if(p=-1,!c)return;c=!1;let O=s.offsetHeight||1;S.value+k*.12>O*.3||k>900?(v=!0,s.style.pointerEvents="none",S.to(O,k)):S.to(0,k)};return s.addEventListener("pointerdown",b,{passive:!0}),s.addEventListener("pointermove",M,{passive:!1}),s.addEventListener("pointerup",N,{passive:!0}),s.addEventListener("pointercancel",N,{passive:!0}),()=>{S.stop(),s.removeEventListener("pointerdown",b),s.removeEventListener("pointermove",M),s.removeEventListener("pointerup",N),s.removeEventListener("pointercancel",N),s.style.transform="",s.style.willChange="",s.style.animation="",s.style.pointerEvents="";let y=s.parentElement;y&&(y.style.opacity="")}},[o,e,r,a])}import{useEffect as vo,useRef as Rr,useState as zt}from"react";var ci=(e,r)=>Math.hypot(e.x-r.x,e.y-r.y);function ll(e){let r=0;for(let t=1;t<e.length;t++)r+=ci(e[t-1],e[t]);return r}function li(e){let r=1/0,t=1/0,a=-1/0,o=-1/0;for(let i of e)i.x<r&&(r=i.x),i.y<t&&(t=i.y),i.x>a&&(a=i.x),i.y>o&&(o=i.y);return{minX:r,minY:t,maxX:a,maxY:o}}var ya=e=>Math.max(0,Math.min(1e3,Math.round(e)));function di(e,r,t){return[ya(e.minY/t*1e3),ya(e.minX/r*1e3),ya(e.maxY/t*1e3),ya(e.maxX/r*1e3)]}function dl(e,r){let[t,a,o,i]=e,[s,c,n,l]=r,m=Math.min(i,l)-Math.max(a,c),p=Math.min(o,n)-Math.max(t,s);if(m<=0||p<=0)return!1;let u=Math.min((i-a)*(o-t),(l-c)*(n-s));return u>0&&m*p/u>.35}var hl=(e,r)=>[Math.min(e[0],r[0]),Math.min(e[1],r[1]),Math.max(e[2],r[2]),Math.max(e[3],r[3])];function pl(e,r,t){if(e.length<2)return null;let a=li(e),o=di(a,r,t),i=Math.hypot(a.maxX-a.minX,a.maxY-a.minY);if(i<4)return null;let s=ll(e),c=ci(e[0],e[e.length-1]),n=s/Math.max(c,1e-6);return c/i<.3&&s>i*1.8?{gesture:"ring",box:o,straight:!1}:n<1.25?{gesture:"arrow",box:o,to:[ya(e[e.length-1].y/t*1e3),ya(e[e.length-1].x/r*1e3)],straight:!0}:{gesture:"scribble",box:o,straight:!1}}function hi(e,r,t){if(!r||!t)return[];let a=[],o=[];for(let c of e){if(c.kind==="text"&&c.value&&typeof c.x=="number"&&typeof c.y=="number"){let n={x:c.x,y:c.y};o.push({gesture:"text",box:di(li([n,n]),r,t),text:c.value});continue}if(c.kind==="stroke"&&c.tool!=="eraser"&&c.points){let n=pl(c.points,r,t);n&&a.push(n)}}let i=new Set,s=[];for(let c=0;c<a.length;c++){if(i.has(c))continue;let n=a[c];for(let l=c+1;l<a.length;l++)i.has(l)||!n.straight||!a[l].straight||dl(n.box,a[l].box)&&(i.add(l),n={gesture:"cross",box:hl(n.box,a[l].box),straight:!1});i.add(c),s.push(n.gesture==="arrow"?{gesture:"arrow",box:n.box,to:n.to}:{gesture:n.gesture,box:n.box})}return[...s,...o]}import{jsx as He,jsxs as xa}from"react/jsx-runtime";var pi=["#111111","#ff5a5a","#ffb300","#22c55e","#06b6d4","#d946ef","#9ca3af"],ul=1280;function ui({src:e,onCancel:r,onSend:t,t:a}){let[o,i]=zt(null),[s,c]=zt(!1),[n,l]=zt("pen"),[m,p]=zt(pi[1]),[u,d]=zt([]),[k,g]=zt(null),[v,x]=zt(""),[S,L]=zt(""),[b,M]=zt(!1),N=Rr(null),y=Rr(null),O=Rr(null);vo(()=>{let h=new Image;h.crossOrigin="anonymous",h.onload=()=>i(h),h.onerror=()=>c(!0),h.src=e},[e]);let w=(()=>{if(!o)return{w:0,h:0};let h=Math.min(1,ul/Math.max(o.naturalWidth,o.naturalHeight));return{w:Math.round(o.naturalWidth*h),h:Math.round(o.naturalHeight*h)}})(),U=Rr(null),F=h=>{let z=N.current;if(!z||!o)return;let _=z.getContext("2d");if(!_)return;U.current||(U.current=document.createElement("canvas"));let W=U.current;W.width=z.width,W.height=z.height;let V=W.getContext("2d"),A=h?[...u,h]:u;for(let C of A)C.kind==="stroke"?(V.save(),V.globalCompositeOperation=C.tool==="eraser"?"destination-out":"source-over",V.strokeStyle=C.color,V.lineWidth=C.tool==="eraser"?C.size*3:C.size,V.lineCap="round",V.lineJoin="round",V.beginPath(),C.points.forEach((G,K)=>K===0?V.moveTo(G.x,G.y):V.lineTo(G.x,G.y)),C.points.length===1&&V.lineTo(C.points[0].x+.01,C.points[0].y),V.stroke(),V.restore()):(V.save(),V.fillStyle=C.color,V.font=`600 ${C.size}px system-ui, sans-serif`,V.fillText(C.value,C.x,C.y),V.restore());_.clearRect(0,0,z.width,z.height),_.drawImage(o,0,0,z.width,z.height),_.drawImage(W,0,0)};vo(()=>{F()},[o,u,w.w,w.h]),vo(()=>{k&&O.current?.focus()},[k]);let I=h=>{let z=N.current,_=z.getBoundingClientRect();return{x:(h.clientX-_.left)/_.width*z.width,y:(h.clientY-_.top)/_.height*z.height}},H=()=>Math.max(4,Math.round(w.w/180)),E=()=>Math.max(18,Math.round(w.w/28)),D=h=>{if(!o)return;let z=I(h);if(n==="text"){g({x:z.x,y:z.y}),x("");return}h.target.setPointerCapture(h.pointerId),y.current={kind:"stroke",tool:n,color:m,size:H(),points:[z]},F(y.current)},Q=h=>{y.current&&(y.current.points.push(I(h)),F(y.current))},R=()=>{if(!y.current)return;let h=y.current;y.current=null,d(z=>[...z,h])},q=()=>{k&&v.trim()&&d(h=>[...h,{kind:"text",x:k.x,y:k.y,color:m,value:v.trim(),size:E()}]),g(null),x("")},re=()=>{if(o)try{let h=document.createElement("canvas");h.width=w.w,h.height=w.h;let z=h.getContext("2d");if(!z){M(!0);return}z.drawImage(o,0,0,w.w,w.h);let _=h.toDataURL("image/jpeg",.92),W=N.current?.toDataURL("image/jpeg",.85)||_;t(_,S.trim(),hi(u,w.w,w.h),W)}catch{M(!0)}},ee=u.length>0;return xa("div",{className:"hsk-markup",role:"dialog","aria-label":a("markupDialogLabel"),children:[xa("div",{className:"hsk-markup-head",children:[He("span",{className:"hsk-markup-title",children:a("markupTitle")}),He("button",{className:"hsk-markup-cancel",onClick:r,children:a("markupCancel")})]}),He("div",{className:"hsk-markup-stage",children:s?He("div",{className:"hsk-markup-error",children:a("markupLoadError")}):o?xa("div",{className:"hsk-markup-canvas-wrap",children:[He("canvas",{ref:N,width:w.w,height:w.h,className:`hsk-markup-canvas hsk-markup-canvas--${n}`,onPointerDown:D,onPointerMove:Q,onPointerUp:R,onPointerLeave:R}),k&&N.current&&He("input",{ref:O,className:"hsk-markup-textinput",style:{left:`${k.x/w.w*100}%`,top:`${k.y/w.h*100}%`,color:m},value:v,placeholder:a("markupTextHint"),onChange:h=>x(h.target.value),onKeyDown:h=>{h.key==="Enter"&&q(),h.key==="Escape"&&(g(null),x(""))},onBlur:q})]}):He("div",{className:"hsk-markup-loading",children:a("markupLoading")})}),xa("div",{className:"hsk-markup-tools",children:[He("div",{className:"hsk-markup-colors",children:pi.map(h=>He("button",{className:`hsk-markup-color${m===h?" hsk-markup-color--on":""}`,style:{background:h},onClick:()=>{p(h),n==="eraser"&&l("pen")},"aria-label":a("markupColorLabel",{colour:h})},h))}),xa("div",{className:"hsk-markup-actions",children:[He("button",{className:`hsk-markup-tool${n==="pen"?" hsk-markup-tool--on":""}`,onClick:()=>l("pen"),children:a("markupSketch")}),He("button",{className:`hsk-markup-tool${n==="text"?" hsk-markup-tool--on":""}`,onClick:()=>l("text"),children:a("markupText")}),He("button",{className:`hsk-markup-tool${n==="eraser"?" hsk-markup-tool--on":""}`,onClick:()=>l("eraser"),children:a("markupEraser")}),He("button",{className:"hsk-markup-tool",onClick:()=>d(h=>h.slice(0,-1)),disabled:!ee,children:a("markupUndo")}),He("button",{className:"hsk-markup-tool",onClick:()=>d([]),disabled:!ee,children:a("markupClear")})]})]}),xa("div",{className:"hsk-markup-send",children:[He("input",{className:"hsk-markup-instruction",value:S,placeholder:a("markupInstruction"),onChange:h=>L(h.target.value),onKeyDown:h=>{h.key==="Enter"&&(ee||S.trim())&&re()}}),He("button",{className:"hsk-markup-go",onClick:re,disabled:!o||!ee&&!S.trim(),children:a("markupSend")})]}),b&&He("div",{className:"hsk-markup-error",children:a("markupError")})]})}import ml,{useEffect as kl,useRef as Za}from"react";import{jsx as Sl}from"react/jsx-runtime";function bl(e){let r=2166136261;for(let t=0;t<e.length;t++)r^=e.charCodeAt(t),r=Math.imul(r,16777619);return r>>>0}function wo(e){let r=e>>>0;return()=>{r=r+1831565813>>>0;let t=Math.imul(r^r>>>15,1|r);return t=t+Math.imul(t^t>>>7,61|t)^t,((t^t>>>14)>>>0)/4294967296}}var mi=e=>e*e*(3-2*e);function fl(e){let t=new Float32Array(65536);for(let o=0;o<t.length;o++)t[o]=e();let a=(o,i)=>t[(i&255)*256+(o&255)];return(o,i)=>{let s=Math.floor(o),c=Math.floor(i),n=mi(o-s),l=mi(i-c),m=a(s,c),p=a(s+1,c),u=a(s,c+1),d=a(s+1,c+1);return(m+(p-m)*n)*(1-l)+(u+(d-u)*n)*l}}function gl(e,r,t,a){let o=t/Math.SQRT2,i=Math.ceil(e/o),s=Math.ceil(r/o),c=new Int32Array(i*s).fill(-1),n=[],l=[],m=(u,d)=>{let k=n.length;n.push([u,d]),c[Math.floor(d/o)*i+Math.floor(u/o)]=k,l.push(k)},p=(u,d)=>{if(u<0||d<0||u>=e||d>=r)return!1;let k=Math.floor(u/o),g=Math.floor(d/o);for(let v=Math.max(g-2,0);v<=Math.min(g+2,s-1);v++)for(let x=Math.max(k-2,0);x<=Math.min(k+2,i-1);x++){let S=c[v*i+x];if(S<0)continue;let L=n[S][0]-u,b=n[S][1]-d;if(L*L+b*b<t*t)return!1}return!0};for(m(a()*e,a()*r);l.length;){let u=a()*l.length|0,[d,k]=n[l[u]],g=!1;for(let v=0;v<24;v++){let x=a()*Math.PI*2,S=t*(1+a()),L=d+Math.cos(x)*S,b=k+Math.sin(x)*S;if(p(L,b)){m(L,b),g=!0;break}}g||l.splice(u,1)}return n}var Ae=(e,r)=>(e()-.5)*r,yo=[(e,r,t)=>{let a=r*.5,o=r*(.14+t()*.04),i=r*.07;e.beginPath(),e.moveTo(-o-i*.6,-a),e.lineTo(o+i*.6,-a),e.moveTo(-o,-a+i),e.lineTo(o,-a+i),e.moveTo(-o,-a+i),e.lineTo(-o*.85,a-i),e.moveTo(o,-a+i),e.lineTo(o*.85,a-i),e.moveTo(0,-a+i*1.7),e.lineTo(0,a-i*1.7),e.moveTo(-o,a-i),e.lineTo(o,a-i),e.moveTo(-o-i*.6,a),e.lineTo(o+i*.6,a),e.stroke()},(e,r,t)=>{let a=r*.5,o=-a*(.18+t()*.1);e.beginPath(),e.moveTo(-a,o),e.lineTo(0,-a),e.lineTo(a,o),e.closePath(),e.moveTo(-a*.92,o+a*.16),e.lineTo(a*.92,o+a*.16);for(let i of[-.62,-.21,.21,.62])e.moveTo(a*i,o+a*.16),e.lineTo(a*i,a*.8);e.moveTo(-a,a*.8),e.lineTo(a,a*.8),e.stroke()},(e,r,t)=>{let a=r*.5,o=a*(.48+t()*.12);e.beginPath(),e.moveTo(-a*.2,-a*.86),e.lineTo(a*.2,-a*.86),e.moveTo(-a*.15,-a*.78),e.bezierCurveTo(-o,-a*.3,-o*.85,a*.6,0,a*.86),e.bezierCurveTo(o*.85,a*.6,o,-a*.3,a*.15,-a*.78),e.moveTo(-a*.17,-a*.64),e.quadraticCurveTo(-o*1.16,-a*.48,-o*.7,-a*.04),e.moveTo(a*.17,-a*.64),e.quadraticCurveTo(o*1.16,-a*.48,o*.7,-a*.04),e.stroke()},(e,r,t)=>{let a=r*.5;e.beginPath(),e.moveTo(-a*.9,a*.52),e.quadraticCurveTo(0,-a*.18,a*.9,-a*.58),e.stroke();let o=4+(t()*3|0);for(let i=0;i<o;i++){let s=.16+i/o*.8,c=-a*.9+s*a*1.8,n=a*.52-s*a*1.16+(1-s)*s*a*.3,l=i%2?1:-1,m=a*(.26+t()*.1);e.beginPath(),e.moveTo(c,n),e.quadraticCurveTo(c+m*.5,n+l*m*.66,c+m*.9,n+l*m*.08),e.quadraticCurveTo(c+m*.42,n+l*m*.04,c,n),e.stroke()}},(e,r,t)=>{let a=r*.5;e.beginPath(),e.moveTo(-a*.85,-a*.7),e.quadraticCurveTo(-a*.1,-a*.35,a*.2,a*.1),e.stroke();let o=[[-a*.45,-a*.12],[a*.05,a*.3],[a*.42,-a*.4]];for(let[i,s]of o)e.beginPath(),e.moveTo(i,s-a*.28),e.lineTo(i-a*.02,s-a*.16),e.stroke(),e.beginPath(),e.ellipse(i,s,a*(.15+t()*.04),a*.19,Ae(t,.5),0,Math.PI*2),e.stroke()},(e,r,t)=>{let a=r*.5;for(let o of[-1,1]){e.beginPath(),e.arc(0,0,a*.72,o>0?-1.25:1.25,o>0?1.25:Math.PI*2-1.25,o<0),e.stroke();for(let i=0;i<5;i++){let s=-1.05+i/4*2.1,c=Math.sin(s)*o*a*.72,n=Math.cos(s)*a*.72,l=a*(.2+t()*.08);e.beginPath(),e.moveTo(c,n),e.quadraticCurveTo(c+o*l*.9,n-l*.5,c+o*l*.6,n-l*1.05),e.stroke()}}},(e,r)=>{let t=r*.5;e.beginPath(),e.moveTo(-t,t*.6),e.lineTo(t*.55,t*.6),e.lineTo(t*.55,-t*.6),e.lineTo(-t*.45,-t*.6),e.lineTo(-t*.45,t*.15),e.lineTo(t*.1,t*.15),e.lineTo(t*.1,-t*.18),e.stroke()},(e,r)=>{let t=r*.5;e.beginPath(),e.moveTo(-t*.62,t*.8),e.lineTo(-t*.62,-t*.05),e.arc(0,-t*.05,t*.62,Math.PI,0),e.lineTo(t*.62,t*.8),e.stroke(),e.beginPath(),e.moveTo(-t*.86,t*.8),e.lineTo(t*.86,t*.8),e.stroke()},(e,r,t)=>{let a=r*.5;e.beginPath(),e.arc(0,0,a*.4,0,Math.PI*2),e.stroke();let o=t()*.5;for(let i=0;i<8;i++){let s=o+i/8*Math.PI*2;e.beginPath(),e.moveTo(Math.cos(s)*a*.6,Math.sin(s)*a*.6),e.lineTo(Math.cos(s)*a*.94,Math.sin(s)*a*.94),e.stroke()}},(e,r)=>{let t=r*.5;e.beginPath(),e.moveTo(-t*.44,t*.7),e.bezierCurveTo(-t,t*.2,-t*.8,-t*.7,-t*.3,-t*.6),e.moveTo(t*.44,t*.7),e.bezierCurveTo(t,t*.2,t*.8,-t*.7,t*.3,-t*.6),e.moveTo(-t*.32,-t*.64),e.lineTo(t*.32,-t*.64),e.moveTo(-t*.44,t*.7),e.lineTo(t*.44,t*.7);for(let a of[-.16,.02,.2])e.moveTo(t*a,-t*.56),e.lineTo(t*a,t*.62);e.stroke()},(e,r,t)=>{let a=r*.5,o=a*(.4+t()*.18);e.beginPath(),e.moveTo(-a,a*.16),e.quadraticCurveTo(-a*.5,-o,0,-a*.02),e.quadraticCurveTo(a*.5,-o,a,a*.16),e.stroke()}],ki=[(e,r,t)=>{let a=r*.5,o=-a+Ae(t,a*.3),i=Ae(t,a);e.beginPath(),e.moveTo(o,i);let s=4+(t()*4|0);for(let c=0;c<s;c++){let n=o+a*2/s+Ae(t,a*.5),l=Ae(t,a*1.5);e.quadraticCurveTo(o+Ae(t,a*.9),i+Ae(t,a*1.6),n,l),o=n,i=l}e.stroke()},(e,r,t)=>{let a=r*.5,o=2.2+t()*1.6,i=t()<.5?-1:1;e.beginPath();for(let s=0;s<=60;s++){let c=s/60,n=i*c*o*Math.PI*2,l=a*c*(.9+Ae(t,.06)),m=Math.cos(n)*l,p=Math.sin(n)*l;s===0?e.moveTo(m,p):e.lineTo(m,p)}e.stroke()},(e,r,t)=>{let a=r*.5,o=4+(t()*4|0),i=Ae(t,.7);for(let s=0;s<o;s++){let c=-a+s/(o-1)*a*2+Ae(t,a*.16),n=a*(.7+t()*.6);e.beginPath(),e.moveTo(c-i*n*.5,-n*.5),e.quadraticCurveTo(c+Ae(t,a*.2),0,c+i*n*.5,n*.5),e.stroke()}},(e,r,t)=>{let a=r*.5,o=2+(t()*3|0),i=a*2/o;e.beginPath(),e.moveTo(-a,a*.4);for(let s=0;s<o;s++){let c=-a+s*i,n=i*(.42+t()*.18);e.bezierCurveTo(c+n*.2,a*.4-n*2.1,c+i-n*.2,a*.4-n*2.1,c+i,a*.4+Ae(t,a*.14))}e.stroke()}],bi=[(e,r,t)=>{e.beginPath(),e.arc(0,0,r*.1+t()*r*.04,0,Math.PI*2),e.fill()},(e,r,t)=>{e.beginPath(),e.arc(Ae(t,r*.04),Ae(t,r*.04),r*.32,0,Math.PI*2),e.stroke()},(e,r,t)=>{let a=r*.4,o=a*(.2+t()*.12);e.beginPath(),e.moveTo(0,-a),e.quadraticCurveTo(o,-o,a,0),e.quadraticCurveTo(o,o,0,a),e.quadraticCurveTo(-o,o,-a,0),e.quadraticCurveTo(-o,-o,0,-a),e.stroke()},(e,r,t)=>{let a=r*.4;e.beginPath(),e.moveTo(-a,Ae(t,r*.08)),e.quadraticCurveTo(0,Ae(t,r*.16),a,Ae(t,r*.08)),e.stroke()}],vl={light:(e,r)=>{let t=r*.5;e.beginPath(),e.moveTo(0,-t),e.quadraticCurveTo(t*.16,-t*.16,t,0),e.quadraticCurveTo(t*.16,t*.16,0,t),e.quadraticCurveTo(-t*.16,t*.16,-t,0),e.quadraticCurveTo(-t*.16,-t*.16,0,-t),e.stroke()},dark:(e,r)=>{let t=r*.44;e.beginPath(),e.moveTo(-t*.6,-t*.5),e.lineTo(t*.6,-t*.5),e.lineTo(t,t*.05),e.lineTo(0,t),e.lineTo(-t,t*.05),e.closePath(),e.moveTo(-t,t*.05),e.lineTo(t,t*.05),e.moveTo(-t*.6,-t*.5),e.lineTo(-t*.3,t*.05),e.lineTo(0,t),e.moveTo(t*.6,-t*.5),e.lineTo(t*.3,t*.05),e.lineTo(0,t),e.stroke()},mahogany:(e,r)=>{let t=r*.5;e.beginPath(),e.moveTo(0,t),e.bezierCurveTo(-t*.9,t*.2,-t*.7,-t*.7,0,-t),e.bezierCurveTo(t*.7,-t*.7,t*.9,t*.2,0,t),e.moveTo(0,t*.86),e.lineTo(0,-t*.86);for(let a=0;a<3;a++){let o=-.34+a*.36;e.moveTo(0,t*o),e.lineTo(t*.44,t*(o-.26)),e.moveTo(0,t*o),e.lineTo(-t*.44,t*(o-.26))}e.stroke()},blush:(e,r)=>{let t=r*.5;for(let a=0;a<5;a++){let o=a/5*Math.PI*2-Math.PI/2;e.beginPath(),e.ellipse(Math.cos(o)*t*.52,Math.sin(o)*t*.52,t*.42,t*.26,o,0,Math.PI*2),e.stroke()}e.beginPath(),e.arc(0,0,t*.19,0,Math.PI*2),e.stroke()},coffee:(e,r)=>{let t=r*.5;e.beginPath(),e.ellipse(0,0,t*.6,t*.9,0,0,Math.PI*2),e.stroke(),e.beginPath(),e.moveTo(0,-t*.84),e.bezierCurveTo(t*.34,-t*.3,-t*.34,t*.3,0,t*.84),e.stroke()},midnight:(e,r)=>{let t=r*.5;e.beginPath();for(let a=0;a<10;a++){let o=a%2===0?t:t*.4,i=a/10*Math.PI*2-Math.PI/2,s=Math.cos(i)*o,c=Math.sin(i)*o;a===0?e.moveTo(s,c):e.lineTo(s,c)}e.closePath(),e.stroke()}},fi=e=>{let r=e.split(",").map(t=>parseFloat(t.trim()));return[r[0]||0,r[1]||0,r[2]||0]};function gi(e,r,t){let a=fi(e),o=fi(r);return`rgb(${Math.round(a[0]+(o[0]-a[0])*t)},${Math.round(a[1]+(o[1]-a[1])*t)},${Math.round(a[2]+(o[2]-a[2])*t)})`}function yl(e,r,t){return`hsl(${Math.round(r*300%360)}, ${t?72:68}%, ${t?58:46}%)`}function xl(e,r,t,a,o,i,s){let c=s?vl[s]:void 0,n=wo(o),l=fl(wo(o^2654435769)),m=e*r,u=Math.max(40,Math.min(520,Math.round(m/3100)))/.48,d=Math.max(26,Math.sqrt(.7*m/u)),k=gl(e,r,d,n),g=4.4/Math.max(e,r),v=g*2.6,x=Math.hypot(e,r),S=n()*Math.PI*2,L=Math.cos(S),b=Math.sin(S),M=e*(.18+n()*.64),N=r*(.12+n()*.5),y=[],O=Math.hypot(e,r)||1,[w,U,F]=t.split(",").map(H=>parseFloat(H)||0),I=.2126*w+.7152*U+.0722*F>128;for(let[H,E]of k){let D=l(H*g,E*g)*.72+l(H*v,E*v)*.28,Q=Math.min(1,Math.max(0,(D-.26)/.44));if(n()>Q*Q*(3-2*Q))continue;let R=n(),q=Math.max(0,1-Math.hypot(H-M,E-N)/(x*.72))**1.6,re=((H-e/2)*L+(E-r/2)*b)/x+.5,ee=!I,z=((ee?.055:.028)+n()*(ee?.04:.025))*(.75+re*.55)*(1+q*.4),_=gi(t,a,q*.85),W=i?(e-H+r-E)/(e+r||1):(H+E)/(e+r||1),V=n()*16777215|0,A=yl(V,W,I),C=0,G=ee?1.05+n()*.35:.65+n()*.35,K=20,f=yo[0],Y=1;R<.5?(C=Ae(n,.16),G=ee?1.15+n()*.45:.7+n()*.35,K=20+n()*16,f=yo[n()*yo.length|0]):R<.82?(C=n()*Math.PI*2,G=ee?.95+n()*.4:.6+n()*.4,K=16+n()*20,f=ki[n()*ki.length|0]):R<.95||!c?(C=n()*Math.PI*2,G=ee?.85+n()*.35:.55+n()*.35,K=7+n()*7,f=bi[n()*bi.length|0]):(C=Ae(n,.3),G=ee?1.1+n()*.3:.75+n()*.3,K=15+n()*9,f=c,Y=2.6),y.push({x:H,y:E,roll:R,rotation:C,lineWidth:G,alpha:z*Y,baseColor:_,shimmerColor:A,drawFn:f,size:K,seed:V,normDist:W})}return y}function xo(e,r,t,a,o){e.clearRect(0,0,t,a),e.lineCap="round",e.lineJoin="round";let i=o>=0&&o<=1.4,s=i?o*1.4-.2:-999,c=.3;for(let n of r){let l=n.alpha,m=n.baseColor,p=n.lineWidth;if(i){let d=n.normDist-s;if(d>c)l=n.alpha*.45,m=n.baseColor,p=n.lineWidth;else if(d<-c)l=n.alpha,m=n.baseColor,p=n.lineWidth;else{let k=Math.cos(d/c*(Math.PI/2))**2;l=n.alpha+k*.08,m=k>.08?gi(n.baseColor,n.shimmerColor,k*.65):n.baseColor,p=n.lineWidth*(1+k*.2)}}e.save(),e.translate(n.x,n.y),e.rotate(n.rotation),e.globalAlpha=Math.min(l,1),e.strokeStyle=m,e.fillStyle=m,e.lineWidth=p;let u=wo(n.seed);n.drawFn(e,n.size,u),e.restore()}}var wl=ml.memo(function({seed:r="",theme:t,dir:a}){let o=Za(null),i=Za(!1),s=Za(0),c=Za(null),n=Za(0);return kl(()=>{let l=o.current;if(!l)return;let m=bl(r||"kiku"),p=0,u=(S,L,b,M)=>N=>{let y=N-S,O=Math.min(1,y/L),U=(1-Math.cos(O*Math.PI))/2*1.4,F=l.clientWidth,I=l.clientHeight;if(F&&I){let H=Math.min(window.devicePixelRatio||1,3),E=Math.round(F*H),D=Math.round(I*H);(l.width!==E||l.height!==D)&&(l.width=E,l.height=D);let Q=l.getContext("2d");Q&&(Q.setTransform(H,0,0,H,0,0),xo(Q,b,F,I,U))}if(O<1)s.current=requestAnimationFrame(u(S,L,b,M));else{i.current=!1;let H=l.clientWidth,E=l.clientHeight,D=l.getContext("2d");if(D&&H&&E){let Q=Math.min(window.devicePixelRatio||1,3);D.setTransform(Q,0,0,Q,0,0),xo(D,b,H,E,-1)}}},d=()=>{let S=l.clientWidth,L=l.clientHeight;if(!S||!L)return;let b=Math.min(window.devicePixelRatio||1,3),M=l.getContext("2d");if(!M)return;let N=getComputedStyle(l),y=N.getPropertyValue("--hsk-doodle-ink").trim()||"31,31,31",O=N.getPropertyValue("--hsk-doodle-tint").trim()||y,w=a==="rtl"||N.direction==="rtl"||l.closest('[dir="rtl"]')!==null,U=typeof window<"u"?Math.max(L,window.innerHeight||0):L,F=xl(S,U,y,O,m,w,t);c.current=F,n.current=S;let I=Math.round(S*b),H=Math.round(L*b);if((l.width!==I||l.height!==H)&&(l.width=I,l.height=H),M.setTransform(b,0,0,b,0,0),window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches){xo(M,F,S,L,-1);return}cancelAnimationFrame(s.current),i.current=!0;let D=1200,Q=performance.now();s.current=requestAnimationFrame(u(Q,D,F,w))},k=()=>{clearTimeout(p),p=window.setTimeout(d,20)};d();let g=new ResizeObserver(k);g.observe(l);let v=window.matchMedia?.("(prefers-color-scheme: dark)"),x=()=>{d()};return v?.addEventListener?.("change",x),()=>{clearTimeout(p),cancelAnimationFrame(s.current),i.current=!1,g.disconnect(),v?.removeEventListener?.("change",x)}},[r,t,a]),Sl("canvas",{className:"hsk-cb-doodles",ref:o,"aria-hidden":"true"})}),zr=wl;import Pr,{useState as Vt,useEffect as Co,useCallback as vi}from"react";import{useAkropolysContext as Ml}from"@akropolys/sdk";var So={arabic:{allSet:"\u0623\u0646\u062A \u062C\u0627\u0647\u0632\u060C {name}.",asWritten:"\u0643\u0645\u0627 \u0647\u064A \u0645\u0643\u062A\u0648\u0628\u0629",captureAll:"\u0627\u0644\u062A\u0642\u0627\u0637 \u0627\u0644\u0643\u0644 ({count})",captureAndRemember:"kiku \u2014 \u0627\u0644\u062A\u0642\u0627\u0637 \u0648\u062A\u0630\u0643\u0631",captureCurrentPage:"\u0627\u0644\u062A\u0642\u0627\u0637 \u0627\u0644\u0635\u0641\u062D\u0629 \u0627\u0644\u062D\u0627\u0644\u064A\u0629",cardClickAnswer:"\u0627\u0644\u0640 {name}",cardClickQuery:"\u0623\u062E\u0628\u0631\u0646\u064A \u0627\u0644\u0645\u0632\u064A\u062F \u0639\u0646 {name}{price} \u2014 \u0645\u0627 \u0647\u064A \u062A\u0641\u0627\u0635\u064A\u0644\u0647 \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629\u060C \u0648\u0644\u0645\u0646 \u0647\u0648 \u0627\u0644\u0623\u0646\u0633\u0628\u060C \u0648\u0645\u0627\u0630\u0627 \u064A\u062C\u0628 \u0623\u0646 \u0623\u0639\u0631\u0641\u061F",clearChat:"\u0645\u0633\u062D \u0627\u0644\u062F\u0631\u062F\u0634\u0629",defaultPlaceholder:"\u0627\u0633\u0623\u0644\u0646\u064A \u0623\u064A \u0634\u064A\u0621...",deleteThis:"\u062D\u0630\u0641 \u0647\u0630\u0627",detailsTranslated:"\u062A\u0645\u062A \u062A\u0631\u062C\u0645\u0629 \u0627\u0644\u062A\u0641\u0627\u0635\u064A\u0644. \u062A\u0628\u0642\u0649 \u0627\u0644\u0623\u0631\u0642\u0627\u0645 \u0648\u0627\u0644\u0631\u0648\u0627\u0628\u0637 \u0643\u0645\u0627 \u0647\u064A \u062A\u0645\u0627\u0645\u064B\u0627.",displayCapture:"\u0627\u0644\u062A\u0642\u0627\u0637 {name}",displayCaptureAll:"\u0627\u0644\u062A\u0642\u0627\u0637 \u0627\u0644\u0643\u0644 ({count} \u0639\u0646\u0627\u0635\u0631)",displayDelete:"\u062D\u0630\u0641 \u0647\u0630\u0627",displayViewHistory:"\u0645\u0627\u0630\u0627 \u062D\u0641\u0638\u062A\u061F",entityLangIntro:"\u0623\u0646\u0627 \u0623\u0631\u062F \u0628\u0640 {lang}. \u064A\u0645\u0643\u0646 \u0623\u0646 \u062A\u0628\u0642\u0649 \u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0643\u0645\u0627 \u0643\u062A\u0628\u0647\u0627 \u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0642\u0639 \u062A\u0645\u0627\u0645\u064B\u0627\u060C \u0623\u0648 \u064A\u0645\u0643\u0646 \u062A\u0631\u062C\u0645\u062A\u0647\u0627 \u0623\u064A\u0636\u064B\u0627.",entityLangPlaceholder:"\u0627\u062E\u062A\u0631 \u0625\u062D\u062F\u0649 \u0627\u0644\u0628\u0637\u0627\u0642\u062A\u064A\u0646 \u0623\u0639\u0644\u0627\u0647...",errAccessRevoked:"\u062A\u0645 \u0625\u0644\u063A\u0627\u0621 \u0648\u0635\u0648\u0644\u0643 \u0625\u0644\u0649 \u0627\u0644\u0645\u0633\u0627\u0639\u062F \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u062A\u062C\u0631.",errAccountRequired:"\u0627\u0644\u0631\u062C\u0627\u0621 \u0625\u0646\u0634\u0627\u0621 \u062D\u0633\u0627\u0628 \u0644\u0645\u062A\u0627\u0628\u0639\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0645\u0633\u0627\u0639\u062F \u0627\u0644\u062F\u0631\u062F\u0634\u0629.",errShopperReplyLimit:"\u0644\u0642\u062F \u0648\u0635\u0644\u062A \u0625\u0644\u0649 \u062D\u062F \u0627\u0644\u0631\u062F\u0648\u062F \u0627\u0644\u0645\u0633\u0645\u0648\u062D \u0628\u0647 \u0644\u062D\u0633\u0627\u0628\u0643 \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0642\u0639.",errStreamInterrupted:"\u062A\u0645\u062A \u0645\u0642\u0627\u0637\u0639\u0629 \u0627\u0644\u0631\u062F. \u0627\u0644\u0631\u062C\u0627\u0621 \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649.",errTokenLimit:"\u0644\u0642\u062F \u0648\u0635\u0644\u062A \u0625\u0644\u0649 \u062D\u062F \u0627\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u062E\u0627\u0635 \u0628\u0643. \u0627\u0644\u0631\u062C\u0627\u0621 \u062A\u062D\u062F\u064A\u062B \u062D\u062F\u0648\u062F \u0627\u0644\u0641\u0648\u0627\u062A\u064A\u0631 \u0641\u064A \u0644\u0648\u062D\u0629 \u0627\u0644\u062A\u062D\u0643\u0645 \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0643 \u0644\u0644\u0645\u062A\u0627\u0628\u0639\u0629.",errTooManyRequests:"\u064A\u062A\u0644\u0642\u0649 \u0627\u0644\u0645\u0633\u0627\u0639\u062F \u062D\u0627\u0644\u064A\u064B\u0627 \u0639\u062F\u062F\u064B\u0627 \u0643\u0628\u064A\u0631\u064B\u0627 \u062C\u062F\u064B\u0627 \u0645\u0646 \u0627\u0644\u0637\u0644\u0628\u0627\u062A. \u0627\u0644\u0631\u062C\u0627\u0621 \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0628\u0639\u062F \u0644\u062D\u0638\u0627\u062A \u0642\u0644\u064A\u0644\u0629.",footerHint:"kiku \xB7 \u064A\u0628\u062D\u062B \u0641\u064A \u0627\u0644\u0643\u062A\u0627\u0644\u0648\u062C \u0628\u0623\u0643\u0645\u0644\u0647 \u0641\u064A \u0627\u0644\u0648\u0642\u062A \u0627\u0644\u0641\u0639\u0644\u064A",greetReturning:"\u0623\u0647\u0644\u0627\u064B\u060C {name}.",greetReturningLead:"\u0645\u0627\u0630\u0627 \u064A\u0645\u0643\u0646\u0646\u064A \u0623\u0646 \u0623\u062C\u062F \u0644\u0643 \u0627\u0644\u064A\u0648\u0645\u061F",howShouldResultsLook:"\u0643\u064A\u0641 \u064A\u062C\u0628 \u0623\u0646 \u062A\u0628\u062F\u0648 \u0627\u0644\u0646\u062A\u0627\u0626\u062C\u061F",inLanguage:"\u0628\u0640 {lang}",keyAutoHide:"\u064A\u062E\u062A\u0641\u064A \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627 \u0641\u064A {seconds} \u062B\u0648\u0627\u0646\u064D.",keyCopied:"\u062A\u0645 \u0627\u0644\u0646\u0633\u062E",keyCopyId:"\u0646\u0633\u062E \u0627\u0644\u0645\u0639\u0631\u0651\u0641",keyCopySecret:"\u0646\u0633\u062E \u0627\u0644\u0633\u0631",keyCreateNew:"\u0623\u0646\u0627 \u062C\u062F\u064A\u062F \u2014 \u0623\u0646\u0634\u0626 \u0648\u0627\u062D\u062F\u064B\u0627",keyCreating:"\u062C\u0627\u0631\u064D \u0627\u0644\u0625\u0646\u0634\u0627\u0621\u2026",keyDismiss:"\u062A\u062C\u0627\u0647\u0644",keyPastePlaceholder:"\u0645\u0639\u0631\u0651\u0641\u0643 \u0627\u0644\u0639\u0627\u0645\u2026",keyPastePrompt:"\u0627\u0644\u0635\u0642 \u0645\u0639\u0631\u0651\u0641\u0643 \u0627\u0644\u0639\u0627\u0645 \u2014 \u0623\u0648 \u0623\u0646\u0634\u0626 \u0648\u0627\u062D\u062F\u064B\u0627",keyPublicHint:"\u0627\u0644\u0635\u0642\u0647 \u0641\u064A \u0623\u064A \u0645\u0648\u0642\u0639 \u0644\u0644\u062D\u0641\u0638 \u0641\u064A \u0646\u0641\u0633 \u0627\u0644\u0630\u0627\u0643\u0631\u0629.",keyPublicTitle:"\u0645\u0639\u0631\u0651\u0641\u0643 \u0627\u0644\u0639\u0627\u0645",keySecretHint:"\u0627\u062D\u062A\u0641\u0638 \u0628\u0647 \u062E\u0627\u0635\u064B\u0627 \u2014 \u0627\u0633\u062A\u062E\u062F\u0645\u0647 \u0644\u0641\u062A\u062D \u0630\u0627\u0643\u0631\u062A\u0643.",keySecretTitle:"\u0633\u0631\u0643 \u2014 \u064A\u064F\u0639\u0631\u0636 \u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629 \u0641\u0642\u0637",keyUseMine:"\u0627\u0633\u062A\u062E\u062F\u0645 \u0645\u0639\u0631\u0651\u0641\u064A",kikuActionUnavailable:"\u0639\u0630\u0631\u064B\u0627 \u2014 \u0647\u0630\u0627 \u0627\u0644\u0625\u062C\u0631\u0627\u0621 \u063A\u064A\u0631 \u0645\u062A\u0627\u062D \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0642\u0639.",kikuCaptureDbError:"\u0641\u0634\u0644 \u0627\u0644\u0627\u0644\u062A\u0642\u0627\u0637 \u0628\u0633\u0628\u0628 \u062E\u0637\u0623 \u0641\u064A \u0642\u0627\u0639\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A.",kikuCaptureNoContext:"\u0641\u0634\u0644 \u0627\u0644\u0627\u0644\u062A\u0642\u0627\u0637 \u0644\u0623\u0646\u0647 \u0644\u0645 \u064A\u062A\u0645 \u062A\u0648\u0641\u064A\u0631 \u0633\u064A\u0627\u0642 \u0627\u0644\u0635\u0641\u062D\u0629 \u0623\u0648 \u0627\u0644\u0645\u0646\u062A\u062C \u0628\u0648\u0627\u0633\u0637\u0629 SDK.",kikuCaptureNoUrl:"\u062A\u0639\u0630\u0631 \u062D\u0641\u0638 \u0623\u064A \u0639\u0646\u0627\u0635\u0631 \u2014 \u0644\u0645 \u064A\u0643\u0646 \u0644\u0623\u064A \u0645\u0646\u0647\u0627 \u0639\u0646\u0648\u0627\u0646 URL \u0635\u0627\u0644\u062D.",kikuCaptureNoneSelected:"\u0644\u0645 \u064A\u062A\u0645 \u062A\u062D\u062F\u064A\u062F \u0623\u064A \u0639\u0646\u0627\u0635\u0631 \u0644\u0627\u0644\u062A\u0642\u0627\u0637\u0647\u0627.",kikuDeleteDbError:"\u0641\u0634\u0644 \u0627\u0644\u062D\u0630\u0641 \u0628\u0633\u0628\u0628 \u062E\u0637\u0623 \u0641\u064A \u0642\u0627\u0639\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A.",kikuDeleteDone:"\u062A\u0645\u062A \u0625\u0632\u0627\u0644\u062A\u0647 \u0645\u0646 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0645\u062D\u0641\u0648\u0638\u0629 \u0644\u062F\u064A\u0643.",kikuDeleteNoContext:"\u0641\u0634\u0644 \u0627\u0644\u062D\u0630\u0641 \u0644\u0623\u0646\u0647 \u0644\u0645 \u064A\u062A\u0645 \u062A\u0648\u0641\u064A\u0631 \u0633\u064A\u0627\u0642 \u0627\u0644\u0635\u0641\u062D\u0629 \u0644\u062A\u062D\u062F\u064A\u062F \u0645\u0627 \u064A\u062C\u0628 \u062D\u0630\u0641\u0647.",kikuMemoryIntro:"\u0643\u0644 \u0645\u0627 \u0627\u0644\u062A\u0642\u0637\u062A\u0647 \u0639\u0628\u0631 \u0627\u0644\u0645\u0648\u0627\u0642\u0639 \u0645\u0648\u062C\u0648\u062F \u0641\u064A \u0630\u0627\u0643\u0631\u062A\u0643 \u0627\u0644\u062E\u0627\u0635\u0629. \u0627\u0641\u062A\u062D\u0647\u0627 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0633\u0631\u0643:",kikuMintNeeded:"\u0644\u062D\u0641\u0638 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0639\u0628\u0631 \u0627\u0644\u0645\u0648\u0627\u0642\u0639\u060C \u062A\u062D\u062A\u0627\u062C \u0625\u0644\u0649 \u0645\u0641\u062A\u0627\u062D kiku \u2014 \u0633\u0623\u0642\u0648\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0648\u0627\u062D\u062F \u0644\u0643. \u064A\u064F\u0639\u0631\u0636 \u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629 \u0641\u0642\u0637\u060C \u0644\u0630\u0627 \u0627\u062D\u0641\u0638\u0647 \u0641\u064A \u0645\u0643\u0627\u0646 \u0622\u0645\u0646.",kikuMintOffer:"\u064A\u0645\u0643\u0646\u0646\u064A \u0627\u0644\u0627\u062D\u062A\u0641\u0627\u0638 \u0628\u0647\u0630\u0627 \u0644\u0643 \u0648\u0645\u062A\u0627\u0628\u0639\u062A\u0647 \u0645\u0639\u0643 \u0639\u0628\u0631 \u0627\u0644\u0645\u0648\u0627\u0642\u0639 \u2014 \u0633\u0623\u0642\u0648\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0641\u062A\u0627\u062D kiku \u0644\u0643. \u064A\u064F\u0639\u0631\u0636 \u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629 \u0641\u0642\u0637\u060C \u0644\u0630\u0627 \u0627\u062D\u0641\u0638\u0647 \u0641\u064A \u0645\u0643\u0627\u0646 \u0622\u0645\u0646.",kikuNeedKeyToUpdate:"\u0623\u062F\u062E\u0644 \u0645\u0641\u062A\u0627\u062D kiku \u0627\u0644\u062E\u0627\u0635 \u0628\u0643 \u062D\u062A\u0649 \u0623\u062A\u0645\u0643\u0646 \u0645\u0646 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0645\u062D\u0641\u0648\u0638\u0629 \u0644\u062F\u064A\u0643 \u0648\u062A\u062D\u062F\u064A\u062B\u0647\u0627.",micDenied:"\u062A\u0645 \u062D\u0638\u0631 \u0627\u0644\u0645\u064A\u0643\u0631\u0648\u0641\u0648\u0646. \u0627\u0633\u0645\u062D \u0628\u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u0645\u064A\u0643\u0631\u0648\u0641\u0648\u0646 \u0644\u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0642\u0639\u060C \u062B\u0645 \u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649.",micFailed:"\u0644\u0645 \u0623\u062A\u0645\u0643\u0646 \u0645\u0646 \u0633\u0645\u0627\u0639 \u0630\u0644\u0643. \u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649.",micInsecure:"\u064A\u062A\u0637\u0644\u0628 \u0627\u0644\u0635\u0648\u062A \u0627\u062A\u0635\u0627\u0644\u0627\u064B \u0622\u0645\u0646\u064B\u0627 (https).",micLangUnsupported:"\u0644\u0627 \u064A\u0645\u0643\u0646 \u0644\u0647\u0630\u0627 \u0627\u0644\u0645\u062A\u0635\u0641\u062D \u0646\u0633\u062E \u0647\u0630\u0647 \u0627\u0644\u0644\u063A\u0629 \u0628\u0639\u062F. \u064A\u0631\u062C\u0649 \u0627\u0644\u0643\u062A\u0627\u0628\u0629 \u0628\u062F\u0644\u0627\u064B \u0645\u0646 \u0630\u0644\u0643.",micMissing:"\u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u0645\u064A\u0643\u0631\u0648\u0641\u0648\u0646.",micNetwork:"\u062A\u062A\u0637\u0644\u0628 \u0645\u064A\u0632\u0629 \u0627\u0644\u0635\u0648\u062A \u0627\u062A\u0635\u0627\u0644\u0627\u064B \u0627\u0644\u0622\u0646. \u064A\u0631\u062C\u0649 \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u062A\u0635\u0627\u0644\u0643 \u0648\u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649.",micNoSpeech:"\u0644\u0645 \u0623\u0633\u0645\u0639 \u0634\u064A\u0626\u064B\u0627. \u064A\u0631\u062C\u0649 \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649\u060C \u0648\u0627\u0642\u062A\u0631\u0628 \u0642\u0644\u064A\u0644\u0627\u064B \u0645\u0646 \u0627\u0644\u0645\u064A\u0643\u0631\u0648\u0641\u0648\u0646.",namePlaceholder:"\u0627\u0643\u062A\u0628 \u0627\u0633\u0645\u0643...",nameStepAsk:"\u0645\u0627\u0630\u0627 \u064A\u062C\u0628 \u0623\u0646 \u0623\u0646\u0627\u062F\u064A\u0643\u061F",nameStepLead:"\u064A\u0645\u0643\u0646\u0646\u064A \u0627\u0644\u0628\u062D\u062B \u0639\u0646 \u0623\u064A \u0634\u064A\u0621 \u0623\u0648 \u062A\u0635\u0648\u0631\u0647 \u0623\u0648 \u0627\u0644\u062A\u0642\u0627\u0637\u0647 \u0644\u0643 \u2014 \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0642\u0639 \u0623\u0648 \u0623\u064A \u0645\u0648\u0642\u0639 \u0622\u062E\u0631.",nameStepTitle:"\u0633\u0631\u0631\u062A \u0628\u0644\u0642\u0627\u0626\u0643.",namesAsWritten:"\u0627\u0644\u0623\u0633\u0645\u0627\u0621 \u0648\u0627\u0644\u062A\u0641\u0627\u0635\u064A\u0644 \u062A\u0645\u0627\u0645\u064B\u0627 \u0643\u0645\u0627 \u0647\u064A \u0645\u062F\u0631\u062C\u0629 \u0641\u064A \u0627\u0644\u0645\u0648\u0642\u0639.",pillCompareTop2:"\u0642\u0627\u0631\u0646 \u0623\u0641\u0636\u0644 2",pillCompareTop2Query:"\u0642\u0627\u0631\u0646 \u0628\u064A\u0646 {a} \u0648 {b}",pillFindAlternatives:"\u0627\u0628\u062D\u062B \u0639\u0646 \u0628\u062F\u0627\u0626\u0644",pillFindAlternativesQuery:"\u0645\u0627 \u0647\u064A \u0627\u0644\u0628\u062F\u0627\u0626\u0644 \u0627\u0644\u062C\u064A\u062F\u0629 \u0644\u0640 {name}\u061F",pillMoreOn:"\u0627\u0644\u0645\u0632\u064A\u062F \u0639\u0646 {name}",pillMoreOnQuery:"\u0623\u062E\u0628\u0631\u0646\u064A \u0627\u0644\u0645\u0632\u064A\u062F \u0639\u0646 {name}",pillRecommend:"\u0623\u0648\u0635\u0650 \u0628\u0634\u064A\u0621",pillRecommendQuery:"\u0645\u0627\u0630\u0627 \u062A\u0648\u0635\u064A \u0644\u064A\u061F",pillShowPopular:"\u0639\u0631\u0636 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0634\u0627\u0626\u0639\u0629",pillShowPopularQuery:"\u0645\u0627 \u0647\u064A \u0645\u0646\u062A\u062C\u0627\u062A\u0643 \u0627\u0644\u0623\u0643\u062B\u0631 \u0634\u0639\u0628\u064A\u0629\u061F",pillSimilarOptions:"\u062E\u064A\u0627\u0631\u0627\u062A \u0645\u0634\u0627\u0628\u0647\u0629",pillSimilarOptionsQuery:"\u0623\u0631\u0646\u064A \u0627\u0644\u0645\u0632\u064A\u062F \u0627\u0644\u0645\u0634\u0627\u0628\u0647 \u0644\u0640 {name}",pillUnder:"\u0623\u0642\u0644 \u0645\u0646 {amount}",pillUnderQuery:"\u0623\u0638\u0647\u0631 \u0644\u064A \u062E\u064A\u0627\u0631\u0627\u062A \u0628\u0633\u0639\u0631 \u0623\u0642\u0644 \u0645\u0646 {amount}",pillWhichBest:"\u0623\u064A\u0647\u0645\u0627 \u0627\u0644\u0623\u0641\u0636\u0644\u061F",pillWhichBestQuery:"\u0623\u064A\u0647\u0645\u0627 \u062A\u0648\u0635\u064A \u0648\u0644\u0645\u0627\u0630\u0627\u061F",replyingOriginal:"\u0623\u0631\u062F\u0651 \u0628\u0627\u0644\u0644\u063A\u0629 {lang}\u060C \u0648\u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0643\u0645\u0627 \u0643\u062A\u0628\u0647\u0627 \u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0642\u0639. \u0627\u0633\u0623\u0644\u0646\u064A \u0623\u064A \u0634\u064A\u0621.",replyingTranslated:"\u0623\u0631\u062F\u0651 \u0628\u0627\u0644\u0644\u063A\u0629 {lang}\u060C \u0648\u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0645\u062A\u0631\u062C\u0645\u0629 \u0623\u064A\u0636\u064B\u0627. \u0627\u0633\u0623\u0644\u0646\u064A \u0623\u064A \u0634\u064A\u0621.",statusSent:"\u062A\u0645 \u0627\u0644\u0625\u0631\u0633\u0627\u0644",statusStopped:"\u062A\u0645 \u0627\u0644\u0625\u0631\u0633\u0627\u0644 \xB7 \u062A\u0645 \u0625\u064A\u0642\u0627\u0641 \u0627\u0644\u0631\u062F",thinking:"\u062C\u0627\u0631\u064A \u0627\u0644\u062A\u0641\u0643\u064A\u0631",thoughtForSeconds:"\u0641\u0643\u0631\u062A \u0644\u0645\u062F\u0629 {duration}",thoughtProcess:"\u0639\u0645\u0644\u064A\u0629 \u0627\u0644\u062A\u0641\u0643\u064A\u0631",vizDisclaimerImage:"\u062A\u0645 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u2014 \u0642\u062F \u062A\u062E\u062A\u0644\u0641 \u0627\u0644\u0623\u0644\u0648\u0627\u0646 \u0648\u0627\u0644\u062D\u062C\u0645 \u0648\u0627\u0644\u0645\u0648\u0636\u0639 \u0639\u0646 \u0627\u0644\u0645\u0646\u062A\u062C \u0627\u0644\u062D\u0642\u064A\u0642\u064A.",vizDisclaimerVideo:"\u062A\u0645 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u2014 \u0642\u062F \u062A\u062E\u062A\u0644\u0641 \u0627\u0644\u0623\u0644\u0648\u0627\u0646 \u0648\u0627\u0644\u062D\u062C\u0645 \u0648\u0627\u0644\u062D\u0631\u0643\u0629 \u0639\u0646 \u0627\u0644\u0645\u0646\u062A\u062C \u0627\u0644\u062D\u0642\u064A\u0642\u064A.",vizUnavailable:"\u062A\u0639\u0630\u0631 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0639\u0627\u064A\u0646\u0629.",voiceListening:"\u062C\u0627\u0631\u064A \u0627\u0644\u0627\u0633\u062A\u0645\u0627\u0639... \u0627\u0636\u063A\u0637 \u0639\u0644\u0649 \u0627\u0644\u0645\u064A\u0643\u0631\u0648\u0641\u0648\u0646 \u0644\u0644\u0625\u064A\u0642\u0627\u0641",voiceSending:"\u062A\u0645\u0627\u0645 \u2014 \u062C\u0627\u0631\u064A \u0627\u0644\u0625\u0631\u0633\u0627\u0644...",termsStepTitle:"\u0627\u0644\u062E\u0635\u0648\u0635\u064A\u0629 \u0648\u0634\u0631\u0648\u0637 \u0627\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645",termsStepSubtitle:"\u0634\u0641\u0627\u0641\u064A\u0629 \u0643\u0627\u0645\u0644\u0629\u060C \u0648\u0647\u0648\u064A\u0629 \u0645\u062C\u0647\u0648\u0644\u0629\u060C \u0648\u0628\u062F\u0648\u0646 \u062C\u0645\u0639 \u0623\u064A \u0628\u064A\u0627\u0646\u0627\u062A \u0634\u062E\u0635\u064A\u0629.",termsPiiTitle:"\u0639\u062F\u0645 \u062C\u0645\u0639 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0634\u062E\u0635\u064A\u0629",termsPiiDesc:"\u0646\u062D\u0646 \u0644\u0627 \u0646\u062C\u0645\u0639 \u0623\u0648 \u0646\u0637\u0644\u0628 \u0623\u0648 \u0646\u062E\u0632\u0646 \u0623\u064A \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0634\u062E\u0635\u064A\u0629 (\u0644\u0627 \u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A\u060C \u0644\u0627 \u0623\u0631\u0642\u0627\u0645 \u0647\u0648\u0627\u062A\u0641\u060C \u0648\u0644\u0627 \u0647\u0648\u064A\u0627\u062A \u062D\u0642\u064A\u0642\u064A\u0629) \u0645\u0646 \u0645\u062D\u0627\u062F\u062B\u0627\u062A\u0643 \u0623\u0648 \u062C\u0644\u0633\u0627\u062A\u0643 \u0627\u0644\u0635\u0648\u062A\u064A\u0629.",termsSessionTitle:"\u0645\u0639\u0631\u0651\u0641\u0627\u062A \u062C\u0644\u0633\u0629 \u0645\u062C\u0647\u0648\u0644\u0629",termsSessionDesc:"\u062A\u0633\u062A\u062E\u062F\u0645 \u062C\u0644\u0633\u062A\u0643 \u0645\u0639\u0631\u0651\u0641\u064B\u0627 \u0645\u062C\u0647\u0648\u0644\u0627\u064B \u0645\u0646 \u062C\u0627\u0646\u0628 \u0627\u0644\u0639\u0645\u064A\u0644 \u0641\u0642\u0637 \u0644\u0644\u062D\u0641\u0627\u0638 \u0639\u0644\u0649 \u0627\u0644\u0633\u064A\u0627\u0642\u060C \u0648\u0644\u0627 \u064A\u062A\u0645 \u0631\u0628\u0637\u0647 \u0628\u0647\u0648\u064A\u062A\u0643 \u0627\u0644\u062D\u0642\u064A\u0642\u064A\u0629 \u0623\u0628\u062F\u0627\u064B.",termsMemoryTitle:"\u0645\u062D\u0627\u062F\u062B\u0627\u062A \u0645\u0624\u0642\u062A\u0629 \u0645\u0642\u0627\u0628\u0644 \u062E\u0632\u064A\u0646\u0629 \u0645\u064A\u0645\u064A",termsMemoryDesc:'\u0627\u0644\u0645\u062D\u0627\u062F\u062B\u0627\u062A \u0627\u0644\u0639\u0627\u062F\u064A\u0629 \u0645\u0624\u0642\u062A\u0629 \u2014 \u0625\u063A\u0644\u0627\u0642 \u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0623\u0648 \u0645\u0633\u062D \u0627\u0644\u062F\u0631\u062F\u0634\u0629 \u064A\u0646\u0647\u064A\u0647\u0627 \u0646\u0647\u0627\u0626\u064A\u064B\u0627. \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u062A\u064A \u062A\u062D\u0641\u0638\u0647\u0627 \u0639\u0628\u0631 "@kiku" \u0645\u0634\u0641\u0631\u0629 \u0648\u064A\u0645\u0643\u0646 \u0641\u062A\u062D\u0647\u0627 \u0641\u064A mimi.akropolys.cloud \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0645\u0641\u062A\u0627\u062D\u0643 \u0627\u0644\u0633\u0631\u064A.',termsCookieTitle:"\u0628\u064A\u0627\u0646\u0627\u062A \u062A\u062A\u0628\u0639 \u0627\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0645\u0636\u064A\u0641",termsCookieDesc:"\u0642\u062F \u064A\u0642\u0648\u0645 \u0627\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0645\u0636\u064A\u0641 \u0628\u062C\u0645\u0639 \u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0648\u0627\u0644\u062A\u062D\u0644\u064A\u0644\u0627\u062A \u0648\u0641\u0642\u064B\u0627 \u0644\u0633\u064A\u0627\u0633\u0629 \u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0647\u060C \u0648\u0647\u064A \u062E\u0627\u0631\u062C\u0629 \u0639\u0646 \u0633\u064A\u0637\u0631\u0629 kiku.",termsAgreeButton:"\u0627\u0644\u0645\u0648\u0627\u0641\u0642\u0629 \u0648\u0627\u0644\u0645\u062A\u0627\u0628\u0639\u0629",termsAgreeCounting:"\u0627\u0644\u0645\u0648\u0627\u0641\u0642\u0629 \u0648\u0627\u0644\u0645\u062A\u0627\u0628\u0639\u0629 ({seconds} \u062B)",termsPlaceholder:"\u064A\u0631\u062C\u0649 \u0645\u0631\u0627\u062C\u0639\u0629 \u0648\u0642\u0628\u0648\u0644 \u0627\u0644\u062E\u0635\u0648\u0635\u064A\u0629 \u0648\u0627\u0644\u0634\u0631\u0648\u0637 \u0623\u0639\u0644\u0627\u0647...",whatHaveYouSaved:"\u0645\u0627\u0630\u0627 \u062D\u0641\u0638\u062A\u061F",voiceHint:"\u062A\u062D\u062F\u062B \u0641\u0642\u0637 \u2014 \u0633\u0623\u062C\u064A\u0628 \u0639\u0646\u062F\u0645\u0627 \u062A\u062A\u0648\u0642\u0641.",voiceModeExit:"\u0627\u0644\u062E\u0631\u0648\u062C \u0645\u0646 \u0627\u0644\u0648\u0636\u0639 \u0628\u062F\u0648\u0646 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u064A\u062F\u064A\u0646",voiceModeStart:"\u0645\u062D\u0627\u062F\u062B\u0629 \u0628\u062F\u0648\u0646 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u064A\u062F\u064A\u0646",voiceMuted:"\u0645\u0643\u062A\u0648\u0645",voiceMutedHint:"\u0627\u0636\u063A\u0637 \u0639\u0644\u0649 \u0627\u0644\u0645\u064A\u0643\u0631\u0648\u0641\u0648\u0646 \u0644\u0644\u062A\u062D\u062F\u062B \u0645\u0631\u0629 \u0623\u062E\u0631\u0649.",voicePhaseListening:"\u0627\u0633\u062A\u0645\u0627\u0639",voicePhaseSpeaking:"\u062A\u062D\u062F\u062B",voicePhaseThinking:"\u062A\u0641\u0643\u064A\u0631"},chinese:{allSet:"\u60A8\u5DF2\u51C6\u5907\u597D\uFF0C{name}\u3002",asWritten:"\u5982\u539F\u6587\u6240\u793A",captureAll:"\u6355\u83B7\u5168\u90E8\uFF08{count}\uFF09",captureAndRemember:"kiku \u2014 \u6355\u83B7\u5E76\u8BB0\u4F4F",captureCurrentPage:"\u6355\u83B7\u5F53\u524D\u9875\u9762",cardClickAnswer:"{name}",cardClickQuery:"\u544A\u8BC9\u6211\u66F4\u591A\u5173\u4E8E {name}{price} \u2014 \u5173\u952E\u7EC6\u8282\u662F\u4EC0\u4E48\uFF0C\u6700\u9002\u5408\u8C01\uFF0C\u6211\u9700\u8981\u4E86\u89E3\u4EC0\u4E48\uFF1F",clearChat:"\u6E05\u9664\u804A\u5929",defaultPlaceholder:"\u968F\u4FBF\u95EE\u6211\u4EFB\u4F55\u4E8B\u2026",deleteThis:"\u5220\u9664\u6B64\u9879",detailsTranslated:"\u8BE6\u60C5\u5DF2\u7FFB\u8BD1\u3002\u6570\u5B57\u548C\u94FE\u63A5\u4FDD\u6301\u539F\u6837\u3002",displayCapture:"\u6355\u83B7 {name}",displayCaptureAll:"\u6355\u83B7\u5168\u90E8\uFF08{count} \u9879\uFF09",displayDelete:"\u5220\u9664\u6B64\u9879",displayViewHistory:"\u6211\u4FDD\u5B58\u4E86\u4EC0\u4E48\uFF1F",entityLangIntro:"\u6211\u4F1A\u7528 {lang} \u56DE\u590D\u3002\u7ED3\u679C\u5361\u7247\u53EF\u4EE5\u4FDD\u6301\u7F51\u7AD9\u539F\u6587\uFF0C\u4E5F\u53EF\u4EE5\u7FFB\u8BD1\u3002",entityLangPlaceholder:"\u4ECE\u4E0A\u9762\u7684\u4E24\u5F20\u5361\u7247\u4E2D\u9009\u62E9\u4E00\u4E2A\u2026",errAccessRevoked:"\u60A8\u7684\u8BBF\u95EE\u6743\u9650\u5DF2\u88AB\u5546\u5E97\u64A4\u9500\u3002",errAccountRequired:"\u8BF7\u521B\u5EFA\u8D26\u6237\u4EE5\u7EE7\u7EED\u4F7F\u7528\u804A\u5929\u52A9\u624B\u3002",errShopperReplyLimit:"\u60A8\u5DF2\u8FBE\u5230\u6B64\u7AD9\u70B9\u5BF9\u60A8\u8D26\u6237\u7684\u56DE\u590D\u4E0A\u9650\u3002",errStreamInterrupted:"\u56DE\u590D\u88AB\u4E2D\u65AD\u3002\u8BF7\u518D\u8BD5\u4E00\u6B21\u3002",errTokenLimit:"\u60A8\u5DF2\u8FBE\u5230\u4F7F\u7528\u4E0A\u9650\u3002\u8BF7\u5728\u4EEA\u8868\u677F\u4E2D\u66F4\u65B0\u8BA1\u8D39\u4E0A\u9650\u4EE5\u7EE7\u7EED\u3002",errTooManyRequests:"\u52A9\u624B\u5F53\u524D\u8BF7\u6C42\u8FC7\u591A\u3002\u8BF7\u7A0D\u540E\u518D\u8BD5\u3002",footerHint:"kiku \xB7 \u5B9E\u65F6\u641C\u7D22\u6574\u4E2A\u76EE\u5F55",greetReturning:"\u60A8\u597D\uFF0C{name}\u3002",greetReturningLead:"\u4ECA\u5929\u6211\u80FD\u4E3A\u60A8\u627E\u5230\u4EC0\u4E48\uFF1F",howShouldResultsLook:"\u7ED3\u679C\u5E94\u8BE5\u662F\u4EC0\u4E48\u6837\u5B50\uFF1F",inLanguage:"\u4F7F\u7528 {lang}",namePlaceholder:"\u8F93\u5165\u60A8\u7684\u540D\u5B57\u2026",nameStepAsk:"\u6211\u8BE5\u600E\u4E48\u79F0\u547C\u60A8\uFF1F",nameStepLead:"\u6211\u53EF\u4EE5\u4E3A\u60A8\u641C\u7D22\u3001\u53EF\u89C6\u5316\u6216\u6355\u83B7\u4EFB\u4F55\u5185\u5BB9\u2014\u2014\u5728\u6B64\u7AD9\u70B9\u6216\u5176\u4ED6\u4EFB\u4F55\u7AD9\u70B9\u3002",nameStepTitle:"\u5F88\u9AD8\u5174\u89C1\u5230\u60A8\u3002",namesAsWritten:"\u540D\u79F0\u548C\u8BE6\u60C5\u5B8C\u5168\u6309\u7AD9\u70B9\u5217\u51FA\u3002",pillCompareTop2:"\u6BD4\u8F83\u524D\u4E24\u9879",pillCompareTop2Query:"\u6BD4\u8F83 {a} \u548C {b}",pillFindAlternatives:"\u5BFB\u627E\u66FF\u4EE3\u54C1",pillFindAlternativesQuery:"\u6709\u4EC0\u4E48\u597D\u7684\u66FF\u4EE3\u54C1\u53EF\u4EE5\u66FF\u4EE3 {name}\uFF1F",pillMoreOn:"\u66F4\u591A\u5173\u4E8E {name}",pillMoreOnQuery:"\u544A\u8BC9\u6211\u66F4\u591A\u5173\u4E8E {name}",pillRecommend:"\u63A8\u8350\u4E00\u4E9B\u4E1C\u897F",pillRecommendQuery:"\u60A8\u4F1A\u63A8\u8350\u4EC0\u4E48\u7ED9\u6211\uFF1F",pillShowPopular:"\u663E\u793A\u70ED\u95E8\u9879\u76EE",pillShowPopularQuery:"\u60A8\u6700\u53D7\u6B22\u8FCE\u7684\u9879\u76EE\u662F\u4EC0\u4E48\uFF1F",pillSimilarOptions:"\u76F8\u4F3C\u9009\u9879",pillSimilarOptionsQuery:"\u5C55\u793A\u66F4\u591A\u7C7B\u4F3C {name} \u7684\u5185\u5BB9",pillUnder:"\u4F4E\u4E8E {amount}",pillUnderQuery:"\u5C55\u793A\u4F4E\u4E8E {amount} \u7684\u9009\u9879",pillWhichBest:"\u54EA\u4E00\u4E2A\u6700\u597D\uFF1F",pillWhichBestQuery:"\u60A8\u4F1A\u63A8\u8350\u54EA\u4E00\u4E2A\uFF0C\u4E3A\u4EC0\u4E48\uFF1F",replyingOriginal:"\u7528 {lang} \u56DE\u590D\uFF0C\u7ED3\u679C\u4FDD\u6301\u7F51\u7AD9\u539F\u6587\u3002\u968F\u4FBF\u95EE\u6211\u4EFB\u4F55\u4E8B\u3002",replyingTranslated:"\u7528 {lang} \u56DE\u590D\uFF0C\u7ED3\u679C\u4E5F\u5DF2\u7FFB\u8BD1\u3002\u968F\u4FBF\u95EE\u6211\u4EFB\u4F55\u4E8B\u3002",statusSent:"\u5DF2\u53D1\u9001",statusStopped:"\u5DF2\u53D1\u9001 \xB7 \u56DE\u590D\u5DF2\u505C\u6B62",thinking:"\u601D\u8003\u4E2D",thoughtForSeconds:"\u601D\u8003\u4E86 {duration}",thoughtProcess:"\u601D\u8003\u8FC7\u7A0B",termsStepTitle:"\u9690\u79C1\u4E0E\u4F7F\u7528\u6761\u6B3E",termsStepSubtitle:"\u900F\u660E\u3001\u533F\u540D\uFF0C\u4ECE\u8BBE\u8BA1\u4E4B\u521D\u5373\u96F6\u4E2A\u4EBA\u8EAB\u4EFD\u4FE1\u606F\u3002",termsPiiTitle:"\u96F6\u4E2A\u4EBA\u8EAB\u4EFD\u4FE1\u606F\u6536\u96C6",termsPiiDesc:"\u6211\u4EEC\u7EDD\u4E0D\u4F1A\u4ECE\u60A8\u7684\u5BF9\u8BDD\u6216\u8BED\u97F3\u4E2D\u6536\u96C6\u6216\u5B58\u50A8\u4EFB\u4F55\u4E2A\u4EBA\u8EAB\u4EFD\u4FE1\u606F\uFF08\u65E0\u90AE\u7BB1\u3001\u7535\u8BDD\u53F7\u7801\u6216\u771F\u5B9E\u59D3\u540D\uFF09\u3002",termsSessionTitle:"\u533F\u540D\u4F1A\u8BDD\u51ED\u8BC1",termsSessionDesc:"\u60A8\u7684\u4F1A\u8BDD\u4EC5\u4F7F\u7528\u5BA2\u6237\u7AEF\u751F\u6210\u7684\u533F\u540D\u6807\u8BC6\u7B26\u6765\u7EF4\u6301\u4E0A\u4E0B\u6587\uFF0C\u7EDD\u4E0D\u4E0E\u60A8\u7684\u771F\u5B9E\u8EAB\u4EFD\u5173\u8054\u3002",termsMemoryTitle:"\u5373\u65F6\u4F1A\u8BDD vs. Mimi \u8BB0\u5FC6\u5E93",termsMemoryDesc:'\u666E\u901A\u5BF9\u8BDD\u5B8C\u5168\u5373\u65F6\u5904\u7406\u2014\u2014\u5173\u95ED\u6216\u6E05\u9664\u804A\u5929\u5373\u53EF\u5F7B\u5E95\u9500\u6BC1\u3002\u4F7F\u7528 "@kiku" \u4FDD\u5B58\u7684\u5185\u5BB9\u7ECF\u8FC7\u52A0\u5BC6\uFF0C\u53EF\u5728 mimi.akropolys.cloud \u4F7F\u7528\u60A8\u7684\u79C1\u94A5\u968F\u65F6\u89E3\u9501\u3002',termsCookieTitle:"\u5BBF\u4E3B\u7F51\u7AD9\u9065\u6D4B",termsCookieDesc:"\u5D4C\u5165 kiku \u7684\u5BBF\u4E3B\u7F51\u7AD9\u53EF\u80FD\u4F1A\u6839\u636E\u5176\u81EA\u8EAB\u7684 Cookie \u653F\u7B56\u6536\u96C6\u6D4F\u89C8\u6570\u636E\uFF0C\u4E0D\u53D7 kiku \u63A7\u5236\u3002",termsAgreeButton:"\u540C\u610F\u5E76\u7EE7\u7EED",termsAgreeCounting:"\u540C\u610F\u5E76\u7EE7\u7EED ({seconds}\u79D2)",termsPlaceholder:"\u8BF7\u67E5\u9605\u5E76\u540C\u610F\u4E0A\u65B9\u7684\u9690\u79C1\u4E0E\u6761\u6B3E\u2026",whatHaveYouSaved:"\u6211\u4FDD\u5B58\u4E86\u4EC0\u4E48\uFF1F",keyAutoHide:"\u5C06\u5728 {seconds} \u79D2\u540E\u81EA\u52A8\u9690\u85CF\u3002",keyCopied:"\u5DF2\u590D\u5236",keyCopyId:"\u590D\u5236 ID",keyCopySecret:"\u590D\u5236\u5BC6\u94A5",keyCreateNew:"\u6211\u662F\u65B0\u7528\u6237 \u2014 \u521B\u5EFA\u4E00\u4E2A",keyCreating:"\u6B63\u5728\u521B\u5EFA\u2026",keyDismiss:"\u5173\u95ED",keyPastePlaceholder:"\u60A8\u7684\u516C\u5F00 ID\u2026",keyPastePrompt:"\u7C98\u8D34\u60A8\u7684\u516C\u5F00 ID \u2014 \u6216\u521B\u5EFA\u4E00\u4E2A",keyPublicHint:"\u5728\u4EFB\u4F55\u7F51\u7AD9\u4E0A\u7C98\u8D34\u6B64 ID \u5373\u53EF\u4FDD\u5B58\u5230\u76F8\u540C\u7684\u8BB0\u5FC6\u5E93\u4E2D\u3002",keyPublicTitle:"\u60A8\u7684\u516C\u5F00 ID",keySecretHint:"\u8BF7\u59A5\u5584\u4FDD\u7BA1 \u2014 \u7528\u4E8E\u89E3\u9501\u60A8\u7684\u8BB0\u5FC6\u5E93\u3002",keySecretTitle:"\u60A8\u7684\u5BC6\u94A5 \u2014 \u4EC5\u663E\u793A\u4E00\u6B21",keyUseMine:"\u4F7F\u7528\u6211\u7684 ID",kikuActionUnavailable:"\u62B1\u6B49 \u2014 \u6B64\u7AD9\u70B9\u6682\u4E0D\u652F\u6301\u8BE5\u64CD\u4F5C\u3002",kikuCaptureDbError:"\u7531\u4E8E\u6570\u636E\u5E93\u9519\u8BEF\uFF0C\u4FDD\u5B58\u5931\u8D25\u3002",kikuCaptureNoContext:"\u7531\u4E8E\u672A\u63D0\u4F9B\u9875\u9762\u6216\u4EA7\u54C1\u4E0A\u4E0B\u6587\uFF0C\u4FDD\u5B58\u5931\u8D25\u3002",kikuCaptureNoUrl:"\u65E0\u6CD5\u4FDD\u5B58\u4EFB\u4F55\u9879\u76EE \u2014 \u5747\u65E0\u6709\u6548\u7F51\u5740\u3002",kikuCaptureNoneSelected:"\u672A\u9009\u62E9\u8981\u4FDD\u5B58\u7684\u9879\u76EE\u3002",kikuDeleteDbError:"\u7531\u4E8E\u6570\u636E\u5E93\u9519\u8BEF\uFF0C\u5220\u9664\u5931\u8D25\u3002",kikuDeleteDone:"\u5DF2\u4ECE\u4FDD\u5B58\u7684\u9879\u76EE\u4E2D\u79FB\u9664\u3002",kikuDeleteNoContext:"\u672A\u63D0\u4F9B\u9875\u9762\u4E0A\u4E0B\u6587\u4EE5\u786E\u5B9A\u8981\u5220\u9664\u7684\u5185\u5BB9\u3002",kikuMemoryIntro:"\u60A8\u5728\u5404\u7AD9\u70B9\u4FDD\u5B58\u7684\u6240\u6709\u5185\u5BB9\u5747\u5B58\u50A8\u5728\u60A8\u7684\u79C1\u6709\u8BB0\u5FC6\u5E93\u4E2D\u3002\u4F7F\u7528\u60A8\u7684\u5BC6\u94A5\u89E3\u9501\uFF1A",kikuMintNeeded:"\u8981\u5728\u8DE8\u7AD9\u70B9\u4FDD\u5B58\u9879\u76EE\uFF0C\u60A8\u9700\u8981\u4E00\u4E2A kiku \u5BC6\u94A5 \u2014 \u6211\u5C06\u4E3A\u60A8\u751F\u6210\u4E00\u4E2A\u3002\u8BE5\u5BC6\u94A5\u4EC5\u663E\u793A\u4E00\u6B21\uFF0C\u8BF7\u59A5\u5584\u4FDD\u5B58\u3002",kikuMintOffer:"\u6211\u53EF\u4EE5\u4E3A\u60A8\u4FDD\u5B58\u5E76\u8DDF\u968F\u60A8\u8DE8\u7AD9\u70B9\u540C\u6B65 \u2014 \u6211\u5C06\u4E3A\u60A8\u751F\u6210\u4E00\u4E2A kiku \u5BC6\u94A5\u3002\u4EC5\u663E\u793A\u4E00\u6B21\uFF0C\u8BF7\u59A5\u5584\u4FDD\u5B58\u3002",kikuNeedKeyToUpdate:"\u8F93\u5165\u60A8\u7684 kiku \u5BC6\u94A5\u4EE5\u4FBF\u6211\u67E5\u627E\u5E76\u66F4\u65B0\u60A8\u4FDD\u5B58\u7684\u9879\u76EE\u3002",micDenied:"\u9EA6\u514B\u98CE\u5DF2\u88AB\u963B\u6B62\u3002\u8BF7\u5141\u8BB8\u6B64\u7AD9\u70B9\u8BBF\u95EE\u9EA6\u514B\u98CE\uFF0C\u7136\u540E\u91CD\u8BD5\u3002",micFailed:"\u672A\u80FD\u542C\u6E05\u3002\u8BF7\u91CD\u8BD5\u3002",micInsecure:"\u8BED\u97F3\u529F\u80FD\u9700\u8981\u5B89\u5168\u8FDE\u63A5 (HTTPS)\u3002",micLangUnsupported:"\u6B64\u6D4F\u89C8\u5668\u6682\u4E0D\u652F\u6301\u8BE5\u8BED\u8A00\u7684\u8BED\u97F3\u8F6C\u5F55\u3002\u8BF7\u4F7F\u7528\u6587\u5B57\u8F93\u5165\u3002",micMissing:"\u672A\u627E\u5230\u9EA6\u514B\u98CE\u3002",micNetwork:"\u8BED\u97F3\u529F\u80FD\u9700\u8981\u7F51\u7EDC\u8FDE\u63A5\u3002\u8BF7\u68C0\u67E5\u7F51\u7EDC\u540E\u91CD\u8BD5\u3002",micNoSpeech:"\u672A\u68C0\u6D4B\u5230\u58F0\u97F3\u3002\u8BF7\u9760\u8FD1\u9EA6\u514B\u98CE\u540E\u91CD\u8BD5\u3002",vizDisclaimerImage:"\u7531\u4EBA\u5DE5\u667A\u80FD\u751F\u6210 \u2014 \u989C\u8272\u3001\u5C3A\u5BF8\u548C\u4F4D\u7F6E\u53EF\u80FD\u4E0E\u5B9E\u7269\u7565\u6709\u4E0D\u540C\u3002",vizDisclaimerVideo:"\u7531\u4EBA\u5DE5\u667A\u80FD\u751F\u6210 \u2014 \u989C\u8272\u3001\u5C3A\u5BF8\u548C\u52A8\u4F5C\u53EF\u80FD\u4E0E\u5B9E\u7269\u7565\u6709\u4E0D\u540C\u3002",vizUnavailable:"\u65E0\u6CD5\u52A0\u8F7D\u9884\u89C8\u3002",voiceHint:"\u76F4\u63A5\u8BF4\u8BDD\u5373\u53EF \u2014 \u60A8\u505C\u987F\u540E\u6211\u4F1A\u56DE\u7B54\u3002",voiceListening:"\u6B63\u5728\u8046\u542C\u2026 \u70B9\u51FB\u9EA6\u514B\u98CE\u505C\u6B62",voiceModeExit:"\u9000\u51FA\u514D\u63D0\u6A21\u5F0F",voiceModeStart:"\u514D\u63D0\u5BF9\u8BDD",voiceMuted:"\u9759\u97F3",voiceMutedHint:"\u70B9\u51FB\u9EA6\u514B\u98CE\u91CD\u65B0\u5F00\u59CB\u8BF4\u8BDD\u3002",voicePhaseListening:"\u6B63\u5728\u8046\u542C",voicePhaseSpeaking:"\u6B63\u5728\u56DE\u7B54",voicePhaseThinking:"\u6B63\u5728\u601D\u8003",voiceSending:"\u5DF2\u6536\u5230 \u2014 \u6B63\u5728\u53D1\u9001\u2026"},english:{allSet:"You're all set, {name}.",asWritten:"As written",captureAll:"Capture all ({count})",captureAndRemember:"kiku \u2014 capture & remember",captureCurrentPage:"Capture current page",cardClickAnswer:"The {name}",cardClickQuery:"Tell me more about the {name}{price} \u2014 what are its key details, who is it best suited for, and what should I know?",clearChat:"Clear chat",defaultPlaceholder:"Ask me anything\u2026",deleteThis:"Delete this",detailsTranslated:"Details translated. Numbers and links stay exactly as listed.",displayCapture:"capture {name}",displayCaptureAll:"capture all ({count} items)",displayDelete:"delete this",displayViewHistory:"what have you saved?",entityLangIntro:"I reply in {lang}. Result cards can stay exactly as this site wrote them, or be translated too.",entityLangPlaceholder:"Pick one of the two cards above\u2026",errAccessRevoked:"Your access to the assistant has been revoked by the store.",errAccountRequired:"Please create an account to continue using the chat assistant.",errShopperReplyLimit:"You've reached this site's reply limit for your account.",errStreamInterrupted:"The reply was interrupted. Please try again.",errTokenLimit:"You've reached your usage limit. Please update your billing limits in your dashboard to continue.",errTooManyRequests:"The assistant is currently receiving too many requests. Please try again in a few moments.",footerHint:"kiku \xB7 searches the whole catalogue in real time",greetReturning:"Hi, {name}.",greetReturningLead:"What can I find for you today?",howShouldResultsLook:"How should results look?",inLanguage:"In {lang}",keyAutoHide:"Hides automatically in {seconds}s.",keyCopied:"Copied",keyCopyId:"Copy id",keyCopySecret:"Copy secret",keyCreateNew:"I'm new \u2014 create one",keyCreating:"Creating\u2026",keyDismiss:"Dismiss",keyPastePlaceholder:"your public id\u2026",keyPastePrompt:"Paste your public id \u2014 or create one",keyPublicHint:"Paste this on any site to save to the same memory.",keyPublicTitle:"Your public id",keySecretHint:"Keep it private \u2014 use it to unlock your memory.",keySecretTitle:"Your secret \u2014 shown only once",keyUseMine:"Use my id",kikuActionUnavailable:"Sorry \u2014 that action isn't available on this site.",kikuCaptureDbError:"Capture failed due to a database error.",kikuCaptureNoContext:"Capture failed because no page or product context was provided by the SDK.",kikuCaptureNoUrl:"Couldn\u2019t save any items \u2014 none had a valid URL.",kikuCaptureNoneSelected:"No items were selected to capture.",kikuDeleteDbError:"Delete failed due to a database error.",kikuDeleteDone:"Removed it from your saved items.",kikuDeleteNoContext:"Delete failed because no page context was provided to identify what to delete.",kikuMemoryIntro:"Everything you've captured across sites lives in your private memory. Unlock it with your secret:",kikuMintNeeded:"To save items across sites you need a kiku key \u2014 I'll mint one for you. It's shown only once, so save it somewhere safe.",kikuMintOffer:"I can keep this for you and have it follow you across sites \u2014 I'll mint you a kiku key. It's shown only once, so save it somewhere safe.",kikuNeedKeyToUpdate:"Enter your kiku key so I can find and update your saved items.",micDenied:"Microphone blocked. Allow mic access for this site, then try again.",micFailed:"Couldn't hear that. Try again.",micInsecure:"Voice needs a secure (https) connection.",micLangUnsupported:"This browser cannot transcribe that language yet. Type instead.",micMissing:"No microphone found.",micNetwork:"Voice needs a connection right now. Check yours and try again.",micNoSpeech:"Didn't catch anything. Try again, a little closer to the mic.",namePlaceholder:"Type your name\u2026",nameStepAsk:"What should I call you?",nameStepLead:"I can search, visualize, or capture anything for you \u2014 on this site or any other.",nameStepTitle:"Nice to meet you.",namesAsWritten:"Names and details exactly as the site lists them.",pillCompareTop2:"Compare top 2",pillCompareTop2Query:"Compare the {a} and {b}",pillFindAlternatives:"Find alternatives",pillFindAlternativesQuery:"What are good alternatives to the {name}?",pillMoreOn:"More on {name}",pillMoreOnQuery:"Tell me more about the {name}",pillRecommend:"Recommend something",pillRecommendQuery:"What do you recommend for me?",pillShowPopular:"Show popular items",pillShowPopularQuery:"What are your most popular items?",pillSimilarOptions:"Similar options",pillSimilarOptionsQuery:"Show me more like the {name}",pillUnder:"Under {amount}",pillUnderQuery:"Show me options under {amount}",pillWhichBest:"Which is best?",pillWhichBestQuery:"Which one would you recommend and why?",replyingOriginal:"Replying in {lang}, results as this site wrote them. Ask me anything.",replyingTranslated:"Replying in {lang}, results translated too. Ask me anything.",statusSent:"Sent",statusStopped:"Sent \xB7 reply stopped",thinking:"Thinking",thoughtForSeconds:"Thought for {duration}",thoughtProcess:"Thought process",vizDisclaimerImage:"Generated using Artificial Intelligence \u2014 colours, size and placement may differ from the real product.",vizDisclaimerVideo:"Generated using Artificial Intelligence \u2014 colours, size and movement may differ from the real product.",vizUnavailable:"The preview could not be loaded.",voiceHint:"Just talk \u2014 I'll answer when you pause.",voiceListening:"Listening\u2026 tap the mic to stop",voiceModeExit:"Leave hands-free",voiceModeStart:"Hands-free conversation",voiceMuted:"Muted",voiceMutedHint:"Tap the microphone to speak again.",voicePhaseListening:"Listening",voicePhaseSpeaking:"Speaking",voicePhaseThinking:"Thinking",voiceSending:"Got it \u2014 sending\u2026",termsStepTitle:"Privacy & Terms of Use",termsStepSubtitle:"Transparent, anonymous, and zero-PII by design.",termsPiiTitle:"Zero PII Collection",termsPiiDesc:"We never collect or store personal identifying information (no emails, phone numbers, or real-world identities) from your chats or voice sessions.",termsSessionTitle:"Anonymous Session Tokens",termsSessionDesc:"Your session uses an anonymous client-side token solely to maintain context. It is never linked to your real identity.",termsMemoryTitle:"Ephemeral Chats vs. Mimi Vault",termsMemoryDesc:'Regular chats are ephemeral \u2014 closing the tab or clicking "Clear Chat" terminates them forever. Items you save with "@kiku" are encrypted and can be unlocked at mimi.akropolys.cloud with your Secret Access Key.',termsCookieTitle:"Host Website Telemetry",termsCookieDesc:"The host website where Kiku is embedded may collect cookies and analytics per their own cookie policy, outside Kiku's control.",termsAgreeButton:"Agree & Continue",termsAgreeCounting:"Agree & Continue ({seconds}s)",termsPlaceholder:"Please review and accept our Privacy & Terms above\u2026",whatHaveYouSaved:"What have you saved?"},french:{allSet:"C'est tout bon, {name}.",asWritten:"Tel quel",captureAll:"Tout capturer ({count})",captureAndRemember:"kiku \u2014 capturer et m\xE9moriser",captureCurrentPage:"Capturer la page actuelle",cardClickAnswer:"Le {name}",cardClickQuery:"Dites-m'en plus sur le {name}{price} : ses caract\xE9ristiques principales, \xE0 qui il convient le mieux et ce que je devrais savoir.",clearChat:"Effacer le chat",defaultPlaceholder:"Posez-moi n'importe quelle question\u2026",deleteThis:"Supprimer ceci",detailsTranslated:"D\xE9tails traduits. Les chiffres et les liens restent exactement tels qu'ils sont.",displayCapture:"capturer {name}",displayCaptureAll:"tout capturer ({count} articles)",displayDelete:"supprimer ceci",displayViewHistory:"qu'avez-vous enregistr\xE9 ?",entityLangIntro:"Je r\xE9ponds en {lang}. Les fiches de r\xE9sultats peuvent rester exactement telles que ce site les a \xE9crites, ou \xEAtre \xE9galement traduites.",entityLangPlaceholder:"Choisissez l'une des deux fiches ci-dessus\u2026",errAccessRevoked:"Votre acc\xE8s \xE0 l'assistant a \xE9t\xE9 r\xE9voqu\xE9 par le magasin.",errAccountRequired:"Veuillez cr\xE9er un compte pour continuer \xE0 utiliser l'assistant de chat.",errShopperReplyLimit:"Vous avez atteint la limite de r\xE9ponses de ce site pour votre compte.",errStreamInterrupted:"La r\xE9ponse a \xE9t\xE9 interrompue. Veuillez r\xE9essayer.",errTokenLimit:"Vous avez atteint votre limite d'utilisation. Veuillez mettre \xE0 jour vos limites de facturation dans votre tableau de bord pour continuer.",errTooManyRequests:"L'assistant re\xE7oit actuellement trop de requ\xEAtes. Veuillez r\xE9essayer dans quelques instants.",footerHint:"kiku \xB7 recherche dans tout le catalogue en temps r\xE9el",greetReturning:"Bonjour, {name}.",greetReturningLead:"Que puis-je trouver pour vous aujourd'hui ?",howShouldResultsLook:"Comment les r\xE9sultats doivent-ils s'afficher ?",inLanguage:"En {lang}",keyAutoHide:"Se masque automatiquement dans {seconds}s.",keyCopied:"Copi\xE9",keyCopyId:"Copier l'identifiant",keyCopySecret:"Copier le secret",keyCreateNew:"Je suis nouveau \u2014 cr\xE9ez-en un",keyCreating:"Cr\xE9ation en cours\u2026",keyDismiss:"Ignorer",keyPastePlaceholder:"votre identifiant public\u2026",keyPastePrompt:"Collez votre identifiant public \u2014 ou cr\xE9ez-en un",keyPublicHint:"Collez ceci sur n'importe quel site pour enregistrer dans la m\xEAme m\xE9moire.",keyPublicTitle:"Votre identifiant public",keySecretHint:"Gardez-le priv\xE9 \u2014 utilisez-le pour d\xE9verrouiller votre m\xE9moire.",keySecretTitle:"Votre secret \u2014 affich\xE9 une seule fois",keyUseMine:"Utiliser mon identifiant",kikuActionUnavailable:"D\xE9sol\xE9 \u2014 cette action n'est pas disponible sur ce site.",kikuCaptureDbError:"La capture a \xE9chou\xE9 en raison d'une erreur de base de donn\xE9es.",kikuCaptureNoContext:"La capture a \xE9chou\xE9 car aucun contexte de page ou de produit n'a \xE9t\xE9 fourni par le SDK.",kikuCaptureNoUrl:"Impossible d'enregistrer des articles \u2014 aucun n'avait d'URL valide.",kikuCaptureNoneSelected:"Aucun article n'a \xE9t\xE9 s\xE9lectionn\xE9 pour la capture.",kikuDeleteDbError:"La suppression a \xE9chou\xE9 en raison d'une erreur de base de donn\xE9es.",kikuDeleteDone:"Je l'ai retir\xE9 de vos articles enregistr\xE9s.",kikuDeleteNoContext:"La suppression a \xE9chou\xE9 car aucun contexte de page n'a \xE9t\xE9 fourni pour identifier ce qu'il fallait supprimer.",kikuMemoryIntro:"Tout ce que vous avez captur\xE9 sur les sites se trouve dans votre m\xE9moire priv\xE9e. D\xE9verrouillez-la avec votre secret :",kikuMintNeeded:"Pour enregistrer des articles sur diff\xE9rents sites, vous avez besoin d'une cl\xE9 kiku \u2014 je vais en cr\xE9er une pour vous. Elle n'est affich\xE9e qu'une seule fois, alors enregistrez-la en lieu s\xFBr.",kikuMintOffer:"Je peux garder ceci pour vous et le faire vous suivre sur les sites \u2014 je vais vous cr\xE9er une cl\xE9 kiku. Elle n'est affich\xE9e qu'une seule fois, alors enregistrez-la en lieu s\xFBr.",kikuNeedKeyToUpdate:"Entrez votre cl\xE9 kiku afin que je puisse trouver et mettre \xE0 jour vos articles enregistr\xE9s.",micDenied:"Microphone bloqu\xE9. Autorisez l'acc\xE8s au micro pour ce site, puis r\xE9essayez.",micFailed:"Je n'ai pas entendu. R\xE9essayez.",micInsecure:"La voix n\xE9cessite une connexion s\xE9curis\xE9e (https).",micLangUnsupported:"Ce navigateur ne peut pas encore transcrire cette langue. Veuillez taper \xE0 la place.",micMissing:"Aucun microphone d\xE9tect\xE9.",micNetwork:"La voix n\xE9cessite une connexion en ce moment. V\xE9rifiez la v\xF4tre et r\xE9essayez.",micNoSpeech:"Je n'ai rien entendu. R\xE9essayez, un peu plus pr\xE8s du micro.",namePlaceholder:"Tapez votre nom\u2026",nameStepAsk:"Comment dois-je vous appeler ?",nameStepLead:"Je peux chercher, visualiser ou capturer n'importe quoi pour vous \u2014 sur ce site ou n'importe quel autre.",nameStepTitle:"Enchant\xE9 de vous rencontrer.",namesAsWritten:"Noms et d\xE9tails exactement tels qu'ils sont list\xE9s sur le site.",pillCompareTop2:"Comparer les 2 meilleurs",pillCompareTop2Query:"Comparez le {a} et le {b}",pillFindAlternatives:"Trouver des alternatives",pillFindAlternativesQuery:"Quelles sont de bonnes alternatives au {name} ?",pillMoreOn:"Plus sur {name}",pillMoreOnQuery:"Dites-m'en plus sur le {name}",pillRecommend:"Recommander quelque chose",pillRecommendQuery:"Que me recommandez-vous ?",pillShowPopular:"Afficher les articles populaires",pillShowPopularQuery:"Quels sont vos articles les plus populaires ?",pillSimilarOptions:"Options similaires",pillSimilarOptionsQuery:"Montrez-m'en plus comme le {name}",pillUnder:"Moins de {amount}",pillUnderQuery:"Montrez-moi des options \xE0 moins de {amount}",pillWhichBest:"Lequel est le meilleur ?",pillWhichBestQuery:"Lequel recommanderiez-vous et pourquoi ?",replyingOriginal:"Je r\xE9ponds en {lang}, les r\xE9sultats sont tels que le site les a \xE9crits. Posez-moi n'importe quelle question.",replyingTranslated:"Je r\xE9ponds en {lang}, les r\xE9sultats sont \xE9galement traduits. Posez-moi n'importe quelle question.",statusSent:"Envoy\xE9",statusStopped:"Envoy\xE9 \xB7 r\xE9ponse arr\xEAt\xE9e",thinking:"R\xE9flexion en cours",thoughtForSeconds:"R\xE9flexion pendant {duration}",thoughtProcess:"Processus de r\xE9flexion",vizDisclaimerImage:"G\xE9n\xE9r\xE9 par Intelligence Artificielle \u2014 les couleurs, la taille et le placement peuvent diff\xE9rer du produit r\xE9el.",vizDisclaimerVideo:"G\xE9n\xE9r\xE9 par Intelligence Artificielle \u2014 les couleurs, la taille et le mouvement peuvent diff\xE9rer du produit r\xE9el.",vizUnavailable:"L'aper\xE7u n'a pas pu \xEAtre charg\xE9.",voiceListening:"\xC9coute\u2026 touchez le micro pour arr\xEAter",voiceSending:"Bien re\xE7u \u2014 envoi en cours\u2026",termsStepTitle:"Confidentialit\xE9 et conditions d'utilisation",termsStepSubtitle:"Transparent, anonyme et sans collecte de donn\xE9es personnelles.",termsPiiTitle:"Z\xE9ro collecte de donn\xE9es personnelles",termsPiiDesc:"Nous ne collectons ni ne stockons aucune information d'identification personnelle (ni e-mail, ni num\xE9ro de t\xE9l\xE9phone, ni identit\xE9 r\xE9elle) depuis vos discussions ou sessions vocales.",termsSessionTitle:"Jetons de session anonymes",termsSessionDesc:"Votre session utilise un identifiant anonyme c\xF4t\xE9 client uniquement pour maintenir le contexte, jamais li\xE9 \xE0 votre identit\xE9 r\xE9elle.",termsMemoryTitle:"Discussions \xE9ph\xE9m\xE8res vs Coffre Mimi",termsMemoryDesc:"Les discussions normales sont \xE9ph\xE9m\xE8res \u2014 fermer ou effacer le chat les d\xE9truit pour toujours. Les \xE9l\xE9ments enregistr\xE9s avec \xAB @kiku \xBB sont chiffr\xE9s et accessibles sur mimi.akropolys.cloud avec votre cl\xE9 secr\xE8te.",termsCookieTitle:"T\xE9l\xE9m\xE9trie du site h\xF4te",termsCookieDesc:"Le site h\xF4te sur lequel kiku est int\xE9gr\xE9 peut collecter des cookies et des donn\xE9es d'analyse selon sa propre politique de cookies, hors du contr\xF4le de kiku.",termsAgreeButton:"Accepter et continuer",termsAgreeCounting:"Accepter et continuer ({seconds}s)",termsPlaceholder:"Veuillez examiner et accepter la politique de confidentialit\xE9 et les conditions ci-dessus\u2026",whatHaveYouSaved:"Qu'avez-vous enregistr\xE9 ?",voiceHint:"Parlez simplement \u2014 je r\xE9pondrai d\xE8s que vous ferez une pause.",voiceModeExit:"Quitter le mode mains libres",voiceModeStart:"Conversation mains libres",voiceMuted:"En sourdine",voiceMutedHint:"Appuyez sur le micro pour parler \xE0 nouveau.",voicePhaseListening:"\xC9coute",voicePhaseSpeaking:"Parle",voicePhaseThinking:"R\xE9flexion"},hindi:{allSet:"\u0906\u092A \u0924\u0948\u092F\u093E\u0930 \u0939\u0948\u0902, {name}.",asWritten:"\u091C\u0948\u0938\u093E \u0932\u093F\u0916\u093E \u0939\u0948",captureAll:"\u0938\u092D\u0940 \u0915\u094B \u0915\u0948\u092A\u094D\u091A\u0930 \u0915\u0930\u0947\u0902 ({count})",captureAndRemember:"kiku \u2014 \u0915\u0948\u092A\u094D\u091A\u0930 & \u092F\u093E\u0926 \u0930\u0916\u0947\u0902",captureCurrentPage:"\u0935\u0930\u094D\u0924\u092E\u093E\u0928 \u092A\u0943\u0937\u094D\u0920 \u0915\u094B \u0915\u0948\u092A\u094D\u091A\u0930 \u0915\u0930\u0947\u0902",cardClickAnswer:"{name}",cardClickQuery:"\u0915\u0943\u092A\u092F\u093E {name}{price} \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u0905\u0927\u093F\u0915 \u092C\u0924\u093E\u0907\u090F \u2014 \u0907\u0938\u0915\u0947 \u092E\u0941\u0916\u094D\u092F \u0935\u093F\u0935\u0930\u0923 \u0915\u094D\u092F\u093E \u0939\u0948\u0902, \u092F\u0939 \u0915\u093F\u0938\u0915\u0947 \u0932\u093F\u090F \u0938\u092C\u0938\u0947 \u0909\u092A\u092F\u0941\u0915\u094D\u0924 \u0939\u0948, \u0914\u0930 \u092E\u0941\u091D\u0947 \u0915\u094D\u092F\u093E \u091C\u093E\u0928\u0928\u093E \u091A\u093E\u0939\u093F\u090F?",clearChat:"\u091A\u0948\u091F \u0938\u093E\u092B\u093C \u0915\u0930\u0947\u0902",defaultPlaceholder:"\u092E\u0941\u091D\u0938\u0947 \u0915\u0941\u091B \u092D\u0940 \u092A\u0942\u091B\u0947\u0902\u2026",deleteThis:"\u0907\u0938\u0947 \u0939\u091F\u093E\u090F\u0901",detailsTranslated:"\u0935\u093F\u0935\u0930\u0923 \u0905\u0928\u0941\u0935\u093E\u0926\u093F\u0924\u0964 \u0938\u0902\u0916\u094D\u092F\u093E\u090F\u0901 \u0914\u0930 \u0932\u093F\u0902\u0915 \u0920\u0940\u0915 \u0935\u0948\u0938\u0947 \u0939\u0940 \u0930\u0939\u0947\u0902\u0964",displayCapture:"\u0915\u0948\u092A\u094D\u091A\u0930 {name}",displayCaptureAll:"\u0938\u092D\u0940 \u0915\u094B \u0915\u0948\u092A\u094D\u091A\u0930 \u0915\u0930\u0947\u0902 ({count} \u0906\u0907\u091F\u092E)",displayDelete:"\u0907\u0938\u0947 \u0939\u091F\u093E\u090F\u0901",displayViewHistory:"\u0906\u092A\u0928\u0947 \u0915\u094D\u092F\u093E \u0938\u0939\u0947\u091C\u093E \u0939\u0948?",entityLangIntro:"\u092E\u0948\u0902 {lang} \u092E\u0947\u0902 \u0909\u0924\u094D\u0924\u0930 \u0926\u0942\u0901\u0917\u093E\u0964 \u092A\u0930\u093F\u0923\u093E\u092E \u0915\u093E\u0930\u094D\u0921 \u0907\u0938 \u0938\u093E\u0907\u091F \u0928\u0947 \u091C\u0948\u0938\u093E \u0932\u093F\u0916\u093E \u0939\u0948 \u0935\u0948\u0938\u093E \u0939\u0940 \u0930\u0939 \u0938\u0915\u0924\u0947 \u0939\u0948\u0902, \u092F\u093E \u0905\u0928\u0942\u0926\u093F\u0924 \u092D\u0940 \u0939\u094B \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964",entityLangPlaceholder:"\u090A\u092A\u0930 \u0926\u094B \u0915\u093E\u0930\u094D\u0921\u094B\u0902 \u092E\u0947\u0902 \u0938\u0947 \u090F\u0915 \u091A\u0941\u0928\u0947\u0902\u2026",errAccessRevoked:"\u0938\u094D\u091F\u094B\u0930 \u0926\u094D\u0935\u093E\u0930\u093E \u0906\u092A\u0915\u0947 \u0938\u0939\u093E\u092F\u0915 \u0924\u0915 \u092A\u0939\u0941\u0901\u091A \u0930\u0926\u094D\u0926 \u0915\u0930 \u0926\u0940 \u0917\u0908 \u0939\u0948\u0964",errAccountRequired:"\u091A\u0948\u091F \u0938\u0939\u093E\u092F\u0915 \u0915\u093E \u0909\u092A\u092F\u094B\u0917 \u091C\u093E\u0930\u0940 \u0930\u0916\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0915\u0943\u092A\u092F\u093E \u090F\u0915 \u0916\u093E\u0924\u093E \u092C\u0928\u093E\u090F\u0901\u0964",errShopperReplyLimit:"\u0906\u092A\u0928\u0947 \u0907\u0938 \u0938\u093E\u0907\u091F \u0915\u0947 \u0932\u093F\u090F \u0905\u092A\u0928\u0947 \u0916\u093E\u0924\u0947 \u0915\u0940 \u0909\u0924\u094D\u0924\u0930 \u0938\u0940\u092E\u093E \u0924\u0915 \u092A\u0939\u0941\u0901\u091A \u092C\u0928\u093E \u0932\u0940 \u0939\u0948\u0964",errStreamInterrupted:"\u0909\u0924\u094D\u0924\u0930 \u092C\u093E\u0927\u093F\u0924 \u0939\u094B \u0917\u092F\u093E\u0964 \u0915\u0943\u092A\u092F\u093E \u092A\u0941\u0928\u0903 \u092A\u094D\u0930\u092F\u093E\u0938 \u0915\u0930\u0947\u0902\u0964",errTokenLimit:"\u0906\u092A\u0928\u0947 \u0905\u092A\u0928\u0940 \u0909\u092A\u092F\u094B\u0917 \u0938\u0940\u092E\u093E \u0924\u0915 \u092A\u0939\u0941\u0901\u091A \u092C\u0928\u093E \u0932\u0940 \u0939\u0948\u0964 \u091C\u093E\u0930\u0940 \u0930\u0916\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0905\u092A\u0928\u0947 \u0921\u0948\u0936\u092C\u094B\u0930\u094D\u0921 \u092E\u0947\u0902 \u092C\u093F\u0932\u093F\u0902\u0917 \u0938\u0940\u092E\u093E \u0905\u092A\u0921\u0947\u091F \u0915\u0930\u0947\u0902\u0964",errTooManyRequests:"\u0938\u0939\u093E\u092F\u0915 \u0935\u0930\u094D\u0924\u092E\u093E\u0928 \u092E\u0947\u0902 \u092C\u0939\u0941\u0924 \u0905\u0927\u093F\u0915 \u0905\u0928\u0941\u0930\u094B\u0927 \u092A\u094D\u0930\u093E\u092A\u094D\u0924 \u0915\u0930 \u0930\u0939\u093E \u0939\u0948\u0964 \u0915\u0941\u091B \u0915\u094D\u0937\u0923 \u092C\u093E\u0926 \u092A\u0941\u0928\u0903 \u092A\u094D\u0930\u092F\u093E\u0938 \u0915\u0930\u0947\u0902\u0964",footerHint:"kiku \xB7 \u0935\u093E\u0938\u094D\u0924\u0935\u093F\u0915 \u0938\u092E\u092F \u092E\u0947\u0902 \u092A\u0942\u0930\u0947 \u0915\u0948\u091F\u0932\u0949\u0917 \u0915\u094B \u0916\u094B\u091C\u0924\u093E \u0939\u0948",greetReturning:"\u0928\u092E\u0938\u094D\u0924\u0947, {name}.",greetReturningLead:"\u0906\u091C \u092E\u0948\u0902 \u0906\u092A\u0915\u0947 \u0932\u093F\u090F \u0915\u094D\u092F\u093E \u0916\u094B\u091C\u0942\u0901?",howShouldResultsLook:"\u092A\u0930\u093F\u0923\u093E\u092E \u0915\u0948\u0938\u0947 \u0926\u093F\u0916\u0947\u0902?",inLanguage:"{lang} \u092E\u0947\u0902",keyAutoHide:"\u0938\u094D\u0935\u0924\u0903 {seconds}s \u092E\u0947\u0902 \u091B\u093F\u092A \u091C\u093E\u090F\u0917\u093E.",keyCopied:"\u0915\u0949\u092A\u0940 \u0915\u093F\u092F\u093E \u0917\u092F\u093E",keyCopyId:"\u0906\u0908\u0921\u0940 \u0915\u0949\u092A\u0940 \u0915\u0930\u0947\u0902",keyCopySecret:"\u0938\u0940\u0915\u094D\u0930\u0947\u091F \u0915\u0949\u092A\u0940 \u0915\u0930\u0947\u0902",keyCreateNew:"\u092E\u0948\u0902 \u0928\u092F\u093E \u0939\u0942\u0901 \u2014 \u090F\u0915 \u092C\u0928\u093E\u090F\u0902",keyCreating:"\u092C\u0928\u093E \u0930\u0939\u093E \u0939\u0942\u0901\u2026",keyDismiss:"\u092C\u0902\u0926 \u0915\u0930\u0947\u0902",keyPastePlaceholder:"\u0906\u092A\u0915\u093E \u0938\u093E\u0930\u094D\u0935\u091C\u0928\u093F\u0915 \u0906\u0908\u0921\u0940\u2026",keyPastePrompt:"\u0905\u092A\u0928\u093E \u0938\u093E\u0930\u094D\u0935\u091C\u0928\u093F\u0915 \u0906\u0908\u0921\u0940 \u092A\u0947\u0938\u094D\u091F \u0915\u0930\u0947\u0902 \u2014 \u092F\u093E \u090F\u0915 \u092C\u0928\u093E\u090F\u0902",keyPublicHint:"\u0907\u0938\u0947 \u0915\u093F\u0938\u0940 \u092D\u0940 \u0938\u093E\u0907\u091F \u092A\u0930 \u092A\u0947\u0938\u094D\u091F \u0915\u0930\u0947\u0902 \u0924\u093E\u0915\u093F \u0935\u0939\u0940 \u092E\u0947\u092E\u094B\u0930\u0940 \u092E\u0947\u0902 \u0938\u0939\u0947\u091C\u093E \u091C\u093E \u0938\u0915\u0947\u0964",keyPublicTitle:"\u0906\u092A\u0915\u093E \u0938\u093E\u0930\u094D\u0935\u091C\u0928\u093F\u0915 \u0906\u0908\u0921\u0940",keySecretHint:"\u0907\u0938\u0947 \u0928\u093F\u091C\u0940 \u0930\u0916\u0947\u0902 \u2014 \u0905\u092A\u0928\u0947 \u092E\u0947\u092E\u094B\u0930\u0940 \u0915\u094B \u0905\u0928\u0932\u0949\u0915 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0909\u092A\u092F\u094B\u0917 \u0915\u0930\u0947\u0902\u0964",keySecretTitle:"\u0906\u092A\u0915\u093E \u0938\u0940\u0915\u094D\u0930\u0947\u091F \u2014 \u0915\u0947\u0935\u0932 \u090F\u0915 \u092C\u093E\u0930 \u0926\u093F\u0916\u093E\u092F\u093E \u0917\u092F\u093E",keyUseMine:"\u092E\u0947\u0930\u0940 \u0906\u0908\u0921\u0940 \u0909\u092A\u092F\u094B\u0917 \u0915\u0930\u0947\u0902",kikuActionUnavailable:"\u0915\u094D\u0937\u092E\u093E \u0915\u0930\u0947\u0902 \u2014 \u092F\u0939 \u0915\u093E\u0930\u094D\u0930\u0935\u093E\u0908 \u0907\u0938 \u0938\u093E\u0907\u091F \u092A\u0930 \u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902 \u0939\u0948\u0964",kikuCaptureDbError:"\u0921\u0947\u091F\u093E\u092C\u0947\u0938 \u0924\u094D\u0930\u0941\u091F\u093F \u0915\u0947 \u0915\u093E\u0930\u0923 \u0915\u0948\u092A\u094D\u091A\u0930 \u0935\u093F\u092B\u0932 \u0930\u0939\u093E\u0964",kikuCaptureNoContext:"SDK \u0926\u094D\u0935\u093E\u0930\u093E \u0915\u094B\u0908 \u092A\u0947\u091C \u092F\u093E \u092A\u094D\u0930\u094B\u0921\u0915\u094D\u091F \u0915\u0949\u0928\u094D\u091F\u0947\u0915\u094D\u0938\u094D\u091F \u092A\u094D\u0930\u0926\u093E\u0928 \u0928\u0939\u0940\u0902 \u0915\u093F\u092F\u093E \u0917\u092F\u093E, \u0907\u0938\u0932\u093F\u090F \u0915\u0948\u092A\u094D\u091A\u0930 \u0935\u093F\u092B\u0932 \u0930\u0939\u093E\u0964",kikuCaptureNoUrl:"\u0915\u094B\u0908 \u0906\u0907\u091F\u092E \u0938\u0939\u0947\u091C\u093E \u0928\u0939\u0940\u0902 \u091C\u093E \u0938\u0915\u093E \u2014 \u0915\u094B\u0908 \u092D\u0940 \u0935\u0948\u0927 URL \u0928\u0939\u0940\u0902 \u0925\u093E\u0964",kikuCaptureNoneSelected:"\u0915\u0948\u092A\u094D\u091A\u0930 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0915\u094B\u0908 \u0906\u0907\u091F\u092E \u091A\u092F\u0928\u093F\u0924 \u0928\u0939\u0940\u0902 \u0915\u093F\u092F\u093E \u0917\u092F\u093E\u0964",kikuDeleteDbError:"\u0921\u0947\u091F\u093E\u092C\u0947\u0938 \u0924\u094D\u0930\u0941\u091F\u093F \u0915\u0947 \u0915\u093E\u0930\u0923 \u0939\u091F\u093E\u0928\u093E \u0935\u093F\u092B\u0932 \u0930\u0939\u093E\u0964",kikuDeleteDone:"\u0907\u0938\u0947 \u0906\u092A\u0915\u0947 \u0938\u0939\u0947\u091C\u0947 \u0917\u090F \u0906\u0907\u091F\u092E\u094D\u0938 \u0938\u0947 \u0939\u091F\u093E \u0926\u093F\u092F\u093E \u0917\u092F\u093E\u0964",kikuDeleteNoContext:"\u0939\u091F\u093E\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0915\u094B\u0908 \u092A\u0947\u091C \u0915\u0949\u0928\u094D\u091F\u0947\u0915\u094D\u0938\u094D\u091F \u092A\u094D\u0930\u0926\u093E\u0928 \u0928\u0939\u0940\u0902 \u0915\u093F\u092F\u093E \u0917\u092F\u093E, \u0907\u0938\u0932\u093F\u090F \u0939\u091F\u093E\u0928\u093E \u0935\u093F\u092B\u0932 \u0930\u0939\u093E\u0964",kikuMemoryIntro:"\u0906\u092A\u0928\u0947 \u0935\u093F\u092D\u093F\u0928\u094D\u0928 \u0938\u093E\u0907\u091F\u094B\u0902 \u092A\u0930 \u091C\u094B \u092D\u0940 \u0915\u0948\u092A\u094D\u091A\u0930 \u0915\u093F\u092F\u093E \u0939\u0948, \u0935\u0939 \u0906\u092A\u0915\u0947 \u0928\u093F\u091C\u0940 \u092E\u0947\u092E\u094B\u0930\u0940 \u092E\u0947\u0902 \u0930\u0939\u0924\u093E \u0939\u0948\u0964 \u0907\u0938\u0947 \u0905\u092A\u0928\u0947 \u0938\u0940\u0915\u094D\u0930\u0947\u091F \u0938\u0947 \u0905\u0928\u0932\u0949\u0915 \u0915\u0930\u0947\u0902:",kikuMintNeeded:"\u0938\u093E\u0907\u091F\u094B\u0902 \u0915\u0947 \u092C\u0940\u091A \u0906\u0907\u091F\u092E\u094D\u0938 \u0938\u0939\u0947\u091C\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0906\u092A\u0915\u094B \u090F\u0915 \u0915\u093F\u0915\u0941 \u0915\u0941\u0902\u091C\u0940 \u091A\u093E\u0939\u093F\u090F \u2014 \u092E\u0948\u0902 \u0906\u092A\u0915\u0947 \u0932\u093F\u090F \u090F\u0915 \u092C\u0928\u093E\u090A\u0901\u0917\u093E\u0964 \u092F\u0939 \u0915\u0947\u0935\u0932 \u090F\u0915 \u092C\u093E\u0930 \u0926\u093F\u0916\u093E\u092F\u093E \u091C\u093E\u0924\u093E \u0939\u0948, \u0907\u0938\u0932\u093F\u090F \u0907\u0938\u0947 \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u091C\u0917\u0939 \u092A\u0930 \u0930\u0916\u0947\u0902\u0964",kikuMintOffer:"\u092E\u0948\u0902 \u0907\u0938\u0947 \u0906\u092A\u0915\u0947 \u0932\u093F\u090F \u0930\u0916 \u0938\u0915\u0924\u093E \u0939\u0942\u0901 \u0914\u0930 \u0938\u093E\u0907\u091F\u094B\u0902 \u0915\u0947 \u092C\u0940\u091A \u0906\u092A\u0915\u0947 \u0938\u093E\u0925 \u0932\u0947 \u091C\u093E \u0938\u0915\u0924\u093E \u0939\u0942\u0901 \u2014 \u092E\u0948\u0902 \u0906\u092A\u0915\u0947 \u0932\u093F\u090F \u090F\u0915 \u0915\u093F\u0915\u0941 \u0915\u0941\u0902\u091C\u0940 \u092C\u0928\u093E\u090A\u0901\u0917\u093E\u0964 \u092F\u0939 \u0915\u0947\u0935\u0932 \u090F\u0915 \u092C\u093E\u0930 \u0926\u093F\u0916\u093E\u092F\u093E \u091C\u093E\u0924\u093E \u0939\u0948, \u0907\u0938\u0932\u093F\u090F \u0907\u0938\u0947 \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u091C\u0917\u0939 \u092A\u0930 \u0930\u0916\u0947\u0902\u0964",kikuNeedKeyToUpdate:"\u0905\u092A\u0928\u0940 \u0915\u093F\u0915\u0941 \u0915\u0941\u0902\u091C\u0940 \u0926\u0930\u094D\u091C \u0915\u0930\u0947\u0902 \u0924\u093E\u0915\u093F \u092E\u0948\u0902 \u0906\u092A\u0915\u0947 \u0938\u0939\u0947\u091C\u0947 \u0917\u090F \u0906\u0907\u091F\u092E\u094D\u0938 \u0915\u094B \u0916\u094B\u091C \u0914\u0930 \u0905\u092A\u0921\u0947\u091F \u0915\u0930 \u0938\u0915\u0942\u0901\u0964",namePlaceholder:"\u0905\u092A\u0928\u093E \u0928\u093E\u092E \u091F\u093E\u0907\u092A \u0915\u0930\u0947\u0902\u2026",nameStepAsk:"\u092E\u0948\u0902 \u0906\u092A\u0915\u094B \u0915\u094D\u092F\u093E \u0915\u0939\u0942\u0901?",nameStepLead:"\u092E\u0948\u0902 \u0906\u092A\u0915\u0947 \u0932\u093F\u090F \u0915\u0941\u091B \u092D\u0940 \u0916\u094B\u091C, \u0935\u093F\u091C\u093C\u0941\u0905\u0932\u093E\u0907\u091C\u093C \u092F\u093E \u0915\u0948\u092A\u094D\u091A\u0930 \u0915\u0930 \u0938\u0915\u0924\u093E \u0939\u0942\u0901 \u2014 \u0907\u0938 \u0938\u093E\u0907\u091F \u092A\u0930 \u092F\u093E \u0915\u093F\u0938\u0940 \u0905\u0928\u094D\u092F \u092A\u0930\u0964",nameStepTitle:"\u0906\u092A\u0938\u0947 \u092E\u093F\u0932\u0915\u0930 \u0916\u0941\u0936\u0940 \u0939\u0941\u0908\u0964",namesAsWritten:"\u0928\u093E\u092E \u0914\u0930 \u0935\u093F\u0935\u0930\u0923 \u0920\u0940\u0915 \u0909\u0938\u0940 \u0924\u0930\u0939 \u091C\u0948\u0938\u0947 \u0938\u093E\u0907\u091F \u092A\u0930 \u0938\u0942\u091A\u0940\u092C\u0926\u094D\u0927 \u0939\u0948\u0902\u0964",pillCompareTop2:"\u0936\u0940\u0930\u094D\u0937 2 \u0915\u0940 \u0924\u0941\u0932\u0928\u093E \u0915\u0930\u0947\u0902",pillCompareTop2Query:"{a} \u0914\u0930 {b} \u0915\u0940 \u0924\u0941\u0932\u0928\u093E \u0915\u0930\u0947\u0902",pillFindAlternatives:"\u0935\u093F\u0915\u0932\u094D\u092A \u0916\u094B\u091C\u0947\u0902",pillFindAlternativesQuery:"{name} \u0915\u0947 \u0905\u091A\u094D\u091B\u0947 \u0935\u093F\u0915\u0932\u094D\u092A \u0915\u094D\u092F\u093E \u0939\u0948\u0902?",pillMoreOn:"{name} \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u0905\u0927\u093F\u0915",pillMoreOnQuery:"\u0915\u0943\u092A\u092F\u093E {name} \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u0905\u0927\u093F\u0915 \u092C\u0924\u093E\u0907\u090F",pillRecommend:"\u0915\u0941\u091B \u0938\u0941\u091D\u093E\u090F\u0901",pillRecommendQuery:"\u092E\u0947\u0930\u0947 \u0932\u093F\u090F \u0906\u092A \u0915\u094D\u092F\u093E \u0938\u0941\u091D\u093E\u090F\u0902\u0917\u0947?",pillShowPopular:"\u0932\u094B\u0915\u092A\u094D\u0930\u093F\u092F \u0906\u0907\u091F\u092E \u0926\u093F\u0916\u093E\u090F\u0901",pillShowPopularQuery:"\u0906\u092A\u0915\u0947 \u0938\u092C\u0938\u0947 \u0932\u094B\u0915\u092A\u094D\u0930\u093F\u092F \u0906\u0907\u091F\u092E \u0915\u094C\u0928 \u0938\u0947 \u0939\u0948\u0902?",pillSimilarOptions:"\u0938\u092E\u093E\u0928 \u0935\u093F\u0915\u0932\u094D\u092A",pillSimilarOptionsQuery:"{name} \u091C\u0948\u0938\u093E \u0914\u0930 \u0926\u093F\u0916\u093E\u0907\u090F",pillUnder:"{amount} \u0938\u0947 \u0915\u092E",pillUnderQuery:"{amount} \u0938\u0947 \u0915\u092E \u0935\u093F\u0915\u0932\u094D\u092A \u0926\u093F\u0916\u093E\u0907\u090F",pillWhichBest:"\u0915\u094C\u0928 \u0938\u092C\u0938\u0947 \u0905\u091A\u094D\u091B\u093E \u0939\u0948?",pillWhichBestQuery:"\u0906\u092A \u0915\u094C\u0928 \u0938\u093E \u0938\u0941\u091D\u093E\u090F\u0902\u0917\u0947 \u0914\u0930 \u0915\u094D\u092F\u094B\u0902?",replyingOriginal:"{lang} \u092E\u0947\u0902 \u0909\u0924\u094D\u0924\u0930 \u0926\u0947 \u0930\u0939\u093E \u0939\u0942\u0901, \u092A\u0930\u093F\u0923\u093E\u092E \u0938\u093E\u0907\u091F \u0915\u0947 \u0932\u093F\u0916\u0947 \u0905\u0928\u0941\u0938\u093E\u0930\u0964 \u092E\u0941\u091D\u0938\u0947 \u0915\u0941\u091B \u092D\u0940 \u092A\u0942\u091B\u0947\u0902\u0964",replyingTranslated:"{lang} \u092E\u0947\u0902 \u0909\u0924\u094D\u0924\u0930 \u0926\u0947 \u0930\u0939\u093E \u0939\u0942\u0901, \u092A\u0930\u093F\u0923\u093E\u092E \u092D\u0940 \u0905\u0928\u0942\u0926\u093F\u0924 \u0939\u0948\u0902\u0964 \u092E\u0941\u091D\u0938\u0947 \u0915\u0941\u091B \u092D\u0940 \u092A\u0942\u091B\u0947\u0902\u0964",statusSent:"\u092D\u0947\u091C\u093E \u0917\u092F\u093E",statusStopped:"\u092D\u0947\u091C\u093E \u0917\u092F\u093E \xB7 \u0909\u0924\u094D\u0924\u0930 \u0930\u094B\u0915 \u0926\u093F\u092F\u093E \u0917\u092F\u093E",thinking:"\u0938\u094B\u091A \u0930\u0939\u093E \u0939\u0942\u0901",thoughtForSeconds:"{duration} \u0924\u0915 \u0938\u094B\u091A\u093E",thoughtProcess:"\u0935\u093F\u091A\u093E\u0930 \u092A\u094D\u0930\u0915\u094D\u0930\u093F\u092F\u093E",vizUnavailable:"\u092A\u0942\u0930\u094D\u0935\u093E\u0935\u0932\u094B\u0915\u0928 \u0932\u094B\u0921 \u0928\u0939\u0940\u0902 \u0939\u094B \u0938\u0915\u093E\u0964",termsStepTitle:"\u0917\u094B\u092A\u0928\u0940\u092F\u0924\u093E \u0914\u0930 \u0909\u092A\u092F\u094B\u0917 \u0915\u0940 \u0936\u0930\u094D\u0924\u0947\u0902",termsStepSubtitle:"\u092A\u093E\u0930\u0926\u0930\u094D\u0936\u0940, \u0905\u091C\u094D\u091E\u093E\u0924 \u0914\u0930 \u0936\u0942\u0928\u094D\u092F \u0935\u094D\u092F\u0915\u094D\u0924\u093F\u0917\u0924 \u092A\u0939\u091A\u093E\u0928 \u0921\u0947\u091F\u093E\u0964",termsPiiTitle:"\u0936\u0942\u0928\u094D\u092F \u0935\u094D\u092F\u0915\u094D\u0924\u093F\u0917\u0924 \u0921\u0947\u091F\u093E \u0938\u0902\u0917\u094D\u0930\u0939",termsPiiDesc:"\u0939\u092E \u0906\u092A\u0915\u0940 \u092C\u093E\u0924\u091A\u0940\u0924 \u092F\u093E \u0935\u0949\u092F\u0938 \u0938\u0924\u094D\u0930\u094B\u0902 \u0938\u0947 \u0935\u094D\u092F\u0915\u094D\u0924\u093F\u0917\u0924 \u092A\u0939\u091A\u093E\u0928 \u092F\u094B\u0917\u094D\u092F \u091C\u093E\u0928\u0915\u093E\u0930\u0940 (\u0915\u094B\u0908 \u0908\u092E\u0947\u0932, \u092B\u093C\u094B\u0928 \u0928\u0902\u092C\u0930 \u092F\u093E \u0935\u093E\u0938\u094D\u0924\u0935\u093F\u0915 \u092A\u0939\u091A\u093E\u0928 \u0928\u0939\u0940\u0902) \u090F\u0915\u0924\u094D\u0930 \u092F\u093E \u0938\u0902\u0917\u094D\u0930\u0939\u0940\u0924 \u0928\u0939\u0940\u0902 \u0915\u0930\u0924\u0947 \u0939\u0948\u0902\u0964",termsSessionTitle:"\u0905\u091C\u094D\u091E\u093E\u0924 \u0938\u0924\u094D\u0930 \u091F\u094B\u0915\u0928",termsSessionDesc:"\u0906\u092A\u0915\u093E \u0938\u0924\u094D\u0930 \u0915\u0947\u0935\u0932 \u0938\u0902\u0926\u0930\u094D\u092D \u092C\u0928\u093E\u090F \u0930\u0916\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u090F\u0915 \u0905\u0928\u093E\u092E \u0915\u094D\u0932\u093E\u0907\u0902\u091F \u091F\u094B\u0915\u0928 \u0915\u093E \u0909\u092A\u092F\u094B\u0917 \u0915\u0930\u0924\u093E \u0939\u0948\u0964 \u092F\u0939 \u0906\u092A\u0915\u0940 \u0935\u093E\u0938\u094D\u0924\u0935\u093F\u0915 \u092A\u0939\u091A\u093E\u0928 \u0938\u0947 \u0915\u092D\u0940 \u0928\u0939\u0940\u0902 \u091C\u0941\u0921\u093C\u0924\u093E\u0964",termsMemoryTitle:"\u0905\u0938\u094D\u0925\u093E\u092F\u0940 \u091A\u0948\u091F \u092C\u0928\u093E\u092E \u092E\u093F\u092E\u0940 \u0935\u0949\u0932\u094D\u091F",termsMemoryDesc:'\u0928\u093F\u092F\u092E\u093F\u0924 \u091A\u0948\u091F \u0905\u0938\u094D\u0925\u093E\u092F\u0940 \u0939\u0948\u0902 \u2014 \u091A\u0948\u091F \u092C\u0902\u0926 \u0915\u0930\u0928\u0947 \u092F\u093E \u0938\u093E\u092B\u093C \u0915\u0930\u0928\u0947 \u092A\u0930 \u0935\u0947 \u0939\u092E\u0947\u0936\u093E \u0915\u0947 \u0932\u093F\u090F \u0938\u092E\u093E\u092A\u094D\u0924 \u0939\u094B \u091C\u093E\u0924\u0940 \u0939\u0948\u0902\u0964 "@kiku" \u0938\u0947 \u0938\u0939\u0947\u091C\u0947 \u0917\u090F \u0906\u0907\u091F\u092E \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u0939\u0948\u0902 \u0914\u0930 mimi.akropolys.cloud \u092A\u0930 \u0906\u092A\u0915\u0940 \u0917\u0941\u092A\u094D\u0924 \u0915\u0941\u0902\u091C\u0940 \u0938\u0947 \u0916\u094B\u0932\u0947 \u091C\u093E \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964',termsCookieTitle:"\u0939\u094B\u0938\u094D\u091F \u0935\u0947\u092C\u0938\u093E\u0907\u091F \u091F\u0947\u0932\u0940\u092E\u0947\u091F\u094D\u0930\u0940",termsCookieDesc:"\u091C\u093F\u0938 \u0935\u0947\u092C\u0938\u093E\u0907\u091F \u092A\u0930 kiku \u090F\u092E\u094D\u092C\u0947\u0921\u0947\u0921 \u0939\u0948, \u0935\u0939 \u0905\u092A\u0928\u0940 \u0938\u094D\u0935\u092F\u0902 \u0915\u0940 \u0915\u0941\u0915\u0940 \u0928\u0940\u0924\u093F \u0915\u0947 \u0905\u0928\u0941\u0938\u093E\u0930 \u0915\u0941\u0915\u0940\u091C\u093C \u0914\u0930 \u090F\u0928\u093E\u0932\u093F\u091F\u093F\u0915\u094D\u0938 \u090F\u0915\u0924\u094D\u0930 \u0915\u0930 \u0938\u0915\u0924\u0940 \u0939\u0948\u0964",termsAgreeButton:"\u0938\u0939\u092E\u0924 \u0939\u094B\u0902 \u0914\u0930 \u0906\u0917\u0947 \u092C\u0922\u093C\u0947\u0902",termsAgreeCounting:"\u0938\u0939\u092E\u0924 \u0939\u094B\u0902 \u0914\u0930 \u0906\u0917\u0947 \u092C\u0922\u093C\u0947\u0902 ({seconds}s)",termsPlaceholder:"\u0915\u0943\u092A\u092F\u093E \u090A\u092A\u0930 \u0926\u0940 \u0917\u0908 \u0917\u094B\u092A\u0928\u0940\u092F\u0924\u093E \u0914\u0930 \u0936\u0930\u094D\u0924\u094B\u0902 \u0915\u0940 \u0938\u092E\u0940\u0915\u094D\u0937\u093E \u0915\u0930\u0947\u0902 \u0914\u0930 \u0938\u094D\u0935\u0940\u0915\u093E\u0930 \u0915\u0930\u0947\u0902\u2026",whatHaveYouSaved:"\u0906\u092A\u0928\u0947 \u0915\u094D\u092F\u093E \u0938\u0939\u0947\u091C\u093E \u0939\u0948?",micDenied:"\u092E\u093E\u0907\u0915\u094D\u0930\u094B\u092B\u093C\u094B\u0928 \u092C\u094D\u0932\u0949\u0915 \u0939\u0948\u0964 \u0907\u0938 \u0938\u093E\u0907\u091F \u0915\u0947 \u0932\u093F\u090F \u092E\u093E\u0907\u0915 \u090F\u0915\u094D\u0938\u0947\u0938 \u0915\u0940 \u0905\u0928\u0941\u092E\u0924\u093F \u0926\u0947\u0902, \u092B\u093F\u0930 \u092A\u0941\u0928\u0903 \u092A\u094D\u0930\u092F\u093E\u0938 \u0915\u0930\u0947\u0902\u0964",micFailed:"\u0938\u0941\u0928\u093E\u0908 \u0928\u0939\u0940\u0902 \u0926\u093F\u092F\u093E\u0964 \u092A\u0941\u0928\u0903 \u092A\u094D\u0930\u092F\u093E\u0938 \u0915\u0930\u0947\u0902\u0964",micInsecure:"\u0935\u0949\u092F\u0938 \u0915\u0947 \u0932\u093F\u090F \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 (https) \u0915\u0928\u0947\u0915\u094D\u0936\u0928 \u0906\u0935\u0936\u094D\u092F\u0915 \u0939\u0948\u0964",micLangUnsupported:"\u092F\u0939 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u0905\u092D\u0940 \u0907\u0938 \u092D\u093E\u0937\u093E \u0915\u094B \u091F\u094D\u0930\u093E\u0902\u0938\u0915\u094D\u0930\u093E\u0907\u092C \u0928\u0939\u0940\u0902 \u0915\u0930 \u0938\u0915\u0924\u093E\u0964 \u0907\u0938\u0915\u0947 \u092C\u091C\u093E\u092F \u091F\u093E\u0907\u092A \u0915\u0930\u0947\u0902\u0964",micMissing:"\u0915\u094B\u0908 \u092E\u093E\u0907\u0915\u094D\u0930\u094B\u092B\u093C\u094B\u0928 \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E\u0964",micNetwork:"\u0935\u0949\u092F\u0938 \u0915\u0947 \u0932\u093F\u090F \u0907\u0902\u091F\u0930\u0928\u0947\u091F \u0915\u0928\u0947\u0915\u094D\u0936\u0928 \u0906\u0935\u0936\u094D\u092F\u0915 \u0939\u0948\u0964 \u0905\u092A\u0928\u093E \u0915\u0928\u0947\u0915\u094D\u0936\u0928 \u091C\u093E\u0902\u091A\u0947\u0902 \u0914\u0930 \u092A\u0941\u0928\u0903 \u092A\u094D\u0930\u092F\u093E\u0938 \u0915\u0930\u0947\u0902\u0964",micNoSpeech:"\u0915\u0941\u091B \u0938\u0941\u0928\u093E\u0908 \u0928\u0939\u0940\u0902 \u0926\u093F\u092F\u093E\u0964 \u0915\u0943\u092A\u092F\u093E \u092E\u093E\u0907\u0915 \u0915\u0947 \u092A\u093E\u0938 \u0906\u0915\u0930 \u0926\u094B\u092C\u093E\u0930\u093E \u092C\u094B\u0932\u0947\u0902\u0964",vizDisclaimerImage:"\u0915\u0943\u0924\u094D\u0930\u093F\u092E \u092C\u0941\u0926\u094D\u0927\u093F\u092E\u0924\u094D\u0924\u093E (AI) \u0926\u094D\u0935\u093E\u0930\u093E \u0928\u093F\u0930\u094D\u092E\u093F\u0924 \u2014 \u0930\u0902\u0917, \u0906\u0915\u093E\u0930 \u0914\u0930 \u0938\u094D\u0925\u093F\u0924\u093F \u0935\u093E\u0938\u094D\u0924\u0935\u093F\u0915 \u0909\u0924\u094D\u092A\u093E\u0926 \u0938\u0947 \u092D\u093F\u0928\u094D\u0928 \u0939\u094B \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964",vizDisclaimerVideo:"\u0915\u0943\u0924\u094D\u0930\u093F\u092E \u092C\u0941\u0926\u094D\u0927\u093F\u092E\u0924\u094D\u0924\u093E (AI) \u0926\u094D\u0935\u093E\u0930\u093E \u0928\u093F\u0930\u094D\u092E\u093F\u0924 \u2014 \u0930\u0902\u0917, \u0906\u0915\u093E\u0930 \u0914\u0930 \u0917\u0924\u093F \u0935\u093E\u0938\u094D\u0924\u0935\u093F\u0915 \u0909\u0924\u094D\u092A\u093E\u0926 \u0938\u0947 \u092D\u093F\u0928\u094D\u0928 \u0939\u094B \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964",voiceHint:"\u092C\u0938 \u092C\u094B\u0932\u0947\u0902 \u2014 \u091C\u092C \u0906\u092A \u0930\u0941\u0915\u0947\u0902\u0917\u0947 \u0924\u094B \u092E\u0948\u0902 \u0909\u0924\u094D\u0924\u0930 \u0926\u0942\u0902\u0917\u093E\u0964",voiceListening:"\u0938\u0941\u0928 \u0930\u0939\u093E \u0939\u0948\u2026 \u0930\u094B\u0915\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u092E\u093E\u0907\u0915 \u092A\u0930 \u091F\u0948\u092A \u0915\u0930\u0947\u0902",voiceModeExit:"\u0939\u0948\u0902\u0921\u094D\u0938-\u092B\u094D\u0930\u0940 \u0938\u0947 \u092C\u093E\u0939\u0930 \u0928\u093F\u0915\u0932\u0947\u0902",voiceModeStart:"\u0939\u0948\u0902\u0921\u094D\u0938-\u092B\u094D\u0930\u0940 \u092C\u093E\u0924\u091A\u0940\u0924",voiceMuted:"\u092E\u094D\u092F\u0942\u091F \u0915\u093F\u092F\u093E \u0917\u092F\u093E",voiceMutedHint:"\u0926\u094B\u092C\u093E\u0930\u093E \u092C\u094B\u0932\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u092E\u093E\u0907\u0915\u094D\u0930\u094B\u092B\u093C\u094B\u0928 \u092A\u0930 \u091F\u0948\u092A \u0915\u0930\u0947\u0902\u0964",voicePhaseListening:"\u0938\u0941\u0928 \u0930\u0939\u093E \u0939\u0948",voicePhaseSpeaking:"\u092C\u094B\u0932 \u0930\u0939\u093E \u0939\u0948",voicePhaseThinking:"\u0938\u094B\u091A \u0930\u0939\u093E \u0939\u0948",voiceSending:"\u0938\u092E\u091D \u0917\u092F\u093E \u2014 \u092D\u0947\u091C\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948\u2026"},japanese:{allSet:"\u6E96\u5099\u304C\u5B8C\u4E86\u3057\u307E\u3057\u305F\u3001{name}\u3055\u3093\u3002",asWritten:"\u30B5\u30A4\u30C8\u306E\u539F\u6587\u901A\u308A",captureAll:"\u3059\u3079\u3066\u4FDD\u5B58 ({count})",captureAndRemember:"kiku \u2014 \u4FDD\u5B58\u3068\u8A18\u61B6",captureCurrentPage:"\u73FE\u5728\u306E\u30DA\u30FC\u30B8\u3092\u4FDD\u5B58",cardClickAnswer:"{name}",cardClickQuery:"{name}{price} \u306B\u3064\u3044\u3066\u8A73\u3057\u304F\u6559\u3048\u3066\u304F\u3060\u3055\u3044 \u2014 \u4E3B\u306A\u7279\u5FB4\u3001\u3069\u3093\u306A\u4EBA\u306B\u5411\u3044\u3066\u3044\u308B\u304B\u3001\u77E5\u3063\u3066\u304A\u304F\u3079\u304D\u3053\u3068\u306F\u4F55\u3067\u3059\u304B\uFF1F",clearChat:"\u30C1\u30E3\u30C3\u30C8\u3092\u6D88\u53BB",defaultPlaceholder:"\u4F55\u3067\u3082\u304A\u805E\u304D\u304F\u3060\u3055\u3044\u2026",deleteThis:"\u3053\u308C\u3092\u524A\u9664",detailsTranslated:"\u8A73\u7D30\u3092\u7FFB\u8A33\u3057\u307E\u3057\u305F\u3002\u4FA1\u683C\u3084\u30EA\u30F3\u30AF\u306F\u30B5\u30A4\u30C8\u306E\u8868\u8A18\u305D\u306E\u307E\u307E\u3067\u3059\u3002",displayCapture:"{name} \u3092\u4FDD\u5B58",displayCaptureAll:"\u3059\u3079\u3066\u4FDD\u5B58\uFF08{count}\u4EF6\uFF09",displayDelete:"\u3053\u308C\u3092\u524A\u9664",displayViewHistory:"\u4F55\u3092\u4FDD\u5B58\u3057\u307E\u3057\u305F\u304B\uFF1F",entityLangIntro:"{lang}\u3067\u8FD4\u7B54\u3057\u307E\u3059\u3002\u691C\u7D22\u7D50\u679C\u306E\u30AB\u30FC\u30C9\u306F\u30B5\u30A4\u30C8\u306E\u539F\u6587\u306E\u307E\u307E\u8868\u793A\u3059\u308B\u3053\u3068\u3082\u3001\u7FFB\u8A33\u3057\u3066\u8868\u793A\u3059\u308B\u3053\u3068\u3082\u3067\u304D\u307E\u3059\u3002",entityLangPlaceholder:"\u4E0A\u306E2\u3064\u306E\u30AB\u30FC\u30C9\u304B\u30891\u3064\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u2026",errAccessRevoked:"\u30B9\u30C8\u30A2\u306B\u3088\u3063\u3066\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u6A29\u304C\u53D6\u308A\u6D88\u3055\u308C\u307E\u3057\u305F\u3002",errAccountRequired:"\u30C1\u30E3\u30C3\u30C8\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u3092\u5F15\u304D\u7D9A\u304D\u3054\u5229\u7528\u3044\u305F\u3060\u304F\u306B\u306F\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u4F5C\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002",errShopperReplyLimit:"\u3053\u306E\u30B5\u30A4\u30C8\u3067\u306E\u3042\u306A\u305F\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u8FD4\u7B54\u4E0A\u9650\u306B\u9054\u3057\u307E\u3057\u305F\u3002",errStreamInterrupted:"\u8FD4\u7B54\u304C\u4E2D\u65AD\u3055\u308C\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",errTokenLimit:"\u5229\u7528\u4E0A\u9650\u306B\u9054\u3057\u307E\u3057\u305F\u3002\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u3067\u5229\u7528\u4E0A\u9650\u3092\u66F4\u65B0\u3057\u3066\u7D9A\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002",errTooManyRequests:"\u73FE\u5728\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u96C6\u4E2D\u3057\u3066\u3044\u307E\u3059\u3002\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",footerHint:"kiku \xB7 \u30AB\u30BF\u30ED\u30B0\u5168\u4F53\u3092\u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u3067\u691C\u7D22",greetReturning:"\u3053\u3093\u306B\u3061\u306F\u3001{name}\u3055\u3093\u3002",greetReturningLead:"\u4ECA\u65E5\u306F\u4F55\u3092\u304A\u63A2\u3057\u3067\u3059\u304B\uFF1F",howShouldResultsLook:"\u691C\u7D22\u7D50\u679C\u306F\u3069\u306E\u3088\u3046\u306B\u8868\u793A\u3057\u307E\u3059\u304B\uFF1F",inLanguage:"{lang}\u3067",keyAutoHide:"{seconds}\u79D2\u5F8C\u306B\u81EA\u52D5\u3067\u9589\u3058\u307E\u3059\u3002",keyCopied:"\u30B3\u30D4\u30FC\u3057\u307E\u3057\u305F",keyCopyId:"ID\u3092\u30B3\u30D4\u30FC",keyCopySecret:"\u30B7\u30FC\u30AF\u30EC\u30C3\u30C8\u3092\u30B3\u30D4\u30FC",keyCreateNew:"\u521D\u3081\u3066\u5229\u7528 \u2014 \u65B0\u898F\u4F5C\u6210",keyCreating:"\u4F5C\u6210\u4E2D\u2026",keyDismiss:"\u9589\u3058\u308B",keyPastePlaceholder:"\u516C\u958BID\u3092\u5165\u529B\u2026",keyPastePrompt:"\u516C\u958BID\u3092\u8CBC\u308A\u4ED8\u3051\u308B\u304B\u3001\u65B0\u898F\u4F5C\u6210\u3057\u3066\u304F\u3060\u3055\u3044",keyPublicHint:"\u3069\u306E\u30B5\u30A4\u30C8\u3067\u3082\u3053\u308C\u3092\u8CBC\u308A\u4ED8\u3051\u308B\u3068\u3001\u540C\u3058\u30E1\u30E2\u30EA\u30FC\u306B\u4FDD\u5B58\u3067\u304D\u307E\u3059\u3002",keyPublicTitle:"\u3042\u306A\u305F\u306E\u516C\u958BID",keySecretHint:"\u5927\u5207\u306B\u4FDD\u7BA1\u3057\u3066\u304F\u3060\u3055\u3044 \u2014 \u30E1\u30E2\u30EA\u30FC\u306E\u30ED\u30C3\u30AF\u89E3\u9664\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002",keySecretTitle:"\u3042\u306A\u305F\u306E\u30B7\u30FC\u30AF\u30EC\u30C3\u30C8 \u2014 1\u5EA6\u3060\u3051\u8868\u793A\u3055\u308C\u307E\u3059",keyUseMine:"\u81EA\u5206\u306EID\u3092\u4F7F\u7528",kikuActionUnavailable:"\u7533\u3057\u8A33\u3042\u308A\u307E\u305B\u3093\u3002\u3053\u306E\u30B5\u30A4\u30C8\u3067\u306F\u305D\u306E\u64CD\u4F5C\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002",kikuCaptureDbError:"\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30A8\u30E9\u30FC\u306E\u305F\u3081\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002",kikuCaptureNoContext:"\u30DA\u30FC\u30B8\u60C5\u5831\u304C\u63D0\u4F9B\u3055\u308C\u306A\u304B\u3063\u305F\u305F\u3081\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002",kikuCaptureNoUrl:"\u6709\u52B9\u306AURL\u304C\u306A\u3044\u305F\u3081\u3001\u30A2\u30A4\u30C6\u30E0\u3092\u4FDD\u5B58\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002",kikuCaptureNoneSelected:"\u4FDD\u5B58\u3059\u308B\u30A2\u30A4\u30C6\u30E0\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002",kikuDeleteDbError:"\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30A8\u30E9\u30FC\u306E\u305F\u3081\u524A\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002",kikuDeleteDone:"\u4FDD\u5B58\u3057\u305F\u30A2\u30A4\u30C6\u30E0\u304B\u3089\u524A\u9664\u3057\u307E\u3057\u305F\u3002",kikuDeleteNoContext:"\u524A\u9664\u5BFE\u8C61\u3092\u7279\u5B9A\u3059\u308B\u305F\u3081\u306E\u30DA\u30FC\u30B8\u60C5\u5831\u304C\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002",kikuMemoryIntro:"\u8907\u6570\u30B5\u30A4\u30C8\u3067\u4FDD\u5B58\u3057\u305F\u3059\u3079\u3066\u306E\u30A2\u30A4\u30C6\u30E0\u306F\u30D7\u30E9\u30A4\u30D9\u30FC\u30C8\u30E1\u30E2\u30EA\u30FC\u306B\u4FDD\u6301\u3055\u308C\u307E\u3059\u3002\u30B7\u30FC\u30AF\u30EC\u30C3\u30C8\u3067\u30ED\u30C3\u30AF\u89E3\u9664:",kikuMintNeeded:"\u30B5\u30A4\u30C8\u3092\u307E\u305F\u3044\u3067\u30A2\u30A4\u30C6\u30E0\u3092\u4FDD\u5B58\u3059\u308B\u306B\u306Fkiku\u30AD\u30FC\u304C\u5FC5\u8981\u3067\u3059\u3002\u65B0\u3057\u304F\u767A\u884C\u3057\u307E\u3059\u30021\u5EA6\u3057\u304B\u8868\u793A\u3055\u308C\u306A\u3044\u305F\u3081\u3001\u5B89\u5168\u306A\u5834\u6240\u306B\u4FDD\u5B58\u3057\u3066\u304F\u3060\u3055\u3044\u3002",kikuMintOffer:"\u30A2\u30A4\u30C6\u30E0\u3092\u4FDD\u6301\u3057\u3066\u4ED6\u306E\u30B5\u30A4\u30C8\u3067\u3082\u5F15\u304D\u7D99\u3050\u3053\u3068\u304C\u3067\u304D\u307E\u3059 \u2014 kiku\u30AD\u30FC\u3092\u767A\u884C\u3057\u307E\u3059\u30021\u5EA6\u3057\u304B\u8868\u793A\u3055\u308C\u306A\u3044\u305F\u3081\u5B89\u5168\u306B\u4FDD\u5B58\u3057\u3066\u304F\u3060\u3055\u3044\u3002",kikuNeedKeyToUpdate:"\u4FDD\u5B58\u3057\u305F\u30A2\u30A4\u30C6\u30E0\u3092\u66F4\u65B0\u30FB\u691C\u7D22\u3059\u308B\u306B\u306Fkiku\u30AD\u30FC\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",micDenied:"\u30DE\u30A4\u30AF\u304C\u30D6\u30ED\u30C3\u30AF\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u3053\u306E\u30B5\u30A4\u30C8\u3067\u306E\u30DE\u30A4\u30AF\u30A2\u30AF\u30BB\u30B9\u3092\u8A31\u53EF\u3057\u3066\u304B\u3089\u3001\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",micFailed:"\u805E\u304D\u53D6\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A71\u3057\u304F\u3060\u3055\u3044\u3002",micInsecure:"\u97F3\u58F0\u5165\u529B\u306B\u306F\u4FDD\u8B77\u3055\u308C\u305F\u63A5\u7D9A (HTTPS) \u304C\u5FC5\u8981\u3067\u3059\u3002",micLangUnsupported:"\u304A\u4F7F\u3044\u306E\u30D6\u30E9\u30A6\u30B6\u306F\u3053\u306E\u8A00\u8A9E\u306E\u97F3\u58F0\u8A8D\u8B58\u306B\u307E\u3060\u5BFE\u5FDC\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u6587\u5B57\u3067\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",micMissing:"\u30DE\u30A4\u30AF\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002",micNetwork:"\u97F3\u58F0\u5165\u529B\u306B\u306F\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u63A5\u7D9A\u304C\u5FC5\u8981\u3067\u3059\u3002\u63A5\u7D9A\u3092\u78BA\u8A8D\u3057\u3066\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",micNoSpeech:"\u97F3\u58F0\u304C\u691C\u51FA\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u30DE\u30A4\u30AF\u306B\u8FD1\u3065\u3044\u3066\u3082\u3046\u4E00\u5EA6\u304A\u8A71\u3057\u304F\u3060\u3055\u3044\u3002",namePlaceholder:"\u304A\u540D\u524D\u3092\u5165\u529B\u2026",nameStepAsk:"\u4F55\u3068\u304A\u547C\u3073\u3059\u308C\u3070\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F",nameStepLead:"\u3053\u306E\u30B5\u30A4\u30C8\u3084\u4ED6\u306E\u30B5\u30A4\u30C8\u306E\u60C5\u5831\u3092\u691C\u7D22\u30FB\u8996\u899A\u5316\u30FB\u4FDD\u5B58\u3067\u304D\u307E\u3059\u3002",nameStepTitle:"\u306F\u3058\u3081\u307E\u3057\u3066\u3002",namesAsWritten:"\u5546\u54C1\u540D\u3084\u8A73\u7D30\u306F\u30B5\u30A4\u30C8\u306E\u63B2\u8F09\u901A\u308A\u3002",pillCompareTop2:"\u30C8\u30C3\u30D72\u3092\u6BD4\u8F03",pillCompareTop2Query:"{a} \u3068 {b} \u3092\u6BD4\u8F03\u3057\u3066",pillFindAlternatives:"\u4EE3\u66FF\u54C1\u3092\u63A2\u3059",pillFindAlternativesQuery:"{name} \u306E\u826F\u3044\u4EE3\u66FF\u54C1\u306F\u3042\u308A\u307E\u3059\u304B\uFF1F",pillMoreOn:"{name} \u306B\u3064\u3044\u3066\u3082\u3063\u3068\u77E5\u308B",pillMoreOnQuery:"{name} \u306B\u3064\u3044\u3066\u3082\u3063\u3068\u8A73\u3057\u304F\u6559\u3048\u3066",pillRecommend:"\u304A\u3059\u3059\u3081\u3092\u6559\u3048\u3066",pillRecommendQuery:"\u79C1\u306B\u4F55\u3092\u304A\u3059\u3059\u3081\u3057\u307E\u3059\u304B\uFF1F",pillShowPopular:"\u4EBA\u6C17\u5546\u54C1\u3092\u898B\u308B",pillShowPopularQuery:"\u4E00\u756A\u4EBA\u6C17\u306E\u5546\u54C1\u306F\u3069\u308C\u3067\u3059\u304B\uFF1F",pillSimilarOptions:"\u4F3C\u3066\u3044\u308B\u30AA\u30D7\u30B7\u30E7\u30F3",pillSimilarOptionsQuery:"{name} \u306B\u4F3C\u305F\u5546\u54C1\u3092\u3082\u3063\u3068\u898B\u305B\u3066",pillUnder:"{amount} \u4EE5\u4E0B",pillUnderQuery:"{amount} \u4EE5\u4E0B\u306E\u9078\u629E\u80A2\u3092\u898B\u305B\u3066",pillWhichBest:"\u3069\u308C\u304C\u4E00\u756A\u304A\u3059\u3059\u3081\uFF1F",pillWhichBestQuery:"\u3069\u308C\u304C\u4E00\u756A\u304A\u3059\u3059\u3081\u3067\u3059\u304B\uFF1F\u305D\u306E\u7406\u7531\u3082\u6559\u3048\u3066\u304F\u3060\u3055\u3044\u3002",replyingOriginal:"{lang}\u3067\u8FD4\u7B54\u3057\u307E\u3059\uFF08\u7D50\u679C\u306F\u30B5\u30A4\u30C8\u539F\u6587\u306E\u307E\u307E\uFF09\u3002\u4F55\u3067\u3082\u304A\u805E\u304D\u304F\u3060\u3055\u3044\u3002",replyingTranslated:"{lang}\u3067\u8FD4\u7B54\u3057\u307E\u3059\uFF08\u7D50\u679C\u3082\u7FFB\u8A33\uFF09\u3002\u4F55\u3067\u3082\u304A\u805E\u304D\u304F\u3060\u3055\u3044\u3002",statusSent:"\u9001\u4FE1\u6E08\u307F",statusStopped:"\u9001\u4FE1\u6E08\u307F \xB7 \u8FD4\u7B54\u3092\u505C\u6B62\u3057\u307E\u3057\u305F",thinking:"\u601D\u8003\u4E2D",thoughtForSeconds:"{duration} \u8003\u3048\u307E\u3057\u305F",thoughtProcess:"\u601D\u8003\u30D7\u30ED\u30BB\u30B9",vizDisclaimerImage:"\u4EBA\u5DE5\u77E5\u80FD\u306B\u3088\u3063\u3066\u751F\u6210\u3055\u308C\u307E\u3057\u305F \u2014 \u8272\u3001\u30B5\u30A4\u30BA\u3001\u914D\u7F6E\u306F\u5B9F\u969B\u306E\u5546\u54C1\u3068\u7570\u306A\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002",vizDisclaimerVideo:"\u4EBA\u5DE5\u77E5\u80FD\u306B\u3088\u3063\u3066\u751F\u6210\u3055\u308C\u307E\u3057\u305F \u2014 \u8272\u3001\u30B5\u30A4\u30BA\u3001\u52D5\u304D\u306F\u5B9F\u969B\u306E\u5546\u54C1\u3068\u7570\u306A\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002",vizUnavailable:"\u30D7\u30EC\u30D3\u30E5\u30FC\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093\u3067\u3057\u305F\u3002",voiceHint:"\u304A\u8A71\u3057\u304F\u3060\u3055\u3044 \u2014 \u8A71\u3057\u7D42\u3048\u305F\u3089\u304A\u7B54\u3048\u3057\u307E\u3059\u3002",voiceListening:"\u805E\u304D\u53D6\u308A\u4E2D\u2026 \u30BF\u30C3\u30D7\u3057\u3066\u505C\u6B62",voiceModeExit:"\u30CF\u30F3\u30BA\u30D5\u30EA\u30FC\u3092\u7D42\u4E86",voiceModeStart:"\u30CF\u30F3\u30BA\u30D5\u30EA\u30FC\u4F1A\u8A71",voiceMuted:"\u30DF\u30E5\u30FC\u30C8\u4E2D",voiceMutedHint:"\u30DE\u30A4\u30AF\u3092\u30BF\u30C3\u30D7\u3057\u3066\u3082\u3046\u4E00\u5EA6\u304A\u8A71\u3057\u304F\u3060\u3055\u3044\u3002",voicePhaseListening:"\u805E\u304D\u53D6\u308A\u4E2D",voicePhaseSpeaking:"\u767A\u7B54\u4E2D",voicePhaseThinking:"\u8003\u3048\u4E2D",voiceSending:"\u53D7\u3051\u53D6\u308A\u307E\u3057\u305F \u2014 \u9001\u4FE1\u4E2D\u2026",termsStepTitle:"\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u3068\u5229\u7528\u898F\u7D04",termsStepSubtitle:"\u900F\u660E\u6027\u3001\u533F\u540D\u6027\u3001\u305D\u3057\u3066\u500B\u4EBA\u3092\u7279\u5B9A\u3057\u306A\u3044\u8A2D\u8A08\u3002",termsPiiTitle:"\u500B\u4EBA\u3092\u7279\u5B9A\u3059\u308B\u60C5\u5831\u306E\u4E0D\u53CE\u96C6",termsPiiDesc:"\u30C1\u30E3\u30C3\u30C8\u3084\u97F3\u58F0\u30BB\u30C3\u30B7\u30E7\u30F3\u304B\u3089\u500B\u4EBA\u3092\u7279\u5B9A\u3067\u304D\u308B\u60C5\u5831\uFF08\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3001\u96FB\u8A71\u756A\u53F7\u3001\u5B9F\u540D\u306A\u3069\uFF09\u3092\u53CE\u96C6\u30FB\u4FDD\u5B58\u3059\u308B\u3053\u3068\u306F\u4E00\u5207\u3042\u308A\u307E\u305B\u3093\u3002",termsSessionTitle:"\u533F\u540D\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u8B58\u5225\u5B50",termsSessionDesc:"\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u3092\u7DAD\u6301\u3059\u308B\u305F\u3081\u306B\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u5074\u3067\u751F\u6210\u3055\u308C\u305F\u533F\u540D\u30C8\u30FC\u30AF\u30F3\u306E\u307F\u3092\u4F7F\u7528\u3057\u3001\u5B9F\u969B\u306E\u8EAB\u5143\u3068\u7D10\u4ED8\u3051\u308B\u3053\u3068\u306F\u3042\u308A\u307E\u305B\u3093\u3002",termsMemoryTitle:"\u4E00\u6642\u7684\u306A\u30C1\u30E3\u30C3\u30C8 vs Mimi Vault",termsMemoryDesc:"\u901A\u5E38\u306E\u30C1\u30E3\u30C3\u30C8\u306F\u4E00\u6642\u7684\u306A\u3082\u306E\u3067\u3059\u3002\u30BF\u30D6\u3092\u9589\u3058\u308B\u304B\u30C1\u30E3\u30C3\u30C8\u3092\u6D88\u53BB\u3059\u308B\u3068\u5B8C\u5168\u306B\u7834\u68C4\u3055\u308C\u307E\u3059\u3002\u300C@kiku\u300D\u3067\u4FDD\u5B58\u3057\u305F\u30A2\u30A4\u30C6\u30E0\u306F\u6697\u53F7\u5316\u3055\u308C\u3001mimi.akropolys.cloud \u3067\u30B7\u30FC\u30AF\u30EC\u30C3\u30C8\u30AD\u30FC\u3092\u4F7F\u3063\u3066\u30ED\u30C3\u30AF\u89E3\u9664\u3067\u304D\u307E\u3059\u3002",termsCookieTitle:"\u30DB\u30B9\u30C8\u30B5\u30A4\u30C8\u306E\u30C6\u30EC\u30E1\u30C8\u30EA",termsCookieDesc:"kiku\u304C\u57CB\u3081\u8FBC\u307E\u308C\u3066\u3044\u308B\u30DB\u30B9\u30C8\u30B5\u30A4\u30C8\u306F\u3001\u72EC\u81EA\u306E\u30AF\u30C3\u30AD\u30FC\u30DD\u30EA\u30B7\u30FC\u306B\u57FA\u3065\u3044\u3066\u30AF\u30C3\u30AD\u30FC\u3084\u30A2\u30AF\u30BB\u30B9\u89E3\u6790\u3092\u53CE\u96C6\u3059\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\uFF08kiku\u306E\u7BA1\u7406\u5916\uFF09\u3002",termsAgreeButton:"\u540C\u610F\u3057\u3066\u7D9A\u884C",termsAgreeCounting:"\u540C\u610F\u3057\u3066\u7D9A\u884C ({seconds}\u79D2)",termsPlaceholder:"\u4E0A\u8A18\u306E\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u3068\u898F\u7D04\u3092\u3054\u78BA\u8A8D\u3044\u305F\u3060\u304D\u3001\u540C\u610F\u3057\u3066\u304F\u3060\u3055\u3044\u2026",whatHaveYouSaved:"\u4F55\u3092\u4FDD\u5B58\u3057\u307E\u3057\u305F\u304B\uFF1F"},portuguese:{allSet:"Tudo pronto, {name}.",asWritten:"Como escrito",captureAll:"Capturar tudo ({count})",captureAndRemember:"kiku \u2014 capturar\u202F&\u202Flembrar",captureCurrentPage:"Capturar p\xE1gina atual",cardClickAnswer:"O {name}",cardClickQuery:"Fale mais sobre o {name}{price} \u2014 quais s\xE3o seus detalhes principais, para quem \xE9 mais indicado e o que devo saber?",clearChat:"Limpar chat",defaultPlaceholder:"Pergunte-me qualquer coisa\u2026",deleteThis:"Excluir isso",detailsTranslated:"Detalhes traduzidos. N\xFAmeros e links permanecem exatamente como listados.",displayCapture:"capturar {name}",displayCaptureAll:"capturar tudo ({count} itens)",displayDelete:"excluir isso",displayViewHistory:"o que voc\xEA salvou?",entityLangIntro:"Eu respondo em {lang}. Os cart\xF5es de resultado podem permanecer exatamente como o site os escreveu ou ser traduzidos tamb\xE9m.",entityLangPlaceholder:"Escolha um dos dois cart\xF5es acima\u2026",errAccessRevoked:"Seu acesso ao assistente foi revogado pela loja.",errAccountRequired:"Por favor, crie uma conta para continuar usando o assistente de chat.",errShopperReplyLimit:"Voc\xEA atingiu o limite de respostas deste site para sua conta.",errStreamInterrupted:"A resposta foi interrompida. Por favor, tente novamente.",errTokenLimit:"Voc\xEA atingiu seu limite de uso. Atualize seus limites de cobran\xE7a no painel para continuar.",errTooManyRequests:"O assistente est\xE1 recebendo muitas solicita\xE7\xF5es no momento. Por favor, tente novamente em alguns instantes.",footerHint:"kiku \xB7 pesquisa todo o cat\xE1logo em tempo real",greetReturning:"Oi, {name}.",greetReturningLead:"O que posso encontrar para voc\xEA hoje?",howShouldResultsLook:"Como os resultados devem aparecer?",inLanguage:"Em {lang}",keyAutoHide:"Esconde automaticamente em {seconds}s.",keyCopied:"Copiado",keyCopyId:"Copiar id",keyCopySecret:"Copiar segredo",keyCreateNew:"Sou novo \u2014 criar um",keyCreating:"Criando\u2026",keyDismiss:"Fechar",keyPastePlaceholder:"seu id p\xFAblico\u2026",keyPastePrompt:"Cole seu id p\xFAblico \u2014 ou crie um",keyPublicHint:"Cole isso em qualquer site para salvar na mesma mem\xF3ria.",keyPublicTitle:"Seu id p\xFAblico",keySecretHint:"Mantenha privado \u2014 use para desbloquear sua mem\xF3ria.",keySecretTitle:"Seu segredo \u2014 mostrado apenas uma vez",keyUseMine:"Usar meu id",kikuActionUnavailable:"Desculpe \u2014 essa a\xE7\xE3o n\xE3o est\xE1 dispon\xEDvel neste site.",kikuCaptureDbError:"Falha ao capturar devido a um erro de banco de dados.",kikuCaptureNoContext:"Falha ao capturar porque nenhum contexto de p\xE1gina ou produto foi fornecido pelo SDK.",kikuCaptureNoUrl:"N\xE3o foi poss\xEDvel salvar nenhum item \u2014 nenhum tinha URL v\xE1lido.",kikuCaptureNoneSelected:"Nenhum item foi selecionado para captura.",kikuDeleteDbError:"Falha ao excluir devido a um erro de banco de dados.",kikuDeleteDone:"Removido dos seus itens salvos.",kikuDeleteNoContext:"Falha ao excluir porque nenhum contexto de p\xE1gina foi fornecido para identificar o que excluir.",kikuMemoryIntro:"Tudo que voc\xEA capturou em sites est\xE1 na sua mem\xF3ria privada. Desbloqueie-a com seu segredo:",kikuMintNeeded:"Para salvar itens entre sites voc\xEA precisa de uma chave kiku \u2014 vou gerar uma para voc\xEA. Ela ser\xE1 mostrada apenas uma vez, ent\xE3o guarde-a em um local seguro.",kikuMintOffer:"Posso guardar isso para voc\xEA e fazer com que siga voc\xEA entre sites \u2014 vou gerar uma chave kiku. Ela ser\xE1 mostrada apenas uma vez, ent\xE3o guarde-a em um local seguro.",kikuNeedKeyToUpdate:"Insira sua chave kiku para que eu possa encontrar e atualizar seus itens salvos.",namePlaceholder:"Digite seu nome\u2026",nameStepAsk:"Como devo chamar voc\xEA?",nameStepLead:"Posso pesquisar, visualizar ou capturar qualquer coisa para voc\xEA \u2014 neste site ou em qualquer outro.",nameStepTitle:"Prazer em conhec\xEA-lo.",namesAsWritten:"Nomes e detalhes exatamente como o site os lista.",pillCompareTop2:"Comparar os 2 melhores",pillCompareTop2Query:"Compare o {a} e o {b}",pillFindAlternatives:"Encontrar alternativas",pillFindAlternativesQuery:"Quais s\xE3o boas alternativas ao {name}?",pillMoreOn:"Mais sobre {name}",pillMoreOnQuery:"Fale mais sobre o {name}",pillRecommend:"Recomendar algo",pillRecommendQuery:"O que voc\xEA recomenda para mim?",pillShowPopular:"Mostrar itens populares",pillShowPopularQuery:"Quais s\xE3o os seus itens mais populares?",pillSimilarOptions:"Op\xE7\xF5es semelhantes",pillSimilarOptionsQuery:"Mostre-me mais op\xE7\xF5es semelhantes ao {name}",pillUnder:"Abaixo de {amount}",pillUnderQuery:"Mostre-me op\xE7\xF5es abaixo de {amount}",pillWhichBest:"Qual \xE9 o melhor?",pillWhichBestQuery:"Qual voc\xEA recomendaria e por qu\xEA?",replyingOriginal:"Respondendo em {lang}, resultados como o site escreveu. Pergunte-me qualquer coisa.",replyingTranslated:"Respondendo em {lang}, resultados tamb\xE9m traduzidos. Pergunte-me qualquer coisa.",statusSent:"Enviado",statusStopped:"Enviado \xB7 resposta interrompida",thinking:"Pensando",thoughtForSeconds:"Pensou por {duration}",thoughtProcess:"Processo de pensamento",vizUnavailable:"A visualiza\xE7\xE3o n\xE3o p\xF4de ser carregada.",termsStepTitle:"Privacidade e Termos de Uso",termsStepSubtitle:"Transparente, an\xF4nimo e sem coleta de dados pessoais.",termsPiiTitle:"Zero Coleta de Dados Pessoais",termsPiiDesc:"Nunca coletamos nem armazenamos informa\xE7\xF5es de identifica\xE7\xE3o pessoal (sem e-mails, telefones ou identidades reais) das suas conversas ou sess\xF5es de voz.",termsSessionTitle:"Tokens de Sess\xE3o An\xF4nimos",termsSessionDesc:"Sua sess\xE3o usa um token an\xF4nimo no cliente apenas para manter o contexto. Nunca \xE9 vinculado \xE0 sua identidade real.",termsMemoryTitle:"Conversas Ef\xEAmeras vs. Cofre Mimi",termsMemoryDesc:'Conversas normais s\xE3o ef\xEAmeras \u2014 fechar ou limpar o chat as apaga para sempre. Itens salvos com "@kiku" s\xE3o criptografados e podem ser desbloqueados em mimi.akropolys.cloud com sua chave secreta.',termsCookieTitle:"Telemetria do Site Hospedeiro",termsCookieDesc:"O site onde o kiku est\xE1 incorporado pode coletar cookies e an\xE1lises de acordo com sua pr\xF3pria pol\xEDtica de cookies, fora do controle do kiku.",termsAgreeButton:"Concordar e Continuar",termsAgreeCounting:"Concordar e Continuar ({seconds}s)",termsPlaceholder:"Por favor, revise e aceite a privacidade e os termos acima\u2026",whatHaveYouSaved:"O que voc\xEA salvou?",micDenied:"Microfone bloqueado. Permita o acesso ao microfone neste site e tente novamente.",micFailed:"N\xE3o foi poss\xEDvel ouvir. Tente novamente.",micInsecure:"A voz precisa de uma conex\xE3o segura (https).",micLangUnsupported:"Este navegador ainda n\xE3o transcreve este idioma. Digite em vez disso.",micMissing:"Nenhum microfone encontrado.",micNetwork:"A voz precisa de uma conex\xE3o no momento. Verifique a sua e tente novamente.",micNoSpeech:"N\xE3o ouvimos nada. Tente novamente, um pouco mais perto do microfone.",vizDisclaimerImage:"Gerado com Intelig\xEAncia Artificial \u2014 cores, tamanho e posi\xE7\xE3o podem diferir do produto real.",vizDisclaimerVideo:"Gerado com Intelig\xEAncia Artificial \u2014 cores, tamanho e movimento podem diferir do produto real.",voiceHint:"Basta falar \u2014 responderei quando voc\xEA fizer uma pausa.",voiceListening:"Ouvindo\u2026 toque no microfone para parar",voiceModeExit:"Sair do modo m\xE3os-livres",voiceModeStart:"Conversa em m\xE3os-livres",voiceMuted:"Silenciado",voiceMutedHint:"Toque no microfone para falar novamente.",voicePhaseListening:"Ouvindo",voicePhaseSpeaking:"Falando",voicePhaseThinking:"Pensando",voiceSending:"Entendido \u2014 enviando\u2026"},spanish:{allSet:"Todo listo, {name}.",asWritten:"Tal como est\xE1 escrito",captureAll:"Capturar todo ({count})",captureAndRemember:"kiku \u2014 capturar y recordar",captureCurrentPage:"Capturar p\xE1gina actual",cardClickAnswer:"El {name}",cardClickQuery:"Cu\xE9ntame m\xE1s sobre {name}{price} \u2014 \xBFcu\xE1les son sus detalles clave, para qui\xE9n es m\xE1s adecuado y qu\xE9 deber\xEDa saber?",clearChat:"Borrar chat",defaultPlaceholder:"Preg\xFAntame lo que quieras\u2026",deleteThis:"Eliminar esto",detailsTranslated:"Detalles traducidos. Los n\xFAmeros y enlaces se mantienen exactamente como se muestran.",displayCapture:"capturar {name}",displayCaptureAll:"capturar todo ({count} elementos)",displayDelete:"eliminar esto",displayViewHistory:"\xBFqu\xE9 has guardado?",entityLangIntro:"Respondo en {lang}. Las tarjetas de resultados pueden mantenerse exactamente como las escribi\xF3 este sitio, o tambi\xE9n pueden traducirse.",entityLangPlaceholder:"Elige una de las dos tarjetas de arriba\u2026",errAccessRevoked:"La tienda ha revocado su acceso al asistente.",errAccountRequired:"Por favor, cree una cuenta para seguir usando el asistente de chat.",errShopperReplyLimit:"Ha alcanzado el l\xEDmite de respuestas de este sitio para su cuenta.",errStreamInterrupted:"La respuesta fue interrumpida. Por favor, int\xE9ntelo de nuevo.",errTokenLimit:"Ha alcanzado su l\xEDmite de uso. Por favor, actualice sus l\xEDmites de facturaci\xF3n en su panel de control para continuar.",errTooManyRequests:"El asistente est\xE1 recibiendo demasiadas solicitudes en este momento. Por favor, int\xE9ntelo de nuevo en unos instantes.",footerHint:"kiku \xB7 busca en todo el cat\xE1logo en tiempo real",greetReturning:"Hola, {name}.",greetReturningLead:"\xBFQu\xE9 puedo encontrar para usted hoy?",howShouldResultsLook:"\xBFC\xF3mo deber\xEDan verse los resultados?",inLanguage:"En {lang}",keyAutoHide:"Se oculta autom\xE1ticamente en {seconds}s.",keyCopied:"Copiado",keyCopyId:"Copiar ID",keyCopySecret:"Copiar secreto",keyCreateNew:"Soy nuevo/a, crear uno",keyCreating:"Creando\u2026",keyDismiss:"Descartar",keyPastePlaceholder:"tu ID p\xFAblico\u2026",keyPastePrompt:"Pega tu ID p\xFAblico \u2014 o crea uno",keyPublicHint:"P\xE9galo en cualquier sitio para guardar en la misma memoria.",keyPublicTitle:"Tu ID p\xFAblico",keySecretHint:"Mantenlo privado \u2014 \xFAsalo para desbloquear tu memoria.",keySecretTitle:"Tu secreto \u2014 mostrado solo una vez",keyUseMine:"Usar mi ID",kikuActionUnavailable:"Lo siento, esa acci\xF3n no est\xE1 disponible en este sitio.",kikuCaptureDbError:"La captura fall\xF3 debido a un error de base de datos.",kikuCaptureNoContext:"La captura fall\xF3 porque el SDK no proporcion\xF3 contexto de p\xE1gina o producto.",kikuCaptureNoUrl:"No se pudieron guardar elementos \u2014 ninguno ten\xEDa una URL v\xE1lida.",kikuCaptureNoneSelected:"No se seleccionaron elementos para capturar.",kikuDeleteDbError:"La eliminaci\xF3n fall\xF3 debido a un error de base de datos.",kikuDeleteDone:"Lo he eliminado de tus elementos guardados.",kikuDeleteNoContext:"La eliminaci\xF3n fall\xF3 porque no se proporcion\xF3 contexto de p\xE1gina para identificar qu\xE9 eliminar.",kikuMemoryIntro:"Todo lo que has capturado en diferentes sitios vive en tu memoria privada. Desbloqu\xE9ala con tu secreto:",kikuMintNeeded:"Para guardar elementos en diferentes sitios necesitas una clave kiku \u2014 te crear\xE9 una. Se muestra solo una vez, as\xED que gu\xE1rdala en un lugar seguro.",kikuMintOffer:"Puedo guardar esto por ti y hacer que te siga en diferentes sitios \u2014 te crear\xE9 una clave kiku. Se muestra solo una vez, as\xED que gu\xE1rdala en un lugar seguro.",kikuNeedKeyToUpdate:"Introduce tu clave kiku para que pueda encontrar y actualizar tus elementos guardados.",micDenied:"Micr\xF3fono bloqueado. Permite el acceso al micr\xF3fono para este sitio e int\xE9ntalo de nuevo.",micFailed:"No pude o\xEDr eso. Int\xE9ntalo de nuevo.",micInsecure:"La voz requiere una conexi\xF3n segura (https).",micLangUnsupported:"Este navegador a\xFAn no puede transcribir ese idioma. Escriba en su lugar.",micMissing:"No se encontr\xF3 ning\xFAn micr\xF3fono.",micNetwork:"La voz necesita una conexi\xF3n en este momento. Revise la suya e int\xE9ntelo de nuevo.",micNoSpeech:"No he captado nada. Int\xE9ntelo de nuevo, un poco m\xE1s cerca del micr\xF3fono.",namePlaceholder:"Escriba su nombre\u2026",nameStepAsk:"\xBFC\xF3mo debo llamarle?",nameStepLead:"Puedo buscar, visualizar o capturar cualquier cosa por usted, en este sitio o en cualquier otro.",nameStepTitle:"Encantado de conocerle.",namesAsWritten:"Nombres y detalles exactamente como los enumera el sitio.",pillCompareTop2:"Comparar los 2 mejores",pillCompareTop2Query:"Compara {a} y {b}",pillFindAlternatives:"Buscar alternativas",pillFindAlternativesQuery:"\xBFQu\xE9 alternativas hay a {name}?",pillMoreOn:"M\xE1s sobre {name}",pillMoreOnQuery:"Cu\xE9ntame m\xE1s sobre {name}",pillRecommend:"Recomendar algo",pillRecommendQuery:"\xBFQu\xE9 me recomiendas?",pillShowPopular:"Mostrar art\xEDculos populares",pillShowPopularQuery:"\xBFCu\xE1les son tus art\xEDculos m\xE1s populares?",pillSimilarOptions:"Opciones similares",pillSimilarOptionsQuery:"Mu\xE9strame m\xE1s opciones como {name}",pillUnder:"Menos de {amount}",pillUnderQuery:"Mu\xE9strame opciones por menos de {amount}",pillWhichBest:"\xBFCu\xE1l es el mejor?",pillWhichBestQuery:"\xBFCu\xE1l me recomendar\xEDas y por qu\xE9?",replyingOriginal:"Respondiendo en {lang}, resultados tal como los escribi\xF3 este sitio. Preg\xFAnteme lo que quiera.",replyingTranslated:"Respondiendo en {lang}, resultados tambi\xE9n traducidos. Preg\xFAnteme lo que quiera.",statusSent:"Enviado",statusStopped:"Enviado \xB7 respuesta detenida",thinking:"Pensando",thoughtForSeconds:"Pensado durante {duration}",thoughtProcess:"Proceso de pensamiento",vizDisclaimerImage:"Generado con Inteligencia Artificial: los colores, el tama\xF1o y la ubicaci\xF3n pueden diferir del producto real.",vizDisclaimerVideo:"Generado con Inteligencia Artificial: los colores, el tama\xF1o y el movimiento pueden diferir del producto real.",vizUnavailable:"No se pudo cargar la vista previa.",voiceListening:"Escuchando\u2026 toque el micr\xF3fono para detener.",voiceSending:"Entendido, enviando\u2026",termsStepTitle:"Privacidad y t\xE9rminos de uso",termsStepSubtitle:"Transparente, an\xF3nimo y sin recolecci\xF3n de datos personales.",termsPiiTitle:"Cero recolecci\xF3n de datos personales",termsPiiDesc:"Nunca recopilamos ni almacenamos informaci\xF3n de identificaci\xF3n personal (sin correos, n\xFAmeros de tel\xE9fono ni identidades reales) de tus conversaciones o sesiones de voz.",termsSessionTitle:"Tokens de sesi\xF3n an\xF3nimos",termsSessionDesc:"Tu sesi\xF3n utiliza un token an\xF3nimo generado en el cliente \xFAnicamente para mantener el contexto. Nunca se vincula a tu identidad real.",termsMemoryTitle:"Chats ef\xEDmeros vs. B\xF3veda Mimi",termsMemoryDesc:"Las conversaciones regulares son ef\xEDmeras: cerrar o borrar el chat las elimina para siempre. Lo que guardas con \xAB@kiku\xBB est\xE1 cifrado y se puede desbloquear en mimi.akropolys.cloud con tu clave secreta.",termsCookieTitle:"Telemetr\xEDa del sitio web anfitri\xF3n",termsCookieDesc:"El sitio web donde est\xE1 integrado kiku puede recopilar cookies y anal\xEDticas seg\xFAn su propia pol\xEDtica de cookies, fuera del control de kiku.",termsAgreeButton:"Aceptar y continuar",termsAgreeCounting:"Aceptar y continuar ({seconds}s)",termsPlaceholder:"Por favor, revisa y acepta nuestra privacidad y t\xE9rminos arriba\u2026",whatHaveYouSaved:"\xBFQu\xE9 ha guardado?",voiceHint:"Solo habla \u2014 responder\xE9 cuando hagas una pausa.",voiceModeExit:"Salir de manos libres",voiceModeStart:"Conversaci\xF3n manos libres",voiceMuted:"Silenciado",voiceMutedHint:"Toca el micr\xF3fono para hablar de nuevo.",voicePhaseListening:"Escuchando",voicePhaseSpeaking:"Hablando",voicePhaseThinking:"Pensando"},swahili:{allSet:"Uko tayari, {name}.",asWritten:"Kama ilivyoandikwa",captureAll:"Chukua zote ({count})",captureAndRemember:"kiku \u2014 chukua & kumbuka",captureCurrentPage:"Chukua ukurasa wa sasa",cardClickAnswer:"{name}",cardClickQuery:"Nisaidie kujua zaidi kuhusu {name}{price} \u2014 ni maelezo yake muhimu, ni kwa nani inafaa zaidi, na ninapaswa kujua nini?",clearChat:"Futa mazungumzo",defaultPlaceholder:"Uliza chochote\u2026",deleteThis:"Futa hii",detailsTranslated:"Maelezo yame tafsiriwa. Nambari na viungo vinabaki kama ilivyo.",displayCapture:"chukua {name}",displayCaptureAll:"chukua zote ({count} items)",displayDelete:"futa hii",displayViewHistory:"ulivyohifadhi?",entityLangIntro:"Nitajibu kwa {lang}. Kadi za matokeo zinaweza kubaki kama ilivyoandikwa kwenye tovuti hii, au kutafsiriwa pia.",entityLangPlaceholder:"Chagua moja ya kadi mbili zilizo juu\u2026",errAccessRevoked:"Ufikiaji wako kwa msaidizi umeondolewa na duka.",errAccountRequired:"Tafadhali unda akaunti ili kuendelea kutumia msaidizi wa mazungumzo.",errShopperReplyLimit:"Umefikia kikomo cha majibu cha tovuti hii kwa akaunti yako.",errStreamInterrupted:"Jibu lilikatizwa. Tafadhali jaribu tena.",errTokenLimit:"Umefikia kikomo cha matumizi yako. Tafadhali sasisha mipaka ya malipo kwenye dashbodi yako ili kuendelea.",errTooManyRequests:"Msaidizi anapokea maombi mengi sana kwa sasa. Tafadhali jaribu tena baada ya muda mfupi.",footerHint:"kiku \xB7 hutafuta katika katalogi nzima kwa wakati halisi",greetReturning:"Habari, {name}.",greetReturningLead:"Nini naweza kukutafuta leo?",howShouldResultsLook:"Matokeo yanapaswa kuonekana vipi?",inLanguage:"Kwa {lang}",keyAutoHide:"Inaficha kiotomatiki baada ya {seconds}s.",keyCopied:"Imekopiwa",keyCopyId:"Nakili kitambulisho",keyCopySecret:"Nakili siri",keyCreateNew:"Mimi mpya \u2014 unda moja",keyCreating:"Inaunda\u2026",keyDismiss:"Ondoa",keyPastePlaceholder:"kitambulisho chako cha umma\u2026",keyPastePrompt:"Bandika kitambulisho chako cha umma \u2014 au unda moja",keyPublicHint:"Bandika hii kwenye tovuti yoyote ili kuihifadhi katika kumbukumbu sawa.",keyPublicTitle:"Kitambulisho chako cha umma",keySecretHint:"Ikeepye kibinafsi \u2014 tumia kufungua kumbukumbu yako.",keySecretTitle:"Siri yako \u2014 inaonyeshwa mara moja tu",keyUseMine:"Tumia kitambulisho changu",kikuActionUnavailable:"Samahani \u2014 kitendo hicho hakipatikani kwenye tovuti hii.",kikuCaptureDbError:"Uchukuaji umeshindwa kutokana na hitilafu ya hifadhidata.",kikuCaptureNoContext:"Uchukuaji umeshindwa kwa sababu hakuna muktadha wa ukurasa au bidhaa uliotolewa na SDK.",kikuCaptureNoUrl:"Haikuweza kuhifadhi vitu vyovyote \u2014 hakuna kilichokuwa na URL halali.",kikuCaptureNoneSelected:"Hakuna vitu vilivyochaguliwa kwa uchukuaji.",kikuDeleteDbError:"Ufutaji umeshindwa kutokana na hitilafu ya hifadhidata.",kikuDeleteDone:"Imeondolewa kutoka vitu vyako vilivyohifadhiwa.",kikuDeleteNoContext:"Ufutaji umeshindwa kwa sababu hakuna muktadha wa ukurasa uliotolewa kutambua kinachofutwa.",kikuMemoryIntro:"Kila kitu ulichukua kwenye tovuti mbalimbali kiko katika kumbukumbu yako ya kibinafsi. Kifungue kwa siri yako:",kikuMintNeeded:"Ili kuhifadhi vitu kwenye tovuti mbalimbali unahitaji ufunguo wa kiku \u2014 nitaunda moja kwa ajili yako. Inaonyeshwa mara moja tu, hivyo uiweke mahali salama.",kikuMintOffer:"Ninaweza kuhifadhi hii kwa ajili yako na iende nawe kwenye tovuti mbalimbali \u2014 nitaunda ufunguo wa kiku. Inaonyeshwa mara moja tu, hivyo uiweke mahali salama.",kikuNeedKeyToUpdate:"Weka ufunguo wako wa kiku ili niweze kupata na kusasisha vitu vyako vilivyohifadhiwa.",micDenied:"Kinanda cha sauti kimezuiwa. Ruhusu ufikiaji wa kinanda kwa tovuti hii, kisha jaribu tena.",micFailed:"Sikuweza kusikia hilo. Jaribu tena.",micInsecure:"Sauti inahitaji muunganisho salama (https).",micLangUnsupported:"Kivinjari hiki hakiwezi kuandika lugha hiyo bado. Andika badala yake.",micMissing:"Hakuna kipaza sauti kilichopatikana.",micNetwork:"Sauti inahitaji muunganisho kwa sasa. Angalia yako na ujaribu tena.",micNoSpeech:"Sijapata chochote. Jaribu tena, karibu zaidi na kipaza sauti.",namePlaceholder:"Andika jina lako\u2026",nameStepAsk:"Ninapaswa kukuita nani?",nameStepLead:"Ninaweza kutafuta, kuonyesha, au kunasa chochote kwa ajili yako \u2014 kwenye tovuti hii au nyingine yoyote.",nameStepTitle:"Nafurahi kukutana nawe.",namesAsWritten:"Majina na maelezo kama ilivyo kwenye tovuti.",pillCompareTop2:"Linganisha bora 2",pillCompareTop2Query:"Linganisha {a} na {b}",pillFindAlternatives:"Tafuta mbadala",pillFindAlternativesQuery:"Ni mbadala gani mazuri kwa {name}?",pillMoreOn:"Zaidi kuhusu {name}",pillMoreOnQuery:"Nisaidie kujua zaidi kuhusu {name}",pillRecommend:"Pendekeza kitu",pillRecommendQuery:"Unaweza kunipendekeza nini?",pillShowPopular:"Onyesha vitu maarufu",pillShowPopularQuery:"Ni bidhaa gani zimekuwa maarufu zaidi?",pillSimilarOptions:"Chaguzi zinazofanana",pillSimilarOptionsQuery:"Nionyeshe zaidi kama {name}",pillUnder:"Chini ya {amount}",pillUnderQuery:"Nionyeshe chaguo chini ya {amount}",pillWhichBest:"Ni ipi bora?",pillWhichBestQuery:"Ni ipi unayopendekeza na kwa nini?",replyingOriginal:"Ninajibu kwa {lang}, matokeo kama ilivyoandikwa kwenye tovuti hii. Uliza chochote.",replyingTranslated:"Ninajibu kwa {lang}, matokeo yamefasiriwa pia. Uliza chochote.",statusSent:"Imetumwa",statusStopped:"Imetumwa \xB7 majibu yametolewa",thinking:"Inafikiri",thoughtForSeconds:"Imefikiri kwa {duration}",thoughtProcess:"Mchakato wa mawazo",vizDisclaimerImage:"Imetengenezwa kwa kutumia Akili Bandia \u2014 rangi, ukubwa na upangaji huenda yakatofautiana na bidhaa halisi.",vizDisclaimerVideo:"Imetengenezwa kwa kutumia Akili Bandia \u2014 rangi, ukubwa na mwendo huenda yakatofautiana na bidhaa halisi.",vizUnavailable:"Hakuna uwezo wa kupakia onyesho la awali.",voiceListening:"Inasikiliza\u2026 gonga kipaza sauti ili kusimama",voiceSending:"Nimepokea \u2014 ninatuma\u2026",termsStepTitle:"Faragha na Masharti ya Matumizi",termsStepSubtitle:"Wazi, bila utambulisho, na bila kukusanya taarifa binafsi.",termsPiiTitle:"Hakuna Ukusanyaji wa Taarifa Binafsi",termsPiiDesc:"Hatukusanyi wala kuhifadhi taarifa za utambulisho binafsi (hakuna barua pepe, nambari za simu, wala majina halisi) kutoka kwa mazungumzo yako au sauti.",termsSessionTitle:"Vitambulisho Visivyojulikana vya Kipindi",termsSessionDesc:"Kipindi chako kinatumia kitambulisho kisichojulikana upande wa mteja ili kuendeleza muktadha tu. Hakihusishwi na utambulisho wako halisi.",termsMemoryTitle:"Mazungumzo ya Muda dhidi ya Hazina ya Mimi",termsMemoryDesc:'Mazungumzo ya kawaida ni ya muda \u2014 kufunga au kufuta mazungumzo kunayaondoa kabisa. Vitu unavyohifadhi kwa "@kiku" vimelindwa na vinaweza kufunguliwa kwenye mimi.akropolys.cloud kwa ufunguo wako wa siri.',termsCookieTitle:"Takwimu za Tovuti Mwenyeji",termsCookieDesc:"Tovuti inayotumia kiku inaweza kukusanya vidakuzi na takwimu kulingana na sera yake ya vidakuzi, nje ya udhibiti wa kiku.",termsAgreeButton:"Kubali na Uendelee",termsAgreeCounting:"Kubali na Uendelee ({seconds}s)",termsPlaceholder:"Tafadhali kagua na ukubali sera ya faragha na masharti hapo juu\u2026",whatHaveYouSaved:"Umehifadhi nini?",voiceHint:"Ongea tu \u2014 nitajibu ukipumzika.",voiceModeExit:"Ondoka kwenye hali ya bila mikono",voiceModeStart:"Mazungumzo ya bila mikono",voiceMuted:"Imezimwa sauti",voiceMutedHint:"Gonga kipaza sauti ili kuongea tena.",voicePhaseListening:"Inasikiliza",voicePhaseSpeaking:"Inazungumza",voicePhaseThinking:"Inafikiri"},urdu:{allSet:"\u0622\u067E \u0628\u0627\u0644\u06A9\u0644 \u062A\u06CC\u0627\u0631 \u06C1\u06CC\u06BA\u060C {name}\u06D4",asWritten:"\u062C\u06CC\u0633\u0627 \u0644\u06A9\u06BE\u0627 \u06C1\u06D2",captureAll:"\u0633\u0628 \u0645\u062D\u0641\u0648\u0638 \u06A9\u0631\u06CC\u06BA ({count})",captureAndRemember:"kiku \u2014 \u0645\u062D\u0641\u0648\u0638 \u06A9\u0631\u06CC\u06BA \u0627\u0648\u0631 \u06CC\u0627\u062F \u0631\u06A9\u06BE\u06CC\u06BA",captureCurrentPage:"\u0645\u0648\u062C\u0648\u062F\u06C1 \u0635\u0641\u062D\u06C1 \u0645\u062D\u0641\u0648\u0638 \u06A9\u0631\u06CC\u06BA",cardClickAnswer:"{name}",cardClickQuery:"\u0645\u062C\u06BE\u06D2 {name}{price} \u06A9\u06D2 \u0628\u0627\u0631\u06D2 \u0645\u06CC\u06BA \u0645\u0632\u06CC\u062F \u0628\u062A\u0627\u0626\u06CC\u06BA \u2014 \u0627\u0633 \u06A9\u06CC \u0627\u06C1\u0645 \u062E\u0635\u0648\u0635\u06CC\u0627\u062A \u06A9\u06CC\u0627 \u06C1\u06CC\u06BA\u060C \u06CC\u06C1 \u06A9\u0633 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0628\u06C1\u062A\u0631\u06CC\u0646 \u06C1\u06D2\u060C \u0627\u0648\u0631 \u0645\u062C\u06BE\u06D2 \u06A9\u06CC\u0627 \u062C\u0627\u0646\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2\u061F",clearChat:"\u0686\u06CC\u0679 \u0635\u0627\u0641 \u06A9\u0631\u06CC\u06BA",defaultPlaceholder:"\u0645\u062C\u06BE \u0633\u06D2 \u06A9\u0686\u06BE \u0628\u06BE\u06CC \u067E\u0648\u0686\u06BE\u06CC\u06BA\u2026",deleteThis:"\u0627\u0633\u06D2 \u062D\u0630\u0641 \u06A9\u0631\u06CC\u06BA",detailsTranslated:"\u062A\u0641\u0635\u06CC\u0644\u0627\u062A \u06A9\u0627 \u062A\u0631\u062C\u0645\u06C1 \u06A9\u0631 \u062F\u06CC\u0627 \u06AF\u06CC\u0627\u06D4 \u0642\u06CC\u0645\u062A\u06CC\u06BA \u0627\u0648\u0631 \u0644\u0646\u06A9\u0633 \u0648\u06CC\u0633\u06D2 \u06C1\u06CC \u0631\u06C1\u06CC\u06BA \u06AF\u06D2\u06D4",displayCapture:"{name} \u06A9\u0648 \u0645\u062D\u0641\u0648\u0638 \u06A9\u0631\u06CC\u06BA",displayCaptureAll:"\u0633\u0628 \u0645\u062D\u0641\u0648\u0638 \u06A9\u0631\u06CC\u06BA ({count} \u0627\u0634\u06CC\u0627\u0621)",displayDelete:"\u0627\u0633\u06D2 \u062D\u0630\u0641 \u06A9\u0631\u06CC\u06BA",displayViewHistory:"\u0622\u067E \u0646\u06D2 \u06A9\u06CC\u0627 \u0645\u062D\u0641\u0648\u0638 \u06A9\u06CC\u0627 \u06C1\u06D2\u061F",entityLangIntro:"\u0645\u06CC\u06BA {lang} \u0645\u06CC\u06BA \u062C\u0648\u0627\u0628 \u062F\u06CC\u062A\u0627 \u06C1\u0648\u06BA\u06D4 \u0646\u062A\u0627\u0626\u062C \u06A9\u06D2 \u06A9\u0627\u0631\u0688\u0632 \u0648\u06CC\u0633\u06D2 \u06C1\u06CC \u0631\u06C1 \u0633\u06A9\u062A\u06D2 \u06C1\u06CC\u06BA \u062C\u06CC\u0633\u06D2 \u0633\u0627\u0626\u0679 \u067E\u0631 \u0644\u06A9\u06BE\u06D2 \u06C1\u06CC\u06BA\u060C \u06CC\u0627 \u0627\u0646 \u06A9\u0627 \u062A\u0631\u062C\u0645\u06C1 \u0628\u06BE\u06CC \u06A9\u06CC\u0627 \u062C\u0627 \u0633\u06A9\u062A\u0627 \u06C1\u06D2\u06D4",entityLangPlaceholder:"\u0627\u0648\u067E\u0631 \u062F\u06CC\u06D2 \u06AF\u0626\u06D2 \u062F\u0648 \u06A9\u0627\u0631\u0688\u0632 \u0645\u06CC\u06BA \u0633\u06D2 \u0627\u06CC\u06A9 \u0645\u0646\u062A\u062E\u0628 \u06A9\u0631\u06CC\u06BA\u2026",errAccessRevoked:"\u0627\u0633\u0679\u0648\u0631 \u06A9\u06CC \u0637\u0631\u0641 \u0633\u06D2 \u0627\u0633\u0633\u0679\u0646\u0679 \u062A\u06A9 \u0622\u067E \u06A9\u06CC \u0631\u0633\u0627\u0626\u06CC \u0645\u0646\u0633\u0648\u062E \u06A9\u0631 \u062F\u06CC \u06AF\u0626\u06CC \u06C1\u06D2\u06D4",errAccountRequired:"\u0686\u06CC\u0679 \u0627\u0633\u0633\u0679\u0646\u0679 \u06A9\u0627 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u062C\u0627\u0631\u06CC \u0631\u06A9\u06BE\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0628\u0631\u0627\u0626\u06D2 \u0645\u06C1\u0631\u0628\u0627\u0646\u06CC \u0627\u06A9\u0627\u0624\u0646\u0679 \u0628\u0646\u0627\u0626\u06CC\u06BA\u06D4",errShopperReplyLimit:"\u0622\u067E \u0627\u0633 \u0633\u0627\u0626\u0679 \u067E\u0631 \u0627\u067E\u0646\u06D2 \u0627\u06A9\u0627\u0624\u0646\u0679 \u06A9\u06CC \u062C\u0648\u0627\u0628\u0627\u062A \u06A9\u06CC \u062D\u062F \u062A\u06A9 \u067E\u06C1\u0646\u0686 \u0686\u06A9\u06D2 \u06C1\u06CC\u06BA\u06D4",errStreamInterrupted:"\u062C\u0648\u0627\u0628 \u0645\u06CC\u06BA \u062E\u0644\u0644 \u067E\u0691 \u06AF\u06CC\u0627\u06D4 \u0628\u0631\u0627\u0626\u06D2 \u0645\u06C1\u0631\u0628\u0627\u0646\u06CC \u062F\u0648\u0628\u0627\u0631\u06C1 \u06A9\u0648\u0634\u0634 \u06A9\u0631\u06CC\u06BA\u06D4",errTokenLimit:"\u0622\u067E \u06A9\u06D2 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06A9\u06CC \u062D\u062F \u062E\u062A\u0645 \u06C1\u0648 \u0686\u06A9\u06CC \u06C1\u06D2\u06D4 \u062C\u0627\u0631\u06CC \u0631\u06A9\u06BE\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u067E\u0646\u06D2 \u0688\u06CC\u0634 \u0628\u0648\u0631\u0688 \u0645\u06CC\u06BA \u0628\u0644\u0646\u06AF \u06A9\u06CC \u062D\u062F \u0627\u067E \u0688\u06CC\u0679 \u06A9\u0631\u06CC\u06BA\u06D4",errTooManyRequests:"\u0627\u0633\u0633\u0679\u0646\u0679 \u067E\u0631 \u0627\u0633 \u0648\u0642\u062A \u0628\u06C1\u062A \u0632\u06CC\u0627\u062F\u06C1 \u062F\u0631\u062E\u0648\u0627\u0633\u062A\u06CC\u06BA \u0622\u0631\u06C1\u06CC \u06C1\u06CC\u06BA\u06D4 \u0628\u0631\u0627\u0626\u06D2 \u0645\u06C1\u0631\u0628\u0627\u0646\u06CC \u062A\u06BE\u0648\u0691\u06CC \u062F\u06CC\u0631 \u0628\u0639\u062F \u06A9\u0648\u0634\u0634 \u06A9\u0631\u06CC\u06BA\u06D4",footerHint:"kiku \xB7 \u062D\u0642\u06CC\u0642\u06CC \u0648\u0642\u062A \u0645\u06CC\u06BA \u0645\u06A9\u0645\u0644 \u06A9\u06CC\u0679\u0644\u0627\u06AF \u062A\u0644\u0627\u0634 \u06A9\u0631\u062A\u0627 \u06C1\u06D2",greetReturning:"\u062E\u0648\u0634 \u0622\u0645\u062F\u06CC\u062F\u060C {name}\u06D4",greetReturningLead:"\u0622\u062C \u0645\u06CC\u06BA \u0622\u067E \u06A9\u06D2 \u0644\u06CC\u06D2 \u06A9\u06CC\u0627 \u062A\u0644\u0627\u0634 \u06A9\u0631 \u0633\u06A9\u062A\u0627 \u06C1\u0648\u06BA\u061F",howShouldResultsLook:"\u0646\u062A\u0627\u0626\u062C \u06A9\u06CC\u0633\u06CC \u062F\u06A9\u06BE\u0646\u06CC \u0686\u0627\u06C1\u0626\u06CC\u06BA\u061F",inLanguage:"{lang} \u0645\u06CC\u06BA",keyAutoHide:"{seconds} \u0633\u06CC\u06A9\u0646\u0688 \u0645\u06CC\u06BA \u062E\u0648\u062F \u0628\u062E\u0648\u062F \u0686\u06BE\u067E \u062C\u0627\u0626\u06D2 \u06AF\u0627\u06D4",keyCopied:"\u06A9\u0627\u067E\u06CC \u06C1\u0648 \u06AF\u06CC\u0627",keyCopyId:"\u0622\u0626\u06CC \u0688\u06CC \u06A9\u0627\u067E\u06CC \u06A9\u0631\u06CC\u06BA",keyCopySecret:"\u062E\u0641\u06CC\u06C1 \u06A9\u0644\u06CC\u062F \u06A9\u0627\u067E\u06CC \u06A9\u0631\u06CC\u06BA",keyCreateNew:"\u0645\u06CC\u06BA \u0646\u06CC\u0627 \u06C1\u0648\u06BA \u2014 \u0646\u0626\u06CC \u0628\u0646\u0627\u0626\u06CC\u06BA",keyCreating:"\u0628\u0646\u0627\u06CC\u0627 \u062C\u0627 \u0631\u06C1\u0627 \u06C1\u06D2\u2026",keyDismiss:"\u0631\u062F \u06A9\u0631\u06CC\u06BA",keyPastePlaceholder:"\u0622\u067E \u06A9\u06CC \u067E\u0628\u0644\u06A9 \u0622\u0626\u06CC \u0688\u06CC\u2026",keyPastePrompt:"\u0627\u067E\u0646\u06CC \u067E\u0628\u0644\u06A9 \u0622\u0626\u06CC \u0688\u06CC \u0686\u0633\u067E\u0627\u06BA \u06A9\u0631\u06CC\u06BA \u2014 \u06CC\u0627 \u0646\u0626\u06CC \u0628\u0646\u0627\u0626\u06CC\u06BA",keyPublicHint:"\u0627\u0633\u06CC \u06CC\u0627\u062F\u062F\u0627\u0634\u062A \u0645\u06CC\u06BA \u0645\u062D\u0641\u0648\u0638 \u06A9\u0631\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u0633\u06D2 \u06A9\u0633\u06CC \u0628\u06BE\u06CC \u0633\u0627\u0626\u0679 \u067E\u0631 \u0686\u0633\u067E\u0627\u06BA \u06A9\u0631\u06CC\u06BA\u06D4",keyPublicTitle:"\u0622\u067E \u06A9\u06CC \u067E\u0628\u0644\u06A9 \u0622\u0626\u06CC \u0688\u06CC",keySecretHint:"\u0627\u0633\u06D2 \u062E\u0641\u06CC\u06C1 \u0631\u06A9\u06BE\u06CC\u06BA \u2014 \u0627\u067E\u0646\u06CC \u06CC\u0627\u062F\u062F\u0627\u0634\u062A \u06A9\u0648 \u06A9\u06BE\u0648\u0644\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06A9\u0631\u06CC\u06BA\u06D4",keySecretTitle:"\u0622\u067E \u06A9\u06CC \u062E\u0641\u06CC\u06C1 \u06A9\u0644\u06CC\u062F \u2014 \u0635\u0631\u0641 \u0627\u06CC\u06A9 \u0628\u0627\u0631 \u062F\u06A9\u06BE\u0627\u0626\u06CC \u062C\u0627\u0626\u06D2 \u06AF\u06CC",keyUseMine:"\u0645\u06CC\u0631\u06CC \u0622\u0626\u06CC \u0688\u06CC \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06A9\u0631\u06CC\u06BA",kikuActionUnavailable:"\u0645\u0639\u0630\u0631\u062A \u2014 \u06CC\u06C1 \u0639\u0645\u0644 \u0627\u0633 \u0633\u0627\u0626\u0679 \u067E\u0631 \u062F\u0633\u062A\u06CC\u0627\u0628 \u0646\u06C1\u06CC\u06BA \u06C1\u06D2\u06D4",kikuCaptureDbError:"\u0688\u06CC\u0679\u0627 \u0628\u06CC\u0633 \u06A9\u06CC \u062E\u0631\u0627\u0628\u06CC \u06A9\u06CC \u0648\u062C\u06C1 \u0633\u06D2 \u0645\u062D\u0641\u0648\u0638 \u06A9\u0631\u0646\u06D2 \u0645\u06CC\u06BA \u0646\u0627\u06A9\u0627\u0645\u06CC\u06D4",kikuCaptureNoContext:"\u0635\u0641\u062D\u06D2 \u06A9\u0627 \u0633\u06CC\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u0646\u06C1 \u0645\u0644\u0646\u06D2 \u06A9\u06CC \u0648\u062C\u06C1 \u0633\u06D2 \u0645\u062D\u0641\u0648\u0638 \u06A9\u0631\u0646\u06D2 \u0645\u06CC\u06BA \u0646\u0627\u06A9\u0627\u0645\u06CC\u06D4",kikuCaptureNoUrl:"\u06A9\u0648\u0626\u06CC \u0622\u0626\u0679\u0645 \u0645\u062D\u0641\u0648\u0638 \u0646\u06C1\u06CC\u06BA \u06C1\u0648 \u0633\u06A9\u0627 \u06A9\u06CC\u0648\u0646\u06A9\u06C1 \u06A9\u0633\u06CC \u06A9\u06D2 \u067E\u0627\u0633 \u062F\u0631\u0633\u062A URL \u0646\u06C1\u06CC\u06BA \u062A\u06BE\u0627\u06D4",kikuCaptureNoneSelected:"\u0645\u062D\u0641\u0648\u0638 \u06A9\u0631\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u06A9\u0648\u0626\u06CC \u0622\u0626\u0679\u0645 \u0645\u0646\u062A\u062E\u0628 \u0646\u06C1\u06CC\u06BA \u06A9\u06CC\u0627 \u06AF\u06CC\u0627\u06D4",kikuDeleteDbError:"\u0688\u06CC\u0679\u0627 \u0628\u06CC\u0633 \u06A9\u06CC \u062E\u0631\u0627\u0628\u06CC \u06A9\u06CC \u0648\u062C\u06C1 \u0633\u06D2 \u062D\u0630\u0641 \u06A9\u0631\u0646\u06D2 \u0645\u06CC\u06BA \u0646\u0627\u06A9\u0627\u0645\u06CC\u06D4",kikuDeleteDone:"\u0622\u067E \u06A9\u06CC \u0645\u062D\u0641\u0648\u0638 \u06A9\u0631\u062F\u06C1 \u0627\u0634\u06CC\u0627\u0621 \u0633\u06D2 \u06C1\u0679\u0627 \u062F\u06CC\u0627 \u06AF\u06CC\u0627\u06D4",kikuDeleteNoContext:"\u062D\u0630\u0641 \u06A9\u0631\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0635\u0641\u062D\u06D2 \u06A9\u0627 \u0633\u06CC\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u0641\u0631\u0627\u06C1\u0645 \u0646\u06C1\u06CC\u06BA \u06A9\u06CC\u0627 \u06AF\u06CC\u0627\u06D4",kikuMemoryIntro:"\u0633\u0627\u0626\u0679\u0633 \u0628\u06BE\u0631 \u0645\u06CC\u06BA \u0645\u062D\u0641\u0648\u0638 \u06A9\u0631\u062F\u06C1 \u062A\u0645\u0627\u0645 \u0686\u06CC\u0632\u06CC\u06BA \u0622\u067E \u06A9\u06CC \u0646\u062C\u06CC \u06CC\u0627\u062F\u062F\u0627\u0634\u062A \u0645\u06CC\u06BA \u06C1\u06CC\u06BA\u06D4 \u0627\u067E\u0646\u06CC \u062E\u0641\u06CC\u06C1 \u06A9\u0644\u06CC\u062F \u0633\u06D2 \u06A9\u06BE\u0648\u0644\u06CC\u06BA:",kikuMintNeeded:"\u0633\u0627\u0626\u0679\u0633 \u067E\u0631 \u0686\u06CC\u0632\u06CC\u06BA \u0645\u062D\u0641\u0648\u0638 \u06A9\u0631\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0622\u067E \u06A9\u0648 kiku \u06A9\u06CC \u0636\u0631\u0648\u0631\u062A \u06C1\u06D2 \u2014 \u0645\u06CC\u06BA \u0622\u067E \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u06CC\u06A9 \u06A9\u0644\u06CC\u062F \u0628\u0646\u0627\u0624\u06BA \u06AF\u0627\u06D4 \u06CC\u06C1 \u0635\u0631\u0641 \u0627\u06CC\u06A9 \u0628\u0627\u0631 \u062F\u06A9\u06BE\u0627\u0626\u06CC \u062C\u0627\u062A\u06CC \u06C1\u06D2\u060C \u0627\u0633\u06D2 \u0645\u062D\u0641\u0648\u0638 \u0631\u06A9\u06BE\u06CC\u06BA\u06D4",kikuMintOffer:"\u0645\u06CC\u06BA \u0627\u0633\u06D2 \u0622\u067E \u06A9\u06D2 \u0644\u06CC\u06D2 \u0645\u062D\u0641\u0648\u0638 \u0631\u06A9\u06BE \u0633\u06A9\u062A\u0627 \u06C1\u0648\u06BA \u2014 \u0645\u06CC\u06BA \u0622\u067E \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u06CC\u06A9 kiku \u06A9\u0644\u06CC\u062F \u0628\u0646\u0627\u0624\u06BA \u06AF\u0627\u06D4 \u06CC\u06C1 \u0635\u0631\u0641 \u0627\u06CC\u06A9 \u0628\u0627\u0631 \u062F\u06A9\u06BE\u0627\u0626\u06CC \u062C\u0627\u062A\u06CC \u06C1\u06D2\u06D4",kikuNeedKeyToUpdate:"\u0627\u067E\u0646\u06CC kiku \u06A9\u0644\u06CC\u062F \u062F\u0631\u062C \u06A9\u0631\u06CC\u06BA \u062A\u0627\u06A9\u06C1 \u0645\u06CC\u06BA \u0622\u067E \u06A9\u06CC \u0645\u062D\u0641\u0648\u0638 \u06A9\u0631\u062F\u06C1 \u0627\u0634\u06CC\u0627\u0621 \u062A\u0644\u0627\u0634 \u0627\u0648\u0631 \u0627\u067E \u0688\u06CC\u0679 \u06A9\u0631 \u0633\u06A9\u0648\u06BA\u06D4",micDenied:"\u0645\u0627\u0626\u06CC\u06A9\u0631\u0648\u0641\u0648\u0646 \u0628\u0644\u0627\u06A9 \u06C1\u06D2\u06D4 \u0627\u0633 \u0633\u0627\u0626\u0679 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0645\u0627\u0626\u06CC\u06A9 \u06A9\u06CC \u0627\u062C\u0627\u0632\u062A \u062F\u06CC\u06BA \u0627\u0648\u0631 \u062F\u0648\u0628\u0627\u0631\u06C1 \u06A9\u0648\u0634\u0634 \u06A9\u0631\u06CC\u06BA\u06D4",micFailed:"\u0622\u0648\u0627\u0632 \u0633\u0646\u0627\u0626\u06CC \u0646\u06C1\u06CC\u06BA \u062F\u06CC\u06D4 \u062F\u0648\u0628\u0627\u0631\u06C1 \u06A9\u0648\u0634\u0634 \u06A9\u0631\u06CC\u06BA\u06D4",micInsecure:"\u0622\u0648\u0627\u0632 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0645\u062D\u0641\u0648\u0638 (https) \u06A9\u0646\u06A9\u0634\u0646 \u062F\u0631\u06A9\u0627\u0631 \u06C1\u06D2\u06D4",micLangUnsupported:"\u06CC\u06C1 \u0628\u0631\u0627\u0624\u0632\u0631 \u0627\u0628\u06BE\u06CC \u0627\u0633 \u0632\u0628\u0627\u0646 \u06A9\u0648 \u0646\u06C1\u06CC\u06BA \u0633\u0645\u062C\u06BE \u0633\u06A9\u062A\u0627\u06D4 \u0628\u0631\u0627\u06C1 \u06A9\u0631\u0645 \u0679\u0627\u0626\u067E \u06A9\u0631\u06CC\u06BA\u06D4",micMissing:"\u06A9\u0648\u0626\u06CC \u0645\u0627\u0626\u06CC\u06A9\u0631\u0648\u0641\u0648\u0646 \u0646\u06C1\u06CC\u06BA \u0645\u0644\u0627\u06D4",micNetwork:"\u0622\u0648\u0627\u0632 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u0646\u0679\u0631\u0646\u06CC\u0679 \u06A9\u0646\u06A9\u0634\u0646 \u062F\u0631\u06A9\u0627\u0631 \u06C1\u06D2\u06D4 \u0627\u067E\u0646\u0627 \u06A9\u0646\u06A9\u0634\u0646 \u0686\u06CC\u06A9 \u06A9\u0631\u06CC\u06BA \u0627\u0648\u0631 \u062F\u0648\u0628\u0627\u0631\u06C1 \u06A9\u0648\u0634\u0634 \u06A9\u0631\u06CC\u06BA\u06D4",micNoSpeech:"\u06A9\u0686\u06BE \u0633\u0646\u0627\u0626\u06CC \u0646\u06C1\u06CC\u06BA \u062F\u06CC\u0627\u06D4 \u0645\u0627\u0626\u06CC\u06A9 \u06A9\u06D2 \u0642\u0631\u06CC\u0628 \u0622 \u06A9\u0631 \u062F\u0648\u0628\u0627\u0631\u06C1 \u0628\u0648\u0644\u06CC\u06BA\u06D4",namePlaceholder:"\u0627\u067E\u0646\u0627 \u0646\u0627\u0645 \u0644\u06A9\u06BE\u06CC\u06BA\u2026",nameStepAsk:"\u0645\u06CC\u06BA \u0622\u067E \u06A9\u0648 \u06A9\u0633 \u0646\u0627\u0645 \u0633\u06D2 \u067E\u06A9\u0627\u0631\u0648\u06BA\u061F",nameStepLead:"\u0645\u06CC\u06BA \u0622\u067E \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u0633 \u0633\u0627\u0626\u0679 \u06CC\u0627 \u06A9\u0633\u06CC \u062F\u0648\u0633\u0631\u06CC \u0633\u0627\u0626\u0679 \u067E\u0631 \u06A9\u0686\u06BE \u0628\u06BE\u06CC \u062A\u0644\u0627\u0634\u060C \u062A\u0635\u0648\u0631 \u06CC\u0627 \u0645\u062D\u0641\u0648\u0638 \u06A9\u0631 \u0633\u06A9\u062A\u0627 \u06C1\u0648\u06BA\u06D4",nameStepTitle:"\u0622\u067E \u0633\u06D2 \u0645\u0644 \u06A9\u0631 \u062E\u0648\u0634\u06CC \u06C1\u0648\u0626\u06CC\u06D4",namesAsWritten:"\u0646\u0627\u0645 \u0627\u0648\u0631 \u062A\u0641\u0635\u06CC\u0644\u0627\u062A \u0628\u0627\u0644\u06A9\u0644 \u0648\u06CC\u0633\u06D2 \u062C\u06CC\u0633\u06D2 \u0633\u0627\u0626\u0679 \u067E\u0631 \u062F\u0631\u062C \u06C1\u06CC\u06BA\u06D4",pillCompareTop2:"\u0628\u06C1\u062A\u0631\u06CC\u0646 2 \u06A9\u0627 \u0645\u0648\u0627\u0632\u0646\u06C1 \u06A9\u0631\u06CC\u06BA",pillCompareTop2Query:"{a} \u0627\u0648\u0631 {b} \u06A9\u0627 \u0645\u0648\u0627\u0632\u0646\u06C1 \u06A9\u0631\u06CC\u06BA",pillFindAlternatives:"\u0645\u062A\u0628\u0627\u062F\u0644 \u062A\u0644\u0627\u0634 \u06A9\u0631\u06CC\u06BA",pillFindAlternativesQuery:"{name} \u06A9\u06D2 \u0627\u0686\u06BE\u06D2 \u0645\u062A\u0628\u0627\u062F\u0644 \u06A9\u06CC\u0627 \u06C1\u06CC\u06BA\u061F",pillMoreOn:"{name} \u06A9\u06D2 \u0628\u0627\u0631\u06D2 \u0645\u06CC\u06BA \u0645\u0632\u06CC\u062F",pillMoreOnQuery:"\u0645\u062C\u06BE\u06D2 {name} \u06A9\u06D2 \u0628\u0627\u0631\u06D2 \u0645\u06CC\u06BA \u0645\u0632\u06CC\u062F \u0628\u062A\u0627\u0626\u06CC\u06BA",pillRecommend:"\u06A9\u0686\u06BE \u062A\u062C\u0648\u06CC\u0632 \u06A9\u0631\u06CC\u06BA",pillRecommendQuery:"\u0622\u067E \u0645\u06CC\u0631\u06D2 \u0644\u06CC\u06D2 \u06A9\u06CC\u0627 \u062A\u062C\u0648\u06CC\u0632 \u06A9\u0631\u062A\u06D2 \u06C1\u06CC\u06BA\u061F",pillShowPopular:"\u0645\u0642\u0628\u0648\u0644 \u0627\u0634\u06CC\u0627\u0621 \u062F\u06A9\u06BE\u0627\u0626\u06CC\u06BA",pillShowPopularQuery:"\u0622\u067E \u06A9\u06CC \u0633\u0628 \u0633\u06D2 \u0645\u0642\u0628\u0648\u0644 \u0627\u0634\u06CC\u0627\u0621 \u06A9\u0648\u0646 \u0633\u06CC \u06C1\u06CC\u06BA\u061F",pillSimilarOptions:"\u0645\u0644\u062A\u06D2 \u062C\u0644\u062A\u06D2 \u0627\u062E\u062A\u06CC\u0627\u0631\u0627\u062A",pillSimilarOptionsQuery:"\u0645\u062C\u06BE\u06D2 {name} \u062C\u06CC\u0633\u06CC \u0645\u0632\u06CC\u062F \u0686\u06CC\u0632\u06CC\u06BA \u062F\u06A9\u06BE\u0627\u0626\u06CC\u06BA",pillUnder:"{amount} \u0633\u06D2 \u06A9\u0645",pillUnderQuery:"{amount} \u0633\u06D2 \u06A9\u0645 \u0642\u06CC\u0645\u062A \u0648\u0627\u0644\u06D2 \u0627\u062E\u062A\u06CC\u0627\u0631\u0627\u062A \u062F\u06A9\u06BE\u0627\u0626\u06CC\u06BA",pillWhichBest:"\u06A9\u0648\u0646 \u0633\u0627 \u0628\u06C1\u062A\u0631\u06CC\u0646 \u06C1\u06D2\u061F",pillWhichBestQuery:"\u0622\u067E \u06A9\u0648\u0646 \u0633\u0627 \u062A\u062C\u0648\u06CC\u0632 \u06A9\u0631\u06CC\u06BA \u06AF\u06D2 \u0627\u0648\u0631 \u06A9\u06CC\u0648\u06BA\u061F",replyingOriginal:"\u0645\u06CC\u06BA {lang} \u0645\u06CC\u06BA \u062C\u0648\u0627\u0628 \u062F\u06D2 \u0631\u06C1\u0627 \u06C1\u0648\u06BA\u060C \u0646\u062A\u0627\u0626\u062C \u0633\u0627\u0626\u0679 \u06A9\u06D2 \u0645\u0637\u0627\u0628\u0642 \u06C1\u06CC\u06BA\u06D4 \u0645\u062C\u06BE \u0633\u06D2 \u06A9\u0686\u06BE \u0628\u06BE\u06CC \u067E\u0648\u0686\u06BE\u06CC\u06BA\u06D4",replyingTranslated:"\u0645\u06CC\u06BA {lang} \u0645\u06CC\u06BA \u062C\u0648\u0627\u0628 \u062F\u06D2 \u0631\u06C1\u0627 \u06C1\u0648\u06BA\u060C \u0646\u062A\u0627\u0626\u062C \u06A9\u0627 \u062A\u0631\u062C\u0645\u06C1 \u0628\u06BE\u06CC \u06A9\u06CC\u0627 \u06AF\u06CC\u0627 \u06C1\u06D2\u06D4 \u0645\u062C\u06BE \u0633\u06D2 \u06A9\u0686\u06BE \u0628\u06BE\u06CC \u067E\u0648\u0686\u06BE\u06CC\u06BA\u06D4",statusSent:"\u0628\u06BE\u06CC\u062C \u062F\u06CC\u0627 \u06AF\u06CC\u0627",statusStopped:"\u0628\u06BE\u06CC\u062C \u062F\u06CC\u0627 \u06AF\u06CC\u0627 \xB7 \u062C\u0648\u0627\u0628 \u0631\u0648\u06A9 \u062F\u06CC\u0627 \u06AF\u06CC\u0627",thinking:"\u0633\u0648\u0686 \u0631\u06C1\u0627 \u06C1\u06D2",thoughtForSeconds:"{duration} \u062A\u06A9 \u0633\u0648\u0686\u0627",thoughtProcess:"\u0633\u0648\u0686\u0646\u06D2 \u06A9\u0627 \u0639\u0645\u0644",vizDisclaimerImage:"\u0645\u0635\u0646\u0648\u0639\u06CC \u0630\u06C1\u0627\u0646\u062A \u0633\u06D2 \u062A\u06CC\u0627\u0631 \u06A9\u0631\u062F\u06C1 \u2014 \u0627\u0635\u0644 \u067E\u0631\u0648\u0688\u06A9\u0679 \u0633\u06D2 \u0631\u0646\u06AF\u060C \u0633\u0627\u0626\u0632 \u0627\u0648\u0631 \u062C\u06AF\u06C1 \u0645\u062E\u062A\u0644\u0641 \u06C1\u0648 \u0633\u06A9\u062A\u06CC \u06C1\u06D2\u06D4",vizDisclaimerVideo:"\u0645\u0635\u0646\u0648\u0639\u06CC \u0630\u06C1\u0627\u0646\u062A \u0633\u06D2 \u062A\u06CC\u0627\u0631 \u06A9\u0631\u062F\u06C1 \u2014 \u0627\u0635\u0644 \u067E\u0631\u0648\u0688\u06A9\u0679 \u0633\u06D2 \u0631\u0646\u06AF\u060C \u0633\u0627\u0626\u0632 \u0627\u0648\u0631 \u062D\u0631\u06A9\u062A \u0645\u062E\u062A\u0644\u0641 \u06C1\u0648 \u0633\u06A9\u062A\u06CC \u06C1\u06D2\u06D4",vizUnavailable:"\u067E\u06CC\u0634 \u0646\u0638\u0627\u0631\u06C1 \u0644\u0648\u0688 \u0646\u06C1\u06CC\u06BA \u06C1\u0648 \u0633\u06A9\u0627\u06D4",voiceHint:"\u0628\u0633 \u0628\u0627\u062A \u06A9\u0631\u06CC\u06BA \u2014 \u062C\u0628 \u0622\u067E \u0631\u06A9\u06CC\u06BA \u06AF\u06D2 \u062A\u0648 \u0645\u06CC\u06BA \u062C\u0648\u0627\u0628 \u062F\u0648\u06BA \u06AF\u0627\u06D4",voiceListening:"\u0633\u0646 \u0631\u06C1\u0627 \u06C1\u06D2\u2026 \u0631\u0648\u06A9\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0645\u0627\u0626\u06CC\u06A9 \u067E\u0631 \u0679\u06CC\u067E \u06A9\u0631\u06CC\u06BA",voiceModeExit:"\u06C1\u06CC\u0646\u0688\u0632 \u0641\u0631\u06CC \u0633\u06D2 \u0646\u06A9\u0644\u06CC\u06BA",voiceModeStart:"\u06C1\u06CC\u0646\u0688\u0632 \u0641\u0631\u06CC \u06AF\u0641\u062A\u06AF\u0648",voiceMuted:"\u062E\u0627\u0645\u0648\u0634 (\u0645\u06CC\u0648\u0679)",voiceMutedHint:"\u062F\u0648\u0628\u0627\u0631\u06C1 \u0628\u0648\u0644\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0645\u0627\u0626\u06CC\u06A9\u0631\u0648\u0641\u0648\u0646 \u067E\u0631 \u0679\u06CC\u067E \u06A9\u0631\u06CC\u06BA\u06D4",voicePhaseListening:"\u0633\u0646 \u0631\u06C1\u0627 \u06C1\u06D2",voicePhaseSpeaking:"\u0628\u0648\u0644 \u0631\u06C1\u0627 \u06C1\u06D2",voicePhaseThinking:"\u0633\u0648\u0686 \u0631\u06C1\u0627 \u06C1\u06D2",voiceSending:"\u0633\u0645\u062C\u06BE \u06AF\u06CC\u0627 \u2014 \u0628\u06BE\u06CC\u062C \u0631\u06C1\u0627 \u06C1\u06D2\u2026",termsStepTitle:"\u0631\u0627\u0632\u062F\u0627\u0631\u06CC \u0627\u0648\u0631 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06A9\u06CC \u0634\u0631\u0627\u0626\u0637",termsStepSubtitle:"\u0634\u0641\u0627\u0641\u060C \u06AF\u0645\u0646\u0627\u0645\u060C \u0627\u0648\u0631 \u0628\u063A\u06CC\u0631 \u06A9\u0633\u06CC \u0630\u0627\u062A\u06CC \u0634\u0646\u0627\u062E\u062A\u06CC \u0688\u06CC\u0679\u0627 \u06A9\u06D2\u06D4",termsPiiTitle:"\u06A9\u0648\u0626\u06CC \u0630\u0627\u062A\u06CC \u0634\u0646\u0627\u062E\u062A\u06CC \u0688\u06CC\u0679\u0627 \u0627\u06A9\u0679\u06BE\u0627 \u0646\u06C1\u06CC\u06BA \u06A9\u06CC\u0627 \u062C\u0627\u062A\u0627",termsPiiDesc:"\u06C1\u0645 \u0622\u067E \u06A9\u06CC \u0686\u06CC\u0679\u0633 \u06CC\u0627 \u0635\u0648\u062A\u06CC \u06AF\u0641\u062A\u06AF\u0648 \u0633\u06D2 \u06A9\u0628\u06BE\u06CC \u0628\u06BE\u06CC \u06A9\u0648\u0626\u06CC \u0630\u0627\u062A\u06CC \u0634\u0646\u0627\u062E\u062A\u06CC \u0645\u0639\u0644\u0648\u0645\u0627\u062A (\u06A9\u0648\u0626\u06CC \u0627\u06CC \u0645\u06CC\u0644\u060C \u0641\u0648\u0646 \u0646\u0645\u0628\u0631\u060C \u06CC\u0627 \u062D\u0642\u06CC\u0642\u06CC \u0646\u0627\u0645) \u0627\u06A9\u0679\u06BE\u0627 \u06CC\u0627 \u0645\u062D\u0641\u0648\u0638 \u0646\u06C1\u06CC\u06BA \u06A9\u0631\u062A\u06D2\u06D4",termsSessionTitle:"\u06AF\u0645\u0646\u0627\u0645 \u0633\u06CC\u0634\u0646 \u0679\u0648\u06A9\u0646\u0632",termsSessionDesc:"\u0622\u067E \u06A9\u0627 \u0633\u06CC\u0634\u0646 \u0635\u0631\u0641 \u0633\u06CC\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06A9\u06BE\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u06CC\u06A9 \u06AF\u0645\u0646\u0627\u0645 \u0679\u0648\u06A9\u0646 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06A9\u0631\u062A\u0627 \u06C1\u06D2\u06D4 \u06CC\u06C1 \u06A9\u0628\u06BE\u06CC \u0628\u06BE\u06CC \u0622\u067E \u06A9\u06CC \u062D\u0642\u06CC\u0642\u06CC \u0634\u0646\u0627\u062E\u062A \u0633\u06D2 \u0646\u06C1\u06CC\u06BA \u062C\u0691\u062A\u0627\u06D4",termsMemoryTitle:"\u0639\u0627\u0631\u0636\u06CC \u0686\u06CC\u0679\u0633 \u0628\u0645\u0642\u0627\u0628\u0644\u06C1 \u0645\u06CC\u0645\u06CC \u0648\u0627\u0644\u0679",termsMemoryDesc:'\u0639\u0627\u0645 \u0686\u06CC\u0679\u0633 \u0639\u0627\u0631\u0636\u06CC \u06C1\u06CC\u06BA \u2014 \u0679\u06CC\u0628 \u0628\u0646\u062F \u06A9\u0631\u0646\u06D2 \u06CC\u0627 \u0686\u06CC\u0679 \u0635\u0627\u0641 \u06A9\u0631\u0646\u06D2 \u0633\u06D2 \u0648\u06C1 \u06C1\u0645\u06CC\u0634\u06C1 \u06A9\u06D2 \u0644\u06CC\u06D2 \u062E\u062A\u0645 \u06C1\u0648 \u062C\u0627\u062A\u06CC \u06C1\u06CC\u06BA\u06D4 \u0648\u06C1 \u0686\u06CC\u0632\u06CC\u06BA \u062C\u0648 \u0622\u067E "@kiku" \u0633\u06D2 \u0645\u062D\u0641\u0648\u0638 \u06A9\u0631\u062A\u06D2 \u06C1\u06CC\u06BA \u0627\u0646\u06A9\u0631\u067E\u0679\u0688 \u06C1\u0648\u062A\u06CC \u06C1\u06CC\u06BA \u0627\u0648\u0631 \u0627\u0646\u06C1\u06CC\u06BA \u0627\u067E\u0646\u06CC \u062E\u0641\u06CC\u06C1 \u06A9\u0644\u06CC\u062F \u06A9\u06D2 \u0630\u0631\u06CC\u0639\u06D2 mimi.akropolys.cloud \u067E\u0631 \u06A9\u06BE\u0648\u0644\u0627 \u062C\u0627 \u0633\u06A9\u062A\u0627 \u06C1\u06D2\u06D4',termsCookieTitle:"\u0645\u06CC\u0632\u0628\u0627\u0646 \u0648\u06CC\u0628 \u0633\u0627\u0626\u0679 \u0679\u06CC\u0644\u06CC \u0645\u06CC\u0679\u0631\u06CC",termsCookieDesc:"\u062C\u0633 \u0648\u06CC\u0628 \u0633\u0627\u0626\u0679 \u067E\u0631 kiku \u0634\u0627\u0645\u0644 \u06C1\u06D2 \u0648\u06C1 \u0627\u067E\u0646\u06CC \u06A9\u0648\u06A9\u06CC \u067E\u0627\u0644\u06CC\u0633\u06CC \u06A9\u06D2 \u062A\u062D\u062A \u06A9\u0648\u06A9\u06CC\u0632 \u0627\u0648\u0631 \u0627\u06CC\u0646\u0627\u0644\u06CC\u0679\u06A9\u0633 \u062C\u0645\u0639 \u06A9\u0631 \u0633\u06A9\u062A\u06CC \u06C1\u06D2\u060C \u062C\u0648 kiku \u06A9\u06D2 \u06A9\u0646\u0679\u0631\u0648\u0644 \u0633\u06D2 \u0628\u0627\u06C1\u0631 \u06C1\u06D2\u06D4",termsAgreeButton:"\u0645\u062A\u0641\u0642 \u06C1\u0648\u06BA \u0627\u0648\u0631 \u062C\u0627\u0631\u06CC \u0631\u06A9\u06BE\u06CC\u06BA",termsAgreeCounting:"\u0645\u062A\u0641\u0642 \u06C1\u0648\u06BA \u0627\u0648\u0631 \u062C\u0627\u0631\u06CC \u0631\u06A9\u06BE\u06CC\u06BA ({seconds}s)",termsPlaceholder:"\u0628\u0631\u0627\u0626\u06D2 \u0645\u06C1\u0631\u0628\u0627\u0646\u06CC \u0627\u0648\u067E\u0631 \u062F\u06CC \u06AF\u0626\u06CC \u0631\u0627\u0632\u062F\u0627\u0631\u06CC \u0627\u0648\u0631 \u0634\u0631\u0627\u0626\u0637 \u06A9\u0627 \u062C\u0627\u0626\u0632\u06C1 \u0644\u06CC\u06BA \u0627\u0648\u0631 \u0642\u0628\u0648\u0644 \u06A9\u0631\u06CC\u06BA\u2026",whatHaveYouSaved:"\u0622\u067E \u0646\u06D2 \u06A9\u06CC\u0627 \u0645\u062D\u0641\u0648\u0638 \u06A9\u06CC\u0627 \u06C1\u06D2\u061F"}};import{jsx as yi}from"react/jsx-runtime";function er(e){if(!e)return null;let r=e.trim().toLowerCase(),a={english:"english",en:"english",swahili:"swahili",kiswahili:"swahili",sw:"swahili",french:"french",fran\u00E7ais:"french",francais:"french",fr:"french",spanish:"spanish",espa\u00F1ol:"spanish",espanol:"spanish",es:"spanish",arabic:"arabic",\u0627\u0644\u0639\u0631\u0628\u064A\u0629:"arabic",ar:"arabic",portuguese:"portuguese",portugu\u00EAs:"portuguese",pt:"portuguese",hindi:"hindi",\u0939\u093F\u0928\u094D\u0926\u0940:"hindi",hi:"hindi",chinese:"chinese",\u4E2D\u6587:"chinese",zh:"chinese",japanese:"japanese",\u65E5\u672C\u8A9E:"japanese",ja:"japanese",urdu:"urdu",\u0627\u0631\u062F\u0648:"urdu",ur:"urdu"}[r];return!a||!(a in So)?null:{strings:So[a],dir:a==="arabic"||a==="urdu"?"rtl":"ltr",bcp47:a==="arabic"?"ar":a==="hindi"?"hi":a==="chinese"?"zh":a==="japanese"?"ja":a==="urdu"?"ur":a==="swahili"?"sw":a==="french"?"fr":a==="spanish"?"es":a==="portuguese"?"pt":"en"}}function Nl(e){let r=/var\(\s*(--[\w-]+)/.exec(e)?.[1];if(!r||typeof document>"u")return"";for(let t of[document.documentElement,document.body]){let a=t?getComputedStyle(t).getPropertyValue(r).trim():"";if(a)return a.split(",")[0].trim()}return""}function xi({shopperLanguage:e,theme:r}){let t=Ml(),[a,o]=Vt(()=>er(e)?.strings||{}),[i,s]=Vt(!0),[c,n]=Vt(()=>!e||!!er(e)),l=e?`akropolys_ui_dir_${e.toLowerCase()}`:"",[m,p]=Vt(()=>{let w=er(e);if(w)return w.dir==="rtl";if(Ja(e)?.rtl)return!0;if(typeof window>"u"||!l)return!1;try{return localStorage.getItem(l)==="rtl"}catch{return!1}}),[u,d]=Vt(()=>er(e)?.bcp47||""),[k,g]=Vt(null),[v,x]=Vt(null);Co(()=>{if(!e){d(""),g(null),o({}),n(!0),p(!1);return}let w=er(e),U=Ja(e);w?(o(w.strings),p(w.dir==="rtl"),d(w.bcp47),n(!0)):(U?.rtl&&p(!0),n(!1));let F=!1;return(async()=>{try{let I=await t.getUIStrings?.(e,Zt);if(!F&&I?.complete){s(I.curated!==!1),o(H=>({...w?.strings||{},...I.strings})),p(I.dir==="rtl"),d(I.bcp47||w?.bcp47||"");try{localStorage.setItem(l,I.dir)}catch{}I.font&&Dn(I.font,250),g(I.font??null)}}catch{}F||n(!0)})(),()=>{F=!0}},[e,l,t]),Co(()=>{let w=!1;return(async()=>{try{let U=await so(t);!w&&U&&x(U)}catch{}})(),()=>{w=!0}},[t]),co(k),co(v);let S=Pr.useMemo(()=>{let U=(typeof r=="object"&&r?.fontFamily?r.fontFamily:"").split(",")[0].trim(),F=/^var\(/i.test(U),I=U.replace(/^['"]|['"]$/g,""),H=F?Nl(U):"",E=F?H?`${H}, `:"":I?`"${I}", `:"";if(k)return`${E}"Geist", "${k.family}", system-ui, sans-serif`;let D=e?e.trim().toLowerCase():"";if(D==="japanese"||D==="ja"||D==="\u65E5\u672C\u8A9E")return`${E}"Geist", "Hiragino Sans", "Hiragino Kaku Gothic ProN", "Yu Gothic", "Meiryo", system-ui, sans-serif`;if(D==="chinese"||D==="zh"||D==="\u4E2D\u6587")return`${E}"Geist", "PingFang SC", "Microsoft YaHei", "Hiragino Sans GB", system-ui, sans-serif`;if(D==="urdu"||D==="ur"||D==="\u0627\u0631\u062F\u0648")return`${E}"Noto Nastaliq Urdu", "IBM Plex Sans Arabic", "Geist", system-ui, sans-serif`;if(D==="arabic"||D==="ar"||D==="\u0627\u0644\u0639\u0631\u0628\u064A\u0629")return`${E}"IBM Plex Sans Arabic", "Geist", system-ui, sans-serif`;if(D==="hindi"||D==="hi"||D==="\u0939\u093F\u0928\u094D\u0926\u0940")return`${E}"Hind", "Geist", system-ui, sans-serif`},[k,e,typeof r=="object"&&r?r.fontFamily:void 0]),L=Pr.useMemo(()=>{let w=0,U=0;for(let F of Object.values(a))for(let I of F){let H=I.codePointAt(0)??0;H<192||/\p{L}/u.test(I)&&(H<=591?w++:U++)}return U>w},[a]),[b,M]=Vt(0);Co(()=>{if(typeof document>"u"||!document.fonts?.ready)return;let w=!0;return document.fonts.ready.then(()=>{w&&M(U=>U+1)}),()=>{w=!1}},[k]);let N=Pr.useMemo(()=>{if(!L||typeof document>"u")return!0;let U=(typeof r=="object"&&r?.fontFamily?r.fontFamily:"").split(",")[0].trim();if(!U)return!1;let F="";for(let H of Object.values(a))if(H){F=H;break}if(!F)return!0;let I=F.replace(/\s+/g,"");if(!I)return!0;try{let E=document.createElement("canvas").getContext("2d");if(!E)return!0;let D=U.startsWith("var(")&&getComputedStyle(document.documentElement).getPropertyValue(U.slice(4,-1).trim()).trim()||U;E.font=`16px ${D}, __akropolys_nonexistent_font__`;let Q=E.measureText(I).width;E.font="16px __akropolys_nonexistent_font__";let R=E.measureText(I).width;return Math.abs(Q-R)>1}catch{return!0}},[L,a,typeof r=="object"&&r?r.fontFamily:void 0,b]),y=vi((w,U)=>{let F=a[w]||Zt[w]||w;if(U)for(let[I,H]of Object.entries(U))F=F.split(`{${I}}`).join(H);return F},[a]),O=vi((w,U)=>(a[w]||Zt[w]||w).split(/(\{[a-zA-Z]+\})/g).map((I,H)=>{let E=I.match(/^\{([a-zA-Z]+)\}$/);return E&&U[E[1]]!==void 0?yi("bdi",{children:U[E[1]]},H):yi(Pr.Fragment,{children:I},H)}),[a]);return{chromeStrings:a,chromeReady:c,chromeCurated:i,isRTL:m,speechLang:u,scriptFont:k,fontStack:S,isNonLatin:L,hostFontCovers:N,t:y,tNode:O}}import{useState as wa,useRef as Qe,useEffect as tr,useCallback as Kt}from"react";function wi({messages:e,loading:r,messageRefs:t}){let a=Qe(null),o=Qe(0),[i,s]=wa(!1),[c,n]=wa(1),[l,m]=wa(0),p=Qe(()=>{}),u=Qe(null),d=Qe(!1),k=Qe(!0),[g,v]=wa(0),x=Qe(0),S=Qe(""),L=Qe(()=>{}),b=Qe(()=>{});tr(()=>{let h=a.current;if(!h)return;let z,_=()=>{clearTimeout(z),z=setTimeout(()=>{d.current=!1},150)},W=()=>{clearTimeout(z),d.current=!0,L.current()},V=()=>{d.current&&_()};return h.addEventListener("touchstart",W,{passive:!0}),h.addEventListener("touchend",_,{passive:!0}),h.addEventListener("touchcancel",_,{passive:!0}),h.addEventListener("scroll",V,{passive:!0}),()=>{clearTimeout(z),h.removeEventListener("touchstart",W),h.removeEventListener("touchend",_),h.removeEventListener("touchcancel",_),h.removeEventListener("scroll",V)}},[]),tr(()=>{let h=a.current;if(!h)return;let z=160,_=8,W=0,V=()=>{W=0;let G=h.scrollHeight-h.scrollTop-h.clientHeight;G<=_&&(k.current||b.current(),k.current=!0,F.current()),s(G>z&&!k.current);let K=h.scrollHeight-h.clientHeight;n(K>8?Math.min(1,Math.max(0,h.scrollTop/K)):1);let f=h.scrollTop+h.clientHeight*.33,Y=0;for(let $=0;$<t.current.length;$++){let j=t.current[$];j&&j.offsetTop-h.offsetTop<=f&&(Y=$)}m(Y)},A=()=>{W||(W=requestAnimationFrame(V))};V(),h.addEventListener("scroll",A,{passive:!0});let C=new ResizeObserver(A);return C.observe(h),()=>{W&&cancelAnimationFrame(W),h.removeEventListener("scroll",A),C.disconnect()}},[e.length,t]);let M=Kt(h=>{let z=`${h}:${x.current}`;S.current!==z&&(S.current=z,v(_=>_+1))},[]),[N,y]=wa(!1),O=Qe(!1),w=Kt(()=>{O.current||(O.current=!0,y(!0))},[]),U=Kt(()=>{O.current&&(O.current=!1,y(!1))},[]),F=Qe(()=>{});F.current=U;let[I,H]=wa(!1),E=Qe(!1),D=Qe(0),Q=Kt(()=>{E.current=!1,H(!1)},[]),R=Kt(()=>{S.current="",Q(),U()},[Q,U]),q=Kt(()=>{E.current&&(performance.now()-D.current<700||Q())},[Q]);L.current=q,b.current=R,tr(()=>{if(g===0)return;E.current=!0,D.current=performance.now(),H(!0);let h=setTimeout(Q,4200);return()=>clearTimeout(h)},[g,Q]);let re=Kt(h=>{let z=a.current,_=t.current[h];if(!z||!_)return;let W=_.offsetTop-z.offsetTop-12;u.current?u.current(W):z.scrollTo({top:W,behavior:"smooth"})},[t]),ee=Kt(()=>{let h=a.current;if(!h)return;k.current=!0,b.current();let z=h.scrollHeight-h.clientHeight;u.current?u.current(z):h.scrollTo({top:z,behavior:"smooth"})},[]);return tr(()=>{let h=a.current;if(!h)return;let z=requestAnimationFrame(()=>{let _=h.scrollTop;if(!k.current)w(),M(e.length);else if(!d.current){let W=h.scrollHeight-h.clientHeight;if(u.current){u.current(W);return}h.scrollTop=h.scrollHeight}h.scrollTop!==_&&p.current()});return()=>cancelAnimationFrame(z)},[e,r,t,M,w]),tr(()=>{let h=a.current;if(!h||typeof window<"u"&&window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return;let z=7,_=16,W=1/(window.devicePixelRatio||1),V=B=>Math.round(B/W)*W,A=h.scrollTop,C=h.scrollTop,G=h.scrollTop,K=0,f=null,Y=B=>{B!==G&&(h.scrollTop=B,G=h.scrollTop)},$=()=>{f!==null&&(cancelAnimationFrame(f),f=null),h.classList.remove("hsk-scrolling"),A=C=G=h.scrollTop};p.current=$,u.current=B=>{Math.abs(h.scrollTop-G)>1&&(A=C=G=h.scrollTop);let ce=Math.round(Math.max(0,Math.min(h.scrollHeight-h.clientHeight,B)));ce!==A&&(A=ce,f===null&&(K=performance.now(),f=requestAnimationFrame(j)))};let j=B=>{let ce=Math.min((B-K)/1e3,.05);if(K=B,C+=(A-C)*(1-Math.exp(-z*ce)),Math.abs(A-C)<W){C=A,Y(Math.round(A)),h.classList.remove("hsk-scrolling"),f=null;return}Y(V(C)),f=requestAnimationFrame(j)},J=B=>{if(B.ctrlKey)return;Math.abs(h.scrollTop-G)>1&&(A=C=G=h.scrollTop),B.deltaY<0&&(k.current&&(x.current+=1),k.current=!1),L.current();let ce=B.deltaMode===1?_:B.deltaMode===2?h.clientHeight:1,fe=Math.max(0,h.scrollHeight-h.clientHeight),je=Math.round(Math.max(0,Math.min(fe,A+B.deltaY*ce)));if(je===A){fe>0&&B.preventDefault();return}B.preventDefault(),A=je,f===null&&(K=performance.now(),h.classList.add("hsk-scrolling"),f=requestAnimationFrame(j))},te=h.scrollTop,le=()=>{let B=Math.abs(h.scrollTop-G)>1;B&&(o.current=performance.now(),h.scrollTop<te-1&&k.current&&(x.current+=1,k.current=!1)),te=h.scrollTop,f!==null&&B&&(cancelAnimationFrame(f),f=null,h.classList.remove("hsk-scrolling"),A=C=G=h.scrollTop)};return h.addEventListener("wheel",J,{passive:!1}),h.addEventListener("scroll",le,{passive:!0}),()=>{h.removeEventListener("scroll",le),h.removeEventListener("wheel",J),f!==null&&cancelAnimationFrame(f),h.classList.remove("hsk-scrolling"),p.current=()=>{},u.current=null}},[]),{msgsContainerRef:a,lastExternalScrollRef:o,showJumpToBottom:i,scrollProgress:c,activeMsgIdx:l,jumpAlert:I,unreadBelow:N,jumpToMessage:re,jumpToBottom:ee,resetAlertArming:R}}import{useState as ta,useEffect as Si,useCallback as Mo}from"react";import{useAkropolysContext as Tl}from"@akropolys/sdk";function Ci(e,r){let t=Tl(),[a,o]=ta(""),[i,s]=ta("idle"),[c,n]=ta(null),[l,m]=ta(null),[p,u]=ta(null),[d,k]=ta(uo),[g,v]=ta(!1),x=Mo(async(b,M)=>{try{await navigator.clipboard.writeText(b),u(M),setTimeout(()=>u(null),2e3)}catch{}},[]);Si(()=>{e&&e.type==="request_kiku_key"&&(s("prompt_key"),o(""))},[e]),Si(()=>{if(!c)return;k(uo);let b=setInterval(()=>{k(M=>M<=1?(clearInterval(b),n(null),m(null),0):M-1)},1e3);return()=>clearInterval(b)},[c]);let S=Mo(async()=>{let b=a.trim();b&&(t.setKikuPub(b),o(""),s("idle"),await r())},[t,a,r]),L=Mo(async()=>{if(!g){v(!0);try{let{secret:b,publicId:M}=await t.mintKikuKey();n(b),m(M),s("idle"),await r()}catch{}finally{v(!1)}}},[t,g,r]);return{keyInput:a,setKeyInput:o,keyPhase:i,setKeyPhase:s,mintedKey:c,setMintedKey:n,mintedPub:l,setMintedPub:m,copied:p,keyCountdown:d,minting:g,copyValue:x,handleUseExistingKey:S,handleCreateKey:L}}import{useCallback as Lr}from"react";function Mi({attachments:e,setAttachments:r,setInput:t,send:a,defaultCurrency:o,t:i}){let s=Lr(m=>{let p=m.name||"",u=`@kiku ${i("displayCapture",{name:p}).trim()}`,d=p||"capture current page";t("");let k=e;r([]),a(d,u,k.length>0?k:void 0,"capture")},[e,a,r,t,i]),c=Lr(m=>{let p=m.filter(k=>k.id).map(k=>({name:k.name||"",url:k.url||"",image:k.image||"",price:k.price?String(k.price):"",currency:k.currency||o})),u=m.map(k=>k.name).filter(Boolean).join(", "),d=`@kiku ${i("displayCaptureAll",{count:String(m.length)})}`;t(""),r([]),a(u||"capture all",d,void 0,"capture_all",p)},[o,a,r,t,i]),n=Lr(()=>{let m=`@kiku ${i("displayViewHistory")}`;t(""),r([]),a("show my saved items",m,void 0,"view_history")},[a,r,t,i]),l=Lr(()=>{let m=`@kiku ${i("displayDelete")}`;t(""),r([]),a("delete this",m,void 0,"delete")},[a,r,t,i]);return{handleKikuCapture:s,handleKikuCaptureAll:c,handleKikuViewHistory:n,handleKikuDelete:l}}import{useState as aa,useCallback as To}from"react";import{useAkropolysContext as Ll}from"@akropolys/sdk";import{useCallback as rt,useEffect as No,useRef as Xe,useState as Ar}from"react";var Ni=16e3,Rl=`
|
|
12
|
+
class KikuCapture extends AudioWorkletProcessor {
|
|
13
|
+
constructor() {
|
|
14
|
+
super();
|
|
15
|
+
this._ratio = sampleRate / ${Ni};
|
|
16
|
+
this._chunk = ${Math.round(Ni*.04)};
|
|
17
|
+
this._acc = new Int16Array(this._chunk);
|
|
18
|
+
this._n = 0;
|
|
19
|
+
this._pos = 0;
|
|
20
|
+
}
|
|
21
|
+
process(inputs) {
|
|
22
|
+
const ch = inputs[0] && inputs[0][0];
|
|
23
|
+
if (!ch) return true;
|
|
24
|
+
while (this._pos < ch.length) {
|
|
25
|
+
const i = this._pos | 0;
|
|
26
|
+
const frac = this._pos - i;
|
|
27
|
+
const a = ch[i];
|
|
28
|
+
const b = i + 1 < ch.length ? ch[i + 1] : a;
|
|
29
|
+
const s = a + (b - a) * frac;
|
|
30
|
+
const c = s < -1 ? -1 : s > 1 ? 1 : s;
|
|
31
|
+
this._acc[this._n++] = c < 0 ? c * 0x8000 : c * 0x7fff;
|
|
32
|
+
if (this._n === this._chunk) {
|
|
33
|
+
this.port.postMessage(this._acc.buffer, [this._acc.buffer]);
|
|
34
|
+
this._acc = new Int16Array(this._chunk);
|
|
35
|
+
this._n = 0;
|
|
36
|
+
}
|
|
37
|
+
this._pos += this._ratio;
|
|
38
|
+
}
|
|
39
|
+
this._pos -= ch.length;
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
registerProcessor('kiku-capture', KikuCapture);
|
|
44
|
+
`;function zl(e){let r=new Uint8Array(e),t="";for(let a=0;a<r.length;a+=32768)t+=String.fromCharCode.apply(null,Array.from(r.subarray(a,a+32768)));return btoa(t)}function Pl(e){let r=atob(e),t=new Uint8Array(r.length);for(let a=0;a<r.length;a++)t[a]=r.charCodeAt(a);return new Int16Array(t.buffer,0,t.length>>1)}function Ti(e){let[r,t]=Ar("idle"),[a,o]=Ar(!1),[i,s]=Ar([]),[c,n]=Ar(null),l=Xe(null),m=Xe(null),p=Xe(null),u=Xe(null),d=Xe(null),k=Xe(0),g=Xe(new Set),v=Xe(null),x=Xe(24e3),S=Xe(e);No(()=>{S.current=e},[e]);let L=Xe(!1),b=Xe(null),M=Xe(""),N=Xe(""),y=rt(()=>{let h=M.current.trim(),z=N.current.trim();M.current="",N.current="",!(!h&&!z)&&S.current.onExchange?.({heard:h,said:z})},[]),O=rt(()=>{},[]),w=rt(()=>{if(!L.current)return;let h=b.current;h&&(b.current=null,h())},[]),U=rt(()=>{let h=d.current;if(!h)return 0;let z=new Uint8Array(h.fftSize);h.getByteTimeDomainData(z);let _=0;for(let W=0;W<z.length;W++){let V=(z[W]-128)/128;_+=V*V}return Math.min(1,Math.sqrt(_/z.length)*4)},[]),F=r==="speaking"||r==="thinking",I=rt(h=>{let z=F?v.current:d.current;return!z||h.length!==z.frequencyBinCount?!1:(z.getByteFrequencyData(h),!0)},[F]),H=rt(()=>(F?v.current:d.current)?.frequencyBinCount??0,[F]),E=rt(()=>{for(let h of g.current)try{h.onended=null,h.stop()}catch{}g.current.clear(),k.current=0},[]),D=rt(h=>{let z=m.current,_=v.current;if(!z||!_||h.length===0)return;let W=x.current,V=z.createBuffer(1,h.length,W),A=V.getChannelData(0),C=h.length,G=Math.min(32,Math.floor(C/4));for(let $=0;$<C;$++){let j=h[$]/32768;$<G?j*=$/G:$>=C-G&&(j*=(C-1-$)/G),A[$]=j}let K=z.createBufferSource();K.buffer=V,K.connect(_);let f=z.currentTime,Y=Math.max(f+.02,k.current||f+.02);K.start(Y),k.current=Y+V.duration,g.current.add(K),K.onended=()=>{g.current.delete(K),g.current.size===0&&t($=>$==="speaking"?"listening":$)},t($=>$==="speaking"||$==="idle"||$==="ended"?$:"speaking")},[]),Q=rt(()=>{},[]),R=rt(()=>{},[]),q=rt(h=>{y(),l.current=null,L.current=!1,b.current=null,Q(),E(),u.current?.disconnect(),u.current=null,p.current?.getTracks().forEach(z=>z.stop()),p.current=null,d.current=null,v.current=null,m.current?.close().catch(()=>{}),m.current=null,t(h),o(!1),s([])},[y,E,Q]),re=rt(()=>{try{l.current?.send(JSON.stringify({type:"close"}))}catch{}try{l.current?.close()}catch{}q("idle")},[q]),ee=rt(async()=>{if(l.current)return;t("connecting");let h=S.current,z=h.apiUrl.replace(/\/+$/,""),_=new URL(z+"/voice/live",window.location.href);_.protocol=_.protocol==="https:"?"wss:":"ws:",_.searchParams.set("siteId",h.siteId),h.kikuId&&_.searchParams.set("kikuId",h.kikuId),h.language&&_.searchParams.set("language",h.language),h.voice&&_.searchParams.set("voice",h.voice);let W=new WebSocket(_.toString(),["akropolys.token."+h.token]);l.current=W,W.onmessage=Y=>{let $;try{$=JSON.parse(Y.data)}catch{return}switch($.type){case"ready":$.sampleRate&&(x.current=$.sampleRate),typeof $.secondsLeft=="number"&&n($.secondsLeft),L.current=!0,t("listening"),w();break;case"audio":Q(),$.audio&&D(Pl($.audio));break;case"hearing":o(!0);break;case"thinking":o(!1),t("thinking"),R();break;case"heard":M.current+=$.text;break;case"said":N.current+=$.text;break;case"interrupted":Q(),E(),o(!1),t("listening");break;case"turn_complete":Q(),o(!1),y();break;case"sources":Array.isArray($.sources)&&$.sources.length&&s($.sources);break;case"seconds":typeof $.secondsLeft=="number"&&n($.secondsLeft);break;case"refused":S.current.onRefused?.($.code||"guest"),re();break;case"error":S.current.onError?.($.code||"unavailable"),re();break}},W.onclose=Y=>{l.current===W&&(Y.code===4402&&(V=!0,S.current.onError?.(Y.reason==="site"?"siteLimit":"limit")),q("ended"))};let V=!1;W.onerror=()=>{V||S.current.onError?.("connection")};let A;try{if(!navigator.mediaDevices?.getUserMedia)throw{name:"NotAllowedError"};A=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}})}catch(Y){V=!0;try{W.close()}catch{}l.current=null,t("idle"),h.onError?.(Y?.name==="NotAllowedError"?"not-allowed":"audio-capture");return}if(l.current!==W){A.getTracks().forEach(Y=>Y.stop());return}p.current=A;let C=window.AudioContext||window.webkitAudioContext,G=new C;m.current=G;let K=G.createAnalyser();K.fftSize=1024,K.smoothingTimeConstant=.25,d.current=K;let f=G.createAnalyser();f.fftSize=1024,f.smoothingTimeConstant=.25,f.connect(G.destination),v.current=f;try{let Y=URL.createObjectURL(new Blob([Rl],{type:"application/javascript"}));if(await G.audioWorklet.addModule(Y),URL.revokeObjectURL(Y),l.current!==W){A.getTracks().forEach(J=>J.stop()),G.close().catch(()=>{});return}let $=new AudioWorkletNode(G,"kiku-capture");u.current=$,$.port.onmessage=J=>{W.readyState===WebSocket.OPEN&&W.send(JSON.stringify({type:"audio",audio:zl(J.data)}))};let j=G.createMediaStreamSource(A);b.current=()=>{j.connect(K),j.connect($)},w()}catch{S.current.onError?.("audio-worklet"),re()}},[w,D,y,E,R,Q,re,q]);return No(()=>()=>{re()},[re]),No(()=>{let h=p.current;if(h)for(let z of h.getAudioTracks())z.enabled=!e.muted},[e.muted,r]),{state:r,phase:r,hearing:a,sources:i,secondsLeft:c,micLevel:U,micSpectrum:I,spectrumBins:H,start:ee,stop:re}}var Al=e=>e==="connecting"||e==="ended"?"idle":e;function Ri({voiceLang:e,speechLang:r,shopperLanguage:t,ttsVoice:a="Puck",handleSendUtterance:o,appendSpokenExchange:i}){let s=Ll(),[c,n]=aa("off"),[l,m]=aa("idle"),[p,u]=aa(""),[d,k]=aa(!1),[g,v]=aa(null),[x,S]=aa(!1),[L,b]=aa(()=>{try{let R=localStorage.getItem(ho);if(R&&Sr.some(q=>q.name===R))return R}catch{}return a||"Puck"}),M=To(R=>{b(R);try{localStorage.setItem(ho,R)}catch{}},[]),N=gr({lang:e||r,onUtterance:R=>{m("thinking"),o(R)},onError:R=>{n("off"),m("idle"),u(R==="not-allowed"?"micDenied":R==="language-not-supported"?"micLangUnsupported":R==="audio-capture"?"micMissing":R==="network"?"micNetwork":"micFailed")},onBargeIn:()=>{Rt()}}),y=s?.api?.apiUrl||s?.apiUrl||"",O=s?.api?.siteId||s?.siteId||"",w=s?.api?.apiToken||s?.apiToken||"",U=s?.getShopperId?.()||s?.getKikuPub?.()||void 0,F=Ti({apiUrl:y,siteId:O,token:w,kikuId:U,language:t,voice:L,muted:d,onExchange:R=>{i(R.heard,R.said)},onError:R=>{if(R==="shopper_reply_limit"||R==="access_revoked"||R==="account_required"){S(!0),F.stop(),n("off");return}n("off"),u(R==="not-allowed"?"micDenied":R==="audio-capture"?"micMissing":R==="limit"?"voiceLimitReached":R==="siteLimit"?"voiceSiteLimit":R==="connection"||R==="network"?"micNetwork":"voiceUnavailable")},onRefused:R=>{(R==="shopper_reply_limit"||R==="access_revoked"||R==="account_required")&&S(!0),n("off"),u("voiceUnavailable")}}),I=typeof window<"u"&&!!window.WebSocket,H=To(async R=>{if(!$n()){u("micInsecure");return}u(""),n(R),R==="dictate"?(m("listening"),await N.start()):F.start()},[F,N]),E=To(()=>{n("off"),m("idle"),N.stop(),F.stop()},[F,N]),D=c==="converse"?Al(F.state):c==="dictate"?l==="listening"?N.hearing?"speaking":"listening":l:"idle",Q=c==="converse"&&(F.phase==="connecting"||F.state==="connecting");return{voiceMode:c,voicePhase:D,voiceConnecting:Q,voiceError:p,setVoiceError:u,voiceMuted:d,setVoiceMuted:k,voiceSecondsLeft:g,voiceBlocked:x,liveVoiceName:L,chooseVoice:M,canConverse:I,startVoice:H,stopVoice:E,voice:N,live:F}}import ct from"react";import{useEffect as Il,useRef as Te}from"react";import{jsx as ue,jsxs as Je}from"react/jsx-runtime";var Ro={idle:{bw:50,bh:60,tr:1,br:.42,bow:3},thinking:{bw:46,bh:46,tr:1,br:1,bow:2},visualizing:{bw:64,bh:42,tr:.42,br:.42,bow:2},speaking:{bw:44,bh:54,tr:.9,br:.9,bow:3},failed:{bw:53,bh:45,tr:.95,br:.55,bow:4},curious:{bw:48,bh:52,tr:.9,br:.7,bow:3},welcoming:{bw:50,bh:58,tr:1,br:.5,bow:2},guiding:{bw:46,bh:50,tr:.8,br:.8,bow:2},happy:{bw:52,bh:56,tr:1,br:.4,bow:4},focused:{bw:48,bh:52,tr:.9,br:.7,bow:2}},zo={idle:{lid:1,warm:0,breath:2100,wob:1},thinking:{lid:1,warm:.2,breath:1700,wob:1.6},visualizing:{lid:1,warm:.9,breath:1200,wob:2.2},speaking:{lid:1,warm:.35,breath:900,wob:1.8},failed:{lid:.28,warm:0,breath:3e3,wob:.6},curious:{lid:1,warm:.15,breath:1800,wob:1.4},welcoming:{lid:1,warm:.25,breath:1600,wob:1.2},guiding:{lid:1,warm:.2,breath:1500,wob:1.3},happy:{lid:1,warm:.4,breath:1200,wob:1.5},focused:{lid:1,warm:.2,breath:1500,wob:1.2}},Ir=[[0,0,0],[.09,.54,0],[.19,-.36,32],[.31,-.22,58],[.42,-.12,68],[.54,.04,28],[.63,.96,0],[.71,.18,0],[.79,-.16,20],[.88,.34,0],[.95,-.05,4],[1,0,0]];function El(e){let r=1;for(;r<Ir.length-1&&Ir[r][0]<e;)r++;let[t,a,o]=Ir[r-1],[i,s,c]=Ir[r],n=i===t?0:(e-t)/(i-t),l=n*n*(3-2*n);return[a+(s-a)*l,o+(c-o)*l]}var ar=6,zi=["bw","bh","tr","br","bow","lid","warm","wob","gx","gy"],Ot=(e,r,t)=>Math.max(r,Math.min(t,e));function Pi(e,r,t,a){let o=l=>l.toFixed(2),i=(r+t)/2,s=e+a,c=(i-r)*.55,n=(t-i)*.55;return`C${o(e)} ${o(r+c)} ${o(s)} ${o(i-c)} ${o(s)} ${o(i)}C${o(s)} ${o(i+n)} ${o(e)} ${o(t-n)} ${o(e)} ${o(t)}`}function Dl(e,r,t,a,o){let i=Ot(e*t,8,r*.96),s=Ot(e*a,8,r*.96),c=(p,u)=>`${p.toFixed(2)} ${u.toFixed(2)}`,n=.46,l=Ot((e-i)/e,0,1),m=Ot((e-s)/e,0,1);return`M${c(-e,-r+i)}C${c(-e,-r+i*n)} ${c(-e+i*n,-r)} ${c(-e+i,-r)}C${c(-e*.3*l,-r-2*l)} ${c(e*.3*l,-r-2*l)} ${c(e-i,-r)}C${c(e-i*n,-r)} ${c(e,-r+i*n)} ${c(e,-r+i)}`+Pi(e,-r+i,r-s,o)+`C${c(e,r-s*n)} ${c(e-s*n,r)} ${c(e-s,r)}C${c(e*.3*m,r+2*m)} ${c(-e*.3*m,r+2*m)} ${c(-e+s,r)}C${c(-e+s*n,r)} ${c(-e,r-s*n)} ${c(-e,r-s)}`+Pi(-e,r-s,-r+i,-o)+"Z"}var Sa=[{name:"Graphite",color:"#4B5058",light:"#A8AEB6",glow:"rgba(75, 80, 88, 0.26)"},{name:"Mist",color:"#78868F",light:"#BFC9CF",glow:"rgba(120, 134, 143, 0.26)"},{name:"Sandstone",color:"#8A7E71",light:"#CBC1B5",glow:"rgba(138, 126, 113, 0.26)"},{name:"Pewter",color:"#5F6670",light:"#B3BAC3",glow:"rgba(95, 102, 112, 0.26)"}],Ao=[{name:"Aegean",color:"#2E6FB7",light:"#9CC1E6",glow:"rgba(46, 111, 183, 0.30)"},{name:"Fern",color:"#3C8C60",light:"#A2CFB4",glow:"rgba(60, 140, 96, 0.30)"},{name:"Marigold",color:"#C48A22",light:"#EBD095",glow:"rgba(196, 138, 34, 0.30)"},{name:"Coral",color:"#C15A4E",light:"#E9AEA3",glow:"rgba(193, 90, 78, 0.30)"},{name:"Iris",color:"#5F5CC4",light:"#B6B4E8",glow:"rgba(95, 92, 196, 0.30)"}],Tp=[...Sa,...Ao];function Po(e){let a=(!Ao.includes(e)&&Math.random()<.26?Ao:Sa).filter(o=>o!==e);return a[Math.floor(Math.random()*a.length)]}function yt(e){let r=parseInt(e.slice(1),16);return[r>>16&255,r>>8&255,r&255]}function Lo(e){return`rgb(${Math.round(e[0])}, ${Math.round(e[1])}, ${Math.round(e[2])})`}function Fl(e,r,t){return[e[0]+(r[0]-e[0])*t,e[1]+(r[1]-e[1])*t,e[2]+(r[2]-e[2])*t]}var _l=[[255,253,248],[247,240,231],[231,218,202],[198,178,156]],Li=[.05,.15,.42,.74],ql=[.52,.72,.9,1],Ai={color:"#E2581D",light:"#FFBE96",glow:"rgba(226, 88, 29, 0.34)"};function Ii({state:e="idle",size:r=40,alert:t=!1,theme:a,feminine:o,accessories:i,onImpact:s,triggerRef:c}){let n=Te(e);n.current=e;let l=Te(t);l.current=t;let m=a==="blush"||o===!0||!!(i?.flower||i?.eyelashes||i?.blush),p=i?.flower??m,u=i?.eyelashes??m,d=i?.blush??m,k=Te(null),g=Te(null),v=Te(null),x=Te(null),S=Te(null),L=Te(null),b=Te(null),M=Te(null),N=Te(null),y=Te(null),O=Te(null),w=Te(null),U=Te(null),F=Te(null),I=Te([]),H=Te([]),E=Te(null),D=Te(`kiku-${Math.random().toString(36).slice(2,8)}`).current,Q=Te(s);return Q.current=s,Il(()=>{let R=window.matchMedia("(prefers-reduced-motion: reduce)").matches,q={},re={};zi.forEach(he=>{q[he]=Ro.idle[he]??zo.idle[he]??0,re[he]=0});let ee=Array.from({length:ar},()=>({x:0,y:0,w:0,h:0,rx:0,a:0})),h=Array.from({length:ar},()=>({x:0,y:0,w:0,h:0,rx:0,a:0})),z=1800,_=-1,W=0,V=2600,A=0,C=!1,G=9e3+Math.random()*8e3,K=-1,f=0,Y=0,$=0,j=4200,J=0,te=0,le=0,B=12e3,ce=Sa[0],fe=yt(ce.color),je=yt(ce.light),ze=[...fe],Pe=[...je],Wt=2600,We=-1/0,wt=!1,xe=0,nt=!1,dt=0,It=0,Aa=0,cr=!1,Yt=0,Gt=he=>{he-We<Wt?(ce=Po(ce),ze=yt(ce.color),Pe=yt(ce.light),We=-1/0):We=he},lr=(he,Ve,tt,Ye)=>{let Ke=n.current,it=Array.from({length:ar},()=>({x:0,y:0,w:0,h:0,rx:0,a:0})),St=(ht,Ie,at=0)=>{let Ne=Math.max(4,54*Math.max(.06,Ve));it[ht]={x:Ie+tt,y:-4+Ye+at,w:21,h:Ne,rx:10.5,a:1}};if(Ke==="thinking"){let Ie=he%2800/2800,at=Math.pow(Math.sin(Ie*Math.PI*2)*.5+.5,3);for(let Ne=0;Ne<4;Ne++){let Ct=he/700+Ne/4*Math.PI*2,da=(26-Ne%2*5)*(1-.94*at),Et=16+at*6+Math.sin(he/420+Ne)*1.4;it[Ne]={x:Math.cos(Ct)*da,y:Math.sin(Ct)*da*.86+2,w:Et,h:Et,rx:Et/2,a:1}}}else if(Ke==="visualizing")it[0]={x:0,y:-2,w:78,h:26,rx:13,a:1};else if(Ke==="speaking")for(let Ie=0;Ie<5;Ie++){let at=12+Math.abs(Math.sin(he/150+Ie*.9))*26;it[Ie]={x:(Ie-4/2)*15,y:-2,w:9,h:at,rx:4.5,a:1}}else Ke==="failed"?(St(0,-22,8),St(1,22,8)):(St(0,-22),St(1,22));return it};c&&(c.current=()=>{if(K>=0){nt=!0,ce=Po(ce),ze=yt(ce.color),Pe=yt(ce.light),We=-1/0;return}K=0,Gt(dt),G=dt+4e3});let ca=he=>{dt=he;let Ve=n.current,tt=Ro[Ve]??Ro.idle,Ye=zo[Ve]??zo.idle,Ke=Ve==="idle"||Ve==="failed";Ke&&!R&&(he>V&&(W=(Math.random()-.5)*2,V=he+1800+Math.random()*3600),q.wantGx=W*5);let it=l.current?1:0;Aa=(Aa+(it-It)*.1)*.88,It+=Aa;let St=l.current&&!R?Math.sin(he/480)*.055*It:0,ht={bw:tt.bw*(1+It*.34+St),bh:tt.bh*(1+It*.2+St),tr:tt.tr,br:tt.br,bow:tt.bow,warm:Ye.warm,wob:Ye.wob,lid:Ye.lid,gx:Ke&&!R?W*5:0,gy:Ke&&!R?Math.sin(he/2600)*2:0};!R&&Ke&&(_<0&&he>z&&(_=0),_>=0&&(_+=1/7,ht.lid=Ye.lid*Math.abs(_-.5)*2,_>=1&&(_=-1,ht.lid=Ye.lid,z=he+(Math.random()<.22?340:2600+Math.random()*4200)))),zi.forEach(pe=>{let we=pe;if(R){q[we]=ht[we];return}let ke=we==="lid"?.42:.11,pt=we==="lid"?.55:.78;re[we]=(re[we]+(ht[we]-q[we])*ke)*pt,q[we]+=re[we]});let Ie=0,at=0;!R&&l.current&&K<0&&he>Yt&&(K=0,Yt=he+2100,G=he+4e3),!R&&Ve==="idle"?K<0&&he>G&&(K=0,wt?(wt=!1,xe=0,ce=Po(ce),ze=yt(ce.color),Pe=yt(ce.light),We=-1/0):(xe++,Gt(he))):K<0&&(G=he+3e3+Math.random()*3e3),K>=0&&(K+=1/96,[Ie,at]=El(K),K>=1&&(K=-1,Ie=0,at=0,nt?(nt=!1,xe=0,G=he+150):!wt&&xe>=2?(wt=!0,G=he+240):G=he+5e3+Math.random()*5e3));let Ne=Math.max(0,Ie);if(l.current!==cr){cr=l.current;let pe=l.current?Ai:ce;ze=yt(pe.color),Pe=yt(pe.light),l.current&&!R&&(K<0&&(K=0),Yt=he+2600)}let Ct=l.current?Ai:ce;if(R)fe=[...ze],je=[...Pe];else for(let pe=0;pe<3;pe++)fe[pe]+=(ze[pe]-fe[pe])*.055,je[pe]+=(Pe[pe]-je[pe])*.055;let da=Lo(fe),Et=Lo(je);w.current?.setAttribute("stop-color",da),U.current?.setAttribute("stop-color",Et),F.current?.setAttribute("stop-color",Et);for(let pe=0;pe<4;pe++){let we=Li[pe]+(ql[pe]-Li[pe])*It;I.current[pe]?.style.setProperty("stop-color",Lo(Fl(_l[pe],fe,we)))}let dr=.34+Math.sin(he/1200)*.06,Ur=Ne>.02?Math.min(.72,dr+Ne*.34):dr;O.current?.setAttribute("opacity",Ur.toFixed(3)),Ne>.04?Q.current?.(Ne,Ct.color,Ct.glow):la>.04&&Q.current?.(0,Ct.color,Ct.glow),la=Ne;let hr=R?0:Math.sin(he/1900)*.9*q.wob,Dt=q.bw*(1+Ie*.55)+hr*.4,Ia=q.bh*(1-Ie*.62),Ea=Dl(Dt,Ia,Ot(q.tr+Ne*.5,0,1.2),Ot(q.br+Ne*.9,0,1),q.bow+hr+Ne*5);k.current?.setAttribute("d",Ea),g.current?.setAttribute("d",Ea);let Da=Ve==="thinking";Da!==C&&(C=Da,E.current?.setAttribute("filter",Da?`url(#${D}-goo)`:"none"));let Fa=lr(he,q.lid*(1-Ne*.85),q.gx,q.gy);for(let pe=0;pe<ar;pe++){let we=Fa[pe],ke=ee[pe],pt=h[pe];for(let Ge of["x","y","w","h","rx","a"]){if(R){ke[Ge]=we[Ge];continue}pt[Ge]=(pt[Ge]+(we[Ge]-ke[Ge])*.16)*.74,ke[Ge]+=pt[Ge]}let Ee=H.current[pe];Ee&&(Ee.setAttribute("x",(ke.x-ke.w/2).toFixed(2)),Ee.setAttribute("y",(ke.y-ke.h/2).toFixed(2)),Ee.setAttribute("width",Math.max(0,ke.w).toFixed(2)),Ee.setAttribute("height",Math.max(0,ke.h).toFixed(2)),Ee.setAttribute("rx",Math.max(0,Math.min(ke.rx,ke.w/2,ke.h/2)).toFixed(2)),Ee.setAttribute("opacity",Ot(ke.a,0,1).toFixed(2)))}let _a=R?0:Math.sin(he/Ye.breath)*1.5;!R&&Ke&&K<0?(he>j&&($=(Math.random()<.5?-1:1)*(.35+Math.random()*.65),j=he+2600+Math.random()*4200),he>B&&(le=le>.1?0:1,B=he+(le>.1?900:9e3+Math.random()*11e3))):($=0,le=0),Y=(Y+($-f)*.028)*.9,f+=Y,te=(te+(le-J)*.06)*.82,J+=te;let kt=q.bh-Ia,qa=f*3.4+J*4.5,pr=f*2.2+J*3,ur=J*2.4;if(v.current?.setAttribute("transform",`translate(${pr.toFixed(2)} ${(_a+kt-at+ur).toFixed(2)}) rotate(${qa.toFixed(2)} 0 60)`),x.current&&x.current.setAttribute("transform",`translate(${pr.toFixed(2)} ${(_a+kt-at+ur).toFixed(2)}) rotate(${qa.toFixed(2)} 0 60)`),p&&S.current){let pe=-Dt*.62,we=-Ia*.7,ke=-16+(R?0:Math.sin(he/1400)*3)+qa*.4;S.current.setAttribute("transform",`translate(${pe.toFixed(2)}, ${we.toFixed(2)}) rotate(${ke.toFixed(2)})`)}if(d&&L.current){let pe=12+q.gy*.5;L.current.setAttribute("transform",`translate(0, ${pe.toFixed(2)})`)}if(u&&b.current){let pe=Ve!=="thinking"&&Ve!=="visualizing"&&Ve!=="speaking";b.current.setAttribute("opacity",pe?Ot(q.lid*1.3,0,1).toFixed(2):"0");let we=(ke,pt)=>{let Ee=Math.max(1,Math.min(ke.w,ke.h)/2),Ge=ke.y-ke.h/2+Ee,Ua="";for(let[Br,ha]of[[20,7],[48,8],[76,6.5]]){let Mt=Br*Math.PI/180,Hr=ke.x+pt*Math.sin(Mt)*Ee,$r=Ge-Math.cos(Mt)*Ee,jr=ke.x+pt*Math.sin(Mt)*(Ee+ha),Ba=Ge-Math.cos(Mt)*(Ee+ha)-1.5,Vr=ke.x+pt*Math.sin(Mt-.22)*(Ee+ha*.65),Kr=Ge-Math.cos(Mt-.22)*(Ee+ha*.65);Ua+=` M ${Hr.toFixed(2)} ${$r.toFixed(2)} Q ${Vr.toFixed(2)} ${Kr.toFixed(2)} ${jr.toFixed(2)} ${Ba.toFixed(2)}`}return Ua.trim()};M.current?.setAttribute("d",we(ee[0],-1)),N.current?.setAttribute("d",we(ee[1],1))}A=requestAnimationFrame(ca)},la=0;return A=requestAnimationFrame(ca),()=>cancelAnimationFrame(A)},[p,u,d,m]),Je("svg",{className:"hsk-kiku-avatar",width:r,height:r,viewBox:"-100 -100 200 200","aria-hidden":"true",style:{display:"block",overflow:"visible"},children:[Je("defs",{children:[ue("linearGradient",{id:`${D}-marble`,x1:".2",y1:"0",x2:".42",y2:"1",children:[0,40,82,100].map((R,q)=>ue("stop",{ref:re=>{I.current[q]=re},offset:`${R}%`,style:{stopColor:`var(--hsk-marble-${q+1}, #FAF7F2)`}},R))}),Je("linearGradient",{id:`${D}-contact`,x1:"0",y1:"1",x2:"0",y2:"0",children:[ue("stop",{ref:w,offset:"0%",stopColor:Sa[0].color,stopOpacity:"0.9"}),ue("stop",{ref:U,offset:"45%",stopColor:Sa[0].light,stopOpacity:"0.5"}),ue("stop",{ref:F,offset:"100%",stopColor:Sa[0].light,stopOpacity:"0"})]}),Je("radialGradient",{id:`${D}-sheen`,cx:".34",cy:".2",r:".55",children:[ue("stop",{offset:"0%",stopColor:"#FFFFFF",style:{stopOpacity:"var(--hsk-marble-sheen, .9)"}}),ue("stop",{offset:"100%",stopColor:"#FFFFFF",stopOpacity:"0"})]}),Je("linearGradient",{id:`${D}-hibiscus-petal`,x1:"0",y1:"1",x2:"0",y2:"0",children:[ue("stop",{offset:"0%",stopColor:"#FF3366"}),ue("stop",{offset:"65%",stopColor:"#FF758F"}),ue("stop",{offset:"100%",stopColor:"#FFAAA6"})]}),Je("radialGradient",{id:`${D}-blush-cheek`,cx:"50%",cy:"50%",r:"50%",children:[ue("stop",{offset:"0%",stopColor:"#FB7185",stopOpacity:"0.48"}),ue("stop",{offset:"100%",stopColor:"#FB7185",stopOpacity:"0"})]}),ue("clipPath",{id:`${D}-skin`,children:ue("use",{href:`#${D}-body`})}),Je("filter",{id:`${D}-goo`,x:"-50%",y:"-50%",width:"200%",height:"200%",children:[ue("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"4",result:"b"}),ue("feColorMatrix",{in:"b",values:"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -7"})]}),Je("mask",{id:`${D}-cut`,children:[ue("path",{ref:g,d:"",fill:"#FFFFFF"}),ue("g",{ref:E,children:Array.from({length:ar},(R,q)=>ue("rect",{ref:re=>{H.current[q]=re},fill:"#000000"},q))})]})]}),Je("g",{ref:v,mask:`url(#${D}-cut)`,children:[ue("path",{id:`${D}-body`,ref:k,d:"",fill:`url(#${D}-marble)`}),Je("g",{clipPath:`url(#${D}-skin)`,children:[ue("ellipse",{cx:"-14",cy:"-40",rx:"46",ry:"34",fill:`url(#${D}-sheen)`}),ue("rect",{ref:O,x:"-100",y:"-20",width:"200",height:"100",fill:`url(#${D}-contact)`,opacity:"0.45"})]})]}),Je("g",{ref:x,style:{pointerEvents:"none"},children:[d&&Je("g",{ref:L,children:[ue("ellipse",{cx:"-28",cy:"0",rx:"10",ry:"5.5",fill:`url(#${D}-blush-cheek)`}),ue("ellipse",{cx:"28",cy:"0",rx:"10",ry:"5.5",fill:`url(#${D}-blush-cheek)`})]}),u&&Je("g",{ref:b,children:[ue("path",{ref:M,stroke:"#3D1424",strokeWidth:"1.7",strokeLinecap:"round",fill:"none"}),ue("path",{ref:N,stroke:"#3D1424",strokeWidth:"1.7",strokeLinecap:"round",fill:"none"})]}),p&&Je("g",{ref:S,className:"hsk-avatar-flower",children:[ue("path",{d:"M 0 0 C -12 -7 -15 5 0 0 Z",fill:"#10B981",transform:"translate(6, 4) rotate(-35)"}),[0,72,144,216,288].map(R=>ue("path",{d:"M 0 0 C -6 -13 6 -13 0 0 Z",fill:`url(#${D}-hibiscus-petal)`,stroke:"#FF2A5F",strokeWidth:"0.6",transform:`rotate(${R-18})`},R)),ue("path",{d:"M 0 0 Q 3 -10 9 -14",stroke:"#F59E0B",strokeWidth:"1.6",strokeLinecap:"round",fill:"none"}),ue("circle",{cx:"9",cy:"-14",r:"1.3",fill:"#FDE047"}),ue("circle",{cx:"7",cy:"-12",r:"1.1",fill:"#FDE047"}),ue("circle",{cx:"6.5",cy:"-15",r:"1.1",fill:"#FDE047"}),ue("circle",{cx:"0",cy:"0",r:"2.2",fill:"#881337"})]})]})]})}import{jsx as lt,jsxs as Io}from"react/jsx-runtime";function Ei({title:e,hasMessages:r,avatarState:t="idle",unread:a=!1,awayFromBottom:o=!1,themeMenuOpen:i=!1,themeMenuClosing:s=!1,isNarrow:c=!1,currentTheme:n="dark",onJumpToLatest:l,onReset:m,onClose:p,onToggleThemeMenu:u,onSelectTheme:d}){let k=jt(),[g,v]=ct.useState(!1),[x,S]=ct.useState("#134e3d"),[L,b]=ct.useState("rgba(19, 78, 61, 0.45)"),M=ct.useRef(void 0),N=ct.useRef(null),y=ct.useRef(!1),O=ct.useRef(0),w=ct.useCallback(()=>{y.current=!1,O.current=Date.now(),N.current=setTimeout(()=>{if(y.current=!0,typeof navigator<"u"&&navigator.vibrate)try{navigator.vibrate(25)}catch{}u?.()},350)},[u]),U=ct.useCallback(()=>{N.current&&(clearTimeout(N.current),N.current=null)},[]),F=ct.useCallback(()=>{N.current&&(clearTimeout(N.current),N.current=null)},[]),I=ct.useCallback(E=>{if(y.current){y.current=!1,E.preventDefault(),E.stopPropagation();return}o?l?.():M.current?.()},[o,l]),H=ct.useCallback((E,D,Q)=>{E>.04?(v(!0),S(D),b(Q)):v(!1)},[]);return Io("div",{className:"hsk-cb-topbar",children:[lt("div",{className:"hsk-cb-topbar-left",children:lt("button",{className:"hsk-cb-back",onClick:p,"aria-label":"Close",children:lt("span",{className:"hsk-cb-back-icon",children:lt(Mr,{})})})}),Io("div",{className:Z("hsk-cb-topbar-mark",c&&i&&"is-oozing"),"data-impacting":g?"true":"false",style:{"--hsk-contact-color":x,"--hsk-contact-glow":L},"data-unread":a?"true":"false",onTouchStart:w,onTouchEnd:U,onTouchMove:F,onTouchCancel:F,onClick:I,role:"button",tabIndex:0,"aria-label":o?k("jumpToLatest"):"kiku (long press for themes)",children:[lt(Ii,{state:t,size:34,theme:n,alert:a,onImpact:H,triggerRef:M}),lt("span",{className:"hsk-cb-topbar-name",children:e})]}),lt("div",{className:"hsk-cb-topbar-actions",children:r&<("button",{className:"hsk-cb-topbar-btn",onClick:m,children:k("clearChat")})}),c&&i&<("div",{className:Z("hsk-cb-topbar-ooze-menu",s&&"is-closing"),role:"dialog","aria-label":"Theme selector",style:{position:"absolute",top:"100%",marginTop:"8px",left:"50%",transform:"translateX(-50%)",zIndex:1e3},onPointerDown:E=>E.stopPropagation(),onClick:E=>E.stopPropagation(),onMouseDown:E=>E.stopPropagation(),children:lt("div",{className:"hsk-cb-theme-2x2-grid",style:{display:"grid",gridTemplateColumns:"repeat(2, 1fr)",gap:6},children:ea.map(({id:E,label:D,Icon:Q})=>Io("button",{type:"button",className:Z("hsk-cb-theme-grid-item",n===E&&"is-active"),onClick:R=>{R.stopPropagation(),d?.(E)},children:[lt(Q,{}),lt("span",{children:D})]},E))})})]})}import Ma from"react";import{useEffect as jp,useRef as Vp}from"react";import Eo from"react";import{Fragment as Bl,jsx as _o,jsxs as Hl}from"react/jsx-runtime";var Ul=12;function Do(e){return e==null||typeof e=="boolean"?"":typeof e=="string"||typeof e=="number"?String(e):Array.isArray(e)?e.map(Do).join(""):Eo.isValidElement(e)?Do(e.props.children):""}function Fo(e,r,t,a){if(e==null||typeof e=="boolean")return null;if(typeof e=="string"||typeof e=="number")return String(e).split(/(\s+)/).filter(Boolean).map((o,i)=>{if(/^\s+$/.test(o))return o;let s=t+r.i*Ul;return r.i+=1,_o("span",{className:"hsk-cascade__w",style:{animationDelay:`${s}ms`},children:o},`${a}-w${i}`)});if(Array.isArray(e))return e.map((o,i)=>Fo(o,r,t,`${a}-${i}`));if(Eo.isValidElement(e)){let o=e;return Eo.cloneElement(o,{key:`${a}-el`},Fo(o.props.children,r,t,`${a}-c`))}return e}function $e({children:e,baseMs:r=0}){let t=Do(e),a=0;for(let i=0;i<t.length;i++)a=(a<<5)-a+t.charCodeAt(i)|0;let o=`c${Math.abs(a)}`;return Hl(Bl,{children:[_o("span",{className:"hsk-sr-only",children:t}),_o("span",{"aria-hidden":"true",children:Fo(e,{i:0},r,o)})]})}import{jsx as Pt,jsxs as rr}from"react/jsx-runtime";function Di({language:e,onBack:r}){let t=Ja(e);return rr("div",{className:"hsk-cb-chrome-loading",dir:t.rtl?"rtl":"ltr","aria-busy":"true",children:[Pt("div",{className:"hsk-cb-chrome-loading-header",children:Pt("h2",{className:"hsk-cb-hello hsk-cascade",children:Pt($e,{baseMs:60,children:t.preparing})})}),Pt("div",{className:"hsk-cb-chrome-progress",role:"progressbar","aria-label":t.preparing,children:Pt("div",{className:"hsk-cb-chrome-progress-track"})}),r&&rr("button",{type:"button",className:"hsk-cb-chrome-back-btn",onClick:r,children:[Pt("span",{"aria-hidden":"true",children:t.rtl?"\u2192":"\u2190"})," ",t.changeLang]}),!t.known&&rr("div",{className:"hsk-cb-chrome-notice",dir:"ltr",lang:"en",children:[rr("div",{className:"hsk-cb-chrome-notice-header",children:[Pt("span",{className:"hsk-cb-chrome-notice-pill",children:"Preview / Low-Resource"}),Pt("span",{className:"hsk-cb-chrome-notice-title",children:"Live Machine Translation"})]}),rr("span",{className:"hsk-cb-chrome-notice-body",children:[Pt("b",{children:t.nativeName})," is translated in real time as you browse. Some phrasing may read differently than human-reviewed copy, but names, prices, and figures are always strictly preserved."]})]})]})}import{jsx as Fi}from"react/jsx-runtime";var Er=16,$l=110,jl=/[-ۿ܀-ݏ߀-߿ࡠ-ࣿﭐ-﷿ﹰ-]/;function Ca(e){if(!e)return[];if(jl.test(e))return e.split(/(\s+)/).filter(Boolean);let r=typeof Intl<"u"?Intl:void 0;if(r?.Segmenter){let t=new r.Segmenter(void 0,{granularity:"grapheme"});return Array.from(t.segment(e),a=>a.segment)}return e.split(/(\s+)/).filter(Boolean)}function _i({text:e,placeholder:r,visible:t=!0,replay:a=0,replaySeed:o,staggerMs:i=Er}){if(!t)return null;let s=e||r||"";if(!s)return null;let c=o!==void 0?o:a,n=Ca(s),l=Math.max(n.length-1,1);return Fi("div",{className:"hsk-animated-placeholder",dir:"auto","aria-hidden":"true",children:n.map((m,p)=>Fi("span",{className:"hsk-animated-placeholder__char",style:{animationDelay:`${$l+p*i}ms`,"--hsk-ph-hue":`${Math.round(p/l*300)}`},children:m},`${s}|${c}|${p}`))})}import{Fragment as or,jsx as oe,jsxs as Se}from"react/jsx-runtime";function qo(e){return typeof e=="string"?Ca(e).length:Array.isArray(e)?e.reduce((r,t)=>r+qo(t),0):Ma.isValidElement(e)?qo(e.props?.children):0}function Uo(e,r,t,a){return typeof e=="string"?Ca(e).map(o=>{let i=r.i++;return oe("span",{className:"hsk-cb-shimmer-char",style:{"--hsk-char-idx":a+i,"--hsk-ph-hue":`${Math.round(i/t*300)}`},children:o},i)}):Array.isArray(e)?e.map((o,i)=>oe(Ma.Fragment,{children:Uo(o,r,t,a)},i)):Ma.isValidElement(e)?Ma.cloneElement(e,{children:Uo(e.props?.children,r,t,a)}):e}function qi({text:e,baseIdx:r=0}){let t=Math.max(qo(e)-1,1);return oe(or,{children:Uo(e,{i:0},t,r)})}function Ui({inOnboarding:e,justCompleted:r,onboardingMood:t,awaitingLang:a,awaitingName:o,awaitingEntityLang:i,awaitingConsent:s,termsAgreed:c,shopperLanguage:n,shopperName:l,entityLangPref:m,chromeReady:p,activeChips:u,t:d,tNode:k,chooseLanguage:g,chooseEntityLang:v,agreeTerms:x,handleSend:S}){let L=a?"1":o?"2":i?"3":s?"4":null,[b,M]=Ma.useState(30);return Ma.useEffect(()=>{if(!s){M(30);return}let N=setInterval(()=>{M(y=>y<=1?(clearInterval(N),0):y-1)},1e3);return()=>clearInterval(N)},[s]),oe("div",{className:"hsk-cb-empty",children:Se("div",{className:"hsk-cb-onboarding-card",children:[L&&oe("div",{className:"hsk-cb-onboarding-head",children:Se("span",{className:"hsk-cb-step-badge",dir:"ltr",children:[L," / 4"]})}),a?Se("div",{className:"hsk-cb-hello-wrap",children:[oe("h2",{className:"hsk-cb-hello hsk-cascade",children:oe($e,{baseMs:0,children:"What language should we chat in?"})}),Se("div",{className:"hsk-cb-lang-chips",children:[wr.map((N,y)=>oe("button",{type:"button",className:"hsk-cb-lang-chip",style:{"--hsk-pill-idx":y},lang:N.tag,dir:N.rtl?"rtl":"ltr",onClick:()=>g(N.value),children:N.native},N.value)),oe("span",{className:"hsk-cb-lang-chips-hint",style:{"--hsk-pill-idx":wr.length},children:"or type any other"})]})]},"step-lang"):o?oe("div",{className:"hsk-cb-hello-wrap",children:p?Se(or,{children:[oe("h2",{className:"hsk-cb-hello hsk-cascade",children:oe($e,{baseMs:0,children:d("nameStepTitle")})}),oe("p",{className:"hsk-cb-hello-lead hsk-cascade",children:oe($e,{baseMs:30,children:d("nameStepLead")})}),oe("p",{className:"hsk-cb-hello-ask hsk-cascade",children:oe($e,{baseMs:60,children:d("nameStepAsk")})})]}):oe(Di,{language:n,onBack:()=>g("")})},"step-name"):i?Se("div",{className:"hsk-cb-hello-wrap",children:[p&&Se(or,{children:[oe("h2",{className:"hsk-cb-hello hsk-cascade",children:oe($e,{baseMs:0,children:d("howShouldResultsLook")})}),oe("p",{className:"hsk-cb-hello-lead hsk-cascade",children:oe($e,{baseMs:30,children:k("entityLangIntro",{lang:n})})})]}),p&&oe("div",{className:"hsk-cb-entlang-opts",role:"radiogroup","aria-label":d("howShouldResultsLook"),children:["translated","original"].map((N,y)=>Se("button",{type:"button",role:"radio","aria-checked":m===N,className:Z("hsk-cb-entlang-opt",m===N&&"is-selected"),style:{"--hsk-opt-idx":y},onClick:()=>v(N),children:[oe("span",{className:"hsk-cb-entlang-radio","aria-hidden":"true",children:oe("span",{className:"hsk-cb-entlang-radio-dot"})}),Se("span",{className:"hsk-cb-entlang-opt-text",children:[oe("span",{className:"hsk-cb-entlang-opt-title",children:oe(qi,{text:N==="translated"?k("inLanguage",{lang:n}):d("asWritten"),baseIdx:0})}),oe("span",{className:"hsk-cb-entlang-opt-note",children:oe(qi,{text:d(N==="translated"?"detailsTranslated":"namesAsWritten"),baseIdx:15})})]})]},N))})]},"step-entity-lang"):s?oe("div",{className:"hsk-cb-hello-wrap",children:p&&Se(or,{children:[oe("h2",{className:"hsk-cb-hello hsk-cascade",children:oe($e,{baseMs:0,children:d("termsStepTitle")})}),oe("p",{className:"hsk-cb-hello-lead hsk-cascade",children:oe($e,{baseMs:30,children:d("termsStepSubtitle")})}),Se("div",{className:"hsk-cb-terms-sanctuary",children:[Se("div",{className:"hsk-cb-terms-item",style:{"--hsk-row-idx":0},children:[Se("div",{className:"hsk-cb-terms-head",children:[oe("span",{className:"hsk-cb-terms-numeral",children:"I"}),oe("h3",{className:"hsk-cb-terms-title",children:d("termsPiiTitle")})]}),oe("p",{className:"hsk-cb-terms-desc",children:d("termsPiiDesc")})]}),oe("div",{className:"hsk-cb-terms-divider"}),Se("div",{className:"hsk-cb-terms-item",style:{"--hsk-row-idx":1},children:[Se("div",{className:"hsk-cb-terms-head",children:[oe("span",{className:"hsk-cb-terms-numeral",children:"II"}),oe("h3",{className:"hsk-cb-terms-title",children:d("termsSessionTitle")})]}),oe("p",{className:"hsk-cb-terms-desc",children:d("termsSessionDesc")})]}),oe("div",{className:"hsk-cb-terms-divider"}),Se("div",{className:"hsk-cb-terms-item",style:{"--hsk-row-idx":2},children:[Se("div",{className:"hsk-cb-terms-head",children:[oe("span",{className:"hsk-cb-terms-numeral",children:"III"}),oe("h3",{className:"hsk-cb-terms-title",children:d("termsMemoryTitle")})]}),oe("p",{className:"hsk-cb-terms-desc",children:d("termsMemoryDesc")})]}),oe("div",{className:"hsk-cb-terms-divider"}),Se("div",{className:"hsk-cb-terms-item",style:{"--hsk-row-idx":3},children:[Se("div",{className:"hsk-cb-terms-head",children:[oe("span",{className:"hsk-cb-terms-numeral",children:"IV"}),oe("h3",{className:"hsk-cb-terms-title",children:d("termsCookieTitle")})]}),oe("p",{className:"hsk-cb-terms-desc",children:d("termsCookieDesc")})]})]}),oe("div",{className:"hsk-cb-terms-action-wrap",children:oe("button",{type:"button",className:Z("hsk-cb-terms-agree-btn",b===0&&"is-active"),disabled:b>0,onClick:x,children:b>0?d("termsAgreeCounting",{seconds:String(b)}):d("termsAgreeButton")})})]})},"step-terms"):r?oe("div",{className:"hsk-cb-hello-wrap",children:p&&Se(or,{children:[oe("h2",{className:"hsk-cb-hello hsk-cascade",children:oe($e,{baseMs:0,children:k("allSet",{name:l})})}),oe("p",{className:"hsk-cb-hello-lead hsk-cascade",children:oe($e,{baseMs:30,children:m==="translated"?k("replyingTranslated",{lang:n}):k("replyingOriginal",{lang:n})})})]})},"step-completed"):l?Se("div",{className:"hsk-cb-hello-wrap",children:[oe("h2",{className:"hsk-cb-hello hsk-cascade",children:oe($e,{baseMs:0,children:k("greetReturning",{name:l})})}),oe("p",{className:"hsk-cb-hello-lead hsk-cascade",children:oe($e,{baseMs:30,children:d("greetReturningLead")})})]},"step-returning"):Se("div",{className:"hsk-cb-hello-wrap",children:[oe("h2",{className:"hsk-cb-hello hsk-cascade",children:Se($e,{baseMs:0,children:["Hi, I'm ",oe("b",{children:"kiku"}),"."]})}),oe("p",{className:"hsk-cb-hello-lead hsk-cascade",children:oe($e,{baseMs:30,children:"Ask me to search, visualize, or capture anything \u2014 I look across the whole site in real time."})})]},"step-initial"),!e&&(u?.length??0)>0&&oe("div",{className:"hsk-cb-chips",children:u.map((N,y)=>oe("button",{className:"hsk-cb-chip",style:{"--hsk-pill-idx":y},onClick:()=>S(N),children:N},N))})]})})}import id from"react";import{useEffect as Bi,useState as Vl}from"react";import{describeAge as Hi,getLiveValue as Kl,isFresh as Ol,isStale as Wl,formatLiveValue as ot,subscribeLiveValues as Yl,LIVE_FLASH_MS as Gl}from"@akropolys/sdk";import{jsx as Lt,jsxs as Na}from"react/jsx-runtime";function Ql(e){let[,r]=Vl(0),t=JSON.stringify(e);return Bi(()=>Yl(a=>{e.includes(a)&&r(o=>o+1)}),[t]),Bi(()=>{let a=setInterval(()=>r(o=>o+1),1e3);return()=>clearInterval(a)},[]),e.map(Kl)}function Xl({record:e,now:r}){let t=Wl(e,r),a=e.fields,o=a.event||a.question||a.title||e.key,i=o.length>38?o.slice(0,36)+"\u2026":o,s=!!a.yes_price||!!a.yesPrice,c=!!a.no_price||!!a.noPrice,n=[];s?n.push({label:"Yes",value:ot("yes_price",a.yes_price||a.yesPrice),rawKey:"yes_price"}):(a.yes_pct||a.yesPct)&&n.push({label:"Yes",value:ot("yes_pct",a.yes_pct||a.yesPct),rawKey:"yes_pct"}),c?n.push({label:"No",value:ot("no_price",a.no_price||a.noPrice),rawKey:"no_price"}):(a.no_pct||a.noPct)&&n.push({label:"No",value:ot("no_pct",a.no_pct||a.noPct),rawKey:"no_pct"}),a.bid&&n.push({label:"Bid",value:ot("bid",a.bid),rawKey:"bid"}),a.ask&&n.push({label:"Ask",value:ot("ask",a.ask),rawKey:"ask"}),a.spread&&n.push({label:"Spread",value:ot("spread",a.spread),rawKey:"spread"}),!s&&!c&&!a.bid&&a.price&&n.push({label:"Price",value:ot("price",a.price),rawKey:"price"}),(a.home_spread||a.spread_line)&&n.push({label:"Spread",value:ot("spread",a.home_spread||a.spread_line),rawKey:"spread"}),(a.moneyline||a.ml)&&n.push({label:"ML",value:ot("ml",a.moneyline||a.ml),rawKey:"moneyline"}),(a.over_under||a.total)&&n.push({label:"O/U",value:ot("total",a.over_under||a.total),rawKey:"over_under"});let l=a.volume||a.vol||a["24h_volume"]||a.turnover;l&&n.push({label:"Vol",value:ot("volume",l),rawKey:"volume"});let m=a.close_date||a.expiry||a.expires_at||a.settle_date,p=m?ot("close_date",m):null;return Na("div",{className:`hsk-live-card${t?" is-stale":""}`,role:"region","aria-label":"Live quote",children:[Na("div",{className:"hsk-live-card__header",children:[Na("div",{className:"hsk-live-card__status",children:[Lt("span",{className:`hsk-live-dot${t?" is-stale":""}`,"aria-hidden":"true"}),Lt("span",{className:"hsk-live-card__title",title:o,children:i})]}),Na("div",{className:"hsk-live-card__meta",children:[p&&Na("span",{className:"hsk-live-card__close",children:["Closes ",p]}),Lt("span",{className:"hsk-live-card__age",children:t?`Paused \xB7 ${Hi(r-e.at)}`:`Live \xB7 ${Hi(r-e.at)}`})]})]}),Lt("div",{className:"hsk-live-card__pills",children:n.map(u=>{let d=Ol(e,u.rawKey,r);return Na("div",{className:`hsk-live-pill${d?" is-changed":""}`,style:d?{animationDuration:`${Gl}ms`}:void 0,children:[Lt("span",{className:"hsk-live-pill__label",children:u.label}),Lt("span",{className:"hsk-live-pill__value",children:u.value})]},u.rawKey)})})]})}function $i({keys:e}){let r=new Set,t=(e??[]).filter(c=>r.has(c)?!1:(r.add(c),!0)),a=Ql(t);if(t.filter((c,n)=>a[n]).length===0)return null;let i=a.filter(c=>!!c),s=Date.now();return Lt("div",{className:"hsk-live-wrap",role:"group","aria-label":"Live market data",children:Lt("div",{className:"hsk-live-carousel",children:i.map(c=>Lt(Xl,{record:c,now:s},c.key))})})}import{useState as ji,useEffect as Jl,useRef as Zl}from"react";import{jsx as Bo,jsxs as Vi}from"react/jsx-runtime";function Ki(e){let r=e.match(/<\s*thinking\s*>/i);if(!r)return{thinking:"",content:e,isComplete:!0};let t=r.index??0,a=r[0].length,o=t+a,i=e.slice(0,t),s=e.slice(o),c=s.match(/<\/\s*thinking\s*>/i);if(!c)return{thinking:s,content:i,isComplete:!1};let n=c.index??0,l=c[0].length;return{thinking:s.slice(0,n),content:i+s.slice(n+l),isComplete:!0}}function Oi({text:e,isComplete:r,seconds:t}){let a=jt(),o=Zl(Date.now()),[i,s]=ji(()=>r?null:0),[c,n]=ji(!r);Jl(()=>{if(r){i!==null&&(s(Math.max(1,Math.round((Date.now()-o.current)/1e3))),n(!1));return}n(!0);let u=setInterval(()=>{s(Math.round((Date.now()-o.current)/1e3))},1e3);return()=>clearInterval(u)},[r]);let l=t??i,m=r?l!=null?a("thoughtForSeconds",{duration:`${l}s`}):a("thoughtProcess"):`${a("thinking")}${i?` \xB7 ${i}s`:"\u2026"}`,p=!!e;return Vi("div",{className:Z("hsk-cb-think",!r&&"hsk-cb-think--live"),children:[Vi("button",{type:"button",className:Z("hsk-cb-think-head",!p&&"hsk-cb-think-head--static"),onClick:p?()=>n(u=>!u):void 0,"aria-expanded":p?c:void 0,children:[Bo("span",{children:m}),p&&Bo("span",{className:Z("hsk-cb-think-chevron",c&&"hsk-cb-think-chevron--open"),children:"\u25B6"})]}),p&&c&&Bo("div",{className:"hsk-cb-think-body",children:e})]})}import{useState as Dr,useRef as ed,useEffect as td,useCallback as ad}from"react";import{useAkropolysContext as rd}from"@akropolys/sdk";import{Fragment as Wi,jsx as Fe,jsxs as ra}from"react/jsx-runtime";function od({src:e,alt:r,onImageClick:t}){let[a,o]=Dr(!1);return a?Fe("div",{style:{width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center",background:"var(--hsk-chat-source-bg, rgba(0,0,0,.04))",color:"var(--hsk-chat-muted, #888)"},children:Fe(ut,{})}):Fe("img",{src:e,alt:r??"",onError:()=>o(!0),onClick:t?i=>{i.stopPropagation(),t(e)}:void 0})}function Yi({sources:e,defaultCurrency:r,onSelectSource:t,onImageClick:a,referencedIds:o=[],compact:i=!1}){let c=rd()?.vertical==="property",n=ed(null),[l,m]=Dr(!1),[p,u]=Dr(!1),[d,k]=Dr(0),g=e.filter(b=>b.id&&o.includes(b.id)),v=ad(()=>{let b=n.current;if(!b||g.length===0)return;let M=Math.abs(b.scrollLeft),N=b.scrollWidth-b.clientWidth;m(M>10),u(N>4&&M<N-12);let O=Math.round(M/190);k(Math.min(Math.max(0,O),g.length-1))},[g.length]);td(()=>{v();let b=n.current;if(!b)return;let M=new ResizeObserver(v);return M.observe(b),b.addEventListener("scroll",v,{passive:!0}),()=>{M.disconnect(),b.removeEventListener("scroll",v)}},[v,e]);let x=b=>{let M=n.current;if(!M)return;let N=getComputedStyle(M).direction==="rtl";M.scrollBy({left:190*b*(N?-1:1),behavior:"smooth"})},S=()=>x(1),L=()=>x(-1);return g.length===0?null:ra("div",{className:Z("hsk-cb-sources-wrap",i&&"hsk-cb-sources-wrap--compact"),children:[l&&ra(Wi,{children:[Fe("div",{className:"hsk-cb-sources-fade-left"}),Fe("button",{className:"hsk-cb-sources-prev",onClick:L,"aria-label":"Previous",children:Fe(Mr,{})})]}),Fe("div",{className:"hsk-cb-sources",ref:n,children:g.map((b,M)=>{let N=!!(b.id&&o.includes(b.id));return ra("div",{className:Z("hsk-cb-source",N&&"hsk-cb-source--referenced"),style:{animationDelay:`${M*50}ms`},onClick:()=>t?.(b),children:[b.image?ra("div",{className:"hsk-cb-src-imgwrap",style:{position:"relative"},children:[Fe(od,{src:b.image,alt:b.name,onImageClick:a}),c&&Fe("div",{style:{position:"absolute",top:"6px",right:"6px",background:"rgba(14, 14, 15, 0.75)",backdropFilter:"blur(4px)",borderRadius:"50%",width:"24px",height:"24px",display:"flex",alignItems:"center",justifyContent:"center",color:"#fbbf24",boxShadow:"0 2px 4px rgba(0,0,0,0.2)"},children:Fe(ut,{size:12})})]}):Fe("div",{className:"hsk-cb-src-imgwrap-empty",style:{position:"relative"},children:Fe(ut,{})}),ra("div",{className:"hsk-cb-src-info",children:[Fe("div",{className:"hsk-cb-src-name",children:b.name}),b.price&&ra("div",{className:"hsk-cb-src-price",children:[b.currency||r?`${b.currency||r} `:"$",parseFloat(String(b.price).replace(/[^0-9.]/g,"")||"0").toLocaleString()]})]})]},b.id??M)})}),p&&ra(Wi,{children:[Fe("div",{className:"hsk-cb-sources-fade-right"}),Fe("button",{className:"hsk-cb-sources-next",onClick:S,"aria-label":"See more",children:Fe(On,{})})]}),g.length>1&&Fe("div",{className:"hsk-cb-carousel-dots",children:g.map((b,M)=>Fe("div",{className:Z("hsk-cb-dot-item",M===d&&"hsk-cb-dot-item--active"),onClick:()=>{let N=n.current;if(N){let y=getComputedStyle(N).direction==="rtl";N.scrollTo({left:M*190*(y?-1:1),behavior:"smooth"})}}},M))})]})}import{jsx as Gi,jsxs as nd}from"react/jsx-runtime";function Qi({intent:e,sources:r,onSend:t,loading:a,defaultCurrency:o=""}){let i=jt();if(!e)return null;let s=[],c=r.length>0?r.reduce((p,u)=>{let d=parseFloat(String(u.price??"").replace(/[^0-9.]/g,"")),k=parseFloat(String(p.price??"").replace(/[^0-9.]/g,""));return!isNaN(d)&&(isNaN(k)||d<k)?u:p},r[0]):null,n=r[0]?.name??"",l=r.slice(0,2).map(p=>p.name),m=()=>{let p=r.map(x=>parseFloat(String(x.price??"").replace(/[^0-9.]/g,""))).filter(x=>!isNaN(x)&&x>0);if(p.length===0)return null;let u=Math.max(...p),d=Math.pow(10,Math.floor(Math.log10(u))),k=Math.ceil(u/d)*d;return`${String(r.find(x=>x.price)?.price??"").replace(/[0-9.,\s]/g,"")||o} ${k.toLocaleString()}`.trim()};if(e==="search"&&r.length>0){if(l.length>=2&&s.push({emoji:"\u2696\uFE0F",label:i("pillCompareTop2"),query:i("pillCompareTop2Query",{a:l[0],b:l[1]})}),c?.name){let u=c.name.split(" ").slice(0,3).join(" ");s.push({emoji:"\u{1F4A1}",label:i("pillMoreOn",{name:u}),query:i("pillMoreOnQuery",{name:c.name})})}let p=m();p&&s.push({emoji:"\u{1F4B0}",label:i("pillUnder",{amount:p}),query:i("pillUnderQuery",{amount:p})})}else e==="compare"&&r.length>0?(n&&s.push({emoji:"\u{1F50D}",label:i("pillSimilarOptions"),query:i("pillSimilarOptionsQuery",{name:n})}),s.push({emoji:"\u{1F4A1}",label:i("pillWhichBest"),query:i("pillWhichBestQuery")})):e==="specs"&&r.length>0?n&&s.push({emoji:"\u{1F504}",label:i("pillFindAlternatives"),query:i("pillFindAlternativesQuery",{name:n})}):e==="general"&&(s.push({emoji:"\u{1F50D}",label:i("pillShowPopular"),query:i("pillShowPopularQuery")}),s.push({emoji:"\u{1F4A1}",label:i("pillRecommend"),query:i("pillRecommendQuery")}));return s.length===0?null:Gi("div",{className:"hsk-action-pills",children:s.map(p=>nd("button",{className:"hsk-action-pill",onClick:()=>t(p.query),disabled:a,children:[Gi("span",{className:"hsk-pill-emoji",children:p.emoji}),p.label]},p.query))})}import{Fragment as Ho,jsx as me,jsxs as _e}from"react/jsx-runtime";var Xi=id.memo(({content:e,streaming:r})=>me(Ho,{children:Xt(e,r)}),(e,r)=>e.content===r.content&&e.streaming===r.streaming);Xi.displayName="MarkdownBlock";function Ji({msg:e,idx:r,isLast:t,isLastUser:a,isRunEnd:o,runMid:i,runCont:s,isNarrow:c,loading:n,streaming:l,stopped:m,interrupted:p,sources:u,referencedIds:d,discussedSources:k,lastIntent:g,lastAction:v,defaultCurrency:x,vizState:S,setVizState:L,setLightboxSrc:b,setMarkupSrc:M,handleSend:N,handleSourceClick:y,t:O,messageRef:w}){let U=e.role==="user",F=e.content;return me("div",{className:Z("hsk-cb-msg-group",i&&"hsk-cb-msg-group--run-mid",s&&"hsk-cb-msg-group--run-cont"),ref:w,children:U?_e("div",{className:`hsk-cb-user-msg${a?" hsk-sent":""}`,children:[e.images&&e.images.length>0&&me("div",{className:"hsk-cb-user-imgs","data-count":Math.min(e.images.length,4),children:e.images.slice(0,4).map((I,H)=>_e("button",{type:"button",className:"hsk-cb-user-img-cell",onClick:()=>b(I),children:[me("img",{src:I,alt:`attachment ${H+1}`,className:"hsk-cb-user-img-thumb"}),H===3&&e.images.length>4&&_e("span",{className:"hsk-cb-user-img-more",children:["+",e.images.length-3]})]},H))}),e.content&&_e("div",{className:Z("hsk-cb-user-bubble",o&&"hsk-cb-user-bubble--tail",e.spoken&&"hsk-cb-user-bubble--spoken"),children:[e.spoken&&me(va,{className:"hsk-cb-spoken-mark",size:10}),/^@kiku\b/i.test(e.content)?_e(Ho,{children:[me("span",{className:"hsk-kiku-badge",children:"@kiku"}),e.content.replace(/^@kiku\s*/i,"")]}):e.content]}),a&&me("span",{className:"hsk-cb-sent-status",children:O(m||p?"statusStopped":"statusSent")})]}):me("div",{className:Z("hsk-cb-ai-msg",c&&"hsk-cb-ai-msg--inline"),children:_e("div",{className:"hsk-cb-ai-body",children:[(()=>{let I=Ki(F),H=e.thinking||I.thinking,E=I.content,D=/(?:^|\n+)(?:[>*_~`\s]*)(?:This is a calculation from live figures,?\s*not a guarantee\s*[—–-]\s*the market can move against it\.?)(?:[>*_~`\s]*)/gi,Q=D.test(E),R=Q?E.replace(D,"").trimEnd():E,q=e.thoughtForSeconds!=null||E.length>0||!(t&&(l||n));return _e(Ho,{children:[!e.spoken&&(H||e.thoughtForSeconds!=null||t&&(l||n))&&me(Oi,{text:H,isComplete:q,seconds:e.thoughtForSeconds}),R&&me("div",{className:"hsk-cb-ai-content",children:me(Xi,{content:R,streaming:t&&l})}),Q&&me("div",{className:"hsk-cb-calc-disclaimer",children:O("calcDisclaimer")})]})})(),e.visualizing&&_e("div",{className:"hsk-cb-viz hsk-cb-viz--loading",children:[me("span",{className:"hsk-cb-viz-spinner"}),me("span",{children:e.visualizingText||O("vizWorking")})]}),e.visualization&&_e("div",{className:"hsk-cb-viz",children:[_e("div",{className:"hsk-cb-viz-imgwrap",children:[e.visualizationType==="video"||e.visualization.includes("/videos/")?me("video",{src:e.visualization,controls:!0,autoPlay:!0,loop:!0,muted:!0,playsInline:!0,className:"hsk-markdown-video",style:{display:"block",maxHeight:"400px",objectFit:"contain",width:"100%"}}):me("img",{src:e.visualization,alt:"Product visualized in your photo",className:"hsk-markdown-img",style:S[e.visualization]==="err"?{display:"none"}:void 0,onLoad:()=>L(I=>({...I,[e.visualization]:"ok"})),onError:()=>L(I=>({...I,[e.visualization]:"err"}))}),S[e.visualization]==="err"&&me("div",{className:"hsk-cb-viz-broken",children:O("vizUnavailable")}),t&&!l&&S[e.visualization]==="ok"&&e.visualizationType!=="video"&&!e.visualization.includes("/videos/")&&_e("button",{className:"hsk-cb-viz-mark",onClick:()=>M(e.visualization),children:[_e("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[me("path",{d:"M12 20h9"}),me("path",{d:"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4Z"})]}),O("vizMarkEdit")]})]}),me("div",{className:"hsk-cb-viz-disclaimer",children:e.visualizationType==="video"||e.visualization.includes("/videos/")?O("vizDisclaimerVideo"):O("vizDisclaimerImage")})]}),!U&&(e.knowledgeImages?.length??0)>0&&me("div",{className:"hsk-cb-kimgs",children:e.knowledgeImages.map(I=>_e("div",{className:"hsk-cb-kimg-group",children:[me("div",{className:"hsk-cb-kimg-grid",children:I.images.map((H,E)=>me("img",{src:H.url,alt:H.note||I.title||"Reference image",className:"hsk-cb-kimg",loading:"lazy",onClick:()=>b(H.url),onError:D=>{D.target.style.display="none"}},E))}),(I.title||I.images[0]?.note)&&me("div",{className:"hsk-cb-kimg-caption",children:I.title||I.images[0]?.note})]},I.entryId))}),!U&&me($i,{keys:e.liveKeys}),!U&&(e.staleNotices?.length??0)>0&&_e("div",{className:"hsk-cb-stale",role:"status",children:[me("div",{className:"hsk-cb-stale-title",children:O("staleTitle")}),e.staleNotices.map((I,H)=>_e("div",{className:"hsk-cb-stale-item",children:[I.state==="removed"?O("staleRemoved",{title:I.title}):O("staleUnavailable",{title:I.title}),I.reason&&_e("span",{className:"hsk-cb-stale-reason",children:[" ",I.reason]})]},H))]}),(()=>{let I=t?d:e.referencedIds??[],H=t?u:e.sources??[],E=t?g:e.intent,D=E==="compare"||E==="capture"||E==="capture_all"||E==="delete"||E==="view_history";return I.length>0&&!D&&(!t||v?.type!=="request_kiku_key")&&me(Yi,{sources:H,defaultCurrency:x,onSelectSource:y,onImageClick:b,referencedIds:I,compact:!!e.visualization})})(),t&&!n&&!l&&v?.type==="open_memory"&&v.url&&_e("a",{className:"hsk-cb-memory-pill",href:String(v.url),target:"_blank",rel:"noopener noreferrer",children:[O("openMemory"),me(Vn,{})]}),t&&!n&&v?.url&&v.type!=="open_memory"&&me("div",{className:"hsk-action-pills",children:_e("a",{className:"hsk-action-pill",href:v.url,children:[String(v.type||"continue").replace(/_/g," ")," \u2192"]})}),t&&!n&&me(Qi,{intent:g,sources:k,onSend:N,loading:n,defaultCurrency:x})]})})})}import{jsx as Re,jsxs as mt}from"react/jsx-runtime";function Zi({keyInput:e,setKeyInput:r,minting:t,handleUseExistingKey:a,handleCreateKey:o,t:i}){return mt("div",{className:"hsk-cb-ai-msg",children:[Re("div",{className:"hsk-cb-ai-icon",style:{display:"flex",alignItems:"center"},children:Re(ut,{})}),Re("div",{className:"hsk-cb-ai-body",children:Re("div",{className:"hsk-cb-ai-text",children:mt("div",{className:"hsk-cb-phone-form",children:[Re("label",{className:"hsk-cb-phone-label",children:i("keyPastePrompt")}),Re("input",{type:"text",className:"hsk-cb-phone-input",placeholder:i("keyPastePlaceholder"),value:e,onChange:s=>r(s.target.value),onKeyDown:s=>s.key==="Enter"&&a(),autoFocus:!0}),mt("div",{style:{display:"flex",gap:8},children:[Re("button",{className:"hsk-cb-phone-submit",onClick:a,disabled:!e.trim(),children:i("keyUseMine")}),Re("button",{className:"hsk-cb-phone-submit",onClick:o,disabled:t,children:i(t?"keyCreating":"keyCreateNew")})]})]})})})]})}function es({mintedKey:e,mintedPub:r,copied:t,keyCountdown:a,onDismiss:o,copyValue:i,t:s}){return mt("div",{className:"hsk-cb-ai-msg",children:[Re("div",{className:"hsk-cb-ai-icon",style:{display:"flex",alignItems:"center"},children:Re(ut,{})}),Re("div",{className:"hsk-cb-ai-body",children:Re("div",{className:"hsk-cb-ai-text",children:mt("div",{style:{padding:"4px 0",display:"flex",flexDirection:"column",gap:12},children:[mt("div",{children:[mt("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:4},children:[Re("span",{style:{fontSize:12,fontWeight:600},children:s("keySecretTitle")}),mt("button",{className:"hsk-cb-phone-submit",style:{padding:"2px 8px",fontSize:11,background:"transparent",border:0},onClick:o,children:[s("keyDismiss")," \u2715"]})]}),Re("code",{style:{display:"block",fontSize:13,fontWeight:700,marginBottom:8,wordBreak:"break-all"},children:e}),mt("div",{style:{display:"flex",gap:8,alignItems:"center",flexWrap:"wrap"},children:[Re("button",{className:"hsk-cb-phone-submit",style:{padding:"4px 10px",border:0},onClick:()=>i(e,"secret"),children:s(t==="secret"?"keyCopied":"keyCopySecret")}),Re("span",{style:{fontSize:11,opacity:.7,flex:"1 1 180px"},children:s("keySecretHint")})]})]}),r&&mt("div",{children:[Re("div",{style:{fontSize:12,fontWeight:600,marginBottom:4},children:s("keyPublicTitle")}),Re("code",{style:{display:"block",fontSize:12,fontWeight:600,marginBottom:6,wordBreak:"break-all",opacity:.85},children:r}),mt("div",{style:{display:"flex",gap:8,alignItems:"center",flexWrap:"wrap"},children:[Re("button",{className:"hsk-cb-phone-submit",style:{padding:"4px 10px",border:0},onClick:()=>i(r,"pub"),children:s(t==="pub"?"keyCopied":"keyCopyId")}),Re("span",{style:{fontSize:11,opacity:.7,flex:"1 1 180px"},children:s("keyPublicHint")})]})]}),Re("div",{style:{fontSize:11,opacity:.6},children:s("keyAutoHide",{seconds:String(a)})})]})})})]})}import{Fragment as sd,jsx as Ze,jsxs as Ta}from"react/jsx-runtime";function ts({displayMessages:e,messageRefs:r,isNarrow:t,loading:a,streaming:o,sources:i,referencedIds:s,discussedSources:c,lastIntent:n,lastAction:l,defaultCurrency:m,stopped:p,interrupted:u,halted:d,haltedEmpty:k,error:g,errorCode:v,keyPhase:x,keyInput:S,setKeyInput:L,mintedKey:b,setMintedKey:M,mintedPub:N,setMintedPub:y,minting:O,copied:w,keyCountdown:U,handleUseExistingKey:F,handleCreateKey:I,copyValue:H,queuedMessage:E,sendQueuedNow:D,setLightboxSrc:Q,setMarkupSrc:R,handleSend:q,handleSourceClick:re,continueGenerating:ee,t:h,bottomRef:z,vizState:_,setVizState:W,messages:V}){return Ta(sd,{children:[(()=>{let A=-1;for(let C=e.length-1;C>=0;C--)if(e[C]?.role==="user"){A=C;break}return e.map((C,G)=>{let K=G===e.length-1,f=C.role==="user",Y=f&&G===A,$=f&&e[G+1]?.role!=="user",j=f&&!$,J=f&&e[G-1]?.role==="user",te=C.id||`${C.role}-${G}`;return Ze(Ji,{msg:C,idx:G,isLast:K,isLastUser:Y,isRunEnd:$,runMid:j,runCont:J,isNarrow:t,loading:a,streaming:o,stopped:p,interrupted:u,sources:i,referencedIds:s,discussedSources:c,lastIntent:n,lastAction:l,defaultCurrency:m,vizState:_,setVizState:W,setLightboxSrc:Q,setMarkupSrc:R,handleSend:q,handleSourceClick:re,t:h,messageRef:le=>{r.current[G]=le}},te)})})(),d&&V.length>0&&Ta("div",{className:Z("hsk-cb-stopped",k&&"hsk-cb-stopped--empty"),children:[k&&Ta("span",{className:"hsk-cb-stopped-dots","aria-hidden":"true",children:[Ze("i",{}),Ze("i",{}),Ze("i",{})]}),Ze("span",{className:"hsk-cb-stopped-label",children:h(p?"stoppedByYou":"stoppedInterrupted")}),Ta("button",{className:"hsk-cb-continue",onClick:ee,children:[Ze(Kn,{}),h(V[V.length-1]?.role==="assistant"?"continueGenerating":"generateResponse")]})]}),g&&Ze("div",{className:"hsk-cb-error",children:Hn({code:v??void 0,message:g},h)}),x==="prompt_key"&&Ze(Zi,{keyInput:S,setKeyInput:L,minting:O,handleUseExistingKey:F,handleCreateKey:I,t:h}),b&&Ze(es,{mintedKey:b,mintedPub:N,copied:w,keyCountdown:U,onDismiss:()=>{M(null),y(null)},copyValue:H,t:h}),E&&Ze("div",{className:Z("hsk-cb-msg-group",e[e.length-1]?.role==="user"&&"hsk-cb-msg-group--run-cont"),children:Ta("div",{className:"hsk-cb-user-msg",children:[Ze("div",{className:"hsk-cb-user-bubble hsk-cb-user-bubble--tail hsk-cb-user-bubble--queued",children:E.content}),Ta("button",{type:"button",className:"hsk-cb-queued-status",onClick:D,children:[Ze("span",{className:"hsk-cb-queued-dot"}),h("queuedWaiting"),Ze("span",{className:"hsk-cb-queued-now",children:h("queuedSendNow")})]})]})}),Ze("div",{ref:z,style:{height:1}})]})}import Fr,{useState as cd,useRef as ld,useEffect as dd}from"react";import{Fragment as $o,jsx as ie,jsxs as ye}from"react/jsx-runtime";function as({gooId:e,input:r,setInput:t,showKikuPicker:a,setShowKikuPicker:o,showAtPicker:i,setShowAtPicker:s,captureAllowed:c,discussedSources:n,defaultCurrency:l,handleSelectExtension:m,handleKikuCapture:p,handleKikuCaptureAll:u,handleKikuViewHistory:d,handleKikuDelete:k,attachments:g,removeAttachment:v,chromeLoading:x,imageInputRef:S,handleImageFiles:L,enableVision:b,enableVoice:M,canConverse:N,voiceMode:y,startVoice:O,stopVoice:w,voiceBlocked:U,textareaRef:F,classNames:I={},handleInput:H,handleKeyDown:E,voice:D,voicePhase:Q,activePlaceholder:R,loading:q,streaming:re,stop:ee,handleSend:h,voiceError:z,setVoiceError:_,shopperLanguage:W,t:V,rail:A}){let[C,G]=Fr.useState(0),[K,f]=Fr.useState(!1);Fr.useEffect(()=>{if(!z)return;let B=setTimeout(()=>{_?.("")},6e3);return()=>clearTimeout(B)},[z,_]),Fr.useEffect(()=>{if(!K)return;let B=ce=>{ce.key==="Escape"&&f(!1)};return window.addEventListener("keydown",B),()=>window.removeEventListener("keydown",B)},[K]);let $=Math.max(Ca(R||"Ask me anything\u2026").length-1,0)*Er,[j,J]=cd(!1),te=ld(null),le=()=>{te.current&&clearTimeout(te.current),J(!0),te.current=setTimeout(()=>{J(!1),te.current=null},550)};return dd(()=>()=>{te.current&&clearTimeout(te.current)},[]),ye("div",{className:"hsk-cb-input-wrap",children:[K&&ye($o,{children:[ie("div",{className:"hsk-cb-toolsheet-scrim",onClick:()=>f(!1)}),ie("div",{className:"hsk-cb-toolsheet-wrap",children:ye("div",{className:"hsk-cb-toolsheet",role:"menu",children:[b&&ye("button",{className:"hsk-cb-toolsheet-item",role:"menuitem",onClick:()=>{f(!1),S.current?.click()},disabled:q,children:[ie(mo,{}),ie("span",{children:V("attachImage")})]}),M&&N&&ye("button",{className:"hsk-cb-toolsheet-item",role:"menuitem",onClick:()=>{f(!1),y==="converse"?w():O("converse")},disabled:q||x||U,children:[ie(ko,{active:y==="converse"}),ie("span",{children:V(y==="converse"?"voiceModeExit":"voiceModeStart")})]})]})})]}),ye("div",{className:"hsk-cb-input-card",children:[(/^@kiku\b/i.test(r)||a||i)&&ye("div",{className:"hsk-cb-docked-header",children:[ie("span",{className:"hsk-cb-docked-sub",children:V("captureAndRemember")}),ie("button",{type:"button",className:"hsk-cb-docked-close",onClick:()=>{t(B=>B.replace(/^@kiku\s*/i,"")),o(!1),s(!1)},"aria-label":"Close mode",children:"\xD7"})]}),(a||i)&&ye("div",{className:"hsk-cb-docked-options",onMouseDown:B=>B.preventDefault(),children:[i&&c&&ye("button",{type:"button",className:"hsk-cb-docked-option",onClick:()=>m("@kiku"),children:[ie("span",{className:"hsk-cb-docked-option-icon",children:ie(ut,{})}),ie("span",{className:"hsk-cb-docked-option-title",children:"kiku"}),ie("span",{className:"hsk-cb-docked-option-desc",children:"capture & remember"})]}),a&&c&&ye($o,{children:[n.map((B,ce)=>ye("button",{type:"button",className:"hsk-cb-docked-option",onClick:()=>{p(B),o(!1)},children:[ie("span",{className:"hsk-cb-docked-option-icon",children:B.image?ie("img",{src:B.image,alt:""}):ie(Nr,{})}),ie("span",{className:"hsk-cb-docked-option-title",children:B.name}),B.price&&ye("span",{className:"hsk-cb-docked-option-price",children:[B.currency??l," ",parseFloat(String(B.price).replace(/[^0-9.]/g,"")||"0").toLocaleString()]})]},B.id??ce)),n.length>1&&ye("button",{type:"button",className:"hsk-cb-docked-option",onClick:()=>{u(n),o(!1)},children:[ie("span",{className:"hsk-cb-docked-option-icon",children:ie(Nr,{})}),ie("span",{className:"hsk-cb-docked-option-title",children:V("captureAll",{count:String(n.length)})})]}),n.length===0&&ye("button",{type:"button",className:"hsk-cb-docked-option",onClick:()=>{p({name:"current page",id:void 0}),o(!1)},children:[ie("span",{className:"hsk-cb-docked-option-icon",children:ie(Nr,{})}),ie("span",{className:"hsk-cb-docked-option-title",children:V("captureCurrentPage")})]}),ye("button",{type:"button",className:"hsk-cb-docked-option",onClick:()=>{d(),o(!1)},children:[ie("span",{className:"hsk-cb-docked-option-icon",children:ie(Wn,{})}),ie("span",{className:"hsk-cb-docked-option-title",children:V("whatHaveYouSaved")})]}),ye("button",{type:"button",className:"hsk-cb-docked-option",onClick:()=>{k(),o(!1)},children:[ie("span",{className:"hsk-cb-docked-option-icon",children:ie(Yn,{})}),ie("span",{className:"hsk-cb-docked-option-title",children:V("deleteThis")})]})]})]}),g.length>0&&ie("div",{className:"hsk-cb-img-strip",children:g.map((B,ce)=>ye("div",{className:"hsk-cb-img-thumb-wrap",children:[ie("img",{src:B.data,alt:`attachment ${ce+1}`,className:"hsk-cb-img-thumb"}),ie("button",{type:"button",className:"hsk-cb-img-thumb-remove",onClick:()=>v(ce),"aria-label":"Remove image",children:ie(ni,{size:10})})]},ce))}),ye("div",{className:Z("hsk-cb-input-box",x&&"hsk-cb-input-box--waiting"),"data-cascade":C%2?"b":"a","data-tools":K?"open":"closed",style:{"--hsk-text-sweep":`${$}ms`},children:[ie("input",{ref:S,type:"file",accept:"image/*",className:"hsk-sr-only",onChange:B=>{L(B.target.files),B.target.value=""}}),(b||M&&N)&&ie("button",{className:Z("hsk-cb-tools-toggle",K&&"hsk-cb-tools-toggle--open"),onClick:()=>f(B=>!B),disabled:q||x,"aria-label":K?"Close options":"More options","aria-expanded":K,children:ie(Gn,{})}),ye($o,{children:[b&&ie("button",{className:"hsk-cb-attach-btn",onClick:()=>S.current?.click(),disabled:q,"aria-label":"Attach image",title:"Attach image",children:ie(mo,{})}),M&&N&&ie("button",{className:Z("hsk-cb-voice-mode-btn",U&&"hsk-cb-voice-mode-btn--blocked"),onClick:()=>U?_?.(V("errAccountRequired")):O("converse"),disabled:q||x,"aria-label":"Voice conversation",title:"Voice conversation",children:ie(ko,{})})]}),ye("div",{className:"hsk-cb-field",children:[ie("textarea",{ref:F,value:r,onChange:H,onKeyDown:E,rows:1,placeholder:"",className:Z("hsk-cb-textarea",I.input),"aria-label":R,disabled:q&&!re}),ie(_i,{placeholder:R,visible:!r,staggerMs:Er,replaySeed:C})]}),M&&ie("button",{className:Z("hsk-cb-mic-btn",y==="dictate"&&"hsk-cb-mic-btn--active",U&&"hsk-cb-mic-btn--blocked"),onClick:()=>y==="off"?O("dictate"):w(),disabled:q||x,"aria-label":y==="off"?"Start voice input":"Stop recording",title:y==="off"?"Voice input":"Stop",children:y==="off"?ie(va,{}):ie(Tr,{})}),(q||re)&&!j?ie("button",{className:Z("hsk-cb-send","hsk-cb-send--stop",I.sendButton),onClick:ee,"aria-label":"Stop generating",title:"Stop generating",children:ie(jn,{})}):ye("button",{className:Z("hsk-cb-send",j&&"is-launching",I.sendButton),onClick:()=>{le(),h()},disabled:x||!r.trim()&&g.length===0,"aria-label":"Send message",children:[ie("svg",{width:"0",height:"0","aria-hidden":"true",focusable:"false",style:{position:"absolute"},children:ie("defs",{children:ye("filter",{id:e,children:[ie("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"1.6",result:"blur"}),ie("feColorMatrix",{in:"blur",type:"matrix",values:"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 16 -7",result:"goo"}),ie("feBlend",{in:"SourceGraphic",in2:"goo"})]})})}),ie("span",{className:"hsk-cb-send-sheath","aria-hidden":"true"}),ye("span",{className:"hsk-cb-send-stage",style:{filter:`url(#${e})`},children:[ie("span",{className:"hsk-cb-send-seam","aria-hidden":"true"}),ie("span",{className:"hsk-cb-send-kite",children:ie(Jn,{})})]})]})]})]}),U?ye("div",{className:"hsk-cb-voice-error",role:"status",onClick:()=>_?.(""),children:[ie("span",{children:V("errAccountRequired")}),ie("button",{type:"button",className:"hsk-cb-voice-error-dismiss",onClick:B=>{B.stopPropagation(),_?.("")},"aria-label":"Dismiss error",children:"\xD7"})]}):z&&ye("div",{className:"hsk-cb-voice-error",role:"status",onClick:()=>_?.(""),children:[ie("span",{children:V(z)}),ie("button",{type:"button",className:"hsk-cb-voice-error-dismiss",onClick:B=>{B.stopPropagation(),_?.("")},"aria-label":"Dismiss error",children:"\xD7"})]}),ie("div",{className:"hsk-cb-hint",children:W?V("footerHint"):"kiku \xB7 searches the whole catalogue in real time"})]})}import{useEffect as nr,useRef as ir}from"react";import{jsx as ud}from"react/jsx-runtime";function rs(e,r){let t=e.match(/-?[\d.]+/g);return!t||t.length<3?r:[Number(t[0]),Number(t[1]),Number(t[2])]}function hd(e,r,t){return[e[0]+(r[0]-e[0])*t,e[1]+(r[1]-e[1])*t,e[2]+(r[2]-e[2])*t]}function Ra(e,r){return`rgba(${e[0]|0}, ${e[1]|0}, ${e[2]|0}, ${r})`}var At=24,pd=.42;function os({phase:e,level:r,spectrum:t,bins:a,className:o}){let i=ir(null),s=ir(e),c=ir(r),n=ir(t),l=ir(a);return nr(()=>{s.current=e},[e]),nr(()=>{c.current=r},[r]),nr(()=>{n.current=t},[t]),nr(()=>{l.current=a},[a]),nr(()=>{let m=i.current;if(!m)return;let p=m.getContext("2d");if(!p)return;let u=getComputedStyle(m),d=rs(u.getPropertyValue("--hsk-primary")||"",[255,106,51]),k=rs(u.getPropertyValue("--hsk-chat-text")||"",[31,31,31]),g=0,v=0,x=0,S=()=>{let q=Math.min(window.devicePixelRatio||1,3),re=m.getBoundingClientRect();v=Math.max(1,re.width),x=Math.max(1,re.height),m.width=Math.round(v*q),m.height=Math.round(x*q),p.setTransform(q,0,0,q,0,0)};S();let L=typeof ResizeObserver<"u"?new ResizeObserver(S):null;L?.observe(m),window.addEventListener("resize",S);let b=window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches??!1,M=new Float32Array(At),N=[],y=null,O=-1,w=null,U=0,F=0,I=performance.now(),H=(q,re,ee,h)=>q+(re-q)*(re>q?ee:h),E=()=>{let q=n.current,re=l.current?.()??0;if(!q||!re||((!w||w.length!==re)&&(w=new Uint8Array(re)),!q(w)))return!1;let h=Math.max(At,Math.floor(re*pd))/At;for(let z=0;z<At;z++){let _=Math.floor(z*h),W=Math.max(_+1,Math.floor((z+1)*h)),V=0;for(let C=_;C<W;C++)V+=w[C];let A=V/(W-_)/255;M[z]=H(M[z],A,b?.2:.55,b?.06:.14)}return!0},D=(q,re)=>{for(let ee=0;ee<At;ee++){let h=ee/(At-1),z=Math.pow(1-h,1.6)*(.75+.25*Math.sin(q*3.1+ee*.7));M[ee]=H(M[ee],z*re,.3,.12)}},Q=q=>{let re=Math.min(At-1,Math.max(0,q*(At-1))),ee=Math.floor(re),h=re-ee,z=M[ee],_=M[Math.min(At-1,ee+1)];return z+(_-z)*h*h*(3-2*h)},R=q=>{g=requestAnimationFrame(R);let re=(q-I)/1e3,ee=s.current,h=Math.min(1,c.current());U=H(U,Math.max(ee==="speaking"?.42:ee==="listening"?.3:ee==="thinking"?.28:.12,h),b?.1:.5,b?.05:.11),E()||D(re,Math.max(.25,U)),p.clearRect(0,0,v,x);let _=x/2;F=ee==="thinking"?(F+.012)%1.6:0;let W=3;if(O!==v){N=[];for(let C=0;C<W;C++){let G=C/(W-1||1),K=hd(d,k,G*.5),f=p.createLinearGradient(0,0,v,0);f.addColorStop(0,Ra(K,0)),f.addColorStop(.5,Ra(K,.9-G*.35)),f.addColorStop(1,Ra(K,0)),N.push(f)}y=p.createLinearGradient(0,0,v,0),y.addColorStop(0,Ra(d,0)),y.addColorStop(.5,Ra(d,.14)),y.addColorStop(1,Ra(d,0)),O=v}let V=x*.32,A=Math.max(4,v/130);for(let C=0;C<W;C++){let G=C/(W-1||1),K=C*.055,f=1-G*.22;p.beginPath();let Y=0,$=_;for(let J=0;J<=v;J+=A){let te=J/v,le=Math.pow(Math.sin(Math.PI*te),.85),B=ee==="thinking"?Math.exp(-Math.pow((te-(F-.3))*4.5,2)):1,ce=Q(Math.abs(te-.5)*2),fe=re-K,je=Math.sin(te*Math.PI*2*2.1+fe*7.4)*.66+Math.sin(te*Math.PI*2*3.7-fe*5.6)*.26+Math.sin(te*Math.PI*2*5.9+fe*9.1)*.08,ze=_+le*B*f*V*U*(.6+ce*1.1)*je+Math.sin(te*Math.PI*2*.6+(re-K)*2.2)*le*x*.01;J===0?p.moveTo(J,ze):p.quadraticCurveTo(Y,$,(Y+J)/2,($+ze)/2),Y=J,$=ze}p.quadraticCurveTo(Y,$,v,$),p.lineCap="round",p.lineJoin="round";let j=(C===0?3:1.6)*(1+U*.6);C===0&&(p.strokeStyle=y,p.lineWidth=j*5,p.stroke()),p.strokeStyle=N[C],p.lineWidth=j,p.stroke()}};return g=requestAnimationFrame(R),()=>{cancelAnimationFrame(g),L?.disconnect(),window.removeEventListener("resize",S)}},[]),ud("canvas",{ref:i,className:o,"aria-hidden":"true"})}import{jsx as Ce,jsxs as za}from"react/jsx-runtime";function ns({siteId:e,themeAttr:r,stopVoice:t,chooseVoice:a,liveVoiceName:o,voiceSecondsLeft:i,voiceConnecting:s,voicePhase:c,live:n,voiceMuted:l,setVoiceMuted:m,shownSources:p,onSelectSource:u,defaultCurrency:d,voiceError:k,t:g}){return za("div",{className:"hsk-voice-overlay",role:"dialog","aria-label":g("voiceModeStart"),children:[Ce(zr,{seed:e,theme:r}),Ce("button",{className:"hsk-voice-exit",onClick:t,"aria-label":g("voiceModeExit"),title:g("voiceModeExit"),children:Ce(Cr,{})}),Ce("div",{className:"hsk-voice-picker",role:"radiogroup","aria-label":g("voicePickerLabel"),children:Sr.map((v,x)=>Ce("button",{type:"button",role:"radio","aria-checked":o===v.name,className:Z("hsk-voice-pill",o===v.name&&"hsk-voice-pill--on"),style:{animationDelay:`${x*60}ms`},onClick:()=>a(v.name),"aria-label":`${v.label}, ${v.gender}`,children:v.label},v.name))}),i!==null&&za("div",{className:Z("hsk-voice-allowance",i<=5&&"hsk-voice-allowance--low"),role:"timer","aria-live":"off",children:[Math.max(0,Math.ceil(i)),"s"]}),Ce("div",{className:Z("hsk-voice-stage",s&&"hsk-voice-stage--connecting"),children:Ce(os,{className:"hsk-voice-canvas",phase:c,level:n.micLevel,spectrum:n.micSpectrum,bins:n.spectrumBins})}),s?za("div",{className:"hsk-voice-connecting",role:"status",children:[Ce("span",{className:"hsk-voice-connecting-dot"}),Ce("span",{children:g("voiceConnecting")})]}):za("div",{className:"hsk-voice-caption","aria-live":"polite",children:[Ce("span",{className:Z("hsk-voice-phase",`hsk-voice-phase--${c}`),children:g(l?"voiceMuted":c==="speaking"?"voicePhaseSpeaking":c==="thinking"?"voicePhaseThinking":"voicePhaseListening")}),l&&Ce("span",{className:"hsk-voice-heard",children:g("voiceMutedHint")}),!l&&c==="listening"&&Ce("span",{className:"hsk-voice-hint-sub",children:g("voiceHint")})]}),p.length>0&&Ce("div",{className:"hsk-voice-items",children:p.slice(0,4).map((v,x)=>za("button",{type:"button",className:"hsk-voice-item",style:{animationDelay:`${x*70}ms`},onClick:()=>u?.(v),children:[v.image?Ce("img",{src:v.image,alt:"",className:"hsk-voice-item-img",loading:"lazy"}):Ce("span",{className:"hsk-voice-item-img hsk-voice-item-img--empty",children:Ce(ut,{})}),Ce("span",{className:"hsk-voice-item-name",children:v.name}),v.price&&za("span",{className:"hsk-voice-item-price",children:[v.currency??d," ",parseFloat(String(v.price).replace(/[^0-9.]/g,"")||"0").toLocaleString()]})]},v.id??x))}),k&&Ce("div",{className:"hsk-voice-error",children:g(k)}),Ce("div",{className:"hsk-voice-controls",children:Ce("button",{className:Z("hsk-voice-control",l&&"hsk-voice-control--muted"),onClick:()=>m(v=>!v),"aria-label":g(l?"voicePhaseListening":"voiceModeExit"),title:g(l?"voicePhaseListening":"voiceModeExit"),children:Ce("span",{className:"hsk-voice-control-icon",children:l?Ce(Tr,{}):Ce(va,{})},l?"off":"on")})})]})}import{jsx as jo,jsxs as md}from"react/jsx-runtime";function is({src:e,onClose:r}){return e?md("div",{className:"hsk-lightbox",onClick:r,children:[jo("button",{className:"hsk-lightbox-close",onClick:r,"aria-label":"Close image",children:jo(Cr,{})}),jo("img",{src:e,alt:"",className:"hsk-lightbox-img",onClick:t=>t.stopPropagation()})]}):null}import{useRef as ss,useEffect as kd}from"react";import{jsx as _r,jsxs as cs}from"react/jsx-runtime";function ls({items:e,activeIdx:r,progress:t,onJump:a,side:o="right"}){let i=jt(),s=ss([]),c=ss(null),n=0;for(let l=0;l<e.length;l++)e[l].idx<=r&&(n=l);return kd(()=>{let l=s.current[n],m=c.current;!l||!m||(m.style.transform=`translateY(${l.offsetTop+l.offsetHeight/2}px)`)},[n,e.length]),e.length<2?null:_r("nav",{className:Z("hsk-cb-timeline",o==="left"?"hsk-cb-timeline--left":"hsk-cb-timeline--right"),"aria-label":i("timelineLabel"),children:cs("div",{className:"hsk-cb-timeline-track",style:{"--hsk-tl-progress":t},children:[_r("span",{className:"hsk-cb-tl-cursor",ref:c,"aria-hidden":"true"}),e.map((l,m)=>cs("button",{ref:p=>{s.current[m]=p},type:"button",className:Z("hsk-cb-tl-item",m===n&&"hsk-cb-tl-item--on"),style:{"--hsk-tl-d":Math.min(Math.abs(m-n),4)},onClick:()=>a(l.idx),title:l.text,children:[_r("span",{className:"hsk-cb-tl-dot"}),_r("span",{className:"hsk-cb-tl-label",children:l.text})]},l.idx))]})})}import{jsx as Me,jsxs as Pa}from"react/jsx-runtime";function Vo({title:e="kiku",placeholder:r="Ask me anything\u2026",backdropColor:t,backdropBlur:a,onClose:o,onSelectSource:i,defaultCurrency:s="",chips:c=Xa,theme:n,classNames:l={},enableVoice:m=!1,voiceLang:p,enableVision:u=!1,visionCategoryHint:d,enableAudioResponse:k=!0,ttsVoice:g="Puck",autoSpeakResponses:v=!0,origin:x}){let S=vd(),{messages:L,sources:b,loading:M,streaming:N,error:y,errorCode:O,lastAction:w,lastIntent:U,allowedActions:F,send:I,queuedMessage:H,sendQueuedNow:E,appendSpokenExchange:D,stop:Q,stopped:R,interrupted:q,continueGenerating:re,reset:ee,referencedIds:h}=fd(),[z,_]=Oe(()=>{try{return S.getShopperName?.()??""}catch{return""}}),[W,V]=Oe(()=>{try{return S.getShopperLanguage?.()??""}catch{return""}}),[A,C]=Oe(()=>{try{return S.getEntityLanguageMode?.()??""}catch{return""}}),[G,K]=Oe(!1),{chromeReady:f,isRTL:Y,speechLang:$,scriptFont:j,fontStack:J,isNonLatin:te,hostFontCovers:le,t:B,tNode:ce}=xi({shopperLanguage:W,theme:n}),fe=sr.useMemo(()=>{let T=b.filter(Le=>Le.id&&h.includes(Le.id)),ae=[...L].reverse().find(Le=>Le.role==="assistant")?.content??"";if(!ae)return T;let de=new Set(T.map(Le=>Le.id)),qe=ae.toLowerCase().replace(/\s+/g," "),Ue=Le=>{let Ft=String(Le??"").toLowerCase().replace(/\s+/g," ").trim(),_t=Ft.split(" "),Qt=[Ft];return _t.length>3&&Qt.push(_t.slice(0,3).join(" ")),_t.length>4&&Qt.push(_t.slice(0,4).join(" ")),Qt.filter(br=>br.length>=5)},Nt=b.filter(Le=>Le.id&&!de.has(Le.id)&&Ue(Le.name).some(Ft=>qe.includes(Ft)));return[...T,...Nt]},[b,h,L]),je=F===null||F.includes("capture"),[ze,Pe]=Oe(""),[Wt,We]=Oe(!1),[wt,xe]=Oe(!1),[nt,dt]=Oe([]),It=et(null),[Aa,cr]=Oe({}),[Yt,Gt]=Oe(null),[lr,ca]=Oe(null),[la,he]=Oe(()=>{if(typeof window>"u")return!1;try{return localStorage.getItem("akropolys_terms_agreed")==="true"}catch{return!1}}),Ve=L.length===0,tt=Ve&&!W,Ye=Ve&&!!W&&!z,Ke=Ve&&!!W&&!!z&&!A,it=Ve&&!!W&&!!z&&!!A&&!la,St=tt||Ye||Ke||it,ht=sr.useMemo(()=>L.some(T=>T.liveKeys?.length>0),[L]);xt(()=>{if(ht)return gd({client:S})},[ht,S]);let[Ie,at]=Oe(!1);xt(()=>{let T=window.matchMedia?.("(max-width: 768px)");if(!T)return;let ae=()=>at(T.matches);return ae(),T.addEventListener?.("change",ae),()=>T.removeEventListener?.("change",ae)},[]);let Ne=T=>{let ae=T.trim();if(!ae){try{S.setShopperLanguage?.("")}catch{}V("");return}try{S.setShopperLanguage?.(ae)}catch{}V(ae),K(!1)},Ct=T=>{try{S.setEntityLanguageMode?.(T)}catch{}C(T),la&&K(!0)},da=()=>{try{localStorage.setItem("akropolys_terms_agreed","true")}catch{}he(!0),K(!0)},Et=e==="kiku"&&B("nameStepTitle")?"kiku":e,dr=tt?B("langPlaceholder"):Ye?B("namePlaceholder"):Ke?B("entityLangPlaceholder"):it?B("termsPlaceholder"):r==="Ask me anything\u2026"?B("defaultPlaceholder"):r,Ur=!c||c===Xa?[]:Array.isArray(c)?c:[],hr=tt?"curious":Ye?"welcoming":Ke?"guiding":it?"focused":"happy",[Dt,Ia]=Oe(()=>{if(fo(n))return n;if(typeof window<"u"){let T=localStorage.getItem("akropolys_theme");return fo(T)?T:window.matchMedia?.("(prefers-color-scheme: light)").matches?ii:bo}return bo}),Ea=(T,ae=!1)=>{Ia(T),ae&&(mr(!1),Yr(!1));try{localStorage.setItem("akropolys_theme",T)}catch{}},{vars:Da}=ka(n),Fa=Dt;xr(n);let _a=et(()=>{}),kt=async(T,ae,de,qe)=>{let Ue=(T??ze).trim();if(!Ue||!f||H)return;if(Ye){let Le=Bn(Ue)||Ue.slice(0,40);try{S.setShopperName?.(Le)}catch{}_(Le),Pe("");return}if(tt){Ne(Ue),Pe("");return}if(Ke){Pe("");return}We(!1),xe(!1),Pe("");let Nt=ae??nt;dt([]),await I(Ue,Ue,Nt.length>0?Nt:void 0,de,qe)},qa=oa(async()=>{let T=[...L].reverse().find(ae=>ae.role==="user");T&&await kt(T.content)},[L]),{keyInput:pr,setKeyInput:ur,keyPhase:pe,setKeyPhase:we,mintedKey:ke,setMintedKey:pt,mintedPub:Ee,setMintedPub:Ge,copied:Ua,keyCountdown:Br,minting:ha,copyValue:Mt,handleUseExistingKey:Hr,handleCreateKey:$r}=Ci(w,qa),jr=oa(()=>{if(typeof window>"u")return"N/A";try{let T=sessionStorage.getItem("akropolys_kiku_pub")||sessionStorage.getItem("kiku_pub");if(T)return T;let ae=localStorage.getItem("akropolys_kiku_pub")||localStorage.getItem("kiku_pub")||localStorage.getItem("kiku_id");if(ae)return ae;let de=document.cookie.match(/(?:^|;\s*)(?:akropolys_kiku_pub|kiku_pub|kiku_id)=([^;]+)/);if(de)return decodeURIComponent(de[1])}catch{}return"N/A"},[]),Ba=Ee??S?.getKikuPub?.()??jr(),{handleKikuCapture:Vr,handleKikuCaptureAll:Kr,handleKikuViewHistory:xs,handleKikuDelete:ws}=Mi({attachments:nt,setAttachments:dt,setInput:Pe,send:I,defaultCurrency:s,t:B}),{voiceMode:Qo,voicePhase:Xo,voiceConnecting:Ss,voiceError:Or,setVoiceError:Jo,voiceMuted:Cs,setVoiceMuted:Ms,voiceSecondsLeft:Ns,voiceBlocked:Ts,liveVoiceName:Rs,chooseVoice:zs,canConverse:Ps,startVoice:Ls,stopVoice:Zo,voice:As,live:Wr}=Ri({voiceLang:p,speechLang:$,shopperLanguage:W,ttsVoice:g,handleSendUtterance:T=>_a.current(T),appendSpokenExchange:D}),en=et(null),[pa,mr]=Oe(!1),[tn,Yr]=Oe(!1),Ha=et(null),kr=et(null),Gr=et(null),an=et([]),$a=et(null),Is=et(null),ja=et(null),Es=`hsk-goo-${bd()}`,rn=oa(()=>{Ha.current||(Yr(!0),Ha.current=setTimeout(()=>{mr(!1),Yr(!1),Ha.current=null},200))},[]);xt(()=>()=>{Ha.current&&clearTimeout(Ha.current)},[]),xt(()=>{if(!pa)return;let T=ae=>{let de=ae.composedPath?ae.composedPath():[],qe=kr.current&&(de.includes(kr.current)||kr.current.contains(ae.target)),Ue=Gr.current&&(de.includes(Gr.current)||Gr.current.contains(ae.target)),Nt=ae.target,Le=Nt?.closest?.(".hsk-cb-topbar-mark"),Ft=Nt?.closest?.(".hsk-cb-topbar-ooze-menu")||de.some(_t=>_t?.classList?.contains?.("hsk-cb-topbar-ooze-menu"));qe||Ue||Le||Ft||rn()};return document.addEventListener("mousedown",T),document.addEventListener("touchstart",T,{passive:!0}),()=>{document.removeEventListener("mousedown",T),document.removeEventListener("touchstart",T)}},[pa]);let{msgsContainerRef:on,lastExternalScrollRef:Ds,showJumpToBottom:Fs,scrollProgress:_s,activeMsgIdx:qs,unreadBelow:Us,jumpToMessage:Bs,jumpToBottom:Hs}=wi({messages:L,loading:M,messageRefs:an});si({panel:oa(()=>en.current,[]),scroller:oa(()=>on.current,[]),onDismiss:o,quiescent:oa(()=>performance.now()-Ds.current>90,[])}),xt(()=>{let T=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=T}},[]),xt(()=>{let T=window.visualViewport;if(!T)return;let ae=document.documentElement,de=()=>{ae.style.setProperty("--hsk-vvh",`${T.height}px`)};return de(),T.addEventListener("resize",de),T.addEventListener("scroll",de),()=>{T.removeEventListener("resize",de),T.removeEventListener("scroll",de),ae.style.removeProperty("--hsk-vvh")}},[]),xt(()=>{let T=ae=>{if(ae.key==="Escape"){if(Yt){Gt(null);return}o()}};return document.addEventListener("keydown",T),()=>document.removeEventListener("keydown",T)},[Yt,o]);let $s=oa(()=>{ee(),we("idle")},[ee,we]),js=T=>{i?.(T);let ae=[...L].reverse().find(qe=>qe.role==="assistant");if(ae&&ae.content.trim().endsWith("?")){I(B("cardClickAnswer",{name:T.name}));return}let de=T.price?` (${T.currency??s} ${T.price})`:"";I(B("cardClickQuery",{name:T.name,price:de}))},Vs=T=>{Pe(T+" "),xe(!1),We(!0),$a.current&&$a.current.focus()},Ks=T=>{if(T.key==="Escape"&&Wt){T.preventDefault(),We(!1);return}if(T.key==="Escape"&&wt){T.preventDefault(),xe(!1);return}T.key==="Enter"&&!T.shiftKey&&!T.nativeEvent.isComposing&&(T.preventDefault(),kt())},Qr=et(28),nn=et(280),Xr=et(null),Os=(T,ae)=>{try{!Xr.current&&typeof document<"u"&&(Xr.current=document.createElement("canvas"));let de=Xr.current?.getContext("2d");return de?(de.font=ae,de.measureText(T).width):T.length*8.5}catch{return T.length*8.5}},Ws=T=>{let ae=T.closest(".hsk-cb-input-box");if(!ae)return;let de=T.value;!(ae.dataset.expanded==="true")&&T.clientWidth>50&&(nn.current=T.clientWidth);let Ue=window.getComputedStyle(T),Nt=Ue.font||`${Ue.fontSize||"16px"} ${Ue.fontFamily||"Geist, sans-serif"}`,Le=Os(de,Nt),Ft=Math.max(120,nn.current-14),_t=de.includes(`
|
|
45
|
+
`),Qt=!!(de&&(_t||Le>Ft));if(ae.dataset.expanded!==(Qt?"true":"false")&&(ae.dataset.expanded=Qt?"true":"false"),!de){Qr.current=28,T.style.height="";return}if(!Qt){Qr.current=28,T.style.height="";return}T.style.height="auto";let br=Math.max(28,Math.min(T.scrollHeight,140));Qr.current=br,T.style.height=`${br}px`};xt(()=>{$a.current&&Ws($a.current)},[ze]);let Ys=T=>{let ae=T.target.value;Pe(ae),Or&&Jo("");let de=ae.trim();xe(de==="@"),We(/^@kiku\s*$/i.test(de))};xt(()=>{_a.current=T=>{kt(T)}});let Gs=async T=>{if(!T||T.length===0)return;let ae=Array.from(T);for(let de of ae)if(de.type.startsWith("image/"))try{let qe=await vr(de);dt(Ue=>[...Ue,{type:"image",data:qe}])}catch{}},Qs=T=>{dt(ae=>ae.filter((de,qe)=>qe!==T))},Xs=(Wr.sources?.length??0)>0?Wr.sources:fe,Js=t&&(t.includes("rgba")||t.includes("hsla")||t==="transparent"),Zs=a||Js?{backdropFilter:`blur(${typeof a=="number"?`${a}px`:a||"20px"})`,WebkitBackdropFilter:`blur(${typeof a=="number"?`${a}px`:a||"20px"})`}:{},sn=(R||q)&&!M&&!N,ua=sr.useMemo(()=>{let T=M||N;return L.filter((ae,de)=>ae.role!=="assistant"||de===L.length-1&&T?!0:!!ae.content||!!ae.visualization||ae.visualizing||(ae.knowledgeImages?.length??0)>0||(ae.referencedIds?.length??0)>0)},[L,M,N]),ec=sr.useMemo(()=>ua.map((T,ae)=>({m:T,idx:ae})).filter(({m:T})=>T.role==="user"&&!!T.content.trim()).map(({m:T,idx:ae})=>{let de=T.content.replace(/^@kiku\s*/i,"").replace(/\s+/g," ").trim();return{idx:ae,text:de.length>30?de.slice(0,29).trimEnd()+"\u2026":de}}),[ua]),tc=sn&&ua[ua.length-1]?.role!=="assistant",cn=et(Date.now());return xt(()=>{cn.current=Date.now()},[]),Me(po.Provider,{value:B,children:Me("div",{ref:ja,className:Z("hsk-cb-overlay",x&&"hsk-cb-overlay--grows",l.overlay),onPointerDown:T=>{T.target===T.currentTarget&&(ja.current._ptrDown=!0)},onClick:T=>{T.target===T.currentTarget&&ja.current?._ptrDown&&Date.now()-cn.current>200&&o(),ja.current&&(ja.current._ptrDown=!1)},"data-hsk-theme":Fa,style:{...Zs,...t?{background:t}:{},...x?{"--hsk-ox":`${x.x}px`,"--hsk-oy":`${x.y}px`,"--hsk-or":`${Math.ceil(x.r)}px`,"--hsk-bt":`${Math.round(x.top??x.y)}px`,"--hsk-bl":`${Math.round(x.left??x.x)}px`,"--hsk-bw":`${Math.round(x.width??0)}px`,"--hsk-bh":`${Math.round(x.height??0)}px`,"--hsk-bbr":`${Math.round(x.borderRadius??12)}px`}:{},...Da},children:Pa("div",{ref:en,className:Z("hsk-cb-panel",l.panel),dir:Y?"rtl":"ltr","data-script":te?"nonlatin":"latin","data-host-font":le?"covers":"gap","data-nastaliq":j?.family==="Noto Nastaliq Urdu"||W?.toLowerCase()==="urdu"||W?.toLowerCase()==="ur"||W==="\u0627\u0631\u062F\u0648"?"true":void 0,style:J?{"--hsk-font":J}:void 0,onClick:T=>{T.stopPropagation();let ae=T.target;if(ae.tagName==="IMG"&&(ae.classList.contains("hsk-markdown-img")||ae.classList.contains("hsk-cb-user-img-thumb"))){let de=ae.src;de&&Gt(de)}},children:[Me(is,{src:Yt,onClose:()=>Gt(null)}),lr&&Me("div",{className:"hsk-markup-overlay",children:Me(ui,{src:lr,t:B,onCancel:()=>ca(null),onSend:(T,ae,de,qe)=>{ca(null),kt(ae||B("markupApplyMarks"),[{type:"image",data:T,annotated:!0,marks:de,instructed:!!ae,preview:qe}])}})}),Pa("div",{className:"hsk-cb-main",children:[Me(zr,{seed:S?.api?.siteId??"",theme:Fa,dir:Y?"rtl":"ltr"}),Me(Ei,{title:Et,hasMessages:L.length>0,avatarState:N?"speaking":M?"thinking":"idle",unread:Us,awayFromBottom:Fs,themeMenuOpen:pa,themeMenuClosing:tn,isNarrow:Ie,currentTheme:Dt,onJumpToLatest:Hs,onReset:$s,onClose:o,onToggleThemeMenu:()=>pa?rn():mr(!0),onSelectTheme:T=>{Ea(T,!0)}}),Me("div",{className:"hsk-cb-msgs",ref:on,children:ua.length===0?Me(Ui,{inOnboarding:St,justCompleted:G,onboardingMood:hr,awaitingLang:tt,awaitingName:Ye,awaitingEntityLang:Ke,awaitingConsent:it,termsAgreed:la,shopperLanguage:W,shopperName:z,entityLangPref:A,chromeReady:f,activeChips:Ur,t:B,tNode:ce,chooseLanguage:Ne,chooseEntityLang:Ct,agreeTerms:da,handleSend:kt}):Me(ts,{displayMessages:ua,messageRefs:an,isNarrow:Ie,loading:M,streaming:N,sources:b,referencedIds:h,discussedSources:fe,lastIntent:U,lastAction:w,defaultCurrency:s,stopped:R,interrupted:q,halted:sn,haltedEmpty:tc,error:y,errorCode:O,keyPhase:pe,keyInput:pr,setKeyInput:ur,mintedKey:ke,setMintedKey:pt,mintedPub:Ee,setMintedPub:Ge,minting:ha,copied:Ua,keyCountdown:Br,handleUseExistingKey:Hr,handleCreateKey:$r,copyValue:Mt,queuedMessage:H,sendQueuedNow:E,setLightboxSrc:Gt,setMarkupSrc:ca,handleSend:kt,handleSourceClick:js,continueGenerating:re,t:B,bottomRef:Is,vizState:Aa,setVizState:cr,messages:L})}),Me(as,{gooId:Es,input:ze,setInput:Pe,showKikuPicker:Wt,setShowKikuPicker:We,showAtPicker:wt,setShowAtPicker:xe,captureAllowed:je,discussedSources:fe,defaultCurrency:s,handleSelectExtension:Vs,handleKikuCapture:Vr,handleKikuCaptureAll:Kr,handleKikuViewHistory:xs,handleKikuDelete:ws,attachments:nt,removeAttachment:Qs,chromeLoading:!f,imageInputRef:It,handleImageFiles:Gs,enableVision:u,enableVoice:m,canConverse:Ps,voiceMode:Qo,startVoice:Ls,stopVoice:Zo,voiceBlocked:Ts,textareaRef:$a,classNames:l,handleInput:Ys,handleKeyDown:Ks,voice:As,voicePhase:Xo,activePlaceholder:dr,loading:M,streaming:N,stop:Q,handleSend:kt,voiceError:Or,setVoiceError:Jo,shopperLanguage:W,t:B})]}),Me(ls,{items:ec,activeIdx:qs,progress:_s,onJump:Bs,side:Y?"left":"right"}),Pa("div",{className:Z("hsk-cb-kiku-id-rail",Y?"hsk-cb-kiku-id-rail--right":"hsk-cb-kiku-id-rail--left"),children:[Pa("button",{type:"button",className:"hsk-cb-kiku-id-pill",onClick:()=>Ba!=="N/A"&&Mt(Ba,"pub"),title:B("keyCopyId"),children:[Me("span",{className:"hsk-cb-kiku-id-rail-val",children:Ba}),Ua==="pub"?Me(Xn,{}):Me(Qn,{})]}),Me("div",{className:Z("hsk-cb-theme-squircle-wrap",pa&&"is-open",tn&&"is-closing"),ref:kr,children:pa?Me("div",{className:"hsk-cb-theme-2x2-grid",role:"dialog","aria-label":"Theme selector",children:ea.map(({id:T,label:ae,Icon:de})=>Pa("button",{type:"button",className:Z("hsk-cb-theme-grid-item",Dt===T&&"is-active"),onClick:qe=>{qe.stopPropagation(),Ea(T,!0)},children:[Me(de,{}),Me("span",{children:ae})]},T))}):Pa("button",{type:"button",className:"hsk-cb-theme-squircle-trigger",onClick:()=>mr(!0),"aria-label":"Themes","aria-expanded":"false",children:[Me("span",{className:"hsk-cb-theme-trigger-icon",children:sr.createElement(go(Dt).Icon)}),Me("span",{className:"hsk-cb-theme-trigger-label",children:go(Dt).label})]})})]}),Qo==="converse"&&Me(ns,{siteId:S?.api?.siteId??"",themeAttr:Fa,stopVoice:Zo,chooseVoice:zs,liveVoiceName:Rs,voiceSecondsLeft:Ns,voiceConnecting:Ss,voicePhase:Xo,live:Wr,voiceMuted:Cs,setVoiceMuted:Ms,shownSources:Xs,onSelectSource:i,defaultCurrency:s,voiceError:Or,t:B})]})})})}import{Fragment as hs,jsx as Oo,jsxs as ps}from"react/jsx-runtime";function Wo({label:e="Ask AI",children:r,icon:t,title:a,placeholder:o,backdropColor:i,backdropBlur:s,className:c,onSelectSource:n,defaultCurrency:l="$",chips:m=Xa,theme:p,classNames:u={},enableVoice:d=!1,voiceLang:k,enableVision:g=!1,visionCategoryHint:v,enableAudioResponse:x,ttsVoice:S,autoSpeakResponses:L}){let b=wd(),[M,N]=Ko(!1),[y,O]=Ko(!1),[w,U]=Ko(null),F=ds(()=>{Qa();try{Pn(b,b?.getShopperLanguage?.()??"",Zt)}catch{}},[b]),I=ds(D=>{let Q=D.getBoundingClientRect(),R=window.getComputedStyle(D),q=parseFloat(R.borderRadius)||12,re=Q.left+Q.width/2,ee=Q.top+Q.height/2,h=window.innerWidth,z=window.innerHeight,_=Math.max(Math.hypot(re,ee),Math.hypot(h-re,ee),Math.hypot(re,z-ee),Math.hypot(h-re,z-ee));U({x:re,y:ee,r:_,top:Q.top,left:Q.left,width:Q.width,height:Q.height,borderRadius:q}),N(!0)},[]);yd(()=>{O(!0);let D=window.requestIdleCallback,Q=D?D(F,{timeout:2e3}):setTimeout(F,600);if(typeof window<"u"&&!window.__akropolys_nav_patched){window.__akropolys_nav_patched=!0;let q=window.location.pathname,re=window.history.pushState,ee=window.history.replaceState;window.history.pushState=function(...h){re.apply(this,h),window.location.pathname!==q&&(q=window.location.pathname,window.dispatchEvent(new CustomEvent("akropolys:navigation")))},window.history.replaceState=function(...h){ee.apply(this,h),window.location.pathname!==q&&(q=window.location.pathname,window.dispatchEvent(new CustomEvent("akropolys:navigation")))}}let R=()=>{N(!1)};return window.addEventListener("popstate",R),window.addEventListener("akropolys:navigation",R),()=>{let q=window.cancelIdleCallback;D&&q?q(Q):clearTimeout(Q),window.removeEventListener("popstate",R),window.removeEventListener("akropolys:navigation",R)}},[F]);let{themeAttr:H,vars:E}=ka(p);return xr(p),ps(hs,{children:[Oo("button",{className:Z("hsk-cb-btn",u.button,c),onClick:D=>I(D.currentTarget),onPointerEnter:F,onPointerDown:F,style:E,"data-hsk-theme":H,"aria-label":"Open AI chat",children:r!==void 0?r:ps(hs,{children:[t?Oo("span",{className:"hsk-cb-btn-icon",style:{display:"flex",alignItems:"center"},children:t}):null,e]})}),M&&y&&xd(Oo(Vo,{title:a,placeholder:o,backdropColor:i,backdropBlur:s,origin:w,onClose:()=>N(!1),onSelectSource:n,defaultCurrency:l,chips:m,theme:p,classNames:u,enableVoice:d,voiceLang:k,enableVision:g,visionCategoryHint:v,enableAudioResponse:x,ttsVoice:S,autoSpeakResponses:L}),Qa()??document.body)]})}import{useState as sa,useEffect as na,useRef as qr}from"react";import{createPortal as Sd}from"react-dom";import{useSearch as Cd,useKiku as Md,useAkropolysContext as Nd}from"@akropolys/sdk";import{Fragment as zd,jsx as P,jsxs as se}from"react/jsx-runtime";var ia=({className:e,size:r=16})=>P("svg",{className:Z("hsk-brand-mark",e),width:r,height:r,viewBox:"0 0 100 100",xmlns:"http://www.w3.org/2000/svg","aria-label":"kiku",children:se("g",{transform:"translate(22.7 19) scale(0.62)",fill:"currentColor",fillRule:"evenodd",children:[P("path",{d:"M39.4 10.4 Q44 0 48.6 10.4 L86.1 95.8 Q88 100 83.4 100 L4.6 100 Q0 100 1.9 95.8 Z M24 100 L24 65 Q24 60 27.4 56.3 Q44 38 60.6 56.3 Q64 60 64 65 L64 100 Z"}),P("circle",{cx:"55",cy:"82",r:"3.4"})]})}),us=()=>se("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[P("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),P("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]}),ms=e=>{let r="";if(typeof e=="string")r=e;else if(e&&typeof e=="object"&&e.message)r=e.message;else try{r=JSON.stringify(e)}catch{r=String(e)}if(r.toLowerCase().includes("token limit"))return"You've reached your usage limit. Please update your billing limits in your dashboard to continue.";try{let t=JSON.parse(r);return t.error||t.message||r}catch{return r}};function Td({productName:e,limit:r,backdropColor:t,backdropBlur:a,onClose:o,onNavigate:i,onResult:s,theme:c,classNames:n={},product:l}){let m=Nd(),[p,u]=sa(null),d=l||p,{results:k,loading:g,search:v}=Cd({type:"vector"}),{messages:x,sources:S,loading:L,error:b,send:M}=Md(),[N,y]=sa(""),[O,w]=sa(!1),[U,F]=sa(!1),[I,H]=sa(!1),E=qr(null),D=qr(null);na(()=>{!l&&!p&&m.api.searchVector(e,1).then(A=>{A.results&&A.results.length>0&&u(A.results[0].entity)}).catch(A=>console.error("[Akropolys] Failed to fetch product details",A)),v(e,r)},[e,l,p,m,r,v]),na(()=>{let A=()=>w(window.innerWidth<=768);if(A(),typeof window<"u")return window.addEventListener("resize",A),()=>window.removeEventListener("resize",A)},[]),na(()=>{k.length>0&&s?.(k)},[k,s]),na(()=>{let A=C=>{C.key==="Escape"&&o()};return document.addEventListener("keydown",A),()=>document.removeEventListener("keydown",A)},[o]);let Q=qr(null);na(()=>{let A=document.body.style.overflow,C=document.body.style.position,G=document.body.style.width;document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.width="100%";let K=()=>{window.scrollTo(0,0),Q.current&&(Q.current.scrollTop=0)};return window.addEventListener("scroll",K,{passive:!0}),()=>{document.body.style.overflow=A,document.body.style.position=C,document.body.style.width=G,window.removeEventListener("scroll",K)}},[]);let R=qr(null);na(()=>{R.current&&(R.current.scrollTop=R.current.scrollHeight)},[x,L]);let q=typeof a=="number"?`${a}px`:a??"16px",re=t??void 0,ee=A=>{i?.(A)!==!1&&(o(),A.entity.url&&(window.location.href=A.entity.url))},h=async A=>{let C=(A??N).trim();if(!(!C||L))if(y(""),D.current&&(D.current.style.height="auto"),x.length===0&&d){let G=`[Context: Shopper is viewing "${d.name}". Price: ${d.price}. Description: ${d.description||""}]
|
|
46
|
+
|
|
47
|
+
Question: ${C}`;await M(G,C)}else await M(C)},z=A=>{A.key==="Enter"&&!A.shiftKey&&!A.nativeEvent.isComposing&&(A.preventDefault(),h())},_=A=>{y(A.target.value);let C=A.target;C.style.height="auto",C.style.height=`${Math.min(C.scrollHeight,140)}px`},W={...c?.primaryColor&&{"--hsk-primary":c.primaryColor},...c?.backgroundColor&&{"--hsk-bg":c.backgroundColor},...c?.textColor&&{"--hsk-text":c.textColor},...c?.fontFamily&&{"--hsk-font":c.fontFamily},...c?.borderRadius&&{"--hsk-border-radius":c.borderRadius}},V=x.length===0&&d?[{role:"assistant",content:`Hi! I can help you with **${d.name}**. Ask me about its specifications, features, compare it with other options, or find alternatives!`}]:x;return O?P("div",{ref:Q,className:Z("hsk-sp-backdrop hsk-sp-mobile-view",n.backdrop),onClick:o,style:{backdropFilter:`blur(${q})`,WebkitBackdropFilter:`blur(${q})`,background:re??void 0,...W},children:se("div",{className:Z("hsk-sp-card hsk-sp-fullscreen hsk-sp-mobile-card",n.card),onClick:A=>A.stopPropagation(),children:[se("div",{className:"hsk-sp-header",children:[P("span",{className:"hsk-sp-header-icon",style:{display:"flex",alignItems:"center"},children:P(ia,{})}),se("div",{className:"hsk-sp-header-body",children:[se("div",{className:"hsk-sp-header-title-row",children:[P("div",{className:"hsk-sp-header-title",children:d?.name||e}),d&&P("button",{type:"button",className:"hsk-sp-header-specs-btn",onClick:()=>F(!0),children:"Specs"})]}),P("div",{className:"hsk-sp-header-sub",children:"kiku"})]}),P("button",{className:"hsk-sp-close",onClick:o,"aria-label":"Close",children:P(us,{})})]}),g&&P("div",{className:"hsk-sp-bar"}),se("div",{className:"hsk-sp-mobile-chat-container",children:[se("div",{className:"hsk-cb-msgs",children:[V.map((A,C)=>{let G=A.role==="user";return P("div",{className:"hsk-cb-msg-group",children:G?P("div",{className:"hsk-cb-user-msg",children:P("div",{className:"hsk-cb-user-bubble",children:A.content})}):se("div",{className:"hsk-cb-ai-msg",children:[P("div",{className:"hsk-cb-ai-icon",style:{display:"flex",alignItems:"center"},children:P(ia,{})}),se("div",{className:"hsk-cb-ai-body",children:[P("div",{className:"hsk-cb-ai-text",children:Xt(A.content)}),C===0&&d&&se("div",{className:"hsk-sp-mobile-attachment-deck",children:[se("div",{className:"hsk-sp-mobile-main-card",children:[P("div",{className:"hsk-sp-mobile-main-card-img",children:d.images?.[0]?P("img",{src:d.images[0],alt:d.name}):P("span",{children:"\xF0\u0178\u203A\x8D"})}),se("div",{className:"hsk-sp-mobile-main-card-info",children:[P("div",{className:"hsk-sp-mobile-main-card-brand",children:d.brand||d.category||"Product"}),P("div",{className:"hsk-sp-mobile-main-card-name",children:d.name}),se("div",{className:"hsk-sp-mobile-main-card-price",children:[d.currency??"KES"," ",parseFloat(d.price?.replace(/[^0-9.]/g,"")||"0").toLocaleString()]})]}),(d.specs&&Object.keys(d.specs).length>0||d.description)&&P("button",{type:"button",className:"hsk-sp-mobile-main-card-specs-btn",onClick:()=>F(!0),children:"Specs"})]}),(()=>{let K=k.filter(f=>{let Y=!!(f.entity.name&&d?.name&&f.entity.name.toLowerCase()===d.name.toLowerCase()),$=f.entity.slug&&d?.slug&&f.entity.slug.toLowerCase()===d.slug.toLowerCase();return!Y&&!$});return K.length===0?null:se("div",{className:"hsk-sp-mobile-similar-carousel-inline",children:[P("div",{className:"hsk-sp-mobile-similar-carousel-title",children:"Similar Products"}),P("div",{className:"hsk-sp-mobile-similar-carousel-list",children:K.map(f=>{let Y=parseFloat(f.entity.price?.replace(/[^0-9.]/g,"")||"0"),$=f.entity.currency??"KES";return se("div",{className:"hsk-sp-mobile-similar-carousel-item",onClick:()=>ee(f),children:[P("div",{className:"hsk-sp-mobile-similar-carousel-img",children:f.entity.images?.[0]?P("img",{src:f.entity.images[0],alt:f.entity.name}):P("span",{children:"\xF0\u0178\u203A\x8D"})}),se("div",{className:"hsk-sp-mobile-similar-carousel-meta",children:[P("div",{className:"hsk-sp-mobile-similar-carousel-name",title:f.entity.name,children:f.entity.name}),se("div",{className:"hsk-sp-mobile-similar-carousel-price",children:[$," ",Y.toLocaleString()]})]})]},f.id)})})]})})()]})]})]})},C)}),L&&se("div",{className:"hsk-cb-typing-row",children:[P("div",{className:"hsk-cb-ai-icon",style:{display:"flex",alignItems:"center"},children:P(ia,{})}),se("div",{className:"hsk-cb-typing",children:[P("div",{className:"hsk-cb-dot"}),P("div",{className:"hsk-cb-dot"}),P("div",{className:"hsk-cb-dot"})]})]}),b&&P("div",{className:"hsk-cb-error",children:ms(b)}),P("div",{ref:E,style:{height:1}})]}),P("div",{className:"hsk-cb-input-wrap",children:se("div",{className:"hsk-cb-input-box",children:[P("textarea",{ref:D,className:"hsk-cb-textarea",value:N,onChange:_,onKeyDown:z,placeholder:"Ask about this product, specs, or comparison...",rows:1,disabled:L}),P("button",{className:"hsk-cb-send",onClick:()=>h(),disabled:!N.trim()||L,"aria-label":"Send message",children:P(Va,{})})]})})]}),U&&d&&P("div",{className:"hsk-sp-mobile-specs-overlay",onClick:()=>F(!1),children:se("div",{className:"hsk-sp-mobile-specs-drawer",onClick:A=>A.stopPropagation(),children:[se("div",{className:"hsk-sp-mobile-specs-header",children:[P("h3",{children:"Specifications"}),P("button",{type:"button",onClick:()=>F(!1),children:"Close"})]}),se("div",{className:"hsk-sp-mobile-specs-body",children:[P("h4",{className:"hsk-sp-mobile-specs-title",children:d.name}),d.description&&se("div",{className:"hsk-sp-mobile-specs-desc",children:[P("h5",{children:"Description"}),P("p",{children:d.description})]}),d.specs&&Object.keys(d.specs).length>0&&se("div",{className:"hsk-sp-mobile-specs-list",children:[P("h5",{children:"Details"}),Object.entries(d.specs).map(([A,C])=>se("div",{className:"hsk-sp-mobile-spec-row",children:[P("span",{className:"hsk-sp-mobile-spec-label",children:A}),P("span",{className:"hsk-sp-mobile-spec-value",children:C})]},A))]})]})]})})]})}):P("div",{className:Z("hsk-sp-backdrop",n.backdrop),onClick:o,style:{backdropFilter:`blur(${q})`,WebkitBackdropFilter:`blur(${q})`,background:re??void 0,...W},children:se("div",{className:Z("hsk-sp-card hsk-sp-fullscreen",n.card),onClick:A=>A.stopPropagation(),children:[se("div",{className:"hsk-sp-header",children:[P("span",{className:"hsk-sp-header-icon",style:{display:"flex",alignItems:"center"},children:P(ia,{})}),se("div",{className:"hsk-sp-header-body",children:[P("div",{className:"hsk-sp-header-title",children:d?.name||e}),P("div",{className:"hsk-sp-header-sub",children:"Ask questions, compare specs, or check similar products"})]}),P("button",{className:"hsk-sp-close",onClick:o,"aria-label":"Close",children:P(us,{})})]}),g&&P("div",{className:"hsk-sp-bar"}),se("div",{className:"hsk-sp-body",children:[se("div",{className:"hsk-sp-details-pane",children:[d&&se("div",{className:"hsk-sp-product-profile-container",children:[se("div",{className:"hsk-sp-product-profile",children:[P("div",{className:"hsk-sp-details-imgwrap",children:d.images?.[0]?P("img",{src:d.images[0],alt:d.name}):P("span",{className:"hsk-sp-img-placeholder",children:"\xF0\u0178\u203A\x8D"})}),se("div",{className:"hsk-sp-details-meta",children:[d.brand&&P("span",{className:"hsk-sp-item-brand",children:d.brand}),d.category&&P("span",{className:"hsk-sp-item-cat",children:d.category}),P("h2",{className:"hsk-sp-details-name",children:d.name}),se("div",{className:"hsk-sp-item-price-row",children:[P("span",{className:"hsk-sp-item-currency",children:d.currency??"KES"}),P("span",{className:"hsk-sp-item-price",children:parseFloat(d.price?.replace(/[^0-9.]/g,"")||"0").toLocaleString()}),d.originalPrice&&P("span",{className:"hsk-sp-item-original-price",children:parseFloat(d.originalPrice.replace(/[^0-9.]/g,"")||"0").toLocaleString()}),d.discount&&se("span",{className:"hsk-sp-item-discount",children:["(",d.discount,")"]})]}),se("div",{className:"hsk-sp-item-meta-badges",children:[d.rating&&se("span",{className:"hsk-sp-meta-badge hsk-sp-meta-badge-rating",children:["\xE2\u02DC\u2026 ",parseFloat(d.rating.toString()).toFixed(1)," ",d.reviewCount?`(${d.reviewCount})`:""]}),d.availability&&P("span",{className:`hsk-sp-meta-badge hsk-sp-meta-badge-avail ${d.availability.toLowerCase().includes("in")?"in-stock":"out-stock"}`,children:d.availability}),d.stock&&!d.availability&&se("span",{className:"hsk-sp-meta-badge hsk-sp-meta-badge-stock",children:["Stock: ",d.stock]})]})]})]}),d.specs&&Object.keys(d.specs).length>0&&P("div",{className:"hsk-sp-specs-horizontal",children:Object.entries(d.specs).map(([A,C])=>se("div",{className:"hsk-sp-spec-item-horizontal",children:[se("span",{className:"hsk-sp-spec-label-horizontal",children:[A,":"]}),P("span",{className:"hsk-sp-spec-value-horizontal",title:C,children:C})]},A))}),d.description&&se("div",{className:"hsk-sp-details-desc",children:[P("h4",{children:"Description"}),P("p",{children:d.description})]})]}),se("div",{className:"hsk-sp-similar-section",children:[P("h3",{children:"Similar Products"}),P("div",{className:"hsk-sp-results",children:(()=>{let A=k.filter(C=>{let G=!!(C.entity.name&&d?.name&&C.entity.name.toLowerCase()===d.name.toLowerCase()),K=C.entity.slug&&d?.slug&&C.entity.slug.toLowerCase()===d.slug.toLowerCase();return!G&&!K});return!g&&A.length===0?P("div",{className:"hsk-sp-empty",children:"No similar products found."}):A.map((C,G)=>{let K=parseFloat(C.entity.price?.replace(/[^0-9.]/g,"")||"0"),f=C.entity.currency??"KES";return se("div",{className:Z("hsk-sp-item",n.item),style:{animationDelay:`${G*55}ms`,cursor:"pointer"},onClick:()=>ee(C),children:[P("div",{className:"hsk-sp-img-wrap",children:C.entity.images?.[0]?P("img",{src:C.entity.images[0],alt:C.entity.name}):P("span",{className:"hsk-sp-img-placeholder",children:"\xF0\u0178\u203A\x8D"})}),se("div",{className:"hsk-sp-item-body",children:[se("div",{children:[C.entity.category&&P("div",{className:"hsk-sp-item-cat",children:C.entity.category}),P("div",{className:"hsk-sp-item-name",title:C.entity.name,children:C.entity.name})]}),se("div",{className:"hsk-sp-item-price-row",children:[P("span",{className:"hsk-sp-item-currency",children:f}),P("span",{className:"hsk-sp-item-price",children:K.toLocaleString()})]}),P("div",{className:"hsk-sp-actions",children:P("button",{className:"hsk-sp-action hsk-sp-action-primary",onClick:Y=>{Y.stopPropagation(),ee(C)},children:"View"})})]})]},C.id)})})()})]})]}),se("div",{className:"hsk-sp-chat-pane",children:[se("div",{className:"hsk-cb-msgs",children:[V.map((A,C)=>{let G=A.role==="user";return P("div",{className:"hsk-cb-msg-group",children:G?P("div",{className:"hsk-cb-user-msg",children:P("div",{className:"hsk-cb-user-bubble",children:A.content})}):se("div",{className:"hsk-cb-ai-msg",children:[P("div",{className:"hsk-cb-ai-icon",style:{display:"flex",alignItems:"center"},children:P(ia,{})}),P("div",{className:"hsk-cb-ai-body",children:P("div",{className:"hsk-cb-ai-text",children:Xt(A.content)})})]})},C)}),L&&se("div",{className:"hsk-cb-typing-row",children:[P("div",{className:"hsk-cb-ai-icon",style:{display:"flex",alignItems:"center"},children:P(ia,{})}),se("div",{className:"hsk-cb-typing",children:[P("div",{className:"hsk-cb-dot"}),P("div",{className:"hsk-cb-dot"}),P("div",{className:"hsk-cb-dot"})]})]}),b&&P("div",{className:"hsk-cb-error",children:ms(b)}),P("div",{ref:E,style:{height:1}})]}),se("div",{className:"hsk-cb-input-wrap",children:[se("div",{className:"hsk-cb-input-box",children:[P("textarea",{ref:D,className:"hsk-cb-textarea",value:N,onChange:_,onKeyDown:z,placeholder:"Ask about this product, specs, or comparison...",rows:1,disabled:L}),P("button",{className:"hsk-cb-send",onClick:()=>h(),disabled:!N.trim()||L,"aria-label":"Send message",children:P(Va,{})})]}),P("div",{className:"hsk-cb-hint",children:"Akropolys \xB7 instant product knowledge"})]})]})]}),P("div",{className:"hsk-sp-footer",children:P("span",{className:"hsk-sp-esc",children:"Esc to close"})})]})})}function Rd({productName:e,limit:r=8,onResult:t,backdropColor:a,backdropBlur:o,className:i,onNavigate:s,theme:c,classNames:n={},product:l,children:m}){let[p,u]=sa(!1),[d,k]=sa(!1);na(()=>{k(!0)},[]);let g={...c?.primaryColor&&{"--hsk-primary":c.primaryColor},...c?.backgroundColor&&{"--hsk-bg":c.backgroundColor},...c?.textColor&&{"--hsk-text":c.textColor},...c?.fontFamily&&{"--hsk-font":c.fontFamily},...c?.borderRadius&&{"--hsk-border-radius":c.borderRadius}};return se(zd,{children:[P("button",{className:Z("hsk-sp-btn",n.button,i),onClick:()=>u(!0),style:g,title:"Find similar products","aria-label":"Find similar products",children:m||P(ia,{})}),p&&d&&Sd(P(Td,{productName:e,limit:r,onResult:t,backdropColor:a,backdropBlur:o,onClose:()=>u(!1),onNavigate:s,theme:c,classNames:n,product:l}),Qa()??document.body)]})}import{useEffect as fs,useState as ks,useRef as bs}from"react";import{createRoot as Pd}from"react-dom/client";import{AkropolysProvider as Ld,getAkropolysClient as Yo}from"@akropolys/sdk";import{jsx as La}from"react/jsx-runtime";function Go(e){if(!e||typeof e!="object")return{};let r=String(e.id??e.handle??e.url??""),t=e.title||e.name||"",a;typeof e.price=="number"?a=e.price>=100&&Number.isInteger(e.price)?(e.price/100).toFixed(2):e.price.toString():typeof e.price=="string"&&(a=e.price);let o=e.featured_image||e.image;if(!o&&Array.isArray(e.images)&&e.images.length>0){let d=e.images[0];o=typeof d=="string"?d:d?.src}typeof o=="string"&&o.startsWith("//")&&(o="https:"+o);let i=e.url||"";if(!i&&e.handle&&(i=`/products/${e.handle}`),i&&typeof window<"u"&&!i.startsWith("http"))try{i=new URL(i,window.location.origin).href}catch{}let s=e.type||e.product_type||e.category||"",c=e.vendor||e.brand||"",n=Array.isArray(e.tags)?e.tags:typeof e.tags=="string"?e.tags.split(",").map(d=>d.trim()).filter(Boolean):[],l=e.description||e.body_html||"",m=typeof l=="string"?l.replace(/<[^>]*>?/gm,"").trim():"",p=Array.isArray(e.variants)&&e.variants.length>0?e.variants[0]:null,u=p?p.id:void 0;return{id:r,name:t,title:t,price:a,image:o,url:i||(typeof window<"u"?window.location.href:""),category:s,brand:c,tags:n,description:m,availability:e.available!==!1?"in_stock":"out_of_stock",variant_id:u?String(u):void 0,shopify_product_id:e.id?String(e.id):void 0,handle:e.handle||void 0}}function gs(e){if(!e||e.length===0)return Promise.resolve();let r=e.map(t=>({id:t.fields?.variant_id||t.fields?.shopify_variant_id||t.id,quantity:1}));return fetch("/cart/add.js",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({items:r})}).then(async t=>{t.ok||console.warn("[Akropolys Shopify] /cart/add.js returned error status:",t.status);let a=await t.json().catch(()=>null);return typeof document<"u"&&(document.dispatchEvent(new CustomEvent("cart:updated",{bubbles:!0,detail:{items:a}})),document.dispatchEvent(new CustomEvent("cart:refresh",{bubbles:!0,detail:{items:a}})),document.dispatchEvent(new CustomEvent("cart:build",{bubbles:!0})),window.dispatchEvent(new CustomEvent("cart:updated",{detail:{items:a}}))),a}).catch(t=>{console.warn("[Akropolys Shopify] Add to cart network error:",t)})}function vs(){return fetch("/cart.js",{headers:{Accept:"application/json"}}).then(e=>e.ok?e.json():null).catch(()=>null)}function Ad({children:e,position:r="bottom-right",dockable:t=!0,isInline:a=!1}){if(a||r==="inline"||r==="custom"||r==="hidden"||t===!1)return La("div",{className:"akropolys-kiku-inline-wrapper",style:{display:"inline-flex",alignItems:"center"},children:e});let[o,i]=ks(null),[s,c]=ks(!1),n=bs(null),l=bs(null);fs(()=>{if(typeof window>"u")return;let d=()=>{let S=window.innerWidth-140-20,L=window.innerHeight-44-20;r==="bottom-left"?(S=20,L=window.innerHeight-44-20):r==="top-right"?(S=window.innerWidth-140-20,L=20):r==="top-left"&&(S=20,L=20);try{let b=localStorage.getItem("akropolys_dock_pos");if(b){let M=JSON.parse(b);if(typeof M.x=="number"&&typeof M.y=="number"){let N=Math.max(10,Math.min(window.innerWidth-60,M.x)),y=Math.max(10,Math.min(window.innerHeight-60,M.y));return{x:N,y}}}}catch{}return{x:Math.max(10,S),y:Math.max(10,L)}};i(d());let k=()=>{i(g=>{if(!g)return d();let v=Math.max(10,Math.min(window.innerWidth-60,g.x)),x=Math.max(10,Math.min(window.innerHeight-60,g.y));return{x:v,y:x}})};return window.addEventListener("resize",k),()=>window.removeEventListener("resize",k)},[r]);let m=d=>{if(!l.current)return;let k=l.current.getBoundingClientRect();n.current={startX:d.clientX,startY:d.clientY,initX:k.left,initY:k.top,moved:!1};try{d.target.setPointerCapture?.(d.pointerId)}catch{}},p=d=>{if(!n.current)return;let k=d.clientX-n.current.startX,g=d.clientY-n.current.startY;if(!n.current.moved&&Math.hypot(k,g)>6&&(n.current.moved=!0,c(!0)),n.current.moved){let v=l.current?.offsetWidth||140,x=l.current?.offsetHeight||44,S=Math.max(8,Math.min(window.innerWidth-v-8,n.current.initX+k)),L=Math.max(8,Math.min(window.innerHeight-x-8,n.current.initY+g));i({x:S,y:L})}},u=()=>{if(!n.current)return;let d=n.current.moved;if(n.current=null,c(!1),d&&o){try{localStorage.setItem("akropolys_dock_pos",JSON.stringify(o))}catch{}let k=g=>{g.stopPropagation(),g.preventDefault(),window.removeEventListener("click",k,!0)};window.addEventListener("click",k,!0),setTimeout(()=>window.removeEventListener("click",k,!0),120)}};return o?La("div",{ref:l,className:"akropolys-kiku-dock-wrapper",onPointerDown:m,onPointerMove:p,onPointerUp:u,onPointerCancel:u,title:"Drag to dock anywhere",style:{position:"fixed",left:`${o.x}px`,top:`${o.y}px`,zIndex:2147483640,touchAction:"none",cursor:s?"grabbing":"grab",transition:s?"none":"transform 0.2s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.2s ease",transform:s?"scale(1.05)":"scale(1)",userSelect:"none",WebkitUserSelect:"none"},children:e}):null}function Id({config:e,isInline:r}){fs(()=>{let a=Yo();if(!a)return;let o=e.product;if(!o&&typeof window.meta?.product=="object"&&(o=window.meta.product),o){let i=Go(o);(i.id||i.url)&&a.ingest(i).catch(s=>{console.debug("[Akropolys Shopify] Auto-ingest notice:",s)})}},[e.product]);let t=a=>{if(e.onAddToCart){e.onAddToCart(a);return}gs(a)};return La(Ld,{siteId:e.siteId,apiUrl:e.apiUrl,apiToken:e.apiToken,vertical:e.vertical||"commerce",shopperId:e.shopperId,onAddToCart:t,onAction:e.onAction,getCart:vs,children:La(Ad,{position:e.position,dockable:e.dockable!==!1,isInline:r,children:La(Wo,{label:e.buttonLabel||"Ask Kiku",title:e.title||"kiku",placeholder:e.placeholder,defaultCurrency:e.defaultCurrency||"$",chips:e.chips,theme:e.theme||"dark",enableVoice:e.enableVoice!==!1,voiceLang:e.voiceLang,enableVision:e.enableVision!==!1,visionCategoryHint:e.visionCategoryHint,enableAudioResponse:e.enableAudioResponse!==!1,ttsVoice:e.ttsVoice||"Puck",autoSpeakResponses:e.autoSpeakResponses!==!1})})})}function Ed(){typeof document>"u"||document.addEventListener("click",e=>{e.target?.closest("[data-kiku-open], [data-kiku-toggle], .kiku-trigger")&&(e.preventDefault(),window.Kiku?.open())})}function ys(e){if(typeof window>"u"||typeof document>"u")return;let r={},t=document.getElementById("akropolys-kiku-script");if(t){let c=t.dataset;r={siteId:c.siteId,apiToken:c.apiToken,apiUrl:c.apiUrl,theme:c.theme,buttonLabel:c.buttonLabel,position:c.position,containerId:c.containerId,containerSelector:c.containerSelector,dockable:c.dockable!=="false",enableVoice:c.enableVoice==="true"||c.enableVoice==="1",enableVision:c.enableVision==="true"||c.enableVision==="1"}}let a={...r,...window.AkropolysConfig||{},...e||{}};(!a.siteId||!a.apiToken)&&console.warn('[Akropolys] Missing siteId or apiToken. Configure window.AkropolysConfig = { siteId: "...", apiToken: "..." }');let o=null,i=!1;a.containerSelector&&(o=document.querySelector(a.containerSelector),o&&(i=!0)),!o&&a.containerId&&(o=document.getElementById(a.containerId),o&&(i=!0)),o||(o=document.getElementById("kiku-mount")||document.querySelector("[data-kiku-mount]"),o&&(i=!0)),o||(o=document.createElement("div"),o.id="akropolys-kiku-host",document.body.appendChild(o)),Pd(o).render(La(Id,{config:a,isInline:i})),Ed(),window.Kiku={version:"1.7.19",open:()=>{document.querySelector(".hsk-cb-btn")?.click()},close:()=>{document.querySelector('.hsk-cb-topbar-btn[aria-label="Close"]')?.click()},toggle:()=>{document.querySelector(".hsk-cb-overlay")?window.Kiku?.close():window.Kiku?.open()},resetPosition:()=>{try{localStorage.removeItem("akropolys_dock_pos"),window.location.reload()}catch{}},ingest:async c=>{let n=Yo();if(n&&c){let l=Go(c);await n.ingest(l)}},getClient:()=>Yo(),config:a}}if(typeof window<"u"){let e=()=>!!(window.AkropolysConfig||document.getElementById("akropolys-kiku-script")||document.getElementById("kiku-mount")||document.querySelector("[data-kiku-mount]")),r=()=>{e()&&ys()};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",r):setTimeout(r,0)}export{Tn as ChatWidget,Wo as KikuButton,Tn as KikuChat,oc as SearchBar,Rd as Sparkle,oo as VisualSearch,ao as VoiceButton,ys as initKiku,Go as normalizeShopifyProduct,gs as shopifyAddToCart,vs as shopifyGetCart};
|
|
3281
48
|
//# sourceMappingURL=index.mjs.map
|