UNPKG

bettercx-widget

Version:

Professional AI-powered chat widget for BetterCX platform. Seamlessly integrate intelligent customer support into any website.

236 lines (227 loc) 7.12 kB
/** * Message Composer Styles */ :host { display: block; width: 100%; box-sizing: border-box; } .bcx-composer { display: flex; align-items: flex-end; gap: var(--bcx-space-3, 12px); width: 100%; min-height: 48px; box-sizing: border-box; margin: 0; padding: 0; position: relative; } .bcx-composer__input-container { flex: 1 1 auto; position: relative; min-width: 0; /* Allow flex item to shrink below content size */ width: 0; /* Force flex item to respect flex-basis */ } .bcx-composer__input { width: 100%; min-height: 48px; max-height: 120px; padding: var(--bcx-space-3, 12px) var(--bcx-space-4, 16px); border: 1px solid var(--bcx-border-subtle, rgba(0, 0, 0, 0.1)); border-radius: var(--bcx-radius-2xl, 24px); background: var(--bcx-bg-secondary, #f8f9fa); color: var(--bcx-text-primary, #1a1a1a); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-size: var(--bcx-text-base, 14px); line-height: 1.5; resize: none; outline: none; transition: all var(--bcx-transition-normal, 0.25s ease); box-sizing: border-box; vertical-align: top; font-weight: 400; position: relative; backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); } .bcx-composer__input::before { content: ""; position: absolute; inset: 0; border-radius: inherit; background: linear-gradient(135deg, color-mix(in srgb, var(--bcx-primary-500, #007bff) 3%, transparent) 0%, transparent 50%, color-mix(in srgb, var(--bcx-primary-500, #007bff) 2%, transparent) 100%); opacity: 0; transition: opacity var(--bcx-transition-fast, 0.15s ease); pointer-events: none; } .bcx-composer__input:focus { border-color: var(--bcx-primary-400, #667eea); box-shadow: 0 0 0 3px var(--bcx-primary-100, rgba(102, 126, 234, 0.1)), 0 2px 8px color-mix(in srgb, var(--bcx-primary-500, #007bff) 8%, transparent); background: var(--bcx-bg-primary, #ffffff); } .bcx-composer__input:focus::before { opacity: 1; } .bcx-composer__input:hover:not(:focus) { border-color: var(--bcx-border-soft, rgba(0, 0, 0, 0.15)); background: var(--bcx-bg-tertiary, #f5f5f5); } .bcx-composer__input:disabled { opacity: 0.6; cursor: not-allowed; background: var(--bcx-bg-secondary, #f8f9fa); } .bcx-composer__input::placeholder { color: var(--bcx-text-tertiary, color-mix(in srgb, var(--bcx-text-primary, #1a1a1a) 50%, transparent)); font-weight: 400; } .bcx-composer__char-count { position: absolute; bottom: var(--bcx-space-1, 4px); right: var(--bcx-space-2, 8px); font-size: var(--bcx-text-xs, 11px); color: var(--bcx-primary-600, #f59e0b); background: var(--bcx-bg-elevated, #ffffff); padding: var(--bcx-space-1, 2px) var(--bcx-space-1, 6px); border-radius: var(--bcx-radius-sm, 4px); pointer-events: none; font-weight: 600; box-shadow: 0 1px 3px color-mix(in srgb, var(--bcx-text-primary, #1a1a1a) 8%, transparent); border: 1px solid var(--bcx-border-subtle, rgba(0, 0, 0, 0.1)); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); } .bcx-composer__submit { width: 48px; height: 48px; border: none; border-radius: var(--bcx-radius-full, 50%); background: var(--bcx-primary-500, #007bff); color: var(--bcx-bg-primary, white); cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 18px; font-weight: 500; transition: all var(--bcx-transition-normal, 0.25s ease); flex-shrink: 0; box-shadow: 0 4px 12px color-mix(in srgb, var(--bcx-primary-500, #007bff) 25%, transparent), 0 1px 3px color-mix(in srgb, var(--bcx-primary-500, #007bff) 15%, transparent); margin-bottom: 0; position: relative; backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); } .bcx-composer__submit::before { content: ""; position: absolute; inset: 0; border-radius: inherit; background: linear-gradient(135deg, color-mix(in srgb, var(--bcx-primary-500, #007bff) 20%, transparent) 0%, transparent 50%, color-mix(in srgb, var(--bcx-primary-500, #007bff) 10%, transparent) 100%); opacity: 0; transition: opacity var(--bcx-transition-fast, 0.15s ease); pointer-events: none; } .bcx-composer__submit:hover:not(:disabled) { background: var(--bcx-primary-600, #0056b3); transform: translateY(-2px) scale(1.05); box-shadow: 0 6px 20px color-mix(in srgb, var(--bcx-primary-500, #007bff) 35%, transparent), 0 2px 6px color-mix(in srgb, var(--bcx-primary-500, #007bff) 20%, transparent); } .bcx-composer__submit:hover:not(:disabled)::before { opacity: 1; } .bcx-composer__submit:active:not(:disabled) { transform: translateY(-1px) scale(1.02); background: var(--bcx-primary-700, #004085); box-shadow: 0 3px 10px color-mix(in srgb, var(--bcx-primary-500, #007bff) 30%, transparent); } .bcx-composer__submit:disabled { opacity: 0.5; cursor: not-allowed; transform: none; background: var(--bcx-border-soft, #e2e8f0); box-shadow: 0 1px 3px color-mix(in srgb, var(--bcx-text-primary, #1a1a1a) 8%, transparent); color: var(--bcx-text-tertiary, #8b8b8b); } .bcx-composer__submit:focus { outline: none; box-shadow: 0 0 0 3px var(--bcx-primary-100, rgba(0, 123, 255, 0.3)), 0 4px 12px color-mix(in srgb, var(--bcx-primary-500, #007bff) 25%, transparent); } .bcx-composer__submit-icon { transition: transform var(--bcx-transition-normal, 0.25s ease); filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1)); display: flex; align-items: center; justify-content: center; } .bcx-composer__submit-icon svg { width: 18px; height: 18px; stroke-width: 2; transition: all var(--bcx-transition-fast, 0.15s ease); display: block; flex-shrink: 0; } .bcx-composer__submit:hover:not(:disabled) .bcx-composer__submit-icon { transform: scale(1.1); } .bcx-composer__submit:hover:not(:disabled) .bcx-composer__submit-icon svg { stroke-width: 2.2; } .bcx-composer__submit:active:not(:disabled) .bcx-composer__submit-icon { transform: scale(0.95); } .bcx-composer__submit:active:not(:disabled) .bcx-composer__submit-icon svg { stroke-width: 1.8; } .bcx-composer__submit[data-loading=true] .bcx-composer__submit-icon svg { animation: bcx-spin 1s linear infinite; } .bcx-composer__input:focus + .bcx-composer__char-count { opacity: 1; } @keyframes bcx-input-focus { 0% { transform: scale(1); } 50% { transform: scale(1.02); } 100% { transform: scale(1); } } @keyframes bcx-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .bcx-composer__input:focus { animation: bcx-input-focus 0.3s cubic-bezier(0.16, 1, 0.3, 1); } @media (prefers-contrast: high) { .bcx-composer__input { border-width: 2px; border-color: var(--bcx-text-primary, #000000); } .bcx-composer__submit { border: 2px solid var(--bcx-text-primary, #000000); } } @media (prefers-reduced-motion: reduce) { .bcx-composer__input, .bcx-composer__submit, .bcx-composer__submit-icon { transition: none; } .bcx-composer__submit:hover:not(:disabled) { transform: none; } .bcx-composer__input:focus { animation: none; } }