@ihoomanai/chat-widget 4.0.1 → 4.1.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/dist/index.cjs.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
- * @ihoomanai/chat-widget v4.0.1
3
- * Professional AI chat widget for any website - dark theme, modern design, secure Widget ID based initialization
2
+ * @ihoomanai/chat-widget v4.1.0
3
+ * Universal chat support widget for any website - secure Widget ID based initialization
4
4
  *
5
5
  * @license MIT
6
6
  * @copyright Ihooman AI
@@ -14,20 +14,20 @@ Object.defineProperty(exports, '__esModule', { value: true });
14
14
  * Enhanced with professional features
15
15
  * @version 3.0.0
16
16
  */
17
- const VERSION = '4.0.0';
17
+ const VERSION = '4.1.0';
18
18
  const STORAGE_PREFIX = 'ihooman_chat_';
19
19
  const DEFAULT_SERVER_URL = 'https://api.ihooman.ai';
20
20
  const defaultConfig = {
21
21
  serverUrl: DEFAULT_SERVER_URL,
22
- theme: 'dark',
22
+ theme: 'light',
23
23
  position: 'bottom-right',
24
- title: 'AI Assistant',
25
- subtitle: 'Always here to help',
26
- welcomeMessage: 'Hello! How can I help you today?',
27
- placeholder: 'Send a message...',
28
- primaryColor: '#ededed',
29
- gradientFrom: '#171717',
30
- gradientTo: '#171717',
24
+ title: 'Chat Support',
25
+ subtitle: 'We typically reply within minutes',
26
+ welcomeMessage: 'Hi there! 👋 How can we help you today?',
27
+ placeholder: 'Type a message...',
28
+ primaryColor: '#00aeff',
29
+ gradientFrom: '#00aeff',
30
+ gradientTo: '#0066ff',
31
31
  showTimestamps: true,
32
32
  showTypingIndicator: true,
33
33
  enableSounds: true,
@@ -35,11 +35,11 @@ const defaultConfig = {
35
35
  startOpen: false,
36
36
  persistSession: true,
37
37
  zIndex: 9999,
38
- width: 400,
39
- height: 620,
40
- buttonSize: 52,
38
+ width: 380,
39
+ height: 560,
40
+ buttonSize: 60,
41
41
  borderRadius: 16,
42
- fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, Roboto, sans-serif',
42
+ fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
43
43
  avatarUrl: '',
44
44
  poweredBy: true,
45
45
  presetQuestions: [],
@@ -49,18 +49,18 @@ const defaultConfig = {
49
49
  allowLocalhost: true,
50
50
  };
51
51
  const icons = {
52
- chat: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg>`,
53
- close: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>`,
54
- send: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg>`,
55
- attach: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"></path></svg>`,
56
- minimize: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="m6 9 6 6 6-6"></path></svg>`,
57
- sparkle: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path></svg>`,
58
- agent: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="8" r="5"></circle><path d="M20 21a8 8 0 0 0-16 0"></path></svg>`,
59
- ticket: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"></path><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M10 18v-1"></path><path d="M14 18v-1"></path><path d="M10 14v-1"></path><path d="M14 14v-1"></path></svg>`,
60
- history: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"></path><path d="M3 3v5h5"></path><path d="M12 7v5l4 2"></path></svg>`,
61
- plus: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14"></path><path d="M12 5v14"></path></svg>`,
62
- star: `<svg viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="1"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg>`,
63
- starEmpty: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg>`};
52
+ chat: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg>`,
53
+ close: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>`,
54
+ send: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="22" y1="2" x2="11" y2="13"></line><polygon points="22 2 15 22 11 13 2 9 22 2"></polygon></svg>`,
55
+ attach: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"></path></svg>`,
56
+ minimize: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="5" y1="12" x2="19" y2="12"></line></svg>`,
57
+ bot: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="11" width="18" height="10" rx="2"></rect><circle cx="12" cy="5" r="2"></circle><path d="M12 7v4"></path></svg>`,
58
+ agent: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg>`,
59
+ ticket: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>`,
60
+ history: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>`,
61
+ plus: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>`,
62
+ star: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"></path></svg>`,
63
+ starEmpty: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"></path></svg>`};
64
64
  let config = { widgetId: '', ...defaultConfig };
65
65
  let state = {
66
66
  isOpen: false,
@@ -206,32 +206,26 @@ function matchUrlPattern(pattern) {
206
206
  // STYLES
207
207
  // ============================================================================
208
208
  function generateStyles() {
209
- const { fontFamily, borderRadius, zIndex, width, height, buttonSize } = config;
210
- const isDark = config.theme === 'dark' || config.theme === 'auto';
211
- // Professional dark/light color tokens Vercel-inspired
212
- const bgColor = isDark ? '#0a0a0a' : '#ffffff';
213
- const bgElevated = isDark ? '#141414' : '#fafafa';
214
- const bgSurface = isDark ? '#1a1a1a' : '#f4f4f5';
215
- const textColor = isDark ? '#ededed' : '#09090b';
216
- const textSecondary = isDark ? '#a1a1aa' : '#71717a';
217
- const mutedColor = isDark ? '#52525b' : '#a1a1aa';
218
- const borderColor = isDark ? '#27272a' : '#e4e4e7';
219
- const borderSubtle = isDark ? '#1f1f23' : '#f4f4f5';
220
- const inputBg = isDark ? '#141414' : '#fafafa';
221
- const hoverBg = isDark ? '#1c1c1c' : '#f4f4f5';
222
- const accentColor = isDark ? '#ededed' : '#18181b';
223
- const accentBg = isDark ? '#ededed' : '#18181b';
224
- const accentText = isDark ? '#09090b' : '#fafafa';
225
- const userMsgBg = isDark ? '#27272a' : '#18181b';
226
- const userMsgText = isDark ? '#ededed' : '#fafafa';
227
- const botMsgBg = 'transparent';
209
+ const { primaryColor, gradientFrom, gradientTo, fontFamily, borderRadius, zIndex, width, height, buttonSize } = config;
210
+ const isDark = config.theme === 'dark';
211
+ const bgColor = isDark ? '#0a0a0f' : '#ffffff';
212
+ const bgSecondary = isDark ? '#111118' : '#f9fafb';
213
+ const bgTertiary = isDark ? '#16161f' : '#f1f5f9';
214
+ const textColor = isDark ? '#e4e4e7' : '#1f2937';
215
+ const mutedColor = isDark ? '#52525b' : '#6b7280';
216
+ const textSecondary = isDark ? '#a1a1aa' : '#6b7280';
217
+ const borderColor = isDark ? 'rgba(255,255,255,0.06)' : 'rgba(0,0,0,0.08)';
218
+ const borderLight = isDark ? 'rgba(255,255,255,0.04)' : 'rgba(0,0,0,0.05)';
219
+ const inputBg = isDark ? '#111118' : '#f9fafb';
220
+ const accentColor = isDark ? (primaryColor || '#10b981') : primaryColor;
221
+ const messageBgUser = isDark ? '#1a1a26' : `linear-gradient(135deg, ${gradientFrom}, ${gradientTo})`;
222
+ const messageBgBot = isDark ? '#16161f' : '#f1f5f9';
228
223
  const positionRight = config.position?.includes('right') ?? true;
229
224
  const positionBottom = config.position?.includes('bottom') ?? true;
230
- const shadowLg = isDark ? '0 24px 48px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.05)' : '0 24px 48px rgba(0,0,0,0.12), 0 0 0 1px rgba(0,0,0,0.05)';
231
225
  return `
232
226
  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
233
227
  :host { all: initial; }
234
- .ihooman-widget { font-family: ${fontFamily}; font-size: 14px; line-height: 1.6; color: ${textColor}; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
228
+ .ihooman-widget { font-family: ${fontFamily}; font-size: 14px; line-height: 1.5; color: ${textColor}; -webkit-font-smoothing: antialiased; }
235
229
  button {
236
230
  font-family: inherit;
237
231
  font-size: 100%;
@@ -244,188 +238,144 @@ function generateStyles() {
244
238
  cursor: pointer;
245
239
  outline: none;
246
240
  }
247
- button:focus-visible { outline: 2px solid ${accentColor}; outline-offset: 2px; }
248
-
249
- /* ── Toggle Button ── */
250
- .ihooman-toggle { position: fixed !important; ${positionRight ? 'right: 20px' : 'left: 20px'}; ${positionBottom ? 'bottom: 20px' : 'top: 20px'}; width: ${buttonSize}px !important; height: ${buttonSize}px !important; border-radius: 50% !important; background: ${accentBg} !important; border: 1px solid ${borderColor} !important; cursor: pointer; z-index: ${zIndex}; display: flex !important; align-items: center; justify-content: center; box-shadow: ${shadowLg}; transition: all 0.2s ease-out; overflow: hidden; }
251
- .ihooman-toggle:hover { transform: scale(1.05); box-shadow: ${shadowLg}; }
252
- .ihooman-toggle:active { transform: scale(0.96); }
253
- .ihooman-toggle svg { width: 22px; height: 22px; color: ${accentText}; transition: transform 0.25s ease-out, opacity 0.15s ease; position: relative; z-index: 1; }
254
- .ihooman-toggle .chat-icon { display: flex; align-items: center; justify-content: center; transition: transform 0.25s ease-out, opacity 0.15s ease; }
255
- .ihooman-toggle .close-icon { position: absolute; display: flex; align-items: center; justify-content: center; transform: rotate(-90deg) scale(0); opacity: 0; transition: transform 0.25s ease-out, opacity 0.15s ease; }
241
+ .ihooman-toggle { position: fixed !important; ${positionRight ? 'right: 20px' : 'left: 20px'}; ${positionBottom ? 'bottom: 20px' : 'top: 20px'}; width: ${buttonSize}px !important; height: ${buttonSize}px !important; border-radius: 50% !important; background: ${isDark ? bgSecondary : `linear-gradient(135deg, ${gradientFrom}, ${gradientTo})`} !important; border: ${isDark ? `1px solid ${borderColor}` : 'none'} !important; cursor: pointer; z-index: ${zIndex}; display: flex !important; align-items: center; justify-content: center; box-shadow: ${isDark ? '0 8px 32px rgba(0,0,0,0.5)' : '0 4px 20px rgba(0, 174, 255, 0.35)'}; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); overflow: hidden; }
242
+ .ihooman-toggle:hover { transform: scale(1.08); box-shadow: 0 6px 28px rgba(0, 174, 255, 0.45); }
243
+ .ihooman-toggle:active { transform: scale(0.95); }
244
+ .ihooman-toggle::before { content: ''; position: absolute; inset: 0; background: linear-gradient(to bottom, rgba(255,255,255,0.2), transparent); border-radius: 50%; }
245
+ .ihooman-toggle svg { width: 26px; height: 26px; color: white; transition: transform 0.3s ease, opacity 0.2s ease; position: relative; z-index: 1; }
246
+ .ihooman-toggle .chat-icon { display: flex; align-items: center; justify-content: center; transition: transform 0.3s ease, opacity 0.2s ease; }
247
+ .ihooman-toggle .close-icon { position: absolute; display: flex; align-items: center; justify-content: center; transform: rotate(-90deg) scale(0); opacity: 0; transition: transform 0.3s ease, opacity 0.2s ease; }
256
248
  .ihooman-toggle.open .chat-icon { transform: rotate(90deg) scale(0); opacity: 0; }
257
249
  .ihooman-toggle.open .close-icon { transform: rotate(0) scale(1); opacity: 1; }
258
- .ihooman-pulse { display: none; }
259
- .ihooman-badge { position: absolute; top: -3px; right: -3px; min-width: 18px; height: 18px; padding: 0 5px; background: #dc2626; color: white; font-size: 10px; font-weight: 600; border-radius: 9px; display: flex; align-items: center; justify-content: center; z-index: 2; border: 2px solid ${bgColor}; }
250
+ .ihooman-pulse { position: absolute; inset: 0; border-radius: 50%; background: ${primaryColor}; animation: ihooman-pulse 2s ease-out infinite; }
251
+ @keyframes ihooman-pulse { 0% { transform: scale(1); opacity: 0.5; } 100% { transform: scale(1.6); opacity: 0; } }
252
+ .ihooman-toggle.open .ihooman-pulse { display: none; }
253
+ .ihooman-badge { position: absolute; top: -4px; right: -4px; min-width: 20px; height: 20px; padding: 0 6px; background: #ef4444; color: white; font-size: 11px; font-weight: 600; border-radius: 10px; display: flex; align-items: center; justify-content: center; z-index: 2; }
260
254
  .ihooman-badge:empty { display: none; }
261
-
262
- /* ── Window ── */
263
- .ihooman-window { position: fixed; ${positionRight ? 'right: 20px' : 'left: 20px'}; ${positionBottom ? 'bottom: 84px' : 'top: 84px'}; width: ${width}px; height: ${height}px; min-height: ${height}px; max-height: ${height}px; z-index: ${(zIndex ?? 9999) - 1}; display: flex; flex-direction: column; opacity: 0; visibility: hidden; transform: translateY(12px) scale(0.97); transition: opacity 0.2s ease-out, visibility 0.2s ease-out, transform 0.2s ease-out; overscroll-behavior: contain; }
255
+ .ihooman-window { position: fixed; ${positionRight ? 'right: 20px' : 'left: 20px'}; ${positionBottom ? 'bottom: 90px' : 'top: 90px'}; width: ${width}px; height: ${height}px; min-height: ${height}px; max-height: ${height}px; z-index: ${(zIndex ?? 9999) - 1}; display: flex; flex-direction: column; opacity: 0; visibility: hidden; transform: translateY(20px) scale(0.95); transition: opacity 0.3s, visibility 0.3s, transform 0.3s; overscroll-behavior: contain; }
264
256
  .ihooman-window.open { opacity: 1; visibility: visible; transform: translateY(0) scale(1); }
265
-
266
- /* ── Container ── */
267
- .ihooman-container { position: relative; width: 100%; height: 100%; display: flex; flex-direction: column; border-radius: ${borderRadius}px; overflow: hidden; flex-shrink: 0; background: ${bgColor}; border: 1px solid ${borderColor}; box-shadow: ${shadowLg}; }
268
-
269
- /* ── Header ── */
270
- .ihooman-header { padding: 14px 16px; background: ${bgElevated}; color: ${textColor}; display: flex; align-items: center; gap: 12px; flex-shrink: 0; border-bottom: 1px solid ${borderColor}; }
271
- .ihooman-header-avatar { width: 36px; height: 36px; border-radius: 10px; background: ${bgSurface}; display: flex; align-items: center; justify-content: center; flex-shrink: 0; border: 1px solid ${borderColor}; }
272
- .ihooman-header-avatar img { width: 100%; height: 100%; border-radius: 10px; object-fit: cover; }
273
- .ihooman-header-avatar svg { width: 18px; height: 18px; color: ${textSecondary}; }
257
+ .ihooman-container { position: relative; width: 100%; height: 100%; display: flex; flex-direction: column; border-radius: ${borderRadius}px; overflow: hidden; flex-shrink: 0; }
258
+ .ihooman-container::before { content: ''; position: absolute; inset: 0; background: ${bgColor}; opacity: ${isDark ? '1' : '0.97'}; backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-radius: ${borderRadius}px; border: 1px solid ${borderColor}; box-shadow: ${isDark ? '0 25px 60px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.02)' : '0 25px 50px -12px rgba(0, 0, 0, 0.25)'}; }
259
+ .ihooman-container > * { position: relative; z-index: 1; }
260
+ .ihooman-header { padding: 16px 20px; background: ${isDark ? bgSecondary : `linear-gradient(135deg, ${gradientFrom}, ${gradientTo})`}; color: ${isDark ? textColor : 'white'}; display: flex; align-items: center; gap: 12px; flex-shrink: 0; border-bottom: ${isDark ? `1px solid ${borderColor}` : 'none'}; }
261
+ .ihooman-header-avatar { width: ${isDark ? '38px' : '42px'}; height: ${isDark ? '38px' : '42px'}; border-radius: ${isDark ? '12px' : '50%'}; background: ${isDark ? bgTertiary : 'rgba(255,255,255,0.2)'}; display: flex; align-items: center; justify-content: center; flex-shrink: 0; border: ${isDark ? `1px solid ${borderColor}` : 'none'}; position: relative; overflow: hidden; }
262
+ .ihooman-header-avatar img { width: 100%; height: 100%; border-radius: 50%; object-fit: cover; }
263
+ .ihooman-header-avatar svg { width: 22px; height: 22px; }
274
264
  .ihooman-header-info { flex: 1; min-width: 0; }
275
- .ihooman-header-title { font-size: 14px; font-weight: 600; margin-bottom: 1px; letter-spacing: -0.01em; color: ${textColor}; }
276
- .ihooman-header-status { display: flex; align-items: center; gap: 5px; font-size: 12px; color: ${textSecondary}; }
277
- .ihooman-status-dot { width: 6px; height: 6px; border-radius: 50%; background: #22c55e; flex-shrink: 0; }
278
- .ihooman-status-dot.offline { background: #a1a1aa; }
279
- .ihooman-header-actions { display: flex; gap: 4px; }
280
- .ihooman-header-btn { width: 30px; height: 30px; border-radius: 8px; background: transparent; border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; color: ${textSecondary}; transition: background 0.15s ease, color 0.15s ease; }
281
- .ihooman-header-btn:hover { background: ${hoverBg}; color: ${textColor}; }
282
- .ihooman-header-btn svg { width: 15px; height: 15px; }
283
-
284
- /* ── Messages ── */
285
- .ihooman-messages { flex: 1; overflow-y: auto; overflow-x: hidden; padding: 20px 16px; display: flex; flex-direction: column; gap: 6px; background: ${bgColor}; overscroll-behavior: contain; min-height: 0; }
286
- .ihooman-messages::-webkit-scrollbar { width: 4px; }
265
+ .ihooman-header-title { font-size: 16px; font-weight: 600; margin-bottom: 2px; }
266
+ .ihooman-header-status { display: flex; align-items: center; gap: 6px; font-size: 12px; opacity: 0.9; }
267
+ .ihooman-status-dot { width: 8px; height: 8px; border-radius: 50%; background: #22c55e; }
268
+ .ihooman-status-dot.offline { background: #f59e0b; }
269
+ .ihooman-header-actions { display: flex; gap: 8px; }
270
+ .ihooman-header-btn { width: 30px; height: 30px; border-radius: ${isDark ? '8px' : '6px'}; background: ${isDark ? 'transparent' : 'rgba(255,255,255,0.15)'}; border: ${isDark ? `1px solid ${borderColor}` : 'none'}; cursor: pointer; display: flex; align-items: center; justify-content: center; color: ${isDark ? textSecondary : 'white'}; transition: all 0.2s; }
271
+ .ihooman-header-btn:hover { background: ${isDark ? bgTertiary : 'rgba(255,255,255,0.25)'}; color: ${isDark ? textColor : 'white'}; }
272
+ .ihooman-header-btn svg { width: 14px; height: 14px; }
273
+ .ihooman-messages { flex: 1; overflow-y: auto; overflow-x: hidden; padding: 16px; display: flex; flex-direction: column; gap: 12px; background: ${bgColor}; overscroll-behavior: contain; min-height: 0; ${isDark ? 'background-image: linear-gradient(rgba(255,255,255,0.012) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.012) 1px, transparent 1px); background-size: 40px 40px;' : ''} }
274
+ .ihooman-messages::-webkit-scrollbar { width: 6px; }
287
275
  .ihooman-messages::-webkit-scrollbar-track { background: transparent; }
288
- .ihooman-messages::-webkit-scrollbar-thumb { background: ${isDark ? '#27272a' : '#d4d4d8'}; border-radius: 2px; }
289
- .ihooman-message { display: flex; flex-direction: column; max-width: 88%; animation: ihooman-fadeIn 0.25s ease-out; }
290
- @keyframes ihooman-fadeIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } }
276
+ .ihooman-messages::-webkit-scrollbar-thumb { background: ${borderColor}; border-radius: 3px; }
277
+ .ihooman-message { display: flex; flex-direction: column; max-width: 85%; animation: ihooman-fadeIn 0.3s ease; }
278
+ @keyframes ihooman-fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
291
279
  .ihooman-message.user { align-self: flex-end; align-items: flex-end; }
292
- .ihooman-message.bot { align-self: flex-start; align-items: flex-start; max-width: 100%; }
293
- .ihooman-message-content { padding: 10px 14px; border-radius: 14px; word-wrap: break-word; overflow-wrap: break-word; font-size: 14px; line-height: 1.6; }
294
- .ihooman-message.user .ihooman-message-content { background: ${userMsgBg}; color: ${userMsgText}; border-bottom-right-radius: 4px; }
295
- .ihooman-message.bot .ihooman-message-content { background: ${botMsgBg}; color: ${textColor}; padding: 6px 2px; }
296
- .ihooman-message-content a { color: ${isDark ? '#60a5fa' : '#2563eb'}; text-decoration: underline; text-underline-offset: 2px; }
297
- .ihooman-message-content a:hover { opacity: 0.8; }
298
- .ihooman-message-content code { background: ${isDark ? '#27272a' : '#f4f4f5'}; padding: 2px 6px; border-radius: 4px; font-family: 'SF Mono', 'Fira Code', 'Fira Mono', Menlo, Consolas, monospace; font-size: 12.5px; border: 1px solid ${borderSubtle}; }
299
- .ihooman-message-content strong { font-weight: 600; }
300
- .ihooman-message-time { font-size: 11px; color: ${mutedColor}; margin-top: 3px; padding: 0 4px; }
301
-
302
- /* ── Typing Indicator — Shimmer ── */
303
- .ihooman-typing { display: flex; align-items: center; gap: 10px; padding: 10px 2px; max-width: 180px; align-self: flex-start; animation: ihooman-fadeIn 0.2s ease-out; }
304
- .ihooman-typing-shimmer { font-size: 13px; color: ${mutedColor}; background: linear-gradient(90deg, ${mutedColor} 25%, ${textSecondary} 50%, ${mutedColor} 75%); background-size: 200% 100%; -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; animation: ihooman-shimmer 1.5s ease-in-out infinite; }
305
- @keyframes ihooman-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
306
- .ihooman-typing-dots { display: flex; gap: 3px; align-items: center; }
307
- .ihooman-typing-dot { width: 5px; height: 5px; background: ${mutedColor}; border-radius: 50%; animation: ihooman-typing 1.2s ease-in-out infinite; }
308
- .ihooman-typing-dot:nth-child(2) { animation-delay: 0.15s; }
309
- .ihooman-typing-dot:nth-child(3) { animation-delay: 0.3s; }
310
- @keyframes ihooman-typing { 0%, 60%, 100% { opacity: 0.3; transform: scale(0.8); } 30% { opacity: 1; transform: scale(1); } }
311
-
312
- /* ── Input Area ── */
280
+ .ihooman-message.bot { align-self: flex-start; align-items: flex-start; }
281
+ .ihooman-message-content { padding: 12px 16px; border-radius: 16px; word-wrap: break-word; }
282
+ .ihooman-message.user .ihooman-message-content { background: ${messageBgUser}; color: ${isDark ? textColor : 'white'}; border-bottom-right-radius: 4px; ${isDark ? `border: 1px solid ${borderColor};` : ''} }
283
+ .ihooman-message.bot .ihooman-message-content { background: ${messageBgBot}; color: ${textColor}; border-bottom-left-radius: 4px; ${isDark ? `border: 1px solid ${borderLight};` : ''} }
284
+ .ihooman-message-content code { background: rgba(0,0,0,0.1); padding: 2px 6px; border-radius: 4px; font-family: monospace; font-size: 13px; }
285
+ .ihooman-message-time { font-size: 11px; color: ${mutedColor}; margin-top: 4px; padding: 0 4px; }
286
+ .ihooman-typing { display: flex; align-items: center; gap: 8px; padding: 12px 16px; background: ${messageBgBot}; border-radius: 16px; border-bottom-left-radius: 4px; max-width: 80px; align-self: flex-start; }
287
+ .ihooman-typing-dots { display: flex; gap: 4px; }
288
+ .ihooman-typing-dot { width: 8px; height: 8px; background: ${mutedColor}; border-radius: 50%; animation: ihooman-typing 1.4s infinite; }
289
+ .ihooman-typing-dot:nth-child(2) { animation-delay: 0.2s; }
290
+ .ihooman-typing-dot:nth-child(3) { animation-delay: 0.4s; }
291
+ @keyframes ihooman-typing { 0%, 60%, 100% { transform: translateY(0); opacity: 0.4; } 30% { transform: translateY(-4px); opacity: 1; } }
313
292
  .ihooman-input-area { padding: 12px 16px; background: ${bgColor}; border-top: 1px solid ${borderColor}; flex-shrink: 0; }
314
- .ihooman-input-wrapper { display: flex; align-items: flex-end; gap: 8px; background: ${inputBg}; border: 1px solid ${borderColor}; border-radius: 12px; padding: 8px 12px; transition: border-color 0.15s ease, box-shadow 0.15s ease; }
315
- .ihooman-input-wrapper:focus-within { border-color: ${isDark ? '#3f3f46' : '#a1a1aa'}; }
316
- .ihooman-input { flex: 1; border: none; background: transparent; font-family: inherit; font-size: 14px; color: ${textColor}; resize: none; max-height: 100px; outline: none; line-height: 1.5; }
293
+ .ihooman-input-wrapper { display: flex; align-items: flex-end; gap: 8px; background: ${inputBg}; border: 1px solid ${borderColor}; border-radius: ${isDark ? '16px' : '12px'}; padding: 8px 12px; transition: border-color 0.2s, box-shadow 0.2s; }
294
+ .ihooman-input-wrapper:focus-within { border-color: ${isDark ? 'rgba(255,255,255,0.12)' : primaryColor}; box-shadow: ${isDark ? 'none' : '0 0 0 3px rgba(0, 174, 255, 0.1)'}; }
295
+ .ihooman-input { flex: 1; border: none; background: transparent; font-family: inherit; font-size: 14px; color: ${textColor}; resize: none; max-height: 100px; outline: none; line-height: 1.4; }
317
296
  .ihooman-input::placeholder { color: ${mutedColor}; }
318
- .ihooman-input-btn { width: 30px; height: 30px; border-radius: 8px; border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.15s ease; background: transparent; color: ${mutedColor}; flex-shrink: 0; }
319
- .ihooman-input-btn:hover { color: ${textColor}; background: ${hoverBg}; }
320
- .ihooman-input-btn.send { background: ${accentBg}; color: ${accentText}; }
321
- .ihooman-input-btn.send:hover { opacity: 0.85; }
322
- .ihooman-input-btn.send:disabled { opacity: 0.3; cursor: not-allowed; }
297
+ .ihooman-input-btn { width: 32px; height: 32px; border-radius: 8px; border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.2s; background: transparent; color: ${mutedColor}; }
298
+ .ihooman-input-btn:hover { background: ${borderColor}; color: ${textColor}; }
299
+ .ihooman-input-btn.send { background: ${isDark ? bgTertiary : `linear-gradient(135deg, ${gradientFrom}, ${gradientTo})`}; color: ${isDark ? mutedColor : 'white'}; ${isDark ? `border: 1px solid ${borderColor};` : ''} }
300
+ .ihooman-input-btn.send:hover { ${isDark ? `background: ${accentColor}; border-color: ${accentColor}; color: white;` : 'opacity: 0.9;'} }
301
+ .ihooman-input-btn.send:disabled { opacity: 0.5; cursor: not-allowed; }
323
302
  .ihooman-input-btn svg { width: 16px; height: 16px; }
324
- .ihooman-input:disabled { opacity: 0.5; cursor: not-allowed; }
325
- .ihooman-input-btn.attach:disabled { opacity: 0.3; cursor: not-allowed; }
303
+ .ihooman-input:disabled { opacity: 0.6; cursor: not-allowed; }
304
+ .ihooman-input-btn.attach:disabled { opacity: 0.4; cursor: not-allowed; }
326
305
  .ihooman-file-input { display: none; }
327
-
328
- /* ── Powered By ── */
329
- .ihooman-powered { text-align: center; padding: 8px; font-size: 11px; color: ${mutedColor}; background: ${bgColor}; border-top: 1px solid ${borderSubtle}; }
330
- .ihooman-powered a { color: ${textSecondary}; text-decoration: none; font-weight: 500; }
331
- .ihooman-powered a:hover { color: ${textColor}; }
332
-
333
- /* ── Escalation ── */
306
+ .ihooman-powered { text-align: center; padding: 8px; font-size: 11px; color: ${mutedColor}; background: ${bgColor}; }
307
+ .ihooman-powered a { color: ${primaryColor}; text-decoration: none; }
334
308
  .ihooman-escalation-actions { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }
335
309
  .ihooman-escalation-btn svg { width: 14px; height: 14px; flex-shrink: 0; }
336
-
337
- /* ── Status Bar ── */
338
- .ihooman-status-bar { padding: 8px 16px; text-align: center; font-size: 12px; display: none; font-weight: 500; }
310
+ .ihooman-status-bar { padding: 10px 16px; text-align: center; font-size: 13px; display: none; }
339
311
  .ihooman-status-bar.show { display: block; }
340
- .ihooman-status-bar.waiting { background: ${isDark ? '#1c1917' : '#fef9c3'}; color: ${isDark ? '#fbbf24' : '#92400e'}; border-bottom: 1px solid ${isDark ? '#292524' : '#fef08a'}; }
341
- .ihooman-status-bar.connected { background: ${isDark ? '#052e16' : '#dcfce7'}; color: ${isDark ? '#4ade80' : '#166534'}; border-bottom: 1px solid ${isDark ? '#14532d' : '#bbf7d0'}; }
342
-
343
- /* ── Chat View ── */
312
+ .ihooman-status-bar.waiting { background: #fef3c7; color: #92400e; }
313
+ .ihooman-status-bar.connected { background: #dcfce7; color: #166534; }
344
314
  .ihooman-chat-view { display: flex; flex-direction: column; flex: 1; overflow: hidden; min-height: 0; }
345
315
  .ihooman-chat-view.hidden { display: none; }
346
-
347
- /* ── Ticket View ── */
348
- .ihooman-ticket-view { display: none; flex-direction: column; padding: 20px; gap: 14px; background: ${bgColor}; flex: 1; overflow-y: auto; min-height: 0; }
316
+ .ihooman-ticket-view { display: none; flex-direction: column; padding: 20px; gap: 16px; background: ${bgColor}; flex: 1; overflow-y: auto; min-height: 0; }
349
317
  .ihooman-ticket-view.show { display: flex; }
350
- .ihooman-ticket-title { font-size: 16px; font-weight: 600; color: ${textColor}; margin: 0; letter-spacing: -0.01em; }
351
- .ihooman-ticket-subtitle { font-size: 13px; color: ${textSecondary}; margin: 0; }
352
- .ihooman-ticket-input { padding: 10px 14px; border: 1px solid ${borderColor}; border-radius: 10px; font-size: 14px; font-family: inherit; background: ${inputBg}; color: ${textColor}; outline: none; transition: border-color 0.15s ease; }
353
- .ihooman-ticket-input:focus { border-color: ${isDark ? '#3f3f46' : '#a1a1aa'}; }
318
+ .ihooman-ticket-title { font-size: 18px; font-weight: 600; color: ${textColor}; margin: 0; }
319
+ .ihooman-ticket-subtitle { font-size: 13px; color: ${mutedColor}; margin: 0; }
320
+ .ihooman-ticket-input { padding: 12px 14px; border: 1px solid ${borderColor}; border-radius: 10px; font-size: 14px; font-family: inherit; background: ${inputBg}; color: ${textColor}; outline: none; transition: border-color 0.2s; }
321
+ .ihooman-ticket-input:focus { border-color: ${primaryColor}; }
354
322
  .ihooman-ticket-input::placeholder { color: ${mutedColor}; }
355
323
  .ihooman-ticket-textarea { min-height: 100px; resize: vertical; }
356
- .ihooman-ticket-submit { display: flex; align-items: center; justify-content: center; padding: 10px; background: ${accentBg}; color: ${accentText}; border: none; border-radius: 10px; font-size: 14px; font-weight: 500; cursor: pointer; transition: all 0.15s ease; line-height: 1.4; }
357
- .ihooman-ticket-submit:hover { opacity: 0.85; }
358
- .ihooman-ticket-submit:disabled { opacity: 0.4; cursor: not-allowed; }
359
- .ihooman-ticket-back { display: flex; align-items: center; justify-content: center; padding: 10px; background: transparent; color: ${textSecondary}; border: 1px solid ${borderColor}; border-radius: 10px; font-size: 13px; cursor: pointer; transition: all 0.15s ease; line-height: 1.4; }
360
- .ihooman-ticket-back:hover { background: ${hoverBg}; color: ${textColor}; }
361
-
362
- /* ── History View ── */
324
+ .ihooman-ticket-submit { display: flex; align-items: center; justify-content: center; padding: 12px; background: linear-gradient(135deg, ${gradientFrom}, ${gradientTo}); color: white; border: none; border-radius: 8px; font-size: 14px; font-weight: 500; cursor: pointer; transition: all 0.2s; line-height: 1.4; }
325
+ .ihooman-ticket-submit:hover { opacity: 0.9; }
326
+ .ihooman-ticket-submit:disabled { opacity: 0.5; cursor: not-allowed; }
327
+ .ihooman-ticket-back { display: flex; align-items: center; justify-content: center; padding: 10px; background: transparent; color: ${mutedColor}; border: 1px solid ${borderColor}; border-radius: 8px; font-size: 13px; cursor: pointer; transition: all 0.2s; line-height: 1.4; }
328
+ .ihooman-ticket-back:hover { background: ${isDark ? 'rgba(255,255,255,0.05)' : 'rgba(0,0,0,0.03)'}; }
363
329
  .ihooman-history-view { display: none; flex-direction: column; flex: 1; overflow: hidden; background: ${bgColor}; }
364
330
  .ihooman-history-view.show { display: flex; }
365
331
  .ihooman-history-header { padding: 12px 16px; border-bottom: 1px solid ${borderColor}; display: flex; justify-content: space-between; align-items: center; }
366
- .ihooman-history-title { font-size: 13px; font-weight: 600; color: ${textColor}; margin: 0; }
367
- .ihooman-history-new { display: inline-flex; align-items: center; justify-content: center; gap: 4px; background: ${accentBg}; color: ${accentText}; border: none; padding: 6px 12px; border-radius: 8px; font-size: 12px; font-weight: 500; cursor: pointer; transition: all 0.15s ease; line-height: 1.4; }
368
- .ihooman-history-new:hover { opacity: 0.85; }
332
+ .ihooman-history-title { font-size: 14px; font-weight: 600; color: ${textColor}; margin: 0; }
333
+ .ihooman-history-new { display: inline-flex; align-items: center; justify-content: center; gap: 4px; background: linear-gradient(135deg, ${gradientFrom}, ${gradientTo}); color: white; border: none; padding: 6px 12px; border-radius: 6px; font-size: 12px; font-weight: 500; cursor: pointer; transition: all 0.2s; line-height: 1.4; }
334
+ .ihooman-history-new:hover { opacity: 0.9; }
369
335
  .ihooman-history-new svg { width: 12px; height: 12px; flex-shrink: 0; }
370
336
  .ihooman-history-list { flex: 1; overflow-y: auto; padding: 8px; overscroll-behavior: contain; }
371
- .ihooman-history-item { padding: 12px; border: 1px solid ${borderColor}; border-radius: 10px; margin-bottom: 6px; cursor: pointer; transition: all 0.15s ease; background: ${bgColor}; }
372
- .ihooman-history-item:hover { background: ${hoverBg}; }
373
- .ihooman-history-item.active { background: ${hoverBg}; border-color: ${isDark ? '#3f3f46' : '#a1a1aa'}; }
337
+ .ihooman-history-item { padding: 12px; border: 1px solid ${borderColor}; border-radius: 8px; margin-bottom: 6px; cursor: pointer; transition: all 0.2s; background: ${bgColor}; }
338
+ .ihooman-history-item:hover { background: ${isDark ? 'rgba(255,255,255,0.05)' : '#f8fafc'}; }
339
+ .ihooman-history-item.active { background: ${isDark ? 'rgba(0, 174, 255, 0.1)' : '#eff6ff'}; border-color: ${primaryColor}; }
374
340
  .ihooman-history-preview { font-size: 13px; color: ${textColor}; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
375
341
  .ihooman-history-meta { font-size: 11px; color: ${mutedColor}; margin-top: 4px; display: flex; justify-content: space-between; }
376
- .ihooman-history-empty { padding: 40px; text-align: center; color: ${mutedColor}; font-size: 13px; }
377
-
378
- /* ── Preset Questions ── */
379
- .ihooman-preset-questions { padding: 10px 16px; display: flex; flex-wrap: wrap; gap: 6px; background: ${bgColor}; border-top: 1px solid ${borderSubtle}; }
342
+ .ihooman-history-empty { padding: 40px; text-align: center; color: ${mutedColor}; font-size: 14px; }
343
+ .ihooman-preset-questions { padding: 10px 16px; display: flex; flex-wrap: wrap; gap: 8px; background: ${bgColor}; border-top: ${isDark ? 'none' : `1px solid ${borderColor}`}; }
380
344
  .ihooman-preset-questions:empty { display: none; }
381
345
  .ihooman-preset-questions.hidden { display: none; }
382
-
383
- /* ── Proactive Toast ── */
384
- .ihooman-proactive-toast { position: fixed; ${positionRight ? 'right: 20px' : 'left: 20px'}; ${positionBottom ? 'bottom: 84px' : 'top: 84px'}; max-width: 320px; padding: 16px; background: ${bgElevated}; border-radius: 14px; box-shadow: ${shadowLg}; z-index: ${(zIndex ?? 9999) - 2}; opacity: 0; visibility: hidden; transform: translateY(8px); transition: all 0.2s ease-out; border: 1px solid ${borderColor}; }
346
+ .ihooman-proactive-toast { position: fixed; ${positionRight ? 'right: 20px' : 'left: 20px'}; ${positionBottom ? 'bottom: 90px' : 'top: 90px'}; max-width: 300px; padding: 16px; background: ${bgColor}; border-radius: 12px; box-shadow: 0 10px 40px rgba(0,0,0,0.15); z-index: ${(zIndex ?? 9999) - 2}; opacity: 0; visibility: hidden; transform: translateY(10px); transition: all 0.3s ease; border: 1px solid ${borderColor}; }
385
347
  .ihooman-proactive-toast.show { opacity: 1; visibility: visible; transform: translateY(0); }
386
- .ihooman-proactive-toast-content { font-size: 14px; color: ${textColor}; margin-bottom: 12px; line-height: 1.5; }
348
+ .ihooman-proactive-toast-content { font-size: 14px; color: ${textColor}; margin-bottom: 12px; }
387
349
  .ihooman-proactive-toast-actions { display: flex; gap: 8px; }
388
- .ihooman-proactive-toast-btn { display: inline-flex; align-items: center; justify-content: center; padding: 8px 16px; border-radius: 8px; font-size: 13px; font-weight: 500; cursor: pointer; transition: all 0.15s ease; line-height: 1.4; }
389
- .ihooman-proactive-toast-btn.primary { background: ${accentBg}; color: ${accentText}; border: none; }
390
- .ihooman-proactive-toast-btn.primary:hover { opacity: 0.85; }
391
- .ihooman-proactive-toast-btn.secondary { background: transparent; color: ${textSecondary}; border: 1px solid ${borderColor}; }
392
- .ihooman-proactive-toast-btn.secondary:hover { background: ${hoverBg}; }
393
-
394
- /* ── Survey View ── */
395
- .ihooman-survey-view { display: none; flex-direction: column; padding: 24px; gap: 16px; background: ${bgColor}; flex: 1; align-items: center; justify-content: center; }
350
+ .ihooman-proactive-toast-btn { display: inline-flex; align-items: center; justify-content: center; padding: 8px 16px; border-radius: 6px; font-size: 13px; font-weight: 500; cursor: pointer; transition: all 0.2s; line-height: 1.4; }
351
+ .ihooman-proactive-toast-btn.primary { background: linear-gradient(135deg, ${gradientFrom}, ${gradientTo}); color: white; border: none; }
352
+ .ihooman-proactive-toast-btn.primary:hover { opacity: 0.9; }
353
+ .ihooman-proactive-toast-btn.secondary { background: transparent; color: ${mutedColor}; border: 1px solid ${borderColor}; }
354
+ .ihooman-proactive-toast-btn.secondary:hover { background: ${isDark ? 'rgba(255,255,255,0.05)' : 'rgba(0,0,0,0.03)'}; }
355
+ .ihooman-survey-view { display: none; flex-direction: column; padding: 20px; gap: 16px; background: ${bgColor}; flex: 1; align-items: center; justify-content: center; }
396
356
  .ihooman-survey-view.show { display: flex; }
397
- .ihooman-survey-question { font-size: 16px; font-weight: 600; color: ${textColor}; text-align: center; letter-spacing: -0.01em; }
357
+ .ihooman-survey-question { font-size: 16px; font-weight: 600; color: ${textColor}; text-align: center; }
398
358
  .ihooman-survey-stars { display: flex; gap: 8px; }
399
- .ihooman-survey-star { width: 36px; height: 36px; cursor: pointer; color: ${mutedColor}; transition: all 0.15s ease; }
359
+ .ihooman-survey-star { width: 40px; height: 40px; cursor: pointer; color: ${mutedColor}; transition: all 0.2s; }
400
360
  .ihooman-survey-star:hover, .ihooman-survey-star.active { color: #fbbf24; transform: scale(1.1); }
401
361
  .ihooman-survey-star svg { width: 100%; height: 100%; }
402
- .ihooman-survey-comment { width: 100%; padding: 12px; border: 1px solid ${borderColor}; border-radius: 10px; font-size: 14px; font-family: inherit; resize: none; min-height: 80px; background: ${inputBg}; color: ${textColor}; outline: none; }
403
- .ihooman-survey-comment:focus { border-color: ${isDark ? '#3f3f46' : '#a1a1aa'}; }
404
- .ihooman-survey-submit { display: inline-flex; align-items: center; justify-content: center; padding: 10px 20px; background: ${accentBg}; color: ${accentText}; border: none; border-radius: 8px; font-size: 13px; font-weight: 500; cursor: pointer; line-height: 1.4; transition: all 0.15s ease; }
405
- .ihooman-survey-submit:hover { opacity: 0.85; }
362
+ .ihooman-survey-comment { width: 100%; padding: 12px; border: 1px solid ${borderColor}; border-radius: 8px; font-size: 14px; resize: none; min-height: 80px; background: ${inputBg}; color: ${textColor}; }
363
+ .ihooman-survey-submit { display: inline-flex; align-items: center; justify-content: center; padding: 10px 20px; background: linear-gradient(135deg, ${gradientFrom}, ${gradientTo}); color: white; border: none; border-radius: 6px; font-size: 13px; font-weight: 500; cursor: pointer; line-height: 1.4; }
364
+ .ihooman-survey-submit:hover { opacity: 0.9; }
406
365
  .ihooman-survey-skip { display: inline-flex; align-items: center; justify-content: center; padding: 8px 16px; background: transparent; color: ${mutedColor}; border: none; font-size: 12px; cursor: pointer; line-height: 1.4; }
407
366
  .ihooman-survey-skip:hover { color: ${textColor}; }
408
-
409
- /* ── Feedback ── */
410
- .ihooman-feedback-btns { display: flex; gap: 4px; margin-top: 4px; }
367
+ .ihooman-feedback-btns { display: flex; gap: 6px; margin-top: 6px; }
411
368
  .ihooman-feedback-btn svg { width: 12px; height: 12px; }
412
-
413
- /* ── Carousel ── */
414
- .ihooman-carousel { display: flex; gap: 10px; overflow-x: auto; padding: 8px 0; scroll-snap-type: x mandatory; }
415
- .ihooman-carousel::-webkit-scrollbar { height: 3px; }
416
- .ihooman-carousel::-webkit-scrollbar-thumb { background: ${isDark ? '#27272a' : '#d4d4d8'}; border-radius: 2px; }
417
- .ihooman-carousel-card { min-width: 200px; max-width: 250px; border: 1px solid ${borderColor}; border-radius: 12px; overflow: hidden; scroll-snap-align: start; background: ${bgElevated}; }
369
+ .ihooman-carousel { display: flex; gap: 12px; overflow-x: auto; padding: 8px 0; scroll-snap-type: x mandatory; }
370
+ .ihooman-carousel::-webkit-scrollbar { height: 4px; }
371
+ .ihooman-carousel-card { min-width: 200px; max-width: 250px; border: 1px solid ${borderColor}; border-radius: 12px; overflow: hidden; scroll-snap-align: start; background: ${bgColor}; }
418
372
  .ihooman-carousel-card img { width: 100%; height: 120px; object-fit: cover; }
419
373
  .ihooman-carousel-card-content { padding: 12px; }
420
- .ihooman-carousel-card-title { font-size: 13px; font-weight: 600; color: ${textColor}; margin-bottom: 4px; }
421
- .ihooman-carousel-card-desc { font-size: 12px; color: ${textSecondary}; margin-bottom: 8px; }
374
+ .ihooman-carousel-card-title { font-size: 14px; font-weight: 600; color: ${textColor}; margin-bottom: 4px; }
375
+ .ihooman-carousel-card-desc { font-size: 12px; color: ${mutedColor}; margin-bottom: 8px; }
422
376
  .ihooman-carousel-card-btns { display: flex; flex-direction: column; gap: 6px; }
423
-
424
- /* ── Quick Replies ── */
425
377
  .ihooman-quick-replies { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
426
-
427
- /* ── Responsive ── */
428
- @media (max-width: 480px) { .ihooman-window { width: calc(100vw - 16px); height: calc(100vh - 100px); min-height: 400px; max-height: calc(100vh - 100px); left: 8px; right: 8px; bottom: 80px; } .ihooman-toggle { ${positionRight ? 'right: 16px' : 'left: 16px'}; bottom: 16px; } .ihooman-proactive-toast { left: 8px; right: 8px; max-width: none; } }
378
+ @media (max-width: 480px) { .ihooman-window { width: calc(100vw - 20px); height: calc(100vh - 100px); min-height: 400px; max-height: calc(100vh - 100px); left: 10px; right: 10px; bottom: 80px; } .ihooman-toggle { ${positionRight ? 'right: 16px' : 'left: 16px'}; bottom: 16px; } .ihooman-proactive-toast { left: 10px; right: 10px; max-width: none; } }
429
379
  `;
430
380
  }
431
381
  // ============================================================================
@@ -465,9 +415,9 @@ function createWidget() {
465
415
  <div class="ihooman-window" role="dialog" aria-label="Chat window">
466
416
  <div class="ihooman-container">
467
417
  <div class="ihooman-header">
468
- <div class="ihooman-header-avatar">${config.avatarUrl ? `<img src="${escapeHtml(config.avatarUrl)}" alt="Assistant">` : icons.sparkle}</div>
418
+ <div class="ihooman-header-avatar">${config.avatarUrl ? `<img src="${escapeHtml(config.avatarUrl)}" alt="Support">` : icons.bot}</div>
469
419
  <div class="ihooman-header-info">
470
- <div class="ihooman-header-title">${escapeHtml(config.title || 'AI Assistant')}</div>
420
+ <div class="ihooman-header-title">${escapeHtml(config.title || 'Chat Support')}</div>
471
421
  <div class="ihooman-header-status"><span class="ihooman-status-dot"></span><span class="ihooman-status-text">Online</span></div>
472
422
  </div>
473
423
  <div class="ihooman-header-actions">
@@ -489,7 +439,7 @@ function createWidget() {
489
439
  </div>
490
440
  </div>
491
441
  <div class="ihooman-ticket-view">
492
- <h4 class="ihooman-ticket-title">Submit a Ticket</h4>
442
+ <h4 class="ihooman-ticket-title">📝 Submit a Ticket</h4>
493
443
  <p class="ihooman-ticket-subtitle">We'll get back to you via email</p>
494
444
  <input class="ihooman-ticket-input" id="ihooman-ticket-name" placeholder="Your name" required>
495
445
  <input class="ihooman-ticket-input" id="ihooman-ticket-email" type="email" placeholder="Your email" required>
@@ -1080,7 +1030,7 @@ function showTyping() {
1080
1030
  return;
1081
1031
  const typing = document.createElement('div');
1082
1032
  typing.className = 'ihooman-typing';
1083
- typing.innerHTML = `<span class="ihooman-typing-shimmer">Thinking...</span><div class="ihooman-typing-dots"><span class="ihooman-typing-dot"></span><span class="ihooman-typing-dot"></span><span class="ihooman-typing-dot"></span></div>`;
1033
+ typing.innerHTML = `<div class="ihooman-typing-dots"><span class="ihooman-typing-dot"></span><span class="ihooman-typing-dot"></span><span class="ihooman-typing-dot"></span></div>`;
1084
1034
  elements.messages.appendChild(typing);
1085
1035
  elements.messages.scrollTop = elements.messages.scrollHeight;
1086
1036
  }
@@ -1102,7 +1052,7 @@ function disableInput() {
1102
1052
  function enableInput() {
1103
1053
  if (elements.input) {
1104
1054
  elements.input.disabled = false;
1105
- elements.input.placeholder = config.placeholder || 'Send a message...';
1055
+ elements.input.placeholder = config.placeholder || 'Type a message...';
1106
1056
  }
1107
1057
  if (elements.sendBtn)
1108
1058
  elements.sendBtn.disabled = !elements.input?.value.trim();
@@ -1726,10 +1676,11 @@ function getFontWeightValue(weight) {
1726
1676
  default: return 500;
1727
1677
  }
1728
1678
  }
1679
+ // Default button styles - MUST match client-dashboard/src/components/widget/ButtonStylingEditor.tsx
1729
1680
  const DEFAULT_BUTTON_STYLES = {
1730
1681
  primary: {
1731
- backgroundColor: '#ededed',
1732
- textColor: '#09090b',
1682
+ backgroundColor: '#00aeff',
1683
+ textColor: '#ffffff',
1733
1684
  borderColor: 'transparent',
1734
1685
  borderWidth: 0,
1735
1686
  borderRadius: 8,
@@ -1740,8 +1691,8 @@ const DEFAULT_BUTTON_STYLES = {
1740
1691
  },
1741
1692
  secondary: {
1742
1693
  backgroundColor: 'transparent',
1743
- textColor: '#a1a1aa',
1744
- borderColor: '#27272a',
1694
+ textColor: '#6b7280',
1695
+ borderColor: '#e5e7eb',
1745
1696
  borderWidth: 1,
1746
1697
  borderRadius: 8,
1747
1698
  paddingVertical: 8,
@@ -1750,9 +1701,9 @@ const DEFAULT_BUTTON_STYLES = {
1750
1701
  fontWeight: 'medium',
1751
1702
  },
1752
1703
  presetQuestions: {
1753
- backgroundColor: 'transparent',
1754
- textColor: '#a1a1aa',
1755
- borderColor: '#27272a',
1704
+ backgroundColor: 'rgba(0, 174, 255, 0.1)',
1705
+ textColor: '#00aeff',
1706
+ borderColor: 'rgba(0, 174, 255, 0.2)',
1756
1707
  borderWidth: 1,
1757
1708
  borderRadius: 20,
1758
1709
  paddingVertical: 6,
@@ -1761,9 +1712,9 @@ const DEFAULT_BUTTON_STYLES = {
1761
1712
  fontWeight: 'medium',
1762
1713
  },
1763
1714
  quickReplies: {
1764
- backgroundColor: '#1a1a1a',
1765
- textColor: '#a1a1aa',
1766
- borderColor: '#27272a',
1715
+ backgroundColor: '#f3f4f6',
1716
+ textColor: '#374151',
1717
+ borderColor: '#e5e7eb',
1767
1718
  borderWidth: 1,
1768
1719
  borderRadius: 16,
1769
1720
  paddingVertical: 5,
@@ -1773,8 +1724,8 @@ const DEFAULT_BUTTON_STYLES = {
1773
1724
  },
1774
1725
  feedback: {
1775
1726
  backgroundColor: 'transparent',
1776
- textColor: '#52525b',
1777
- borderColor: '#27272a',
1727
+ textColor: '#9ca3af',
1728
+ borderColor: '#e5e7eb',
1778
1729
  borderWidth: 1,
1779
1730
  borderRadius: 6,
1780
1731
  paddingVertical: 4,
@@ -1783,19 +1734,19 @@ const DEFAULT_BUTTON_STYLES = {
1783
1734
  fontWeight: 'medium',
1784
1735
  },
1785
1736
  headerActions: {
1786
- backgroundColor: 'transparent',
1787
- textColor: '#a1a1aa',
1737
+ backgroundColor: 'rgba(255, 255, 255, 0.1)',
1738
+ textColor: '#ffffff',
1788
1739
  borderColor: 'transparent',
1789
1740
  borderWidth: 0,
1790
- borderRadius: 8,
1741
+ borderRadius: 6,
1791
1742
  paddingVertical: 6,
1792
1743
  paddingHorizontal: 6,
1793
1744
  fontSize: 14,
1794
1745
  fontWeight: 'medium',
1795
1746
  },
1796
1747
  escalation: {
1797
- backgroundColor: '#ededed',
1798
- textColor: '#09090b',
1748
+ backgroundColor: '#00aeff',
1749
+ textColor: '#ffffff',
1799
1750
  borderColor: 'transparent',
1800
1751
  borderWidth: 0,
1801
1752
  borderRadius: 8,
@@ -1805,21 +1756,21 @@ const DEFAULT_BUTTON_STYLES = {
1805
1756
  fontWeight: 'medium',
1806
1757
  },
1807
1758
  cardActions: {
1808
- backgroundColor: '#ededed',
1809
- textColor: '#09090b',
1759
+ backgroundColor: '#00aeff',
1760
+ textColor: '#ffffff',
1810
1761
  borderColor: 'transparent',
1811
1762
  borderWidth: 0,
1812
- borderRadius: 8,
1763
+ borderRadius: 6,
1813
1764
  paddingVertical: 6,
1814
1765
  paddingHorizontal: 12,
1815
1766
  fontSize: 12,
1816
1767
  fontWeight: 'medium',
1817
1768
  },
1818
1769
  toggleButton: {
1819
- backgroundColor: '#ededed',
1820
- textColor: '#09090b',
1821
- borderColor: '#27272a',
1822
- borderWidth: 1,
1770
+ backgroundColor: '#00aeff',
1771
+ textColor: '#ffffff',
1772
+ borderColor: 'transparent',
1773
+ borderWidth: 0,
1823
1774
  borderRadius: 30,
1824
1775
  paddingVertical: 0,
1825
1776
  paddingHorizontal: 0,
@@ -1828,7 +1779,7 @@ const DEFAULT_BUTTON_STYLES = {
1828
1779
  },
1829
1780
  attachButton: {
1830
1781
  backgroundColor: 'transparent',
1831
- textColor: '#52525b',
1782
+ textColor: '#6b7280',
1832
1783
  borderColor: 'transparent',
1833
1784
  borderWidth: 0,
1834
1785
  borderRadius: 8,