@askly/widget 2.10.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MIGRATION-3.0.md +58 -0
- package/README.md +136 -5
- package/dist/app/HelpTab-jjw4cF1_.js +1 -0
- package/dist/app/VoiceRecorder-CMc1Bz14.js +1 -0
- package/dist/app/askly-app.js +1 -0
- package/dist/app/shared-C0Z29aNi.js +1 -0
- package/dist/app/speech-8iAgRQFA.js +1 -0
- package/dist/index.esm.js +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/loader.js +1 -0
- package/dist/types/app.d.ts +3 -0
- package/dist/types/core/api.d.ts +30 -0
- package/dist/types/core/config.d.ts +44 -0
- package/dist/{core → types/core}/events.d.ts +19 -0
- package/dist/types/core/html.d.ts +2 -0
- package/dist/types/core/speech.d.ts +38 -0
- package/dist/{core → types/core}/types.d.ts +4 -0
- package/dist/types/core/voice.d.ts +7 -0
- package/dist/{icons.d.ts → types/icons.d.ts} +0 -3
- package/dist/types/index.d.ts +7 -0
- package/dist/types/loader/attrs.d.ts +4 -0
- package/dist/types/loader/core.d.ts +26 -0
- package/dist/{ui → types/ui}/Composer.d.ts +11 -9
- package/dist/types/ui/VoiceRecorder.d.ts +17 -0
- package/dist/types/widget-entry.d.ts +1 -0
- package/dist/types/widget.d.ts +3 -0
- package/dist/widget.js +1 -10
- package/package.json +32 -21
- package/dist/index.d.ts +0 -117
- package/dist/widget.d.ts +0 -4
- /package/dist/{core → types/core}/format.d.ts +0 -0
- /package/dist/{core → types/core}/greeting.d.ts +0 -0
- /package/dist/{core → types/core}/session.d.ts +0 -0
- /package/dist/{core → types/core}/storage.d.ts +0 -0
- /package/dist/{identity.d.ts → types/identity.d.ts} +0 -0
- /package/dist/{markdown.d.ts → types/markdown.d.ts} +0 -0
- /package/dist/{pathRules.d.ts → types/pathRules.d.ts} +0 -0
- /package/dist/{realtime.d.ts → types/realtime.d.ts} +0 -0
- /package/dist/{ui → types/ui}/ChatTerms.d.ts +0 -0
- /package/dist/{ui → types/ui}/ConversationList.d.ts +0 -0
- /package/dist/{ui → types/ui}/ExploreTab.d.ts +0 -0
- /package/dist/{ui → types/ui}/GreetingBubble.d.ts +0 -0
- /package/dist/{ui → types/ui}/HelpTab.d.ts +0 -0
- /package/dist/{ui → types/ui}/Launcher.d.ts +0 -0
- /package/dist/{ui → types/ui}/MessageList.d.ts +0 -0
- /package/dist/{ui → types/ui}/NavTabs.d.ts +0 -0
- /package/dist/{ui → types/ui}/PanelHeader.d.ts +0 -0
package/MIGRATION-3.0.md
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Migrating to @askly/widget 3.0
|
|
2
|
+
|
|
3
|
+
3.0 changes how the widget is delivered, not what it does. Every option, method and event from
|
|
4
|
+
2.x still works. Most sites have nothing to do.
|
|
5
|
+
|
|
6
|
+
## Script tag
|
|
7
|
+
|
|
8
|
+
Nothing to change if you load it from a CDN. `dist/widget.js` is now a loader of under 5 KB
|
|
9
|
+
that fetches the widget on demand from the `app/` directory next to it, so the existing
|
|
10
|
+
one-line embed keeps working, including on `@latest`. We recommend pinning the major version:
|
|
11
|
+
|
|
12
|
+
```html
|
|
13
|
+
<script src="https://unpkg.com/@askly/widget@3/dist/widget.js" data-app-id="…" async></script>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
If you copied `widget.js` to your own server, copy the whole `dist/` directory this time
|
|
17
|
+
(`widget.js` and `app/`), and keep old `app/` files around for a while after each update:
|
|
18
|
+
a visitor who already has the main file may still fetch its chunks.
|
|
19
|
+
|
|
20
|
+
## npm
|
|
21
|
+
|
|
22
|
+
`react` and `react-dom` are no longer peer dependencies; you can remove them if the widget was
|
|
23
|
+
the only reason you had them. `import Askly from "@askly/widget"` still works and still gives
|
|
24
|
+
you the same API. What you import is now the loader; the widget's code is fetched from the CDN,
|
|
25
|
+
for your exact package version, when first needed. To keep everything on your own origin, copy
|
|
26
|
+
`dist/app/` to your static assets and pass its URL as `appUrl` (see the README).
|
|
27
|
+
|
|
28
|
+
If you rendered the React component directly (`import { ChatWidget } from "@askly/widget"`),
|
|
29
|
+
that export is gone. Use `Askly.init()`, or `<AsklyProvider>` from the new `@askly/react`.
|
|
30
|
+
|
|
31
|
+
## Styling
|
|
32
|
+
|
|
33
|
+
The widget now renders in a Shadow DOM. CSS on your page that targeted the widget's class names
|
|
34
|
+
(`.askly-chat-modal`, `.askly-chat-button`, …) no longer reaches it. Colours and fonts come from
|
|
35
|
+
the portal; for per-page adjustments set these properties on the host elements:
|
|
36
|
+
|
|
37
|
+
```css
|
|
38
|
+
askly-widget, askly-loader { --askly-brand: #0f766e; --askly-font-family: "Inter", sans-serif; }
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Content Security Policy
|
|
42
|
+
|
|
43
|
+
The widget's code is now a module that the loader imports, so a nonce on the `<script>` tag is
|
|
44
|
+
no longer enough on its own: add `'strict-dynamic'` to `script-src`, or list the origin you load
|
|
45
|
+
the widget from. If your page enforces Trusted Types, allow the policy name `askly`. With
|
|
46
|
+
Turnstile on, allow `https://challenges.cloudflare.com` in `script-src` and `frame-src`.
|
|
47
|
+
|
|
48
|
+
## New
|
|
49
|
+
|
|
50
|
+
- `Askly.unmount()` removes the widget without forgetting the visitor (use it where a framework
|
|
51
|
+
mounts and unmounts; `shutdown()` still also resets identity, for logout).
|
|
52
|
+
- `<askly-chat app-id="…">` element, `appUrl` option, `@askly/react`.
|
|
53
|
+
|
|
54
|
+
## Removed
|
|
55
|
+
|
|
56
|
+
- The `readAloud` option (removed in 2.11.0; still accepted and ignored).
|
|
57
|
+
- The `ChatWidget` React component export.
|
|
58
|
+
- Internet Explorer 11: the build targets ES2019 and needs dynamic `import()` (Chrome 73, Safari 12.1, Firefox 67 and later).
|
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ Askly is an **embeddable AI support chat widget** for React and plain HTML. Drop
|
|
|
13
13
|
|
|
14
14
|
- 🤖 **AI-powered answers** — resolves customer questions automatically from your knowledge base.
|
|
15
15
|
- 📚 **RAG (docs-grounded)** — replies grounded in your own documentation, not hallucinated.
|
|
16
|
-
- 🎙️ **Voice
|
|
16
|
+
- 🎙️ **Voice input** — customers can speak their message; it is transcribed and sent as text.
|
|
17
17
|
- 🙋 **Human handoff** — one-click escalation to a live agent when needed.
|
|
18
18
|
- ⚛️ **React + CDN** — use as an npm module, or a single `<script>` tag on any site (no React required).
|
|
19
19
|
- 🎨 **Fully themeable** — colors, logo, position, and copy configured in the portal.
|
|
@@ -22,14 +22,30 @@ Askly is an **embeddable AI support chat widget** for React and plain HTML. Drop
|
|
|
22
22
|
|
|
23
23
|
### Script tag (any website)
|
|
24
24
|
|
|
25
|
-
One line, before `</body
|
|
25
|
+
One line, before `</body>`:
|
|
26
26
|
|
|
27
27
|
```html
|
|
28
|
-
<script src="https://unpkg.com/@askly/widget@
|
|
28
|
+
<script src="https://unpkg.com/@askly/widget@3/dist/widget.js" data-app-id="YOUR_APP_ID" async></script>
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
That's the whole install. Your branding — name, logo, theme, welcome message — loads automatically from your Askly portal settings.
|
|
32
32
|
|
|
33
|
+
What the page downloads is a loader of under 5 KB. It paints the launcher at once and fetches the
|
|
34
|
+
widget itself (about 40 KB, from the same place as the loader) only when it is about to be
|
|
35
|
+
needed: when the visitor moves to the launcher, when the greeting bubble is due, when a
|
|
36
|
+
conversation from an earlier visit may have replies waiting, or when your code calls the API.
|
|
37
|
+
Voice input and the help centre are fetched separately, the first time they are used.
|
|
38
|
+
|
|
39
|
+
The widget renders inside a Shadow DOM, so your site's CSS cannot affect it and its CSS cannot
|
|
40
|
+
affect your site. Pin a major version (`@3`) rather than `@latest`, so a future major release
|
|
41
|
+
cannot change your embed without you.
|
|
42
|
+
|
|
43
|
+
You can also place it as an element, with the same attributes minus the `data-` prefix:
|
|
44
|
+
|
|
45
|
+
```html
|
|
46
|
+
<askly-chat app-id="YOUR_APP_ID" position="left"></askly-chat>
|
|
47
|
+
```
|
|
48
|
+
|
|
33
49
|
### NPM (React / bundlers)
|
|
34
50
|
|
|
35
51
|
```bash
|
|
@@ -42,7 +58,62 @@ import Askly from '@askly/widget';
|
|
|
42
58
|
Askly.init({ appId: "YOUR_APP_ID" });
|
|
43
59
|
```
|
|
44
60
|
|
|
45
|
-
The
|
|
61
|
+
The package has no dependencies and no React peer dependency. What you import is the same small
|
|
62
|
+
loader as the script tag; the widget's code is fetched from the CDN, for exactly the package
|
|
63
|
+
version you installed, when it is first needed. It adds about 3 KB to your bundle.
|
|
64
|
+
|
|
65
|
+
To serve the widget from your own origin instead, copy `node_modules/@askly/widget/dist/app/` to
|
|
66
|
+
your static assets and point the loader at it:
|
|
67
|
+
|
|
68
|
+
```javascript
|
|
69
|
+
Askly.init({ appId: "YOUR_APP_ID", appUrl: "/static/askly/app/askly-app.js" });
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### React
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
npm install @askly/widget @askly/react
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
```tsx
|
|
79
|
+
import { AsklyProvider, useAskly } from "@askly/react";
|
|
80
|
+
|
|
81
|
+
<AsklyProvider appId="YOUR_APP_ID">
|
|
82
|
+
<App />
|
|
83
|
+
</AsklyProvider>
|
|
84
|
+
|
|
85
|
+
// anywhere below the provider
|
|
86
|
+
const askly = useAskly();
|
|
87
|
+
askly.showNewMessage("Hi, I have a question about billing.");
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
`AsklyProvider` initialises the widget on mount and removes it on unmount; `useAsklyEvent(name, handler)`
|
|
91
|
+
and `useAsklyIdentity(identity)` wrap `Askly.on()` and `Askly.identify()`.
|
|
92
|
+
|
|
93
|
+
### Theming from your page
|
|
94
|
+
|
|
95
|
+
Colours come from the portal. If you need to adjust them per page, set these two custom
|
|
96
|
+
properties on the widget's host elements; they are the one thing that crosses into the widget
|
|
97
|
+
and they win over the portal's values:
|
|
98
|
+
|
|
99
|
+
```css
|
|
100
|
+
askly-widget, askly-loader { --askly-brand: #0f766e; --askly-font-family: "Inter", sans-serif; }
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
(`askly-loader` is the launcher shown before the widget's code has been fetched.)
|
|
104
|
+
|
|
105
|
+
### Content Security Policy
|
|
106
|
+
|
|
107
|
+
With a strict CSP:
|
|
108
|
+
|
|
109
|
+
- `script-src` must allow the origin the widget is loaded from (the loader and the widget come
|
|
110
|
+
from the same place). A nonce on the `<script>` tag alone is not enough, because the widget's
|
|
111
|
+
code is a module the loader imports: add `'strict-dynamic'`, or list the origin.
|
|
112
|
+
- `connect-src` must include the Askly API, and `media-src` needs `blob:` if voice input is on.
|
|
113
|
+
- With Cloudflare Turnstile on, `script-src` and `frame-src` must allow `https://challenges.cloudflare.com`.
|
|
114
|
+
- Pages that enforce Trusted Types must allow the policy name `askly` (`trusted-types askly`).
|
|
115
|
+
- Styles use constructed stylesheets, so `style-src` needs no `'unsafe-inline'` in current
|
|
116
|
+
browsers. Safari and iOS before 16.4 fall back to a `<style>` element, which does need it.
|
|
46
117
|
|
|
47
118
|
## Quick Start
|
|
48
119
|
|
|
@@ -179,6 +250,48 @@ or a self-hosted server older than this feature) the widget falls back to checki
|
|
|
179
250
|
seconds while the chat is open, as before. If your site sets a Content Security Policy, the Askly
|
|
180
251
|
API origin must be in `connect-src`.
|
|
181
252
|
|
|
253
|
+
### Voice input
|
|
254
|
+
|
|
255
|
+
Visitors can press the microphone button, speak, and have their words turned into a message. The
|
|
256
|
+
recording stops when they press done, after about two seconds of silence, or at 60 seconds;
|
|
257
|
+
Escape cancels it. It works in current Chrome, Edge, Safari and Firefox.
|
|
258
|
+
|
|
259
|
+
The clip is sent to the Askly server, transcribed there in the language spoken, and not stored.
|
|
260
|
+
The browser's own speech recognition is not used, so the audio goes to Askly and nowhere else.
|
|
261
|
+
|
|
262
|
+
| Mode | What happens to the transcript |
|
|
263
|
+
| :--- | :--- |
|
|
264
|
+
| `"review"` | It is placed in the message box for the visitor to check, edit and send. |
|
|
265
|
+
| `"auto-send"` | It is sent straight away. |
|
|
266
|
+
| off | No microphone button. |
|
|
267
|
+
|
|
268
|
+
Set the mode in the portal under **Widget**. An embed can narrow it, never widen it:
|
|
269
|
+
|
|
270
|
+
```javascript
|
|
271
|
+
Askly.init({ appId: "…", voiceInput: "auto-send" }); // or "review", or false to turn it off here
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
```html
|
|
275
|
+
<script src="…/widget.js" data-app-id="…" data-voice-input="review" async></script>
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Each organization has a monthly allowance of transcription minutes, shown in the portal. When it
|
|
279
|
+
is used up, or a visitor records too many clips in a short time, the visitor is asked to type
|
|
280
|
+
instead.
|
|
281
|
+
|
|
282
|
+
Requirements on the host page:
|
|
283
|
+
|
|
284
|
+
- It must be served over **https** (browsers refuse the microphone otherwise).
|
|
285
|
+
- If you send a `Permissions-Policy` header, it must allow `microphone` for your own origin, and
|
|
286
|
+
an iframe that contains the widget needs `allow="microphone"`.
|
|
287
|
+
- With a Content Security Policy, the Askly API origin must be in `connect-src`.
|
|
288
|
+
|
|
289
|
+
`enableVoiceChat` is the older on/off switch: `false` still turns voice input off for the embed,
|
|
290
|
+
`true` leaves the choice to the portal. Voice input needs a server that offers transcription; with
|
|
291
|
+
an older self-hosted server the microphone button is not shown. The
|
|
292
|
+
`readAloud` option, which spoke replies with the browser's speech synthesis, was removed in
|
|
293
|
+
2.11.0 and is ignored.
|
|
294
|
+
|
|
182
295
|
### Asking visitors for their email
|
|
183
296
|
|
|
184
297
|
Anonymous visitors can't be replied to once they close the tab — the answer just waits in a widget
|
|
@@ -243,7 +356,8 @@ straight after `Askly.init()` are held and carried out once the widget has mount
|
|
|
243
356
|
| `Askly.showNewMessage(text?)` | Open the chat with the message box focused, optionally pre-filled. Nothing is sent. |
|
|
244
357
|
| `Askly.sendMessage(text)` | Open the chat and send `text` as the visitor. It passes the same checks as a typed message; if one is pending (email required, security check) it waits in the message box. |
|
|
245
358
|
| `Askly.showArticle(id)` | Open a help article by id. |
|
|
246
|
-
| `Askly.
|
|
359
|
+
| `Askly.startVoiceInput()` / `Askly.stopVoiceInput()` | Open the chat and start recording a voice message; finish the recording and transcribe it. The browser may ask the visitor for the microphone. |
|
|
360
|
+
| `Askly.update(config)` | Change display settings without re-initialising, e.g. `{ themeColor, theme, organizationName, welcomeMessage, buttonShape }`. `voiceInput` can be narrowed here too. |
|
|
247
361
|
| `Askly.isOpen()` | `true` while the panel is open. |
|
|
248
362
|
| `Askly.getUnreadCount()` | Agent replies the visitor has not seen (the launcher badge). |
|
|
249
363
|
| `Askly.getVisitorId()` | This browser's anonymous visitor id (`""` before mount). |
|
|
@@ -272,6 +386,10 @@ affect the widget.
|
|
|
272
386
|
| `lead:captured` | none | The visitor left an email address. |
|
|
273
387
|
| `identify:success` / `identify:error` | `{ userId, status? }` | The server accepted or refused `identify()`. |
|
|
274
388
|
| `greeting:shown` / `greeting:clicked` / `greeting:dismissed` | none | Greeting bubble activity. |
|
|
389
|
+
| `voice:start` | none | Voice input started recording. |
|
|
390
|
+
| `voice:stop` | `{ durationMs }` | Recording ended and the clip is being transcribed. |
|
|
391
|
+
| `voice:transcript` | `{ text, language? }` | The transcript arrived, before it is placed in the message box or sent. |
|
|
392
|
+
| `voice:error` | `{ code }` | Voice input failed: `insecure`, `unsupported`, `denied`, `no-microphone`, `no-speech`, `no-audio`, `limit`, `disabled`, `network` or `failed`. |
|
|
275
393
|
| `error` | `{ message, status? }` | A message could not be sent. |
|
|
276
394
|
|
|
277
395
|
```javascript
|
|
@@ -326,11 +444,24 @@ npm install
|
|
|
326
444
|
npm run build
|
|
327
445
|
```
|
|
328
446
|
|
|
447
|
+
`npm run build` produces:
|
|
448
|
+
|
|
449
|
+
| File | What |
|
|
450
|
+
| :--- | :--- |
|
|
451
|
+
| `dist/widget.js` (= `dist/loader.js`) | The script-tag loader. |
|
|
452
|
+
| `dist/app/askly-app.js` | The widget, an ES module the loader imports; `dist/app/*-[hash].js` are its lazy chunks. |
|
|
453
|
+
| `dist/index.esm.js`, `dist/index.umd.js` | The npm entry (the loader as a module). |
|
|
454
|
+
| `dist/types/` | Type declarations. |
|
|
455
|
+
| `packages/react/dist/` | `@askly/react`. |
|
|
456
|
+
|
|
457
|
+
`npm run size` checks the budgets: 5 KB for the loader, 42 KB for the app (gzip).
|
|
458
|
+
|
|
329
459
|
### Releasing
|
|
330
460
|
|
|
331
461
|
```bash
|
|
332
462
|
npm version <patch|minor|major>
|
|
333
463
|
npm publish # prepublishOnly rebuilds dist/
|
|
464
|
+
cd packages/react && npm version <same> && npm publish
|
|
334
465
|
```
|
|
335
466
|
|
|
336
467
|
**Publishing is not the last step.** The tenant portal bundles this package
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{g as e,j as t,t as a,a1 as l,a2 as c,C as s,b as n,B as r}from"./shared-C0Z29aNi.js";function i(i){const{allArticles:o,articleFeedback:m,articlesLoading:d,handleSearchChange:p,handleSelectArticle:u,organizationLogo:h,organizationName:E,searchError:N,searchLoading:f,searchQuery:y,searchResults:g,selectedArticle:v,selectedCollection:k,setActiveTab:b,setArticleFeedback:x,setInput:w,setSelectedArticle:C,setSelectedCollection:S,themeColor:z}=i;return e.createElement("div",{className:"chat-body help-layout"},v?e.createElement("div",{className:"help-article-reader"},e.createElement("div",{className:"article-breadcrumb"},e.createElement("button",{className:"article-breadcrumb-link",onClick:()=>{C(null),S(null)}},"Help Center"),e.createElement("span",null,"/"),e.createElement("span",{className:"article-breadcrumb-type"},v.document_type||"Guide")),e.createElement("button",{className:"help-back-btn",onClick:()=>C(null),style:{marginBottom:14}},e.createElement(t,{size:16}),e.createElement("span",null,"Back to articles")),e.createElement("div",{className:"help-article-heading"},v.title),e.createElement("div",{className:"article-author-bar"},e.createElement("img",{src:h||"https://askly.co.in/logo-small.png",alt:E,className:"article-author-avatar"}),e.createElement("div",{className:"article-author-text"},e.createElement("span",{className:"article-author-name"},"Written by ",E," Support Team"),e.createElement("span",{className:"article-author-meta"},"Updated recently • ⏱ ",Math.max(1,Math.ceil((v.content||"").split(/\s+/).length/180))," min read"))),e.createElement("div",{className:"help-article-body",dangerouslySetInnerHTML:{__html:a(l(v.content))}}),e.createElement("div",{className:"article-feedback"},e.createElement("div",{className:"article-feedback-title"},"Did this answer your question?"),m[v.id]?e.createElement("div",{className:"article-feedback-thanks"},"🎉 Thank you for your feedback!"):e.createElement("div",{className:"article-feedback-options"},e.createElement("button",{className:"article-feedback-btn",onClick:()=>x(e=>({...e,[v.id]:"yes"}))},"😃 Yes"),e.createElement("button",{className:"article-feedback-btn",onClick:()=>x(e=>({...e,[v.id]:"somewhat"}))},"😐 Somewhat"),e.createElement("button",{className:"article-feedback-btn",onClick:()=>x(e=>({...e,[v.id]:"no"}))},"😞 No")),e.createElement("button",{className:"article-handoff",onClick:()=>{w(`I have a question about article "${v.title}": `),b("messages")}},e.createElement("div",{className:"article-handoff-text"},e.createElement("span",{className:"article-handoff-title"},e.createElement(c,{size:13})," Still have questions?"),e.createElement("span",{className:"article-handoff-desc"},"Ask our AI Agent for instant answers")),e.createElement(s,{size:16,className:"article-handoff-chevron"})))):e.createElement("div",null,e.createElement("div",{className:"home-search-input-wrapper",style:{marginBottom:14}},e.createElement(n,{size:14,className:"search-icon-svg"}),e.createElement("input",{type:"text",value:y,onChange:p,placeholder:"Search for articles..."}),f&&e.createElement("span",{className:"search-loader"})),k&&e.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:12}},e.createElement("button",{onClick:()=>S(null),style:{all:"unset",cursor:"pointer",fontSize:12,color:z,fontWeight:500,display:"flex",alignItems:"center",gap:4}},e.createElement(t,{size:14}),e.createElement("span",null,"All Collections")),e.createElement("span",{style:{fontSize:12,color:"var(--text-4)"}},"/"),e.createElement("span",{style:{fontSize:12,fontWeight:600,color:"var(--text-1)",textTransform:"capitalize"}},k)),e.createElement("div",{className:"help-articles-list"},""===y.trim()?k?(()=>{const t=o.filter(e=>(e.document_type||"guide").toLowerCase()===k.toLowerCase());return e.createElement("div",{style:{display:"flex",flexDirection:"column",gap:10,width:"100%"}},e.createElement("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:"0.5px"}},k," Articles (",t.length,")"),e.createElement("div",{style:{display:"flex",flexDirection:"column",gap:8}},t.map(t=>e.createElement("button",{key:t.id,className:"help-article-row",onClick:()=>u(t)},e.createElement("div",{style:{display:"flex",flexDirection:"column",gap:3,alignItems:"flex-start",textAlign:"left"}},e.createElement("span",{className:"article-row-title"},t.title),t.content&&e.createElement("span",{className:"article-row-preview"},t.content.replace(/[\n\r]+/g," ").slice(0,85),"...")),e.createElement(s,{size:14,className:"article-row-chevron"})))))})():e.createElement("div",{className:"help-collections"},(()=>{if(d)return[0,1,2].map(t=>e.createElement("div",{key:t,className:"help-collection-card is-skeleton"},e.createElement("div",{className:"help-collection-left"},e.createElement("span",{className:"askly-skeleton help-collection-icon-skel"}),e.createElement("div",{className:"help-collection-text"},e.createElement("span",{className:"askly-skeleton askly-skeleton-line",style:{width:"60%"}}),e.createElement("span",{className:"askly-skeleton askly-skeleton-line",style:{width:"90%"}})))));const t={};o.forEach(e=>{const a=(e.document_type||"guide").toLowerCase();t[a]||(t[a]=[]),t[a].push(e)});const a=Object.keys(t);return 0===a.length?e.createElement("div",{className:"askly-empty-state"},e.createElement("div",{className:"askly-empty-icon"},e.createElement(r,{size:22})),e.createElement("div",{className:"askly-empty-title"},"Help Documentation"),e.createElement("div",{className:"askly-empty-desc"},"Search above to fetch instant solutions from our knowledge base.")):a.map(a=>{const l=t[a],c="guide"===a?"Guides & Tutorials":"faq"===a?"Frequently Asked Questions":"troubleshooting"===a?"Troubleshooting & Support":"Rules & Documentation",n="guide"===a?"Setup walkthroughs, rules, and getting started guides":"faq"===a?"Quick answers to common account and service questions":"troubleshooting"===a?"Step-by-step solutions for technical issues":"Official terms, rules, and policy documentation";return e.createElement("button",{key:a,className:"help-collection-card",onClick:()=>S(a)},e.createElement("div",{className:"help-collection-left"},e.createElement("div",{className:"help-collection-icon"},e.createElement(r,{size:16})),e.createElement("div",{className:"help-collection-text"},e.createElement("div",{className:"help-collection-title"},c),e.createElement("div",{className:"help-collection-desc"},n),e.createElement("div",{className:"help-collection-count"},l.length," ",1===l.length?"article":"articles"))),e.createElement(s,{size:16,className:"help-collection-chevron"}))})})()):N?e.createElement("div",{className:"no-search-results"},N):0!==g.length||f?g.map(t=>e.createElement("button",{key:t.id,className:"help-article-row",onClick:()=>u(t)},e.createElement("div",{style:{display:"flex",flexDirection:"column",gap:3,alignItems:"flex-start"}},e.createElement("span",{className:"article-row-title"},t.title),e.createElement("span",{className:"article-row-preview"},t.content.slice(0,80),"...")),e.createElement(s,{size:14,className:"article-row-chevron"}))):e.createElement("div",{className:"no-search-results"},'No articles matching "',y,'"'))))}export{i as HelpTab};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{p as e,q as a,g as t,X as n}from"./shared-C0Z29aNi.js";function s({phase:s,meterRef:c,maxMs:l,onStop:r,onCancel:i}){const[o,m]=e([]),[p,u]=e(0);a(()=>{if("recording"!==s)return;const e=setInterval(()=>{const{level:e,elapsedMs:a}=c.current;u(a),m(a=>(a.length>=80?a.slice(1):a).concat(e))},100);return()=>clearInterval(e)},[s]);const b="recording"===s,d=l-p,v="transcribing"===s?"Transcribing…":b?"Listening…":"Waiting for the microphone…";return t.createElement("div",{className:`askly-voice ${s}`},t.createElement("button",{type:"button",className:"askly-voice-btn",onClick:i,title:"Cancel","aria-label":"Cancel voice input"},t.createElement(n,{size:20})),t.createElement("span",{className:"askly-voice-meter","aria-hidden":"true"},o.map((e,a)=>t.createElement("i",{key:a,style:{height:`${Math.round(2+22*Math.min(1,e))}px`}}))),t.createElement("span",{className:"askly-voice-status",role:"status"},v),b&&d<=1e4&&t.createElement("span",{className:"askly-voice-time"},Math.max(0,Math.ceil(d/1e3)),"s"),b?t.createElement("button",{type:"button",className:"askly-voice-btn done",onClick:r,title:"Stop and transcribe","aria-label":"Stop and transcribe"},t.createElement("span",{className:"askly-voice-stop"})):t.createElement("span",{className:"askly-voice-btn done busy","aria-hidden":"true"},t.createElement("span",{className:"askly-voice-spinner"})))}export{s as VoiceRecorder};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{g as e,T as t,s as a,f as r,C as n,a as o,L as s,G as l,X as i,b as c,B as d,c as p,P as u,S as m,M as g,A as h,d as f,z as y,e as x,h as b,i as v,j as k,t as w,k as E,l as N,m as z,n as I,r as S,o as C,p as A,q as T,u as q,W as M,v as j,w as _,x as $,y as D,D as R,E as U,F as O,H as L,_ as P,I as V,J as F,K as H,N as Y,O as B,Q as G,R as J,U as W,V as X,Y as K,Z as Q,$ as Z,a0 as ee}from"./shared-C0Z29aNi.js";function te(e,t=[],a=[]){return t.length>0?t.some(t=>e.startsWith(t)):!(a.length>0)||!a.some(t=>e.startsWith(t))}const ae=[1e3,2e3,5e3,15e3,3e4,6e4];function re(e){let t,a="message";const r=[];for(const n of e.split("\n")){if(!n||":"===n.charAt(0))continue;const e=n.indexOf(":"),o=-1===e?n:n.slice(0,e),s=-1===e?"":n.slice(e+1).replace(/^ /,"");"event"===o?a=s:"id"===o?t=s:"data"===o&&r.push(s)}if(0===r.length)return null;try{return{type:a,id:t,data:JSON.parse(r.join("\n"))}}catch{return null}}const ne="askly_visitor_",oe="askly_scope_",se={};function le(e){var t;try{const t=window.localStorage.getItem(e);if(null!==t)return t}catch{}return null!==(t=se[e])&&void 0!==t?t:null}function ie(e,t){se[e]=t;try{window.localStorage.setItem(e,t)}catch{}}function ce(e){delete se[e];try{window.localStorage.removeItem(e)}catch{}}function de(e,t){const a=ne+(e||"detect"),r=le(a);if(r)return r;if(t&&t!==e){const e=le(ne+t);if(e)return ie(a,e),e}const n=function(){try{if("undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID)return crypto.randomUUID();if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues){const e=crypto.getRandomValues(new Uint8Array(16));e[6]=15&e[6]|64,e[8]=63&e[8]|128;const t=Array.from(e,e=>e.toString(16).padStart(2,"0")).join("");return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}}catch{}return`v-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}();return ie(a,n),n}function pe(e){const t=e||"detect",a=le(oe+t);a&&a!==t&&pe(a),ce(ne+t),ce("askly_threads_"+t);for(const e of Object.keys(se))e.includes(t)&&!e.startsWith(oe)&&delete se[e];try{const e=[];for(let a=0;a<window.localStorage.length;a++){const r=window.localStorage.key(a);r&&r.startsWith(`askly_conversations_${t}`)&&e.push(r)}e.forEach(e=>window.localStorage.removeItem(e))}catch{}}function ue(){return`chat_${Date.now()}_${Math.random().toString(36).slice(2,8)}`}let me=null;const ge=new Set;function he(e){me=e,ge.forEach(t=>{try{t(e)}catch(e){console.error("[Askly] identify listener failed:",e)}})}const fe=new Set;let ye=0;function xe(){return ye}function be(o){const{conversations:s,setActiveChatId:l,startNewChat:i}=o;return e.createElement("div",{className:"conversations-list-container"},e.createElement("div",{className:"conversations-scrollable"},0===s.length&&e.createElement("div",{className:"askly-empty-state"},e.createElement("div",{className:"askly-empty-icon"},e.createElement(t,{size:22})),e.createElement("div",{className:"askly-empty-title"},"No conversations yet"),e.createElement("div",{className:"askly-empty-desc"},"Start a chat and our AI agent & team will help you out.")),s.map((t,o)=>{const i=t.messages[t.messages.length-1],c=i?i.content:"No messages yet",d=t.lastUpdated?new Date(t.lastUpdated):new Date;return e.createElement("button",{key:t.id,className:"conversation-list-item",onClick:()=>l(t.id)},e.createElement("div",{className:"conversation-item-left"},e.createElement("div",{className:"conversation-item-details"},e.createElement("span",{className:"conversation-item-title"},"Chat #",s.length-o),e.createElement("span",{className:"conversation-item-preview"},a(c).slice(0,50)))),e.createElement("div",{className:"conversation-item-right"},e.createElement("span",{className:"conversation-item-time"},r(d)),e.createElement(n,{size:14})))})),e.createElement("button",{className:"start-new-chat-btn",onClick:()=>i()},"Ask a Question"))}function ve(t){const{open:a,setOpen:r,buttonIcon:n,buttonShape:l,buttonStyle:i,launcherUnread:c,resolvedTheme:d,setActiveChatId:p,setActiveTab:u,unreadChatId:m}=t;return e.createElement("div",{className:`askly-chat-button shape-${l} ${a?"open":""}`,"data-askly-theme":d,style:i,onClick:()=>{!a&&m&&(u("messages"),p(m)),r(!a)},title:"Support Center"},a?e.createElement(o,{size:24}):"💬"===n?e.createElement(s,{size:32}):n,!a&&c>0&&e.createElement("span",{className:"askly-launcher-badge",role:"status","aria-label":1===c?"1 new message":`${c} new messages`},c>9?"9+":c))}function ke(t){const{accentVars:a,aiAnswering:r,aiAvatarUrl:n,dismissGreeting:o,faqs:s,greetingText:c,openFromGreeting:d,organizationLogo:p,position:u,resolvedTheme:m}=t;return e.createElement("div",{className:`askly-greeting askly-greeting-${u}`,"data-askly-theme":m,style:a,role:"status"},e.createElement("div",{className:"askly-greeting-card"},e.createElement("button",{type:"button",className:"askly-greeting-body",onClick:()=>d()},(r&&n||p)&&e.createElement("img",{src:r&&n||p,alt:"",className:"askly-greeting-avatar"}),e.createElement("span",{className:"askly-greeting-text"},c)),e.createElement("button",{type:"button",className:"askly-greeting-close",onClick:o,"aria-label":"Dismiss greeting",title:"Dismiss"},e.createElement(i,{size:14}))),s.length>0&&e.createElement("div",{className:"askly-greeting-chips"},s.slice(0,l).map((t,a)=>e.createElement("button",{type:"button",key:a,className:"quick-reply-chip askly-greeting-chip",onClick:()=>d(t.question)},t.question))))}function we(a){const{allArticles:r,articlesLoading:s,expandedFaqIndex:l,faqs:i,handleSearchChange:p,handleSelectArticle:u,organizationLogo:m,organizationName:g,searchError:h,searchLoading:f,searchQuery:y,searchResults:x,setActiveTab:b,setExpandedFaqIndex:v,setInput:k}=a;return e.createElement("div",{className:"chat-body home-layout"},e.createElement("div",{className:"home-hero"},e.createElement("div",{className:"home-hero-brand"},e.createElement("img",{src:m||"https://askly.co.in/logo-small.png",alt:g,className:"home-hero-logo"})),e.createElement("div",{className:"home-hero-title"},"Hello there"),e.createElement("div",{className:"home-hero-subtitle"},"How can we help?")),e.createElement("div",{className:"home-content"},e.createElement("div",{className:"explore-search"},e.createElement(c,{size:16,className:"explore-search-icon"}),e.createElement("input",{type:"text",value:y,onChange:p,placeholder:"Search for help…"}),f&&e.createElement("span",{className:"search-loader"})),""!==y.trim()?e.createElement("div",{className:"explore-search-panel"},h?e.createElement("div",{className:"no-search-results"},h):0!==x.length||f?x.map(t=>e.createElement("button",{key:t.id,className:"search-result-item",onClick:()=>{u(t),b("help")}},e.createElement(d,{size:13,style:{flexShrink:0}}),e.createElement("span",{className:"search-result-title"},t.title),e.createElement(n,{size:14,style:{marginLeft:"auto",flexShrink:0}}))):e.createElement("div",{className:"no-search-results"},'No articles matching "',y,'"')):e.createElement(e.Fragment,null,e.createElement("button",{className:"explore-cta",onClick:()=>b("messages")},e.createElement("span",{className:"explore-cta-orbs","aria-hidden":"true"}),e.createElement("span",{className:"explore-cta-text"},e.createElement("span",{className:"explore-cta-title"},"Ask our AI Agent"),e.createElement("span",{className:"explore-cta-sub"},"Instant answers, 24/7 — or reach the team")),e.createElement("span",{className:"explore-cta-arrow"},e.createElement(n,{size:18}))),e.createElement("div",{className:"explore-tiles"},e.createElement("button",{className:"explore-tile",onClick:()=>b("help")},e.createElement("span",{className:"explore-tile-icon"},e.createElement(d,{size:18})),e.createElement("span",{className:"explore-tile-title"},"Help Center"),e.createElement("span",{className:"explore-tile-sub"},"Guides & docs")),e.createElement("button",{className:"explore-tile",onClick:()=>b("messages")},e.createElement("span",{className:"explore-tile-icon"},e.createElement(t,{size:18})),e.createElement("span",{className:"explore-tile-title"},"Messages"),e.createElement("span",{className:"explore-tile-sub"},"Your conversations"))),i.length>0&&e.createElement("div",{className:"explore-section"},e.createElement("div",{className:"explore-section-head"},e.createElement("span",null,"Popular questions"),e.createElement("span",{className:"explore-section-count"},i.length)),e.createElement("div",{className:"explore-faq-list"},i.map((t,a)=>{const r=l===a;return e.createElement("div",{key:a,className:"explore-faq "+(r?"open":"")},e.createElement("button",{className:"explore-faq-q",onClick:()=>v(r?null:a)},e.createElement("span",null,t.question),e.createElement(o,{size:15,className:"explore-faq-chevron"})),r&&e.createElement("div",{className:"explore-faq-a"},e.createElement("div",null,t.answer),e.createElement("button",{className:"faq-ask-link",onClick:()=>{k(t.question),b("messages")}},e.createElement("span",null,"Ask AI Agent about this"),e.createElement(n,{size:12}))))}))),(s||r.length>0)&&e.createElement("div",{className:"explore-section"},e.createElement("div",{className:"explore-section-head"},e.createElement("span",null,"Recommended reading")),e.createElement("div",{className:"recommended-articles-list"},s?[0,1,2].map(t=>e.createElement("div",{key:t,className:"rec-article-skeleton"},e.createElement("span",{className:"askly-skeleton askly-skeleton-chip"}),e.createElement("span",{className:"askly-skeleton askly-skeleton-line"}))):r.slice(0,3).map(t=>e.createElement("button",{key:t.id,className:"rec-article-row",onClick:()=>{u(t),b("help")}},e.createElement(d,{size:13,className:"rec-article-icon"}),e.createElement("span",{className:"rec-article-title"},t.title),e.createElement(n,{size:14,className:"rec-article-chevron"}))))))))}function Ee(a){const{activeTab:r,setActiveTab:n,setSelectedArticle:o}=a;return e.createElement("div",{className:"chat-nav-tabs"},e.createElement("button",{className:"nav-tab-btn "+("explore"===r?"active":""),onClick:()=>{n("explore"),o(null)}},e.createElement("span",{className:"nav-tab-icon"},e.createElement(c,{active:"explore"===r})),e.createElement("span",null,"Explore")),e.createElement("button",{className:"nav-tab-btn "+("messages"===r?"active":""),onClick:()=>n("messages")},e.createElement("span",{className:"nav-tab-icon"},e.createElement(t,{active:"messages"===r})),e.createElement("span",null,"Messages")),e.createElement("button",{className:"nav-tab-btn "+("help"===r?"active":""),onClick:()=>n("help")},e.createElement("span",{className:"nav-tab-icon"},e.createElement(p,{active:"help"===r})),e.createElement("span",null,"Help")))}const Ne=y(()=>import("./VoiceRecorder-CMc1Bz14.js").then(e=>({default:e.VoiceRecorder})).catch(()=>({default:ze})));function ze({onCancel:t}){return e.useEffect(()=>{t()},[]),null}const Ie=["😀","😃","😄","😁","😆","😅","😂","🤣","😊","😇","🙂","🙃","😉","😌","😍","🥰","😘","😗","😙","😚","😋","😛","😝","😜","🤪","🤠","🥳","😎","🤓","🧐","👍","👎","👌","✌️","🤞","🤟","🤘","🤙","👋","👏"];function Se(t){const{cancelVoiceInput:a,fileInputRef:r,handleEmojiClick:n,handleFileChange:o,handleFileUploadClick:s,input:l,inputRef:i,isTyping:c,leadRequired:d,placeholderText:p,sendMessage:y,setInput:x,setShowEmojiPicker:b,showEmojiPicker:v,startVoiceInput:k,stopVoiceInput:w,turnstileBlocked:E,uploadingFile:N,voiceInputEnabled:z,voiceMaxMs:I,voiceMeterRef:S,voicePhase:C}=t,A="idle"!==C,T=c||N||d||E||A;return e.createElement("div",{className:"chat-footer "+(A?"voice-active":"")},A&&e.createElement(f,{fallback:e.createElement("div",{className:"askly-voice"})},e.createElement(Ne,{phase:C,meterRef:S,maxMs:I,onStop:w,onCancel:a})),e.createElement("div",{className:"composer-input-row",style:A?{display:"none"}:void 0},e.createElement("textarea",{ref:i,rows:1,value:l,onChange:e=>x(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||229===e.nativeEvent.keyCode||(e.preventDefault(),y())},"aria-label":"Message",placeholder:d?"Add your email above to continue…":E?"Verify security check to chat...":p,disabled:T})),e.createElement("input",{type:"file",ref:r,style:{display:"none"},onChange:o}),e.createElement("div",{className:"composer-actions-row",style:A?{display:"none"}:void 0},e.createElement("div",{className:"composer-actions-left"},e.createElement("button",{className:"footer-action-btn",onClick:s,disabled:T,title:"Upload attachment (Max 10MB)"},e.createElement(u,{size:18})),e.createElement("button",{className:"footer-action-btn "+(v?"active":""),onClick:()=>b(!v),disabled:T,title:"Insert emoji"},e.createElement(m,{size:18})),z&&e.createElement("button",{className:"voice-btn "+("recording"===C?"listening":""),onClick:"recording"===C?w:k,title:"recording"===C?"Finish recording":"Voice input","aria-label":"recording"===C?"Finish recording":"Voice input","aria-pressed":"recording"===C,disabled:"recording"!==C&&T},e.createElement(g,{size:18}))),e.createElement("button",{onClick:()=>y(),disabled:T||!l.trim(),className:"send-btn"},e.createElement(h,{size:18}))),v&&e.createElement("div",{className:"askly-emoji-picker"},Ie.map(t=>e.createElement("button",{key:t,onClick:()=>n(t),className:"emoji-item"},t))))}function Ce(t){const{activeChatId:a,activeTab:r,aiAnswering:n,aiAvatarUrl:o,aiName:s,headerStyle:l,isExpanded:i,organizationLogo:c,organizationName:d,setActiveChatId:p,setIsExpanded:u,setOpen:m}=t,g=e.createElement("div",{style:{display:"flex",gap:8,alignItems:"center"}},e.createElement("button",{className:"header-action-btn",onClick:()=>u(!i),title:i?"Collapse window":"Expand window"},i?e.createElement(b,{size:16}):e.createElement(v,{size:16})),e.createElement("button",{className:"header-action-btn",onClick:()=>m(!1)},e.createElement(x,{size:18})));if("explore"===r)return e.createElement("div",{className:"chat-header chat-header-floating"},e.createElement("div",{className:"header-content"}),g);if("messages"===r&&null!==a)return e.createElement("div",{className:"chat-header",style:l},e.createElement("div",{className:"header-content"},e.createElement("button",{className:"header-back-arrow-btn",onClick:()=>p(null),title:"Back to conversations"},e.createElement(k,{size:20})),(()=>{const t=n&&o||c,a=n&&s||d;return e.createElement(e.Fragment,null,e.createElement("img",{src:t||"https://askly.co.in/logo-small.png",alt:a,className:"header-avatar "+(t?"":"is-default-logo")}),n&&s&&e.createElement("div",{className:"header-title"},s))})()),g);const h="help"===r?"Help Center":"Messages";return e.createElement("div",{className:"chat-header",style:l},e.createElement("div",{className:"header-content"},e.createElement("div",{className:"header-title header-title-lg"},h)),g)}function Ae(e){var t;return"markdown"===(null!==(t=e.format)&&void 0!==t?t:"agent"===e.role?"markdown":"text")?S(e.content):C(e.content)}const Te=e.memo(function(t){const{copiedMsgIndex:a,messages:n,msgReactions:o,setCopiedMsgIndex:s,setMsgReactions:l,showTimestamp:i}=t;return e.createElement(e.Fragment,null,n.map((t,c)=>{const d="agent"===t.role;d&&(0===c||n[c-1].role);const p=o[c];return e.createElement("div",{key:c,className:`msg-wrapper ${t.role}`},e.createElement("div",{className:"msg-column"},e.createElement("div",{className:`msg ${t.role}`},e.createElement("div",{className:"msg-content",dangerouslySetInnerHTML:{__html:w(Ae(t))}}),i&&t.timestamp&&e.createElement("div",{className:"msg-time"},r(t.timestamp))),d&&t.content&&e.createElement("div",{className:"msg-reactions"},e.createElement("button",{className:"msg-reaction-btn "+("up"===p?"active":""),title:"Helpful",onClick:()=>l(e=>({...e,[c]:"up"===e[c]?void 0:"up"}))},e.createElement(E,{size:13})),e.createElement("button",{className:"msg-reaction-btn "+("down"===p?"active":""),title:"Not helpful",onClick:()=>l(e=>({...e,[c]:"down"===e[c]?void 0:"down"}))},e.createElement(N,{size:13})),e.createElement("button",{className:"msg-reaction-btn",title:a===c?"Copied":"Copy",onClick:()=>{var e;try{null===(e=navigator.clipboard)||void 0===e||e.writeText(t.content)}catch(e){}s(c),setTimeout(()=>s(e=>e===c?null:e),1500)}},a===c?e.createElement(z,{size:13}):e.createElement(I,{size:13})))))}))});function qe(){return e.createElement("div",{className:"chat-terms-notice"},e.createElement("span",null,"By chatting, you agree to our"," ",e.createElement("a",{href:"https://askly.co.in/terms",target:"_blank",rel:"noopener noreferrer",className:"askly-terms-link"},"Terms")),e.createElement("span",{className:"chat-terms-divider"},"·"),e.createElement("span",null,"Powered by"," ",e.createElement("a",{href:"https://askly.co.in",target:"_blank",rel:"noopener noreferrer",className:"askly-powered-link"},"Askly")))}const Me=y(()=>import("./HelpTab-jjw4cF1_.js").then(e=>({default:e.HelpTab})).catch(()=>({default:je})));function je(){return e.createElement("div",{className:"askly-lead-error askly-composer-notice",role:"alert"},"The help centre couldn't be loaded. Check your connection and try again.")}const _e=({orgId:t,organizationName:a="Askly",themeColor:r="#0f172a",theme:n="auto",position:s="right",orgServerRoute:l,enableVoiceChat:i,voiceInput:c,welcomeMessage:d="Hi! How can I help you today?",placeholderText:p="Type your message...",organizationLogo:u,buttonIcon:m="💬",buttonShape:g="round",autoOpen:h=!1,greeting:y,showTimestamp:x=!1,soundEnabled:b=!1,soundVolume:v=.4,poweredBy:k="Team Askly",userId:w,timestamp:E,signature:N,turnstileSiteKey:z,excludePaths:I=[],includePaths:S=[],configOverride:C,resetGeneration:J,greetingStartedAt:W,onMessageSent:X,onMessageReceived:K,onChatOpened:Q,onChatClosed:Z,onEscalation:ee})=>{var ne,se,ce;const[he,ye]=A("undefined"!=typeof window?window.location.pathname:""),[Ne,ze]=A(a),[Ie,Ae]=A(u),[je,_e]=A(r),[$e,De]=A(n),[Re,Ue]=A(g),[Oe,Le]=A("off"),[Pe,Ve]=A(V(c)||(!1===i?"off":void 0)),[Fe,He]=A(null),[Ye,Be]=A(null),Ge="object"==typeof y&&null!==y?y:null,[Je,We]=A(!0),[Xe,Ke]=A(null),[Qe,Ze]=A(G),[et,tt]=A(!1),[at,rt]=A(!0),[nt,ot]=A("smart"),[st,lt]=A("Leave your email and we'll reply there if you've gone."),[it,ct]=A(!1),[dt,pt]=A(!1),[ut,mt]=A(!1),[gt,ht]=A(!("undefined"==typeof window||!window.matchMedia)&&window.matchMedia("(prefers-color-scheme: dark)").matches);T(()=>{if("undefined"==typeof window||!window.matchMedia)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),t=e=>ht(e.matches);return e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[]);const ft="auto"===$e?gt?"dark":"light":$e,[yt,xt]=A(d),[bt,vt]=A(t),kt=e=>{if(!e)return;var a,r;e.orgId&&(vt(e.orgId),a=t||"detect",(r=e.orgId)&&r!==a&&le(oe+a)!==r&&ie(oe+a,r),jr.current=!0),e.organizationName&&ze(e.organizationName),e.logoUrl&&Ae(e.logoUrl),e.themeColor&&_e(e.themeColor),"light"!==e.theme&&"dark"!==e.theme&&"auto"!==e.theme||De(e.theme),"round"!==e.buttonShape&&"square"!==e.buttonShape||Ue(e.buttonShape);const n=V(e.voiceInput);if(n&&Le(n),void 0!==e.ai_name&&He(e.ai_name||null),void 0!==e.ai_avatar_url&&Be(e.ai_avatar_url||null),void 0!==e.greetingEnabled&&We(!!e.greetingEnabled),void 0!==e.greetingMessage&&Ke("string"==typeof e.greetingMessage&&e.greetingMessage.trim()?e.greetingMessage:null),"number"==typeof e.greetingDelayMs&&e.greetingDelayMs>=0&&Ze(e.greetingDelayMs),void 0!==e.ai_answering&&rt(e.ai_answering),e.leadCapture&&ot(e.leadCapture),e.leadCapturePrompt&<(e.leadCapturePrompt),e.welcomeMessage&&xt(e.welcomeMessage),e.faqs&&Array.isArray(e.faqs)&&At(e.faqs),e.featured_articles&&Array.isArray(e.featured_articles)){const t=e.featured_articles.map((e,t)=>({id:e.id||`featured_${t}`,title:e.title||"Featured Article",content:e.content||"",document_type:e.document_type||"guide",score:1}));jt(t)}};T(()=>{const e=`askly_config_${t||"detect"}`;let a=null;try{a="undefined"!=typeof window?window.sessionStorage:null}catch{a=null}if(a)try{const t=a.getItem(e);t&&(kt(JSON.parse(t)),tt(!0))}catch{}C&&kt(C);(async()=>{try{const r=l.replace(/\/messages\/widget$/,"")+"/messages/widget/config",n=t?`?org_id=${t}`:"",o=await fetch(`${r}${n}`);if(o.ok){const t=await o.json();if(kt(t),a)try{a.setItem(e,JSON.stringify(t))}catch{}C&&kt(C),kt(Fn.current),tt(!0)}}catch(e){console.warn("[Askly] Failed to load remote widget config, using local properties:",e)}finally{Pn(!0)}})()},[t,l,a,r,i,d,C]),T(()=>{if("undefined"==typeof window)return;const e=()=>{ye(window.location.pathname)},t=window.history.pushState,a=window.history.replaceState;let r=!0;const n=function(...a){t.apply(this,a),r&&e()},o=function(...t){a.apply(this,t),r&&e()};return window.history.pushState=n,window.history.replaceState=o,window.addEventListener("popstate",e),()=>{r=!1,window.removeEventListener("popstate",e),window.history.pushState===n&&(window.history.pushState=t),window.history.replaceState===o&&(window.history.replaceState=a)}},[]);const[wt,Et]=A(h),[Nt,zt]=A("messages");T(()=>{const e=()=>Et(!0),t=()=>Et(!1),a=()=>Et(e=>!e);return window.addEventListener("askly:open",e),window.addEventListener("askly:close",t),window.addEventListener("askly:toggle",a),()=>{window.removeEventListener("askly:open",e),window.removeEventListener("askly:close",t),window.removeEventListener("askly:toggle",a)}},[]);const[It,St]=A(!1),[Ct,At]=A([]),[Tt,qt]=A(null),[Mt,jt]=A([]),[_t,$t]=A("all"),[Dt,Rt]=A({}),[Ut,Ot]=A(null),Lt=te(he,S,I),[Pt,Vt]=A(0),Ft=bt||"detect",Ht=q(void 0),Yt=q(!1),Bt=e.useMemo(()=>{if("undefined"==typeof window)return"";Yt.current&&Ht.current&&Ht.current!==Ft&&(Yt.current=!1,pe(Ft));const e=de(Ft,Ht.current);return Ht.current=Ft,e},[Ft,Pt]),Gt=q(Bt);Gt.current=Bt;const[Jt,Wt]=A(!1),Xt=q(bt);Xt.current=bt;const Kt=q(l);Kt.current=l;const Qt=e=>Kt.current.replace(/\/messages\/widget$/,"")+"/messages/widget"+e,Zt=q(null);Zt.current||(Zt.current=new M({api:Qt,getOrganizationId:()=>Xt.current,getVisitorId:()=>Gt.current,onChange:()=>Wt(!!Zt.current&&Zt.current.human)}));const ea=Zt.current;T(()=>()=>ea.clear(),[Bt]);const[ta,aa]=A(null),[ra,na]=A(!0),oa=ra?w:void 0,sa=ra?N:void 0,la=ra?E:void 0,ia=(null==ta?void 0:ta.userId)||oa,ca=`askly_conversations_${Ft}_${ia||Bt||"guest"}`,[da,pa]=A(()=>"undefined"!=typeof window?j(ca):[]),ua=q(da);ua.current=da;const ma=q(Ft),ga=q(ia||Bt);T(()=>{if("undefined"==typeof window)return;const e=j(ca),t=ia||Bt,a=ma.current!==Ft,r=ga.current===t;ma.current=Ft,ga.current=t,a&&r&&0===e.length&&ua.current.length>0||pa(e)},[ca]);const[ha,fa]=A(null),ya=q(ha);ya.current=ha;const[xa,ba]=A([]),[va,ka]=A(""),[wa,Ea]=A([]),Na=wa.includes(ha||"primary"),[za,Ia]=A(null),Sa="off"===Oe||"off"===Pe?"off":Pe||Oe,[Ca,Aa]=A("idle"),[Ta,qa]=A(null),[Ma,ja]=A(!1),_a=q({level:0,elapsedMs:0}),$a=q(null),Da=q(null),Ra=q(null),Ua=q(0),Oa=q(!1),La=q(()=>{}),[Pa,Va]=A(!1),[Fa,Ha]=A(null),[Ya,Ba]=A(0),[Ga,Ja]=A(!1),Wa=q(!1),Xa=q(null),Ka=!(!(null==ta?void 0:ta.hash)&&!sa||Ga),Qa=!!z&&!Ka&&!Jt,Za=Qa&&!Fa,[er,tr]=A(""),[ar,rr]=A([]),[nr,or]=A(!1),[sr,lr]=A(null),[ir,cr]=A(null),[dr,pr]=A([]),[ur,mr]=A(!0),[gr,hr]=A({}),[fr,yr]=A(null),xr=q(null);T(()=>{(async()=>{if(bt){mr(!0);try{const e=l.replace(/\/messages\/widget$/,"")+"/knowledge/widget/list",t=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({organization_id:bt,limit:20})});if(t.ok){const e=await t.json(),a=(e.results||e.documents||[]).map(e=>({id:e.id||e._id,title:e.title||e.filename||"Untitled Article",content:e.content||"",document_type:e.document_type||"guide",score:e.score||0}));pr(a)}}catch(e){console.error("Failed to load article catalog:",e)}finally{mr(!1)}}})()},[bt,l]);const[br,vr]=A(!1),[kr,wr]=A(!1),Er=q(null),Nr=q(!0),zr=q(!1),Ir=q(0),[Sr,Cr]=A(0),Ar=q(null),Tr=q(null),qr=q(null),Mr=q(Ft);Mr.current=Ft;const jr=q(!1),_r=q(0),$r=_r.current;T(()=>{"undefined"!=typeof window&&$r===_r.current&&_(ca,da)},[da,ca]),T(()=>{const e=()=>{_r.current+=1,La.current(),ea.clear(),Wa.current=!1,Ja(!1),Kr.current=new Set,an([]),ja(!1),Oa.current=!1,pe(Mr.current),jr.current||(Yt.current=!0),Gt.current=de(Mr.current),aa(null),na(!1),pa([]),fa(null),ba([]),ka(""),Ea([]),ct(!1),pt(!1),mt(!1),wn(""),In(null),tr(""),rr([]),cr(null),hr({}),yr(null),Ia(null),Vt(e=>e+1)},t=(a=e,fe.add(a),()=>{fe.delete(a)});var a;return void 0!==J&&xe()!==J&&e(),()=>{t(),_r.current+=1,La.current()}},[]);const[Dr,Rr]=A(null);T(()=>{if(ha){const e=da.find(e=>e.id===ha);ba(e?e.messages:[])}else ba([]);Rr(ha)},[ha]),T(()=>{ha&&xa.length>0&&pa(e=>{const t=e.find(e=>e.id===ha);return t&&JSON.stringify(t.messages)===JSON.stringify(xa)?e:t?e.map(e=>e.id===ha?{...e,messages:xa,lastUpdated:(new Date).toISOString()}:e):xa.some(e=>"user"===e.role)?[{id:ha,messages:xa,lastUpdated:(new Date).toISOString()},...e]:e})},[xa,ha]),T(()=>{var e;if(bt&&Bt)return e=async e=>{if(aa(e),!e.hash)return void console.warn("[Askly] identify() called without `hash`. The user will not be linked server-side. Generate the HMAC on your backend — see the Askly docs.");e.timestamp||console.warn("[Askly] identify() called with `hash` but no `timestamp`. The server recomputes the HMAC from the timestamp it was signed with, so verification will fail without it."),ea.userId&&ea.userId!==e.userId&&ea.clear(),Wa.current=!1,Ja(!1);let t=()=>{};const a=new Promise(e=>{t=e});Xa.current=a;try{const t=Gt.current,a=ea.token,r=await fetch(Qt("/identify"),{method:"POST",headers:{"Content-Type":"application/json",...a?{Authorization:`Bearer ${a}`}:{}},body:JSON.stringify({organization_id:bt,visitor_id:t,user_id:e.userId,timestamp:e.timestamp||Math.floor(Date.now()/1e3),signature:e.hash,email:e.email,name:e.name,phone:e.phone,attributes:e.attributes||{}})});r.ok?t===Gt.current&&(O("identify:success",{userId:e.userId}),ea.apply(await r.json().catch(()=>null))):(console.error(`[Askly] identify() was rejected by the server (HTTP ${r.status}). The user is not linked to their Askly profile, and messages are sent as an anonymous visitor.`),400!==r.status&&403!==r.status||(Wa.current=!0,Ja(!0)),O("identify:error",{userId:e.userId,status:r.status}))}catch(t){console.error("[Askly] identify() request failed:",t),O("identify:error",{userId:e.userId})}finally{t(),Xa.current===a&&(Xa.current=null)}},ge.add(e),me&&e(me),()=>{ge.delete(e)}},[bt,Bt,l]);const Ur=()=>{const e=ue(),t={id:e,messages:yt?[{role:"agent",content:yt,timestamp:new Date,format:"markdown"}]:[],lastUpdated:(new Date).toISOString()};return pa(e=>[t,...e]),fa(e),e},Or=$(null!==(ne=null==Ge?void 0:Ge.message)&&void 0!==ne?ne:Xe,at?Fe:null,Ne),Lr=null!==(se=null==Ge?void 0:Ge.delayMs)&&void 0!==se?se:Qe,Pr=!1!==y&&(!0===y||Je)&&!h,Vr=t||"detect",Fr=da.some(e=>e.messages.some(e=>"user"===e.role)),[Hr,Yr]=A(!1),[Br,Gr]=A("undefined"==typeof document||!document.hidden),Jr=da.reduce((e,t)=>e+(t.unread||0),0),Wr=null===(ce=da.filter(e=>(e.unread||0)>0).sort((e,t)=>e.lastUpdated<t.lastUpdated?1:-1)[0])||void 0===ce?void 0:ce.id,Xr=q(Nt);Xr.current=Nt;const Kr=q(new Set);T(()=>{wt&&"messages"===Nt&&ha&&da.some(e=>e.id===ha&&(e.unread||0)>0)&&pa(e=>e.map(e=>e.id===ha?{...e,unread:0}:e))},[wt,Nt,ha,da]);const[Qr,Zr]=A(!1),en=q(!1);T(()=>{if(!Pr||!et||wt||!Lt||en.current)return;if(Fr)return;if("undefined"==typeof window||D(Vr))return;const e=W?Date.now()-W:0,t=setTimeout(()=>{en.current=!0,Zr(!0),R("shown")},Math.max(0,Lr-e));return()=>clearTimeout(t)},[Pr,et,wt,Lt,Lr,Vr,Fr]),T(()=>{wt&&(en.current=!0,Qr&&Zr(!1),Pr&&"undefined"!=typeof window&&U(Vr))},[wt]);const[tn,an]=A([]),[rn,nn]=A(0),on=q(null),sn=q(0);T(()=>{rn!==sn.current&&wt&&qr.current&&(sn.current=rn,qr.current.focus())},[rn,wt,Nt,ha,xa.length]),T(()=>{"messages"!==Nt||0!==da.length||ha||Ur()},[Nt,da.length,ha]),T(()=>{const e=e=>1===e.length&&"agent"===e[0].role&&!e[0].messageId&&"greeting"!==e[0].kind&&e[0].content!==yt;pa(t=>t.some(t=>e(t.messages))?t.map(t=>e(t.messages)?{...t,messages:[{...t.messages[0],content:yt}]}:t):t),ba(t=>e(t)?[{...t[0],content:yt}]:t)},[yt]);const ln=(e,t)=>{e!==ya.current?pa(a=>a.map(a=>a.id===e?{...a,messages:[...a.messages,t],lastUpdated:(new Date).toISOString()}:a)):ba(e=>[...e,t])},cn=q(xa);T(()=>{cn.current=xa},[xa]);const dn=q({chatId:null,ids:new Set});T(()=>{if(!(wt&&Lt&&"messages"===Nt&&ha&&bt&&Bt))return;let e=!1;const t=e=>`${Qt("/conversation")}?org_id=${encodeURIComponent(bt)}`+(e?"":`&visitor_id=${encodeURIComponent(Bt)}`)+`&thread_key=${encodeURIComponent(ha)}`,a=async()=>{if("undefined"==typeof document||!document.hidden)try{const a=await ea.fetch(t);if(!a.ok)return;const r=await a.json();if(e)return;void 0!==r.contact_known&&ct(r.contact_known);const n=(r.messages||[]).filter(e=>"human"===e.role&&e.message_id),o=dn.current;o.chatId!==ha&&(o.chatId=ha,o.ids=new Set);const s=new Set(cn.current.map(e=>e.messageId).filter(Boolean));o.ids.forEach(e=>s.add(e)),Kr.current.forEach(e=>s.add(e));const l=n.filter(e=>!s.has(e.message_id)).map(e=>({role:"agent",content:e.content,timestamp:e.timestamp?new Date(e.timestamp):new Date,messageId:e.message_id,format:"markdown"===e.format?"markdown":"text"}));if(!e&&l.length>0){const e=l.filter(e=>!Kr.current.has(e.messageId));l.forEach(e=>{o.ids.add(e.messageId),Kr.current.add(e.messageId)}),e.length>0&&(ba(t=>{const a=new Set(t.map(e=>e.messageId).filter(Boolean)),r=e.filter(e=>!a.has(e.messageId));return r.length?[...t,...r]:t}),fn("received"),e.forEach(e=>{null==K||K(e.content),O("message:received",{text:e.content,conversationId:ha,from:"agent",messageId:e.messageId})}))}}catch{}},r=setInterval(a,Hr?3e4:4e3);a();const n=()=>{document.hidden||a()};return document.addEventListener("visibilitychange",n),()=>{e=!0,clearInterval(r),document.removeEventListener("visibilitychange",n)}},[wt,Lt,Nt,ha,bt,l,Bt,Hr]),T(()=>{if("undefined"==typeof document)return;let e;const t=()=>{clearTimeout(e),document.hidden?e=setTimeout(()=>Gr(!1),15e3):Gr(!0)};return document.addEventListener("visibilitychange",t),()=>{clearTimeout(e),document.removeEventListener("visibilitychange",t)}},[]),T(()=>{if(!(bt&&Bt&&Lt&&Br&&Fr))return;if("undefined"==typeof fetch||"undefined"==typeof AbortController||"undefined"==typeof TextDecoder)return;const e=e=>e&&"human"===e.role&&e.message_id?{role:"agent",content:e.content,timestamp:e.timestamp?new Date(e.timestamp):new Date,messageId:e.message_id,format:"markdown"===e.format?"markdown":"text"}:null,t=(e,t)=>{var a;const r=t.messageId;if(Kr.current.has(r))return;Kr.current.add(r);const n=e===ya.current;if((n?cn.current:(null===(a=ua.current.find(t=>t.id===e))||void 0===a?void 0:a.messages)||[]).some(e=>e.messageId===r))return;const o=xn.current&&n&&"messages"===Xr.current;n&&ba(e=>e.some(e=>e.messageId===r)?e:[...e,t]),pa(a=>{const s=a.find(t=>t.id===e),l=(new Date).toISOString();return s?a.map(a=>{if(a.id!==e)return a;const s=n||a.messages.some(e=>e.messageId===r)?a.messages:[...a.messages,t];return{...a,messages:s,lastUpdated:l,unread:o?a.unread:(a.unread||0)+1}}):n?a:[{id:e,messages:[t],lastUpdated:l,unread:1},...a]}),fn("received"),null==K||K(t.content),O("message:received",{text:t.content,conversationId:e,from:"agent",messageId:r})};let a=!1;const r=function(e){let t=!1,a=null,r=null;const n=e=>new Promise(t=>{const a=setTimeout(t,e);r=()=>{clearTimeout(a),t()}});return(async()=>{let r=0;for(;!t;){let o,s=0,l=!1;a=new AbortController;const i=()=>{clearTimeout(o),o=setTimeout(()=>a&&a.abort(),45e3)};try{const r=await e.connect(a.signal);if(t)return;if(!r||404===r.status||405===r.status)return void e.onDown("unsupported");if(!r.ok)throw new Error(`stream HTTP ${r.status}`);if(!r.body||"function"!=typeof r.body.getReader)return void e.onDown("unsupported");const n=r.body.getReader(),o=new TextDecoder;let c="";for(i();;){const{value:a,done:r}=await n.read();if(r)break;i(),c+=o.decode(a,{stream:!0}).replace(/\r\n/g,"\n");let d=c.indexOf("\n\n");for(;-1!==d;){const a=re(c.slice(0,d));c=c.slice(d+2),d=c.indexOf("\n\n"),a&&!t&&("ready"===a.type?(s=Date.now(),e.onLive()):"reconnect"===a.type?l=!0:e.onEvent(a))}if(l)break}}catch{}finally{clearTimeout(o);try{a.abort()}catch{}}if(t)return;e.onDown("down");const c=s>0&&Date.now()-s>=3e4;c?r=0:r+=1;const d=c&&l?500:ae[Math.min(r,ae.length-1)];await n(d/2+Math.random()*(d/2))}})(),{close:()=>{if(t=!0,a)try{a.abort()}catch{}r&&r()},kick:()=>{if(!t){if(a)try{a.abort()}catch{}r&&r()}}}}({connect:async e=>{var t;if(!ea.supported)return null;if(!(null!==(t=ea.token)&&void 0!==t?t:await ea.start())){if(!ea.supported)return null;throw new Error("no session yet")}const{res:a,token:r}=await ea.request(`${Qt("/events")}?org_id=${encodeURIComponent(bt)}`,{headers:{Accept:"text/event-stream"},signal:e});if(!r)throw new Error("session lost");return a},onEvent:a=>{if("message"!==a.type||!a.data||"string"!=typeof a.data.thread_key)return;const r=e(a.data.message);r&&t(a.data.thread_key,r)},onLive:()=>{Yr(!0),(async()=>{const r=ua.current.filter(e=>e.messages.some(e=>"user"===e.role)).slice(0,5);for(const n of r){if(a)return;try{const r=await ea.fetch(e=>`${Qt("/conversation")}?org_id=${encodeURIComponent(bt)}`+(e?"":`&visitor_id=${encodeURIComponent(Bt)}`)+`&thread_key=${encodeURIComponent(n.id)}`);if(!r.ok||a)continue;const o=await r.json();for(const r of o.messages||[]){const o=e(r);o&&!a&&t(n.id,o)}}catch{}}})()},onDown:()=>Yr(!1)});let n=!0;const o=setInterval(async()=>{if(n&&ea.token)try{const e=await ea.fetch(`${Qt("/presence")}?org_id=${encodeURIComponent(bt)}`,{method:"POST"});404!==e.status&&405!==e.status||(n=!1)}catch{}},45e3),s=()=>r.kick();return window.addEventListener("online",s),()=>{a=!0,clearInterval(o),window.removeEventListener("online",s),r.close(),Yr(!1)}},[bt,Bt,Lt,Br,Fr,l]),T(()=>{if(wt&&Qa&&"undefined"!=typeof window&&!document.getElementById("cloudflare-turnstile-script")){const e=document.createElement("script");e.id="cloudflare-turnstile-script",e.src=L("https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit"),e.async=!0,e.defer=!0,document.head.appendChild(e)}},[wt,Qa]);const pn=wt&&Lt&&"messages"===Nt&&null!==ha;T(()=>{if(!Qa||!pn||"undefined"==typeof window)return;let e,t=!1;const a=()=>{if(t)return;const r=window.turnstile,n=document.getElementById("askly-turnstile-container");if(r&&n)try{Ar.current=r.render(n,{sitekey:z,callback:e=>{Ha(e),Ia(null)},"expired-callback":()=>{Ha(null)},"error-callback":()=>{Ha(null)}})}catch(e){console.error("[Askly] Turnstile render error:",e)}else e=setTimeout(a,300)};return e=setTimeout(a,150),()=>{t=!0,clearTimeout(e);const a=Ar.current;if(Ar.current=null,a&&window.turnstile)try{window.turnstile.remove(a)}catch{}Ha(null)}},[Qa,pn,ha,z]),T(()=>{if(0===Ya)return;const e=Ar.current;if(e&&window.turnstile)try{window.turnstile.reset(e)}catch(e){console.error("[Askly] Turnstile reset error:",e)}},[Ya]);const un=q(null),mn=()=>{if("undefined"==typeof window)return null;if(!un.current){const e=window.AudioContext||window.webkitAudioContext;if(!e)return null;try{un.current=new e}catch{return null}}return un.current},gn=()=>{const e=mn();e&&"suspended"===e.state&&e.resume().catch(()=>{})},hn={sent:[{freq:392,start:0,duration:.08}],received:[{freq:587.33,start:0,duration:.09},{freq:783.99,start:.09,duration:.14}],error:[{freq:311.13,start:0,duration:.14,type:"sawtooth"},{freq:233.08,start:.12,duration:.18,type:"sawtooth"}],escalation:[{freq:880,start:0,duration:.12},{freq:1174.66,start:.11,duration:.2,type:"triangle"}]},fn=e=>{if(!b)return;const t=mn();if(!t)return;"suspended"===t.state&&t.resume().catch(()=>{});const a=hn[e]||hn.received,r=t.currentTime,n=.35*Math.max(0,Math.min(1,v));for(const e of a){const a=t.createOscillator(),o=t.createGain();a.type=e.type||"sine",a.frequency.value=e.freq;const s=r+e.start;o.gain.setValueAtTime(1e-4,s),o.gain.exponentialRampToValueAtTime(n,s+.012),o.gain.exponentialRampToValueAtTime(1e-4,s+e.duration),a.connect(o).connect(t.destination),a.start(s),a.stop(s+e.duration+.03)}},yn=q(!1);T(()=>{yn.current?wt&&Lt?(gn(),null==Q||Q(),O("open")):(La.current(),null==Z||Z(),O("close")):yn.current=!0},[wt&&Lt]);const xn=q(wt);xn.current=wt;T(()=>()=>{xr.current&&clearTimeout(xr.current)},[]);const bn=e=>{const t=e.target.value;if(tr(t),xr.current&&clearTimeout(xr.current),!t.trim())return rr([]),lr(null),void or(!1);or(!0),xr.current=setTimeout(()=>(async e=>{if(!e.trim())return rr([]),void lr(null);or(!0),lr(null);try{const t=l.replace(/\/messages\/widget$/,"")+"/knowledge/widget/search",a=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({organization_id:bt||"",query:e,top_k:5})});if(a.ok){const e=await a.json();rr(e.results||[])}else rr([]),lr(429===a.status?"You're searching too fast — please wait a moment and try again.":"Search is unavailable right now. Please try again shortly.")}catch(e){console.error("RAG search failed:",e),rr([]),lr("Search is unavailable right now. Please try again shortly.")}finally{or(!1)}})(t),350)},vn=e=>{cr(e)},[kn,wn]=A(""),[En,Nn]=A(!1),[zn,In]=A(null),Sn=!it&&("always"===nt?0===xa.filter(e=>"user"===e.role).length:"smart"===nt&&(dt||!at));T(()=>{var e;Sn&&(null===(e=on.current)||void 0===e||e.focus())},[Sn]);const Cn=xa[xa.length-1],An="smart"===nt&&!it&&!Sn&&!ut&&!Na&&xa.some(e=>"user"===e.role)&&"agent"===(null==Cn?void 0:Cn.role),Tn=(e="smooth")=>{const t=Er.current;if(!t)return;const a="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches?"auto":e;"function"==typeof t.scrollTo?t.scrollTo({top:t.scrollHeight,behavior:a}):t.scrollTop=t.scrollHeight,Nr.current=!0,Cr(0)};P(()=>{if(Ir.current=0,Nr.current=!0,Cr(0),null===ha)return;zr.current=!0;const e=Er.current;e&&(e.scrollTop=e.scrollHeight)},[ha]),T(()=>{var e;if(!Er.current||null===ha)return;const t=xa.length-Ir.current;Ir.current=xa.length;const a=t>0&&"user"===(null===(e=xa[xa.length-1])||void 0===e?void 0:e.role);Nr.current||a?(Tn(zr.current?"auto":"smooth"),zr.current=!1):t>0&&Cr(e=>e+t)},[xa,Na,kr,Sn,ha]),T(()=>{const e=Er.current;if(!e||"undefined"==typeof ResizeObserver)return;const t=new ResizeObserver(()=>{Nr.current&&(e.scrollTop=e.scrollHeight)});return t.observe(e),()=>t.disconnect()},[ha]);P(()=>{const e=qr.current;e&&(e.style.height="auto",e.style.height=`${Math.min(e.scrollHeight,120)}px`,e.style.overflowY=e.scrollHeight>120?"auto":"hidden")},[va,ha]);const qn=async()=>{const e=kn.trim();if(e&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)){if(bt&&Bt){Nn(!0),In(null);try{if(!(await ea.fetch(Qt("/contact-details"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({organization_id:bt,visitor_id:Bt,email:e,timestamp:Math.floor(Date.now()/1e3)})})).ok)throw new Error("Could not save that address.");ct(!0),O("lead:captured"),wn("")}catch{In("Couldn't save that just now. You can carry on chatting.")}finally{Nn(!1)}}}else In("That doesn't look like an email address.")},Mn=async(e,t)=>{const a=("string"==typeof e?e:va).trim();if(!a)return;if(Sn)return;if(Za)return void Ia("Please complete the security check first.");const r=ha,n=r||"primary",o=_r.current,s=Ar.current,i=(null==ta?void 0:ta.timestamp)||la||Math.floor(Date.now()/1e3),c=!(!t||!t.voice)||"string"!=typeof e&&Oa.current;Oa.current=!1;const d={role:"user",content:a,timestamp:new Date,format:"text"};ba(e=>[...e,d]),ka(""),Ia(null),Da.current=null,qa(null),Ea(e=>e.includes(n)?e:[...e,n]),gn(),fn("sent"),null==X||X(a),O("message:sent",{text:a,conversationId:n});try{Xa.current&&await Xa.current,ea.token||await ea.start();const e={organization_id:bt||"",visitor_id:Gt.current,thread_key:n,message:a,timestamp:i,context:{url:"undefined"!=typeof window?window.location.href:void 0,title:"undefined"!=typeof document?document.title:void 0,referrer:"undefined"!=typeof document&&document.referrer||void 0,locale:"undefined"!=typeof navigator?navigator.language:void 0,screen:"undefined"!=typeof window&&window.screen?`${window.screen.width}x${window.screen.height}`:void 0}};c&&(e.metadata={input_mode:"voice"}),ia&&(e.user_id=ia);const t=(null==ta?void 0:ta.hash)||sa,s=!!ea.userId&&ea.userId===ia;!t||s||Wa.current?e.timestamp=Math.floor(Date.now()/1e3):e.signature=t,Fa&&(e.turnstile_token=Fa);const{res:d,token:p}=await ea.request(l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!d.ok){const e=await d.json().catch(()=>({})),t=new Error(e.detail||`HTTP ${d.status}`);throw t.status=d.status,t}const u=await d.json();if(o!==_r.current)return;if(ea.token&&ea.token!==p||ea.apply(u),u.reply){const e={role:"agent",content:u.reply,timestamp:new Date,format:"text"===u.format?"text":"markdown"};ln(r,e)}void 0!==u.contact_known&&ct(u.contact_known),u.escalated||u.should_escalate?(pt(!0),fn("escalation"),null==ee||ee(u),O("escalated",{conversationId:n})):u.reply&&fn("received"),u.reply&&(null==K||K(u.reply),O("message:received",{text:u.reply,conversationId:n,from:"ai",messageId:u.message_id}))}catch(e){if(o!==_r.current)return;console.error("[Askly] Message failed:",e),O("error",{message:"Message could not be sent",status:null==e?void 0:e.status}),ln(r,{role:"agent",content:429===(null==e?void 0:e.status)?"You're sending messages too quickly. Please wait a moment and try again.":"Sorry, something went wrong. Please try again.",timestamp:new Date,format:"text"}),fn("error"),Va(!0),setTimeout(()=>Va(!1),500)}finally{Ea(e=>e.filter(e=>e!==n)),Qa&&Ar.current===s&&(Ha(null),Ba(e=>e+1))}},jn=q(null);jn.current={sendMessage:Mn,voiceInput:Sa,leadRequired:Sn,turnstileBlocked:Za,isTyping:Na,uploadingFile:kr,input:va};const _n=(e,t=!1)=>{const a=B(e);Aa("idle"),qa(t?a:null),Ia(a),O("voice:error",{code:e})},$n=async e=>{const t=Ua.current,a=_r.current,r=ya.current;Da.current=e,Aa("transcribing"),qa(null);const n="undefined"!=typeof AbortController?new AbortController:null;Ra.current=n;const o=setTimeout(()=>null==n?void 0:n.abort(),3e4);try{ea.token||await ea.start();const o=new FormData;o.append("organization_id",bt||""),o.append("file",e.blob,-1!==e.blob.type.indexOf("mp4")?"clip.mp4":"clip.webm"),o.append("duration_ms",String(Math.round(e.durationMs))),"undefined"!=typeof navigator&&navigator.language&&o.append("language",navigator.language);const s=await ea.fetch(Qt("/transcribe"),{method:"POST",body:o,signal:n?n.signal:void 0});if(t!==Ua.current||a!==_r.current)return;if(!s.ok){const e=(await s.json().catch(()=>({}))).detail;return console.error("[Askly] Transcription failed:",s.status,e),void("voice_disabled"===e?_n("disabled"):429===s.status?_n("limit"):_n("failed",s.status>=500))}const l=await s.json();if(t!==Ua.current||a!==_r.current)return;Da.current=null;const i="string"==typeof l.text?l.text.trim():"";if(!i)return void _n("no-speech");Aa("idle"),Ia(null),O("voice:transcript",{text:i,language:l.language||void 0});const c=jn.current;!("auto-send"!==c.voiceInput||c.leadRequired||c.turnstileBlocked||c.isTyping||c.uploadingFile||c.input.trim()||r!==ya.current)?c.sendMessage(i,{voice:!0}):(Oa.current=!0,ka(e=>e+(""===e||/\s$/.test(e)?"":" ")+i))}catch(e){if(t!==Ua.current||a!==_r.current)return;console.error("[Askly] Transcription failed:",e),_n("network",!0)}finally{clearTimeout(o),Ra.current===n&&(Ra.current=null)}},Dn=async()=>{if("off"===Sa||"idle"!==Ca)return;if(Sn||Za||Na||kr)return;const e=++Ua.current;Da.current=null,_a.current={level:0,elapsedMs:0},qa(null),Ia(null),vr(!1),Aa("starting");try{const{startRecording:t}=await(import("./speech-8iAgRQFA.js"));if(e!==Ua.current)return;const a=await t({maxMs:6e4,silenceMs:2e3,noSpeechMs:8e3,onMeter:(e,t)=>{_a.current={level:e,elapsedMs:t}},onDone:t=>{e===Ua.current&&($a.current=null,O("voice:stop",{durationMs:t.durationMs}),"ok"!==t.outcome?_n(t.outcome):t.blob.size<200?_n("no-speech"):$n(t))}});if(e!==Ua.current)return void a.cancel();$a.current=a,Aa("recording"),O("voice:start")}catch(t){if(e!==Ua.current)return;_n(t&&t.code||"failed")}},Rn=()=>{var e;null===(e=$a.current)||void 0===e||e.stop()},Un=()=>{var e,t;Ua.current+=1,null===(e=$a.current)||void 0===e||e.cancel(),$a.current=null,null===(t=Ra.current)||void 0===t||t.abort(),Ra.current=null,Da.current=null,qa(null),Aa("idle")};La.current=Un;T(()=>{"idle"!==Ca&&Un()},[pn,ha]);const On=q(Ca);T(()=>{const e=On.current;On.current=Ca,"idle"!==e&&"idle"===Ca&&pn&&nn(e=>e+1)},[Ca]),T(()=>{""===va&&(Oa.current=!1)},[va]),T(()=>{if("idle"===Ca)return;if("off"===Sa)return void Un();const e=e=>{"Escape"===e.key&&Un()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[Ca,Sa]),T(()=>{var e;const t=tn[0];if(!t||!wt||!Lt||"messages"!==Nt)return;const a=null!==(e=t.chatId)&&void 0!==e?e:ha;if(!a)return void(da.length>0&&fa(da[0].id));if(ha!==a||Dr!==a)return;const r=()=>{const e=tn.map(e=>e.text).filter(e=>!!e);an([]),e.length&&ka(e.join("\n")),nn(e=>e+1)};if(!t.send)return an(e=>e.slice(1)),null!==t.text&&ka(t.text),void nn(e=>e+1);if(Sn)return r();if(Za){const e=setTimeout(r,1e4);return()=>clearTimeout(e)}Na||(an(e=>e.slice(1)),Mn(t.text))},[tn,wt,Lt,Nt,ha,Dr,da.length,Sn,Za,Na]);const[Ln,Pn]=A(!1);T(()=>{if(Ma&&Ln)return"off"===Sa?(ja(!1),console.warn("[Askly] startVoiceInput() ignored: voice input is turned off."),void O("voice:error",{code:"disabled"})):void(!pn||Dr!==ha||tn.length>0||(ja(!1),Sn||Za||Na||kr?console.warn("[Askly] startVoiceInput() ignored: the message box is not available yet."):Dn()))},[Ma,Ln,Sa,pn,Dr,ha,tn.length]);const Vn=q(()=>{}),Fn=q({}),[Hn,Yn]=A(null);Vn.current=e=>{if(Lt||"close"===e.type||"update"===e.type)switch(e.type){case"open":Et(!0);break;case"close":Et(!1);break;case"toggle":Et(e=>!e);break;case"showSpace":zt("home"===e.space?"explore":"help"===e.space?"help":"messages"),Et(!0);break;case"showNewMessage":case"sendMessage":{const t="sendMessage"===e.type,a="string"==typeof e.text?e.text:null;if(t&&!(a||"").trim())break;zt("messages"),Et(!0),an(e=>[...e,{chatId:null,text:t?a.trim():a,send:t}]);break}case"showArticle":Yn(e.articleId);break;case"startVoiceInput":Ln&&"off"===Sa||(zt("messages"),Et(!0),an(e=>[...e,{chatId:null,text:null,send:!1}])),ja(!0);break;case"stopVoiceInput":Rn();break;case"update":{const t=["organizationName","logoUrl","themeColor","theme","buttonShape","welcomeMessage","ai_name","ai_avatar_url","greetingEnabled","greetingMessage","greetingDelayMs","faqs"],a={};for(const r of t)e.config&&void 0!==e.config[r]&&(a[r]=e.config[r]);const r=V(e.config&&e.config.voiceInput)||(e.config&&!1===e.config.enableVoiceChat?"off":void 0);r&&Ve(r),Fn.current={...Fn.current,...a},kt(a);break}}else console.warn(`[Askly] ${e.type}() ignored: the widget is hidden on this path.`)},T(()=>{if(!Hn)return;const e=dr.concat(Mt).find(e=>e.id===Hn);e?(Yn(null),cr(e),zt("help"),Et(!0)):Ln&&!ur&&bt&&(Yn(null),console.warn(`[Askly] showArticle(): no article with id "${Hn}".`))},[Hn,dr,Mt,ur,bt]),T(()=>F(e=>Vn.current(e)),[]);const Bn=wt&≪T(()=>{H.open=Bn},[Bn]),T(()=>{H.visitorId=Bt},[Bt]),T(()=>{H.unread!==Jr&&(H.unread=Jr,O("unread",{count:Jr}))},[Jr]),T(()=>{Ln&&!H.ready&&(H.ready=!0,O("ready",{visitorId:Gt.current}))},[Ln]),T(()=>()=>{H.open&&O("close"),H.unread>0&&O("unread",{count:0}),Y()},[]);const Gn="#0f172a"===je||"#6366f1"===je||"#2563eb"===je?{}:{"--askly-accent":`var(--askly-brand, ${je})`},Jn={right:"right"===s?"24px":void 0,left:"left"===s?"24px":void 0,...Gn},Wn={right:"right"===s?"24px":void 0,left:"left"===s?"24px":void 0,...Gn},Xn={conversations:da,setActiveChatId:fa,startNewChat:Ur},Kn={open:wt,setOpen:Et,buttonIcon:m,buttonShape:Re,buttonStyle:Jn,launcherUnread:Jr,resolvedTheme:ft,setActiveChatId:fa,setActiveTab:zt,unreadChatId:Wr},Qn={accentVars:Gn,aiAnswering:at,aiAvatarUrl:Ye,dismissGreeting:()=>{en.current=!0,Zr(!1),U(Vr),R("dismissed")},faqs:Ct,greetingText:Or,openFromGreeting:e=>{const t={role:"agent",content:Or,timestamp:new Date,format:"text",kind:"greeting"},a=da.find(e=>!e.messages.some(e=>"user"===e.role)),r=a?a.id:ue();pa(e=>a?e.map(e=>e.id===r?{...e,messages:[t],lastUpdated:(new Date).toISOString()}:e):[{id:r,messages:[t],lastUpdated:(new Date).toISOString()},...e]),ha===r&&ba([t]),fa(r),zt("messages"),Et(!0),e&&an(t=>[...t,{chatId:r,text:e,send:!0}]),nn(e=>e+1),R("clicked")},organizationLogo:Ie,position:s,resolvedTheme:ft},Zn={allArticles:dr,articlesLoading:ur,expandedFaqIndex:Tt,faqs:Ct,handleSearchChange:bn,handleSelectArticle:vn,organizationLogo:Ie,organizationName:Ne,searchError:sr,searchLoading:nr,searchQuery:er,searchResults:ar,setActiveTab:zt,setExpandedFaqIndex:qt,setInput:ka},eo={allArticles:dr,articleFeedback:Dt,articlesLoading:ur,handleSearchChange:bn,handleSelectArticle:vn,organizationLogo:Ie,organizationName:Ne,searchError:sr,searchLoading:nr,searchQuery:er,searchResults:ar,selectedArticle:ir,selectedCollection:Ut,setActiveTab:zt,setArticleFeedback:Rt,setInput:ka,setSelectedArticle:cr,setSelectedCollection:Ot,themeColor:je},to={activeTab:Nt,setActiveTab:zt,setSelectedArticle:cr},ao={cancelVoiceInput:Un,fileInputRef:Tr,handleEmojiClick:e=>{var t;ka(t=>t+e),vr(!1),null===(t=qr.current)||void 0===t||t.focus()},handleFileChange:async e=>{var t,a;const r=null===(t=e.target.files)||void 0===t?void 0:t[0];if(r){wr(!0);try{const e=l.replace(/\/widget$/,"")+"/widget/upload",t=new FormData;t.append("organization_id",bt||""),t.append("file",r);const n=await ea.fetch(e,{method:"POST",body:t});if(!n.ok){const e=await n.json().catch(()=>({})),t=new Error(e.detail||"Upload failed");throw t.status=n.status,t}const o=await n.json(),s=r.type.startsWith("image/")?``:`[File attachment: ${r.name}](${o.blob_url})`;ka(e=>e+(e.endsWith(" ")||""===e?"":" ")+s),null===(a=qr.current)||void 0===a||a.focus(),Ia(null)}catch(e){console.error("[Askly] Attachment upload failed:",e),Ia(400===(null==e?void 0:e.status)?"That file can't be attached. It may be too large (10 MB limit) or a type that isn't allowed.":"That attachment couldn't be uploaded. Please try again.")}finally{wr(!1),e.target&&(e.target.value="")}}},handleFileUploadClick:()=>{var e;null===(e=Tr.current)||void 0===e||e.click()},input:va,inputRef:qr,isTyping:Na,leadRequired:Sn,placeholderText:p,sendMessage:Mn,setInput:ka,setShowEmojiPicker:vr,showEmojiPicker:br,startVoiceInput:Dn,stopVoiceInput:Rn,turnstileBlocked:Za,uploadingFile:kr,voiceInputEnabled:"off"!==Sa,voiceMaxMs:6e4,voiceMeterRef:_a,voicePhase:Ca},ro={activeChatId:ha,activeTab:Nt,aiAnswering:at,aiAvatarUrl:Ye,aiName:Fe,headerStyle:{},isExpanded:It,organizationLogo:Ie,organizationName:Ne,setActiveChatId:fa,setIsExpanded:St,setOpen:Et},no={copiedMsgIndex:fr,messages:xa,msgReactions:gr,setCopiedMsgIndex:yr,setMsgReactions:hr,showTimestamp:x};return Lt?e.createElement(e.Fragment,null,e.createElement(ve,{...Kn}),Qr&&!wt&&e.createElement(ke,{...Qn}),wt&&e.createElement("div",{className:`askly-chat-modal ${It?"expanded":""} ${Pa?"askly-shake":""}`,"data-askly-theme":ft,style:Wn},e.createElement(Ce,{...ro}),"explore"===Nt&&e.createElement(we,{...Zn}),"messages"===Nt&&(null===ha?e.createElement(be,{...Xn}):e.createElement("div",{className:"chat-screen"},e.createElement("div",{className:"chat-stream"},e.createElement("div",{className:"chat-body",ref:Er,onScroll:()=>{const e=Er.current;if(!e)return;const t=e.scrollHeight-e.scrollTop-e.clientHeight<=80;Nr.current=t,t&&Cr(0)},onLoadCapture:()=>{Nr.current&&Tn("auto")}},e.createElement(Te,{...no}),Ct.length>0&&xa.length<=1&&!Na&&!Sn&&e.createElement("div",{className:"quick-replies"},Ct.slice(0,4).map((t,a)=>e.createElement("button",{key:a,className:"quick-reply-chip",onClick:()=>Mn(t.question)},t.question))),An&&e.createElement("div",{className:"askly-lead-card"},e.createElement("div",{className:"askly-lead-copy"},st),e.createElement("div",{className:"askly-lead-row"},e.createElement("input",{type:"email",value:kn,onChange:e=>{wn(e.target.value),In(null)},onKeyDown:e=>{"Enter"===e.key&&qn()},placeholder:"you@example.com",disabled:En,"aria-label":"Your email address"}),e.createElement("button",{className:"askly-lead-submit",onClick:()=>{qn()},disabled:En||!kn.trim()},En?"…":"Save")),zn&&e.createElement("div",{className:"askly-lead-error"},zn),e.createElement("button",{className:"askly-lead-dismiss",onClick:()=>mt(!0)},"No thanks")),Na&&e.createElement("div",{className:"msg-wrapper agent"},at?e.createElement("div",{className:"typing-indicator"},e.createElement("span",null),e.createElement("span",null),e.createElement("span",null)):e.createElement("div",{className:"msg agent",style:{opacity:.75,fontStyle:"italic"}},"Sending to the team…")),kr&&e.createElement("div",{className:"msg-wrapper user"},e.createElement("div",{className:"msg user",style:{opacity:.7,display:"flex",alignItems:"center",gap:8}},e.createElement("span",{className:"search-loader",style:{borderColor:"#fff",borderTopColor:"transparent"}}),e.createElement("span",null,"Uploading attachment..."))),Qa&&e.createElement("div",{className:"askly-turnstile-wrapper",style:Fa?{display:"none"}:void 0},e.createElement("slot",{name:"turnstile"}))),Sr>0&&e.createElement("button",{type:"button",className:"askly-jump-latest",onClick:()=>Tn("smooth"),"aria-live":"polite"},e.createElement(o,{size:14}),1===Sr?"1 new message":`${Sr} new messages`,e.createElement("span",{className:"askly-jump-badge"},Sr))),Sn&&e.createElement("div",{className:"askly-lead-card askly-lead-required"},e.createElement("div",{className:"askly-lead-copy"},st),e.createElement("div",{className:"askly-lead-row"},e.createElement("input",{type:"email",value:kn,onChange:e=>{wn(e.target.value),In(null)},onKeyDown:e=>{"Enter"===e.key&&qn()},placeholder:"you@example.com",disabled:En,ref:on,"aria-label":"Your email address"}),e.createElement("button",{className:"askly-lead-submit",onClick:()=>{qn()},disabled:En||!kn.trim()},En?"…":"Save")),zn&&e.createElement("div",{className:"askly-lead-error"},zn)),za&&e.createElement("div",{className:"askly-lead-error askly-composer-notice",role:"alert"},za,null!==Ta&&Ta===za&&e.createElement("button",{type:"button",className:"askly-notice-action",onClick:()=>{const e=Da.current;e&&"idle"===Ca&&(Ua.current+=1,Ia(null),$n(e))}},"Try again")),e.createElement(Se,{...ao}),e.createElement(qe,null))),"help"===Nt&&e.createElement(f,{fallback:null},e.createElement(Me,{...eo})),!("messages"===Nt&&null!==ha)&&e.createElement(Ee,{...to}))):null};var $e=':host{all:initial;display:block}.askly-chat-button,.askly-chat-modal,.askly-greeting{--askly-bg:#fff;--askly-surface:#fff;--askly-surface-2:#f6f7f9;--askly-surface-3:#eef0f4;--askly-header-bg:hsla(0,0%,100%,.82);--askly-header-fg:#0f172a;--askly-accent:var(--askly-brand,#2563eb);--askly-accent-contrast:#fff;--askly-border:rgba(15,23,42,.08);--askly-border-strong:#e2e5ea;--text-1:#0f172a;--text-2:#334155;--text-3:#64748b;--text-4:#94a3b8;--askly-online:#22c55e;--askly-danger:#ef4444;--askly-danger-bg:#fee2e2;--askly-success:#16a34a;--askly-success-bg:rgba(22,163,74,.09);--askly-link:#2563eb;--askly-scrollbar:#cbd5e1;--askly-scrollbar-hover:#94a3b8;--askly-accent-strong:color-mix(in srgb,var(--askly-accent) 92%,#000);--askly-accent-soft:color-mix(in srgb,var(--askly-accent) 12%,transparent);--askly-accent-ring:color-mix(in srgb,var(--askly-accent) 22%,transparent);--askly-elev-1:0 1px 2px rgba(15,23,42,.06),0 1px 3px rgba(15,23,42,.05);--askly-elev-2:0 4px 12px rgba(15,23,42,.08),0 2px 4px rgba(15,23,42,.04);--askly-elev-3:0 18px 48px rgba(15,23,42,.18),0 6px 16px rgba(15,23,42,.1);--askly-elev-launch:0 10px 30px rgba(15,23,42,.28),0 4px 10px rgba(15,23,42,.18);--askly-radius-sm:10px;--askly-radius-md:14px;--askly-radius-lg:20px;--askly-radius-xl:22px;--askly-ease:cubic-bezier(0.16,1,0.3,1);--askly-ease-snappy:cubic-bezier(0.4,0,0.2,1);--askly-font:var(--askly-font-family,"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif)}.askly-chat-button[data-askly-theme=dark],.askly-chat-modal[data-askly-theme=dark],.askly-greeting[data-askly-theme=dark]{--askly-bg:#0f1115;--askly-surface:#181b21;--askly-surface-2:#21252d;--askly-surface-3:#2b303a;--askly-header-bg:rgba(15,17,21,.78);--askly-header-fg:#f4f5f7;--askly-accent:var(--askly-brand,#3b82f6);--askly-accent-contrast:#fff;--askly-border:hsla(0,0%,100%,.09);--askly-border-strong:#333944;--text-1:#f3f4f6;--text-2:#d2d6dd;--text-3:#9aa2af;--text-4:#6b7280;--askly-online:#4ade80;--askly-danger:#f87171;--askly-danger-bg:hsla(0,91%,71%,.15);--askly-success:#4ade80;--askly-success-bg:rgba(74,222,128,.12);--askly-link:#7cb0ff;--askly-scrollbar:#3a3f4a;--askly-scrollbar-hover:#4d5462;--askly-accent-strong:color-mix(in srgb,var(--askly-accent) 90%,#fff);--askly-elev-1:0 1px 2px rgba(0,0,0,.4);--askly-elev-2:0 6px 16px rgba(0,0,0,.45);--askly-elev-3:0 20px 55px rgba(0,0,0,.62),0 6px 16px rgba(0,0,0,.5);--askly-elev-launch:0 12px 34px rgba(0,0,0,.55)}.askly-chat-button{align-items:center;background:var(--askly-accent);border:none;border-radius:23%;bottom:24px;box-shadow:var(--askly-elev-launch);color:var(--askly-accent-contrast);cursor:pointer;display:flex;font-family:var(--askly-font);font-size:28px;height:60px;justify-content:center;position:fixed;right:24px;transition:transform .28s var(--askly-ease),box-shadow .28s var(--askly-ease),border-radius .28s var(--askly-ease);width:60px;z-index:99999}.askly-chat-button:hover{box-shadow:0 18px 40px rgba(15,23,42,.34),0 6px 14px rgba(15,23,42,.22);transform:translateY(-3px) scale(1.05)}.askly-chat-button:active{transform:scale(.94)}.askly-launcher-badge{background:#dc2626;border-radius:999px;box-shadow:0 0 0 2px var(--askly-bg);box-sizing:border-box;color:#fff;font-size:11px;font-weight:600;height:20px;line-height:20px;min-width:20px;padding:0 5px;position:absolute;right:-4px;text-align:center;top:-4px}.askly-chat-button.shape-square{border-radius:23%}.askly-chat-button.shape-round{border-radius:50%}.askly-chat-modal{-webkit-font-smoothing:antialiased;animation:slideUp .36s var(--askly-ease);background:var(--askly-bg);border:none;border-radius:var(--askly-radius-lg);bottom:100px;box-shadow:var(--askly-elev-3);color:var(--text-1);display:flex;flex-direction:column;font-family:var(--askly-font);height:min(704px,100vh - 120px);height:min(704px,100dvh - 120px);max-height:calc(100vh - 120px);max-height:calc(100dvh - 120px);max-width:calc(100vw - 48px);overflow:hidden;position:fixed;right:24px;width:min(384px,100vw - 48px);z-index:99998}@keyframes slideUp{0%{opacity:0;transform:translateY(24px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes asklyShake{0%,to{transform:translateX(0)}20%{transform:translateX(-6px)}40%{transform:translateX(6px)}60%{transform:translateX(-4px)}80%{transform:translateX(4px)}}.askly-chat-modal.askly-shake{animation:asklyShake .45s cubic-bezier(.36,.07,.19,.97)}.chat-header{align-items:center;backdrop-filter:saturate(1.4) blur(12px);-webkit-backdrop-filter:saturate(1.4) blur(12px);background:var(--askly-header-bg);border-bottom:1px solid var(--askly-border);color:var(--askly-header-fg,inherit);display:flex;flex-shrink:0;justify-content:space-between;padding:15px 18px}.chat-header.chat-header-floating{backdrop-filter:none;-webkit-backdrop-filter:none;background:transparent;border-bottom:none!important;left:0;padding:12px 14px;pointer-events:none;position:absolute;right:0;top:0;z-index:5}.chat-header-floating .header-action-btn{color:#fff;opacity:.92;pointer-events:auto}.chat-header-floating .header-action-btn:hover{background:hsla(0,0%,100%,.22);color:#fff;opacity:1}.header-title.header-title-lg{font-size:18px;font-weight:700;letter-spacing:-.02em}.header-content{align-items:center;display:flex;gap:12px}.header-avatar{border:none;border-radius:0;box-shadow:none;max-height:32px;max-width:120px;object-fit:contain}.header-title{font-size:16px;font-weight:600;letter-spacing:-.01em}.header-status{align-items:center;display:flex;font-size:11px;gap:6px;opacity:.9}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(.85)}}.chat-body{background:var(--askly-bg);display:flex;flex:1;flex-direction:column;gap:10px;min-height:0;overflow-y:auto;padding:20px}.chat-body,.chat-footer textarea,.conversations-scrollable,.help-layout,.home-layout,.home-search-results{-webkit-overflow-scrolling:touch;overscroll-behavior:contain;scrollbar-color:var(--askly-scrollbar) transparent;scrollbar-width:thin}.chat-body:hover,.chat-footer textarea:hover,.conversations-scrollable:hover,.help-layout:hover,.home-layout:hover,.home-search-results:hover{scrollbar-color:var(--askly-scrollbar-hover) transparent}.chat-body::-webkit-scrollbar,.chat-footer textarea::-webkit-scrollbar,.conversations-scrollable::-webkit-scrollbar,.help-layout::-webkit-scrollbar,.home-layout::-webkit-scrollbar,.home-search-results::-webkit-scrollbar{width:8px}.chat-body::-webkit-scrollbar-track,.chat-footer textarea::-webkit-scrollbar-track,.conversations-scrollable::-webkit-scrollbar-track,.help-layout::-webkit-scrollbar-track,.home-layout::-webkit-scrollbar-track,.home-search-results::-webkit-scrollbar-track{background:transparent}.chat-body::-webkit-scrollbar-thumb,.chat-footer textarea::-webkit-scrollbar-thumb,.conversations-scrollable::-webkit-scrollbar-thumb,.help-layout::-webkit-scrollbar-thumb,.home-layout::-webkit-scrollbar-thumb,.home-search-results::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:var(--askly-scrollbar);border:2px solid transparent;border-radius:10px}.chat-body::-webkit-scrollbar-thumb:hover,.chat-footer textarea::-webkit-scrollbar-thumb:hover,.conversations-scrollable::-webkit-scrollbar-thumb:hover,.help-layout::-webkit-scrollbar-thumb:hover,.home-layout::-webkit-scrollbar-thumb:hover,.home-search-results::-webkit-scrollbar-thumb:hover{background-color:var(--askly-scrollbar-hover)}.msg-wrapper{align-items:flex-end;animation:fadeIn .32s var(--askly-ease);display:flex;gap:8px}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.msg-wrapper.user{flex-direction:row-reverse}.msg-column{display:flex;flex-direction:column;gap:4px;max-width:78%;min-width:0}.msg-wrapper.user .msg-column{align-items:flex-end}.msg-avatar{align-items:center;align-self:flex-start;background:linear-gradient(145deg,var(--askly-accent),var(--askly-accent-strong));border-radius:50%;box-shadow:var(--askly-elev-1);color:var(--askly-accent-contrast);display:flex;flex-shrink:0;font-size:12px;font-weight:700;height:28px;justify-content:center;overflow:hidden;width:28px}.msg-avatar img{height:100%;object-fit:cover;width:100%}.msg-avatar.msg-avatar-hidden{visibility:hidden}.msg{word-wrap:break-word;border-radius:18px;max-width:100%;padding:10px 14px;position:relative;width:fit-content}.msg,.msg-content{overflow-wrap:anywhere}.msg-content{font-size:13.5px;line-height:1.55}.msg-content p{margin:0 0 8px}.msg-content ol,.msg-content ul{margin:4px 0 8px;padding-left:20px}.msg-content li{margin-top:3px}.msg-content>:last-child{margin-bottom:0}.msg-content strong{font-weight:650}.msg-content code.inline-code{background:var(--askly-surface-3);border:1px solid var(--askly-border);border-radius:5px;padding:1px 5px}.msg-content code.inline-code,.msg-content pre{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.msg-content pre{background:var(--askly-surface);border:1px solid var(--askly-border);border-radius:8px;box-sizing:border-box;display:block;line-height:1.5;margin:6px 0 8px;max-width:100%;overflow-x:auto;padding:8px 10px;white-space:pre}.msg-content pre code{background:none;border:0;font:inherit;padding:0}.askly-chat-modal[data-askly-theme=dark] .msg.agent .msg-content pre{background:var(--askly-surface-2)}.msg.user .msg-content code.inline-code,.msg.user .msg-content pre{background:hsla(0,0%,100%,.18);border-color:hsla(0,0%,100%,.28);color:inherit}.msg.user{background:linear-gradient(145deg,var(--askly-accent),var(--askly-accent-strong));border-bottom-right-radius:6px;box-shadow:var(--askly-elev-1);color:var(--askly-accent-contrast)}.msg.agent{background:var(--askly-surface-2);border:1px solid var(--askly-border);border-bottom-left-radius:6px;color:var(--text-1)}.askly-chat-modal[data-askly-theme=dark] .msg.agent{background:var(--askly-surface)}.msg-time{font-size:10px;margin-top:5px;opacity:.6;text-align:right}.msg-reactions{display:flex;gap:2px;opacity:0;padding-left:4px;transform:translateY(-2px);transition:opacity .18s var(--askly-ease),transform .18s var(--askly-ease)}.msg-reactions:focus-within,.msg-wrapper:hover .msg-reactions{opacity:1;transform:translateY(0)}.msg-reaction-btn{all:unset;align-items:center;border-radius:7px;color:var(--text-4);cursor:pointer;display:flex;height:24px;justify-content:center;transition:background .15s,color .15s;width:26px}.msg-reaction-btn:hover{background:var(--askly-surface-2);color:var(--text-2)}.msg-reaction-btn.active{background:var(--askly-accent-soft);color:var(--askly-accent)}.quick-replies{animation:fadeIn .32s var(--askly-ease);display:flex;flex-wrap:wrap;gap:8px;margin:4px 0 2px 36px}.quick-reply-chip{all:unset;background:var(--askly-surface);border:1px solid var(--askly-border-strong);border-radius:999px;box-sizing:border-box;color:var(--askly-accent);cursor:pointer;font-size:12.5px;font-weight:500;line-height:1.2;max-width:100%;padding:8px 14px;transition:all .16s var(--askly-ease)}.quick-reply-chip:hover{background:var(--askly-accent-soft);border-color:var(--askly-accent);transform:translateY(-1px)}.typing-indicator{align-items:center;background:var(--askly-surface-2);border:1px solid var(--askly-border);border-radius:18px;border-bottom-left-radius:6px;display:flex;gap:4px;padding:12px 16px;width:fit-content}.typing-indicator span{animation:bounce 1.4s ease-in-out infinite both;background:var(--text-4);border-radius:50%;height:6px;width:6px}.typing-indicator span:first-child{animation-delay:-.32s}.typing-indicator span:nth-child(2){animation-delay:-.16s}@keyframes bounce{0%,80%,to{opacity:.4;transform:scale(0)}40%{opacity:1;transform:scale(1)}}.chat-footer{background:var(--askly-surface);border:1px solid var(--askly-border-strong);border-radius:var(--askly-radius-lg);box-shadow:var(--askly-elev-1);display:flex;flex-direction:column;flex-shrink:0;gap:6px;margin:10px 16px 12px;padding:10px 12px 8px;position:relative;transition:border-color .2s var(--askly-ease),box-shadow .2s var(--askly-ease)}.chat-footer:hover{border-color:var(--text-3)}.chat-footer:focus-within{border-color:var(--askly-accent);box-shadow:0 0 0 3px var(--askly-accent-ring)}.composer-input-row{align-items:stretch;display:flex;width:100%}.chat-footer textarea{background:transparent;border:none;border-radius:0;box-sizing:border-box;color:var(--text-1);display:block;flex:1;font-family:inherit;font-size:14px;line-height:20px;margin:0;max-height:120px;min-height:32px;min-width:0;outline:none;overflow-y:hidden;padding:6px 8px;resize:none;width:100%}.chat-footer textarea::placeholder{color:var(--text-4)}.chat-footer textarea:disabled{cursor:not-allowed;opacity:.6}.chat-screen,.chat-stream{display:flex;flex:1;flex-direction:column;min-height:0}.chat-stream{position:relative}.askly-jump-latest{align-items:center;animation:fadeIn .2s var(--askly-ease);background:var(--askly-surface);border:1px solid var(--askly-border-strong);border-radius:999px;bottom:12px;box-shadow:var(--askly-elev-2);box-sizing:border-box;color:var(--text-2);cursor:pointer;display:inline-flex;font-family:inherit;font-size:12px;font-weight:600;gap:6px;left:50%;line-height:1;padding:6px 12px;position:absolute;transform:translateX(-50%);white-space:nowrap;z-index:6}.askly-jump-latest:hover{border-color:var(--text-3);color:var(--text-1)}.askly-jump-badge{align-items:center;background:var(--askly-accent);border-radius:999px;box-sizing:border-box;color:var(--askly-accent-contrast);display:inline-flex;font-size:11px;height:18px;justify-content:center;min-width:18px;padding:0 5px}.composer-actions-row{align-items:center;display:flex;justify-content:space-between;width:100%}.composer-actions-left{align-items:center;display:flex;gap:2px}.voice-btn{align-items:center;background:none;border:none;border-radius:50%;color:var(--text-4);cursor:pointer;display:flex;flex-shrink:0;height:34px;justify-content:center;transition:all .2s;width:34px}.voice-btn:hover{background:var(--askly-accent-soft);color:var(--askly-accent)}.voice-btn.listening{animation:pulseRed 1.5s ease-in-out infinite;background:var(--askly-danger-bg);color:var(--askly-danger)}@keyframes pulseRed{0%,to{box-shadow:0 0 0 0 rgba(239,68,68,.4)}50%{box-shadow:0 0 0 8px rgba(239,68,68,0)}}.chat-footer.voice-active{border-color:var(--text-3);border-radius:999px;padding:8px 10px}.askly-voice{align-items:center;display:flex;gap:10px;height:44px}.askly-voice-meter{align-items:center;display:flex;flex:1;gap:3px;height:26px;justify-content:flex-end;min-width:0;overflow:hidden}.askly-voice-meter i{background:var(--text-1);border-radius:1px;display:block;flex-shrink:0;min-height:2px;width:2px}.askly-voice.transcribing .askly-voice-meter{opacity:.4}.askly-voice-status{clip:rect(0 0 0 0);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.askly-voice-time{color:var(--text-3);flex-shrink:0;font-size:12px;font-variant-numeric:tabular-nums}.askly-voice-btn{align-items:center;background:none;border:none;border-radius:50%;color:var(--text-1);cursor:pointer;display:flex;flex-shrink:0;height:40px;justify-content:center;padding:0;width:40px}.askly-voice-btn.done,.askly-voice-btn:hover{background:var(--askly-accent-soft)}.askly-voice-btn.done{box-shadow:inset 0 0 0 2px var(--askly-border-strong)}.askly-voice-btn.done:hover{box-shadow:inset 0 0 0 2px var(--text-3)}.askly-voice-btn.busy{cursor:default}.askly-voice-stop{background:var(--text-1);border-radius:3px;height:13px;width:13px}.askly-voice-spinner{animation:asklyVoiceSpin .8s linear infinite;border:2px solid var(--askly-border-strong);border-radius:50%;border-top-color:var(--text-1);height:16px;width:16px}@keyframes asklyVoiceSpin{to{transform:rotate(1turn)}}.askly-notice-action{background:none;border:none;color:inherit;cursor:pointer;font:inherit;font-weight:600;margin-left:8px;padding:0;text-decoration:underline}@media (prefers-reduced-motion:reduce){.askly-voice-spinner{animation-duration:2.4s}}.send-btn{align-items:center;background:linear-gradient(145deg,var(--askly-accent),var(--askly-accent-strong));border:none;border-radius:50%;box-shadow:var(--askly-elev-1);color:var(--askly-accent-contrast);cursor:pointer;display:flex;flex-shrink:0;height:36px;justify-content:center;transition:all .2s var(--askly-ease);width:36px}.send-btn:hover:not(:disabled){filter:brightness(1.06);transform:scale(1.08)}.send-btn:active:not(:disabled){transform:scale(.94)}.send-btn:disabled{box-shadow:none;cursor:not-allowed;opacity:.45}.footer-action-btn{align-items:center;background:none;border:none;border-radius:50%;color:var(--text-4);cursor:pointer;display:flex;flex-shrink:0;height:34px;justify-content:center;transition:all .2s;width:34px}.footer-action-btn.active,.footer-action-btn:hover{background:var(--askly-surface-2);color:var(--text-1)}.chat-powered-by{background:var(--askly-bg);border-top:1px solid var(--askly-border);color:var(--text-4);font-size:11px;padding:8px 16px;text-align:center}.chat-powered-by strong{color:var(--text-2);font-weight:600}.chat-terms-notice{align-items:center;background:var(--askly-bg);border-top:1px solid var(--askly-border);color:var(--text-4);display:flex;flex-shrink:0;font-size:10px;gap:4px;justify-content:center;padding:5px 10px;text-align:center;white-space:nowrap}.chat-terms-divider{color:var(--text-4);opacity:.5}.askly-powered-link,.askly-terms-link{color:var(--text-3);font-weight:600;text-decoration:none;transition:color .15s var(--askly-ease)}.askly-powered-link:hover,.askly-terms-link:hover{color:var(--askly-accent);text-decoration:underline}.askly-turnstile-wrapper{background:var(--askly-bg);border-bottom:1px solid var(--askly-border);border-top:1px solid var(--askly-border);display:flex;justify-content:center;margin:10px 0;padding:12px 16px}.askly-lead-card{background:var(--askly-surface-2);border:1px solid var(--askly-border-strong);border-radius:14px;display:flex;flex-direction:column;gap:8px;margin:10px 0;padding:12px 14px}.askly-lead-required{background:var(--askly-bg);border-bottom:none;border-left:none;border-radius:0;border-right:none;flex-shrink:0;margin:0}.askly-lead-copy{color:var(--text-2);font-size:12.5px;line-height:1.5}.askly-lead-row{align-items:center;display:flex;gap:8px}.askly-lead-row input{background:var(--askly-bg);border:1.5px solid var(--askly-border-strong);border-radius:999px;box-sizing:border-box;color:var(--text-1);flex:1;font-family:inherit;font-size:13px;height:38px;min-width:0;outline:none;padding:0 12px;transition:all .2s var(--askly-ease)}.askly-lead-row input::placeholder{color:var(--text-4)}.askly-lead-row input:focus{background:var(--askly-surface);border-color:var(--askly-accent);box-shadow:0 0 0 3px var(--askly-accent-ring)}.askly-lead-row input:disabled{cursor:not-allowed;opacity:.6}.askly-lead-submit{all:unset;background:var(--askly-accent);border-radius:999px;color:var(--askly-accent-contrast);cursor:pointer;flex-shrink:0;font-size:12.5px;font-weight:600;height:38px;padding:0 16px;text-align:center;transition:all .2s var(--askly-ease)}.askly-lead-submit:hover:not(:disabled){background:var(--askly-accent-strong)}.askly-lead-submit:disabled{cursor:not-allowed;opacity:.5}.askly-lead-error{color:#dc2626;font-size:11.5px;line-height:1.45}.askly-lead-dismiss{all:unset;align-self:flex-start;color:var(--text-4);cursor:pointer;font-size:11.5px;text-decoration:underline}.askly-lead-dismiss:hover{color:var(--text-2)}@media (min-width:601px){.askly-chat-modal.expanded{max-width:calc(100vw - 48px);width:min(700px,100vw - 48px)}}.home-layout{background:var(--askly-bg);gap:0;overflow-y:auto;padding:0}.home-hero,.home-layout{display:flex;flex-direction:column}.home-hero{background:radial-gradient(120% 90% at 15% 0,color-mix(in srgb,var(--askly-accent) 94%,#fff) 0,transparent 55%),linear-gradient(150deg,var(--askly-accent),var(--askly-accent-strong));color:var(--askly-accent-contrast);flex-shrink:0;gap:4px;overflow:hidden;padding:34px 24px 28px;position:relative}.home-hero:before{inset:0;mask-image:linear-gradient(180deg,#000 40%,transparent);-webkit-mask-image:linear-gradient(180deg,#000 40%,transparent)}.home-hero:after,.home-hero:before{content:"";pointer-events:none;position:absolute}.home-hero:after{background:linear-gradient(120deg,hsla(0,0%,100%,.18),transparent 60%);height:160%;right:-20%;top:-40%;transform:rotate(18deg);width:70%}.home-hero>*{position:relative;z-index:1}.home-hero-brand{align-items:center;display:flex;gap:9px;margin-bottom:18px}.home-hero-logo{max-height:34px;max-width:124px;object-fit:contain;object-position:left center;opacity:.96}.home-hero-title{font-size:23px;font-weight:700;letter-spacing:-.02em;line-height:1.2}.home-hero-wave{animation:wave 2.4s ease-in-out infinite;display:inline-block;transform-origin:70% 70%}@keyframes wave{0%,60%,to{transform:rotate(0deg)}10%{transform:rotate(14deg)}20%{transform:rotate(-8deg)}30%{transform:rotate(14deg)}40%{transform:rotate(-4deg)}50%{transform:rotate(10deg)}}.home-hero-subtitle{font-size:23px;font-weight:700;letter-spacing:-.02em;line-height:1.2;opacity:.72}.home-content{display:flex;flex-direction:column;flex-shrink:0;gap:12px;margin-top:0;padding:16px 16px 20px;position:relative;z-index:2}.home-action-card{all:unset;align-items:center;background:var(--askly-surface);border:1px solid var(--askly-border);border-radius:var(--askly-radius-md);box-shadow:var(--askly-elev-2);box-sizing:border-box;cursor:pointer;display:flex;gap:12px;justify-content:space-between;padding:16px 18px;transition:transform .2s var(--askly-ease),box-shadow .2s var(--askly-ease),border-color .2s var(--askly-ease)}.home-action-card:hover{border-color:var(--askly-border-strong);box-shadow:var(--askly-elev-3);transform:translateY(-2px)}.card-title{color:var(--text-1);font-size:14.5px;font-weight:600;margin-bottom:2px}.card-desc{color:var(--text-3);font-size:12px;line-height:1.4}.card-icon-chip{align-items:center;background:var(--askly-accent-soft);border-radius:12px;color:var(--askly-accent);display:flex;flex-shrink:0;height:40px;justify-content:center;width:40px}.faq-card{align-items:stretch;cursor:default;flex-direction:column;gap:10px}.faq-card:hover{border-color:var(--askly-border);box-shadow:var(--askly-elev-2);transform:none}.faq-card-head{align-items:center;display:flex;justify-content:space-between}.faq-count-badge{background:var(--askly-accent-soft);border-radius:999px;color:var(--askly-accent);font-size:10px;font-weight:600;padding:3px 8px}.faq-list{display:flex;flex-direction:column;gap:6px}.faq-item{background:var(--askly-surface-2);border:1px solid var(--askly-border);border-radius:var(--askly-radius-sm);overflow:hidden;transition:border-color .2s var(--askly-ease),background .2s var(--askly-ease)}.faq-item.open{background:var(--askly-surface);border-color:var(--askly-accent)}.faq-question{all:unset;align-items:center;box-sizing:border-box;color:var(--text-1);cursor:pointer;display:flex;font-size:12.5px;font-weight:500;gap:8px;justify-content:space-between;padding:10px 12px;text-align:left;width:100%}.faq-chevron{color:var(--text-3);flex-shrink:0;transition:transform .22s var(--askly-ease)}.faq-item.open .faq-chevron{color:var(--askly-accent);transform:rotate(180deg)}.faq-answer{border-top:1px solid var(--askly-border);color:var(--text-2);font-size:12px;line-height:1.55;padding:8px 12px 12px}.faq-ask-link{all:unset;align-items:center;color:var(--askly-accent);cursor:pointer;display:inline-flex;font-size:11.5px;font-weight:600;gap:4px;margin-top:10px}.faq-ask-link:hover{text-decoration:underline}.home-search-card{background:var(--askly-surface);border:1px solid var(--askly-border);border-radius:var(--askly-radius-md);box-shadow:var(--askly-elev-2);padding:16px 18px}.home-search-input-wrapper{align-items:center;display:flex;position:relative;width:100%}.home-search-input-wrapper input{background:var(--askly-bg);border:1.5px solid var(--askly-border-strong);border-radius:999px;box-sizing:border-box;color:var(--text-1);font-size:13px;height:40px;outline:none;padding:0 12px 0 36px;transition:all .2s var(--askly-ease);width:100%}.home-search-input-wrapper input::placeholder{color:var(--text-4)}.home-search-input-wrapper input:focus{background:var(--askly-surface);border-color:var(--askly-accent);box-shadow:0 0 0 3px var(--askly-accent-ring)}.search-icon-svg{color:var(--text-4);left:13px;pointer-events:none;position:absolute}.search-loader{animation:spin .6s linear infinite;border:2px solid var(--askly-border-strong);border-radius:50%;border-top-color:var(--askly-accent);height:14px;position:absolute;right:12px;width:14px}@keyframes spin{to{transform:rotate(1turn)}}.home-search-results{border-top:1px solid var(--askly-border);display:flex;flex-direction:column;gap:4px;margin-top:10px;max-height:200px;overflow-y:auto;padding-top:10px}.search-result-item{all:unset;align-items:center;border-radius:var(--askly-radius-sm);box-sizing:border-box;color:var(--text-2);cursor:pointer;display:flex;font-size:13px;gap:8px;padding:9px 10px;text-align:left;transition:background .15s,color .15s;width:100%}.search-result-item:hover{background:var(--askly-surface-2);color:var(--text-1)}.search-result-title{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.no-search-results{color:var(--text-4);font-size:12.5px;padding:14px;text-align:center}.recommended-articles{border-top:1px solid var(--askly-border);margin-top:12px;padding-top:12px}.recommended-articles-head{color:var(--text-3);font-size:10.5px;font-weight:700;letter-spacing:.6px;margin-bottom:8px;text-transform:uppercase}.recommended-articles-list{display:flex;flex-direction:column;gap:6px}.rec-article-row{all:unset;align-items:center;background:var(--askly-surface-2);border:1px solid var(--askly-border);border-radius:var(--askly-radius-sm);box-sizing:border-box;cursor:pointer;display:flex;gap:8px;padding:9px 11px;transition:all .16s var(--askly-ease)}.rec-article-row:hover{background:var(--askly-accent-soft);border-color:var(--askly-accent)}.rec-article-icon{color:var(--text-3);flex-shrink:0}.rec-article-row:hover .rec-article-icon{color:var(--askly-accent)}.rec-article-title{color:var(--text-1);flex:1;font-size:12px;font-weight:500;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}.rec-article-chevron{color:var(--text-4);flex-shrink:0}.rec-article-skeleton{background:var(--askly-surface-2);border-radius:var(--askly-radius-sm);gap:8px;padding:9px 11px}.explore-search,.rec-article-skeleton{align-items:center;border:1px solid var(--askly-border);display:flex}.explore-search{background:var(--askly-surface);border-radius:999px;box-shadow:var(--askly-elev-2);box-sizing:border-box;height:46px;padding:0 14px;position:relative;transition:border-color .2s var(--askly-ease),box-shadow .2s var(--askly-ease);width:100%}.explore-search:focus-within{border-color:var(--askly-accent);box-shadow:0 0 0 3px var(--askly-accent-ring),var(--askly-elev-2)}.explore-search-icon{color:var(--text-4);flex-shrink:0}.explore-search input{background:transparent;border:none;color:var(--text-1);flex:1;font-family:inherit;font-size:13.5px;min-width:0;outline:none;padding:0 10px}.explore-search input::placeholder{color:var(--text-4)}.explore-search .search-loader{margin-left:auto;position:static}.explore-search-panel{background:var(--askly-surface);border:1px solid var(--askly-border);border-radius:var(--askly-radius-md);box-shadow:var(--askly-elev-1);display:flex;flex-direction:column;gap:4px;padding:6px}.explore-cta{all:unset;align-items:center;background:linear-gradient(135deg,var(--askly-accent),var(--askly-accent-strong));border-radius:var(--askly-radius-md);box-shadow:var(--askly-elev-2);box-sizing:border-box;color:var(--askly-accent-contrast);cursor:pointer;display:flex;gap:13px;overflow:hidden;padding:16px;position:relative;transition:transform .2s var(--askly-ease),box-shadow .2s var(--askly-ease)}.explore-cta:hover{box-shadow:var(--askly-elev-3);transform:translateY(-2px)}.explore-cta:active{transform:scale(.99)}.explore-cta-orbs{background:radial-gradient(60px 60px at 88% -10%,hsla(0,0%,100%,.28),transparent 70%),radial-gradient(80px 80px at 108% 120%,hsla(0,0%,100%,.16),transparent 70%);inset:0;pointer-events:none;position:absolute}.explore-cta-icon{align-items:center;backdrop-filter:blur(4px);background:hsla(0,0%,100%,.18);border-radius:13px;display:flex;flex-shrink:0;height:42px;justify-content:center;position:relative;width:42px}.explore-cta-icon svg{animation:askly-twinkle 3.2s var(--askly-ease) infinite}@keyframes askly-twinkle{0%,to{opacity:1;transform:scale(1) rotate(0deg)}50%{opacity:.75;transform:scale(1.12) rotate(8deg)}}.explore-cta-text{display:flex;flex-direction:column;gap:2px;min-width:0;position:relative}.explore-cta-title{font-size:15px;font-weight:700;letter-spacing:-.01em}.explore-cta-sub{font-size:11.5px;line-height:1.35;opacity:.82}.explore-cta-arrow{align-items:center;display:flex;margin-left:auto;opacity:.85;position:relative;transition:transform .2s var(--askly-ease)}.explore-cta:hover .explore-cta-arrow{opacity:1;transform:translateX(3px)}.explore-tiles{display:grid;gap:10px;grid-template-columns:1fr 1fr}.explore-tile{all:unset;background:var(--askly-surface);border:1px solid var(--askly-border);border-radius:var(--askly-radius-md);box-shadow:var(--askly-elev-1);box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;gap:3px;padding:14px;transition:transform .18s var(--askly-ease),box-shadow .18s var(--askly-ease),border-color .18s var(--askly-ease)}.explore-tile:hover{border-color:var(--askly-border-strong);box-shadow:var(--askly-elev-2);transform:translateY(-2px)}.explore-tile-icon{align-items:center;background:var(--askly-accent-soft);border-radius:11px;color:var(--askly-accent);display:flex;height:36px;justify-content:center;margin-bottom:5px;width:36px}.explore-tile-title{color:var(--text-1);font-size:13.5px;font-weight:600}.explore-tile-sub{color:var(--text-3);font-size:11px}.explore-section{display:flex;flex-direction:column;gap:8px}.explore-section-head{align-items:center;color:var(--text-3);display:flex;font-size:11px;font-weight:700;gap:8px;letter-spacing:.6px;padding:0 2px;text-transform:uppercase}.explore-section-count{background:var(--askly-accent-soft);border-radius:999px;color:var(--askly-accent);font-size:10px;font-weight:700;letter-spacing:0;padding:1px 7px;text-transform:none}.explore-faq-list{background:var(--askly-surface);border:1px solid var(--askly-border);border-radius:var(--askly-radius-md);box-shadow:var(--askly-elev-1);display:flex;flex-direction:column;overflow:hidden}.explore-faq{border-bottom:1px solid var(--askly-border)}.explore-faq:last-child{border-bottom:none}.explore-faq-q{all:unset;align-items:center;box-sizing:border-box;color:var(--text-1);cursor:pointer;display:flex;font-size:13px;font-weight:500;gap:10px;justify-content:space-between;padding:13px 14px;transition:background .15s;width:100%}.explore-faq-q:hover{background:var(--askly-surface-2)}.explore-faq-chevron{color:var(--text-4);flex-shrink:0;transition:transform .22s var(--askly-ease),color .15s}.explore-faq.open .explore-faq-q{background:var(--askly-surface-2)}.explore-faq.open .explore-faq-chevron{color:var(--askly-accent);transform:rotate(180deg)}.explore-faq-a{background:var(--askly-surface-2);color:var(--text-2);font-size:12.5px;line-height:1.55;padding:0 14px 14px}.explore-faq-a>div:first-child{padding-top:2px}.askly-skeleton{background:var(--askly-surface-3);border-radius:6px;display:block;overflow:hidden;position:relative}.askly-skeleton:after{animation:shimmer 1.4s infinite;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--text-4) 22%,transparent),transparent);content:"";inset:0;position:absolute;transform:translateX(-100%)}@keyframes shimmer{to{transform:translateX(100%)}}.askly-skeleton-line{height:10px;width:100%}.askly-skeleton-chip{border-radius:5px;flex-shrink:0;height:16px;width:16px}.askly-empty-state{align-items:center;display:flex;flex-direction:column;gap:6px;margin:auto 0;padding:44px 24px;text-align:center}.askly-empty-icon{align-items:center;background:var(--askly-accent-soft);border-radius:16px;color:var(--askly-accent);display:flex;height:52px;justify-content:center;margin-bottom:8px;width:52px}.askly-empty-title{color:var(--text-1);font-size:14px;font-weight:600}.askly-empty-desc{color:var(--text-3);font-size:12px;line-height:1.5;max-width:240px}.chat-nav-tabs{background:var(--askly-surface);border-top:1px solid var(--askly-border);display:flex;flex-shrink:0;gap:6px;padding:8px 10px calc(8px + env(safe-area-inset-bottom, 0px))}.nav-tab-btn{all:unset;align-items:center;border-radius:var(--askly-radius-md);box-sizing:border-box;color:var(--text-4);cursor:pointer;display:flex;flex:1;flex-direction:column;font-size:11px;font-weight:500;gap:4px;padding:7px 6px;transition:color .2s var(--askly-ease),background .2s var(--askly-ease)}.nav-tab-btn:hover{color:var(--text-2)}.nav-tab-btn:hover .nav-tab-icon{transform:translateY(-1px)}.nav-tab-icon{align-items:center;display:flex;justify-content:center;transition:transform .2s var(--askly-ease)}.nav-tab-btn.active{color:var(--askly-accent);font-weight:600}.nav-tab-btn.active .nav-tab-icon svg{animation:navTabPop .3s var(--askly-ease)}@keyframes navTabPop{0%{transform:scale(.85)}55%{transform:scale(1.1)}to{transform:scale(1)}}.askly-emoji-picker{background:var(--askly-surface);border:1px solid var(--askly-border-strong);border-radius:var(--askly-radius-md);bottom:calc(100% + 8px);box-shadow:var(--askly-elev-3);display:grid;gap:4px;grid-template-columns:repeat(6,1fr);height:180px;overflow-y:auto;padding:10px;position:absolute;right:20px;width:240px;z-index:10}.emoji-item{all:unset;align-items:center;border-radius:8px;cursor:pointer;display:flex;font-size:18px;justify-content:center;padding:4px;transition:background .15s}.emoji-item:hover{background:var(--askly-surface-2)}.header-action-btn{align-items:center;background:none;border:none;border-radius:8px;color:var(--askly-header-fg,var(--text-2));cursor:pointer;display:flex;height:28px;justify-content:center;opacity:.7;transition:all .15s;width:28px}.header-action-btn:hover{background:rgba(0,0,0,.06);color:var(--askly-header-fg,var(--text-1));opacity:1}.askly-chat-modal[data-askly-theme=dark] .header-action-btn:hover{background:hsla(0,0%,100%,.14)}.header-back-arrow-btn{align-items:center;background:none;border:none;border-radius:50%;color:var(--askly-header-fg,var(--text-1));cursor:pointer;display:flex;justify-content:center;margin-right:-4px;outline:none;padding:4px;transition:background .2s}.header-back-arrow-btn:hover{background:rgba(0,0,0,.06)}.askly-chat-modal[data-askly-theme=dark] .header-back-arrow-btn:hover{background:hsla(0,0%,100%,.14)}.help-layout{background:var(--askly-bg);overflow-x:hidden;overflow-y:auto;padding:20px}.help-collections{display:flex;flex-direction:column;gap:12px}.help-collection-card{all:unset;align-items:center;background:var(--askly-surface);border:1px solid var(--askly-border);border-radius:var(--askly-radius-md);box-shadow:var(--askly-elev-1);box-sizing:border-box;cursor:pointer;display:flex;gap:12px;justify-content:space-between;padding:14px;text-align:left;transition:transform .16s var(--askly-ease),box-shadow .16s var(--askly-ease),border-color .16s var(--askly-ease)}.help-collection-card:not(.is-skeleton):hover{border-color:var(--askly-border-strong);box-shadow:var(--askly-elev-2);transform:translateY(-2px)}.help-collection-left{align-items:flex-start;display:flex;gap:12px;min-width:0}.help-collection-icon{align-items:center;background:linear-gradient(145deg,var(--askly-accent),var(--askly-accent-strong));box-shadow:var(--askly-elev-1);color:#fff;display:flex;justify-content:center}.help-collection-icon,.help-collection-icon-skel{border-radius:10px;flex-shrink:0;height:36px;width:36px}.help-collection-text{display:flex;flex-direction:column;gap:3px;min-width:0}.help-collection-title{color:var(--text-1);font-size:13.5px;font-weight:600}.help-collection-desc{color:var(--text-3);font-size:11.5px;line-height:1.4}.help-collection-count{color:var(--askly-accent);font-size:10.5px;font-weight:600;margin-top:3px}.help-collection-chevron{color:var(--text-4);flex-shrink:0}.help-articles-list{display:flex;flex-direction:column;gap:10px}.help-article-row{all:unset;align-items:center;background:var(--askly-surface);border:1px solid var(--askly-border);border-radius:var(--askly-radius-md);box-shadow:var(--askly-elev-1);box-sizing:border-box;cursor:pointer;display:flex;gap:12px;justify-content:space-between;padding:14px 16px;text-align:left;transition:transform .18s var(--askly-ease),box-shadow .18s var(--askly-ease),border-color .18s var(--askly-ease);width:100%}.help-article-row:hover{border-color:var(--askly-border-strong);box-shadow:var(--askly-elev-2);transform:translateY(-1px)}.help-article-row>div:first-child{flex:1;min-width:0}.article-row-title{color:var(--text-1);font-size:13.5px;font-weight:600;overflow-wrap:anywhere}.article-row-preview{-webkit-line-clamp:2;-webkit-box-orient:vertical;color:var(--text-3);display:-webkit-box;font-size:12px;line-height:1.4;overflow:hidden;overflow-wrap:anywhere}.help-collection-desc,.help-collection-title{overflow-wrap:anywhere}.article-row-chevron{color:var(--text-4);flex-shrink:0;transition:color .15s}.help-article-row:hover .article-row-chevron{color:var(--askly-accent)}.help-article-reader{background:transparent;border:none;border-radius:0;box-shadow:none;padding:0}.article-breadcrumb{align-items:center;color:var(--text-3);display:flex;font-size:11px;gap:6px;margin-bottom:12px}.article-breadcrumb-link{all:unset;color:var(--askly-accent);cursor:pointer;font-weight:600}.article-breadcrumb-link:hover{text-decoration:underline}.article-breadcrumb-type{text-transform:capitalize}.help-back-btn{all:unset;align-items:center;color:var(--text-3);cursor:pointer;display:inline-flex;font-size:12px;font-weight:600;gap:4px;transition:color .15s}.help-back-btn:hover{color:var(--askly-accent)}.help-article-heading{color:var(--text-1);font-size:19px;font-weight:700;letter-spacing:-.01em;line-height:1.32;margin-bottom:10px}.article-author-bar{align-items:center;border-bottom:1px solid var(--askly-border);display:flex;gap:10px;margin-bottom:18px;padding-bottom:14px}.article-author-avatar{border:1px solid var(--askly-border);border-radius:50%;flex-shrink:0;height:30px;object-fit:cover;width:30px}.article-author-text{display:flex;flex-direction:column;gap:2px}.article-author-name{color:var(--text-1);font-size:11.5px;font-weight:600}.article-author-meta{color:var(--text-3);font-size:10.5px}.help-article-body{color:var(--text-2);font-size:13.5px;line-height:1.65;overflow-wrap:anywhere}.help-article-body h1,.help-article-body h2,.help-article-body h3{color:var(--text-1);font-weight:700;letter-spacing:-.01em;margin:18px 0 8px}.help-article-body p{margin:0 0 12px}.help-article-body ol,.help-article-body ul{margin:0 0 12px;padding-left:22px}.help-article-body li{margin-top:4px}.help-article-body pre{background:var(--askly-surface-2);border:1px solid var(--askly-border);border-radius:8px;box-sizing:border-box;display:block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.5;margin:0 0 12px;max-width:100%;overflow-x:auto;padding:10px 12px;white-space:pre}.help-article-body pre code{background:none;border:0;font:inherit;padding:0}.help-article-body blockquote{border-left:3px solid var(--askly-border-strong);color:var(--text-3);margin:0 0 12px;padding:2px 0 2px 12px}.help-article-body code.inline-code{background:var(--askly-surface-2);border:1px solid var(--askly-border);border-radius:5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;padding:2px 6px}.article-feedback{border-top:1px solid var(--askly-border);display:flex;flex-direction:column;gap:12px;margin-top:24px;padding-top:16px}.article-feedback-title{color:var(--text-1);font-size:12.5px;font-weight:600;text-align:center}.article-feedback-thanks{background:var(--askly-success-bg);border:1px solid color-mix(in srgb,var(--askly-success) 25%,transparent);border-radius:var(--askly-radius-sm);color:var(--askly-success);font-size:12px;font-weight:600;padding:10px 14px;text-align:center}.article-feedback-options{display:flex;gap:10px;justify-content:center}.article-feedback-btn{all:unset;align-items:center;background:var(--askly-surface-2);border:1px solid var(--askly-border);border-radius:var(--askly-radius-sm);color:var(--text-1);cursor:pointer;display:inline-flex;font-size:12px;font-weight:500;gap:6px;padding:8px 14px;transition:all .15s var(--askly-ease)}.article-feedback-btn:hover{background:var(--askly-accent-soft);border-color:var(--askly-accent)}.article-handoff{all:unset;align-items:center;background:var(--askly-accent-soft);border:1px solid color-mix(in srgb,var(--askly-accent) 40%,transparent);border-radius:var(--askly-radius-sm);box-sizing:border-box;cursor:pointer;display:flex;gap:10px;justify-content:space-between;margin-top:10px;padding:11px 13px;transition:all .16s var(--askly-ease)}.article-handoff:hover{background:color-mix(in srgb,var(--askly-accent) 16%,transparent);border-color:var(--askly-accent)}.article-handoff-text{display:flex;flex-direction:column;gap:2px}.article-handoff-title{align-items:center;color:var(--text-1);display:inline-flex;font-size:12px;font-weight:600;gap:6px}.article-handoff-title svg{color:var(--askly-accent)}.article-handoff-desc{color:var(--text-3);font-size:11px}.article-handoff-chevron{color:var(--askly-accent);flex-shrink:0}.help-catalog-intro{color:var(--text-4);padding:40px 20px;text-align:center}.message-inline-image{border:1px solid var(--askly-border);border-radius:10px;margin-top:6px;max-width:100%}.message-inline-link{color:inherit;font-weight:500;text-decoration:underline}.msg.agent .message-inline-link{color:var(--askly-link)}.conversations-list-container{background:var(--askly-bg);box-sizing:border-box;display:flex;flex:1;flex-direction:column;min-height:0;overflow:hidden;padding:20px}.conversations-scrollable{display:flex;flex:1;flex-direction:column;gap:8px;margin-bottom:16px;min-height:0;overflow-y:auto;padding-right:2px}.conversation-list-item{all:unset;align-items:center;background:var(--askly-surface);border:1px solid var(--askly-border);border-radius:var(--askly-radius-md);box-shadow:var(--askly-elev-1);box-sizing:border-box;cursor:pointer;display:flex;justify-content:space-between;padding:12px 14px;transition:transform .18s var(--askly-ease),box-shadow .18s var(--askly-ease),border-color .18s var(--askly-ease);width:100%}.conversation-list-item:hover{border-color:var(--askly-border-strong);box-shadow:var(--askly-elev-2);transform:translateY(-1px)}.conversation-item-left{align-items:center;display:flex;gap:12px;overflow:hidden;text-align:left}.conversation-item-icon{align-items:center;background:var(--askly-surface-2);border:1px solid var(--askly-border);border-radius:50%;display:flex;flex-shrink:0;font-size:16px;height:36px;justify-content:center;object-fit:cover;width:36px}.conversation-item-details{align-items:flex-start;display:flex;flex-direction:column;gap:2px;overflow:hidden}.conversation-item-title{color:var(--text-1);font-size:13px;font-weight:600}.conversation-item-preview{color:var(--text-3);font-size:11.5px;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conversation-item-right{align-items:center;color:var(--text-4);display:flex;flex-shrink:0;gap:6px}.conversation-item-time{font-size:10px}.start-new-chat-btn{all:unset;align-items:center;background:linear-gradient(145deg,var(--askly-accent),var(--askly-accent-strong));border-radius:var(--askly-radius-md);box-shadow:var(--askly-elev-2);box-sizing:border-box;color:var(--askly-accent-contrast);cursor:pointer;display:flex;flex-shrink:0;font-size:13.5px;font-weight:600;height:44px;justify-content:center;text-align:center;transition:transform .18s var(--askly-ease),box-shadow .18s var(--askly-ease),filter .18s var(--askly-ease);width:100%}.start-new-chat-btn:hover{box-shadow:var(--askly-elev-3);filter:brightness(1.05);transform:translateY(-1px)}.start-new-chat-btn:active{transform:scale(.98)}.askly-greeting{-webkit-font-smoothing:antialiased;animation:asklyGreetingIn .32s var(--askly-ease);bottom:98px;display:flex;flex-direction:column;font-family:var(--askly-font);gap:8px;max-width:min(300px,calc(100vw - 48px));position:fixed;z-index:99998}.askly-greeting-right{align-items:flex-end;right:24px}.askly-greeting-left{align-items:flex-start;left:24px}@keyframes asklyGreetingIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.askly-greeting-card{background:var(--askly-surface);border:1px solid var(--askly-border);border-radius:16px;box-shadow:var(--askly-elev-3);color:var(--text-1);position:relative}.askly-greeting-body{all:unset;align-items:center;border-radius:16px;box-sizing:border-box;color:inherit;cursor:pointer;display:flex;font-size:13.5px;gap:10px;line-height:1.45;padding:12px 34px 12px 14px}.askly-greeting-body:focus-visible,.askly-greeting-chip:focus-visible,.askly-greeting-close:focus-visible{outline:2px solid var(--askly-accent);outline-offset:2px}.askly-greeting-avatar{border-radius:50%;flex-shrink:0;height:28px;object-fit:cover;width:28px}.askly-greeting-close{all:unset;align-items:center;border-radius:50%;box-sizing:border-box;color:var(--text-3);cursor:pointer;display:flex;height:24px;justify-content:center;position:absolute;right:6px;top:6px;width:24px}.askly-greeting-close:hover{background:var(--askly-surface-2);color:var(--text-1)}.askly-greeting-chips{align-items:inherit;display:flex;flex-direction:column;gap:6px}.askly-greeting-chip{box-shadow:var(--askly-elev-1,0 1px 2px rgba(15,23,42,.08))}@media (max-width:600px){.askly-chat-modal,.askly-chat-modal.expanded{border:none!important;border-radius:0!important;bottom:0!important;height:100dvh!important;left:0!important;max-height:100dvh!important;max-width:100vw!important;right:0!important;width:100vw!important}.chat-header{border-radius:0!important}.askly-chat-button{bottom:16px;right:16px}.askly-greeting{bottom:88px;max-width:calc(100vw - 32px)}.askly-greeting-right{right:16px}.askly-greeting-left{left:16px}.askly-greeting-chips{display:none}.askly-greeting-text{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.askly-chat-button.open{display:none}}@media (prefers-reduced-motion:reduce){.askly-chat-modal,.askly-greeting,.askly-jump-latest,.askly-skeleton:after,.home-hero-wave,.msg-wrapper,.quick-replies{animation:none!important}.askly-chat-button,.conversation-list-item,.help-article-row,.home-action-card,.send-btn{transition:none!important}}.askly-composer-notice{padding:6px 16px}';const De="askly-widget";let Re,Ue;let Oe=null,Le=null,Pe=0,Ve=!1;const Fe=(...e)=>{Ve&&console.log("[Askly]",...e)},He={init:(t={})=>{Ve=!!t.debug,Fe("Initializing...");const a=t.orgServerRoute||"https://api.askly.co.in/api/messages/widget",r=t.appId||t.widgetId||t.orgId;if(Ue=r,r||console.error("[Askly] Missing required `appId`. The widget cannot load without it."),te("undefined"!=typeof window?window.location.pathname:"",t.includePaths,t.excludePaths)||Fe("Hidden on this path until navigation allows it."),document.querySelector(De))return void console.warn("[Askly] Widget already initialized on this page; ignoring duplicate init().");const n=document.createElement(De),o=n.attachShadow({mode:"open"});!function(e){if(void 0===Re)try{Re=new CSSStyleSheet,Re.replaceSync($e)}catch{Re=null}if(Re&&"adoptedStyleSheets"in e)try{return void(e.adoptedStyleSheets=[Re])}catch{}const t=document.createElement("style");t.textContent=$e,e.appendChild(t)}(o);const s=document.createElement("div");o.appendChild(s);const l=document.createElement("div");l.id="askly-turnstile-container",l.slot="turnstile",n.appendChild(l),document.body.appendChild(n),ee();const i=Q(s);i.render(e.createElement(_e,{...t,orgId:r,orgServerRoute:a,resetGeneration:xe(),greetingStartedAt:Pe||Date.now()})),Oe=i,Le=n,Fe("ChatWidget rendered."),t.userId&&he({userId:t.userId,hash:t.signature,timestamp:t.timestamp})},identify:e=>{e&&e.userId?he(e):console.error("[Askly] identify() requires a `userId`.")},reset:()=>{me=null,pe(Ue||"detect"),ye+=1,fe.forEach(e=>{try{e()}catch(e){console.error("[Askly] reset listener failed:",e)}})},shutdown:()=>{He.reset(),He.unmount()},unmount:()=>{if(Oe){try{Oe.unmount()}catch{}Oe=null}Z();const e=Le||document.querySelector(De);e&&e.remove(),Le=null},open:()=>J({type:"open"}),close:()=>J({type:"close"}),toggle:()=>J({type:"toggle"}),show:()=>J({type:"open"}),hide:()=>J({type:"close"}),isOpen:()=>H.open,getUnreadCount:()=>H.unread,getVisitorId:()=>H.visitorId,on:(e,t)=>K(e,t),off:(e,t)=>X(e,t),once:(e,t)=>W(e,t),ready:()=>new Promise(e=>{H.ready?e():W("ready",()=>e())}),showSpace:e=>J({type:"showSpace",space:e}),showNewMessage:e=>J({type:"showNewMessage",text:e}),sendMessage:e=>J({type:"sendMessage",text:e}),showArticle:e=>J({type:"showArticle",articleId:e}),startVoiceInput:()=>J({type:"startVoiceInput"}),stopVoiceInput:()=>J({type:"stopVoiceInput"}),update:e=>J({type:"update",config:e})};if("undefined"!=typeof window){const e=window,t=e.Askly&&3===e.Askly.v&&Array.isArray(e.Askly.q)?e.Askly:void 0;if(t){const e=t.q||[];t.q=null,Pe=t._t||0,t._unpaint&&t._unpaint(),Object.keys(He).forEach(e=>{t[e]=He[e]}),e.filter(e=>"on"===e[0]||"once"===e[0]).forEach(([e,t])=>He[e](...t)),e.filter(e=>"on"!==e[0]&&"once"!==e[0]).forEach(([e,t])=>{try{He[e](...t)}catch(t){console.error(`[Askly] ${e}() failed:`,t)}});const a=t._r;t._r=[],a.length&&He.ready().then(()=>a.forEach(e=>e()))}else e.Askly||(e.Askly=He)}
|