@eduzz-automacoes/webchat-widget 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -2
- package/dist/eduzz-webchat.cjs +5 -5
- package/dist/eduzz-webchat.js +641 -498
- package/dist/index.d.ts +264 -112
- package/dist/style.css +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,139 +1,291 @@
|
|
|
1
|
-
import type { CSSProperties, ReactElement } from
|
|
1
|
+
import type { CSSProperties, ReactElement } from "react";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
export type
|
|
5
|
-
|
|
6
|
-
export type
|
|
7
|
-
|
|
8
|
-
export type
|
|
3
|
+
/** Web Storage backend used to persist session/conversation state locally. */
|
|
4
|
+
export type StorageLocation = "localStorage" | "sessionStorage";
|
|
5
|
+
/** Anchor corner of the widget on the screen. */
|
|
6
|
+
export type WebchatPosition = "bottom-right" | "bottom-left" | "top-left";
|
|
7
|
+
/** Base color scheme. */
|
|
8
|
+
export type WebchatThemeMode = "light" | "dark";
|
|
9
|
+
/** Botpress surface style: opaque (`solid`) or translucent (`soft`). */
|
|
10
|
+
export type WebchatThemeVariant = "solid" | "soft";
|
|
11
|
+
/** Header style: opaque (`solid`) or frosted-glass (`glass`). */
|
|
12
|
+
export type WebchatHeaderVariant = "solid" | "glass";
|
|
13
|
+
/** Backend that drives the session: native Botpress or the Eduzz Service Hub. */
|
|
14
|
+
export type WebchatSessionMode = "botpress" | "service-hub";
|
|
9
15
|
|
|
16
|
+
/** Static credentials identifying a webchat user. */
|
|
10
17
|
export interface WebchatUserCredentials {
|
|
11
|
-
|
|
12
|
-
|
|
18
|
+
/** Webchat user ID. */
|
|
19
|
+
userId: string;
|
|
20
|
+
/** Webchat user token (authenticates requests to the Webchat API). */
|
|
21
|
+
userToken: string;
|
|
13
22
|
}
|
|
14
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Credentials for an authenticated webchat session.
|
|
26
|
+
*
|
|
27
|
+
* The Webchat token never reaches the frontend — the product only receives these
|
|
28
|
+
* fields, generated by the product's own backend from the session created in the Webchat API.
|
|
29
|
+
*/
|
|
30
|
+
export interface WebchatSession {
|
|
31
|
+
/** Webchat user ID. */
|
|
32
|
+
userId: string;
|
|
33
|
+
/** Webchat user token. */
|
|
34
|
+
userToken: string;
|
|
35
|
+
/** Session expiration as epoch (ms). The widget renews the session shortly before this. */
|
|
36
|
+
expiresAt: number;
|
|
37
|
+
/** Conversation to open for this session (optional). */
|
|
38
|
+
conversationId?: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Provider called by the widget to obtain the session credentials
|
|
43
|
+
* (`userId`, `userToken`, `expiresAt`) from the product's own backend.
|
|
44
|
+
* Called again on each renewal. If it rejects or resolves without a token,
|
|
45
|
+
* the widget falls back to anonymous mode.
|
|
46
|
+
*/
|
|
47
|
+
export type GetWebchatSession = () => Promise<WebchatSession>;
|
|
48
|
+
|
|
49
|
+
/** API exposed by the widget to manipulate the active user. */
|
|
15
50
|
export interface WebchatUserApi {
|
|
16
|
-
|
|
51
|
+
/** Updates (and merges) the active user's data on the backend. */
|
|
52
|
+
updateUserData?: (data: Record<string, unknown>) => Promise<unknown>;
|
|
17
53
|
}
|
|
18
54
|
|
|
55
|
+
/** Global API exposed by the CDN/embed build on `window.EduzzWebchat`. */
|
|
19
56
|
export interface EduzzWebchatCdnApi {
|
|
20
|
-
ready
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
57
|
+
/** Resolves once the widget is mounted and ready. */
|
|
58
|
+
ready: Promise<EduzzWebchatCdnApi>;
|
|
59
|
+
/** Subscribes to lifecycle events; returns an unsubscribe function. */
|
|
60
|
+
on(event: "ready", callback: (api: EduzzWebchatCdnApi) => void): () => void;
|
|
61
|
+
/** Mounts the widget with the given options. */
|
|
62
|
+
init(options?: Record<string, unknown>): void;
|
|
63
|
+
/** Updates the mounted widget's options. */
|
|
64
|
+
update(options?: Record<string, unknown>): void;
|
|
65
|
+
/** Unmounts the widget and releases its resources. */
|
|
66
|
+
destroy(): void;
|
|
67
|
+
/** Updates (and merges) the active user's data on the backend. */
|
|
68
|
+
updateUserData(data?: Record<string, unknown>): Promise<unknown>;
|
|
26
69
|
}
|
|
27
70
|
|
|
28
71
|
declare global {
|
|
29
72
|
interface Window {
|
|
30
|
-
EduzzWebchat?: EduzzWebchatCdnApi
|
|
73
|
+
EduzzWebchat?: EduzzWebchatCdnApi;
|
|
31
74
|
}
|
|
32
75
|
}
|
|
33
76
|
|
|
77
|
+
/** Public configuration returned by the Webchat API `bootstrap` endpoint; merged with the props. */
|
|
34
78
|
export interface WebchatBootstrapPayload {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
79
|
+
/** Resolved Webchat client ID. */
|
|
80
|
+
clientId: string;
|
|
81
|
+
/** Applied preset slug, or `null` when none. */
|
|
82
|
+
slug: string | null;
|
|
83
|
+
/** Webchat API proxy URL. */
|
|
84
|
+
webchatProxyUrl: string;
|
|
85
|
+
/** Local persistence prefix. */
|
|
86
|
+
storageKey: string;
|
|
87
|
+
/** Whether the panel opens on mount. */
|
|
88
|
+
defaultOpen: boolean;
|
|
89
|
+
/** Backend that drives the session. */
|
|
90
|
+
sessionMode: WebchatSessionMode;
|
|
91
|
+
/** Preset appearance/text config (see {@link WebchatConfig}). */
|
|
92
|
+
config: Record<string, unknown>;
|
|
93
|
+
/** Default user data to send to the bot, or `null` when none. */
|
|
94
|
+
defaultUserData?: Record<string, unknown> | null;
|
|
43
95
|
}
|
|
44
96
|
|
|
97
|
+
/**
|
|
98
|
+
* Appearance and text configuration. Every field is optional; unset fields fall
|
|
99
|
+
* back to {@link defaultConfig}. Most color fields accept any CSS color string.
|
|
100
|
+
*/
|
|
45
101
|
export interface WebchatConfig {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
102
|
+
/** Bot display name (header and message author). */
|
|
103
|
+
botName?: string;
|
|
104
|
+
/** Header subtitle shown under the bot name. */
|
|
105
|
+
subtitle?: string;
|
|
106
|
+
/** Bot avatar URL. When empty, an avatar is generated from `botName`/`accentColor`. */
|
|
107
|
+
botAvatar?: string;
|
|
108
|
+
/** Botpress base theme color. Falls back to `accentColor` when empty. */
|
|
109
|
+
color?: string;
|
|
110
|
+
/** Base color scheme. */
|
|
111
|
+
themeMode?: WebchatThemeMode;
|
|
112
|
+
/** Botpress surface style. */
|
|
113
|
+
variant?: WebchatThemeVariant;
|
|
114
|
+
/** Header style. */
|
|
115
|
+
headerVariant?: WebchatHeaderVariant;
|
|
116
|
+
/** Corner radius, in pixels. */
|
|
117
|
+
radius?: number;
|
|
118
|
+
/** Font family applied to the widget. */
|
|
119
|
+
fontFamily?: string;
|
|
120
|
+
/** Raw CSS injected into the widget for custom tweaks. */
|
|
121
|
+
additionalStylesheet?: string;
|
|
122
|
+
/** URL of an external stylesheet loaded into the widget. */
|
|
123
|
+
additionalStylesheetUrl?: string;
|
|
124
|
+
/** Accent color (avatars, highlights, default Botpress color). */
|
|
125
|
+
accentColor?: string;
|
|
126
|
+
/** Brand color. When set, derives the primary/secondary/icon button colors unless they are overridden. */
|
|
127
|
+
brandColor?: string;
|
|
128
|
+
/** Text color over `brandColor`. Auto-contrasted from `brandColor` when omitted. */
|
|
129
|
+
brandTextColor?: string;
|
|
130
|
+
/** Composer input placeholder text. */
|
|
131
|
+
placeholder?: string;
|
|
132
|
+
/** Floating action button (FAB) background color. */
|
|
133
|
+
fabBackgroundColor?: string;
|
|
134
|
+
/** FAB icon color. */
|
|
135
|
+
fabIconColor?: string;
|
|
136
|
+
/** FAB background color while the panel is open. Defaults to `fabBackgroundColor`. */
|
|
137
|
+
openFabBackgroundColor?: string;
|
|
138
|
+
/** FAB icon color while the panel is open. Defaults to `fabIconColor`. */
|
|
139
|
+
openFabIconColor?: string;
|
|
140
|
+
/** Chat icon variant shown in the FAB (e.g. `messages-square`). */
|
|
141
|
+
fabChatIconVariant?: string;
|
|
142
|
+
/** Primary button background color. */
|
|
143
|
+
primaryButtonBackgroundColor?: string;
|
|
144
|
+
/** Primary button text color. */
|
|
145
|
+
primaryButtonTextColor?: string;
|
|
146
|
+
/** Primary button background color on hover. */
|
|
147
|
+
primaryButtonHoverBackgroundColor?: string;
|
|
148
|
+
/** Panel base background color. */
|
|
149
|
+
panelBackgroundColor?: string;
|
|
150
|
+
/** Background color of elevated surfaces (cards, popovers). */
|
|
151
|
+
panelElevatedBackgroundColor?: string;
|
|
152
|
+
/** Background color of subtle surfaces. */
|
|
153
|
+
panelSubtleBackgroundColor?: string;
|
|
154
|
+
/** Background color of muted surfaces. */
|
|
155
|
+
panelMutedBackgroundColor?: string;
|
|
156
|
+
/** Background color of hovered surfaces. */
|
|
157
|
+
panelHoverBackgroundColor?: string;
|
|
158
|
+
/** Background color of selected surfaces. */
|
|
159
|
+
panelSelectedBackgroundColor?: string;
|
|
160
|
+
/** Panel border color. */
|
|
161
|
+
panelBorderColor?: string;
|
|
162
|
+
/** Stronger panel border color (emphasized dividers). */
|
|
163
|
+
panelStrongBorderColor?: string;
|
|
164
|
+
/** Panel primary text color. */
|
|
165
|
+
panelTextColor?: string;
|
|
166
|
+
/** Panel muted/secondary text color. */
|
|
167
|
+
panelMutedTextColor?: string;
|
|
168
|
+
/** Panel header background color. */
|
|
169
|
+
panelHeaderBackgroundColor?: string;
|
|
170
|
+
/** Welcome/home screen background (color or gradient). */
|
|
171
|
+
welcomeBackground?: string;
|
|
172
|
+
/** Welcome screen hero background (color or gradient). */
|
|
173
|
+
welcomeHeroBackground?: string;
|
|
174
|
+
/** Color of the "online" status dot on the welcome screen. */
|
|
175
|
+
welcomeOnlineStatusColor?: string;
|
|
176
|
+
/** Secondary button background color. */
|
|
177
|
+
secondaryButtonBackgroundColor?: string;
|
|
178
|
+
/** Secondary button text color. */
|
|
179
|
+
secondaryButtonTextColor?: string;
|
|
180
|
+
/** Secondary button border color. */
|
|
181
|
+
secondaryButtonBorderColor?: string;
|
|
182
|
+
/** Secondary button background color on hover. */
|
|
183
|
+
secondaryButtonHoverBackgroundColor?: string;
|
|
184
|
+
/** Icon button background color. */
|
|
185
|
+
iconButtonBackgroundColor?: string;
|
|
186
|
+
/** Icon button icon color. */
|
|
187
|
+
iconButtonIconColor?: string;
|
|
188
|
+
/** Icon button border color. */
|
|
189
|
+
iconButtonBorderColor?: string;
|
|
190
|
+
/** Icon button background color on hover. */
|
|
191
|
+
iconButtonHoverBackgroundColor?: string;
|
|
192
|
+
/** Background color of outgoing (user) messages. */
|
|
193
|
+
outgoingMessageBackgroundColor?: string;
|
|
194
|
+
/** Text color of outgoing (user) messages. */
|
|
195
|
+
outgoingMessageTextColor?: string;
|
|
196
|
+
/** Background color of incoming (bot) messages. */
|
|
197
|
+
incomingMessageBackgroundColor?: string;
|
|
198
|
+
/** Text color of incoming (bot) messages. */
|
|
199
|
+
incomingMessageTextColor?: string;
|
|
200
|
+
/** Anchor corner of the widget on the screen. */
|
|
201
|
+
position?: WebchatPosition;
|
|
202
|
+
/** Whether the panel starts open. Used as the fallback when the `defaultOpen` prop is unset. */
|
|
203
|
+
initiallyOpen?: boolean;
|
|
204
|
+
/** Whether to show the welcome/home screen before the chat. */
|
|
205
|
+
showWelcomeScreen?: boolean;
|
|
206
|
+
/** Panel width (CSS length, e.g. `"380px"`). */
|
|
207
|
+
width?: string;
|
|
208
|
+
/** Panel height (CSS length, e.g. `"640px"`). */
|
|
209
|
+
height?: string;
|
|
210
|
+
/** Cover image URL on the welcome screen. */
|
|
211
|
+
welcomeCoverImage?: string;
|
|
212
|
+
/** Card image URL on the welcome screen. */
|
|
213
|
+
welcomeCardImage?: string;
|
|
214
|
+
/** Title of the welcome card. */
|
|
215
|
+
welcomeCardTitle?: string;
|
|
216
|
+
/** Status text of the welcome card (e.g. `"Online agora!"`). */
|
|
217
|
+
welcomeCardStatus?: string;
|
|
218
|
+
/** Description text of the welcome card. */
|
|
219
|
+
welcomeCardDescription?: string;
|
|
220
|
+
/** Label of the welcome screen's call-to-action (start) button. */
|
|
221
|
+
welcomeCtaLabel?: string;
|
|
222
|
+
/** Helper text shown beneath the welcome CTA button. */
|
|
223
|
+
welcomeButtonDescription?: string;
|
|
224
|
+
/** Accessible label for the welcome screen's close button. */
|
|
225
|
+
welcomeCloseLabel?: string;
|
|
108
226
|
}
|
|
109
227
|
|
|
110
228
|
export interface WebchatProps {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
229
|
+
/** Webchat client ID in the Webchat API (varies per environment). */
|
|
230
|
+
clientId: string;
|
|
231
|
+
/** Webchat API proxy URL. E.g.: https://webchat-api.eduzz.com/webchat/proxy */
|
|
232
|
+
webchatProxyUrl?: string;
|
|
233
|
+
/**
|
|
234
|
+
* Static credentials obtained from the backend. Mutually exclusive with `getSession`:
|
|
235
|
+
* when `getSession` is provided, this prop is ignored.
|
|
236
|
+
*/
|
|
237
|
+
userCredentials?: WebchatUserCredentials;
|
|
238
|
+
/** Specific conversation to open. Takes lower priority than a conversation provided by the session. */
|
|
239
|
+
conversationId?: string;
|
|
240
|
+
/** Appearance, texts and layout overrides. Merged on top of the preset/bootstrap config (these values win). */
|
|
241
|
+
config?: WebchatConfig;
|
|
242
|
+
/** User data sent to the bot on start and merged into every `updateUserData` call. Merged on top of the bootstrap default data. */
|
|
243
|
+
defaultUserData?: Record<string, unknown>;
|
|
244
|
+
/** Visual preset slug (e.g.: `default-eduzz`, `black`, `unity`). */
|
|
245
|
+
presetSlug?: string;
|
|
246
|
+
/** Local persistence prefix (use a product-specific value). Defaults to `"eduzz-webchat"`. */
|
|
247
|
+
storageKey?: string;
|
|
248
|
+
/** Web Storage used for local persistence. Defaults to `"localStorage"`. */
|
|
249
|
+
storageLocation?: StorageLocation;
|
|
250
|
+
/** Opens the panel on mount. Overrides the bootstrap/preset value; falls back to `config.initiallyOpen`. */
|
|
251
|
+
defaultOpen?: boolean;
|
|
252
|
+
/** Called with the user API (e.g. `updateUserData`) when it becomes available, and with `null` when it is torn down. */
|
|
253
|
+
onUserApiChange?: (api: WebchatUserApi | null) => void;
|
|
254
|
+
/**
|
|
255
|
+
* Authenticated session provider with automatic token renewal (refreshed shortly
|
|
256
|
+
* before `expiresAt`). Mutually exclusive with `userCredentials`. When it resolves
|
|
257
|
+
* without a session, the widget falls back to anonymous mode.
|
|
258
|
+
*/
|
|
259
|
+
getSession?: GetWebchatSession;
|
|
260
|
+
/** Recreates the session when this value changes (e.g.: `"<authId>:<controlledId>"`). */
|
|
261
|
+
sessionKey?: string;
|
|
262
|
+
/** Observability of the captured session (credentials, expiresAt, etc.), or `null` when absent. */
|
|
263
|
+
onSessionChange?: (session: WebchatSession | null) => void;
|
|
122
264
|
}
|
|
123
265
|
|
|
124
|
-
|
|
266
|
+
/** Full webchat widget (FAB + animated panel + views). */
|
|
267
|
+
export declare function Webchat(props: WebchatProps): ReactElement;
|
|
125
268
|
|
|
126
|
-
|
|
127
|
-
export declare
|
|
128
|
-
|
|
269
|
+
/** Default values used for every unset {@link WebchatConfig} field. */
|
|
270
|
+
export declare const defaultConfig: Required<WebchatConfig>;
|
|
271
|
+
/** Fills a partial config with defaults and resolves derived values (brand/FAB aliases, position). */
|
|
272
|
+
export declare function normalizeConfig(
|
|
273
|
+
config?: WebchatConfig,
|
|
274
|
+
): Required<WebchatConfig>;
|
|
275
|
+
/** Builds the inline style (CSS custom properties) for the widget shell from a normalized config. */
|
|
276
|
+
export declare function getShellStyle(
|
|
277
|
+
config: Required<WebchatConfig>,
|
|
278
|
+
): CSSProperties;
|
|
279
|
+
/** Maps a normalized config to the theme props consumed by Botpress's `StylesheetProvider`. */
|
|
129
280
|
export declare function getBotpressTheme(config: Required<WebchatConfig>): {
|
|
130
|
-
color: string
|
|
131
|
-
fontFamily: string
|
|
132
|
-
radius: number
|
|
133
|
-
themeMode: WebchatThemeMode
|
|
134
|
-
variant: WebchatThemeVariant
|
|
135
|
-
headerVariant: WebchatHeaderVariant
|
|
136
|
-
additionalStylesheet: string
|
|
137
|
-
additionalStylesheetUrl: string
|
|
138
|
-
}
|
|
139
|
-
|
|
281
|
+
color: string;
|
|
282
|
+
fontFamily: string;
|
|
283
|
+
radius: number;
|
|
284
|
+
themeMode: WebchatThemeMode;
|
|
285
|
+
variant: WebchatThemeVariant;
|
|
286
|
+
headerVariant: WebchatHeaderVariant;
|
|
287
|
+
additionalStylesheet: string;
|
|
288
|
+
additionalStylesheetUrl: string;
|
|
289
|
+
};
|
|
290
|
+
/** Returns a readable text color (`#18181b` or `#ffffff`) for the given hex background. */
|
|
291
|
+
export declare function getContrastingTextColor(value: string): string;
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
:host{all:initial}.bp-webchat-shell *,.bp-webchat-shell *:before,.bp-webchat-shell *:after{box-sizing:border-box}.bp-webchat-shell{position:fixed;z-index:2147483000;display:flex;flex-direction:column;align-items:var(--widget-align, flex-end);gap:16px;width:min(var(--widget-width),calc(100vw - 24px));font-family:Inter,Segoe UI,sans-serif;--ui-bg: var(--panel-background-color, #ffffff);--ui-bg-elevated: var(--panel-elevated-background-color, #ffffff);--ui-bg-subtle: var(--panel-subtle-background-color, #fafafa);--ui-bg-muted: var(--panel-muted-background-color, #f4f4f5);--ui-bg-hover: var(--panel-hover-background-color, #f4f4f5);--ui-bg-selected: var(--panel-selected-background-color, #f5f5f5);--ui-border: var(--panel-border-color, #e4e4e7);--ui-border-strong: var(--panel-strong-border-color, #d4d4d8);--ui-text: var(--panel-text-color, #18181b);--ui-text-muted: var(--panel-muted-text-color, #71717a);--ui-primary: var(--primary-button-background-color, #18181b);--ui-primary-hover: var(--primary-button-hover-background-color, #27272a);--ui-primary-text: var(--primary-button-text-color, #fafafa);--ui-secondary: var(--secondary-button-background-color, #ffffff);--ui-secondary-hover: var(--secondary-button-hover-background-color, #f4f4f5);--ui-secondary-text: var(--secondary-button-text-color, #18181b);--ui-secondary-border: var(--secondary-button-border-color, #e4e4e7);--ui-icon-button-bg: var(--icon-button-background-color, #ffffff);--ui-icon-button-hover: var(--icon-button-hover-background-color, #f4f4f5);--ui-icon-button-color: var(--icon-button-icon-color, #71717a);--ui-icon-button-border: var(--icon-button-border-color, #e4e4e7);--ui-ring: 0 0 0 3px rgba(24, 24, 27, .08);--ui-shadow-sm: 0 1px 2px rgba(15, 23, 42, .06);--ui-shadow-md: 0 12px 32px rgba(15, 23, 42, .1);--ui-radius-sm: 10px;--ui-radius-md: 12px;--ui-radius-lg: 16px}.bp-webchat-panel{position:relative;overflow:hidden;width:100%;height:min(var(--widget-height),calc(100dvh - 132px));border:1px solid var(--ui-border);border-radius:24px;background:var(--ui-bg);box-shadow:0 18px 50px #0f172a1f;opacity:0;transform:translateY(12px) scale(.98);transform-origin:var(--panel-transform-origin, right bottom);transition:opacity .22s cubic-bezier(.22,1,.36,1),transform .22s cubic-bezier(.22,1,.36,1);will-change:opacity,transform}.bp-webchat-panel[data-state=open]{opacity:1;transform:translateY(0) scale(1)}.bp-webchat-panel[data-state=closed]{pointer-events:none}.bp-webchat-error{padding:18px;border-radius:20px;background:#fff7ed;color:#9a3412;line-height:1.6;font-size:.95rem;box-shadow:0 20px 40px #0f172a1f}.bp-webchat-layout{position:relative;display:flex;flex-direction:column;width:100%;height:100%;background:var(--ui-bg)}.bp-webchat-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 16px 14px;border-bottom:1px solid var(--ui-border);background:var(--panel-header-background-color, rgba(255, 255, 255, .96))}.bp-webchat-header-meta{display:flex;align-items:center;min-width:0;gap:12px}.bp-webchat-header-actions{display:inline-flex;align-items:center;gap:6px}.bp-webchat-avatar{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;flex:0 0 auto;border-radius:999px;background:var(--header-avatar-bg, var(--accent-color));color:var(--header-avatar-text, #ffffff);font-size:1rem;font-weight:700;text-transform:uppercase;overflow:hidden}.bp-webchat-avatar img{width:100%;height:100%;object-fit:cover}.bp-webchat-header-text{min-width:0}.bp-webchat-header-title{margin:0;color:var(--ui-text);font-size:.96rem;line-height:1.2;font-weight:600}.bp-webchat-header-subtitle{margin:4px 0 0;color:var(--ui-text-muted);font-size:.84rem;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bp-webchat-welcome{position:relative;display:flex;flex-direction:column;height:100%;overflow:hidden;background:var( --welcome-background, linear-gradient(180deg, #f4f4f5 0%, #fafafa 34%, #ffffff 34%, #ffffff 100%) )}.bp-webchat-welcome-hero{position:relative;min-height:184px;background:var( --welcome-hero-background, linear-gradient(180deg, #f5f5f5 0%, #efeff1 100%) );overflow:hidden}.bp-webchat-welcome-hero:after{content:"";position:absolute;inset:0;background:#0000002e;pointer-events:none}.bp-webchat-welcome-close{position:absolute;top:14px;right:14px;z-index:3}.bp-webchat-welcome-cover{display:block;position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center top}.bp-webchat-welcome-card-wrap{position:relative;margin-top:-24px;padding:0 16px;z-index:2}.bp-webchat-welcome-card{position:relative;border-radius:22px;background:var(--ui-bg-elevated);box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-border);padding:68px 22px 18px}.bp-webchat-welcome-card-badge{position:absolute;top:-34px;left:50%;transform:translate(-50%);display:grid;place-items:center;width:84px;height:84px;border-radius:999px;background:var(--header-avatar-bg, var(--accent-color));box-shadow:var(--ui-shadow-sm);overflow:hidden;border:1px solid color-mix(in srgb,var(--header-avatar-bg, var(--accent-color)) 78%,var(--ui-bg-elevated))}.bp-webchat-welcome-card-badge img{width:100%;height:100%;object-fit:cover}.bp-webchat-welcome-card-badge span{color:var(--header-avatar-text, #ffffff);font-size:2rem;font-weight:700}.bp-webchat-welcome-card-title{margin:0;color:var(--ui-text);font-size:1rem;line-height:1.15;font-weight:700;text-wrap:balance}.bp-webchat-welcome-card-status{margin:10px 0 0;color:var(--ui-text-muted);font-size:.88rem;line-height:1.4}.bp-webchat-welcome-card-status strong{color:var(--welcome-online-status-color, #16a34a);font-weight:700}.bp-webchat-welcome-card-description{margin:14px 0 0;color:var(--ui-text-muted);font-size:.94rem;line-height:1.62;text-align:justify;white-space:pre-wrap}.bp-webchat-welcome-cta{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;margin-top:22px;padding:14px 16px;border:1px solid var(--ui-primary);border-radius:var(--ui-radius-lg);box-shadow:var(--ui-shadow-sm);color:var(--ui-primary-text);font:inherit;font-size:.98rem;font-weight:600;cursor:pointer;background:var(--ui-primary);text-align:left;transition:transform .14s ease,box-shadow .14s ease,background .14s ease,border-color .14s ease}.bp-webchat-welcome-cta:hover{transform:translateY(-1px);border-color:var(--ui-primary-hover);background:var(--ui-primary-hover);box-shadow:0 10px 20px #0f172a1f}.bp-webchat-welcome-cta-left{display:inline-flex;align-items:center;gap:12px}.bp-webchat-welcome-cta-copy{display:grid;gap:2px}.bp-webchat-welcome-cta-title{color:inherit;font-size:.98rem;font-weight:600;line-height:1.2}.bp-webchat-welcome-cta-description{color:color-mix(in srgb,var(--ui-primary-text) 74%,transparent);font-size:.82rem;line-height:1.35;font-weight:500}.bp-webchat-welcome-cta-right{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;flex:0 0 auto;color:inherit;border-radius:999px;background:color-mix(in srgb,var(--ui-primary-text) 10%,transparent)}.bp-webchat-welcome-cta-right svg{width:18px;height:18px}.bp-webchat-tabs,.bp-webchat-welcome-bottom{margin-top:auto;border-top:1px solid var(--ui-border);display:grid;grid-template-columns:1fr 1fr;gap:6px;padding:6px;background:var(--ui-bg)}.bp-webchat-tab,.bp-webchat-welcome-tab{border:0;background:transparent;display:grid;justify-items:center;gap:4px;padding:9px 8px;color:var(--ui-text-muted);font-size:.84rem;font-family:inherit;font-weight:500;cursor:pointer;border-radius:var(--ui-radius-md);transition:color .14s ease,background .14s ease,box-shadow .14s ease}.bp-webchat-tab:hover,.bp-webchat-welcome-tab:hover{background:var(--ui-bg-hover)}.bp-webchat-tab[data-active=true],.bp-webchat-welcome-tab[data-active=true]{color:var(--ui-text);background:transparent;box-shadow:none}.bp-webchat-tab-icon,.bp-webchat-welcome-tab-icon{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:999px;color:inherit;background:transparent;transition:background .14s ease,transform .14s ease}.bp-webchat-tab:hover .bp-webchat-tab-icon,.bp-webchat-welcome-tab:hover .bp-webchat-welcome-tab-icon{transform:translateY(-1px)}.bp-webchat-tab[data-active=true] .bp-webchat-tab-icon,.bp-webchat-welcome-tab[data-active=true] .bp-webchat-welcome-tab-icon{background:transparent}.bp-webchat-tab-icon svg,.bp-webchat-welcome-tab-icon svg{width:15px;height:15px}.bp-webchat-icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;flex:0 0 auto;border:1px solid var(--ui-icon-button-border);border-radius:999px;background:var(--ui-icon-button-bg);color:var(--ui-icon-button-color);cursor:pointer;box-shadow:var(--ui-shadow-sm);transition:background .14s ease,border-color .14s ease,color .14s ease,box-shadow .14s ease}.bp-webchat-icon-button:hover{background:var(--ui-icon-button-hover);border-color:var(--ui-icon-button-border);color:var(--ui-text)}.bp-webchat-icon-button:focus-visible,.bp-webchat-tab:focus-visible,.bp-webchat-welcome-tab:focus-visible,.bp-webchat-welcome-cta:focus-visible,.bp-webchat-history-item:focus-visible,.bp-webchat-history-new:focus-visible,.bp-webchat-modal-button:focus-visible{outline:0;box-shadow:var(--ui-ring)}.bp-webchat-icon-button svg{width:20px;height:20px}.bp-webchat-mobile-close{display:none}.bp-webchat-container.bpContainer{height:100%;max-height:none;border-radius:0;border-color:var(--ui-border);background:var(--ui-bg);color:var(--ui-text);box-shadow:none}.bp-webchat-container .bpHeader{display:none}.bp-webchat-container .bpMessageListContainer,.bp-webchat-container .bpMessageListViewport,.bp-webchat-container .bpMessageListMarqueeContainer{background:var(--ui-bg);color:var(--ui-text)}.bp-webchat-container .bpMessageListContainer{padding-top:0;background:var(--ui-bg);--bpPrimary-600: var(--header-avatar-bg, var(--accent-color));--bpPrimary-50: var(--header-avatar-text, #ffffff);--message-bg: var(--outgoing-message-background-color, #ebf1fd);--message-text: var(--outgoing-message-text-color, #0f2346)}.bp-webchat-container .bpMessageListMarqueeContainer:only-child{margin-block:auto;padding-block:0}.bp-webchat-container .bpMessageListMarqueeTitle{color:var(--ui-text)}.bp-webchat-container .bpMessageListMarqueeDescription,.bp-webchat-container .bpMessageListHeaderMessage{color:var(--ui-text-muted)}.bp-webchat-container .bpMessageListScrollDownButton{z-index:1}.bp-webchat-container .bpMessageBlocksBubble[data-direction=incoming]{background-color:var(--incoming-message-background-color, #f0f0f3);color:var(--incoming-message-text-color, #202127)}.bp-webchat-container .bpMessageBlocksBubble[data-direction=outgoing]{background-color:var(--outgoing-message-background-color, #ebf1fd);color:var(--outgoing-message-text-color, #0f2346)}.bp-webchat-container .bpComposer{border-top:1px solid var(--ui-border);background:var(--ui-bg);padding:12px 14px 14px}.bp-webchat-container .bpComposerWrapper,.bp-webchat-container .bpComposerContainer{border:0;background:transparent;box-shadow:none}.bp-webchat-container .bpComposerContainer{gap:10px;padding:0;outline:none}.bp-webchat-container .bpComposerContainer:focus-within,.bp-webchat-container .bpComposerContainer[data-waiting=true]{outline:none;box-shadow:none}.bp-webchat-container .bpComposerInputContainer{border:1px solid var(--ui-border);border-radius:14px;background:var(--ui-bg-elevated);box-shadow:var(--ui-shadow-sm);overflow:hidden;transition:border-color .14s ease,box-shadow .14s ease,background .14s ease}.bp-webchat-container .bpComposerInputContainer:focus-within{border-color:var(--ui-border-strong);box-shadow:var(--ui-ring)}.bp-webchat-container .bpComposerInput{color:var(--ui-text);font-size:.95rem}.bp-webchat-container .bpComposerInput::placeholder{color:var(--ui-text-muted)}.bp-webchat-container .bpComposerSendButton{border-radius:12px;background:var(--ui-primary);color:var(--ui-primary-text);box-shadow:var(--ui-shadow-sm)}.bp-webchat-container .bpComposerSendButton:hover{background:var(--ui-primary-hover)}.bp-webchat-container .bpComposerUploadButton,.bp-webchat-container .bpComposerVoiceButton{border:1px solid var(--ui-icon-button-border);border-radius:12px;background:var(--ui-icon-button-bg);color:var(--ui-icon-button-color);box-shadow:var(--ui-shadow-sm)}.bp-webchat-container .bpComposerUploadButton:hover,.bp-webchat-container .bpComposerVoiceButton:hover{background:var(--ui-icon-button-hover);border-color:var(--ui-icon-button-border);color:var(--ui-text)}.bp-webchat-container .bpComposerFileAttachement{border-color:var(--ui-border);border-radius:12px;background:var(--ui-bg-elevated);box-shadow:none}.bp-webchat-container .bpComposerFileAttachement:hover{border-color:var(--ui-border-strong)}.bp-webchat-container .bpComposerFileIconWrapper{border-color:var(--ui-border);background:var(--ui-bg-subtle)}.bp-webchat-container .bpComposerFileName{color:var(--ui-text)}.bp-webchat-container .bpComposerFileExtension,.bp-webchat-container .bpComposerFooter{color:var(--ui-text-muted)}.bp-webchat-container .bpMessageListMarqueeAvatarFallback,.bp-webchat-container .bpMessageAvatarFallback,.bp-webchat-container .bpHeaderContentAvatarFallback,.bp-webchat-container .bpMessagePreviewAvatarFallback,.bp-webchat-container .bpConversationHistoryConversationAvatarFallback{background-color:var(--header-avatar-bg, var(--accent-color))!important;color:var(--header-avatar-text, #ffffff)!important}.bp-webchat-history{display:flex;flex-direction:column;height:100%;background:var(--ui-bg)}.bp-webchat-history-header{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid var(--ui-border)}.bp-webchat-history-title{margin:0;color:var(--ui-text);font-size:1rem;font-weight:600}.bp-webchat-history-list{flex:1;overflow:auto;padding:8px}.bp-webchat-history-empty,.bp-webchat-history-loading{display:grid;place-items:center;min-height:220px;padding:24px;color:var(--ui-text-muted);text-align:center;line-height:1.6}.bp-webchat-history-item{width:100%;display:grid;grid-template-columns:auto 1fr auto;gap:14px;align-items:center;padding:14px;border:1px solid transparent;border-radius:14px;background:var(--ui-bg);color:inherit;text-align:left;cursor:pointer;font:inherit;transition:background .14s ease,border-color .14s ease,box-shadow .14s ease}.bp-webchat-history-item+.bp-webchat-history-item{margin-top:8px}.bp-webchat-history-item:hover{background:var(--ui-bg-subtle);border-color:var(--ui-border)}.bp-webchat-history-avatar{display:grid;place-items:center;width:48px;height:48px;border-radius:999px;overflow:hidden;background:var(--ui-bg-muted);color:var(--ui-text-muted);font-size:1rem;font-weight:700;flex:0 0 auto;border:1px solid var(--ui-border)}.bp-webchat-history-avatar[data-kind=bot]{background:var(--header-avatar-bg, var(--accent-color));color:var(--header-avatar-text, #ffffff);border-color:color-mix(in srgb,var(--header-avatar-bg, var(--accent-color)) 76%,var(--ui-bg-elevated))}.bp-webchat-history-avatar img{width:100%;height:100%;object-fit:cover}.bp-webchat-history-avatar svg{width:20px;height:20px}.bp-webchat-history-content{min-width:0;display:grid;gap:4px}.bp-webchat-history-name{color:var(--ui-text);font-size:.93rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bp-webchat-history-time{color:var(--ui-text-muted);font-size:.82rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bp-webchat-history-chevron{color:var(--ui-text-muted)}.bp-webchat-history-chevron svg{width:20px;height:20px}.bp-webchat-history-footer{padding:12px 16px 16px;border-top:1px solid var(--ui-border);background:var(--ui-bg)}.bp-webchat-history-new{width:100%;display:inline-flex;align-items:center;justify-content:center;gap:10px;border:1px solid var(--ui-primary);border-radius:14px;padding:13px 16px;background:var(--ui-primary);color:var(--ui-primary-text);font:inherit;font-size:.94rem;font-weight:600;cursor:pointer;box-shadow:var(--ui-shadow-sm);transition:background .14s ease,border-color .14s ease,transform .14s ease}.bp-webchat-history-new:hover{background:var(--ui-primary-hover);border-color:var(--ui-primary-hover);transform:translateY(-1px)}.bp-webchat-history-new svg{width:20px;height:20px}.bp-webchat-loading{display:flex;flex-direction:column;gap:18px;padding:22px 18px 18px;height:100%;background:var(--ui-bg)}.bp-webchat-loading-hero{display:grid;place-items:center;gap:14px;padding:12px 0 18px}.bp-webchat-loading-circle{width:86px;height:86px;border-radius:999px;background:linear-gradient(135deg,color-mix(in srgb,var(--accent-color) 16%,transparent),color-mix(in srgb,var(--accent-color) 32%,transparent))}.bp-webchat-loading-line{border-radius:999px;background:linear-gradient(90deg,var(--ui-bg-muted) 0%,var(--ui-bg-subtle) 50%,var(--ui-bg-muted) 100%);background-size:200% 100%;animation:bp-webchat-shimmer 1.5s linear infinite}.bp-webchat-loading-line--title{width:120px;height:16px}.bp-webchat-loading-line--subtitle{width:170px;height:12px}.bp-webchat-loading-bubble{max-width:82%;padding:16px;border-radius:18px 18px 18px 6px;background:var(--ui-bg-muted)}.bp-webchat-loading-bubble--right{margin-left:auto;border-radius:18px 18px 6px;background:var(--ui-bg-subtle)}.bp-webchat-loading-bubble .bp-webchat-loading-line+.bp-webchat-loading-line{margin-top:10px}.bp-webchat-loading-composer{margin-top:auto;display:flex;align-items:center;gap:12px;padding-top:8px}.bp-webchat-loading-input{flex:1;height:50px;border-radius:14px;background:var(--ui-bg);border:1px solid var(--ui-border)}.bp-webchat-loading-mic{width:42px;height:42px;border-radius:999px;background:var(--ui-bg);border:1px solid var(--ui-border)}@keyframes bp-webchat-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.bp-webchat-fab{position:relative;width:64px;height:64px;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:999px;cursor:pointer;color:var(--fab-icon-color, #ffffff);box-shadow:0 14px 28px #0f172a1f;transition:transform .18s ease,box-shadow .18s ease,background .18s ease;background:var(--fab-background-color, var(--accent-color));overflow:hidden}.bp-webchat-fab:hover{transform:translateY(-2px);box-shadow:0 18px 32px #0f172a29}.bp-webchat-fab:focus-visible{outline:0;box-shadow:0 0 0 4px #ffffffe0,0 0 0 7px #2563eb2e,0 18px 36px #0f172a2e}.bp-webchat-fab:before{content:"";position:absolute;inset:1px;border-radius:999px;background:linear-gradient(180deg,#ffffff2e,#fff0);pointer-events:none}.bp-webchat-fab-icon{position:absolute;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;transition:opacity .18s ease,transform .18s ease;will-change:opacity,transform}.bp-webchat-fab-icon svg{position:relative;z-index:1;width:24px;height:24px}.bp-webchat-fab-icon--chat{opacity:1;transform:scale(1) rotate(0)}.bp-webchat-fab-icon--chat svg{width:30px;height:30px}.bp-webchat-fab-icon--close{opacity:0;transform:scale(.72) rotate(-90deg)}.bp-webchat-fab[data-open=true] .bp-webchat-fab-icon--chat{opacity:0;transform:scale(.72) rotate(90deg)}.bp-webchat-fab[data-open=true] .bp-webchat-fab-icon--close{opacity:1;transform:scale(1) rotate(0)}.bpMessageBlocksBubbleFeedbackIcon svg{width:14px;height:14px}.bp-webchat-modal-backdrop{position:absolute;inset:0;display:flex;align-items:flex-end;justify-content:center;padding:18px;overflow:hidden;border-radius:inherit;background:linear-gradient(180deg,color-mix(in srgb,var(--ui-bg-elevated) 24%,transparent),color-mix(in srgb,var(--ui-text) 16%,transparent));backdrop-filter:blur(10px) saturate(1.04);-webkit-backdrop-filter:blur(10px) saturate(1.04);z-index:20}.bp-webchat-modal{width:100%;max-width:360px;border:1px solid var(--ui-border);border-radius:18px;background:var(--ui-bg-elevated);box-shadow:var(--ui-shadow-md);overflow:hidden}.bp-webchat-modal-title{margin:0;padding:20px 20px 8px;text-align:left;color:var(--ui-text);font-size:1rem;line-height:1.3;font-weight:600}.bp-webchat-modal-description{margin:0;padding:0 20px 16px;text-align:left;color:var(--ui-text-muted);font-size:.9rem;line-height:1.55}.bp-webchat-modal-field-wrap{padding:0 20px 16px}.bp-webchat-modal-textarea{width:100%;min-height:96px;resize:vertical;border-radius:var(--ui-radius-md);border:1px solid var(--ui-border);background:var(--ui-bg-subtle);padding:12px 14px;font:inherit;color:var(--ui-text);outline:0;transition:border-color .14s ease,box-shadow .14s ease,background .14s ease}.bp-webchat-modal-textarea::placeholder{color:var(--ui-text-muted)}.bp-webchat-modal-textarea:focus{border-color:var(--ui-border-strong);box-shadow:var(--ui-ring);background:var(--ui-bg)}.bp-webchat-modal-actions{display:grid;gap:12px;padding:0 20px 20px}.bp-webchat-modal-button{width:100%;border:1px solid var(--ui-secondary-border);border-radius:var(--ui-radius-md);padding:12px 16px;font:inherit;font-size:.94rem;font-weight:600;cursor:pointer;color:var(--ui-secondary-text);background:var(--ui-secondary);box-shadow:var(--ui-shadow-sm);transition:transform .14s ease,background .14s ease,border-color .14s ease,box-shadow .14s ease,color .14s ease}.bp-webchat-modal-button:hover{transform:translateY(-1px);border-color:var(--ui-secondary-border);background:var(--ui-secondary-hover)}.bp-webchat-modal-button--primary{border-color:var(--ui-primary);color:var(--ui-primary-text);background:var(--ui-primary)}.bp-webchat-modal-button--primary:hover{border-color:var(--ui-primary-hover);background:var(--ui-primary-hover)}@media(max-width:640px){.bp-webchat-shell{width:calc(100vw - 24px)}.bp-webchat-panel{height:min(var(--widget-height),calc(100vh - 120px))}.bp-webchat-welcome-card{padding-left:20px;padding-right:20px}.bp-webchat-welcome-card-description{max-width:none}.bp-webchat-shell[data-panel-mounted=true]{inset:0!important;width:100vw!important;max-width:100vw!important;height:100vh;height:100dvh;gap:0}.bp-webchat-shell[data-panel-mounted=true] .bp-webchat-panel{width:100%;height:100%;border:0;border-radius:0;box-shadow:none;transform:none}.bp-webchat-shell[data-panel-mounted=true] .bp-webchat-fab{display:none}.bp-webchat-mobile-close{display:inline-flex}}
|
|
1
|
+
:host{all:initial}.bp-webchat-shell *,.bp-webchat-shell *:before,.bp-webchat-shell *:after{box-sizing:border-box}.bp-webchat-shell{position:fixed;z-index:2147483000;display:flex;flex-direction:column;align-items:var(--widget-align, flex-end);gap:16px;width:min(var(--widget-width),calc(100vw - 24px));font-family:Inter,Segoe UI,sans-serif;--ui-bg: var(--panel-background-color, #ffffff);--ui-bg-elevated: var(--panel-elevated-background-color, #ffffff);--ui-bg-subtle: var(--panel-subtle-background-color, #fafafa);--ui-bg-muted: var(--panel-muted-background-color, #f4f4f5);--ui-bg-hover: var(--panel-hover-background-color, #f4f4f5);--ui-bg-selected: var(--panel-selected-background-color, #f5f5f5);--ui-border: var(--panel-border-color, #e4e4e7);--ui-border-strong: var(--panel-strong-border-color, #d4d4d8);--ui-text: var(--panel-text-color, #18181b);--ui-text-muted: var(--panel-muted-text-color, #71717a);--ui-primary: var(--primary-button-background-color, #18181b);--ui-primary-hover: var(--primary-button-hover-background-color, #27272a);--ui-primary-text: var(--primary-button-text-color, #fafafa);--ui-secondary: var(--secondary-button-background-color, #ffffff);--ui-secondary-hover: var(--secondary-button-hover-background-color, #f4f4f5);--ui-secondary-text: var(--secondary-button-text-color, #18181b);--ui-secondary-border: var(--secondary-button-border-color, #e4e4e7);--ui-icon-button-bg: var(--icon-button-background-color, #ffffff);--ui-icon-button-hover: var(--icon-button-hover-background-color, #f4f4f5);--ui-icon-button-color: var(--icon-button-icon-color, #71717a);--ui-icon-button-border: var(--icon-button-border-color, #e4e4e7);--ui-ring: 0 0 0 3px rgba(24, 24, 27, .08);--ui-shadow-sm: 0 1px 2px rgba(15, 23, 42, .06);--ui-shadow-md: 0 12px 32px rgba(15, 23, 42, .1);--ui-radius-sm: 10px;--ui-radius-md: 12px;--ui-radius-lg: 16px}.bp-webchat-panel{position:relative;overflow:hidden;width:100%;height:min(var(--widget-height),calc(100dvh - 132px));border:1px solid var(--ui-border);border-radius:24px;background:var(--ui-bg);box-shadow:0 18px 50px #0f172a1f;opacity:0;transform:translateY(12px) scale(.98);transform-origin:var(--panel-transform-origin, right bottom);transition:opacity .22s cubic-bezier(.22,1,.36,1),transform .22s cubic-bezier(.22,1,.36,1);will-change:opacity,transform}.bp-webchat-panel[data-state=open]{opacity:1;transform:translateY(0) scale(1)}.bp-webchat-panel[data-state=closed]{pointer-events:none}.bp-webchat-error{padding:18px;border-radius:20px;background:#fff7ed;color:#9a3412;line-height:1.6;font-size:.95rem;box-shadow:0 20px 40px #0f172a1f}.bp-webchat-layout{position:relative;display:flex;flex-direction:column;width:100%;height:100%;background:var(--ui-bg)}.bp-webchat-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 16px 14px;border-bottom:1px solid var(--ui-border);background:var(--panel-header-background-color, rgba(255, 255, 255, .96))}.bp-webchat-header-meta{display:flex;align-items:center;min-width:0;gap:12px}.bp-webchat-header-actions{display:inline-flex;align-items:center;gap:6px}.bp-webchat-avatar{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;flex:0 0 auto;border-radius:999px;background:var(--header-avatar-bg, var(--accent-color));color:var(--header-avatar-text, #ffffff);font-size:1rem;font-weight:700;text-transform:uppercase;overflow:hidden}.bp-webchat-avatar img{width:100%;height:100%;object-fit:cover}.bp-webchat-header-text{min-width:0}.bp-webchat-header-title{margin:0;color:var(--ui-text);font-size:.96rem;line-height:1.2;font-weight:600}.bp-webchat-header-subtitle{margin:4px 0 0;color:var(--ui-text-muted);font-size:.84rem;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bp-webchat-welcome{position:relative;display:flex;flex-direction:column;height:100%;overflow:hidden;background:var( --welcome-background, linear-gradient(180deg, #f4f4f5 0%, #fafafa 34%, #ffffff 34%, #ffffff 100%) )}.bp-webchat-welcome-hero{position:relative;min-height:184px;background:var( --welcome-hero-background, linear-gradient(180deg, #f5f5f5 0%, #efeff1 100%) );overflow:hidden}.bp-webchat-welcome-hero:after{content:"";position:absolute;inset:0;background:#0000002e;pointer-events:none}.bp-webchat-welcome-close{position:absolute;top:14px;right:14px;z-index:3}.bp-webchat-welcome-cover{display:block;position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center top}.bp-webchat-welcome-card-wrap{position:relative;margin-top:-24px;padding:0 16px;z-index:2}.bp-webchat-welcome-card{position:relative;border-radius:22px;background:var(--ui-bg-elevated);box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-border);padding:68px 22px 18px}.bp-webchat-welcome-card-badge{position:absolute;top:-34px;left:50%;transform:translate(-50%);display:grid;place-items:center;width:84px;height:84px;border-radius:999px;background:var(--header-avatar-bg, var(--accent-color));box-shadow:var(--ui-shadow-sm);overflow:hidden;border:1px solid color-mix(in srgb,var(--header-avatar-bg, var(--accent-color)) 78%,var(--ui-bg-elevated))}.bp-webchat-welcome-card-badge img{width:100%;height:100%;object-fit:cover}.bp-webchat-welcome-card-badge span{color:var(--header-avatar-text, #ffffff);font-size:2rem;font-weight:700}.bp-webchat-welcome-card-title{margin:0;color:var(--ui-text);font-size:1rem;line-height:1.15;font-weight:700;text-wrap:balance}.bp-webchat-welcome-card-status{margin:10px 0 0;color:var(--ui-text-muted);font-size:.88rem;line-height:1.4}.bp-webchat-welcome-card-status strong{color:var(--welcome-online-status-color, #16a34a);font-weight:700}.bp-webchat-welcome-card-description{margin:14px 0 0;color:var(--ui-text-muted);font-size:.94rem;line-height:1.62;text-align:justify;white-space:pre-wrap}.bp-webchat-welcome-cta{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;margin-top:22px;padding:14px 16px;border:1px solid var(--ui-primary);border-radius:var(--ui-radius-lg);box-shadow:var(--ui-shadow-sm);color:var(--ui-primary-text);font:inherit;font-size:.98rem;font-weight:600;cursor:pointer;background:var(--ui-primary);text-align:left;transition:transform .14s ease,box-shadow .14s ease,background .14s ease,border-color .14s ease}.bp-webchat-welcome-cta:hover{transform:translateY(-1px);border-color:var(--ui-primary-hover);background:var(--ui-primary-hover);box-shadow:0 10px 20px #0f172a1f}.bp-webchat-welcome-cta-left{display:inline-flex;align-items:center;gap:12px}.bp-webchat-welcome-cta-copy{display:grid;gap:2px}.bp-webchat-welcome-cta-title{color:inherit;font-size:.98rem;font-weight:600;line-height:1.2}.bp-webchat-welcome-cta-description{color:color-mix(in srgb,var(--ui-primary-text) 74%,transparent);font-size:.82rem;line-height:1.35;font-weight:500}.bp-webchat-welcome-cta-right{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;flex:0 0 auto;color:inherit;border-radius:999px;background:color-mix(in srgb,var(--ui-primary-text) 10%,transparent)}.bp-webchat-welcome-cta-right svg{width:18px;height:18px}.bp-webchat-tabs,.bp-webchat-welcome-bottom{margin-top:auto;border-top:1px solid var(--ui-border);display:grid;grid-template-columns:1fr 1fr;gap:6px;padding:6px;background:var(--ui-bg)}.bp-webchat-tab,.bp-webchat-welcome-tab{border:0;background:transparent;display:grid;justify-items:center;gap:4px;padding:9px 8px;color:var(--ui-text-muted);font-size:.84rem;font-family:inherit;font-weight:500;cursor:pointer;border-radius:var(--ui-radius-md);transition:color .14s ease,background .14s ease,box-shadow .14s ease}.bp-webchat-tab:hover,.bp-webchat-welcome-tab:hover{background:var(--ui-bg-hover)}.bp-webchat-tab[data-active=true],.bp-webchat-welcome-tab[data-active=true]{color:var(--ui-text);background:transparent;box-shadow:none}.bp-webchat-tab-icon,.bp-webchat-welcome-tab-icon{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:999px;color:inherit;background:transparent;transition:background .14s ease,transform .14s ease}.bp-webchat-tab:hover .bp-webchat-tab-icon,.bp-webchat-welcome-tab:hover .bp-webchat-welcome-tab-icon{transform:translateY(-1px)}.bp-webchat-tab[data-active=true] .bp-webchat-tab-icon,.bp-webchat-welcome-tab[data-active=true] .bp-webchat-welcome-tab-icon{background:transparent}.bp-webchat-tab-icon svg,.bp-webchat-welcome-tab-icon svg{width:15px;height:15px}.bp-webchat-icon-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;flex:0 0 auto;border:1px solid var(--ui-icon-button-border);border-radius:999px;background:var(--ui-icon-button-bg);color:var(--ui-icon-button-color);cursor:pointer;box-shadow:var(--ui-shadow-sm);transition:background .14s ease,border-color .14s ease,color .14s ease,box-shadow .14s ease}.bp-webchat-icon-button:hover{background:var(--ui-icon-button-hover);border-color:var(--ui-icon-button-border);color:var(--ui-text)}.bp-webchat-icon-button:focus-visible,.bp-webchat-tab:focus-visible,.bp-webchat-welcome-tab:focus-visible,.bp-webchat-welcome-cta:focus-visible,.bp-webchat-history-item:focus-visible,.bp-webchat-history-new:focus-visible,.bp-webchat-modal-button:focus-visible{outline:0;box-shadow:var(--ui-ring)}.bp-webchat-icon-button svg{width:20px;height:20px}.bp-webchat-mobile-close{display:none}.bp-webchat-container.bpContainer{height:100%;max-height:none;border-radius:0;border-color:var(--ui-border);background:var(--ui-bg);color:var(--ui-text);box-shadow:none}.bp-webchat-container .bpHeader{display:none}.bp-webchat-container .bpMessageListContainer,.bp-webchat-container .bpMessageListViewport,.bp-webchat-container .bpMessageListMarqueeContainer{background:var(--ui-bg);color:var(--ui-text)}.bp-webchat-container .bpMessageListContainer{padding-top:0;background:var(--ui-bg);--bpPrimary-600: var(--header-avatar-bg, var(--accent-color));--bpPrimary-50: var(--header-avatar-text, #ffffff);--message-bg: var(--outgoing-message-background-color, #ebf1fd);--message-text: var(--outgoing-message-text-color, #0f2346)}.bp-webchat-container .bpMessageListMarqueeContainer:only-child{margin-block:auto;padding-block:0}.bp-webchat-container .bpMessageListMarqueeTitle{color:var(--ui-text)}.bp-webchat-container .bpMessageListMarqueeDescription,.bp-webchat-container .bpMessageListHeaderMessage{color:var(--ui-text-muted)}.bp-webchat-container .bpMessageListScrollDownButton{z-index:1}.bp-webchat-container .bpMessageBlocksBubble[data-direction=incoming]{background-color:var(--incoming-message-background-color, #f0f0f3);color:var(--incoming-message-text-color, #202127)}.bp-webchat-container .bpMessageBlocksBubble[data-direction=outgoing]{background-color:var(--outgoing-message-background-color, #ebf1fd);color:var(--outgoing-message-text-color, #0f2346)}.bp-webchat-container .bpComposer{border-top:1px solid var(--ui-border);background:var(--ui-bg);padding:12px 14px 14px}.bp-webchat-container .bpComposerWrapper,.bp-webchat-container .bpComposerContainer{border:0;background:transparent;box-shadow:none}.bp-webchat-container .bpComposerContainer{gap:10px;padding:0;outline:none}.bp-webchat-container .bpComposerContainer:focus-within,.bp-webchat-container .bpComposerContainer[data-waiting=true]{outline:none;box-shadow:none}.bp-webchat-container .bpComposerInputContainer{border:1px solid var(--ui-border);border-radius:14px;background:var(--ui-bg-elevated);box-shadow:var(--ui-shadow-sm);overflow:hidden;transition:border-color .14s ease,box-shadow .14s ease,background .14s ease}.bp-webchat-container .bpComposerInputContainer:focus-within{border-color:var(--ui-border-strong);box-shadow:var(--ui-ring)}.bp-webchat-container .bpComposerInput{color:var(--ui-text);font-size:.95rem}.bp-webchat-container .bpComposerInput::placeholder{color:var(--ui-text-muted)}.bp-webchat-container .bpComposerSendButton{border-radius:12px;background:var(--ui-primary);color:var(--ui-primary-text);box-shadow:var(--ui-shadow-sm)}.bp-webchat-container .bpComposerSendButton:hover{background:var(--ui-primary-hover)}.bp-webchat-container .bpComposerUploadButton,.bp-webchat-container .bpComposerVoiceButton{border:1px solid var(--ui-icon-button-border);border-radius:12px;background:var(--ui-icon-button-bg);color:var(--ui-icon-button-color);box-shadow:var(--ui-shadow-sm)}.bp-webchat-container .bpComposerUploadButton:hover,.bp-webchat-container .bpComposerVoiceButton:hover{background:var(--ui-icon-button-hover);border-color:var(--ui-icon-button-border);color:var(--ui-text)}.bp-webchat-container .bpComposerFileAttachement{border-color:var(--ui-border);border-radius:12px;background:var(--ui-bg-elevated);box-shadow:none}.bp-webchat-container .bpComposerFileAttachement:hover{border-color:var(--ui-border-strong)}.bp-webchat-container .bpComposerFileIconWrapper{border-color:var(--ui-border);background:var(--ui-bg-subtle)}.bp-webchat-container .bpComposerFileName{color:var(--ui-text)}.bp-webchat-container .bpComposerFileExtension,.bp-webchat-container .bpComposerFooter{color:var(--ui-text-muted)}.bp-webchat-container .bpDropdown{position:relative;display:flex;flex-direction:column;gap:6px;width:100%;max-width:280px}.bp-webchat-container .bpDropdownLabel{font-size:.9rem;color:var(--ui-text)}.bp-webchat-container .bpDropdownControl{position:relative;display:flex;align-items:center}.bp-webchat-container .bpDropdownInput{width:100%;padding:10px 38px 10px 14px;border:1px solid var(--ui-border);border-radius:14px;background:var(--ui-bg-elevated);box-shadow:var(--ui-shadow-sm);color:var(--ui-text);font-family:inherit;font-size:.95rem;outline:none;transition:border-color .14s ease,box-shadow .14s ease}.bp-webchat-container .bpDropdownInput::placeholder{color:var(--ui-text-muted)}.bp-webchat-container .bpDropdownInput:focus{border-color:var(--ui-border-strong);box-shadow:var(--ui-ring)}.bp-webchat-container .bpDropdown[data-disabled]{opacity:.7}.bp-webchat-container .bpDropdown[data-disabled] .bpDropdownInput{cursor:default}.bp-webchat-container .bpDropdownChevron{position:absolute;right:12px;display:flex;align-items:center;pointer-events:none;color:var(--ui-text-muted);transition:transform .14s ease}.bp-webchat-container .bpDropdown[data-open] .bpDropdownChevron{transform:rotate(180deg)}.bp-webchat-container .bpDropdownChevron svg{width:18px;height:18px}.bp-webchat-container .bpDropdownMenu{position:absolute;top:100%;left:0;right:0;z-index:20;margin:6px 0 0;padding:6px;max-height:220px;overflow-y:auto;list-style:none;border:1px solid var(--ui-border);border-radius:14px;background:var(--ui-bg-elevated);box-shadow:var(--ui-shadow-md)}.bp-webchat-container .bpDropdownOption{padding:9px 12px;border-radius:10px;color:var(--ui-text);font-size:.92rem;cursor:pointer}.bp-webchat-container .bpDropdownOption[data-active]{background:var(--ui-bg-selected)}.bp-webchat-container .bpDropdownEmpty{padding:9px 12px;color:var(--ui-text-muted);font-size:.9rem}.bp-webchat-container .bpMessageListMarqueeAvatarFallback,.bp-webchat-container .bpMessageAvatarFallback,.bp-webchat-container .bpHeaderContentAvatarFallback,.bp-webchat-container .bpMessagePreviewAvatarFallback,.bp-webchat-container .bpConversationHistoryConversationAvatarFallback{background-color:var(--header-avatar-bg, var(--accent-color))!important;color:var(--header-avatar-text, #ffffff)!important}.bp-webchat-history{display:flex;flex-direction:column;height:100%;background:var(--ui-bg)}.bp-webchat-history-header{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid var(--ui-border)}.bp-webchat-history-title{margin:0;color:var(--ui-text);font-size:1rem;font-weight:600}.bp-webchat-history-list{flex:1;overflow:auto;padding:8px}.bp-webchat-history-empty,.bp-webchat-history-loading{display:grid;place-items:center;min-height:220px;padding:24px;color:var(--ui-text-muted);text-align:center;line-height:1.6}.bp-webchat-history-item{width:100%;display:grid;grid-template-columns:auto 1fr auto;gap:14px;align-items:center;padding:14px;border:1px solid transparent;border-radius:14px;background:var(--ui-bg);color:inherit;text-align:left;cursor:pointer;font:inherit;transition:background .14s ease,border-color .14s ease,box-shadow .14s ease}.bp-webchat-history-item+.bp-webchat-history-item{margin-top:8px}.bp-webchat-history-item:hover{background:var(--ui-bg-subtle);border-color:var(--ui-border)}.bp-webchat-history-avatar{display:grid;place-items:center;width:48px;height:48px;border-radius:999px;overflow:hidden;background:var(--ui-bg-muted);color:var(--ui-text-muted);font-size:1rem;font-weight:700;flex:0 0 auto;border:1px solid var(--ui-border)}.bp-webchat-history-avatar[data-kind=bot]{background:var(--header-avatar-bg, var(--accent-color));color:var(--header-avatar-text, #ffffff);border-color:color-mix(in srgb,var(--header-avatar-bg, var(--accent-color)) 76%,var(--ui-bg-elevated))}.bp-webchat-history-avatar img{width:100%;height:100%;object-fit:cover}.bp-webchat-history-avatar svg{width:20px;height:20px}.bp-webchat-history-content{min-width:0;display:grid;gap:4px}.bp-webchat-history-name{color:var(--ui-text);font-size:.93rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bp-webchat-history-time{color:var(--ui-text-muted);font-size:.82rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bp-webchat-history-chevron{color:var(--ui-text-muted)}.bp-webchat-history-chevron svg{width:20px;height:20px}.bp-webchat-history-footer{padding:12px 16px 16px;border-top:1px solid var(--ui-border);background:var(--ui-bg)}.bp-webchat-history-new{width:100%;display:inline-flex;align-items:center;justify-content:center;gap:10px;border:1px solid var(--ui-primary);border-radius:14px;padding:13px 16px;background:var(--ui-primary);color:var(--ui-primary-text);font:inherit;font-size:.94rem;font-weight:600;cursor:pointer;box-shadow:var(--ui-shadow-sm);transition:background .14s ease,border-color .14s ease,transform .14s ease}.bp-webchat-history-new:hover{background:var(--ui-primary-hover);border-color:var(--ui-primary-hover);transform:translateY(-1px)}.bp-webchat-history-new svg{width:20px;height:20px}.bp-webchat-loading{display:flex;flex-direction:column;gap:18px;padding:22px 18px 18px;height:100%;background:var(--ui-bg)}.bp-webchat-loading-hero{display:grid;place-items:center;gap:14px;padding:12px 0 18px}.bp-webchat-loading-circle{width:86px;height:86px;border-radius:999px;background:linear-gradient(135deg,color-mix(in srgb,var(--accent-color) 16%,transparent),color-mix(in srgb,var(--accent-color) 32%,transparent))}.bp-webchat-loading-line{border-radius:999px;background:linear-gradient(90deg,var(--ui-bg-muted) 0%,var(--ui-bg-subtle) 50%,var(--ui-bg-muted) 100%);background-size:200% 100%;animation:bp-webchat-shimmer 1.5s linear infinite}.bp-webchat-loading-line--title{width:120px;height:16px}.bp-webchat-loading-line--subtitle{width:170px;height:12px}.bp-webchat-loading-bubble{max-width:82%;padding:16px;border-radius:18px 18px 18px 6px;background:var(--ui-bg-muted)}.bp-webchat-loading-bubble--right{margin-left:auto;border-radius:18px 18px 6px;background:var(--ui-bg-subtle)}.bp-webchat-loading-bubble .bp-webchat-loading-line+.bp-webchat-loading-line{margin-top:10px}.bp-webchat-loading-composer{margin-top:auto;display:flex;align-items:center;gap:12px;padding-top:8px}.bp-webchat-loading-input{flex:1;height:50px;border-radius:14px;background:var(--ui-bg);border:1px solid var(--ui-border)}.bp-webchat-loading-mic{width:42px;height:42px;border-radius:999px;background:var(--ui-bg);border:1px solid var(--ui-border)}@keyframes bp-webchat-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.bp-webchat-fab{position:relative;width:64px;height:64px;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:999px;cursor:pointer;color:var(--fab-icon-color, #ffffff);box-shadow:0 14px 28px #0f172a1f;transition:transform .18s ease,box-shadow .18s ease,background .18s ease;background:var(--fab-background-color, var(--accent-color));overflow:hidden}.bp-webchat-fab:hover{transform:translateY(-2px);box-shadow:0 18px 32px #0f172a29}.bp-webchat-fab:focus-visible{outline:0;box-shadow:0 0 0 4px #ffffffe0,0 0 0 7px #2563eb2e,0 18px 36px #0f172a2e}.bp-webchat-fab:before{content:"";position:absolute;inset:1px;border-radius:999px;background:linear-gradient(180deg,#ffffff2e,#fff0);pointer-events:none}.bp-webchat-fab-icon{position:absolute;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;transition:opacity .18s ease,transform .18s ease;will-change:opacity,transform}.bp-webchat-fab-icon svg{position:relative;z-index:1;width:24px;height:24px}.bp-webchat-fab-icon--chat{opacity:1;transform:scale(1) rotate(0)}.bp-webchat-fab-icon--chat svg{width:30px;height:30px}.bp-webchat-fab-icon--close{opacity:0;transform:scale(.72) rotate(-90deg)}.bp-webchat-fab[data-open=true] .bp-webchat-fab-icon--chat{opacity:0;transform:scale(.72) rotate(90deg)}.bp-webchat-fab[data-open=true] .bp-webchat-fab-icon--close{opacity:1;transform:scale(1) rotate(0)}.bpMessageBlocksBubbleFeedbackIcon svg{width:14px;height:14px}.bp-webchat-modal-backdrop{position:absolute;inset:0;display:flex;align-items:flex-end;justify-content:center;padding:18px;overflow:hidden;border-radius:inherit;background:linear-gradient(180deg,color-mix(in srgb,var(--ui-bg-elevated) 24%,transparent),color-mix(in srgb,var(--ui-text) 16%,transparent));backdrop-filter:blur(10px) saturate(1.04);-webkit-backdrop-filter:blur(10px) saturate(1.04);z-index:20}.bp-webchat-modal{width:100%;max-width:360px;border:1px solid var(--ui-border);border-radius:18px;background:var(--ui-bg-elevated);box-shadow:var(--ui-shadow-md);overflow:hidden}.bp-webchat-modal-title{margin:0;padding:20px 20px 8px;text-align:left;color:var(--ui-text);font-size:1rem;line-height:1.3;font-weight:600}.bp-webchat-modal-description{margin:0;padding:0 20px 16px;text-align:left;color:var(--ui-text-muted);font-size:.9rem;line-height:1.55}.bp-webchat-modal-field-wrap{padding:0 20px 16px}.bp-webchat-modal-textarea{width:100%;min-height:96px;resize:vertical;border-radius:var(--ui-radius-md);border:1px solid var(--ui-border);background:var(--ui-bg-subtle);padding:12px 14px;font:inherit;color:var(--ui-text);outline:0;transition:border-color .14s ease,box-shadow .14s ease,background .14s ease}.bp-webchat-modal-textarea::placeholder{color:var(--ui-text-muted)}.bp-webchat-modal-textarea:focus{border-color:var(--ui-border-strong);box-shadow:var(--ui-ring);background:var(--ui-bg)}.bp-webchat-modal-actions{display:grid;gap:12px;padding:0 20px 20px}.bp-webchat-modal-button{width:100%;border:1px solid var(--ui-secondary-border);border-radius:var(--ui-radius-md);padding:12px 16px;font:inherit;font-size:.94rem;font-weight:600;cursor:pointer;color:var(--ui-secondary-text);background:var(--ui-secondary);box-shadow:var(--ui-shadow-sm);transition:transform .14s ease,background .14s ease,border-color .14s ease,box-shadow .14s ease,color .14s ease}.bp-webchat-modal-button:hover{transform:translateY(-1px);border-color:var(--ui-secondary-border);background:var(--ui-secondary-hover)}.bp-webchat-modal-button--primary{border-color:var(--ui-primary);color:var(--ui-primary-text);background:var(--ui-primary)}.bp-webchat-modal-button--primary:hover{border-color:var(--ui-primary-hover);background:var(--ui-primary-hover)}@media(max-width:640px){.bp-webchat-shell{width:calc(100vw - 24px)}.bp-webchat-panel{height:min(var(--widget-height),calc(100vh - 120px))}.bp-webchat-welcome-card{padding-left:20px;padding-right:20px}.bp-webchat-welcome-card-description{max-width:none}.bp-webchat-shell[data-panel-mounted=true]{inset:0!important;width:100vw!important;max-width:100vw!important;height:100vh;height:100dvh;gap:0}.bp-webchat-shell[data-panel-mounted=true] .bp-webchat-panel{width:100%;height:100%;border:0;border-radius:0;box-shadow:none;transform:none}.bp-webchat-shell[data-panel-mounted=true] .bp-webchat-fab{display:none}.bp-webchat-mobile-close{display:inline-flex}}
|