Plugin Directory

Changeset 3411709


Ignore:
Timestamp:
12/05/2025 05:28:52 AM (3 months ago)
Author:
wpazleen
Message:

1.5.3

Location:
askany
Files:
414 added
12 edited

Legend:

Unmodified
Added
Removed
  • askany/trunk/askany.php

    r3409111 r3411709  
    44 * Plugin URI: https://wordpress.org/plugins/askany
    55 * Description: Askany is AI-powered chat assistant using DeepSeek API and OpenAI to answer questions based on WordPress content and imported PDFs.
    6  * Version: 1.5.2
     6 * Version: 1.5.3
    77 * Requires at least: 5.9
    88 * Requires PHP:      7.4
     
    6666
    6767// Define plugin constants.
    68 define('ASKANY_VERSION', '1.5.2');
     68define('ASKANY_VERSION', '1.5.3');
    6969define('ASKANY_PLUGIN_FILE', __FILE__);
    7070define('ASKANY_PLUGIN_DIR', plugin_dir_path(__FILE__));
  • askany/trunk/assets/css/admin.css

    r3336134 r3411709  
    261261}
    262262
    263 button#upload-avatar-button,
    264 button#toggle-api-key {
     263button#upload-avatar-button {
    265264    margin-top: 10px;
    266265}
     
    18741873}
    18751874
    1876 .askany-message.user {
     1875/* .askany-message.user {
    18771876    justify-content: flex-end;
    1878 }
     1877} */
    18791878
    18801879.askany-message.agent,
     
    34523451
    34533452/* Modal related css end */
     3453
     3454
     3455/* API Key Instructions Styles */
     3456.api-key-instructions {
     3457    margin-top: 10px;
     3458    padding: 15px;
     3459    background-color: #f8f9fa;
     3460    border-left: 4px solid var(--askany-primary);
     3461    border-radius: 4px;
     3462}
     3463
     3464.api-key-instructions p {
     3465    margin: 0 0 10px 0;
     3466    color: var(--askany-dark);
     3467}
     3468
     3469.api-key-instructions ol {
     3470    margin: 10px 0 0 20px;
     3471    padding: 0;
     3472}
     3473
     3474.api-key-instructions li {
     3475    margin-bottom: 8px;
     3476    color: var(--askany-gray);
     3477    line-height: 1.6;
     3478}
     3479
     3480.api-key-instructions a {
     3481    color: var(--askany-primary);
     3482    text-decoration: none;
     3483    font-weight: 500;
     3484}
     3485
     3486.api-key-instructions a:hover {
     3487    text-decoration: underline;
     3488}
     3489
     3490/* API Key Input Row */
     3491.form-table td>div[style*="display: flex"] {
     3492    flex-wrap: wrap;
     3493}
     3494
     3495.form-table td>div[style*="display: flex"] input[type="password"],
     3496.form-table td>div[style*="display: flex"] input[type="text"] {
     3497    min-width: 300px;
     3498}
     3499
     3500@media (max-width: 782px) {
     3501    .form-table td>div[style*="display: flex"] {
     3502        flex-direction: column;
     3503        align-items: stretch !important;
     3504    }
     3505
     3506    .form-table td>div[style*="display: flex"] input {
     3507        width: 100% !important;
     3508        margin-bottom: 10px;
     3509    }
     3510
     3511    .form-table td>div[style*="display: flex"] button {
     3512        width: 100%;
     3513        margin-bottom: 5px;
     3514    }
     3515}
     3516
     3517
     3518/* Admin Live Chat - Message Avatars */
     3519.askany-message {
     3520    display: flex;
     3521    align-items: flex-start;
     3522    gap: 10px;
     3523    margin-bottom: 15px;
     3524    padding: 10px;
     3525    border-radius: 8px;
     3526    transition: background-color 0.2s;
     3527}
     3528
     3529.askany-message:hover {
     3530    background-color: rgba(0, 0, 0, 0.02);
     3531}
     3532
     3533.askany-message .message-avatar {
     3534    flex-shrink: 0;
     3535    width: 32px;
     3536    height: 32px;
     3537    border-radius: 50%;
     3538    overflow: hidden;
     3539    display: flex;
     3540    align-items: center;
     3541    justify-content: center;
     3542}
     3543
     3544.askany-message .message-avatar .avatar-image,
     3545.askany-message .message-avatar img {
     3546    width: 100%;
     3547    height: 100%;
     3548    object-fit: cover;
     3549    border-radius: 50%;
     3550}
     3551
     3552.askany-message .message-avatar .avatar-icon {
     3553    width: 32px;
     3554    height: 32px;
     3555    border-radius: 50%;
     3556    display: flex;
     3557    align-items: center;
     3558    justify-content: center;
     3559}
     3560
     3561.askany-message .message-avatar .user-icon {
     3562    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
     3563    color: white;
     3564}
     3565
     3566.askany-message .message-avatar .assistant-icon {
     3567    background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
     3568    color: white;
     3569}
     3570
     3571.askany-message .message-avatar .agent-icon {
     3572    background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
     3573    color: white;
     3574}
     3575
     3576.askany-message .message-avatar svg {
     3577    width: 18px;
     3578    height: 18px;
     3579}
     3580
     3581/* User messages - avatar on right */
     3582.askany-message.user {
     3583    flex-direction: row-reverse;
     3584}
     3585
     3586.askany-message.user .askany-message-bubble {
     3587    text-align: right;
     3588}
     3589
     3590/* Agent/AI messages - avatar on left */
     3591.askany-message.agent,
     3592.askany-message.ai {
     3593    flex-direction: row;
     3594}
     3595
     3596.askany-message-bubble {
     3597    flex: 1;
     3598    min-width: 0;
     3599    background: #f8f9fa;
     3600    padding: 12px 15px;
     3601    border-radius: 12px;
     3602}
     3603
     3604.askany-message.user .askany-message-bubble {
     3605    background: var(--askany-primary);
     3606    color: white;
     3607}
     3608
     3609.askany-message.agent .askany-message-bubble {
     3610    background: #e3f2fd;
     3611    color: #000000;
     3612}
     3613
     3614.askany-message.ai .askany-message-bubble {
     3615    background: #fce4ec;
     3616    color: #000000;
     3617}
     3618
     3619.askany-message-content {
     3620    margin-bottom: 5px;
     3621    line-height: 1.5;
     3622    word-wrap: break-word;
     3623}
     3624
     3625.askany-message-meta {
     3626    font-size: 11px;
     3627    opacity: 0.7;
     3628    margin-top: 5px;
     3629}
     3630
     3631/* Responsive */
     3632@media (max-width: 782px) {
     3633    .askany-message .message-avatar {
     3634        width: 28px;
     3635        height: 28px;
     3636    }
     3637
     3638    .askany-message .message-avatar .avatar-icon {
     3639        width: 28px;
     3640        height: 28px;
     3641    }
     3642
     3643    .askany-message .message-avatar svg {
     3644        width: 16px;
     3645        height: 16px;
     3646    }
     3647}
  • askany/trunk/assets/css/frontend.css

    r3387630 r3411709  
    892892}
    893893
    894 .chat-message.user-message {
     894/* .chat-message.user-message {
    895895    justify-content: flex-end;
    896 }
     896} */
    897897
    898898.chat-message.assistant-message {
     
    20902090    min-height: 0;
    20912091    padding: 15px;
     2092    margin-top: -50px;
    20922093}
    20932094
     
    41814182    }
    41824183}
     4184
     4185/*
     4186Message Avatar Styles */
     4187.chat-message {
     4188    display: flex;
     4189    align-items: flex-start;
     4190    gap: 10px;
     4191    margin-bottom: 15px;
     4192}
     4193
     4194.message-avatar {
     4195    flex-shrink: 0;
     4196    width: 32px;
     4197    height: 32px;
     4198    border-radius: 50%;
     4199    overflow: hidden;
     4200    display: flex;
     4201    align-items: center;
     4202    justify-content: center;
     4203}
     4204
     4205.message-avatar .avatar-image {
     4206    width: 100%;
     4207    height: 100%;
     4208    object-fit: cover;
     4209    border-radius: 50%;
     4210}
     4211
     4212.message-avatar .avatar-icon {
     4213    width: 32px;
     4214    height: 32px;
     4215    border-radius: 50%;
     4216    display: flex;
     4217    align-items: center;
     4218    justify-content: center;
     4219}
     4220
     4221.message-avatar .user-icon {
     4222    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
     4223    color: white;
     4224}
     4225
     4226.message-avatar .assistant-icon {
     4227    background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
     4228    color: white;
     4229}
     4230
     4231.message-avatar .agent-icon {
     4232    background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
     4233    color: white;
     4234}
     4235
     4236.message-avatar svg {
     4237    width: 18px;
     4238    height: 18px;
     4239}
     4240
     4241/* User messages - avatar on right */
     4242.user-message {
     4243    flex-direction: row-reverse;
     4244}
     4245
     4246.user-message .message-bubble {
     4247    margin-left: 0;
     4248    margin-right: 0;
     4249}
     4250
     4251/* Assistant messages - avatar on left */
     4252.assistant-message {
     4253    flex-direction: row;
     4254}
     4255
     4256/* Markdown Formatting Styles */
     4257.message-bubble h1,
     4258.message-bubble h2,
     4259.message-bubble h3,
     4260.message-bubble h4,
     4261.message-bubble h5,
     4262.message-bubble h6 {
     4263    margin: 0.5em 0 0.3em 0;
     4264    font-weight: 600;
     4265    line-height: 1.3;
     4266}
     4267
     4268.message-bubble h1 {
     4269    font-size: 1.5em;
     4270}
     4271
     4272.message-bubble h2 {
     4273    font-size: 1.3em;
     4274}
     4275
     4276.message-bubble h3 {
     4277    font-size: 1.1em;
     4278}
     4279
     4280.message-bubble h4 {
     4281    font-size: 1em;
     4282}
     4283
     4284.message-bubble h5 {
     4285    font-size: 0.9em;
     4286}
     4287
     4288.message-bubble h6 {
     4289    font-size: 0.85em;
     4290}
     4291
     4292.message-bubble p {
     4293    margin: 0.5em 0;
     4294    line-height: 1.6;
     4295}
     4296
     4297.message-bubble code {
     4298    background: rgba(0, 0, 0, 0.05);
     4299    padding: 2px 6px;
     4300    border-radius: 3px;
     4301    font-family: 'Courier New', Courier, monospace;
     4302    font-size: 0.9em;
     4303}
     4304
     4305.message-bubble pre {
     4306    background: #f5f5f5;
     4307    border: 1px solid #ddd;
     4308    border-radius: 5px;
     4309    padding: 12px;
     4310    overflow-x: auto;
     4311    margin: 10px 0;
     4312}
     4313
     4314.message-bubble pre code {
     4315    background: none;
     4316    padding: 0;
     4317    border-radius: 0;
     4318    font-size: 0.85em;
     4319    line-height: 1.5;
     4320}
     4321
     4322.message-bubble ul,
     4323.message-bubble ol {
     4324    margin: 10px 0;
     4325    padding-left: 25px;
     4326}
     4327
     4328.message-bubble li {
     4329    margin: 5px 15px;
     4330    line-height: 1.6;
     4331}
     4332
     4333.message-bubble blockquote {
     4334    border-left: 4px solid #ddd;
     4335    padding-left: 15px;
     4336    margin: 10px 0;
     4337    color: #666;
     4338    font-style: italic;
     4339}
     4340
     4341.message-bubble strong {
     4342    font-weight: 600;
     4343}
     4344
     4345.message-bubble em {
     4346    font-style: italic;
     4347}
     4348
     4349.message-bubble del {
     4350    text-decoration: line-through;
     4351    opacity: 0.7;
     4352}
     4353
     4354.message-bubble a {
     4355    color: #4361ee;
     4356    text-decoration: none;
     4357    border-bottom: 1px solid transparent;
     4358    transition: border-color 0.2s;
     4359}
     4360
     4361.message-bubble a:hover {
     4362    border-bottom-color: #4361ee;
     4363}
     4364
     4365/* Dark theme adjustments */
     4366.theme-dark .message-bubble code {
     4367    background: rgba(255, 255, 255, 0.1);
     4368}
     4369
     4370.theme-dark .message-bubble pre {
     4371    background: rgba(0, 0, 0, 0.3);
     4372    border-color: rgba(255, 255, 255, 0.1);
     4373}
     4374
     4375.theme-dark .message-bubble blockquote {
     4376    border-left-color: rgba(255, 255, 255, 0.2);
     4377    color: rgba(255, 255, 255, 0.7);
     4378}
     4379
     4380/* Responsive adjustments */
     4381@media (max-width: 480px) {
     4382    .message-avatar {
     4383        width: 28px;
     4384        height: 28px;
     4385    }
     4386
     4387    .message-avatar .avatar-icon {
     4388        width: 28px;
     4389        height: 28px;
     4390    }
     4391
     4392    .message-avatar svg {
     4393        width: 16px;
     4394        height: 16px;
     4395    }
     4396
     4397    .chat-message {
     4398        gap: 8px;
     4399    }
     4400}
  • askany/trunk/assets/js/admin.js

    r3336134 r3411709  
    1010    const apiKeyInput = document.getElementById('askany_api_key');
    1111    const apiURLInput = document.getElementById('askany_api_url');
     12    const apiModelSelect = document.getElementById('askany_api_model');
    1213
    1314    const uploadPdfButton = document.getElementById('askany-upload-pdf');
     
    155156        const provider = apiProviderSelect.value;
    156157
    157         // Fetch the correct API key and URL based on selected provider
     158        // Show/hide API key instructions based on provider
     159        const allInstructions = document.querySelectorAll('.api-key-instructions');
     160        allInstructions.forEach(instruction => {
     161            if (instruction.getAttribute('data-provider') === provider) {
     162                instruction.style.display = 'block';
     163            } else {
     164                instruction.style.display = 'none';
     165            }
     166        });
     167
     168        // Set placeholder text based on provider
     169        const apiUrlInput = document.getElementById('askany_api_url');
     170       
     171        const placeholders = {
     172            'openai': 'https://api.openai.com/v1/chat/completions',
     173            'deepseek': 'https://api.deepseek.com/v1/chat/completions',
     174            'gemini': 'https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent'
     175        };
     176       
     177        if (apiUrlInput && placeholders[provider]) {
     178            apiUrlInput.placeholder = placeholders[provider];
     179        }
     180
     181        // Fetch available models for the provider
     182        fetch(askanyAdmin.ajaxUrl, {
     183            method: 'POST',
     184            headers: {
     185                'Content-Type': 'application/x-www-form-urlencoded',
     186            },
     187            body: new URLSearchParams({
     188                action: 'askany_get_provider_models',
     189                nonce: askanyAdmin.nonce,
     190                provider: provider
     191            })
     192        })
     193            .then(response => response.json())
     194            .then(data => {
     195                if (data.success && apiModelSelect) {
     196                    // Clear existing options
     197                    apiModelSelect.innerHTML = '';
     198                   
     199                    // Populate model options
     200                    const models = data.data.models;
     201                    const defaultModel = data.data.default_model;
     202                   
     203                    for (const [modelId, modelInfo] of Object.entries(models)) {
     204                        const option = document.createElement('option');
     205                        option.value = modelId;
     206                        option.textContent = modelInfo.name;
     207                        if (modelInfo.recommended) {
     208                            option.textContent += ' (Recommended)';
     209                        }
     210                        if (modelInfo.description) {
     211                            option.setAttribute('data-description', modelInfo.description);
     212                        }
     213                        apiModelSelect.appendChild(option);
     214                    }
     215                }
     216            })
     217            .catch(error => {
     218                console.error('Error fetching provider models:', error);
     219            });
     220
     221        // Fetch the correct API key, URL, and model based on selected provider
    158222        fetch(askanyAdmin.ajaxUrl, {
    159223            method: 'POST',
     
    171235                if (data.success) {
    172236                    // Update form fields with provider-specific settings
    173                     apiKeyInput.value = data.data.api_key || '';
    174 
    175                     const apiUrlInput = document.getElementById('askany_api_url');
     237                    if (apiKeyInput) {
     238                        apiKeyInput.value = data.data.api_key || '';
     239                    }
     240
    176241                    if (apiUrlInput) {
    177242                        apiUrlInput.value = data.data.api_url || '';
    178243                    }
     244
     245                    if (apiModelSelect && data.data.api_model) {
     246                        apiModelSelect.value = data.data.api_model;
     247                    }
     248                } else {
     249                    console.error('Failed to fetch provider settings:', data);
    179250                }
    180251            })
     
    601672                        // showNotice(isUpdate ? askanyAdmin.i18n.updateSuccess : askanyAdmin.i18n.addSuccess, 'success');
    602673                        Toast.success(isUpdate ? askanyAdmin.i18n.qaupdateSuccess : askanyAdmin.i18n.qaaddSuccess);
     674                       
     675                        // Update Q&A count if adding new (not updating)
     676                        if (!isUpdate && window.askanyQA) {
     677                            window.askanyQA.qaCount++;
     678                            window.askanyQA.updateProLockUI();
     679                        }
     680                       
    603681                        // Reload page to show updated list
    604682                        setTimeout(function () {
     
    703781                                    Toast.success(askanyAdmin.i18n.deleteSuccess || 'Q&A pair deleted successfully!');
    704782
     783                                    // Update Q&A count
     784                                    if (window.askanyQA) {
     785                                        window.askanyQA.qaCount--;
     786                                        window.askanyQA.updateProLockUI();
     787                                    }
     788
    705789                                    // Remove row with fade effect
    706790                                    row.style.transition = 'opacity 0.4s';
     
    748832
    749833    function testApiConnection(e) {
    750 
    751         // console.log('Testing API connection...');
    752834        e.preventDefault();
    753835
    754836        const provider = apiProviderSelect.value;
    755837        const apiKey = apiKeyInput.value;
    756         const apiUrl = apiURLInput.value;
     838        const apiModel = apiModelSelect ? apiModelSelect.value : '';
    757839
    758840        if (!apiKey) {
    759             // showNotice(askanyAdmin.i18n.noApiKey || 'Please enter an API key first', 'error');
    760841            Toast.warn(askanyAdmin.i18n.noApiKey || 'Please enter an API key first');
    761842            return;
    762843        }
    763844
    764         const testButton = document.getElementById('test-api-connection');
     845        const testButton = document.getElementById('askany-ai-connect-test');
    765846
    766847        Toast.loading('Testing API connection...');
    767848
    768         setLoading(testButton, true);
    769 
    770         // Send test request via AJAX
     849        if (testButton) {
     850            setLoading(testButton, true);
     851        }
     852
     853        // Send test request via AJAX (no api_url - backend uses defaults)
    771854        fetch(askanyAdmin.ajaxUrl, {
    772855            method: 'POST',
     
    779862                provider: provider,
    780863                api_key: apiKey,
    781                 api_url: apiUrl
     864                api_model: apiModel
    782865            })
    783866        })
    784867            .then(response => response.json())
    785868            .then(data => {
     869                Toast.loading(false);
     870
    786871                if (data.success) {
    787                     // Create detailed connection status notice
    788872                    const result = data.data;
    789 
    790                     let noticeContent = `<h4>${provider.charAt(0).toUpperCase() + provider.slice(1)} API Connection Test</h4>`;
    791                     noticeContent += `<p><strong>Status:</strong> ${result.status === 'success' ? '✅ Connected' : '❌ Failed'}</p>`;
    792 
    793                     if (result.details) {
    794                         noticeContent += `<p><strong>Details:</strong> ${result.details}</p>`;
    795                     }
    796 
    797                     // Add result message
    798                     showTestNotice(noticeContent, result.status === 'success' ? 'success' : 'error', true);
    799 
    800                     Toast.loading(false);
    801 
     873                   
     874                    if (result.status === 'success') {
     875                        // Success toast
     876                        const providerName = provider.charAt(0).toUpperCase() + provider.slice(1);
     877                        Toast.success(`${providerName} connection successful! ${result.details || ''}`);
     878                    } else {
     879                        // Error toast with details
     880                        Toast.error(result.details || result.message || 'Connection test failed');
     881                    }
    802882                } else {
    803                     showTestNotice(data.data?.message || 'Connection test failed', 'error');
    804                     Toast.loading(false);
    805 
     883                    // Error from AJAX
     884                    const errorMsg = data.data?.details || data.data?.message || 'Connection test failed';
     885                    Toast.error(errorMsg);
    806886                }
    807887            })
    808888            .catch(error => {
    809889                console.error('Error:', error);
    810                 showTestNotice('Network error during connection test', 'error');
    811890                Toast.loading(false);
    812 
     891                Toast.error('Network error during connection test');
    813892            })
    814893            .finally(() => {
    815                 setLoading(testButton, false);
    816                 Toast.loading(false);
    817 
     894                if (testButton) {
     895                    setLoading(testButton, false);
     896                }
    818897            });
    819898    }
  • askany/trunk/assets/js/encryption.js

    r3336134 r3411709  
    1111        this.textEncoder = new TextEncoder();
    1212        this.textDecoder = new TextDecoder();
     13        this.cryptoKey = null;
     14        this.isInitialized = false;
    1315       
    14         // Initialize encryption key
    15         this.initializeKey();
     16        // Don't initialize automatically - let caller do it when ready
    1617    }
    1718
     
    2021     */
    2122    async initializeKey() {
     23        // Check if already initialized
     24        if (this.isInitialized) {
     25            return;
     26        }
     27
     28        // Check if encryption is supported
     29        if (!ChatEncryption.isSupported()) {
     30            console.warn('Web Crypto API not supported in this environment');
     31            return;
     32        }
     33
    2234        try {
    2335            // Try to get existing key from localStorage
     
    3850                await this.generateNewKey();
    3951            }
    40         } catch (error) {
    41             console.warn('Encryption key initialization failed, generating new key:', error);
    42             await this.generateNewKey();
     52           
     53            this.isInitialized = true;
     54        } catch (error) {
     55            console.warn('Encryption key initialization failed:', error);
     56            this.isInitialized = false;
    4357        }
    4458    }
     
    4862     */
    4963    async generateNewKey() {
     64        if (!ChatEncryption.isSupported()) {
     65            throw new Error('Web Crypto API not supported');
     66        }
     67
    5068        try {
    5169            this.cryptoKey = await window.crypto.subtle.generateKey(
     
    117135    async decrypt(encryptedData) {
    118136        try {
     137            // Check if data looks like plain text (not encrypted)
     138            if (encryptedData.trim().startsWith('{') || encryptedData.trim().startsWith('[') || encryptedData.trim().startsWith('"')) {
     139                // Likely plain text, return as-is for backward compatibility
     140                return encryptedData;
     141            }
     142
    119143            if (!this.cryptoKey) {
    120144                await this.initializeKey();
     145            }
     146
     147            if (!this.cryptoKey) {
     148                // Encryption not available, return as-is
     149                return encryptedData;
    121150            }
    122151
     
    142171            return this.textDecoder.decode(decryptedData);
    143172        } catch (error) {
    144             // console.error('Decryption failed:', error);
    145             // Return original data if decryption fails (fallback)
     173            // Return original data if decryption fails (fallback for backward compatibility)
    146174            return encryptedData;
    147175        }
     
    284312    deobfuscateData(obfuscatedData) {
    285313        try {
     314            // Check if data looks like it might be plain JSON (not obfuscated)
     315            if (obfuscatedData.trim().startsWith('{') || obfuscatedData.trim().startsWith('[')) {
     316                // Likely plain JSON, return as-is
     317                return obfuscatedData;
     318            }
     319           
    286320            const decoded = atob(obfuscatedData);
    287321            const parts = decoded.split('|');
     
    291325            return obfuscatedData;
    292326        } catch (error) {
    293             console.error('Data deobfuscation failed:', error);
     327            // If deobfuscation fails, assume it's plain data (backward compatibility)
     328            // console.warn('Data deobfuscation failed, treating as plain data:', error.message);
    294329            return obfuscatedData;
    295330        }
     
    297332}
    298333
    299 // Create global instance
    300 window.chatEncryption = new ChatEncryption();
     334// Expose the class globally for static method access
     335window.ChatEncryption = ChatEncryption;
     336
     337// Create global instance only if supported
     338if (ChatEncryption.isSupported()) {
     339    window.chatEncryption = new ChatEncryption();
     340} else {
     341    // Create a dummy instance that does nothing
     342    window.chatEncryption = {
     343        initializeKey: async () => {},
     344        encrypt: async (text) => text,
     345        decrypt: async (text) => text,
     346        encryptObject: async (obj) => JSON.stringify(obj),
     347        decryptObject: async (str) => {
     348            try {
     349                return JSON.parse(str);
     350            } catch {
     351                return {};
     352            }
     353        }
     354    };
     355    console.warn('Chat encryption disabled: Web Crypto API not available');
     356}
    301357
    302358// Export for module usage
  • askany/trunk/assets/js/frontend.js

    r3387630 r3411709  
    481481
    482482                                if (message.sender_type === 'ai') {
    483                                     // For AI messages: check content-based duplicates
    484                                     var existingAIMessages = $messagesContainer.find('.chat-message.assistant-message').filter(function () {
    485                                         return $(this).find('.message-bubble').html().trim() === formatMessageContent(message.message).trim();
    486                                     });
    487 
    488                                     isDuplicate = existingAIMessages.length > 0;
     483                                    // For AI messages: use ID-based tracking to prevent duplicates
     484                                    isDuplicate = processedMessageIds.has(message.id);
    489485
    490486                                    if (!isDuplicate) {
    491                                         // Add AI message with proper formatting
     487                                        // Mark this message as processed
     488                                        processedMessageIds.add(message.id);
     489
     490                                        // Add AI message with proper formatting and avatar
     491                                        var avatarHtml = getAvatarHtml(false);
    492492                                        var $message = $(
    493                                             '<div class="chat-message assistant-message">' +
     493                                            '<div class="chat-message assistant-message" data-message-id="' + message.id + '">' +
     494                                            avatarHtml +
    494495                                            '<div class="message-bubble">' + formatMessageContent(message.message) + '</div>' +
    495496                                            '</div>'
     
    507508                                        processedMessageIds.add(message.id);
    508509
    509                                         // Add agent message with proper formatting
     510                                        // Add agent message with proper formatting and avatar
     511                                        var avatarHtml = getAvatarHtml(false);
    510512                                        var $message = $(
    511513                                            '<div class="chat-message assistant-message" data-message-id="' + message.id + '">' +
     514                                            avatarHtml +
    512515                                            '<div class="message-bubble">' + formatMessageContent(message.message) + '</div>' +
    513516                                            '</div>'
     
    643646        }
    644647
    645         // Function to format message content with proper links and styling
     648        // Function to format message content with markdown and proper links
    646649        function formatMessageContent(text) {
    647650            if (!text) return text;
    648651
    649             // Convert URLs to clickable links
    650             var urlRegex = /(https?:\/\/[^\s]+)/g;
    651             text = text.replace(urlRegex, '<a href="$1" target="_blank" rel="noopener noreferrer">$1</a>');
    652 
    653             // Convert email addresses to clickable links
    654             var emailRegex = /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/g;
    655             text = text.replace(emailRegex, '<a href="mailto:$1">$1</a>');
    656 
    657             // Convert line breaks to HTML breaks
    658             text = text.replace(/\n/g, '<br>');
     652            // Use markdown parser if available
     653            if (typeof window.AskanyMarkdown !== 'undefined') {
     654                text = window.AskanyMarkdown.parse(text);
     655            } else {
     656                // Fallback to basic formatting
     657                // Convert URLs to clickable links
     658                var urlRegex = /(https?:\/\/[^\s]+)/g;
     659                text = text.replace(urlRegex, '<a href="$1" target="_blank" rel="noopener noreferrer">$1</a>');
     660
     661                // Convert email addresses to clickable links
     662                var emailRegex = /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/g;
     663                text = text.replace(emailRegex, '<a href="mailto:$1">$1</a>');
     664
     665                // Convert line breaks to HTML breaks
     666                text = text.replace(/\n/g, '<br>');
     667
     668                // Format lists better
     669                text = text.replace(/^\d+\.\s/gm, '<br>• ');
     670                text = text.replace(/^-\s/gm, '<br>• ');
     671            }
    659672
    660673            // Format external source references with better styling
     
    664677            // Clean up multiple line breaks
    665678            text = text.replace(/(<br\s*\/?>){3,}/g, '<br><br>');
    666 
    667             // Format lists better
    668             text = text.replace(/^\d+\.\s/gm, '<br>• ');
    669             text = text.replace(/^-\s/gm, '<br>• ');
    670679
    671680            return text.trim();
     
    714723            var formattedText = (!isUser && !isProduct) ? formatMessageContent(text) : text;
    715724
     725            // Get avatar HTML
     726            var avatarHtml = getAvatarHtml(isUser);
     727
    716728            var $message = $(
    717729                '<div class="chat-message ' + messageClass + ' message-entering">' +
     730                avatarHtml +
    718731                '<div class="message-bubble' + (isProduct ? ' product-message' : '') + '">' + formattedText + '</div>' +
    719732                '</div>'
     
    10251038        // Load existing messages on widget initialization
    10261039        async function loadExistingMessages() {
     1040            if (!sessionId || typeof askanyData === 'undefined') {
     1041                console.log('Cannot load messages - no session ID');
     1042                return;
     1043            }
     1044
    10271045            try {
    1028                 const messages = await loadMessagesFromLocalStorage();
    1029 
    1030                 if (messages && messages.length > 0) {
    1031                     // Clear any existing messages first
    1032                     $messagesContainer.empty();
    1033 
    1034                     // Add each message to the chat with proper formatting
    1035                     messages.forEach(function (message) {
    1036                         var messageClass = message.isUser ? "user-message" : "assistant-message";
    1037                         var formattedText = (!message.isUser && !message.isProduct) ? formatMessageContent(message.text) : message.text;
    1038 
    1039                         var $messageElement = $(
    1040                             '<div class="chat-message ' + messageClass + '">' +
    1041                             '<div class="message-bubble' + (message.isProduct ? ' product-message' : '') + '">' + formattedText + '</div>' +
    1042                             '</div>'
    1043                         );
    1044 
    1045                         // Add encryption indicator if message was encrypted
    1046                         if (window.chatEncryption && ChatEncryption.isSupported()) {
    1047                             $messageElement.addClass('encrypted');
     1046                // Fetch all messages from database for this session
     1047                $.ajax({
     1048                    url: askanyData.ajaxUrl,
     1049                    type: 'POST',
     1050                    data: {
     1051                        action: 'askany_get_all_messages',
     1052                        session_id: sessionId,
     1053                        nonce: askanyData.nonce
     1054                    },
     1055                    success: function (response) {
     1056                        if (response.success && response.data.messages && response.data.messages.length > 0) {
     1057                            // Clear any existing messages first
     1058                            $messagesContainer.empty();
     1059
     1060                            // Add each message to the chat with proper formatting
     1061                            response.data.messages.forEach(function (message) {
     1062                                var isUser = message.sender_type === 'user';
     1063                                var messageClass = isUser ? "user-message" : "assistant-message";
     1064                                var formattedText = !isUser ? formatMessageContent(message.message) : message.message;
     1065
     1066                                // Get avatar HTML
     1067                                var avatarHtml = getAvatarHtml(isUser);
     1068
     1069                                var $messageElement = $(
     1070                                    '<div class="chat-message ' + messageClass + '" data-message-id="' + message.id + '">' +
     1071                                    avatarHtml +
     1072                                    '<div class="message-bubble">' + formattedText + '</div>' +
     1073                                    '</div>'
     1074                                );
     1075
     1076                                // Add system message class if needed
     1077                                if (message.sender_type === 'system') {
     1078                                    $messageElement.addClass('system-message');
     1079                                    $messageElement.find('.message-bubble').addClass('system-bubble');
     1080                                }
     1081
     1082                                $messagesContainer.append($messageElement);
     1083
     1084                                // Track processed message IDs
     1085                                if (message.id) {
     1086                                    processedMessageIds.add(message.id);
     1087                                }
     1088                            });
     1089
     1090                            // Force scroll to bottom on initial load
     1091                            setTimeout(function () {
     1092                                forceScrollToBottom();
     1093                            }, 100);
     1094
     1095                            welcomeMessageAdded = true; // Mark that we have messages
     1096                        } else {
     1097                            // No existing messages, add welcome message only once
     1098                            if (!welcomeMessageAdded) {
     1099                                addMessage("Hi! I'm your AI assistant. How can I help you today? 👋", false, false);
     1100                                welcomeMessageAdded = true;
     1101                            }
    10481102                        }
    1049 
    1050                         $messagesContainer.append($messageElement);
    1051                     });
    1052 
    1053                     // Force scroll to bottom on initial load
    1054                     setTimeout(function () {
    1055                         forceScrollToBottom();
    1056                     }, 100);
    1057 
    1058                     welcomeMessageAdded = true; // Mark that we have messages
    1059                 } else {
    1060                     // No existing messages, add welcome message only once
    1061                     if (!welcomeMessageAdded) {
    1062                         await addMessage("Hi! I'm your AI assistant. How can I help you today? 👋", false, false);
    1063                         welcomeMessageAdded = true;
    1064                         // Force scroll to bottom after adding welcome message
    1065                         setTimeout(function () {
    1066                             forceScrollToBottom();
    1067                         }, 100);
    1068                     }
    1069                 }
     1103                    },
     1104                    error: function (error) {
     1105                        console.error('Failed to load messages from database:', error);
     1106                        // Add welcome message on error
     1107                        if (!welcomeMessageAdded) {
     1108                            addMessage("Hi! I'm your AI assistant. How can I help you today? 👋", false, false);
     1109                            welcomeMessageAdded = true;
     1110                        }
     1111                    }
     1112                });
    10701113            } catch (error) {
    1071                 console.error('Failed to load existing messages:', error);
    1072                 // Add welcome message as fallback only if not already added
     1114                console.error('Failed to load messages:', error);
     1115                // Add welcome message on error
    10731116                if (!welcomeMessageAdded) {
    1074                     await addMessage("Hi! I'm your AI assistant. How can I help you today? 👋", false, false);
     1117                    addMessage("Hi! I'm your AI assistant. How can I help you today? 👋", false, false);
    10751118                    welcomeMessageAdded = true;
    1076                     // Force scroll to bottom after adding welcome message
    1077                     setTimeout(function () {
    1078                         forceScrollToBottom();
    1079                     }, 100);
    10801119                }
    10811120            }
     
    10871126        }, 1500);
    10881127
     1128        // Function to get avatar HTML based on user type
     1129        function getAvatarHtml(isUser) {
     1130            if (isUser) {
     1131                // User avatar
     1132                if (askanyData.isLoggedIn && askanyData.userAvatar) {
     1133                    return '<div class="message-avatar">' + askanyData.userAvatar + '</div>';
     1134                } else {
     1135                    // Default user icon for guests
     1136                    return '<div class="message-avatar"><div class="avatar-icon user-icon">' +
     1137                        '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">' +
     1138                        '<path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path>' +
     1139                        '<circle cx="12" cy="7" r="4"></circle>' +
     1140                        '</svg>' +
     1141                        '</div></div>';
     1142                }
     1143            } else {
     1144                // Assistant avatar
     1145                if (askanyData.assistantAvatar) {
     1146                    return '<div class="message-avatar"><img src="' + askanyData.assistantAvatar + '" alt="Assistant" class="avatar-image" /></div>';
     1147                } else {
     1148                    // Default assistant icon
     1149                    return '<div class="message-avatar"><div class="avatar-icon assistant-icon">' +
     1150                        '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">' +
     1151                        '<path d="M12 8V4H8"></path>' +
     1152                        '<rect width="16" height="12" x="4" y="8" rx="2"></rect>' +
     1153                        '<path d="M2 14h2"></path>' +
     1154                        '<path d="M20 14h2"></path>' +
     1155                        '<path d="M15 13v2"></path>' +
     1156                        '<path d="M9 13v2"></path>' +
     1157                        '</svg>' +
     1158                        '</div></div>';
     1159                }
     1160            }
     1161        }
     1162
    10891163        // Function to add a message to the chat and save to local storage
    10901164        async function addMessage(text, isUser, isProduct, isSystem) {
     
    10991173            var formattedText = (!isUser && !isProduct) ? formatMessageContent(text) : text;
    11001174
     1175            // Get avatar HTML
     1176            var avatarHtml = getAvatarHtml(isUser);
     1177
    11011178            var $message = $(
    11021179                '<div class="chat-message ' + messageClass + '">' +
     1180                avatarHtml +
    11031181                '<div class="message-bubble' + (isProduct ? ' product-message' : '') + (isSystem ? ' system-bubble' : '') + '">' + formattedText + '</div>' +
    11041182                '</div>'
     
    21232201                    }
    21242202
    2125                     // Add formatted AI response
     2203                    // Don't add AI message immediately - let polling pick it up from database
     2204                    // This prevents duplicates and ensures message has proper ID
     2205                    // The polling function will add it with data-message-id attribute
     2206                   
     2207                    // Trigger an immediate poll to get the message faster
    21262208                    if (decryptedResponse.message) {
    2127                         var formattedMessage = formatAIResponse(decryptedResponse.message);
    2128                         addMessage(formattedMessage, false, false);
     2209                        setTimeout(function() {
     2210                            pollForNewMessages();
     2211                        }, 500);
    21292212                    }
    21302213
  • askany/trunk/assets/library/toastmaster.min.js

    r3296536 r3411709  
    33 * A lightweight, versatile modal and toast notification library that works seamlessly with vanilla JavaScript, React, Vue and other frameworks.
    44 */
    5 (()=>{var n={479:(module,n,t)=>{var e;!function(){"use strict";const o={title:!1,content:!1,ok:"OK",okColor:"#2980b9",cancel:"Cancel",cancelColor:"transparent",icon:"success",iconColor:"#2980b9",backdrop:"rgba(0, 0, 0, 0.7)",size:"sm",position:"center",animation:"fadeIn",darkMode:!1,backdropClose:!0,enterOk:!1,escClose:!0,bodyClose:!1,closeButton:!0,timeout:!1,progress:!1,classes:{modal:"",icon:"",content:"",contentTitle:"",contentText:"",closeButton:"",buttons:"",ok:"",cancel:"",backdrop:"",loading:"",loadingText:"",loadingSpinner:"",progress:""}},i={success:'<svg viewBox="0 0 24 24" width="40" height="40" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>',error:'<svg viewBox="0 0 24 24" width="40" height="40" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line></svg>',warning:'<svg viewBox="0 0 24 24" width="40" height="40" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>',info:'<svg viewBox="0 0 24 24" width="40" height="40" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>',question:'<svg viewBox="0 0 24 24" width="40" height="40" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>',loading:'<div class="tm-spinner"><div></div><div></div><div></div><div></div></div>'},r={tilt:{in:"tm-animation-tilt-in",out:"tm-animation-tilt-out"},fadeIn:{in:"tm-animation-fade-in",out:"tm-animation-fade-out"},shakeY:{in:"tm-animation-shake-y",out:"tm-animation-fade-out"},shakeX:{in:"tm-animation-shake-x",out:"tm-animation-fade-out"}},a={sm:"300px",md:"500px",lg:"700px",xl:"900px",full:"100%"},s={center:{top:"50%",left:"50%",transform:"translate(-50%, -50%)"},top:{top:"30px",left:"50%",transform:"translateX(-50%)"},bottom:{bottom:"30px",left:"50%",transform:"translateX(-50%)"},left:{top:"50%",left:"30px",transform:"translateY(-50%)"},right:{top:"50%",right:"30px",transform:"translateY(-50%)"},"top-left":{top:"30px",left:"30px"},"top-right":{top:"30px",right:"30px"},"bottom-left":{bottom:"30px",left:"30px"},"bottom-right":{bottom:"30px",right:"30px"},"top-center":{top:"30px",left:"50%",transform:"translateX(-50%)"},"bottom-center":{bottom:"30px",left:"50%",transform:"translateX(-50%)"},"left-center":{top:"50%",left:"30px",transform:"translateY(-50%)"},"right-center":{top:"50%",right:"30px",transform:"translateY(-50%)"}};class ToastMaster{constructor(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=this._mergeOptions(o,n),this.currentModal=null,this.timer=null,this.progressTimer=null,this.isLoading=!1,this._injectStyles()}_mergeOptions(n,t){const e={...n};for(const n in t)"classes"===n&&t.classes?e.classes={...e.classes,...t.classes}:e[n]=t[n];return e}_injectStyles(){if(document.getElementById("toast-master-styles"))return;const n=document.createElement("style");n.id="toast-master-styles",n.textContent="\n        .tm-backdrop {\n          position: fixed;\n          top: 0;\n          left: 0;\n          width: 100%;\n          height: 100%;\n          z-index: 9999;\n          display: flex;\n          justify-content: center;\n          align-items: center;\n        }\n        \n        .tm-modal {\n          background-color: #fff;\n          border-radius: 8px;\n          box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);\n          overflow: hidden;\n          position: absolute;\n          max-width: 100%;\n          max-height: 90vh;\n          display: flex;\n          flex-direction: column;\n        }\n        \n        .tm-dark-mode {\n          background-color: #333;\n          color: #fff;\n        }\n        \n        .tm-dark-mode .tm-close-button {\n          color: #fff;\n        }\n        \n        .tm-icon-container {\n          display: flex;\n          justify-content: center;\n          padding: 20px 0 0;\n        }\n        \n        .tm-content {\n          padding: 20px;\n          text-align: center;\n          overflow-y: auto;\n        }\n        \n        .tm-title {\n          font-size: 20px;\n          font-weight: bold;\n          margin-bottom: 10px;\n        }\n        \n        .tm-message {\n          font-size: 16px;\n          margin-bottom: 10px;\n        }\n        \n        .tm-buttons {\n          display: flex;\n          justify-content: center;\n          padding: 15px;\n          gap: 10px;\n        }\n        \n        .tm-button {\n          padding: 8px 16px;\n          border-radius: 4px;\n          cursor: pointer;\n          border: none;\n          font-size: 14px;\n          font-weight: bold;\n          transition: opacity 0.2s;\n        }\n        \n        .tm-button:hover {\n          opacity: 0.8;\n        }\n        \n        .tm-ok-button {\n          color: white;\n        }\n        \n        .tm-cancel-button {\n          background-color: transparent;\n          border: 1px solid #ccc;\n        }\n        \n        .tm-close-button {\n          position: absolute;\n          top: 10px;\n          right: 10px;\n          cursor: pointer;\n          background: none;\n          border: none;\n          font-size: 20px;\n          color: #666;\n          padding: 0;\n          width: 24px;\n          height: 24px;\n          display: flex;\n          align-items: center;\n          justify-content: center;\n          line-height: 1;\n        }\n        \n        .tm-progress {\n          position: absolute;\n          top: 0;\n          left: 0;\n          height: 4px;\n          background-color: #2980b9;\n          width: 100%;\n          transform-origin: left center;\n          transform: scaleX(0);\n        }\n        \n        .tm-loading {\n          display: flex;\n          flex-direction: column;\n          align-items: center;\n          justify-content: center;\n          padding: 30px;\n        }\n        \n        .tm-loading-text {\n          margin-top: 15px;\n          font-size: 16px;\n        }\n        \n        .tm-spinner {\n          display: inline-block;\n          position: relative;\n          width: 40px;\n          height: 40px;\n        }\n        \n        .tm-spinner div {\n          box-sizing: border-box;\n          display: block;\n          position: absolute;\n          width: 32px;\n          height: 32px;\n          margin: 4px;\n          border: 4px solid currentColor;\n          border-radius: 50%;\n          animation: tm-spinner 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n          border-color: currentColor transparent transparent transparent;\n        }\n        \n        .tm-spinner div:nth-child(1) {\n          animation-delay: -0.45s;\n        }\n        \n        .tm-spinner div:nth-child(2) {\n          animation-delay: -0.3s;\n        }\n        \n        .tm-spinner div:nth-child(3) {\n          animation-delay: -0.15s;\n        }\n        \n        @keyframes tm-spinner {\n          0% { transform: rotate(0deg); }\n          100% { transform: rotate(360deg); }\n        }\n        \n        /* Animation: Tilt */\n        .tm-animation-tilt-in {\n          animation: tm-tilt-in 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;\n        }\n        \n        .tm-animation-tilt-out {\n          animation: tm-tilt-out 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;\n        }\n        \n        @keyframes tm-tilt-in {\n          0% { transform: translateY(-50px) rotate(-8deg); opacity: 0; }\n          100% { transform: translateY(0) rotate(0); opacity: 1; }\n        }\n        \n        @keyframes tm-tilt-out {\n          0% { transform: translateY(0) rotate(0); opacity: 1; }\n          100% { transform: translateY(-50px) rotate(-8deg); opacity: 0; }\n        }\n        \n        /* Animation: Fade */\n        .tm-animation-fade-in {\n          animation: tm-fade-in 0.3s ease-in both;\n        }\n        \n        .tm-animation-fade-out {\n          animation: tm-fade-out 0.3s ease-out both;\n        }\n        \n        @keyframes tm-fade-in {\n          0% { opacity: 0; }\n          100% { opacity: 1; }\n        }\n        \n        @keyframes tm-fade-out {\n          0% { opacity: 1; }\n          100% { opacity: 0; }\n        }\n        \n        /* Animation: ShakeY */\n        .tm-animation-shake-y {\n          animation: tm-shake-y 0.5s cubic-bezier(.36,.07,.19,.97) both;\n        }\n        \n        @keyframes tm-shake-y {\n          0%, 100% { transform: translateY(0); }\n          10%, 30%, 50%, 70%, 90% { transform: translateY(-10px); }\n          20%, 40%, 60%, 80% { transform: translateY(10px); }\n        }\n        \n        /* Animation: ShakeX */\n        .tm-animation-shake-x {\n          animation: tm-shake-x 0.5s cubic-bezier(.36,.07,.19,.97) both;\n        }\n        \n        @keyframes tm-shake-x {\n          0%, 100% { transform: translateX(0); }\n          10%, 30%, 50%, 70%, 90% { transform: translateX(-10px); }\n          20%, 40%, 60%, 80% { transform: translateX(10px); }\n        }\n      ",n.textContent+="\n        /* Pricing Modal Styles */\n        .tm-pricing-modal {\n          max-width: 900px !important;\n        }\n        \n        .tm-price-modal-container {\n          width: 100%;\n          font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n        }\n        \n        .tm-price-modal-header {\n          text-align: center;\n          padding: 0 15px 15px;\n          position: relative;\n        }\n        \n        .tm-price-modal-header h2 {\n          margin: 0 0 10px;\n          font-size: 24px;\n          font-weight: 700;\n        }\n        \n        .tm-price-modal-header p {\n          margin: 0;\n          color: #6c757d;\n        }\n        \n        .tm-price-modal-toggle {\n          display: flex;\n          justify-content: center;\n          background-color: #f8f9fa;\n          border-radius: 30px;\n          padding: 5px;\n          margin: 15px auto;\n          max-width: 300px;\n        }\n        \n        .tm-price-modal-toggle button {\n          flex: 1;\n          border: none;\n          padding: 8px 16px;\n          border-radius: 30px;\n          background: transparent;\n          cursor: pointer;\n          position: relative;\n          font-weight: 500;\n          transition: all 0.2s;\n          color: #171717;\n        }\n        \n        .tm-price-modal-toggle button.active {\n          background-color: #fff;\n          box-shadow: 0 2px 10px rgba(0,0,0,0.1);\n        }\n        \n        .tm-price-modal-save {\n          position: absolute;\n          top: -12px;\n          right: -10px;\n          background-color: #28a745;\n          color: white;\n          font-size: 10px;\n          padding: 2px 6px;\n          border-radius: 10px;\n          font-weight: bold;\n        }\n        \n        .tm-price-modal-plans {\n          display: flex;\n          flex-wrap: wrap;\n          gap: 20px;\n          justify-content: center;\n          margin: 20px 0;\n        }\n        \n        .tm-price-modal-plan {\n          flex: 1;\n          min-width: 220px;\n          max-width: 280px;\n          background-color: #fff;\n          border-radius: 10px;\n          box-shadow: 0 5px 20px rgba(0,0,0,0.1);\n          padding: 20px;\n          position: relative;\n          transition: transform 0.3s;\n        }\n        \n        .tm-price-modal-plan:hover {\n          transform: translateY(-5px);\n        }\n        \n        .tm-price-modal-plan.recommended {\n          transform: scale(1.05);\n          border: 2px solid #007bff;\n        }\n        \n        .tm-price-modal-plan.recommended:hover {\n          transform: scale(1.05) translateY(-5px);\n        }\n        \n        .tm-price-modal-recommended {\n          position: absolute;\n          top: -12px;\n          left: 50%;\n          transform: translateX(-50%);\n          background-color: #007bff;\n          color: white;\n          padding: 4px 12px;\n          border-radius: 20px;\n          font-size: 12px;\n          font-weight: bold;\n        }\n        \n        .tm-price-modal-tag {\n          position: absolute;\n          top: 20px;\n          right: -8px;\n          padding: 4px 12px;\n          color: white;\n          font-size: 12px;\n          font-weight: bold;\n          border-radius: 4px 0 0 4px;\n          box-shadow: 0 2px 5px rgba(0,0,0,0.2);\n        }\n        \n        .tm-price-modal-tag:after {\n          content: '';\n          position: absolute;\n          right: 0;\n          bottom: -8px;\n          border-top: 8px solid;\n          border-right: 8px solid transparent;\n          filter: brightness(70%);\n        }\n        \n        .tm-price-modal-plan h3 {\n          text-align: center;\n          margin: 0 0 15px;\n          font-size: 20px;\n          font-weight: 700;\n        }\n        \n        .tm-price-modal-price {\n          text-align: center;\n          margin-bottom: 20px;\n          position: relative;\n          padding: 10px 0;\n        }\n        \n        .tm-price-modal-original {\n          color: #dc3545;\n          text-decoration: line-through;\n          font-size: 14px;\n          opacity: 0.7;\n        }\n        \n        .tm-price-modal-discount {\n          position: absolute;\n          top: 0;\n          right: 30px;\n          background-color: #28a745;\n          color: white;\n          padding: 2px 6px;\n          border-radius: 10px;\n          font-size: 12px;\n          font-weight: bold;\n        }\n        \n        .tm-price-modal-current {\n          font-size: 28px;\n          font-weight: 700;\n          color: #333;\n        }\n        \n        .tm-price-modal-period {\n          color: #6c757d;\n          font-size: 14px;\n        }\n        \n        .tm-price-modal-features {\n          list-style: none;\n          padding: 0;\n          margin: 0 0 20px;\n        }\n        \n        .tm-price-modal-features li {\n          display: flex;\n          align-items: center;\n          margin-bottom: 10px;\n          color: #333;\n        }\n        \n        .tm-price-modal-features svg {\n          color: #28a745;\n          margin-right: 10px;\n          flex-shrink: 0;\n        }\n        \n        .tm-price-modal-select {\n          width: 100%;\n          padding: 10px 16px;\n          border: none;\n          border-radius: 6px;\n          background-color: #007bff;\n          color: white;\n          font-weight: 600;\n          cursor: pointer;\n          display: flex;\n          align-items: center;\n          justify-content: center;\n          gap: 8px;\n          transition: background-color 0.2s;\n        }\n        \n        .tm-price-modal-select:hover {\n          background-color: #0069d9;\n        }\n        \n        .tm-price-modal-guarantee {\n          display: flex;\n          align-items: center;\n          max-width: 500px;\n          margin: 20px auto;\n          padding: 15px;\n          background-color: #f8f9fa;\n          border-radius: 10px;\n        }\n        \n        .tm-price-modal-guarantee-badge {\n          background-color: #28a745;\n          color: white;\n          width: 40px;\n          height: 40px;\n          border-radius: 50%;\n          display: flex;\n          align-items: center;\n          justify-content: center;\n          font-size: 16px;\n          font-weight: bold;\n          margin-right: 15px;\n          flex-shrink: 0;\n        }\n        \n        .tm-price-modal-guarantee-text h4 {\n          margin: 0 0 5px;\n          font-size: 16px;\n          font-weight: 600;\n        }\n        \n        .tm-price-modal-guarantee-text p {\n          margin: 0;\n          color: #6c757d;\n          font-size: 14px;\n        }\n        \n        @media (max-width: 768px) {\n          .tm-price-modal-plans {\n            flex-direction: column;\n            align-items: center;\n          }\n          \n          .tm-price-modal-plan {\n            width: 100%;\n            max-width: 320px;\n          }\n          \n          .tm-price-modal-plan.recommended {\n            order: -1;\n          }\n        }\n      ",n.textContent+="\n        /* Tag Styles */\n        .tm-tag {\n          display: inline-block;\n          padding: 2px 6px;\n          margin: 0 5px;\n          border-radius: 3px;\n          font-size: 12px;\n          font-weight: bold;\n          text-transform: uppercase;\n          letter-spacing: 0.5px;\n          vertical-align: middle;\n          white-space: nowrap;\n          line-height: 1.4;\n          user-select: none;\n          box-shadow: 0 1px 2px rgba(0,0,0,0.1);\n        }\n\n        /* Some predefined tag styles */\n        .tm-tag-pro {\n          background-color: #ff6b6b;\n          color: white;\n        }\n\n        .tm-tag-new {\n          background-color: #4ecdc4;\n          color: white;\n        }\n\n        .tm-tag-upcoming {\n          background-color: #a66efa;\n          color: white;\n        }\n\n        .tm-tag-beta {\n          background-color: #f39c12;\n          color: white;\n        }\n\n        .tm-tag-hot {\n          background-color: #e74c3c;\n          color: white;\n        }\n\n        .tm-tag-sale {\n          background-color: #3498db;\n          color: white;\n        }\n\n        .tm-tag-free {\n          background-color: #2ecc71;\n          color: white;\n        }\n      ",document.head.appendChild(n)}fire(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new Promise((t=>{this.currentModal&&this._close();const e=this._mergeOptions(this.options,n),o=this._createModal(e);document.body.appendChild(o.backdrop),this.currentModal=o,this._applyAnimation(o.modal,e.animation,"in"),e.isPricingModal?this._setupPricingEvents(o.modal,e,t):this._setupEvents(o,e,t),e.timeout&&"number"==typeof e.timeout&&this._setupTimer(o,e.timeout,t)}))}_createModal(n){const t=document.createElement("div");t.className=`tm-backdrop ${n.classes.backdrop||""}`,n.backdrop&&(t.style.backgroundColor=n.backdrop);const e=document.createElement("div");e.className=`tm-modal ${n.classes.modal||""} ${n.darkMode?"tm-dark-mode":""}`;const o=a[n.size]||n.size;e.style.width=o;const i=s[n.position]||s.center;for(const n in i)e.style[n]=i[n];return e.innerHTML=this._getModalContent(n),t.appendChild(e),{backdrop:t,modal:e}}_getModalContent(n){let t="";return n.progress&&(t+=`<div class="tm-progress ${n.classes.progress||""}"></div>`),n.closeButton&&(t+=`<button class="tm-close-button ${n.classes.closeButton||""}">&times;</button>`),this.isLoading?(t+=`\n          <div class="tm-loading ${n.classes.loading||""}">\n            ${i.loading}\n            <div class="tm-loading-text ${n.classes.loadingText||""}">${"string"==typeof n.loadingText?n.loadingText:"Please wait..."}</div>\n          </div>\n        `,t):(n.icon&&(t+=`\n          <div class="tm-icon-container ${n.classes.icon||""}">\n            <div style="color: ${n.iconColor}">\n              ${this._getIcon(n.icon)}\n            </div>\n          </div>\n        `),(n.title||n.content)&&(t+=`<div class="tm-content ${n.classes.content||""}">`,n.title&&(t+=`<div class="tm-title ${n.classes.contentTitle||""}">${n.title}</div>`),n.content&&(t+=`<div class="tm-message ${n.classes.contentText||""}">${n.content}</div>`),t+="</div>"),(n.ok||n.cancel)&&(t+=`<div class="tm-buttons ${n.classes.buttons||""}">`,n.cancel&&(t+=`\n            <button class="tm-button tm-cancel-button ${n.classes.cancel||""}" \n                    style="color: ${"transparent"===n.cancelColor?"#333":"#fff"}; background-color: ${n.cancelColor};">\n              ${n.cancel}\n            </button>\n          `),n.ok&&(t+=`\n            <button class="tm-button tm-ok-button ${n.classes.ok||""}" \n                    style="background-color: ${n.okColor}">\n              ${n.ok}\n            </button>\n          `),t+="</div>"),t)}_getIcon(n){return i[n]?i[n]:n.trim().startsWith("<svg")?n:n.match(/\.(jpeg|jpg|gif|png|svg)$/)||n.startsWith("data:image")?`<img src="${n}" alt="Icon" style="max-width: 80px; max-height: 80px;">`:i.info}_setupEvents(n,t,e){if(t.closeButton){const t=n.modal.querySelector(".tm-close-button");t&&t.addEventListener("click",(()=>{this._close(),e({close:!0})}))}if(t.backdropClose&&t.backdrop&&n.backdrop.addEventListener("click",(t=>{t.target===n.backdrop&&(this._close(),e({close:!0}))})),t.bodyClose&&n.modal.addEventListener("click",(()=>{this._close(),e({close:!0})})),t.escClose){const escHandler=n=>{"Escape"===n.key&&(this._close(),e({close:!0}),document.removeEventListener("keydown",escHandler))};document.addEventListener("keydown",escHandler)}if(t.enterOk){const enterHandler=n=>{"Enter"===n.key&&(this._close(),e({ok:!0}),document.removeEventListener("keydown",enterHandler))};document.addEventListener("keydown",enterHandler)}const o=n.modal.querySelector(".tm-ok-button");o&&o.addEventListener("click",(()=>{this._close(),e({ok:!0})}));const i=n.modal.querySelector(".tm-cancel-button");i&&i.addEventListener("click",(()=>{this._close(),e({cancel:!0})}))}_setupPricingEvents(n,t,e){if(t.closeButton){const t=n.querySelector(".tm-close-button");t&&t.addEventListener("click",(()=>{this._close(),e({close:!0})}))}const o=n.querySelectorAll(".tm-price-modal-toggle button"),updatePrices=e=>{t.plans&&Array.isArray(t.plans)&&t.plans.forEach((t=>{const o=t.prices?.[e];if(!o)return;const i=n.querySelector(`.tm-price-modal-plan[data-plan="${t.name}"]`);if(!i)return;const r=i.querySelector(".tm-price-modal-original"),a=i.querySelector(".tm-price-modal-discount"),s=i.querySelector(".tm-price-modal-current"),l=i.querySelector(".tm-price-modal-period"),c=o.original&&o.current&&o.original!==o.current?Math.round(100*(1-o.current/o.original)):0;r&&(c>0?(r.textContent=`$${o.original.toFixed(2)}`,r.style.display="block"):r.style.display="none"),a&&(c>0?(a.textContent=`-${c}%`,a.style.display="inline-block"):a.style.display="none"),s&&o.current&&(s.textContent=`$${o.current.toFixed(2)}`),l&&o.period&&(l.textContent=o.period)}))};o.forEach((n=>{n.addEventListener("click",(t=>{t.preventDefault(),o.forEach((n=>n.classList.remove("active"))),n.classList.add("active");const e=n.getAttribute("data-toggle");updatePrices(e)}))}));n.querySelectorAll(".tm-price-modal-select").forEach((o=>{o.addEventListener("click",(i=>{i.preventDefault();const r=o.getAttribute("data-plan"),a=o.getAttribute("data-url"),s=n.querySelector(".tm-price-modal-toggle button.active"),l=s?s.getAttribute("data-toggle"):null;a&&"#"!==a&&(window.location.href=a);const c=t.plans.find((n=>n.name===r));c&&c.button&&c.button.callback&&"function"==typeof c.button.callback&&c.button.callback({plan:c,toggle:l,prices:l?c.prices[l]:null}),this._close(),e({plan:r,selectedToggle:l})}))}));const i=n.querySelector(".tm-price-modal-toggle button.active");if(i){const n=i.getAttribute("data-toggle");updatePrices(n)}}_setupTimer(n,t,e){this.timer=setTimeout((()=>{this._close(),e({timeout:!0})}),t);const o=n.modal.querySelector(".tm-progress");o&&(o.style.transition=`transform ${t}ms linear`,requestAnimationFrame((()=>{requestAnimationFrame((()=>{o.style.transform="scaleX(1)"}))})))}_applyAnimation(n,t,e){if(!t)return;const o=r[t]||r.tilt;n.classList.add(o[e]),n.addEventListener("animationend",(()=>{n.classList.remove(o[e])}),{once:!0})}_close(){if(!this.currentModal)return;const{backdrop:n,modal:t}=this.currentModal;this.timer&&(clearTimeout(this.timer),this.timer=null),this.progressTimer&&(clearTimeout(this.progressTimer),this.progressTimer=null);const e=this.options.animation;e?(this._applyAnimation(t,e,"out"),t.addEventListener("animationend",(()=>{document.body.removeChild(n)}),{once:!0})):document.body.removeChild(n),this.currentModal=null,this.isLoading=!1}price(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=this._mergeOptions({title:"🚀 Hello its a pricing modal",toggles:{options:["Monthly","Yearly","Lifetime"],active:"Yearly",savings:{Yearly:"Save 20%",Lifetime:"Save 80%"}},plans:[{name:"Basic",prices:{Monthly:{original:12.99,current:12.99,period:"/month"},Yearly:{original:155.88,current:129.9,period:"/year"},Lifetime:{original:155.88,current:30.49,period:"/lifetime"}},features:["All Basic features","WooCommerce packages","Advanced security packages"],button:{text:"Upgrade Now",url:"#",callback:null},tag:null}],guarantee:{days:14,title:"14-Day Money-Back Guarantee",text:"Try it risk-free."},recommended:"Pro",closeButton:!0,size:"xl",classes:{modal:"",toggle:"",plans:"",plan:"",guarantee:""}},n),e=this._generatePricingModalContent(t);return this.fire({content:e,icon:!1,ok:!1,cancel:!1,backdrop:"rgba(0, 0, 0, 0.7)",animation:"fadeIn",size:t.size,closeButton:t.closeButton,classes:{modal:`tm-pricing-modal ${t.classes.modal||""}`,content:"tm-pricing-content"},isPricingModal:!0,plans:t.plans,toggles:t.toggles})}_generatePricingModalContent(n){let t=`\n        <div class="tm-price-modal-container">\n          <div class="tm-price-modal-header">\n            <h2>${n.title}</h2>\n            ${n.subtitle?`<p>${n.subtitle}</p>`:""}\n          </div>\n      `;return n.toggles&&n.toggles.options.length>1&&(t+=`<div class="tm-price-modal-toggle ${n.classes.toggle||""}">`,n.toggles.options.forEach((e=>{const o=e===n.toggles.active,i=n.toggles.savings?.[e]||"";t+=`\n            <button class="${o?"active":""}" data-toggle="${e}">\n              ${e}${i?`<span class="tm-price-modal-save">${i}</span>`:""}\n            </button>\n          `})),t+="</div>"),t+=`<div class="tm-price-modal-plans ${n.classes.plans||""}">`,n.plans.forEach((e=>{const o=e.name===n.recommended,i=e.prices[n.toggles.active]||{},r=i.original!==i.current?Math.round(100*(1-i.current/i.original)):0;t+=`\n          <div class="tm-price-modal-plan ${n.classes.plan||""} ${o?"recommended":""}" data-plan="${e.name}">\n            ${o?'<div class="tm-price-modal-recommended">MOST POPULAR</div>':""}\n            ${e.tag?this._generateTag(e.tag):""}\n            <h3>${e.name}</h3>\n            <div class="tm-price-modal-price">\n              ${i.original!==i.current?`<div class="tm-price-modal-original">$${i.original.toFixed(2)}</div>`:""}\n              ${r>0?`<div class="tm-price-modal-discount">-${r}%</div>`:""}\n              <div class="tm-price-modal-current">$${i.current.toFixed(2)}</div>\n              <div class="tm-price-modal-period">${i.period}</div>\n            </div>\n            <ul class="tm-price-modal-features">\n              ${e.features.map((n=>`\n                <li>\n                  <svg class="check-icon" viewBox="0 0 512 512" width="1em" height="1em">\n                    <path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path>\n                  </svg>\n                  ${n}\n                </li>\n              `)).join("")}\n            </ul>\n            <button class="tm-price-modal-select" data-plan="${e.name}" ${e.button.url?`data-url="${e.button.url}"`:""}>\n              ${e.button.text} \n              <svg class="arrow-icon" viewBox="0 0 448 512" width="1em" height="1em">\n                <path d="M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z"></path>\n              </svg>\n            </button>\n          </div>\n        `})),t+="</div>",n.guarantee&&(t+=`\n          <div class="tm-price-modal-guarantee ${n.classes.guarantee||""}">\n            <div class="tm-price-modal-guarantee-badge">${n.guarantee.days}</div>\n            <div class="tm-price-modal-guarantee-text">\n              <h4>${n.guarantee.title}</h4>\n              <p>${n.guarantee.text}</p>\n            </div>\n          </div>\n        `),t+="</div>",t}_generateTag(n){let t,e,o;if("string"==typeof n)switch(t=n.toLowerCase(),e=n.toUpperCase(),t){case"pro":o="#ff6b6b";case"new":o="#4ecdc4";case"upcoming":o="#a66efa";case"beta":o="#f39c12";case"hot":o="#e74c3c";case"sale":o="#3498db";case"free":o="#2ecc71";default:o="#6c757d"}else t=n.type||"custom",e=n.text||"CUSTOM",o=n.color||"#6c757d";return`\n        <div class="tm-price-modal-tag tm-tag-${t}" style="background-color: ${o}">\n          ${e}\n        </div>\n      `}tag(n){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",o={},i={};return"object"==typeof n?(o=n,i=t||{}):(o={type:n||"custom",text:t||n.toUpperCase(),color:""},"object"==typeof e?(i=e,o.color=i.color||this._getDefaultTagColor(o.type)):(o.color=e||this._getDefaultTagColor(o.type),i={})),i.selector||i.target?this._renderTag(o,i):o}_renderTag(n){const t={target:null,prepend:!1,position:"after",selector:null,textColor:"#fff",borderRadius:"3px",padding:"2px 6px",fontSize:"12px",fontWeight:"bold",margin:"0 5px",display:"inline-block",className:"",style:{},...arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}},e=document.createElement("span");e.className=`tm-tag tm-tag-${n.type.toLowerCase()} ${t.className}`,e.textContent=n.text;const o={backgroundColor:n.color,color:t.textColor,borderRadius:t.borderRadius,padding:t.padding,fontSize:t.fontSize,fontWeight:t.fontWeight,margin:t.margin,display:t.display,...t.style};if(Object.keys(o).forEach((n=>{o[n]&&(e.style[n]=o[n])})),t.selector){const n=document.querySelector(t.selector);n&&("before"===t.position?n.parentNode.insertBefore(e,n):"after"===t.position?n.nextSibling?n.parentNode.insertBefore(e,n.nextSibling):n.parentNode.appendChild(e):"prepend"===t.position?n.insertBefore(e,n.firstChild):n.appendChild(e))}else t.target&&t.target instanceof HTMLElement&&(t.prepend?t.target.insertBefore(e,t.target.firstChild):t.target.appendChild(e));return e}_getDefaultTagColor(n){switch(n.toLowerCase()){case"pro":return"#ff6b6b";case"new":return"#4ecdc4";case"upcoming":return"#a66efa";case"beta":return"#f39c12";case"hot":return"#e74c3c";case"sale":return"#3498db";case"free":return"#2ecc71";default:return"#6c757d"}}loading(){let n=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.isLoading=!1!==n&&null!==n&&0!==n;let t="Please wait...";return"string"==typeof n&&(t=n),this.isLoading?this.fire({title:!1,content:!1,icon:!1,ok:!1,cancel:!1,closeButton:!1,loadingText:t}):(this.currentModal&&this._close(),this)}success(){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4e3;const t={title:arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",icon:"success",iconColor:"#28a745",ok:!1,cancel:!1,progress:!0};return"number"==typeof n||!1===n?t.timeout=n:"object"==typeof n&&Object.assign(t,n),this.fire(t)}error(){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const t={title:arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",icon:"error",iconColor:"#dc3545",ok:"OK",okColor:"#dc3545",cancel:!1};return"object"==typeof n?Object.assign(t,n):t.content=n,this.fire(t)}warn(){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const t={title:arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",icon:"warning",iconColor:"#ffc107",ok:"OK",okColor:"#ffc107",cancel:!1};return"object"==typeof n?Object.assign(t,n):t.content=n,this.fire(t)}info(){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const t={title:arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",icon:"info",iconColor:"#17a2b8",ok:"OK",okColor:"#17a2b8",cancel:!1};return"object"==typeof n?Object.assign(t,n):t.content=n,this.fire(t)}ask(){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const t={title:arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",icon:"question",iconColor:"#6c757d",ok:"Yes",okColor:"#28a745",cancel:"No"};return"object"==typeof n?Object.assign(t,n):t.content=n,this.fire(t)}notify(){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const t={title:arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",icon:"info",iconColor:"#17a2b8",position:"top-right",ok:!1,cancel:!1,timeout:5e3,progress:!0};return"object"==typeof n?Object.assign(t,n):t.content=n,this.fire(t)}mixin(){return new ToastMaster(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{})}}const l=new ToastMaster;["fire","success","error","warn","info","ask","notify","loading","mixin","price","tag"].forEach((n=>{ToastMaster[n]=function(){return l[n](...arguments)}})),"undefined"!=typeof window&&(window.ToastMaster=ToastMaster,window.Toast=ToastMaster),module.exports&&(module.exports=ToastMaster),void 0===(e=function(){return ToastMaster}.call(n,t,n,module))||(module.exports=e)}()}},t={};(function __webpack_require__(e){var o=t[e];if(void 0!==o)return o.exports;var module=t[e]={exports:{}};return n[e](module,module.exports,__webpack_require__),module.exports})(479)})();
     5(()=>{var n={479:(module,n,t)=>{var e;!function(){"use strict";const o={title:!1,content:!1,ok:"OK",okColor:"#2980b9",cancel:"Cancel",cancelColor:"transparent",icon:"success",iconColor:"#2980b9",backdrop:"rgba(0, 0, 0, 0.7)",size:"sm",position:"center",animation:"fadeIn",darkMode:!1,backdropClose:!0,enterOk:!1,escClose:!0,bodyClose:!1,closeButton:!0,timeout:!1,progress:!1,classes:{modal:"",icon:"",content:"",contentTitle:"",contentText:"",closeButton:"",buttons:"",ok:"",cancel:"",backdrop:"",loading:"",loadingText:"",loadingSpinner:"",progress:""}},i={success:'<svg viewBox="0 0 24 24" width="40" height="40" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>',error:'<svg viewBox="0 0 24 24" width="40" height="40" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line></svg>',warning:'<svg viewBox="0 0 24 24" width="40" height="40" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>',info:'<svg viewBox="0 0 24 24" width="40" height="40" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>',question:'<svg viewBox="0 0 24 24" width="40" height="40" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>',loading:'<div class="tm-spinner"><div></div><div></div><div></div><div></div></div>'},r={tilt:{in:"tm-animation-tilt-in",out:"tm-animation-tilt-out"},fadeIn:{in:"tm-animation-fade-in",out:"tm-animation-fade-out"},shakeY:{in:"tm-animation-shake-y",out:"tm-animation-fade-out"},shakeX:{in:"tm-animation-shake-x",out:"tm-animation-fade-out"}},a={sm:"300px",md:"500px",lg:"700px",xl:"900px",full:"100%"},s={center:{top:"50%",left:"50%",transform:"translate(-50%, -50%)"},top:{top:"30px",left:"50%",transform:"translateX(-50%)"},bottom:{bottom:"30px",left:"50%",transform:"translateX(-50%)"},left:{top:"50%",left:"30px",transform:"translateY(-50%)"},right:{top:"50%",right:"30px",transform:"translateY(-50%)"},"top-left":{top:"30px",left:"30px"},"top-right":{top:"30px",right:"30px"},"bottom-left":{bottom:"30px",left:"30px"},"bottom-right":{bottom:"30px",right:"30px"},"top-center":{top:"30px",left:"50%",transform:"translateX(-50%)"},"bottom-center":{bottom:"30px",left:"50%",transform:"translateX(-50%)"},"left-center":{top:"50%",left:"30px",transform:"translateY(-50%)"},"right-center":{top:"50%",right:"30px",transform:"translateY(-50%)"}};class ToastMaster{constructor(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=this._mergeOptions(o,n),this.currentModal=null,this.timer=null,this.progressTimer=null,this.isLoading=!1,this._injectStyles()}_mergeOptions(n,t){const e={...n};for(const n in t)"classes"===n&&t.classes?e.classes={...e.classes,...t.classes}:e[n]=t[n];return e}_injectStyles(){if(document.getElementById("toast-master-styles"))return;const n=document.createElement("style");n.id="toast-master-styles",n.textContent="\n        .tm-backdrop {\n          position: fixed;\n          top: 0;\n          left: 0;\n          width: 100%;\n          height: 100%;\n          z-index: 9999;\n          display: flex;\n          justify-content: center;\n          align-items: center;\n        }\n        \n        .tm-modal {\n          background-color: #fff;\n          border-radius: 8px;\n          box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);\n          overflow: hidden;\n          position: absolute;\n          max-width: 100%;\n          max-height: 90vh;\n          display: flex;\n          flex-direction: column;\n        }\n        \n        .tm-dark-mode {\n          background-color: #333;\n          color: #fff;\n        }\n        \n        .tm-dark-mode .tm-close-button {\n          color: #fff;\n        }\n        \n        .tm-icon-container {\n          display: flex;\n          justify-content: center;\n          padding: 20px 0 0;\n        }\n        \n        .tm-content {\n          padding: 20px;\n          text-align: center;\n          overflow-y: auto;\n        }\n        \n        .tm-title {\n          font-size: 20px;\n          font-weight: bold;\n          margin-bottom: 10px;\n        }\n        \n        .tm-message {\n          font-size: 16px;\n          margin-bottom: 10px;\n        }\n        \n        .tm-buttons {\n          display: flex;\n          justify-content: center;\n          padding: 15px;\n          gap: 10px;\n        }\n        \n        .tm-button {\n          padding: 8px 16px;\n          border-radius: 4px;\n          cursor: pointer;\n          border: none;\n          font-size: 14px;\n          font-weight: bold;\n          transition: opacity 0.2s;\n        }\n        \n        .tm-button:hover {\n          opacity: 0.8;\n        }\n        \n        .tm-ok-button {\n          color: white;\n        }\n        \n        .tm-cancel-button {\n          background-color: transparent;\n          border: 1px solid #ccc;\n        }\n        \n        .tm-close-button {\n          position: absolute;\n          top: 10px;\n          right: 10px;\n          cursor: pointer;\n          background: none;\n          border: none;\n          font-size: 20px;\n          color: #666;\n          padding: 0;\n          width: 24px;\n          height: 24px;\n          display: flex;\n          align-items: center;\n          justify-content: center;\n          line-height: 1;\n        }\n        \n        .tm-progress {\n          position: absolute;\n          top: 0;\n          left: 0;\n          height: 4px;\n          background-color: #2980b9;\n          width: 100%;\n          transform-origin: left center;\n          transform: scaleX(0);\n        }\n        \n        .tm-loading {\n          display: flex;\n          flex-direction: column;\n          align-items: center;\n          justify-content: center;\n          padding: 30px;\n        }\n        \n        .tm-loading-text {\n          margin-top: 15px;\n          font-size: 16px;\n        }\n        \n        .tm-spinner {\n          display: inline-block;\n          position: relative;\n          width: 40px;\n          height: 40px;\n        }\n        \n        .tm-spinner div {\n          box-sizing: border-box;\n          display: block;\n          position: absolute;\n          width: 32px;\n          height: 32px;\n          margin: 4px;\n          border: 4px solid currentColor;\n          border-radius: 50%;\n          animation: tm-spinner 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n          border-color: currentColor transparent transparent transparent;\n        }\n        \n        .tm-spinner div:nth-child(1) {\n          animation-delay: -0.45s;\n        }\n        \n        .tm-spinner div:nth-child(2) {\n          animation-delay: -0.3s;\n        }\n        \n        .tm-spinner div:nth-child(3) {\n          animation-delay: -0.15s;\n        }\n        \n        @keyframes tm-spinner {\n          0% { transform: rotate(0deg); }\n          100% { transform: rotate(360deg); }\n        }\n        \n        /* Animation: Tilt */\n        .tm-animation-tilt-in {\n          animation: tm-tilt-in 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;\n        }\n        \n        .tm-animation-tilt-out {\n          animation: tm-tilt-out 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;\n        }\n        \n        @keyframes tm-tilt-in {\n          0% { transform: translateY(-50px) rotate(-8deg); opacity: 0; }\n          100% { transform: translateY(0) rotate(0); opacity: 1; }\n        }\n        \n        @keyframes tm-tilt-out {\n          0% { transform: translateY(0) rotate(0); opacity: 1; }\n          100% { transform: translateY(-50px) rotate(-8deg); opacity: 0; }\n        }\n        \n        /* Animation: Fade */\n        .tm-animation-fade-in {\n          animation: tm-fade-in 0.3s ease-in both;\n        }\n        \n        .tm-animation-fade-out {\n          animation: tm-fade-out 0.3s ease-out both;\n        }\n        \n        @keyframes tm-fade-in {\n          0% { opacity: 0; }\n          100% { opacity: 1; }\n        }\n        \n        @keyframes tm-fade-out {\n          0% { opacity: 1; }\n          100% { opacity: 0; }\n        }\n        \n        /* Animation: ShakeY */\n        .tm-animation-shake-y {\n          animation: tm-shake-y 0.5s cubic-bezier(.36,.07,.19,.97) both;\n        }\n        \n        @keyframes tm-shake-y {\n          0%, 100% { transform: translateY(0); }\n          10%, 30%, 50%, 70%, 90% { transform: translateY(-10px); }\n          20%, 40%, 60%, 80% { transform: translateY(10px); }\n        }\n        \n        /* Animation: ShakeX */\n        .tm-animation-shake-x {\n          animation: tm-shake-x 0.5s cubic-bezier(.36,.07,.19,.97) both;\n        }\n        \n        @keyframes tm-shake-x {\n          0%, 100% { transform: translateX(0); }\n          10%, 30%, 50%, 70%, 90% { transform: translateX(-10px); }\n          20%, 40%, 60%, 80% { transform: translateX(10px); }\n        }\n      ",n.textContent+="\n        /* Pricing Modal Styles */\n        .tm-pricing-modal {\n          max-width: 900px !important;\n        }\n        \n        .tm-price-modal-container {\n          width: 100%;\n          font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n        }\n        \n        .tm-price-modal-header {\n          text-align: center;\n          padding: 0 15px 15px;\n          position: relative;\n        }\n        \n        .tm-price-modal-header h2 {\n          margin: 0 0 10px;\n          font-size: 24px;\n          font-weight: 700;\n        }\n        \n        .tm-price-modal-header p {\n          margin: 0;\n          color: #6c757d;\n        }\n        \n        .tm-price-modal-toggle {\n          display: flex;\n          justify-content: center;\n          background-color: #f8f9fa;\n          border-radius: 30px;\n          padding: 5px;\n          margin: 15px auto;\n          max-width: 300px;\n        }\n        \n        .tm-price-modal-toggle button {\n          flex: 1;\n          border: none;\n          padding: 8px 16px;\n          border-radius: 30px;\n          background: transparent;\n          cursor: pointer;\n          position: relative;\n          font-weight: 500;\n          transition: all 0.2s;\n          color: #171717;\n        }\n        \n        .tm-price-modal-toggle button.active {\n          background-color: #fff;\n          box-shadow: 0 2px 10px rgba(0,0,0,0.1);\n        }\n        \n        .tm-price-modal-save {\n          position: absolute;\n          top: -12px;\n          right: -10px;\n          background-color: #28a745;\n          color: white;\n          font-size: 10px;\n          padding: 2px 6px;\n          border-radius: 10px;\n          font-weight: bold;\n        }\n        \n        .tm-price-modal-plans {\n          display: flex;\n          flex-wrap: wrap;\n          gap: 20px;\n          justify-content: center;\n          margin: 20px 0;\n        }\n        \n        .tm-price-modal-plan {\n          flex: 1;\n          min-width: 220px;\n          max-width: 280px;\n          background-color: #fff;\n          border-radius: 10px;\n          box-shadow: 0 5px 20px rgba(0,0,0,0.1);\n          padding: 20px;\n          position: relative;\n          transition: transform 0.3s;\n        }\n        \n        .tm-price-modal-plan:hover {\n          transform: translateY(-5px);\n        }\n        \n        .tm-price-modal-plan.recommended {\n          transform: scale(1.05);\n          border: 2px solid #007bff;\n        }\n        \n        .tm-price-modal-plan.recommended:hover {\n          transform: scale(1.05) translateY(-5px);\n        }\n        \n        .tm-price-modal-recommended {\n          position: absolute;\n          top: -12px;\n          left: 50%;\n          transform: translateX(-50%);\n          background-color: #007bff;\n          color: white;\n          padding: 4px 12px;\n          border-radius: 20px;\n          font-size: 12px;\n          font-weight: bold;\n        }\n        \n        .tm-price-modal-tag {\n          position: absolute;\n          top: 20px;\n          right: -8px;\n          padding: 4px 12px;\n          color: white;\n          font-size: 12px;\n          font-weight: bold;\n          border-radius: 4px 0 0 4px;\n          box-shadow: 0 2px 5px rgba(0,0,0,0.2);\n        }\n        \n        .tm-price-modal-tag:after {\n          content: '';\n          position: absolute;\n          right: 0;\n          bottom: -8px;\n          border-top: 8px solid;\n          border-right: 8px solid transparent;\n          filter: brightness(70%);\n        }\n        \n        .tm-price-modal-plan h3 {\n          text-align: center;\n          margin: 0 0 15px;\n          font-size: 20px;\n          font-weight: 700;\n        }\n        \n        .tm-price-modal-price {\n          text-align: center;\n          margin-bottom: 20px;\n          position: relative;\n          padding: 10px 0;\n        }\n        \n        .tm-price-modal-original {\n          color: #dc3545;\n          text-decoration: line-through;\n          font-size: 14px;\n          opacity: 0.7;\n        }\n        \n        .tm-price-modal-discount {\n          position: absolute;\n          top: 0;\n          right: 30px;\n          background-color: #28a745;\n          color: white;\n          padding: 2px 6px;\n          border-radius: 10px;\n          font-size: 12px;\n          font-weight: bold;\n        }\n        \n        .tm-price-modal-current {\n          font-size: 28px;\n          font-weight: 700;\n          color: #333;\n        }\n        \n        .tm-price-modal-period {\n          color: #6c757d;\n          font-size: 14px;\n        }\n        \n        .tm-price-modal-features {\n          list-style: none;\n          padding: 0;\n          margin: 0 0 20px;\n        }\n        \n        .tm-price-modal-features li {\n          display: flex;\n          align-items: center;\n          margin-bottom: 10px;\n          color: #333;\n        }\n        \n        .tm-price-modal-features svg {\n          color: #28a745;\n          margin-right: 10px;\n          flex-shrink: 0;\n        }\n        \n        .tm-price-modal-select {\n          width: 100%;\n          padding: 10px 16px;\n          border: none;\n          border-radius: 6px;\n          background-color: #007bff;\n          color: white;\n          font-weight: 600;\n          cursor: pointer;\n          display: flex;\n          align-items: center;\n          justify-content: center;\n          gap: 8px;\n          transition: background-color 0.2s;\n        }\n        \n        .tm-price-modal-select:hover {\n          background-color: #0069d9;\n        }\n        \n        .tm-price-modal-guarantee {\n          display: flex;\n          align-items: center;\n          max-width: 500px;\n          margin: 20px auto;\n          padding: 15px;\n          background-color: #f8f9fa;\n          border-radius: 10px;\n        }\n        \n        .tm-price-modal-guarantee-badge {\n          background-color: #28a745;\n          color: white;\n          width: 40px;\n          height: 40px;\n          border-radius: 50%;\n          display: flex;\n          align-items: center;\n          justify-content: center;\n          font-size: 16px;\n          font-weight: bold;\n          margin-right: 15px;\n          flex-shrink: 0;\n        }\n        \n        .tm-price-modal-guarantee-text h4 {\n          margin: 0 0 5px;\n          font-size: 16px;\n          font-weight: 600;\n        }\n        \n        .tm-price-modal-guarantee-text p {\n          margin: 0;\n          color: #6c757d;\n          font-size: 14px;\n        }\n        \n        @media (max-width: 768px) {\n          .tm-price-modal-plans {\n            flex-direction: column;\n            align-items: center;\n          }\n          \n          .tm-price-modal-plan {\n            width: 100%;\n            max-width: 320px;\n          }\n          \n          .tm-price-modal-plan.recommended {\n            order: -1;\n          }\n        }\n      ",n.textContent+="\n        /* Tag Styles */\n        .tm-tag {\n          display: inline-block;\n          padding: 2px 6px;\n          margin: 0 5px;\n          border-radius: 3px;\n          font-size: 12px;\n          font-weight: bold;\n          text-transform: uppercase;\n          letter-spacing: 0.5px;\n          vertical-align: middle;\n          white-space: nowrap;\n          line-height: 1.4;\n          user-select: none;\n          box-shadow: 0 1px 2px rgba(0,0,0,0.1);\n        }\n\n        /* Some predefined tag styles */\n        .tm-tag-pro {\n          background-color: #ff6b6b;\n          color: white;\n        }\n\n        .tm-tag-new {\n          background-color: #4ecdc4;\n          color: white;\n        }\n\n        .tm-tag-upcoming {\n          background-color: #a66efa;\n          color: white;\n        }\n\n        .tm-tag-beta {\n          background-color: #f39c12;\n          color: white;\n        }\n\n        .tm-tag-hot {\n          background-color: #e74c3c;\n          color: white;\n        }\n\n        .tm-tag-sale {\n          background-color: #3498db;\n          color: white;\n        }\n\n        .tm-tag-free {\n          background-color: #2ecc71;\n          color: white;\n        }\n      ",document.head.appendChild(n)}fire(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new Promise((t=>{this.currentModal&&this._close();const e=this._mergeOptions(this.options,n),o=this._createModal(e);document.body.appendChild(o.backdrop),this.currentModal=o,this._applyAnimation(o.modal,e.animation,"in"),e.isPricingModal?this._setupPricingEvents(o.modal,e,t):this._setupEvents(o,e,t),e.timeout&&"number"==typeof e.timeout&&this._setupTimer(o,e.timeout,t)}))}_createModal(n){const t=document.createElement("div");t.className=`tm-backdrop ${n.classes.backdrop||""}`,n.backdrop&&(t.style.backgroundColor=n.backdrop);const e=document.createElement("div");e.className=`tm-modal ${n.classes.modal||""} ${n.darkMode?"tm-dark-mode":""}`;const o=a[n.size]||n.size;e.style.width=o;const i=s[n.position]||s.center;for(const n in i)e.style[n]=i[n];return e.innerHTML=this._getModalContent(n),t.appendChild(e),{backdrop:t,modal:e}}_getModalContent(n){let t="";return n.progress&&(t+=`<div class="tm-progress ${n.classes.progress||""}"></div>`),n.closeButton&&(t+=`<button class="tm-close-button ${n.classes.closeButton||""}">&times;</button>`),this.isLoading?(t+=`\n          <div class="tm-loading ${n.classes.loading||""}">\n            ${i.loading}\n            <div class="tm-loading-text ${n.classes.loadingText||""}">${"string"==typeof n.loadingText?n.loadingText:"Please wait..."}</div>\n          </div>\n        `,t):(n.icon&&(t+=`\n          <div class="tm-icon-container ${n.classes.icon||""}">\n            <div style="color: ${n.iconColor}">\n              ${this._getIcon(n.icon)}\n            </div>\n          </div>\n        `),(n.title||n.content)&&(t+=`<div class="tm-content ${n.classes.content||""}">`,n.title&&(t+=`<div class="tm-title ${n.classes.contentTitle||""}">${n.title}</div>`),n.content&&(t+=`<div class="tm-message ${n.classes.contentText||""}">${n.content}</div>`),t+="</div>"),(n.ok||n.cancel)&&(t+=`<div class="tm-buttons ${n.classes.buttons||""}">`,n.cancel&&(t+=`\n            <button class="tm-button tm-cancel-button ${n.classes.cancel||""}" \n                    style="color: ${"transparent"===n.cancelColor?"#333":"#fff"}; background-color: ${n.cancelColor};">\n              ${n.cancel}\n            </button>\n          `),n.ok&&(t+=`\n            <button class="tm-button tm-ok-button ${n.classes.ok||""}" \n                    style="background-color: ${n.okColor}">\n              ${n.ok}\n            </button>\n          `),t+="</div>"),t)}_getIcon(n){return i[n]?i[n]:n.trim().startsWith("<svg")?n:n.match(/\.(jpeg|jpg|gif|png|svg)$/)||n.startsWith("data:image")?`<img src="${n}" alt="Icon" style="max-width: 80px; max-height: 80px;">`:i.info}_setupEvents(n,t,e){if(t.closeButton){const t=n.modal.querySelector(".tm-close-button");t&&t.addEventListener("click",(()=>{this._close(),e({close:!0})}))}if(t.backdropClose&&t.backdrop&&n.backdrop.addEventListener("click",(t=>{t.target===n.backdrop&&(this._close(),e({close:!0}))})),t.bodyClose&&n.modal.addEventListener("click",(()=>{this._close(),e({close:!0})})),t.escClose){const escHandler=n=>{"Escape"===n.key&&(this._close(),e({close:!0}),document.removeEventListener("keydown",escHandler))};document.addEventListener("keydown",escHandler)}if(t.enterOk){const enterHandler=n=>{"Enter"===n.key&&(this._close(),e({ok:!0}),document.removeEventListener("keydown",enterHandler))};document.addEventListener("keydown",enterHandler)}const o=n.modal.querySelector(".tm-ok-button");o&&o.addEventListener("click",(()=>{this._close(),e({ok:!0})}));const i=n.modal.querySelector(".tm-cancel-button");i&&i.addEventListener("click",(()=>{this._close(),e({cancel:!0})}))}_setupPricingEvents(n,t,e){if(t.closeButton){const t=n.querySelector(".tm-close-button");t&&t.addEventListener("click",(()=>{this._close(),e({close:!0})}))}const o=n.querySelectorAll(".tm-price-modal-toggle button"),updatePrices=e=>{t.plans&&Array.isArray(t.plans)&&t.plans.forEach((t=>{const o=t.prices?.[e];if(!o)return;const i=n.querySelector(`.tm-price-modal-plan[data-plan="${t.name}"]`);if(!i)return;const r=i.querySelector(".tm-price-modal-original"),a=i.querySelector(".tm-price-modal-discount"),s=i.querySelector(".tm-price-modal-current"),l=i.querySelector(".tm-price-modal-period"),c=o.original&&o.current&&o.original!==o.current?Math.round(100*(1-o.current/o.original)):0;r&&(c>0?(r.textContent=`$${o.original.toFixed(2)}`,r.style.display="block"):r.style.display="none"),a&&(c>0?(a.textContent=`-${c}%`,a.style.display="inline-block"):a.style.display="none"),s&&o.current&&(s.textContent=`$${o.current.toFixed(2)}`),l&&o.period&&(l.textContent=o.period)}))};o.forEach((n=>{n.addEventListener("click",(t=>{t.preventDefault(),o.forEach((n=>n.classList.remove("active"))),n.classList.add("active");const e=n.getAttribute("data-toggle");updatePrices(e)}))}));n.querySelectorAll(".tm-price-modal-select").forEach((o=>{o.addEventListener("click",(i=>{i.preventDefault();const r=o.getAttribute("data-plan"),a=o.getAttribute("data-url"),s=n.querySelector(".tm-price-modal-toggle button.active"),l=s?s.getAttribute("data-toggle"):null;a&&"#"!==a&&(window.location.href=a);const c=t.plans.find((n=>n.name===r));c&&c.button&&c.button.callback&&"function"==typeof c.button.callback&&c.button.callback({plan:c,toggle:l,prices:l?c.prices[l]:null}),this._close(),e({plan:r,selectedToggle:l})}))}));const i=n.querySelector(".tm-price-modal-toggle button.active");if(i){const n=i.getAttribute("data-toggle");updatePrices(n)}}_setupTimer(n,t,e){this.timer=setTimeout((()=>{this._close(),e({timeout:!0})}),t);const o=n.modal.querySelector(".tm-progress");o&&(o.style.transition=`transform ${t}ms linear`,requestAnimationFrame((()=>{requestAnimationFrame((()=>{o.style.transform="scaleX(1)"}))})))}_applyAnimation(n,t,e){if(!t)return;const o=r[t]||r.tilt;n.classList.add(o[e]),n.addEventListener("animationend",(()=>{n.classList.remove(o[e])}),{once:!0})}_close(){if(!this.currentModal)return;const{backdrop:n,modal:t}=this.currentModal;this.timer&&(clearTimeout(this.timer),this.timer=null),this.progressTimer&&(clearTimeout(this.progressTimer),this.progressTimer=null);const e=this.options.animation;e?(this._applyAnimation(t,e,"out"),t.addEventListener("animationend",(()=>{document.body.removeChild(n)}),{once:!0})):document.body.removeChild(n),this.currentModal=null,this.isLoading=!1}price(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=this._mergeOptions({title:"🚀 Hello its a pricing modal",toggles:{options:["Monthly","Yearly","Lifetime"],active:"Yearly",savings:{Yearly:"Save 20%",Lifetime:"Save 80%"}},plans:[{name:"Basic",prices:{Monthly:{original:12.99,current:12.99,period:"/month"},Yearly:{original:155.88,current:129.9,period:"/year"},Lifetime:{original:155.88,current:30.49,period:"/lifetime"}},features:["All Basic features","WooCommerce packages","All Upcoming Feature packages"],button:{text:"Upgrade Now",url:"#",callback:null},tag:null}],guarantee:{days:14,title:"14-Day Money-Back Guarantee",text:"Try it risk-free."},recommended:"Pro",closeButton:!0,size:"xl",classes:{modal:"",toggle:"",plans:"",plan:"",guarantee:""}},n),e=this._generatePricingModalContent(t);return this.fire({content:e,icon:!1,ok:!1,cancel:!1,backdrop:"rgba(0, 0, 0, 0.7)",animation:"fadeIn",size:t.size,closeButton:t.closeButton,classes:{modal:`tm-pricing-modal ${t.classes.modal||""}`,content:"tm-pricing-content"},isPricingModal:!0,plans:t.plans,toggles:t.toggles})}_generatePricingModalContent(n){let t=`\n        <div class="tm-price-modal-container">\n          <div class="tm-price-modal-header">\n            <h2>${n.title}</h2>\n            ${n.subtitle?`<p>${n.subtitle}</p>`:""}\n          </div>\n      `;return n.toggles&&n.toggles.options.length>1&&(t+=`<div class="tm-price-modal-toggle ${n.classes.toggle||""}">`,n.toggles.options.forEach((e=>{const o=e===n.toggles.active,i=n.toggles.savings?.[e]||"";t+=`\n            <button class="${o?"active":""}" data-toggle="${e}">\n              ${e}${i?`<span class="tm-price-modal-save">${i}</span>`:""}\n            </button>\n          `})),t+="</div>"),t+=`<div class="tm-price-modal-plans ${n.classes.plans||""}">`,n.plans.forEach((e=>{const o=e.name===n.recommended,i=e.prices[n.toggles.active]||{},r=i.original!==i.current?Math.round(100*(1-i.current/i.original)):0;t+=`\n          <div class="tm-price-modal-plan ${n.classes.plan||""} ${o?"recommended":""}" data-plan="${e.name}">\n            ${o?'<div class="tm-price-modal-recommended">MOST POPULAR</div>':""}\n            ${e.tag?this._generateTag(e.tag):""}\n            <h3>${e.name}</h3>\n            <div class="tm-price-modal-price">\n              ${i.original!==i.current?`<div class="tm-price-modal-original">$${i.original.toFixed(2)}</div>`:""}\n              ${r>0?`<div class="tm-price-modal-discount">-${r}%</div>`:""}\n              <div class="tm-price-modal-current">$${i.current.toFixed(2)}</div>\n              <div class="tm-price-modal-period">${i.period}</div>\n            </div>\n            <ul class="tm-price-modal-features">\n              ${e.features.map((n=>`\n                <li>\n                  <svg class="check-icon" viewBox="0 0 512 512" width="1em" height="1em">\n                    <path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path>\n                  </svg>\n                  ${n}\n                </li>\n              `)).join("")}\n            </ul>\n            <button class="tm-price-modal-select" data-plan="${e.name}" ${e.button.url?`data-url="${e.button.url}"`:""}>\n              ${e.button.text} \n              <svg class="arrow-icon" viewBox="0 0 448 512" width="1em" height="1em">\n                <path d="M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z"></path>\n              </svg>\n            </button>\n          </div>\n        `})),t+="</div>",n.guarantee&&(t+=`\n          <div class="tm-price-modal-guarantee ${n.classes.guarantee||""}">\n            <div class="tm-price-modal-guarantee-badge">${n.guarantee.days}</div>\n            <div class="tm-price-modal-guarantee-text">\n              <h4>${n.guarantee.title}</h4>\n              <p>${n.guarantee.text}</p>\n            </div>\n          </div>\n        `),t+="</div>",t}_generateTag(n){let t,e,o;if("string"==typeof n)switch(t=n.toLowerCase(),e=n.toUpperCase(),t){case"pro":o="#ff6b6b";case"new":o="#4ecdc4";case"upcoming":o="#a66efa";case"beta":o="#f39c12";case"hot":o="#e74c3c";case"sale":o="#3498db";case"free":o="#2ecc71";default:o="#6c757d"}else t=n.type||"custom",e=n.text||"CUSTOM",o=n.color||"#6c757d";return`\n        <div class="tm-price-modal-tag tm-tag-${t}" style="background-color: ${o}">\n          ${e}\n        </div>\n      `}tag(n){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",o={},i={};return"object"==typeof n?(o=n,i=t||{}):(o={type:n||"custom",text:t||n.toUpperCase(),color:""},"object"==typeof e?(i=e,o.color=i.color||this._getDefaultTagColor(o.type)):(o.color=e||this._getDefaultTagColor(o.type),i={})),i.selector||i.target?this._renderTag(o,i):o}_renderTag(n){const t={target:null,prepend:!1,position:"after",selector:null,textColor:"#fff",borderRadius:"3px",padding:"2px 6px",fontSize:"12px",fontWeight:"bold",margin:"0 5px",display:"inline-block",className:"",style:{},...arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}},e=document.createElement("span");e.className=`tm-tag tm-tag-${n.type.toLowerCase()} ${t.className}`,e.textContent=n.text;const o={backgroundColor:n.color,color:t.textColor,borderRadius:t.borderRadius,padding:t.padding,fontSize:t.fontSize,fontWeight:t.fontWeight,margin:t.margin,display:t.display,...t.style};if(Object.keys(o).forEach((n=>{o[n]&&(e.style[n]=o[n])})),t.selector){const n=document.querySelector(t.selector);n&&("before"===t.position?n.parentNode.insertBefore(e,n):"after"===t.position?n.nextSibling?n.parentNode.insertBefore(e,n.nextSibling):n.parentNode.appendChild(e):"prepend"===t.position?n.insertBefore(e,n.firstChild):n.appendChild(e))}else t.target&&t.target instanceof HTMLElement&&(t.prepend?t.target.insertBefore(e,t.target.firstChild):t.target.appendChild(e));return e}_getDefaultTagColor(n){switch(n.toLowerCase()){case"pro":return"#ff6b6b";case"new":return"#4ecdc4";case"upcoming":return"#a66efa";case"beta":return"#f39c12";case"hot":return"#e74c3c";case"sale":return"#3498db";case"free":return"#2ecc71";default:return"#6c757d"}}loading(){let n=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.isLoading=!1!==n&&null!==n&&0!==n;let t="Please wait...";return"string"==typeof n&&(t=n),this.isLoading?this.fire({title:!1,content:!1,icon:!1,ok:!1,cancel:!1,closeButton:!1,loadingText:t}):(this.currentModal&&this._close(),this)}success(){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4e3;const t={title:arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",icon:"success",iconColor:"#28a745",ok:!1,cancel:!1,progress:!0};return"number"==typeof n||!1===n?t.timeout=n:"object"==typeof n&&Object.assign(t,n),this.fire(t)}error(){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const t={title:arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",icon:"error",iconColor:"#dc3545",ok:"OK",okColor:"#dc3545",cancel:!1};return"object"==typeof n?Object.assign(t,n):t.content=n,this.fire(t)}warn(){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const t={title:arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",icon:"warning",iconColor:"#ffc107",ok:"OK",okColor:"#ffc107",cancel:!1};return"object"==typeof n?Object.assign(t,n):t.content=n,this.fire(t)}info(){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const t={title:arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",icon:"info",iconColor:"#17a2b8",ok:"OK",okColor:"#17a2b8",cancel:!1};return"object"==typeof n?Object.assign(t,n):t.content=n,this.fire(t)}ask(){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const t={title:arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",icon:"question",iconColor:"#6c757d",ok:"Yes",okColor:"#28a745",cancel:"No"};return"object"==typeof n?Object.assign(t,n):t.content=n,this.fire(t)}notify(){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const t={title:arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",icon:"info",iconColor:"#17a2b8",position:"top-right",ok:!1,cancel:!1,timeout:5e3,progress:!0};return"object"==typeof n?Object.assign(t,n):t.content=n,this.fire(t)}mixin(){return new ToastMaster(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{})}}const l=new ToastMaster;["fire","success","error","warn","info","ask","notify","loading","mixin","price","tag"].forEach((n=>{ToastMaster[n]=function(){return l[n](...arguments)}})),"undefined"!=typeof window&&(window.ToastMaster=ToastMaster,window.Toast=ToastMaster),module.exports&&(module.exports=ToastMaster),void 0===(e=function(){return ToastMaster}.call(n,t,n,module))||(module.exports=e)}()}},t={};(function __webpack_require__(e){var o=t[e];if(void 0!==o)return o.exports;var module=t[e]={exports:{}};return n[e](module,module.exports,__webpack_require__),module.exports})(479)})();
  • askany/trunk/dist/css/frontend.min.css

    r3393344 r3411709  
    1 .askany-chat-widget{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:14px;line-height:1.4;--primary-color:#4a6cf7;--primary-hover:#3c57d0;--text-color:#333;--light-text:#666;--bg-color:#fff;--light-bg:#f5f7fb;--border-color:#e3e8ef;--bubble-user:var(--primary-color);--bubble-ai:#f0f2f5;--bubble-user-text:#fff;--bubble-ai-text:#333;--shadow-soft:0 5px 20px rgba(0,0,0,.08);--shadow-strong:0 8px 30px rgba(0,0,0,.12);--radius-sm:8px;--radius-lg:16px;--radius-round:50px;--anim-speed:0.3s;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;position:fixed;transition:all .4s cubic-bezier(.4,0,.2,1);z-index:99999}.askany-chat-widget.bottom-right{bottom:20px;right:20px}.askany-chat-widget.bottom-left{bottom:20px;left:20px}.askany-chat-widget.top-right{right:20px;top:20px}.askany-chat-widget.top-left{left:20px;top:20px}.askany-chat-widget.inline{bottom:auto;left:auto;max-width:100%;position:relative;right:auto;top:auto;width:100%}.askany-chat-toggle{align-items:center;backdrop-filter:blur(10px);background:linear-gradient(135deg,#667eea,#764ba2);border:2px solid hsla(0,0%,100%,.2);border-radius:50%;box-shadow:0 8px 32px rgba(102,126,234,.4),0 4px 12px rgba(0,0,0,.1);cursor:pointer;display:flex;height:60px;justify-content:center;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1);width:60px}.askany-chat-toggle:before{background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.3),transparent);content:"";height:100%;left:-100%;position:absolute;top:0;transition:left .6s ease;width:100%}.askany-chat-toggle:hover{background:linear-gradient(135deg,#5a6fd8,#6b42a0);box-shadow:0 12px 40px rgba(102,126,234,.5),0 6px 20px rgba(0,0,0,.15);transform:translateY(-3px) scale(1.05)}.askany-chat-toggle:hover:before{left:100%}.toggle-icon-container{align-items:center;display:flex;justify-content:center;position:relative}.askany-chat-icon{color:#fff;transition:all .3s ease}.askany-chat-toggle:hover .askany-chat-icon{transform:scale(1.1) rotate(5deg)}.notification-badge{animation:askany-pulse 2s infinite;background:linear-gradient(135deg,#ff6b6b,#ff5252);box-shadow:0 4px 12px hsla(0,100%,71%,.4);right:-8px;top:-8px}@keyframes askany-pulse{0%,to{box-shadow:0 4px 12px hsla(0,100%,71%,.4);transform:scale(1)}50%{box-shadow:0 6px 20px hsla(0,100%,71%,.6);transform:scale(1.1)}}.askany-chat-container{animation:askany-slide-up .4s cubic-bezier(.4,0,.2,1);backdrop-filter:blur(20px);background:linear-gradient(135deg,hsla(0,0%,100%,.95),hsla(0,0%,100%,.9));border:1px solid hsla(0,0%,100%,.3);border-radius:20px;box-shadow:0 20px 60px rgba(0,0,0,.15),0 8px 32px rgba(0,0,0,.1);display:flex;flex-direction:column;height:600px;overflow:hidden;position:relative;width:380px}.askany-chat-container:before{animation:askany-gradient-flow 3s ease infinite;background:linear-gradient(90deg,#667eea,#764ba2,#667eea);background-size:200% 100%;content:"";height:2px;left:0;position:absolute;right:0;top:0}@keyframes askany-gradient-flow{0%,to{background-position:0 50%}50%{background-position:100% 50%}}@keyframes askany-slide-up{0%{opacity:0;transform:translateY(30px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.askany-chat-widget.inline .askany-chat-container{border-radius:16px;height:700px;margin:0 auto;max-width:800px;width:100%}.askany-chat-header{align-items:center;background:linear-gradient(135deg,#d1edff,hsla(0,0%,100%,.7));border-bottom:1px solid rgba(0,0,0,.08);display:flex;justify-content:space-between;padding:20px}.askany-chat-header:after{bottom:0;content:"";height:1px;left:20px;position:absolute;right:20px}.header-left{gap:12px}.assistant-avatar,.header-left{align-items:center;display:flex}.assistant-avatar{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:50%;box-shadow:0 4px 12px rgba(102,126,234,.3);color:#fff;height:40px;justify-content:center;overflow:hidden;transition:all .3s ease;width:40px}.assistant-avatar:hover{box-shadow:0 6px 20px rgba(102,126,234,.4);transform:scale(1.05)}.assistant-avatar img{height:100%;object-fit:cover;width:100%}.header-info h3{background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;color:#2d3748;font-size:16px;font-weight:700;margin:0;-webkit-text-fill-color:transparent;background-clip:text}.status-indicator{align-items:center;color:#48bb78;display:flex;font-size:12px;font-weight:600;gap:4px}.status-indicator:before{animation:askany-status-pulse 2s infinite;background:#48bb78;border-radius:50%;content:"";height:8px;width:8px}@keyframes askany-status-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.2)}}.header-actions{display:flex;gap:8px}.action-btn{align-items:center;backdrop-filter:blur(10px);background:hsla(0,0%,100%,.8);border:1px solid rgba(0,0,0,.1);border-radius:8px;color:#718096;cursor:pointer;display:flex;justify-content:center;padding:8px;transition:all .3s cubic-bezier(.4,0,.2,1)}.action-btn:hover{background:hsla(0,0%,100%,.9);box-shadow:0 4px 12px rgba(0,0,0,.1);color:#667eea;transform:translateY(-1px)}.askany-chat-close:hover{background:linear-gradient(135deg,#fed7d7,#feb2b2);color:#e53e3e}.askany-home-content{background:linear-gradient(180deg,rgba(247,250,252,.8),hsla(0,0%,100%,.9));flex:1;padding:24px}.askany-home-content::-webkit-scrollbar{width:6px}.askany-home-content::-webkit-scrollbar-track{background:rgba(0,0,0,.05);border-radius:3px}.askany-home-content::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:3px}.home-logo-section{margin-bottom:24px}.home-logo{border-radius:12px;box-shadow:0 8px 20px rgba(0,0,0,.1)}.home-agents-section{margin-bottom:20px}.agents-avatars{gap:-8px}.agent-avatar{border:3px solid hsla(0,0%,100%,.9);box-shadow:0 4px 12px rgba(0,0,0,.1);margin-left:-8px;transition:all .3s ease}.agent-avatar:first-child{margin-left:0}.agent-avatar:hover{box-shadow:0 8px 20px rgba(0,0,0,.2);transform:translateY(-2px) scale(1.05);z-index:10}.home-welcome-section{margin-bottom:32px}.welcome-title{background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;background-clip:text;font-size:28px;font-weight:800}.wave-emoji{animation:askany-wave 2s infinite}@keyframes askany-wave{0%,50%,to{transform:rotate(0deg)}25%{transform:rotate(20deg)}}.welcome-subtitle{color:#718096;font-weight:500}.home-actions-section{space-y:12px}.home-action-item{margin-bottom:12px}.action-link{backdrop-filter:blur(10px);background:hsla(0,0%,100%,.7);border:1px solid hsla(0,0%,100%,.3);border-radius:12px;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.action-link:before{background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.6),transparent);content:"";height:100%;left:-100%;position:absolute;top:0;transition:left .5s ease;width:100%}.action-link:hover{background:hsla(0,0%,100%,.9);border-color:rgba(102,126,234,.3);box-shadow:0 8px 20px rgba(0,0,0,.1);transform:translateY(-2px)}.action-link:hover:before{left:100%}.action-icon{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:10px;box-shadow:0 4px 12px rgba(102,126,234,.3);transition:all .3s ease}.action-link:hover .action-icon{box-shadow:0 6px 20px rgba(102,126,234,.4);transform:scale(1.05) rotate(5deg)}.action-title{color:#2d3748;font-size:15px;font-weight:700}.action-subtitle{color:#718096;font-size:13px;font-weight:500}.home-faq-section{margin-top:24px}.faq-title{color:#2d3748;font-size:18px;font-weight:700;margin-bottom:16px;text-align:center}.faq-list{space-y:8px}.faq-item{margin-bottom:8px}.faq-question{backdrop-filter:blur(10px);background:hsla(0,0%,100%,.7);border:1px solid hsla(0,0%,100%,.3);border-radius:10px;color:#2d3748;font-weight:600;transition:all .3s ease}.faq-question:hover{background:hsla(0,0%,100%,.9);box-shadow:0 4px 12px rgba(0,0,0,.08);color:#393939;transform:translateY(-1px)}.faq-question svg{color:#667eea;transition:transform .3s ease}.faq-question.active svg{transform:rotate(180deg)}.faq-answer{backdrop-filter:blur(10px);background:hsla(0,0%,100%,.8);border:1px solid hsla(0,0%,100%,.4);border-radius:10px;color:#4a5568;font-size:14px;margin-top:4px;padding:12px 16px}.askany-main-tabs{background:linear-gradient(135deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.7));border-top:1px solid rgba(0,0,0,.08)}.askany-main-tabs:before{background:linear-gradient(90deg,transparent,rgba(102,126,234,.3),transparent);content:"";height:1px;left:20px;position:absolute;right:20px;top:0}.main-tab-btn{align-items:center;background:none;border:none;color:#718096;cursor:pointer;display:flex;flex:1;flex-direction:column;font-size:12px;font-weight:600;gap:4px;padding:8px 12px;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.main-tab-btn:before{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:0 0 3px 3px;content:"";height:3px;left:50%;position:absolute;top:0;transform:translateX(-50%);transition:width .3s ease;width:0}.main-tab-btn:hover{background:rgba(102,126,234,.05);color:#667eea}.main-tab-btn.active{background:rgba(102,126,234,.1);color:#667eea}.main-tab-btn.active:before{width:60%}.main-tab-btn svg{transition:all .3s ease}.main-tab-btn.active svg,.main-tab-btn:hover svg{transform:scale(1.1)}.askany-chat-messages{background:linear-gradient(180deg,rgba(247,250,252,.8),hsla(0,0%,100%,.9));flex:1;position:relative}.askany-chat-messages::-webkit-scrollbar-track{background:rgba(0,0,0,.05)}.askany-chat-messages::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea,#764ba2)}.askany-message{animation:askany-message-slide-in .4s cubic-bezier(.4,0,.2,1);display:flex;margin-bottom:16px}@keyframes askany-message-slide-in{0%{opacity:0;transform:translateY(15px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.askany-message.user{justify-content:flex-end}.askany-message.agent,.askany-message.assistant{justify-content:flex-start}.askany-message-bubble{backdrop-filter:blur(10px);border-radius:18px;box-shadow:0 4px 12px rgba(0,0,0,.1);max-width:80%;overflow:hidden;padding:12px 16px;position:relative;transition:all .3s ease}.askany-message-bubble:before{background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.3),transparent);content:"";height:100%;left:-100%;position:absolute;top:0;transition:left .6s ease;width:100%}.askany-message-bubble:hover:before{left:100%}.askany-message.user .askany-message-bubble{background:linear-gradient(135deg,#667eea,#764ba2);border-bottom-right-radius:6px;color:#fff}.askany-message.agent .askany-message-bubble,.askany-message.assistant .askany-message-bubble{background:hsla(0,0%,100%,.9);border:1px solid rgba(102,126,234,.2);border-bottom-left-radius:6px;color:#2d3748}.askany-message-content{font-weight:500;line-height:1.5;word-wrap:break-word}.askany-message-time{font-size:10px;font-weight:600;margin-top:4px;opacity:.7}.suggested-prompts{animation:askany-fade-in .4s ease;backdrop-filter:blur(10px);background:hsla(0,0%,100%,.7);border:1px solid hsla(0,0%,100%,.3);border-radius:12px;overflow:hidden}.prompt-header{align-items:center;background:linear-gradient(135deg,rgba(102,126,234,.1),rgba(118,75,162,.1));border-bottom:1px solid rgba(0,0,0,.05);display:flex;justify-content:space-between;padding:12px 16px}.prompt-label{color:#667eea;font-size:12px;font-weight:700;letter-spacing:.5px;text-transform:uppercase}.close-prompts-btn{background:none;border:none;border-radius:4px;color:#718096;cursor:pointer;padding:4px;transition:all .3s ease}.close-prompts-btn:hover{background:rgba(102,126,234,.1);color:#667eea;transform:scale(1.1)}.prompt-items{display:flex;flex-direction:column;gap:8px;padding:12px}.prompt-item{backdrop-filter:blur(10px);background:hsla(0,0%,100%,.8);border:1px solid hsla(0,0%,100%,.4);border-radius:10px;color:#4a5568;cursor:pointer;font-size:13px;font-weight:500;padding:10px 14px;text-align:left;transition:all .3s cubic-bezier(.4,0,.2,1)}.prompt-item:hover{background:hsla(0,0%,100%,.95);border-color:rgba(102,126,234,.3);box-shadow:0 4px 12px rgba(102,126,234,.15);color:#667eea;transform:translateY(-1px)}.askany-chat-messages{background:#fff;display:flex;flex-direction:column;gap:16px;height:400px;overflow-y:auto;padding:20px}.askany-chat-messages::-webkit-scrollbar{width:6px}.askany-chat-messages::-webkit-scrollbar-track{background:#f1f5f9;border-radius:3px}.askany-chat-messages::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px;transition:background .3s ease}.askany-chat-messages::-webkit-scrollbar-thumb:hover{background:#94a3b8}.chat-message{animation:slideIn .3s ease-out;margin-bottom:12px}.chat-message.assistant-message{justify-content:flex-start}.message-bubble{border-radius:18px;font-size:14px;line-height:1.5;max-width:75%;padding:12px 16px;word-wrap:break-word;box-shadow:0 2px 8px rgba(0,0,0,.06);position:relative}.chat-message.user-message .message-bubble{background:linear-gradient(135deg,#6366f1,#8b5cf6);border-bottom-right-radius:4px;color:#fff}.chat-message.assistant-message .message-bubble{background:#f8fafc;border:1px solid #e2e8f0;border-bottom-left-radius:4px;color:#334155}.askany-chat-input{background:linear-gradient(135deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.7));border-top:1px solid rgba(0,0,0,.08);padding:16px 20px 20px;position:relative}.input-container{align-items:flex-end;backdrop-filter:blur(10px);background:hsla(0,0%,100%,.9);border:2px solid rgba(102,126,234,.2);border-radius:10px;display:flex;gap:8px;margin-bottom:12px;padding:0;position:relative;transition:all .3s ease}.input-container:focus-within{border-color:rgba(102,126,234,.5);box-shadow:0 0 0 3px rgba(102,126,234,.1);transform:translateY(-1px)}.attachment-btn,.emoji-btn,.submit-btn{align-items:center;background:none;border:none;border-radius:8px;color:#718096;cursor:pointer;display:flex;justify-content:center;padding:8px;position:relative;top:-5px;transition:all .3s ease}.attachment-btn:hover,.emoji-btn:hover,.submit-btn:hover{background:rgba(102,126,234,.1);color:#667eea;transform:scale(1.1)}.send-btn{align-items:center;background-color:rgba(102,126,234,.1);border:none;border-radius:var(--radius-round);box-shadow:var(--shadow-soft);color:#718096;cursor:pointer;display:flex;height:40px;justify-content:center;transition:all .2s;width:40px}.send-btn:hover{background-color:rgba(86,116,248,.1);box-shadow:var(--shadow-strong);transform:scale(1.05)}.input-container input{background:transparent;border:none;color:#2d3748;flex:1;font-size:14px;font-weight:500;line-height:1.4;outline:none;padding:10px 12px}.input-container input::placeholder{color:#a0aec0;font-weight:500}.emoji-picker{animation:fade-in .2s forwards;background-color:#fff;border:1px solid var(--border-color);border-radius:var(--radius-sm);bottom:70px;box-shadow:var(--shadow-strong);display:none;opacity:0;padding:10px;position:absolute;right:20px;transform:translateY(10px);z-index:100}@keyframes fade-in{to{opacity:1;transform:translateY(0)}}.emoji-group{display:grid;gap:8px;grid-template-columns:repeat(4,1fr)}.emoji{align-items:center;border-radius:var(--radius-sm);cursor:pointer;display:flex;font-size:18px;height:30px;justify-content:center;transition:all .2s;width:30px}.emoji:hover{background-color:var(--light-bg);transform:scale(1.1)}.chat-footer{background-color:var(--bg-color);border-top:1px solid var(--border-color);padding:8px 15px}.powered-by{color:var(--light-text);display:block;font-size:11px;text-align:center}.typing-indicator{gap:4px;justify-content:center;padding:8px 16px}.typing-dot{animation:typing-dot-animation 1s infinite;background-color:var(--light-text);opacity:.6}.remote-typing-indicator{animation:slideIn .3s ease-out;margin-bottom:12px}.remote-typing-indicator .message-bubble{background:rgba(102,126,234,.1);border:1px solid rgba(102,126,234,.2);border-radius:18px;border-bottom-left-radius:4px;color:#667eea;font-style:italic;padding:8px 12px}.typing-text{font-size:13px;font-weight:500}.typing-dots{gap:3px}.typing-dots .typing-dot{animation:typing-dot-animation 1.2s infinite;background-color:#667eea}.typing-dots .typing-dot:first-child{animation-delay:0s}.typing-dots .typing-dot:nth-child(2){animation-delay:.2s}.typing-dots .typing-dot:nth-child(3){animation-delay:.4s}.search-indicator{align-items:center;background:linear-gradient(135deg,#e3f2fd,#f3e5f5);border:1px solid rgba(102,126,234,.2);border-radius:var(--radius-sm);display:flex;gap:8px;justify-content:center;padding:12px 16px}.search-icon{animation:search-spin 2s linear infinite;flex-shrink:0}.search-icon,.search-text{color:var(--primary-color)}.search-text{font-size:13px;font-weight:500;margin-right:4px}.search-dots{display:flex;gap:3px}.search-dots .typing-dot{background-color:var(--primary-color);height:6px;width:6px}@keyframes search-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@media (max-width:480px){.input-container{width:80%}.askany-chat-header h3,.send-btn{font-size:13px}.askany-chat-container{bottom:10px;height:522px;height:85vh;left:10px;margin:0 auto;max-height:600px;max-width:380px;right:10px;width:325px;width:95vw}.input-container{align-items:center;flex-wrap:nowrap;margin-bottom:8px;padding:8px;width:100%!important}.input-container input{flex:1;font-size:14px;min-width:0;padding:8px 10px}.attachment-btn,.emoji-btn,.send-btn,.submit-btn{flex-shrink:0;height:36px;margin:0 2px;padding:6px;width:36px}.askany-chat-input{padding:12px 15px 15px}.askany-chat-messages{height:calc(100% - 200px);min-height:250px}.suggested-prompts{margin-bottom:8px}.prompt-items{gap:6px;padding:8px}.prompt-item{font-size:12px;padding:8px 12px}.product-image{height:50px;width:50px}}.askany-chat-tabs{background-color:var(--bg-color);border-bottom:1px solid var(--border-color);position:relative;z-index:5}.askany-chat-tabs,.tab-btn{align-items:center;display:flex;justify-content:center}.tab-btn svg{flex-shrink:0;margin-right:5px}.tab-btn span{display:inline-block;line-height:1}.tab-btn.active{border-bottom-color:#3182ce;color:#3182ce}.tab-btn.active svg{stroke:#3182ce}.tab-btn:focus{outline:none}.askany-chat-tabs .tab-btn{align-items:center;background:none;border:none;color:var(--light-text);cursor:pointer;flex:1;font-size:14px;font-weight:500;justify-content:center;padding:12px 15px;position:relative;text-align:center;transition:all .2s ease}.askany-chat-tabs .tab-btn:hover{color:var(--primary-color)}.askany-chat-tabs .tab-btn.active{color:var(--primary-color);font-weight:600}.askany-chat-tabs .tab-btn.active:after{animation:tab-highlight .3s ease forwards;background-color:var(--primary-color);bottom:-1px;content:"";height:2px;left:0;position:absolute;width:100%}@keyframes tab-highlight{0%{opacity:.5;transform:scaleX(.5)}to{opacity:1;transform:scaleX(1)}}.askany-chat-tab-content{display:flex;flex:1;flex-direction:column;min-height:0;overflow:hidden}.askany-contact-form{background-color:var(--light-bg);flex:1;overflow-y:auto;padding:15px}.askany-contact-form form{max-width:100%!important}.askany-contact-form input[type=email],.askany-contact-form input[type=tel],.askany-contact-form input[type=text],.askany-contact-form textarea{background-color:var(--bg-color);border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-color);margin-bottom:12px;padding:10px;width:100%}.askany-contact-form textarea{min-height:120px;resize:vertical}.askany-contact-form input[type=submit]{background-color:var(--primary-color);border:none;border-radius:var(--radius-sm);color:#fff;cursor:pointer;font-weight:500;padding:10px 15px;transition:background-color .2s}.askany-contact-form input[type=submit]:hover{background-color:var(--primary-hover)}.askany-chat-widget.with-tabs .askany-chat-messages{height:80%}.askany-chat-widget.dark-mode{--text-color:#e4e6eb;--light-text:#b0b3b8;--bg-color:#242526;--light-bg:#3a3b3c;--border-color:#3e4042;--bubble-ai:#3a3b3c;--bubble-ai-text:#e4e6eb;--shadow-soft:0 2px 10px rgba(0,0,0,.3);--shadow-strong:0 5px 15px rgba(0,0,0,.4)}.askany-chat-widget.dark-mode .askany-chat-tabs{background-color:var(--bg-color)}.askany-chat-widget.dark-mode .askany-contact-form input[type=email],.askany-chat-widget.dark-mode .askany-contact-form input[type=tel],.askany-chat-widget.dark-mode .askany-contact-form input[type=text],.askany-chat-widget.dark-mode .askany-contact-form textarea{background-color:var(--light-bg);border-color:var(--border-color);color:var(--text-color)}.message-bubble.product-message{background-color:#fff;max-width:100%;overflow:hidden;padding:0}.message-bubble.product-message .product-item{background-color:transparent;border-radius:0;box-shadow:none;display:flex;padding:12px}.message-bubble.product-message .product-image{height:80px;margin-right:12px;width:80px}.message-bubble.product-message .product-details{flex:1;min-width:0}.message-bubble.product-message .product-title{font-size:14px;margin-bottom:4px}.message-bubble.product-message .product-description{color:#666;font-size:12px;margin-bottom:8px}.message-bubble.product-message .product-price{color:#e63946;font-weight:600;margin-bottom:8px}.message-bubble.product-message .product-actions{display:flex;gap:8px}.message-bubble.product-message .add-to-cart-button,.message-bubble.product-message .view-button{border-radius:4px;font-size:12px;font-weight:500;padding:6px 12px;text-align:center;text-decoration:none;transition:all .2s ease}.message-bubble.product-message .view-button{background-color:#f1f1f1;color:#333}.message-bubble.product-message .add-to-cart-button{background-color:#4caf50;color:#fff}.message-bubble.product-message .view-button:hover{background-color:#e5e5e5}.message-bubble.product-message .add-to-cart-button:hover{background-color:#43a047}.message-bubble.product-message .product-item.enhanced{background:#fff;border:1px solid #e0e0e0;border-radius:8px;flex-direction:column;margin-bottom:8px;padding:16px}.message-bubble.product-message .product-item.enhanced .product-image{align-self:flex-start;height:100px;margin-bottom:12px;margin-right:0;width:100px}.message-bubble.product-message .product-sku{color:#888;font-size:11px;margin-bottom:4px}.message-bubble.product-message .sale-badge{background:#f44;border-radius:3px;color:#fff;font-size:10px;margin-left:8px;padding:2px 6px}.message-bubble.product-message .product-stock{font-size:11px;font-weight:500;margin-bottom:4px}.message-bubble.product-message .product-stock.in-stock{color:#28a745}.message-bubble.product-message .product-stock.out-of-stock{color:#dc3545}.message-bubble.product-message .product-categories{color:#666;font-size:11px;margin-bottom:4px}.message-bubble.product-message .product-rating{color:orange;font-size:11px;margin-bottom:6px}@media (max-width:480px){.message-bubble.product-message .product-item{flex-direction:column}.message-bubble.product-message .product-image{height:120px;margin-bottom:12px;margin-right:0;width:100%}.message-bubble.product-message .product-details{padding:0}}button.submit-button.sf-form-submit{width:100%}.simple_form_content .text-fields{align-items:baseline;display:flex;flex-direction:column;justify-content:left;margin-top:5px;overflow:hidden;text-align:left}.askany-content-wrapper{display:flex;flex:1;flex-direction:column;position:relative}.askany-main-tabs{background:var(--light-bg);border-top:1px solid var(--border-color);display:flex;flex-shrink:0;padding:0;position:relative;z-index:10}.main-tab-btn svg{height:16px;width:16px}.askany-main-tab-content{display:none;flex:1;overflow:hidden}.askany-main-tab-content#home-tab,.askany-main-tab-content.active{display:flex;flex-direction:column}.askany-main-tab-content#home-tab:not(.active),.askany-main-tab-content#messages-tab{display:none}.askany-direct-chat-content{display:flex;flex:1;flex-direction:column;overflow:hidden}.askany-home-content{display:flex;flex-direction:column;gap:20px;height:100%;overflow-y:auto;padding:20px}.home-logo-section{margin-bottom:10px;text-align:center}.home-logo{height:auto;max-height:60px;max-width:120px}.home-agents-section{margin-bottom:10px;text-align:center}.agents-avatars{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.agent-avatar{border:2px solid var(--border-color);border-radius:50%;height:40px;overflow:hidden;transition:transform var(--anim-speed) ease;width:40px}.agent-avatar:hover{border-color:var(--primary-color);transform:scale(1.1)}.agent-avatar img{height:100%;object-fit:cover;width:100%}.home-welcome-section{margin-bottom:20px;text-align:center}.welcome-title{align-items:center;color:var(--text-color);display:flex;font-size:24px;font-weight:600;gap:8px;justify-content:center;margin:0 0 8px}.welcome-title .user-name{background:linear-gradient(135deg,var(--primary-color),var(--primary-hover));-webkit-background-clip:text;color:var(--primary-color);font-weight:700;-webkit-text-fill-color:transparent;background-clip:text}.wave-emoji{animation:wave 2s ease-in-out infinite;font-size:24px}@keyframes wave{0%,to{transform:rotate(0deg)}25%{transform:rotate(20deg)}75%{transform:rotate(-10deg)}}.welcome-subtitle{color:var(--light-text);font-size:16px;line-height:1.5;margin:0}.home-actions-section{display:flex;flex-direction:column;gap:12px}.home-action-item{border-radius:var(--radius-sm);overflow:hidden;transition:transform var(--anim-speed) ease}.home-action-item:hover{transform:translateY(-2px)}.action-link{align-items:center;background:var(--light-bg);border:1px solid var(--border-color);border-radius:var(--radius-sm);display:flex;gap:12px;padding:16px;transition:all var(--anim-speed) ease}.action-link,.action-link:hover{color:var(--text-color);text-decoration:none}.action-link:hover{background:var(--bg-color);border-color:var(--primary-color);box-shadow:var(--shadow-soft)}.action-icon{align-items:center;background:var(--primary-color);border-radius:var(--radius-sm);color:#fff;display:flex;flex-shrink:0;height:40px;justify-content:center;width:40px}.action-icon svg{height:20px;width:20px}.action-content{flex:1}.action-title{color:var(--text-color);font-size:14px;font-weight:600;margin-bottom:4px}.action-subtitle{color:var(--light-text);font-size:12px;line-height:1.4}.home-faq-section{margin-top:10px}.faq-title{color:var(--text-color);font-size:16px;font-weight:600;margin:0 0 12px}.faq-list{display:flex;flex-direction:column;gap:8px}.faq-item{border:1px solid var(--border-color);border-radius:var(--radius-sm);overflow:hidden;transition:border-color var(--anim-speed) ease}.faq-item:hover{border-color:var(--primary-color)}.faq-question{align-items:center;background:var(--light-bg);border:none;color:var(--text-color);cursor:pointer;display:flex;font-size:13px;font-weight:500;justify-content:space-between;padding:12px 16px;text-align:left;transition:all var(--anim-speed) ease;width:100%}.faq-question:hover{background:rgba(74,108,247,.05)}.faq-question svg{color:var(--light-text);height:16px;transition:transform var(--anim-speed) ease;width:16px}.faq-answer{background:var(--bg-color);border-top:1px solid var(--border-color);color:var(--text-color);font-size:13px;line-height:1.5;padding:16px}.faq-answer p{margin:0 0 8px}.faq-answer p:last-child{margin-bottom:0}@media (max-width:480px){.askany-home-content{gap:16px;padding:16px}.welcome-title{font-size:20px}.welcome-subtitle{font-size:14px}.action-link{padding:12px}.action-icon{height:36px;width:36px}.agents-avatars{gap:6px}.agent-avatar{height:36px;width:36px}}.askany-main-tab-content#messages-tab .askany-chat-tab-content{display:flex;flex:1;flex-direction:column;min-height:0;overflow:hidden}.askany-main-tab-content#messages-tab .askany-chat-messages,.askany-main-tab-content#messages-tab .askany-contact-form{flex:1;min-height:0;overflow-y:auto;padding:15px}.askany-direct-chat-content .askany-chat-tab-content{display:flex;flex:1;flex-direction:column;min-height:0;overflow:hidden}.askany-direct-chat-content .askany-chat-messages,.askany-direct-chat-content .askany-contact-form{flex:1;min-height:0;overflow-y:auto;padding:15px}.askany-direct-chat-content .askany-chat-tabs,.askany-main-tab-content#messages-tab .askany-chat-tabs{background-color:var(--bg-color);border-bottom:1px solid var(--border-color);display:flex;flex-shrink:0}.askany-direct-chat-content .suggested-prompts,.askany-main-tab-content#messages-tab .suggested-prompts{background-color:var(--bg-color);border-top:1px solid var(--border-color);bottom:144px;display:block;flex-shrink:0;position:relative}.askany-direct-chat-content .askany-chat-input,.askany-main-tab-content#messages-tab .askany-chat-input{background-color:var(--bg-color);border-top:1px solid var(--border-color);bottom:-15px;flex-shrink:0;padding:10px 15px;position:absolute;width:100%}.askany-main-tab-content#messages-tab,.askany-main-tab-content#messages-tab.active{display:flex;flex-direction:column;height:100%;overflow:hidden}.askany-direct-chat-content .askany-contact-form form,.askany-main-tab-content#messages-tab .askany-contact-form form{height:auto;max-width:100%}.askany-direct-chat-content .askany-contact-form input,.askany-direct-chat-content .askany-contact-form textarea,.askany-main-tab-content#messages-tab .askany-contact-form input,.askany-main-tab-content#messages-tab .askany-contact-form textarea{box-sizing:border-box;width:100%}@media (max-width:480px){.askany-direct-chat-content .askany-chat-messages,.askany-direct-chat-content .askany-contact-form,.askany-main-tab-content#messages-tab .askany-chat-messages,.askany-main-tab-content#messages-tab .askany-contact-form{padding:10px}}.askany-chat-container.minimized{height:auto!important;min-height:auto!important;transition:all .4s cubic-bezier(.4,0,.2,1)}.askany-chat-container.minimized .askany-chat-header{border-radius:20px 20px 20px 20px;cursor:pointer;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.askany-chat-container.minimized .askany-chat-header:hover{background:rgba(0,123,186,.03);box-shadow:0 2px 8px rgba(0,123,186,.08);transform:translateY(-1px)}.askany-chat-container.minimized .askany-chat-header:hover .assistant-avatar{background:linear-gradient(135deg,#667eea,#764ba2);transform:none}.askany-chat-container.minimized .askany-chat-header:hover .assistant-avatar img{filter:none;opacity:1}.askany-chat-container.minimized .askany-content-wrapper,.askany-chat-container.minimized .askany-main-tabs{display:none!important}.askany-content-wrapper{overflow:hidden}.askany-content-wrapper,.askany-main-tabs{transition:all .4s cubic-bezier(.4,0,.2,1)}.askany-chat-header{position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.minimize-btn{transition:all .3s ease}.minimize-btn:hover{background:rgba(0,123,186,.1);color:#007cba;transform:scale(1.1)}.askany-chat-widget .askany-chat-container.minimized{position:relative;transform:none}@media (max-width:480px){.askany-chat-container.minimized .askany-chat-header:after{display:none}.askany-chat-container.minimized .askany-chat-header:hover{transform:none}}.askany-stats-grid{display:grid;gap:20px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));margin-top:10px}.askany-stats-column{display:flex;flex-direction:column;gap:8px}.askany-stats-column p{background:hsla(0,0%,100%,.7);border:1px solid rgba(0,0,0,.05);border-radius:6px;font-size:13px;line-height:1.4;margin:0;padding:8px 12px;transition:all .2s ease}.askany-stats-column p:hover{background:hsla(0,0%,100%,.9);box-shadow:0 2px 8px rgba(0,0,0,.1);transform:translateY(-1px)}.askany-stats-column strong{color:#667eea;font-weight:700}.askany-health-good{color:#48bb78!important}.askany-health-warning{color:#ed8936!important}.askany-health-critical{color:#e53e3e!important}@media (max-width:768px){.askany-stats-grid{gap:15px;grid-template-columns:1fr}.askany-stats-column p{font-size:12px;padding:6px 10px}}@media (max-width:480px){.askany-stats-grid{gap:10px}.askany-stats-column{gap:6px}}.askany-chat-widget.encrypted .askany-chat-toggle:before{background:#10b981;border:2px solid #fff;border-radius:50%;content:"";height:8px;position:absolute;right:-2px;top:-2px;width:8px;z-index:1}.encryption-status{align-items:center;bottom:5px;color:#10b981;display:flex;gap:2px;opacity:.7}.encryption-status.disabled{color:#ef4444}.encryption-status:before{content:"🔒";font-size:8px}.encryption-status.disabled:before{content:"🔓"}.encrypting-indicator{align-items:center;color:#10b981;display:inline-flex;font-size:11px;gap:5px;opacity:.8}.encrypting-indicator:before{animation:pulse 1.5s infinite;content:"🔐"}.security-notice{align-items:center;background:linear-gradient(135deg,#10b981,#059669);border-radius:6px;color:#fff;display:flex;font-size:11px;gap:5px;margin:5px 0}.security-notice:before{content:"🛡️";font-size:12px}.security-notice.warning{background:linear-gradient(135deg,#f59e0b,#d97706)}.security-notice.warning:before{content:"⚠️"}.message-bubble a{color:var(--primary-color);transition:all .2s ease}.message-bubble a:hover{border-bottom-color:var(--primary-hover);color:var(--primary-hover)}.external-source-ref{background:rgba(74,108,247,.1);border-left:3px solid var(--primary-color);border-radius:4px;font-size:13px;margin:8px 0;padding:8px 12px}.external-source-ref strong{color:var(--primary-color);font-weight:600}.external-source-ref a{color:var(--primary-color);font-weight:500}.message-bubble ol,.message-bubble ul{margin:8px 0;padding-left:20px}.message-bubble li{margin:4px 0}.message-bubble br+br{content:"";display:block;margin:8px 0}.chat-messages.user-scrolling{scroll-behavior:auto}.chat-messages:not(.user-scrolling){scroll-behavior:smooth}.chat-message.new-message{animation:messageHighlight 2s ease-out}@keyframes messageHighlight{0%{background-color:rgba(74,108,247,.1);transform:translateX(-5px)}to{background-color:transparent;transform:translateX(0)}}.message-bubble a[href^=http]:after{content:" 🔗";font-size:12px;opacity:.7}.message-bubble a[href^=mailto]:after{content:" ✉️";font-size:12px;opacity:.7}.message-bubble p{margin:8px 0}.message-bubble p:first-child{margin-top:0}.message-bubble p:last-child{margin-bottom:0}.attachment-preview-container{backdrop-filter:blur(10px);background:rgba(248,249,250,.98);border:1px solid var(--border-color);border-left:3px solid var(--primary-color);border-radius:var(--radius-sm);bottom:100px;box-shadow:0 2px 8px rgba(0,0,0,.1);margin:5px 7px 5px 14px;max-height:100px;overflow-y:auto;padding:10px;position:relative;z-index:1}.attachment-preview-item{align-items:center;background:#fff;border:1px solid var(--border-color);border-radius:6px;display:flex;padding:8px;position:relative}.attachment-preview-image{border-radius:4px;flex-shrink:0;height:40px;margin-right:10px;overflow:hidden;width:40px}.attachment-preview-image img{height:100%;object-fit:cover;width:100%}.attachment-preview-icon{align-items:center;background:var(--light-bg);border-radius:4px;color:var(--light-text);display:flex;flex-shrink:0;height:40px;justify-content:center;margin-right:10px;width:40px}.attachment-preview-info{flex:1;min-width:0}.attachment-preview-name{color:var(--text-color);font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachment-preview-size{color:var(--light-text);font-size:11px;margin-top:2px}.attachment-remove-btn{align-items:center;background:#fff;border:none;border-radius:50%;color:#dc3545;cursor:pointer;display:flex;font-size:12px;font-weight:700;justify-content:center;position:absolute;right:6px;top:6px;transition:all .2s ease}.attachment-remove-btn:hover{background:#fff;color:#dc3545;transform:scale(1.1)}.attachment-remove-btn svg{height:12px;width:12px}.attachment-preview-actions{margin-top:8px;text-align:right}.attachment-clear-all-btn{background:none;border:1px solid var(--border-color);border-radius:4px;color:var(--light-text);cursor:pointer;font-size:11px;padding:4px 8px;transition:all .2s ease}.attachment-clear-all-btn:hover{background:var(--light-bg);color:var(--text-color)}.askany-chat-messages.drag-over{background:rgba(74,108,247,.05);border:2px dashed var(--primary-color);position:relative}.askany-chat-messages.drag-over:after{background:var(--primary-color);border-radius:var(--radius-sm);color:#fff;content:"📎 Drop files here to attach";font-weight:500;left:50%;padding:12px 20px;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:10}.attachment-btn{position:relative}.attachment-btn.has-files:after{align-items:center;background:var(--primary-color);border-radius:50%;color:#fff;content:attr(data-count);display:flex;font-size:10px;font-weight:600;height:16px;justify-content:center;position:absolute;right:-4px;top:-4px;width:16px}.message-bubble .file-attachment-info{background:rgba(74,108,247,.1);border-left:3px solid var(--primary-color);border-radius:4px;color:var(--primary-color);font-size:12px;margin:4px 0;padding:8px 12px}.message-bubble .file-attachment-list{margin:8px 0}.message-bubble .file-attachment-item{align-items:center;background:rgba(0,0,0,.05);border-radius:4px;display:flex;font-size:12px;margin:4px 0;padding:6px 8px}.message-bubble .file-attachment-item svg{flex-shrink:0;margin-right:6px}.attachment-preview-header{color:var(--primary-color);font-size:13px;font-weight:600;margin-bottom:8px}.attachment-preview-list{display:flex;flex-direction:column;gap:8px}.product-actions .add-to-cart-button,.product-actions .view-button{background:var(--primary-color);border:none;border-radius:var(--radius-sm);color:#fff;cursor:pointer;display:inline-block;font-size:13px;font-weight:500;margin-right:8px;padding:8px 16px;text-decoration:none;transition:all .2s ease}.product-actions .view-button{background:var(--light-bg);border:1px solid var(--border-color);color:var(--text-color)}.product-actions .view-button:hover{background:var(--primary-color);box-shadow:0 4px 12px rgba(74,108,247,.3);color:#fff;transform:translateY(-1px)}.product-actions .add-to-cart-button:hover{background:var(--primary-hover);box-shadow:0 4px 12px rgba(74,108,247,.3);transform:translateY(-1px)}.product-actions .add-to-cart-button.added{background:#28a745;transform:scale(1.05)}.product-actions .add-to-cart-button:disabled,.product-actions .view-button:disabled{cursor:not-allowed;opacity:.6;transform:none}.askany-product-modal-overlay{backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(12px);background:rgba(15,23,42,.8);display:none;height:100%;left:0;position:fixed;top:0;width:100%;z-index:999999}.askany-product-modal{animation:modalSlideIn .4s cubic-bezier(.34,1.56,.64,1);background:linear-gradient(135deg,#fff,#f8fafc);border:1px solid hsla(0,0%,100%,.1);border-radius:20px;box-shadow:0 25px 50px -12px rgba(0,0,0,.25),0 0 0 1px hsla(0,0%,100%,.05);left:50%;max-height:85vh;max-width:700px;overflow:hidden;position:absolute;top:50%;transform:translate(-50%,-50%);width:90%}@keyframes modalSlideIn{0%{opacity:0;transform:translate(-50%,-60%) scale(.9)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}.modal-header{align-items:center;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;display:flex;justify-content:space-between;overflow:hidden;padding:24px 28px;position:relative}.modal-header:before{background:linear-gradient(45deg,hsla(0,0%,100%,.1),transparent 50%);bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.modal-header h3{font-size:22px;font-weight:700;margin:0;text-shadow:0 2px 4px rgba(0,0,0,.1)}.modal-close-btn,.modal-header h3{color:#fff;position:relative;z-index:1}.modal-close-btn{align-items:center;backdrop-filter:blur(10px);background:hsla(0,0%,100%,.2);border:none;border-radius:50%;cursor:pointer;display:flex;font-size:20px;height:40px;justify-content:center;padding:0;transition:all .3s cubic-bezier(.4,0,.2,1);width:40px}.modal-close-btn:hover{background:hsla(0,0%,100%,.3);box-shadow:0 4px 12px rgba(0,0,0,.15);transform:rotate(90deg) scale(1.1)}.modal-body{background:linear-gradient(180deg,#fff,#f8fafc);max-height:calc(85vh - 180px);overflow-y:auto;padding:32px 28px}.modal-body::-webkit-scrollbar{width:8px}.modal-body::-webkit-scrollbar-track{background:#f1f5f9;border-radius:4px}.modal-body::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:4px}.modal-product-image{margin-bottom:28px;position:relative;text-align:center}.modal-product-image:before{background:linear-gradient(45deg,#667eea,#764ba2);border-radius:20px;content:"";height:calc(100% + 20px);left:50%;opacity:.1;position:absolute;top:-10px;transform:translateX(-50%);width:calc(100% + 20px);z-index:0}.modal-product-image img{border-radius:16px;box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04);height:auto;max-height:320px;max-width:100%;position:relative;transition:transform .3s ease;z-index:1}.modal-product-image img:hover{transform:scale(1.02)}.modal-product-details>*{margin-bottom:16px}.modal-product-price{background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;font-size:28px;font-weight:800;-webkit-text-fill-color:transparent;align-items:center;background-clip:text;display:flex;gap:12px;margin-bottom:16px}.modal-product-price .sale-badge{animation:pulse 2s infinite;background:linear-gradient(135deg,#ef4444,#dc2626);border-radius:20px;box-shadow:0 4px 12px rgba(239,68,68,.4);color:#fff;font-size:12px;font-weight:700;letter-spacing:.5px;padding:6px 12px;text-transform:uppercase}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.modal-product-sku{background:#f1f5f9;border-radius:8px;color:#64748b;display:inline-block;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:500;padding:8px 12px}.modal-product-stock{align-items:center;border-radius:12px;display:inline-flex;font-size:14px;font-weight:600;gap:8px;padding:10px 16px}.modal-product-stock:before{border-radius:50%;content:"";display:inline-block;height:8px;width:8px}.modal-product-stock.in-stock{background:rgba(16,185,129,.1);border:1px solid rgba(16,185,129,.2);color:#059669}.modal-product-stock.in-stock:before{background:#10b981;box-shadow:0 0 0 2px rgba(16,185,129,.3)}.modal-product-stock.out-of-stock{background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.2);color:#dc2626}.modal-product-stock.out-of-stock:before{background:#ef4444;box-shadow:0 0 0 2px rgba(239,68,68,.3)}.modal-product-description{background:rgba(248,250,252,.8);border-left:4px solid #667eea;border-radius:12px;color:#475569;font-size:15px;line-height:1.7;padding:20px}.modal-product-categories,.modal-product-rating{border-radius:8px;display:inline-block;font-size:14px;padding:8px 12px}.modal-product-categories{background:rgba(99,102,241,.1);border:1px solid rgba(99,102,241,.2);color:#6366f1}.modal-product-rating{background:rgba(245,158,11,.1);border:1px solid rgba(245,158,11,.2);color:#f59e0b;font-weight:600}.modal-product-attributes{background:linear-gradient(135deg,#f8fafc,#e2e8f0);border:1px solid rgba(148,163,184,.2);border-radius:16px;margin-top:24px;padding:24px}.modal-product-attributes h4{align-items:center;color:#1e293b;display:flex;font-size:18px;font-weight:700;gap:8px;margin:0 0 16px}.modal-product-attributes h4:before{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:2px;content:"";height:20px;width:4px}.modal-product-attributes ul{display:grid;gap:12px;list-style:none;margin:0;padding:0}.modal-product-attributes li{align-items:center;background:#fff;border:1px solid rgba(148,163,184,.15);border-radius:10px;display:flex;font-size:14px;justify-content:space-between;padding:12px 16px;transition:all .2s ease}.modal-product-attributes li:hover{box-shadow:0 4px 12px rgba(0,0,0,.1);transform:translateY(-2px)}.modal-product-attributes li strong{color:#334155;font-weight:600}.modal-footer{align-items:center;background:linear-gradient(135deg,#fff,#f8fafc);border-top:1px solid rgba(226,232,240,.6);box-shadow:0 -4px 20px rgba(0,0,0,.05);display:grid;gap:20px;grid-template-columns:auto 1fr auto;padding:28px}.modal-quantity-selector{align-items:center;background:transparent;border:none;display:flex;gap:10px;padding:0}.modal-quantity-selector label{color:#475569;font-size:14px;font-weight:600;margin:0;white-space:nowrap}.modal-quantity-selector input{background:#fff;border:2px solid #e2e8f0;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,.05);color:#1e293b;font-size:16px;font-weight:600;padding:12px 16px;text-align:center;transition:all .3s ease;width:80px}.modal-quantity-selector input:focus{border-color:#667eea;box-shadow:0 0 0 3px rgba(102,126,234,.1),0 4px 12px rgba(0,0,0,.1);outline:none;transform:translateY(-1px)}.modal-add-to-cart-btn{background:linear-gradient(135deg,#667eea,#764ba2);border:none;border-radius:12px;box-shadow:0 4px 15px rgba(102,126,234,.3);color:#fff;cursor:pointer;font-size:16px;font-weight:700;letter-spacing:.5px;min-width:160px;overflow:hidden;padding:16px 32px;position:relative;text-transform:uppercase;transition:all .3s cubic-bezier(.4,0,.2,1)}.modal-add-to-cart-btn:before{background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.3),transparent);content:"";height:100%;left:-100%;position:absolute;top:0;transition:left .6s ease;width:100%}.modal-add-to-cart-btn:hover{box-shadow:0 8px 25px rgba(102,126,234,.4);transform:translateY(-2px)}.modal-add-to-cart-btn:hover:before{left:100%}.modal-add-to-cart-btn:active{transform:translateY(0)}.modal-view-product-btn{align-items:center;background:linear-gradient(135deg,#f8fafc,#e2e8f0);border:2px solid #cbd5e1;border-radius:12px;box-shadow:0 2px 8px rgba(0,0,0,.05);color:#475569;display:inline-flex;font-size:14px;font-weight:600;gap:8px;justify-content:center;padding:16px 24px;text-align:center;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);white-space:nowrap}.modal-view-product-btn:after{content:"↗";font-size:16px;transition:transform .3s ease}.modal-view-product-btn:hover{background:linear-gradient(135deg,#334155,#475569);border-color:#334155;box-shadow:0 6px 20px rgba(51,65,85,.2);color:#fff;transform:translateY(-1px)}.modal-view-product-btn:hover:after{transform:translate(2px,-2px)}@media (max-width:768px){.askany-product-modal{margin:20px;max-height:90vh;width:95%}.modal-body,.modal-header{padding:20px}.modal-footer{gap:16px;grid-template-columns:1fr;padding:24px 20px;text-align:center}.modal-header h3{font-size:18px}.modal-product-price{align-items:flex-start;flex-direction:column;font-size:24px;gap:8px}.modal-quantity-selector{justify-content:center;order:1}.modal-add-to-cart-btn{order:2;padding:18px 32px;width:100%}.modal-view-product-btn{order:3;padding:16px 24px;width:100%}.modal-product-attributes ul{grid-template-columns:1fr}}@media (max-width:480px){.modal-footer{padding:20px 16px}.modal-quantity-selector input{font-size:14px;width:70px}.modal-add-to-cart-btn{font-size:15px;padding:16px 28px}.modal-view-product-btn{font-size:13px;padding:14px 20px}}.ajax-add-to-cart:disabled,.ajax-view-product:disabled{color:transparent;cursor:not-allowed;opacity:.7;position:relative}.ajax-add-to-cart:disabled:after,.ajax-view-product:disabled:after{animation:modernSpin 1s linear infinite;border:3px solid transparent;border-radius:50%;border-top-color:currentcolor;content:"";height:20px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:20px}@keyframes modernSpin{0%{border-top-color:currentColor;transform:translate(-50%,-50%) rotate(0deg)}25%{border-right-color:currentColor}50%{border-bottom-color:currentColor}75%{border-left-color:currentColor}to{border-top-color:currentColor;transform:translate(-50%,-50%) rotate(1turn)}}@media (prefers-color-scheme:dark){.askany-product-modal{background:linear-gradient(135deg,#1e293b,#334155);border:1px solid hsla(0,0%,100%,.1)}.modal-body{background:linear-gradient(180deg,#1e293b,#334155)}.modal-footer{background:linear-gradient(135deg,#1e293b,#334155);border-top:1px solid hsla(0,0%,100%,.1)}.modal-quantity-selector input{background:rgba(15,23,42,.8);border-color:hsla(0,0%,100%,.2);color:#f1f5f9}.modal-quantity-selector input:focus{background:rgba(15,23,42,.9);border-color:#667eea}.modal-quantity-selector label{color:#cbd5e1}.modal-product-description{background:rgba(15,23,42,.8);color:#cbd5e1}.modal-product-attributes{background:linear-gradient(135deg,#1e293b,#334155);border:1px solid hsla(0,0%,100%,.1)}.modal-product-attributes h4{color:#f1f5f9}.modal-product-attributes li{background:rgba(15,23,42,.8);border:1px solid hsla(0,0%,100%,.1);color:#cbd5e1}}.add-to-cart-button.added{position:relative}.add-to-cart-button.added:before{content:"✓";font-weight:700;left:8px;position:absolute;top:50%;transform:translateY(-50%)}.product-item.enhanced{border:1px solid var(--border-color);border-radius:var(--radius-sm);margin:8px 0;overflow:hidden;transition:all .2s ease}.product-item.enhanced:hover{box-shadow:0 4px 12px rgba(0,0,0,.1)}.cart-success-message{background:rgba(40,167,69,.1);border:1px solid rgba(40,167,69,.3);border-left:4px solid #28a745;border-radius:var(--radius-sm);margin:8px 0;padding:12px 16px}.cart-success-message .success-text{color:#155724;font-weight:500;margin-bottom:8px}.cart-actions{display:flex;flex-wrap:wrap;gap:8px}.checkout-btn,.view-cart-btn{align-items:center;border:none;border-radius:var(--radius-sm);cursor:pointer;display:inline-flex;font-size:13px;font-weight:500;padding:8px 16px;text-decoration:none;transition:all .2s ease}.view-cart-btn{background:#fcfcfc;color:#fff}.view-cart-btn:hover{background:#fdf4f4;box-shadow:0 4px 12px rgba(74,108,247,.3);color:#fff;text-decoration:none;transform:translateY(-1px)}.checkout-btn{background:#a7ffbb;color:#fff}.checkout-btn:hover{background:#8ef1a5;box-shadow:0 4px 12px rgba(40,167,69,.3);color:#fff;text-decoration:none;transform:translateY(-1px)}.view-cart-btn:before{content:"🛒";margin-right:6px}.checkout-btn:before{content:"💳";margin-right:6px}@media (max-width:480px){.cart-actions{flex-direction:column}.checkout-btn,.view-cart-btn{justify-content:center;text-align:center;width:100%}}.cart-summary{margin:8px 0}.cart-total{color:#155724;font-size:14px;font-weight:600}.continue-shopping-btn{background:var(--light-bg);border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-color);cursor:pointer;font-size:13px;font-weight:500;padding:8px 16px;transition:all .2s ease}.continue-shopping-btn:hover{background:var(--border-color);color:var(--text-color)}.continue-shopping-btn:before{content:"🛍️";margin-right:6px}.chat-message.message-entering{opacity:0;transform:translateY(20px) scale(.95);transition:all .4s cubic-bezier(.4,0,.2,1)}.chat-message.message-entered{opacity:1;transform:translateY(0) scale(1)}.chat-message.assistant-message .product-message{animation:productSlideIn .5s ease-out}@keyframes productSlideIn{0%{opacity:0;transform:translateX(-20px)}to{opacity:1;transform:translateX(0)}}.askany-chat-messages{scroll-behavior:smooth}.typing-indicator{animation:typingPulse 1.5s ease-in-out infinite}@keyframes typingPulse{0%,to{opacity:.6}50%{opacity:1}}.user-typing-indicator{color:#666;font-style:italic;justify-content:flex-end}.user-typing-indicator .typing-text{opacity:.8}.user-typing-indicator .typing-dots{display:flex;gap:3px}.user-typing-indicator .typing-dot{animation:userTypingDot 1.2s ease-in-out infinite;border-radius:50%;height:4px;width:4px}.user-typing-indicator .typing-dot:first-child{animation-delay:0s}.user-typing-indicator .typing-dot:nth-child(2){animation-delay:.2s}.user-typing-indicator .typing-dot:nth-child(3){animation-delay:.4s}@keyframes userTypingDot{0%,60%,to{opacity:.4;transform:translateY(0)}30%{opacity:1;transform:translateY(-8px)}}#user-typing-indicator .message-bubble{animation:fadeInUp .3s ease-out;background-color:rgba(74,108,247,.1);border:1px solid rgba(74,108,247,.2);color:var(--primary-color)}.remote-typing-indicator-content{align-items:center;color:#666;display:flex;font-size:12px;font-style:italic;gap:8px;padding:6px 10px}.remote-typing-indicator-content .typing-text{font-weight:500;opacity:.8}.remote-typing-indicator-content .typing-dots{display:flex;gap:2px}.remote-typing-indicator-content .typing-dot{animation:remoteTypingDot 1.4s ease-in-out infinite;background-color:#999;border-radius:50%;height:4px;width:4px}.remote-typing-indicator-content .typing-dot:first-child{animation-delay:0s}.remote-typing-indicator-content .typing-dot:nth-child(2){animation-delay:.2s}.remote-typing-indicator-content .typing-dot:nth-child(3){animation-delay:.4s}@keyframes remoteTypingDot{0%,60%,to{opacity:.3;transform:translateY(0)}30%{opacity:.8;transform:translateY(-6px)}}.remote-typing-indicator .message-bubble{animation:fadeInUp .3s ease-out;background-color:hsla(0,0%,60%,.1);border:1px solid hsla(0,0%,60%,.2);color:#666}@media (max-width:480px){.remote-typing-indicator-content,.user-typing-indicator{font-size:11px;padding:6px 8px}.remote-typing-indicator-content .typing-dot,.user-typing-indicator .typing-dot{height:3px;width:3px}}.product-item.enhanced:first-child{animation-delay:0s}.product-item.enhanced:nth-child(2){animation-delay:.2s}.product-item.enhanced:nth-child(3){animation-delay:.4s}.product-item.enhanced:nth-child(4){animation-delay:.6s}.product-item.enhanced:nth-child(5){animation-delay:.8s}.product-item.enhanced{transition:all .3s cubic-bezier(.4,0,.2,1)}.product-item.enhanced:hover{box-shadow:0 8px 25px rgba(0,0,0,.15);transform:translateY(-2px)}.message-bubble{transition:all .2s ease}.chat-message:hover .message-bubble{box-shadow:0 2px 8px rgba(0,0,0,.1)}.askany-chat-messages.smooth-scrolling{scroll-behavior:auto}.chat-message.system-message{margin:10px 0;text-align:center}.message-bubble.system-bubble{animation:systemMessageSlide .5s ease-out;background:linear-gradient(135deg,#667eea,#764ba2);border-radius:20px;box-shadow:0 2px 8px rgba(102,126,234,.3);color:#fff;display:inline-block;font-size:13px;font-weight:500;max-width:80%;padding:12px 16px}@keyframes systemMessageSlide{0%{opacity:0;transform:translateY(-10px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.typing-indicator{align-items:center;background:#f0f2f5;border-radius:18px;display:flex;gap:8px;margin:8px 0;padding:12px 16px}.typing-dots{display:flex;gap:4px}.typing-dot{animation:typing-dot-animation 1.4s ease-in-out infinite;background-color:#999;border-radius:50%;height:8px;width:8px}.typing-dot:first-child{animation-delay:0s}.typing-dot:nth-child(2){animation-delay:.2s}.typing-dot:nth-child(3){animation-delay:.4s}@keyframes typing-dot-animation{0%,60%,to{opacity:.4;transform:translateY(0)}30%{opacity:1;transform:translateY(-8px)}}.remote-typing-indicator{animation:fadeInUp .3s ease-out;background:rgba(74,108,247,.1);border:1px solid rgba(74,108,247,.2);border-radius:12px;color:#4a6cf7;font-size:13px;font-style:italic;margin:8px 0;padding:8px 12px}.remote-typing-indicator .typing-text{font-weight:500}.remote-typing-indicator .typing-dots{display:inline-flex;margin-left:8px}.remote-typing-indicator .typing-dot{background-color:#4a6cf7;height:4px;width:4px}@keyframes fadeInUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.user-typing-indicator{align-items:center;background:rgba(74,108,247,.1);border-radius:12px;color:#fafafa;display:flex;font-size:12px;gap:8px;padding:8px 12px}.user-typing-indicator .typing-text{font-weight:500}.admin-typing-indicator{animation:adminTypingSlide .4s ease-out;background:linear-gradient(135deg,#e3f2fd,#bbdefb);border:1px solid #2196f3;border-radius:12px;box-shadow:0 2px 8px rgba(33,150,243,.2);margin-bottom:15px;padding:12px 16px}@keyframes adminTypingSlide{0%{opacity:0;transform:translateX(-20px)}to{opacity:1;transform:translateX(0)}}.typing-indicator-content{align-items:center;color:#1976d2;display:flex;gap:10px}.typing-text{font-size:14px;font-weight:600}.typing-dots .typing-dot{animation:admin-typing-dot-animation 1.2s infinite;background-color:#1976d2;border-radius:50%;height:6px;width:6px}@keyframes admin-typing-dot-animation{0%,60%,to{opacity:.4;transform:translateY(0)}30%{opacity:1;transform:translateY(-6px)}}.notification-badge{align-items:center;animation:notificationPulse 2s infinite;background:#f44;border-radius:50%;color:#fff;display:flex;font-size:11px;font-weight:700;height:20px;justify-content:center;position:absolute;right:-5px;top:-5px;width:20px}@keyframes notificationPulse{0%,to{transform:scale(1)}50%{transform:scale(1.1)}}.encryption-status{border-radius:12px;bottom:4px;color:#c30000;font-size:10px;font-weight:600;letter-spacing:.5px;padding:4px 8px;position:absolute;right:10px;text-transform:uppercase}.encryption-status.disabled{background:#ff9800}.security-notice{animation:securityNoticeSlide .5s ease-out;background:#e8f5e8;border:1px solid #4caf50;border-radius:8px;color:#2e7d32;font-size:12px;margin:10px 0;padding:8px 12px;text-align:center}.security-notice.warning{background:#fff3e0;border-color:#ff9800;color:#e65100}@keyframes securityNoticeSlide{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.chat-message{align-items:flex-start;display:flex;gap:10px;margin-bottom:15px}.message-avatar{align-items:center;border-radius:50%;display:flex;flex-shrink:0;height:32px;justify-content:center;overflow:hidden;width:32px}.message-avatar .avatar-image{border-radius:50%;height:100%;object-fit:cover;width:100%}.message-avatar .avatar-icon{align-items:center;border-radius:50%;display:flex;height:32px;justify-content:center;width:32px}.message-avatar .user-icon{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.message-avatar .assistant-icon{background:linear-gradient(135deg,#f093fb,#f5576c);color:#fff}.message-avatar .agent-icon{background:linear-gradient(135deg,#4facfe,#00f2fe);color:#fff}.message-avatar svg{height:18px;width:18px}.user-message{flex-direction:row-reverse}.user-message .message-bubble{margin-left:0;margin-right:0}.assistant-message{flex-direction:row}.message-bubble h1,.message-bubble h2,.message-bubble h3,.message-bubble h4,.message-bubble h5,.message-bubble h6{font-weight:600;line-height:1.3;margin:.5em 0 .3em}.message-bubble h1{font-size:1.5em}.message-bubble h2{font-size:1.3em}.message-bubble h3{font-size:1.1em}.message-bubble h4{font-size:1em}.message-bubble h5{font-size:.9em}.message-bubble h6{font-size:.85em}.message-bubble p{line-height:1.6;margin:.5em 0}.message-bubble code{background:rgba(0,0,0,.05);border-radius:3px;font-family:Courier New,Courier,monospace;font-size:.9em;padding:2px 6px}.message-bubble pre{background:#f5f5f5;border:1px solid #ddd;border-radius:5px;margin:10px 0;overflow-x:auto;padding:12px}.message-bubble pre code{background:none;border-radius:0;font-size:.85em;line-height:1.5;padding:0}.message-bubble ol,.message-bubble ul{margin:10px 0;padding-left:25px}.message-bubble li{line-height:1.6;margin:5px 0}.message-bubble blockquote{border-left:4px solid #ddd;color:#666;font-style:italic;margin:10px 0;padding-left:15px}.message-bubble strong{font-weight:600}.message-bubble em{font-style:italic}.message-bubble del{opacity:.7;text-decoration:line-through}.message-bubble a{border-bottom:1px solid transparent;color:#4361ee;text-decoration:none;transition:border-color .2s}.message-bubble a:hover{border-bottom-color:#4361ee}.theme-dark .message-bubble code{background:hsla(0,0%,100%,.1)}.theme-dark .message-bubble pre{background:rgba(0,0,0,.3);border-color:hsla(0,0%,100%,.1)}.theme-dark .message-bubble blockquote{border-left-color:hsla(0,0%,100%,.2);color:hsla(0,0%,100%,.7)}@media (max-width:480px){.message-avatar,.message-avatar .avatar-icon{height:28px;width:28px}.message-avatar svg{height:16px;width:16px}.chat-message{gap:8px}}
     1.askany-chat-widget{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:14px;line-height:1.4;--primary-color:#4a6cf7;--primary-hover:#3c57d0;--text-color:#333;--light-text:#666;--bg-color:#fff;--light-bg:#f5f7fb;--border-color:#e3e8ef;--bubble-user:var(--primary-color);--bubble-ai:#f0f2f5;--bubble-user-text:#fff;--bubble-ai-text:#333;--shadow-soft:0 5px 20px rgba(0,0,0,.08);--shadow-strong:0 8px 30px rgba(0,0,0,.12);--radius-sm:8px;--radius-lg:16px;--radius-round:50px;--anim-speed:0.3s;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;position:fixed;transition:all .4s cubic-bezier(.4,0,.2,1);z-index:99999}.askany-chat-widget.bottom-right{bottom:20px;right:20px}.askany-chat-widget.bottom-left{bottom:20px;left:20px}.askany-chat-widget.top-right{right:20px;top:20px}.askany-chat-widget.top-left{left:20px;top:20px}.askany-chat-widget.inline{bottom:auto;left:auto;max-width:100%;position:relative;right:auto;top:auto;width:100%}.askany-chat-toggle{align-items:center;backdrop-filter:blur(10px);background:linear-gradient(135deg,#667eea,#764ba2);border:2px solid hsla(0,0%,100%,.2);border-radius:50%;box-shadow:0 8px 32px rgba(102,126,234,.4),0 4px 12px rgba(0,0,0,.1);cursor:pointer;display:flex;height:60px;justify-content:center;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1);width:60px}.askany-chat-toggle:before{background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.3),transparent);content:"";height:100%;left:-100%;position:absolute;top:0;transition:left .6s ease;width:100%}.askany-chat-toggle:hover{background:linear-gradient(135deg,#5a6fd8,#6b42a0);box-shadow:0 12px 40px rgba(102,126,234,.5),0 6px 20px rgba(0,0,0,.15);transform:translateY(-3px) scale(1.05)}.askany-chat-toggle:hover:before{left:100%}.toggle-icon-container{align-items:center;display:flex;justify-content:center;position:relative}.askany-chat-icon{color:#fff;transition:all .3s ease}.askany-chat-toggle:hover .askany-chat-icon{transform:scale(1.1) rotate(5deg)}.notification-badge{animation:askany-pulse 2s infinite;background:linear-gradient(135deg,#ff6b6b,#ff5252);box-shadow:0 4px 12px hsla(0,100%,71%,.4);right:-8px;top:-8px}@keyframes askany-pulse{0%,to{box-shadow:0 4px 12px hsla(0,100%,71%,.4);transform:scale(1)}50%{box-shadow:0 6px 20px hsla(0,100%,71%,.6);transform:scale(1.1)}}.askany-chat-container{animation:askany-slide-up .4s cubic-bezier(.4,0,.2,1);backdrop-filter:blur(20px);background:linear-gradient(135deg,hsla(0,0%,100%,.95),hsla(0,0%,100%,.9));border:1px solid hsla(0,0%,100%,.3);border-radius:20px;box-shadow:0 20px 60px rgba(0,0,0,.15),0 8px 32px rgba(0,0,0,.1);display:flex;flex-direction:column;height:600px;overflow:hidden;position:relative;width:380px}.askany-chat-container:before{animation:askany-gradient-flow 3s ease infinite;background:linear-gradient(90deg,#667eea,#764ba2,#667eea);background-size:200% 100%;content:"";height:2px;left:0;position:absolute;right:0;top:0}@keyframes askany-gradient-flow{0%,to{background-position:0 50%}50%{background-position:100% 50%}}@keyframes askany-slide-up{0%{opacity:0;transform:translateY(30px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.askany-chat-widget.inline .askany-chat-container{border-radius:16px;height:700px;margin:0 auto;max-width:800px;width:100%}.askany-chat-header{align-items:center;background:linear-gradient(135deg,#d1edff,hsla(0,0%,100%,.7));border-bottom:1px solid rgba(0,0,0,.08);display:flex;justify-content:space-between;padding:20px}.askany-chat-header:after{bottom:0;content:"";height:1px;left:20px;position:absolute;right:20px}.header-left{gap:12px}.assistant-avatar,.header-left{align-items:center;display:flex}.assistant-avatar{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:50%;box-shadow:0 4px 12px rgba(102,126,234,.3);color:#fff;height:40px;justify-content:center;overflow:hidden;transition:all .3s ease;width:40px}.assistant-avatar:hover{box-shadow:0 6px 20px rgba(102,126,234,.4);transform:scale(1.05)}.assistant-avatar img{height:100%;object-fit:cover;width:100%}.header-info h3{background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;color:#2d3748;font-size:16px;font-weight:700;margin:0;-webkit-text-fill-color:transparent;background-clip:text}.status-indicator{align-items:center;color:#48bb78;display:flex;font-size:12px;font-weight:600;gap:4px}.status-indicator:before{animation:askany-status-pulse 2s infinite;background:#48bb78;border-radius:50%;content:"";height:8px;width:8px}@keyframes askany-status-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.2)}}.header-actions{display:flex;gap:8px}.action-btn{align-items:center;backdrop-filter:blur(10px);background:hsla(0,0%,100%,.8);border:1px solid rgba(0,0,0,.1);border-radius:8px;color:#718096;cursor:pointer;display:flex;justify-content:center;padding:8px;transition:all .3s cubic-bezier(.4,0,.2,1)}.action-btn:hover{background:hsla(0,0%,100%,.9);box-shadow:0 4px 12px rgba(0,0,0,.1);color:#667eea;transform:translateY(-1px)}.askany-chat-close:hover{background:linear-gradient(135deg,#fed7d7,#feb2b2);color:#e53e3e}.askany-home-content{background:linear-gradient(180deg,rgba(247,250,252,.8),hsla(0,0%,100%,.9));flex:1;padding:24px}.askany-home-content::-webkit-scrollbar{width:6px}.askany-home-content::-webkit-scrollbar-track{background:rgba(0,0,0,.05);border-radius:3px}.askany-home-content::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:3px}.home-logo-section{margin-bottom:24px}.home-logo{border-radius:12px;box-shadow:0 8px 20px rgba(0,0,0,.1)}.home-agents-section{margin-bottom:20px}.agents-avatars{gap:-8px}.agent-avatar{border:3px solid hsla(0,0%,100%,.9);box-shadow:0 4px 12px rgba(0,0,0,.1);margin-left:-8px;transition:all .3s ease}.agent-avatar:first-child{margin-left:0}.agent-avatar:hover{box-shadow:0 8px 20px rgba(0,0,0,.2);transform:translateY(-2px) scale(1.05);z-index:10}.home-welcome-section{margin-bottom:32px}.welcome-title{background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;background-clip:text;font-size:28px;font-weight:800}.wave-emoji{animation:askany-wave 2s infinite}@keyframes askany-wave{0%,50%,to{transform:rotate(0deg)}25%{transform:rotate(20deg)}}.welcome-subtitle{color:#718096;font-weight:500}.home-actions-section{space-y:12px}.home-action-item{margin-bottom:12px}.action-link{backdrop-filter:blur(10px);background:hsla(0,0%,100%,.7);border:1px solid hsla(0,0%,100%,.3);border-radius:12px;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.action-link:before{background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.6),transparent);content:"";height:100%;left:-100%;position:absolute;top:0;transition:left .5s ease;width:100%}.action-link:hover{background:hsla(0,0%,100%,.9);border-color:rgba(102,126,234,.3);box-shadow:0 8px 20px rgba(0,0,0,.1);transform:translateY(-2px)}.action-link:hover:before{left:100%}.action-icon{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:10px;box-shadow:0 4px 12px rgba(102,126,234,.3);transition:all .3s ease}.action-link:hover .action-icon{box-shadow:0 6px 20px rgba(102,126,234,.4);transform:scale(1.05) rotate(5deg)}.action-title{color:#2d3748;font-size:15px;font-weight:700}.action-subtitle{color:#718096;font-size:13px;font-weight:500}.home-faq-section{margin-top:24px}.faq-title{color:#2d3748;font-size:18px;font-weight:700;margin-bottom:16px;text-align:center}.faq-list{space-y:8px}.faq-item{margin-bottom:8px}.faq-question{backdrop-filter:blur(10px);background:hsla(0,0%,100%,.7);border:1px solid hsla(0,0%,100%,.3);border-radius:10px;color:#2d3748;font-weight:600;transition:all .3s ease}.faq-question:hover{background:hsla(0,0%,100%,.9);box-shadow:0 4px 12px rgba(0,0,0,.08);color:#393939;transform:translateY(-1px)}.faq-question svg{color:#667eea;transition:transform .3s ease}.faq-question.active svg{transform:rotate(180deg)}.faq-answer{backdrop-filter:blur(10px);background:hsla(0,0%,100%,.8);border:1px solid hsla(0,0%,100%,.4);border-radius:10px;color:#4a5568;font-size:14px;margin-top:4px;padding:12px 16px}.askany-main-tabs{background:linear-gradient(135deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.7));border-top:1px solid rgba(0,0,0,.08)}.askany-main-tabs:before{background:linear-gradient(90deg,transparent,rgba(102,126,234,.3),transparent);content:"";height:1px;left:20px;position:absolute;right:20px;top:0}.main-tab-btn{align-items:center;background:none;border:none;color:#718096;cursor:pointer;display:flex;flex:1;flex-direction:column;font-size:12px;font-weight:600;gap:4px;padding:8px 12px;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.main-tab-btn:before{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:0 0 3px 3px;content:"";height:3px;left:50%;position:absolute;top:0;transform:translateX(-50%);transition:width .3s ease;width:0}.main-tab-btn:hover{background:rgba(102,126,234,.05);color:#667eea}.main-tab-btn.active{background:rgba(102,126,234,.1);color:#667eea}.main-tab-btn.active:before{width:60%}.main-tab-btn svg{transition:all .3s ease}.main-tab-btn.active svg,.main-tab-btn:hover svg{transform:scale(1.1)}.askany-chat-messages{background:linear-gradient(180deg,rgba(247,250,252,.8),hsla(0,0%,100%,.9));flex:1;position:relative}.askany-chat-messages::-webkit-scrollbar-track{background:rgba(0,0,0,.05)}.askany-chat-messages::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea,#764ba2)}.askany-message{animation:askany-message-slide-in .4s cubic-bezier(.4,0,.2,1);display:flex;margin-bottom:16px}@keyframes askany-message-slide-in{0%{opacity:0;transform:translateY(15px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.askany-message.user{justify-content:flex-end}.askany-message.agent,.askany-message.assistant{justify-content:flex-start}.askany-message-bubble{backdrop-filter:blur(10px);border-radius:18px;box-shadow:0 4px 12px rgba(0,0,0,.1);max-width:80%;overflow:hidden;padding:12px 16px;position:relative;transition:all .3s ease}.askany-message-bubble:before{background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.3),transparent);content:"";height:100%;left:-100%;position:absolute;top:0;transition:left .6s ease;width:100%}.askany-message-bubble:hover:before{left:100%}.askany-message.user .askany-message-bubble{background:linear-gradient(135deg,#667eea,#764ba2);border-bottom-right-radius:6px;color:#fff}.askany-message.agent .askany-message-bubble,.askany-message.assistant .askany-message-bubble{background:hsla(0,0%,100%,.9);border:1px solid rgba(102,126,234,.2);border-bottom-left-radius:6px;color:#2d3748}.askany-message-content{font-weight:500;line-height:1.5;word-wrap:break-word}.askany-message-time{font-size:10px;font-weight:600;margin-top:4px;opacity:.7}.suggested-prompts{animation:askany-fade-in .4s ease;backdrop-filter:blur(10px);background:hsla(0,0%,100%,.7);border:1px solid hsla(0,0%,100%,.3);border-radius:12px;overflow:hidden}.prompt-header{align-items:center;background:linear-gradient(135deg,rgba(102,126,234,.1),rgba(118,75,162,.1));border-bottom:1px solid rgba(0,0,0,.05);display:flex;justify-content:space-between;padding:12px 16px}.prompt-label{color:#667eea;font-size:12px;font-weight:700;letter-spacing:.5px;text-transform:uppercase}.close-prompts-btn{background:none;border:none;border-radius:4px;color:#718096;cursor:pointer;padding:4px;transition:all .3s ease}.close-prompts-btn:hover{background:rgba(102,126,234,.1);color:#667eea;transform:scale(1.1)}.prompt-items{display:flex;flex-direction:column;gap:8px;padding:12px}.prompt-item{backdrop-filter:blur(10px);background:hsla(0,0%,100%,.8);border:1px solid hsla(0,0%,100%,.4);border-radius:10px;color:#4a5568;cursor:pointer;font-size:13px;font-weight:500;padding:10px 14px;text-align:left;transition:all .3s cubic-bezier(.4,0,.2,1)}.prompt-item:hover{background:hsla(0,0%,100%,.95);border-color:rgba(102,126,234,.3);box-shadow:0 4px 12px rgba(102,126,234,.15);color:#667eea;transform:translateY(-1px)}.askany-chat-messages{background:#fff;display:flex;flex-direction:column;gap:16px;height:400px;overflow-y:auto;padding:20px}.askany-chat-messages::-webkit-scrollbar{width:6px}.askany-chat-messages::-webkit-scrollbar-track{background:#f1f5f9;border-radius:3px}.askany-chat-messages::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px;transition:background .3s ease}.askany-chat-messages::-webkit-scrollbar-thumb:hover{background:#94a3b8}.chat-message{animation:slideIn .3s ease-out;margin-bottom:12px}.chat-message.assistant-message{justify-content:flex-start}.message-bubble{border-radius:18px;font-size:14px;line-height:1.5;max-width:75%;padding:12px 16px;word-wrap:break-word;box-shadow:0 2px 8px rgba(0,0,0,.06);position:relative}.chat-message.user-message .message-bubble{background:linear-gradient(135deg,#6366f1,#8b5cf6);border-bottom-right-radius:4px;color:#fff}.chat-message.assistant-message .message-bubble{background:#f8fafc;border:1px solid #e2e8f0;border-bottom-left-radius:4px;color:#334155}.askany-chat-input{background:linear-gradient(135deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.7));border-top:1px solid rgba(0,0,0,.08);padding:16px 20px 20px;position:relative}.input-container{align-items:flex-end;backdrop-filter:blur(10px);background:hsla(0,0%,100%,.9);border:2px solid rgba(102,126,234,.2);border-radius:10px;display:flex;gap:8px;margin-bottom:12px;padding:0;position:relative;transition:all .3s ease}.input-container:focus-within{border-color:rgba(102,126,234,.5);box-shadow:0 0 0 3px rgba(102,126,234,.1);transform:translateY(-1px)}.attachment-btn,.emoji-btn,.submit-btn{align-items:center;background:none;border:none;border-radius:8px;color:#718096;cursor:pointer;display:flex;justify-content:center;padding:8px;position:relative;top:-5px;transition:all .3s ease}.attachment-btn:hover,.emoji-btn:hover,.submit-btn:hover{background:rgba(102,126,234,.1);color:#667eea;transform:scale(1.1)}.send-btn{align-items:center;background-color:rgba(102,126,234,.1);border:none;border-radius:var(--radius-round);box-shadow:var(--shadow-soft);color:#718096;cursor:pointer;display:flex;height:40px;justify-content:center;transition:all .2s;width:40px}.send-btn:hover{background-color:rgba(86,116,248,.1);box-shadow:var(--shadow-strong);transform:scale(1.05)}.input-container input{background:transparent;border:none;color:#2d3748;flex:1;font-size:14px;font-weight:500;line-height:1.4;outline:none;padding:10px 12px}.input-container input::placeholder{color:#a0aec0;font-weight:500}.emoji-picker{animation:fade-in .2s forwards;background-color:#fff;border:1px solid var(--border-color);border-radius:var(--radius-sm);bottom:70px;box-shadow:var(--shadow-strong);display:none;opacity:0;padding:10px;position:absolute;right:20px;transform:translateY(10px);z-index:100}@keyframes fade-in{to{opacity:1;transform:translateY(0)}}.emoji-group{display:grid;gap:8px;grid-template-columns:repeat(4,1fr)}.emoji{align-items:center;border-radius:var(--radius-sm);cursor:pointer;display:flex;font-size:18px;height:30px;justify-content:center;transition:all .2s;width:30px}.emoji:hover{background-color:var(--light-bg);transform:scale(1.1)}.chat-footer{background-color:var(--bg-color);border-top:1px solid var(--border-color);padding:8px 15px}.powered-by{color:var(--light-text);display:block;font-size:11px;text-align:center}.typing-indicator{gap:4px;justify-content:center;padding:8px 16px}.typing-dot{animation:typing-dot-animation 1s infinite;background-color:var(--light-text);opacity:.6}.remote-typing-indicator{animation:slideIn .3s ease-out;margin-bottom:12px}.remote-typing-indicator .message-bubble{background:rgba(102,126,234,.1);border:1px solid rgba(102,126,234,.2);border-radius:18px;border-bottom-left-radius:4px;color:#667eea;font-style:italic;padding:8px 12px}.typing-text{font-size:13px;font-weight:500}.typing-dots{gap:3px}.typing-dots .typing-dot{animation:typing-dot-animation 1.2s infinite;background-color:#667eea}.typing-dots .typing-dot:first-child{animation-delay:0s}.typing-dots .typing-dot:nth-child(2){animation-delay:.2s}.typing-dots .typing-dot:nth-child(3){animation-delay:.4s}.search-indicator{align-items:center;background:linear-gradient(135deg,#e3f2fd,#f3e5f5);border:1px solid rgba(102,126,234,.2);border-radius:var(--radius-sm);display:flex;gap:8px;justify-content:center;padding:12px 16px}.search-icon{animation:search-spin 2s linear infinite;flex-shrink:0}.search-icon,.search-text{color:var(--primary-color)}.search-text{font-size:13px;font-weight:500;margin-right:4px}.search-dots{display:flex;gap:3px}.search-dots .typing-dot{background-color:var(--primary-color);height:6px;width:6px}@keyframes search-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@media (max-width:480px){.input-container{width:80%}.askany-chat-header h3,.send-btn{font-size:13px}.askany-chat-container{bottom:10px;height:522px;height:85vh;left:10px;margin:0 auto;max-height:600px;max-width:380px;right:10px;width:325px;width:95vw}.input-container{align-items:center;flex-wrap:nowrap;margin-bottom:8px;padding:8px;width:100%!important}.input-container input{flex:1;font-size:14px;min-width:0;padding:8px 10px}.attachment-btn,.emoji-btn,.send-btn,.submit-btn{flex-shrink:0;height:36px;margin:0 2px;padding:6px;width:36px}.askany-chat-input{padding:12px 15px 15px}.askany-chat-messages{height:calc(100% - 200px);min-height:250px}.suggested-prompts{margin-bottom:8px}.prompt-items{gap:6px;padding:8px}.prompt-item{font-size:12px;padding:8px 12px}.product-image{height:50px;width:50px}}.askany-chat-tabs{background-color:var(--bg-color);border-bottom:1px solid var(--border-color);position:relative;z-index:5}.askany-chat-tabs,.tab-btn{align-items:center;display:flex;justify-content:center}.tab-btn svg{flex-shrink:0;margin-right:5px}.tab-btn span{display:inline-block;line-height:1}.tab-btn.active{border-bottom-color:#3182ce;color:#3182ce}.tab-btn.active svg{stroke:#3182ce}.tab-btn:focus{outline:none}.askany-chat-tabs .tab-btn{align-items:center;background:none;border:none;color:var(--light-text);cursor:pointer;flex:1;font-size:14px;font-weight:500;justify-content:center;padding:12px 15px;position:relative;text-align:center;transition:all .2s ease}.askany-chat-tabs .tab-btn:hover{color:var(--primary-color)}.askany-chat-tabs .tab-btn.active{color:var(--primary-color);font-weight:600}.askany-chat-tabs .tab-btn.active:after{animation:tab-highlight .3s ease forwards;background-color:var(--primary-color);bottom:-1px;content:"";height:2px;left:0;position:absolute;width:100%}@keyframes tab-highlight{0%{opacity:.5;transform:scaleX(.5)}to{opacity:1;transform:scaleX(1)}}.askany-chat-tab-content{display:flex;flex:1;flex-direction:column;min-height:0;overflow:hidden}.askany-contact-form{background-color:var(--light-bg);flex:1;overflow-y:auto;padding:15px}.askany-contact-form form{max-width:100%!important}.askany-contact-form input[type=email],.askany-contact-form input[type=tel],.askany-contact-form input[type=text],.askany-contact-form textarea{background-color:var(--bg-color);border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-color);margin-bottom:12px;padding:10px;width:100%}.askany-contact-form textarea{min-height:120px;resize:vertical}.askany-contact-form input[type=submit]{background-color:var(--primary-color);border:none;border-radius:var(--radius-sm);color:#fff;cursor:pointer;font-weight:500;padding:10px 15px;transition:background-color .2s}.askany-contact-form input[type=submit]:hover{background-color:var(--primary-hover)}.askany-chat-widget.with-tabs .askany-chat-messages{height:80%}.askany-chat-widget.dark-mode{--text-color:#e4e6eb;--light-text:#b0b3b8;--bg-color:#242526;--light-bg:#3a3b3c;--border-color:#3e4042;--bubble-ai:#3a3b3c;--bubble-ai-text:#e4e6eb;--shadow-soft:0 2px 10px rgba(0,0,0,.3);--shadow-strong:0 5px 15px rgba(0,0,0,.4)}.askany-chat-widget.dark-mode .askany-chat-tabs{background-color:var(--bg-color)}.askany-chat-widget.dark-mode .askany-contact-form input[type=email],.askany-chat-widget.dark-mode .askany-contact-form input[type=tel],.askany-chat-widget.dark-mode .askany-contact-form input[type=text],.askany-chat-widget.dark-mode .askany-contact-form textarea{background-color:var(--light-bg);border-color:var(--border-color);color:var(--text-color)}.message-bubble.product-message{background-color:#fff;max-width:100%;overflow:hidden;padding:0}.message-bubble.product-message .product-item{background-color:transparent;border-radius:0;box-shadow:none;display:flex;padding:12px}.message-bubble.product-message .product-image{height:80px;margin-right:12px;width:80px}.message-bubble.product-message .product-details{flex:1;min-width:0}.message-bubble.product-message .product-title{font-size:14px;margin-bottom:4px}.message-bubble.product-message .product-description{color:#666;font-size:12px;margin-bottom:8px}.message-bubble.product-message .product-price{color:#e63946;font-weight:600;margin-bottom:8px}.message-bubble.product-message .product-actions{display:flex;gap:8px}.message-bubble.product-message .add-to-cart-button,.message-bubble.product-message .view-button{border-radius:4px;font-size:12px;font-weight:500;padding:6px 12px;text-align:center;text-decoration:none;transition:all .2s ease}.message-bubble.product-message .view-button{background-color:#f1f1f1;color:#333}.message-bubble.product-message .add-to-cart-button{background-color:#4caf50;color:#fff}.message-bubble.product-message .view-button:hover{background-color:#e5e5e5}.message-bubble.product-message .add-to-cart-button:hover{background-color:#43a047}.message-bubble.product-message .product-item.enhanced{background:#fff;border:1px solid #e0e0e0;border-radius:8px;flex-direction:column;margin-bottom:8px;padding:16px}.message-bubble.product-message .product-item.enhanced .product-image{align-self:flex-start;height:100px;margin-bottom:12px;margin-right:0;width:100px}.message-bubble.product-message .product-sku{color:#888;font-size:11px;margin-bottom:4px}.message-bubble.product-message .sale-badge{background:#f44;border-radius:3px;color:#fff;font-size:10px;margin-left:8px;padding:2px 6px}.message-bubble.product-message .product-stock{font-size:11px;font-weight:500;margin-bottom:4px}.message-bubble.product-message .product-stock.in-stock{color:#28a745}.message-bubble.product-message .product-stock.out-of-stock{color:#dc3545}.message-bubble.product-message .product-categories{color:#666;font-size:11px;margin-bottom:4px}.message-bubble.product-message .product-rating{color:orange;font-size:11px;margin-bottom:6px}@media (max-width:480px){.message-bubble.product-message .product-item{flex-direction:column}.message-bubble.product-message .product-image{height:120px;margin-bottom:12px;margin-right:0;width:100%}.message-bubble.product-message .product-details{padding:0}}button.submit-button.sf-form-submit{width:100%}.simple_form_content .text-fields{align-items:baseline;display:flex;flex-direction:column;justify-content:left;margin-top:5px;overflow:hidden;text-align:left}.askany-content-wrapper{display:flex;flex:1;flex-direction:column;position:relative}.askany-main-tabs{background:var(--light-bg);border-top:1px solid var(--border-color);display:flex;flex-shrink:0;padding:0;position:relative;z-index:10}.main-tab-btn svg{height:16px;width:16px}.askany-main-tab-content{display:none;flex:1;overflow:hidden}.askany-main-tab-content#home-tab,.askany-main-tab-content.active{display:flex;flex-direction:column}.askany-main-tab-content#home-tab:not(.active),.askany-main-tab-content#messages-tab{display:none}.askany-direct-chat-content{display:flex;flex:1;flex-direction:column;overflow:hidden}.askany-home-content{display:flex;flex-direction:column;gap:20px;height:100%;overflow-y:auto;padding:20px}.home-logo-section{margin-bottom:10px;text-align:center}.home-logo{height:auto;max-height:60px;max-width:120px}.home-agents-section{margin-bottom:10px;text-align:center}.agents-avatars{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.agent-avatar{border:2px solid var(--border-color);border-radius:50%;height:40px;overflow:hidden;transition:transform var(--anim-speed) ease;width:40px}.agent-avatar:hover{border-color:var(--primary-color);transform:scale(1.1)}.agent-avatar img{height:100%;object-fit:cover;width:100%}.home-welcome-section{margin-bottom:20px;text-align:center}.welcome-title{align-items:center;color:var(--text-color);display:flex;font-size:24px;font-weight:600;gap:8px;justify-content:center;margin:0 0 8px}.welcome-title .user-name{background:linear-gradient(135deg,var(--primary-color),var(--primary-hover));-webkit-background-clip:text;color:var(--primary-color);font-weight:700;-webkit-text-fill-color:transparent;background-clip:text}.wave-emoji{animation:wave 2s ease-in-out infinite;font-size:24px}@keyframes wave{0%,to{transform:rotate(0deg)}25%{transform:rotate(20deg)}75%{transform:rotate(-10deg)}}.welcome-subtitle{color:var(--light-text);font-size:16px;line-height:1.5;margin:0}.home-actions-section{display:flex;flex-direction:column;gap:12px}.home-action-item{border-radius:var(--radius-sm);overflow:hidden;transition:transform var(--anim-speed) ease}.home-action-item:hover{transform:translateY(-2px)}.action-link{align-items:center;background:var(--light-bg);border:1px solid var(--border-color);border-radius:var(--radius-sm);display:flex;gap:12px;padding:16px;transition:all var(--anim-speed) ease}.action-link,.action-link:hover{color:var(--text-color);text-decoration:none}.action-link:hover{background:var(--bg-color);border-color:var(--primary-color);box-shadow:var(--shadow-soft)}.action-icon{align-items:center;background:var(--primary-color);border-radius:var(--radius-sm);color:#fff;display:flex;flex-shrink:0;height:40px;justify-content:center;width:40px}.action-icon svg{height:20px;width:20px}.action-content{flex:1}.action-title{color:var(--text-color);font-size:14px;font-weight:600;margin-bottom:4px}.action-subtitle{color:var(--light-text);font-size:12px;line-height:1.4}.home-faq-section{margin-top:10px}.faq-title{color:var(--text-color);font-size:16px;font-weight:600;margin:0 0 12px}.faq-list{display:flex;flex-direction:column;gap:8px}.faq-item{border:1px solid var(--border-color);border-radius:var(--radius-sm);overflow:hidden;transition:border-color var(--anim-speed) ease}.faq-item:hover{border-color:var(--primary-color)}.faq-question{align-items:center;background:var(--light-bg);border:none;color:var(--text-color);cursor:pointer;display:flex;font-size:13px;font-weight:500;justify-content:space-between;padding:12px 16px;text-align:left;transition:all var(--anim-speed) ease;width:100%}.faq-question:hover{background:rgba(74,108,247,.05)}.faq-question svg{color:var(--light-text);height:16px;transition:transform var(--anim-speed) ease;width:16px}.faq-answer{background:var(--bg-color);border-top:1px solid var(--border-color);color:var(--text-color);font-size:13px;line-height:1.5;padding:16px}.faq-answer p{margin:0 0 8px}.faq-answer p:last-child{margin-bottom:0}@media (max-width:480px){.askany-home-content{gap:16px;padding:16px}.welcome-title{font-size:20px}.welcome-subtitle{font-size:14px}.action-link{padding:12px}.action-icon{height:36px;width:36px}.agents-avatars{gap:6px}.agent-avatar{height:36px;width:36px}}.askany-main-tab-content#messages-tab .askany-chat-tab-content{display:flex;flex:1;flex-direction:column;min-height:0;overflow:hidden}.askany-main-tab-content#messages-tab .askany-chat-messages{flex:1;margin-top:-50px;min-height:0;overflow-y:auto;padding:15px}.askany-main-tab-content#messages-tab .askany-contact-form{flex:1;min-height:0;overflow-y:auto;padding:15px}.askany-direct-chat-content .askany-chat-tab-content{display:flex;flex:1;flex-direction:column;min-height:0;overflow:hidden}.askany-direct-chat-content .askany-chat-messages,.askany-direct-chat-content .askany-contact-form{flex:1;min-height:0;overflow-y:auto;padding:15px}.askany-direct-chat-content .askany-chat-tabs,.askany-main-tab-content#messages-tab .askany-chat-tabs{background-color:var(--bg-color);border-bottom:1px solid var(--border-color);display:flex;flex-shrink:0}.askany-direct-chat-content .suggested-prompts,.askany-main-tab-content#messages-tab .suggested-prompts{background-color:var(--bg-color);border-top:1px solid var(--border-color);bottom:144px;display:block;flex-shrink:0;position:relative}.askany-direct-chat-content .askany-chat-input,.askany-main-tab-content#messages-tab .askany-chat-input{background-color:var(--bg-color);border-top:1px solid var(--border-color);bottom:-15px;flex-shrink:0;padding:10px 15px;position:absolute;width:100%}.askany-main-tab-content#messages-tab,.askany-main-tab-content#messages-tab.active{display:flex;flex-direction:column;height:100%;overflow:hidden}.askany-direct-chat-content .askany-contact-form form,.askany-main-tab-content#messages-tab .askany-contact-form form{height:auto;max-width:100%}.askany-direct-chat-content .askany-contact-form input,.askany-direct-chat-content .askany-contact-form textarea,.askany-main-tab-content#messages-tab .askany-contact-form input,.askany-main-tab-content#messages-tab .askany-contact-form textarea{box-sizing:border-box;width:100%}@media (max-width:480px){.askany-direct-chat-content .askany-chat-messages,.askany-direct-chat-content .askany-contact-form,.askany-main-tab-content#messages-tab .askany-chat-messages,.askany-main-tab-content#messages-tab .askany-contact-form{padding:10px}}.askany-chat-container.minimized{height:auto!important;min-height:auto!important;transition:all .4s cubic-bezier(.4,0,.2,1)}.askany-chat-container.minimized .askany-chat-header{border-radius:20px 20px 20px 20px;cursor:pointer;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.askany-chat-container.minimized .askany-chat-header:hover{background:rgba(0,123,186,.03);box-shadow:0 2px 8px rgba(0,123,186,.08);transform:translateY(-1px)}.askany-chat-container.minimized .askany-chat-header:hover .assistant-avatar{background:linear-gradient(135deg,#667eea,#764ba2);transform:none}.askany-chat-container.minimized .askany-chat-header:hover .assistant-avatar img{filter:none;opacity:1}.askany-chat-container.minimized .askany-content-wrapper,.askany-chat-container.minimized .askany-main-tabs{display:none!important}.askany-content-wrapper{overflow:hidden}.askany-content-wrapper,.askany-main-tabs{transition:all .4s cubic-bezier(.4,0,.2,1)}.askany-chat-header{position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.minimize-btn{transition:all .3s ease}.minimize-btn:hover{background:rgba(0,123,186,.1);color:#007cba;transform:scale(1.1)}.askany-chat-widget .askany-chat-container.minimized{position:relative;transform:none}@media (max-width:480px){.askany-chat-container.minimized .askany-chat-header:after{display:none}.askany-chat-container.minimized .askany-chat-header:hover{transform:none}}.askany-stats-grid{display:grid;gap:20px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));margin-top:10px}.askany-stats-column{display:flex;flex-direction:column;gap:8px}.askany-stats-column p{background:hsla(0,0%,100%,.7);border:1px solid rgba(0,0,0,.05);border-radius:6px;font-size:13px;line-height:1.4;margin:0;padding:8px 12px;transition:all .2s ease}.askany-stats-column p:hover{background:hsla(0,0%,100%,.9);box-shadow:0 2px 8px rgba(0,0,0,.1);transform:translateY(-1px)}.askany-stats-column strong{color:#667eea;font-weight:700}.askany-health-good{color:#48bb78!important}.askany-health-warning{color:#ed8936!important}.askany-health-critical{color:#e53e3e!important}@media (max-width:768px){.askany-stats-grid{gap:15px;grid-template-columns:1fr}.askany-stats-column p{font-size:12px;padding:6px 10px}}@media (max-width:480px){.askany-stats-grid{gap:10px}.askany-stats-column{gap:6px}}.askany-chat-widget.encrypted .askany-chat-toggle:before{background:#10b981;border:2px solid #fff;border-radius:50%;content:"";height:8px;position:absolute;right:-2px;top:-2px;width:8px;z-index:1}.encryption-status{align-items:center;bottom:5px;color:#10b981;display:flex;gap:2px;opacity:.7}.encryption-status.disabled{color:#ef4444}.encryption-status:before{content:"🔒";font-size:8px}.encryption-status.disabled:before{content:"🔓"}.encrypting-indicator{align-items:center;color:#10b981;display:inline-flex;font-size:11px;gap:5px;opacity:.8}.encrypting-indicator:before{animation:pulse 1.5s infinite;content:"🔐"}.security-notice{align-items:center;background:linear-gradient(135deg,#10b981,#059669);border-radius:6px;color:#fff;display:flex;font-size:11px;gap:5px;margin:5px 0}.security-notice:before{content:"🛡️";font-size:12px}.security-notice.warning{background:linear-gradient(135deg,#f59e0b,#d97706)}.security-notice.warning:before{content:"⚠️"}.message-bubble a{color:var(--primary-color);transition:all .2s ease}.message-bubble a:hover{border-bottom-color:var(--primary-hover);color:var(--primary-hover)}.external-source-ref{background:rgba(74,108,247,.1);border-left:3px solid var(--primary-color);border-radius:4px;font-size:13px;margin:8px 0;padding:8px 12px}.external-source-ref strong{color:var(--primary-color);font-weight:600}.external-source-ref a{color:var(--primary-color);font-weight:500}.message-bubble ol,.message-bubble ul{margin:8px 0;padding-left:20px}.message-bubble li{margin:4px 0}.message-bubble br+br{content:"";display:block;margin:8px 0}.chat-messages.user-scrolling{scroll-behavior:auto}.chat-messages:not(.user-scrolling){scroll-behavior:smooth}.chat-message.new-message{animation:messageHighlight 2s ease-out}@keyframes messageHighlight{0%{background-color:rgba(74,108,247,.1);transform:translateX(-5px)}to{background-color:transparent;transform:translateX(0)}}.message-bubble a[href^=http]:after{content:" 🔗";font-size:12px;opacity:.7}.message-bubble a[href^=mailto]:after{content:" ✉️";font-size:12px;opacity:.7}.message-bubble p{margin:8px 0}.message-bubble p:first-child{margin-top:0}.message-bubble p:last-child{margin-bottom:0}.attachment-preview-container{backdrop-filter:blur(10px);background:rgba(248,249,250,.98);border:1px solid var(--border-color);border-left:3px solid var(--primary-color);border-radius:var(--radius-sm);bottom:100px;box-shadow:0 2px 8px rgba(0,0,0,.1);margin:5px 7px 5px 14px;max-height:100px;overflow-y:auto;padding:10px;position:relative;z-index:1}.attachment-preview-item{align-items:center;background:#fff;border:1px solid var(--border-color);border-radius:6px;display:flex;padding:8px;position:relative}.attachment-preview-image{border-radius:4px;flex-shrink:0;height:40px;margin-right:10px;overflow:hidden;width:40px}.attachment-preview-image img{height:100%;object-fit:cover;width:100%}.attachment-preview-icon{align-items:center;background:var(--light-bg);border-radius:4px;color:var(--light-text);display:flex;flex-shrink:0;height:40px;justify-content:center;margin-right:10px;width:40px}.attachment-preview-info{flex:1;min-width:0}.attachment-preview-name{color:var(--text-color);font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachment-preview-size{color:var(--light-text);font-size:11px;margin-top:2px}.attachment-remove-btn{align-items:center;background:#fff;border:none;border-radius:50%;color:#dc3545;cursor:pointer;display:flex;font-size:12px;font-weight:700;justify-content:center;position:absolute;right:6px;top:6px;transition:all .2s ease}.attachment-remove-btn:hover{background:#fff;color:#dc3545;transform:scale(1.1)}.attachment-remove-btn svg{height:12px;width:12px}.attachment-preview-actions{margin-top:8px;text-align:right}.attachment-clear-all-btn{background:none;border:1px solid var(--border-color);border-radius:4px;color:var(--light-text);cursor:pointer;font-size:11px;padding:4px 8px;transition:all .2s ease}.attachment-clear-all-btn:hover{background:var(--light-bg);color:var(--text-color)}.askany-chat-messages.drag-over{background:rgba(74,108,247,.05);border:2px dashed var(--primary-color);position:relative}.askany-chat-messages.drag-over:after{background:var(--primary-color);border-radius:var(--radius-sm);color:#fff;content:"📎 Drop files here to attach";font-weight:500;left:50%;padding:12px 20px;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:10}.attachment-btn{position:relative}.attachment-btn.has-files:after{align-items:center;background:var(--primary-color);border-radius:50%;color:#fff;content:attr(data-count);display:flex;font-size:10px;font-weight:600;height:16px;justify-content:center;position:absolute;right:-4px;top:-4px;width:16px}.message-bubble .file-attachment-info{background:rgba(74,108,247,.1);border-left:3px solid var(--primary-color);border-radius:4px;color:var(--primary-color);font-size:12px;margin:4px 0;padding:8px 12px}.message-bubble .file-attachment-list{margin:8px 0}.message-bubble .file-attachment-item{align-items:center;background:rgba(0,0,0,.05);border-radius:4px;display:flex;font-size:12px;margin:4px 0;padding:6px 8px}.message-bubble .file-attachment-item svg{flex-shrink:0;margin-right:6px}.attachment-preview-header{color:var(--primary-color);font-size:13px;font-weight:600;margin-bottom:8px}.attachment-preview-list{display:flex;flex-direction:column;gap:8px}.product-actions .add-to-cart-button,.product-actions .view-button{background:var(--primary-color);border:none;border-radius:var(--radius-sm);color:#fff;cursor:pointer;display:inline-block;font-size:13px;font-weight:500;margin-right:8px;padding:8px 16px;text-decoration:none;transition:all .2s ease}.product-actions .view-button{background:var(--light-bg);border:1px solid var(--border-color);color:var(--text-color)}.product-actions .view-button:hover{background:var(--primary-color);box-shadow:0 4px 12px rgba(74,108,247,.3);color:#fff;transform:translateY(-1px)}.product-actions .add-to-cart-button:hover{background:var(--primary-hover);box-shadow:0 4px 12px rgba(74,108,247,.3);transform:translateY(-1px)}.product-actions .add-to-cart-button.added{background:#28a745;transform:scale(1.05)}.product-actions .add-to-cart-button:disabled,.product-actions .view-button:disabled{cursor:not-allowed;opacity:.6;transform:none}.askany-product-modal-overlay{backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(12px);background:rgba(15,23,42,.8);display:none;height:100%;left:0;position:fixed;top:0;width:100%;z-index:999999}.askany-product-modal{animation:modalSlideIn .4s cubic-bezier(.34,1.56,.64,1);background:linear-gradient(135deg,#fff,#f8fafc);border:1px solid hsla(0,0%,100%,.1);border-radius:20px;box-shadow:0 25px 50px -12px rgba(0,0,0,.25),0 0 0 1px hsla(0,0%,100%,.05);left:50%;max-height:85vh;max-width:700px;overflow:hidden;position:absolute;top:50%;transform:translate(-50%,-50%);width:90%}@keyframes modalSlideIn{0%{opacity:0;transform:translate(-50%,-60%) scale(.9)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}.modal-header{align-items:center;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;display:flex;justify-content:space-between;overflow:hidden;padding:24px 28px;position:relative}.modal-header:before{background:linear-gradient(45deg,hsla(0,0%,100%,.1),transparent 50%);bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.modal-header h3{font-size:22px;font-weight:700;margin:0;text-shadow:0 2px 4px rgba(0,0,0,.1)}.modal-close-btn,.modal-header h3{color:#fff;position:relative;z-index:1}.modal-close-btn{align-items:center;backdrop-filter:blur(10px);background:hsla(0,0%,100%,.2);border:none;border-radius:50%;cursor:pointer;display:flex;font-size:20px;height:40px;justify-content:center;padding:0;transition:all .3s cubic-bezier(.4,0,.2,1);width:40px}.modal-close-btn:hover{background:hsla(0,0%,100%,.3);box-shadow:0 4px 12px rgba(0,0,0,.15);transform:rotate(90deg) scale(1.1)}.modal-body{background:linear-gradient(180deg,#fff,#f8fafc);max-height:calc(85vh - 180px);overflow-y:auto;padding:32px 28px}.modal-body::-webkit-scrollbar{width:8px}.modal-body::-webkit-scrollbar-track{background:#f1f5f9;border-radius:4px}.modal-body::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:4px}.modal-product-image{margin-bottom:28px;position:relative;text-align:center}.modal-product-image:before{background:linear-gradient(45deg,#667eea,#764ba2);border-radius:20px;content:"";height:calc(100% + 20px);left:50%;opacity:.1;position:absolute;top:-10px;transform:translateX(-50%);width:calc(100% + 20px);z-index:0}.modal-product-image img{border-radius:16px;box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04);height:auto;max-height:320px;max-width:100%;position:relative;transition:transform .3s ease;z-index:1}.modal-product-image img:hover{transform:scale(1.02)}.modal-product-details>*{margin-bottom:16px}.modal-product-price{background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;font-size:28px;font-weight:800;-webkit-text-fill-color:transparent;align-items:center;background-clip:text;display:flex;gap:12px;margin-bottom:16px}.modal-product-price .sale-badge{animation:pulse 2s infinite;background:linear-gradient(135deg,#ef4444,#dc2626);border-radius:20px;box-shadow:0 4px 12px rgba(239,68,68,.4);color:#fff;font-size:12px;font-weight:700;letter-spacing:.5px;padding:6px 12px;text-transform:uppercase}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.modal-product-sku{background:#f1f5f9;border-radius:8px;color:#64748b;display:inline-block;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:500;padding:8px 12px}.modal-product-stock{align-items:center;border-radius:12px;display:inline-flex;font-size:14px;font-weight:600;gap:8px;padding:10px 16px}.modal-product-stock:before{border-radius:50%;content:"";display:inline-block;height:8px;width:8px}.modal-product-stock.in-stock{background:rgba(16,185,129,.1);border:1px solid rgba(16,185,129,.2);color:#059669}.modal-product-stock.in-stock:before{background:#10b981;box-shadow:0 0 0 2px rgba(16,185,129,.3)}.modal-product-stock.out-of-stock{background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.2);color:#dc2626}.modal-product-stock.out-of-stock:before{background:#ef4444;box-shadow:0 0 0 2px rgba(239,68,68,.3)}.modal-product-description{background:rgba(248,250,252,.8);border-left:4px solid #667eea;border-radius:12px;color:#475569;font-size:15px;line-height:1.7;padding:20px}.modal-product-categories,.modal-product-rating{border-radius:8px;display:inline-block;font-size:14px;padding:8px 12px}.modal-product-categories{background:rgba(99,102,241,.1);border:1px solid rgba(99,102,241,.2);color:#6366f1}.modal-product-rating{background:rgba(245,158,11,.1);border:1px solid rgba(245,158,11,.2);color:#f59e0b;font-weight:600}.modal-product-attributes{background:linear-gradient(135deg,#f8fafc,#e2e8f0);border:1px solid rgba(148,163,184,.2);border-radius:16px;margin-top:24px;padding:24px}.modal-product-attributes h4{align-items:center;color:#1e293b;display:flex;font-size:18px;font-weight:700;gap:8px;margin:0 0 16px}.modal-product-attributes h4:before{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:2px;content:"";height:20px;width:4px}.modal-product-attributes ul{display:grid;gap:12px;list-style:none;margin:0;padding:0}.modal-product-attributes li{align-items:center;background:#fff;border:1px solid rgba(148,163,184,.15);border-radius:10px;display:flex;font-size:14px;justify-content:space-between;padding:12px 16px;transition:all .2s ease}.modal-product-attributes li:hover{box-shadow:0 4px 12px rgba(0,0,0,.1);transform:translateY(-2px)}.modal-product-attributes li strong{color:#334155;font-weight:600}.modal-footer{align-items:center;background:linear-gradient(135deg,#fff,#f8fafc);border-top:1px solid rgba(226,232,240,.6);box-shadow:0 -4px 20px rgba(0,0,0,.05);display:grid;gap:20px;grid-template-columns:auto 1fr auto;padding:28px}.modal-quantity-selector{align-items:center;background:transparent;border:none;display:flex;gap:10px;padding:0}.modal-quantity-selector label{color:#475569;font-size:14px;font-weight:600;margin:0;white-space:nowrap}.modal-quantity-selector input{background:#fff;border:2px solid #e2e8f0;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,.05);color:#1e293b;font-size:16px;font-weight:600;padding:12px 16px;text-align:center;transition:all .3s ease;width:80px}.modal-quantity-selector input:focus{border-color:#667eea;box-shadow:0 0 0 3px rgba(102,126,234,.1),0 4px 12px rgba(0,0,0,.1);outline:none;transform:translateY(-1px)}.modal-add-to-cart-btn{background:linear-gradient(135deg,#667eea,#764ba2);border:none;border-radius:12px;box-shadow:0 4px 15px rgba(102,126,234,.3);color:#fff;cursor:pointer;font-size:16px;font-weight:700;letter-spacing:.5px;min-width:160px;overflow:hidden;padding:16px 32px;position:relative;text-transform:uppercase;transition:all .3s cubic-bezier(.4,0,.2,1)}.modal-add-to-cart-btn:before{background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.3),transparent);content:"";height:100%;left:-100%;position:absolute;top:0;transition:left .6s ease;width:100%}.modal-add-to-cart-btn:hover{box-shadow:0 8px 25px rgba(102,126,234,.4);transform:translateY(-2px)}.modal-add-to-cart-btn:hover:before{left:100%}.modal-add-to-cart-btn:active{transform:translateY(0)}.modal-view-product-btn{align-items:center;background:linear-gradient(135deg,#f8fafc,#e2e8f0);border:2px solid #cbd5e1;border-radius:12px;box-shadow:0 2px 8px rgba(0,0,0,.05);color:#475569;display:inline-flex;font-size:14px;font-weight:600;gap:8px;justify-content:center;padding:16px 24px;text-align:center;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);white-space:nowrap}.modal-view-product-btn:after{content:"↗";font-size:16px;transition:transform .3s ease}.modal-view-product-btn:hover{background:linear-gradient(135deg,#334155,#475569);border-color:#334155;box-shadow:0 6px 20px rgba(51,65,85,.2);color:#fff;transform:translateY(-1px)}.modal-view-product-btn:hover:after{transform:translate(2px,-2px)}@media (max-width:768px){.askany-product-modal{margin:20px;max-height:90vh;width:95%}.modal-body,.modal-header{padding:20px}.modal-footer{gap:16px;grid-template-columns:1fr;padding:24px 20px;text-align:center}.modal-header h3{font-size:18px}.modal-product-price{align-items:flex-start;flex-direction:column;font-size:24px;gap:8px}.modal-quantity-selector{justify-content:center;order:1}.modal-add-to-cart-btn{order:2;padding:18px 32px;width:100%}.modal-view-product-btn{order:3;padding:16px 24px;width:100%}.modal-product-attributes ul{grid-template-columns:1fr}}@media (max-width:480px){.modal-footer{padding:20px 16px}.modal-quantity-selector input{font-size:14px;width:70px}.modal-add-to-cart-btn{font-size:15px;padding:16px 28px}.modal-view-product-btn{font-size:13px;padding:14px 20px}}.ajax-add-to-cart:disabled,.ajax-view-product:disabled{color:transparent;cursor:not-allowed;opacity:.7;position:relative}.ajax-add-to-cart:disabled:after,.ajax-view-product:disabled:after{animation:modernSpin 1s linear infinite;border:3px solid transparent;border-radius:50%;border-top-color:currentcolor;content:"";height:20px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:20px}@keyframes modernSpin{0%{border-top-color:currentColor;transform:translate(-50%,-50%) rotate(0deg)}25%{border-right-color:currentColor}50%{border-bottom-color:currentColor}75%{border-left-color:currentColor}to{border-top-color:currentColor;transform:translate(-50%,-50%) rotate(1turn)}}@media (prefers-color-scheme:dark){.askany-product-modal{background:linear-gradient(135deg,#1e293b,#334155);border:1px solid hsla(0,0%,100%,.1)}.modal-body{background:linear-gradient(180deg,#1e293b,#334155)}.modal-footer{background:linear-gradient(135deg,#1e293b,#334155);border-top:1px solid hsla(0,0%,100%,.1)}.modal-quantity-selector input{background:rgba(15,23,42,.8);border-color:hsla(0,0%,100%,.2);color:#f1f5f9}.modal-quantity-selector input:focus{background:rgba(15,23,42,.9);border-color:#667eea}.modal-quantity-selector label{color:#cbd5e1}.modal-product-description{background:rgba(15,23,42,.8);color:#cbd5e1}.modal-product-attributes{background:linear-gradient(135deg,#1e293b,#334155);border:1px solid hsla(0,0%,100%,.1)}.modal-product-attributes h4{color:#f1f5f9}.modal-product-attributes li{background:rgba(15,23,42,.8);border:1px solid hsla(0,0%,100%,.1);color:#cbd5e1}}.add-to-cart-button.added{position:relative}.add-to-cart-button.added:before{content:"✓";font-weight:700;left:8px;position:absolute;top:50%;transform:translateY(-50%)}.product-item.enhanced{border:1px solid var(--border-color);border-radius:var(--radius-sm);margin:8px 0;overflow:hidden;transition:all .2s ease}.product-item.enhanced:hover{box-shadow:0 4px 12px rgba(0,0,0,.1)}.cart-success-message{background:rgba(40,167,69,.1);border:1px solid rgba(40,167,69,.3);border-left:4px solid #28a745;border-radius:var(--radius-sm);margin:8px 0;padding:12px 16px}.cart-success-message .success-text{color:#155724;font-weight:500;margin-bottom:8px}.cart-actions{display:flex;flex-wrap:wrap;gap:8px}.checkout-btn,.view-cart-btn{align-items:center;border:none;border-radius:var(--radius-sm);cursor:pointer;display:inline-flex;font-size:13px;font-weight:500;padding:8px 16px;text-decoration:none;transition:all .2s ease}.view-cart-btn{background:#fcfcfc;color:#fff}.view-cart-btn:hover{background:#fdf4f4;box-shadow:0 4px 12px rgba(74,108,247,.3);color:#fff;text-decoration:none;transform:translateY(-1px)}.checkout-btn{background:#a7ffbb;color:#fff}.checkout-btn:hover{background:#8ef1a5;box-shadow:0 4px 12px rgba(40,167,69,.3);color:#fff;text-decoration:none;transform:translateY(-1px)}.view-cart-btn:before{content:"🛒";margin-right:6px}.checkout-btn:before{content:"💳";margin-right:6px}@media (max-width:480px){.cart-actions{flex-direction:column}.checkout-btn,.view-cart-btn{justify-content:center;text-align:center;width:100%}}.cart-summary{margin:8px 0}.cart-total{color:#155724;font-size:14px;font-weight:600}.continue-shopping-btn{background:var(--light-bg);border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-color);cursor:pointer;font-size:13px;font-weight:500;padding:8px 16px;transition:all .2s ease}.continue-shopping-btn:hover{background:var(--border-color);color:var(--text-color)}.continue-shopping-btn:before{content:"🛍️";margin-right:6px}.chat-message.message-entering{opacity:0;transform:translateY(20px) scale(.95);transition:all .4s cubic-bezier(.4,0,.2,1)}.chat-message.message-entered{opacity:1;transform:translateY(0) scale(1)}.chat-message.assistant-message .product-message{animation:productSlideIn .5s ease-out}@keyframes productSlideIn{0%{opacity:0;transform:translateX(-20px)}to{opacity:1;transform:translateX(0)}}.askany-chat-messages{scroll-behavior:smooth}.typing-indicator{animation:typingPulse 1.5s ease-in-out infinite}@keyframes typingPulse{0%,to{opacity:.6}50%{opacity:1}}.user-typing-indicator{color:#666;font-style:italic;justify-content:flex-end}.user-typing-indicator .typing-text{opacity:.8}.user-typing-indicator .typing-dots{display:flex;gap:3px}.user-typing-indicator .typing-dot{animation:userTypingDot 1.2s ease-in-out infinite;border-radius:50%;height:4px;width:4px}.user-typing-indicator .typing-dot:first-child{animation-delay:0s}.user-typing-indicator .typing-dot:nth-child(2){animation-delay:.2s}.user-typing-indicator .typing-dot:nth-child(3){animation-delay:.4s}@keyframes userTypingDot{0%,60%,to{opacity:.4;transform:translateY(0)}30%{opacity:1;transform:translateY(-8px)}}#user-typing-indicator .message-bubble{animation:fadeInUp .3s ease-out;background-color:rgba(74,108,247,.1);border:1px solid rgba(74,108,247,.2);color:var(--primary-color)}.remote-typing-indicator-content{align-items:center;color:#666;display:flex;font-size:12px;font-style:italic;gap:8px;padding:6px 10px}.remote-typing-indicator-content .typing-text{font-weight:500;opacity:.8}.remote-typing-indicator-content .typing-dots{display:flex;gap:2px}.remote-typing-indicator-content .typing-dot{animation:remoteTypingDot 1.4s ease-in-out infinite;background-color:#999;border-radius:50%;height:4px;width:4px}.remote-typing-indicator-content .typing-dot:first-child{animation-delay:0s}.remote-typing-indicator-content .typing-dot:nth-child(2){animation-delay:.2s}.remote-typing-indicator-content .typing-dot:nth-child(3){animation-delay:.4s}@keyframes remoteTypingDot{0%,60%,to{opacity:.3;transform:translateY(0)}30%{opacity:.8;transform:translateY(-6px)}}.remote-typing-indicator .message-bubble{animation:fadeInUp .3s ease-out;background-color:hsla(0,0%,60%,.1);border:1px solid hsla(0,0%,60%,.2);color:#666}@media (max-width:480px){.remote-typing-indicator-content,.user-typing-indicator{font-size:11px;padding:6px 8px}.remote-typing-indicator-content .typing-dot,.user-typing-indicator .typing-dot{height:3px;width:3px}}.product-item.enhanced:first-child{animation-delay:0s}.product-item.enhanced:nth-child(2){animation-delay:.2s}.product-item.enhanced:nth-child(3){animation-delay:.4s}.product-item.enhanced:nth-child(4){animation-delay:.6s}.product-item.enhanced:nth-child(5){animation-delay:.8s}.product-item.enhanced{transition:all .3s cubic-bezier(.4,0,.2,1)}.product-item.enhanced:hover{box-shadow:0 8px 25px rgba(0,0,0,.15);transform:translateY(-2px)}.message-bubble{transition:all .2s ease}.chat-message:hover .message-bubble{box-shadow:0 2px 8px rgba(0,0,0,.1)}.askany-chat-messages.smooth-scrolling{scroll-behavior:auto}.chat-message.system-message{margin:10px 0;text-align:center}.message-bubble.system-bubble{animation:systemMessageSlide .5s ease-out;background:linear-gradient(135deg,#667eea,#764ba2);border-radius:20px;box-shadow:0 2px 8px rgba(102,126,234,.3);color:#fff;display:inline-block;font-size:13px;font-weight:500;max-width:80%;padding:12px 16px}@keyframes systemMessageSlide{0%{opacity:0;transform:translateY(-10px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.typing-indicator{align-items:center;background:#f0f2f5;border-radius:18px;display:flex;gap:8px;margin:8px 0;padding:12px 16px}.typing-dots{display:flex;gap:4px}.typing-dot{animation:typing-dot-animation 1.4s ease-in-out infinite;background-color:#999;border-radius:50%;height:8px;width:8px}.typing-dot:first-child{animation-delay:0s}.typing-dot:nth-child(2){animation-delay:.2s}.typing-dot:nth-child(3){animation-delay:.4s}@keyframes typing-dot-animation{0%,60%,to{opacity:.4;transform:translateY(0)}30%{opacity:1;transform:translateY(-8px)}}.remote-typing-indicator{animation:fadeInUp .3s ease-out;background:rgba(74,108,247,.1);border:1px solid rgba(74,108,247,.2);border-radius:12px;color:#4a6cf7;font-size:13px;font-style:italic;margin:8px 0;padding:8px 12px}.remote-typing-indicator .typing-text{font-weight:500}.remote-typing-indicator .typing-dots{display:inline-flex;margin-left:8px}.remote-typing-indicator .typing-dot{background-color:#4a6cf7;height:4px;width:4px}@keyframes fadeInUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.user-typing-indicator{align-items:center;background:rgba(74,108,247,.1);border-radius:12px;color:#fafafa;display:flex;font-size:12px;gap:8px;padding:8px 12px}.user-typing-indicator .typing-text{font-weight:500}.admin-typing-indicator{animation:adminTypingSlide .4s ease-out;background:linear-gradient(135deg,#e3f2fd,#bbdefb);border:1px solid #2196f3;border-radius:12px;box-shadow:0 2px 8px rgba(33,150,243,.2);margin-bottom:15px;padding:12px 16px}@keyframes adminTypingSlide{0%{opacity:0;transform:translateX(-20px)}to{opacity:1;transform:translateX(0)}}.typing-indicator-content{align-items:center;color:#1976d2;display:flex;gap:10px}.typing-text{font-size:14px;font-weight:600}.typing-dots .typing-dot{animation:admin-typing-dot-animation 1.2s infinite;background-color:#1976d2;border-radius:50%;height:6px;width:6px}@keyframes admin-typing-dot-animation{0%,60%,to{opacity:.4;transform:translateY(0)}30%{opacity:1;transform:translateY(-6px)}}.notification-badge{align-items:center;animation:notificationPulse 2s infinite;background:#f44;border-radius:50%;color:#fff;display:flex;font-size:11px;font-weight:700;height:20px;justify-content:center;position:absolute;right:-5px;top:-5px;width:20px}@keyframes notificationPulse{0%,to{transform:scale(1)}50%{transform:scale(1.1)}}.encryption-status{border-radius:12px;bottom:4px;color:#c30000;font-size:10px;font-weight:600;letter-spacing:.5px;padding:4px 8px;position:absolute;right:10px;text-transform:uppercase}.encryption-status.disabled{background:#ff9800}.security-notice{animation:securityNoticeSlide .5s ease-out;background:#e8f5e8;border:1px solid #4caf50;border-radius:8px;color:#2e7d32;font-size:12px;margin:10px 0;padding:8px 12px;text-align:center}.security-notice.warning{background:#fff3e0;border-color:#ff9800;color:#e65100}@keyframes securityNoticeSlide{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.chat-message{align-items:flex-start;display:flex;gap:10px;margin-bottom:15px}.message-avatar{align-items:center;border-radius:50%;display:flex;flex-shrink:0;height:32px;justify-content:center;overflow:hidden;width:32px}.message-avatar .avatar-image{border-radius:50%;height:100%;object-fit:cover;width:100%}.message-avatar .avatar-icon{align-items:center;border-radius:50%;display:flex;height:32px;justify-content:center;width:32px}.message-avatar .user-icon{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.message-avatar .assistant-icon{background:linear-gradient(135deg,#f093fb,#f5576c);color:#fff}.message-avatar .agent-icon{background:linear-gradient(135deg,#4facfe,#00f2fe);color:#fff}.message-avatar svg{height:18px;width:18px}.user-message{flex-direction:row-reverse}.user-message .message-bubble{margin-left:0;margin-right:0}.assistant-message{flex-direction:row}.message-bubble h1,.message-bubble h2,.message-bubble h3,.message-bubble h4,.message-bubble h5,.message-bubble h6{font-weight:600;line-height:1.3;margin:.5em 0 .3em}.message-bubble h1{font-size:1.5em}.message-bubble h2{font-size:1.3em}.message-bubble h3{font-size:1.1em}.message-bubble h4{font-size:1em}.message-bubble h5{font-size:.9em}.message-bubble h6{font-size:.85em}.message-bubble p{line-height:1.6;margin:.5em 0}.message-bubble code{background:rgba(0,0,0,.05);border-radius:3px;font-family:Courier New,Courier,monospace;font-size:.9em;padding:2px 6px}.message-bubble pre{background:#f5f5f5;border:1px solid #ddd;border-radius:5px;margin:10px 0;overflow-x:auto;padding:12px}.message-bubble pre code{background:none;border-radius:0;font-size:.85em;line-height:1.5;padding:0}.message-bubble ol,.message-bubble ul{margin:10px 0;padding-left:25px}.message-bubble li{line-height:1.6;margin:5px 15px}.message-bubble blockquote{border-left:4px solid #ddd;color:#666;font-style:italic;margin:10px 0;padding-left:15px}.message-bubble strong{font-weight:600}.message-bubble em{font-style:italic}.message-bubble del{opacity:.7;text-decoration:line-through}.message-bubble a{border-bottom:1px solid transparent;color:#4361ee;text-decoration:none;transition:border-color .2s}.message-bubble a:hover{border-bottom-color:#4361ee}.theme-dark .message-bubble code{background:hsla(0,0%,100%,.1)}.theme-dark .message-bubble pre{background:rgba(0,0,0,.3);border-color:hsla(0,0%,100%,.1)}.theme-dark .message-bubble blockquote{border-left-color:hsla(0,0%,100%,.2);color:hsla(0,0%,100%,.7)}@media (max-width:480px){.message-avatar,.message-avatar .avatar-icon{height:28px;width:28px}.message-avatar svg{height:16px;width:16px}.chat-message{gap:8px}}
  • askany/trunk/dist/js/frontend.min.js

    r3393344 r3411709  
    1 (()=>{function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(){"use strict";e=function(){return n};var a,n={},r=Object.prototype,s=r.hasOwnProperty,i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",l=i.toStringTag||"@@toStringTag";function d(t,e,a,n){return Object.defineProperty(t,e,{value:a,enumerable:!n,configurable:!n,writable:!n})}try{d({},"")}catch(a){d=function(t,e,a){return t[e]=a}}function u(t,e,n,r){var s=e&&e.prototype instanceof g?e:g,i=Object.create(s.prototype);return d(i,"_invoke",function(t,e,n){var r=1;return function(s,i){if(3===r)throw Error("Generator is already running");if(4===r){if("throw"===s)throw i;return{value:a,done:!0}}for(n.method=s,n.arg=i;;){var o=n.delegate;if(o){var c=x(o,n);if(c){if(c===h)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(1===r)throw r=4,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=3;var l=p(t,e,n);if("normal"===l.type){if(r=n.done?4:2,l.arg===h)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(r=4,n.method="throw",n.arg=l.arg)}}}(t,n,new E(r||[])),!0),i}function p(t,e,a){try{return{type:"normal",arg:t.call(e,a)}}catch(t){return{type:"throw",arg:t}}}n.wrap=u;var h={};function g(){}function f(){}function m(){}var v={};d(v,o,(function(){return this}));var y=Object.getPrototypeOf,w=y&&y(y(D([])));w&&w!==r&&s.call(w,o)&&(v=w);var k=m.prototype=g.prototype=Object.create(v);function b(t){["next","throw","return"].forEach((function(e){d(t,e,(function(t){return this._invoke(e,t)}))}))}function _(e,a){function n(r,i,o,c){var l=p(e[r],e,i);if("throw"!==l.type){var d=l.arg,u=d.value;return u&&"object"==t(u)&&s.call(u,"__await")?a.resolve(u.__await).then((function(t){n("next",t,o,c)}),(function(t){n("throw",t,o,c)})):a.resolve(u).then((function(t){d.value=t,o(d)}),(function(t){return n("throw",t,o,c)}))}c(l.arg)}var r;d(this,"_invoke",(function(t,e){function s(){return new a((function(a,r){n(t,e,a,r)}))}return r=r?r.then(s,s):s()}),!0)}function x(t,e){var n=e.method,r=t.i[n];if(r===a)return e.delegate=null,"throw"===n&&t.i.return&&(e.method="return",e.arg=a,x(t,e),"throw"===e.method)||"return"!==n&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+n+"' method")),h;var s=p(r,t.i,e.arg);if("throw"===s.type)return e.method="throw",e.arg=s.arg,e.delegate=null,h;var i=s.arg;return i?i.done?(e[t.r]=i.value,e.next=t.n,"return"!==e.method&&(e.method="next",e.arg=a),e.delegate=null,h):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,h)}function S(t){this.tryEntries.push(t)}function I(t){var e=t[4]||{};e.type="normal",e.arg=a,t[4]=e}function E(t){this.tryEntries=[[-1]],t.forEach(S,this),this.reset(!0)}function D(e){if(null!=e){var n=e[o];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(s.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=a,t.done=!0,t};return i.next=i}}throw new TypeError(t(e)+" is not iterable")}return f.prototype=m,d(k,"constructor",m),d(m,"constructor",f),f.displayName=d(m,l,"GeneratorFunction"),n.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===f||"GeneratorFunction"===(e.displayName||e.name))},n.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,m):(t.__proto__=m,d(t,l,"GeneratorFunction")),t.prototype=Object.create(k),t},n.awrap=function(t){return{__await:t}},b(_.prototype),d(_.prototype,c,(function(){return this})),n.AsyncIterator=_,n.async=function(t,e,a,r,s){void 0===s&&(s=Promise);var i=new _(u(t,e,a,r),s);return n.isGeneratorFunction(e)?i:i.next().then((function(t){return t.done?t.value:i.next()}))},b(k),d(k,l,"Generator"),d(k,o,(function(){return this})),d(k,"toString",(function(){return"[object Generator]"})),n.keys=function(t){var e=Object(t),a=[];for(var n in e)a.unshift(n);return function t(){for(;a.length;)if((n=a.pop())in e)return t.value=n,t.done=!1,t;return t.done=!0,t}},n.values=D,E.prototype={constructor:E,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=a,this.done=!1,this.delegate=null,this.method="next",this.arg=a,this.tryEntries.forEach(I),!t)for(var e in this)"t"===e.charAt(0)&&s.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=a)},stop:function(){this.done=!0;var t=this.tryEntries[0][4];if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(a){i.type="throw",i.arg=t,e.next=a}for(var r=e.tryEntries.length-1;r>=0;--r){var s=this.tryEntries[r],i=s[4],o=this.prev,c=s[1],l=s[2];if(-1===s[0])return n("end"),!1;if(!c&&!l)throw Error("try statement without catch or finally");if(null!=s[0]&&s[0]<=o){if(o<c)return this.method="next",this.arg=a,n(c),!0;if(o<l)return n(l),!1}}},abrupt:function(t,e){for(var a=this.tryEntries.length-1;a>=0;--a){var n=this.tryEntries[a];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var r=n;break}}r&&("break"===t||"continue"===t)&&r[0]<=e&&e<=r[2]&&(r=null);var s=r?r[4]:{};return s.type=t,s.arg=e,r?(this.method="next",this.next=r[2],h):this.complete(s)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),h},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var a=this.tryEntries[e];if(a[2]===t)return this.complete(a[4],a[3]),I(a),h}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var a=this.tryEntries[e];if(a[0]===t){var n=a[4];if("throw"===n.type){var r=n.arg;I(a)}return r}}throw Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={i:D(t),r:e,n},"next"===this.method&&(this.arg=a),h}},n}function a(t,e,a,n,r,s,i){try{var o=t[s](i),c=o.value}catch(t){return void a(t)}o.done?e(c):Promise.resolve(c).then(n,r)}function n(t){return function(){var e=this,n=arguments;return new Promise((function(r,s){var i=t.apply(e,n);function o(t){a(i,r,s,o,c,"next",t)}function c(t){a(i,r,s,o,c,"throw",t)}o(void 0)}))}}jQuery(document).ready((function(t){t(".askany-chat-widget").each((function(){var a=t(this),r=a.find(".askany-chat-toggle"),s=a.find(".askany-chat-container"),i=a.find(".askany-chat-messages"),o=a.find(".askany-chat-products"),c=a.find("#askany-chat-form"),l=c.find("input"),d=a.find(".emoji-btn"),u=a.find(".emoji-picker"),p=a.find(".prompt-item"),h=a.find(".expand-btn"),g=a.find(".minimize-btn"),f="",m=!1,v=!1,y=a.data("api-provider"),w=(a.data("fallback-enabled"),localStorage.getItem("askany_widget_state")||"closed");a.find(".main-tab-btn").on("click",(function(){var e=t(this).data("tab");a.find(".main-tab-btn").removeClass("active"),t(this).addClass("active"),a.find(".askany-main-tab-content").hide(),a.find("#"+e+"-tab").show(),"messages"===e?(P(),setTimeout((function(){Y()}),100)):"home"===e&&A()})),0===a.find(".askany-main-tabs").length&&P(),a.find(".tab-btn").on("click",(function(){var e=t(this).data("tab");a.find(".tab-btn").removeClass("active"),t(this).addClass("active"),a.find(".askany-chat-tab-content").hide(),a.find("#"+e+"-tab").show(),"chat"===e&&setTimeout((function(){Y()}),100)})),a.find(".faq-question").on("click",(function(){var e=t(this).closest(".faq-item").find(".faq-answer"),n=t(this).find("svg");e.is(":visible")?(e.slideUp(),n.css("transform","rotate(0deg)")):(a.find(".faq-answer").slideUp(),a.find(".faq-question svg").css("transform","rotate(0deg)"),e.slideDown(),n.css("transform","rotate(180deg)"))})),a.find(".askany-chat-tabs").length&&a.addClass("with-tabs");var k=function(){var t=localStorage.getItem("askany_user_id");return t||(t="user_"+Math.random().toString(36).substr(2,9)+"_"+Date.now(),localStorage.setItem("askany_user_id",t)),t}(),b="askany_browser_id",_="askany_chat_session_id",x="askany_username",S=function(){var t=localStorage.getItem(b);return t||(t="browser_"+Math.random().toString(36).substr(2,9)+"_"+Date.now(),localStorage.setItem(b,t)),t}();function I(e,a){var n=localStorage.getItem("askany_chat_messages_"+e);n&&(localStorage.setItem("askany_chat_messages_"+a,n),localStorage.removeItem("askany_chat_messages_"+e)),localStorage.setItem(_,a),f=a;var r=localStorage.getItem("askany_hide_suggestions_"+e);r&&(localStorage.setItem("askany_hide_suggestions_"+a,r),localStorage.removeItem("askany_hide_suggestions_"+e)),function(e,a){"undefined"!=typeof askanyData&&t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_merge_session",session_id:e,old_session_id:a,nonce:askanyData.nonce},success:function(t){t.success&&t.data&&t.data.user_name&&(localStorage.setItem(x,t.data.user_name),console.log("Updated username after session merge:",t.data.user_name))},error:function(t){console.warn("Failed to notify server about session merge:",t)}})}(a,e)}function E(){return(E=n(e().mark((function n(){var r;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,!window.chatEncryption||!ChatEncryption.isSupported()){e.next=11;break}return e.next=4,window.chatEncryption.initializeKey();case 4:a.addClass("encrypted"),r=t('<div class="encryption-status">Encrypted</div>'),a.find(".askany-chat-container").append(r),localStorage.getItem("askany_encryption_notice_shown")||setTimeout((function(){var e=t('<div class="security-notice">Your messages are encrypted for security</div>');i.append(e),i.scrollTop(i[0].scrollHeight),setTimeout((function(){e.fadeOut(500,(function(){t(this).remove()}))}),5e3),localStorage.setItem("askany_encryption_notice_shown","true")}),1e3),console.log("Chat encryption initialized successfully"),e.next=15;break;case 11:console.warn("Chat encryption not supported in this browser"),r=t('<div class="encryption-status disabled">Unencrypted</div>'),a.find(".askany-chat-container").append(r),localStorage.getItem("askany_encryption_warning_shown")||setTimeout((function(){var e=t('<div class="security-notice warning">Encryption not available in this browser</div>');i.append(e),i.scrollTop(i[0].scrollHeight),setTimeout((function(){e.fadeOut(500,(function(){t(this).remove()}))}),7e3),localStorage.setItem("askany_encryption_warning_shown","true")}),1e3);case 15:e.next=22;break;case 17:e.prev=17,e.t0=e.catch(0),console.error("Failed to initialize encryption:",e.t0),r=t('<div class="encryption-status disabled">Error</div>'),a.find(".askany-chat-container").append(r);case 22:case"end":return e.stop()}}),n,null,[[0,17]])})))).apply(this,arguments)}!function(){var t=localStorage.getItem(_),e=localStorage.getItem(x);if("undefined"!=typeof askanyData&&askanyData.isLoggedIn&&askanyData.currentUserId){var n="askany_user_session_"+askanyData.currentUserId,r=localStorage.getItem(n);if(r)console.log("Reusing existing user session:",r),f=r,localStorage.setItem(_,r),t&&t.startsWith("anon_")&&t!==r&&(console.log("Merging anonymous session",t,"into existing user session",r),I(t,r));else{var s="user_"+askanyData.currentUserId+"_"+Date.now();t&&t.startsWith("anon_")?(console.log("User logged in, merging session from",t,"to",s),I(t,s)):(f=s,localStorage.setItem(_,s)),localStorage.setItem(n,s),console.log("Created new user session:",s)}askanyData.currentUserName?(localStorage.setItem(x,askanyData.currentUserName),console.log("Set logged-in username:",askanyData.currentUserName)):localStorage.setItem(x,askanyData.currentUserLogin||"Logged-in User"),function(t){var e,n=a.find(".welcome-title");if(n.length>0){var r='<span class="wave-emoji">👋</span>';t?n.html('Hi <span class="user-name">'+(e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"},t.replace(/[&<>"']/g,(function(t){return e[t]}))+"</span> ")+r):n.html("Hi "+r)}}(askanyData.currentUserName||askanyData.currentUserLogin)}else if(t&&(t.startsWith("anon_")||t.startsWith("browser_"))?(f=t,console.log("Using existing anonymous session:",f)):(f="anon_"+S,localStorage.setItem(_,f),console.log("Created new anonymous session:",f)),!e){var i="Anonymous_"+S.split("_")[1].substring(0,6);localStorage.setItem(x,i)}console.log("Initialized session ID:",f),console.log("Username:",localStorage.getItem(x))}(),function(){E.apply(this,arguments)}(),"undefined"!=typeof askanyData&&(window.testAskanyAjax=function(){t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_get_realtime_updates",session_id:f,last_message_time:null,nonce:askanyData.nonce},success:function(t){},error:function(t,e,a){console.error("AJAX test failed:",a,t.responseText)}})});var D=null,C=null,T=new Set,j=!1;function O(){D||(D=setInterval((function(){!function(){if(f&&"undefined"!=typeof askanyData&&s.is(":visible")){var e=a.find('.main-tab-btn[data-tab="messages"]');if(e.length>0&&!e.hasClass("active"))console.log("Skipping poll - messages tab not active");else{var n=a.find("#askany-chat-form");n.length>0&&!n.is(":visible")?console.log("Skipping poll - chat form not visible"):t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_get_realtime_updates",session_id:f,last_message_time:C,nonce:askanyData.nonce},success:function(e){if(e.success&&e.data.messages&&e.data.messages.length>0){var n=!1;e.data.messages.forEach((function(e){if("agent"===e.sender_type||"ai"===e.sender_type||"system"===e.sender_type){if("ai"===e.sender_type){if(!(i.find(".chat-message.assistant-message").filter((function(){return t(this).find(".message-bubble").html().trim()===U(e.message).trim()})).length>0)){var r=t('<div class="chat-message assistant-message"><div class="message-bubble">'+U(e.message)+"</div></div>");i.append(r),n=!0}}else if("agent"===e.sender_type)T.has(e.id)||(T.add(e.id),r=t('<div class="chat-message assistant-message" data-message-id="'+e.id+'"><div class="message-bubble">'+U(e.message)+"</div></div>"),i.append(r),n=!0);else if("system"===e.sender_type&&!T.has(e.id)){if(T.add(e.id),r=t('<div class="chat-message assistant-message system-message" data-message-id="'+e.id+'"><div class="message-bubble system-bubble">'+U(e.message)+"</div></div>"),i.append(r),e.message.includes("🤖")){var o="askany_agent_notified_"+f;localStorage.removeItem(o),setTimeout((function(){r.fadeOut(500,(function(){t(this).remove()}))}),8e3)}else e.message.includes("received by our support team")&&setTimeout((function(){r.fadeOut(500,(function(){t(this).remove()}))}),8e3);n=!0}C=e.created_at,s.is(":visible")||a.find(".notification-badge").fadeIn()}})),n&&!j&&i.scrollTop(i[0].scrollHeight)}var r;e.success&&e.data.typing_indicators&&(r=e.data.typing_indicators,t(".remote-typing-indicator").remove(),r&&r.length>0&&r.forEach((function(t){if("agent"!==t.user_type){var e=!1;e="undefined"!=typeof askanyData&&askanyData.currentUserId?t.user_id==askanyData.currentUserId:t.session_id===f&&"user"===t.user_type,t.is_typing&&!e&&ct(t)}else ct(t)})))},error:function(t,e,a){console.warn("Polling error:",a)}})}}}()}),3e3))}function P(){if(!C){var t=new Date(Date.now()-3e5);C=t.toISOString()}setTimeout((function(){O()}),1e3)}function A(){D&&(clearInterval(D),D=null)}function U(t){return t?(t=(t=(t=void 0!==window.AskanyMarkdown?window.AskanyMarkdown.parse(t):(t=(t=(t=(t=t.replace(/(https?:\/\/[^\s]+)/g,'<a href="$1" target="_blank" rel="noopener noreferrer">$1</a>')).replace(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/g,'<a href="mailto:$1">$1</a>')).replace(/\n/g,"<br>")).replace(/^\d+\.\s/gm,"<br>• ")).replace(/^-\s/gm,"<br>• ")).replace(/From External_url '([^']+)' \(([^)]+)\):/g,'<div class="external-source-ref"><strong>📄 From:</strong> <a href="$2" target="_blank" rel="noopener noreferrer">$1</a></div>')).replace(/(<br\s*\/?>){3,}/g,"<br><br>")).trim():t}function M(e,a,n){var r=a?"user-message":"assistant-message",s=a||n?e:U(e),o=tt(a),c=t('<div class="chat-message '+r+' message-entering">'+o+'<div class="message-bubble'+(n?" product-message":"")+'">'+s+"</div></div>");i.append(c),setTimeout((function(){c.removeClass("message-entering").addClass("message-entered"),function(){if(!j){var t=i[0].scrollHeight,e=(i.scrollTop(),t-i.height());i.animate({scrollTop:e},600,"swing")}}()}),100);try{z().then((function(t){t.push({text:e,isUser:a,isProduct:n||!1,timestamp:(new Date).getTime()}),F(t)}))}catch(t){console.error("Failed to save message to localStorage:",t)}}function H(){return"askany_chat_messages_"+(f||k)}function F(t){return q.apply(this,arguments)}function q(){return(q=n(e().mark((function t(a){var n,r;return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,R();case 3:if(t.sent){t.next=7;break}return console.error("Cannot write to localStorage due to quota issues"),t.abrupt("return",!1);case 7:if(!window.chatEncryption||!ChatEncryption.isSupported()){t.next=15;break}return t.next=10,window.chatEncryption.encryptObject(a);case 10:n=t.sent,r=window.chatEncryption.obfuscateData(n),localStorage.setItem(H(),r),t.next=16;break;case 15:localStorage.setItem(H(),JSON.stringify(a));case 16:return t.abrupt("return",!0);case 19:if(t.prev=19,t.t0=t.catch(0),"QuotaExceededError"!==t.t0.name&&22!==t.t0.code){t.next=36;break}return console.warn("Storage quota exceeded while saving messages, attempting cleanup..."),t.next=25,R();case 25:if(!t.sent){t.next=36;break}return t.prev=27,localStorage.setItem(H(),JSON.stringify(a)),t.abrupt("return",!0);case 32:return t.prev=32,t.t1=t.catch(27),console.error("Failed to save messages even after cleanup:",t.t1),t.abrupt("return",!1);case 36:return console.error("Failed to save encrypted messages:",t.t0),t.prev=37,localStorage.setItem(H(),JSON.stringify(a)),t.abrupt("return",!0);case 42:return t.prev=42,t.t2=t.catch(37),console.error("Failed to save messages with fallback:",t.t2),t.abrupt("return",!1);case 46:case"end":return t.stop()}}),t,null,[[0,19],[27,32],[37,42]])})))).apply(this,arguments)}function z(){return N.apply(this,arguments)}function N(){return(N=n(e().mark((function t(){var a,n,r,s;return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(t.prev=0,a=localStorage.getItem(H())){t.next=4;break}return t.abrupt("return",[]);case 4:if(!window.chatEncryption||!ChatEncryption.isSupported()){t.next=12;break}return n=window.chatEncryption.deobfuscateData(a),t.next=8,window.chatEncryption.decryptObject(n);case 8:return r=t.sent,t.abrupt("return",Array.isArray(r)?r:[]);case 12:return t.abrupt("return",JSON.parse(a));case 13:t.next=27;break;case 15:return t.prev=15,t.t0=t.catch(0),console.error("Failed to load encrypted messages:",t.t0),t.prev=18,s=localStorage.getItem(H()),t.abrupt("return",s?JSON.parse(s):[]);case 23:return t.prev=23,t.t1=t.catch(18),console.error("Failed to parse stored messages:",t.t1),t.abrupt("return",[]);case 27:case"end":return t.stop()}}),t,null,[[0,15],[18,23]])})))).apply(this,arguments)}function B(){return G.apply(this,arguments)}function G(){return(G=n(e().mark((function t(){var a,n,r;return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,z();case 3:if(a=t.sent,Array.isArray(a)||(a=[]),n=Date.now()-6048e5,(r=a.filter((function(t){return t.timestamp>n}))).length===a.length){t.next=11;break}return t.next=10,F(r);case 10:return t.abrupt("return",!0);case 11:return t.abrupt("return",!1);case 14:return t.prev=14,t.t0=t.catch(0),console.error("Error clearing expired messages:",t.t0),t.abrupt("return",!1);case 18:case"end":return t.stop()}}),t,null,[[0,14]])})))).apply(this,arguments)}function R(){return L.apply(this,arguments)}function L(){return(L=n(e().mark((function t(){var a,n,r;return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,a="askany_storage_test",localStorage.setItem(a,"test"),localStorage.removeItem(a),t.abrupt("return",!0);case 8:if(t.prev=8,t.t0=t.catch(0),"QuotaExceededError"!==t.t0.name&&22!==t.t0.code){t.next=43;break}return console.warn("localStorage quota exceeded, performing cleanup..."),t.next=14,B();case 14:if(!t.sent){t.next=18;break}return console.log("Expired messages cleared due to storage quota"),t.abrupt("return",!0);case 18:return t.prev=18,t.next=21,z();case 21:if(n=t.sent,!(Array.isArray(n)&&n.length>50)){t.next=28;break}return r=n.slice(-50),t.next=26,F(r);case 26:return console.log("Kept only last 50 messages due to storage quota"),t.abrupt("return",!0);case 28:t.next=33;break;case 30:t.prev=30,t.t1=t.catch(18),console.error("Failed to cleanup messages:",t.t1);case 33:return t.prev=33,localStorage.removeItem(H()),console.warn("Cleared all chat messages due to storage quota"),t.abrupt("return",!0);case 39:return t.prev=39,t.t2=t.catch(33),console.error("Failed to clear storage:",t.t2),t.abrupt("return",!1);case 43:return console.error("Storage check failed:",t.t0),t.abrupt("return",!1);case 45:case"end":return t.stop()}}),t,null,[[0,8],[18,30],[33,39]])})))).apply(this,arguments)}function J(){return V.apply(this,arguments)}function V(){return(V=n(e().mark((function t(){return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return localStorage.removeItem(H()),Object.keys(localStorage).forEach((function(t){t.startsWith("askany_hide_suggestions_")&&localStorage.removeItem(t)})),i.empty(),t.next=5,et("Hi! I'm your AI assistant. How can I help you today? 👋",!1,!1);case 5:i.scrollTop(i[0].scrollHeight);case 6:case"end":return t.stop()}}),t)})))).apply(this,arguments)}i.on("scroll",(function(){var e=t(this).scrollTop(),a=t(this)[0].scrollHeight,n=t(this).height();j=e+n<a-50})),window.hideContinueShoppingMessage=function(e){t(e).closest(".chat-message").fadeOut(300,(function(){t(this).remove()}));try{z().then((function(t){F(t.filter((function(t){return!(t.text.includes("has been added to your cart")||t.text.includes("Cart Total:")||t.text.includes("✅")&&t.text.includes("Cart Total:"))})))})).catch((function(t){console.error("Failed to load messages for cleanup:",t)}))}catch(t){console.error("Failed to remove cart message from localStorage:",t)}};var W=a.find(".header-actions"),$=t('<button class="action-btn clear-btn" title="Clear Chat History"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"></path><path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"></path><path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"></path></svg></button>');W.prepend($),a.find(".clear-btn").on("click",n(e().mark((function t(){return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!confirm("Are you sure you want to clear your chat history?")){t.next=3;break}return t.next=3,J();case 3:case"end":return t.stop()}}),t)}))));var K,Q=!1;function Y(){i.length>0&&(i.scrollTop(i[0].scrollHeight),j=!1)}function Z(){return X.apply(this,arguments)}function X(){return(X=n(e().mark((function a(){var n;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,z();case 3:if(!((n=e.sent)&&n.length>0)){e.next=11;break}i.empty(),n.forEach((function(e){var a=e.isUser?"user-message":"assistant-message",n=e.isUser||e.isProduct?e.text:U(e.text),r=tt(e.isUser),s=t('<div class="chat-message '+a+'">'+r+'<div class="message-bubble'+(e.isProduct?" product-message":"")+'">'+n+"</div></div>");window.chatEncryption&&ChatEncryption.isSupported()&&s.addClass("encrypted"),i.append(s)})),setTimeout((function(){Y()}),100),Q=!0,e.next=16;break;case 11:if(Q){e.next=16;break}return e.next=14,et("Hi! I'm your AI assistant. How can I help you today? 👋",!1,!1);case 14:Q=!0,setTimeout((function(){Y()}),100);case 16:e.next=26;break;case 18:if(e.prev=18,e.t0=e.catch(0),console.error("Failed to load existing messages:",e.t0),Q){e.next=26;break}return e.next=24,et("Hi! I'm your AI assistant. How can I help you today? 👋",!1,!1);case 24:Q=!0,setTimeout((function(){Y()}),100);case 26:case"end":return e.stop()}}),a,null,[[0,18]])})))).apply(this,arguments)}function tt(t){return t?askanyData.isLoggedIn&&askanyData.userAvatar?'<div class="message-avatar">'+askanyData.userAvatar+"</div>":'<div class="message-avatar"><div class="avatar-icon user-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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></div></div>':askanyData.assistantAvatar?'<div class="message-avatar"><img src="'+askanyData.assistantAvatar+'" alt="Assistant" class="avatar-image" /></div>':'<div class="message-avatar"><div class="avatar-icon assistant-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 8V4H8"></path><rect width="16" height="12" x="4" y="8" rx="2"></rect><path d="M2 14h2"></path><path d="M20 14h2"></path><path d="M15 13v2"></path><path d="M9 13v2"></path></svg></div></div>'}function et(t,e,a,n){return at.apply(this,arguments)}function at(){return(at=n(e().mark((function a(n,r,s,o){var c,l,d,u,p,h;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(c=r?"user-message":"assistant-message",o&&(c+=" system-message"),l=r||s?n:U(n),d=tt(r),u=t('<div class="chat-message '+c+'">'+d+'<div class="message-bubble'+(s?" product-message":"")+(o?" system-bubble":"")+'">'+l+"</div></div>"),i.append(u),o&&(n.includes("🤖")?(p="askany_agent_notified_"+f,localStorage.removeItem(p),setTimeout((function(){u.fadeOut(500,(function(){t(this).remove()}))}),8e3)):n.includes("received by our support team")&&setTimeout((function(){u.fadeOut(500,(function(){t(this).remove()}))}),8e3)),j||i.scrollTop(i[0].scrollHeight),o){e.next=21;break}return e.prev=9,e.next=12,z();case 12:return(h=e.sent).push({text:n,isUser:r,isProduct:s||!1,timestamp:(new Date).getTime()}),e.next=16,F(h);case 16:e.next=21;break;case 18:e.prev=18,e.t0=e.catch(9),console.error("Failed to save message to localStorage:",e.t0);case 21:case"end":return e.stop()}}),a,null,[[9,18]])})))).apply(this,arguments)}function nt(){var e=t('<div class="chat-message assistant-message" id="typing-indicator"><div class="typing-indicator"><span class="typing-dot"></span><span class="typing-dot"></span><span class="typing-dot"></span></div></div>');i.append(e),i.scrollTop(i[0].scrollHeight)}function rt(){t("#typing-indicator").remove()}function st(){t("#search-indicator").remove()}setTimeout(n(e().mark((function t(){return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Z();case 2:case"end":return t.stop()}}),t)}))),1500);var it=!1;function ot(){t("#user-typing-indicator").remove(),it=!1}function ct(e){var a=e.user_name||"Someone",n="remote-typing-"+(e.session_id||"unknown");t("#"+n).remove();var r=t('<div class="chat-message assistant-message remote-typing-indicator" id="'+n+'"><div class="message-bubble"><div class="remote-typing-indicator-content"><span class="typing-text">'+a+' is typing</span><div class="typing-dots"><span class="typing-dot"></span><span class="typing-dot"></span><span class="typing-dot"></span></div></div></div></div>');i.append(r),i.scrollTop(i[0].scrollHeight),setTimeout((function(){t("#"+n).fadeOut(300,(function(){t(this).remove()}))}),5e3)}function lt(e){if("undefined"!=typeof askanyData&&f){var a=localStorage.getItem(x)||"Anonymous User";t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_set_typing",session_id:f,is_typing:e?"1":"0",user_type:"user",user_name:a,nonce:askanyData.nonce},success:function(t){},error:function(t,e,a){console.warn("Failed to send typing indicator:",a)}})}}function dt(t){t&&t.length>0&&(nt(),setTimeout((function(){rt(),t.forEach((function(t,e){setTimeout((function(){console.log("Product data:",t);var e='<div class="product-item enhanced" data-product-id="'+(t.id||"")+'">';e+='<div class="product-image">';var a=t.image_url||t.image;a&&""!==a&&"undefined"!==a?(e+='<img src="'+a+'" alt="'+(n=t.name||t.title||"Product")+"\" onerror=\"this.style.display='none'; this.nextElementSibling.style.display='flex';\">",e+='<div class="image-placeholder" style="display: none;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg></div>'):e+='<div class="image-placeholder"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg></div>',e+="</div>",e+='<div class="product-details">';var n=t.name||t.title||"Product Name Not Available";if(e+='<div class="product-title"><a href="'+(t.url||"#")+'">'+n+"</a></div>",t.sku&&""!==t.sku&&"undefined"!==t.sku&&(e+='<div class="product-sku">SKU: '+t.sku+"</div>"),t.short_description&&""!==t.short_description&&"undefined"!==t.short_description){var r=t.short_description.substring(0,120);t.short_description.length>120&&(r+="..."),e+='<div class="product-description">'+r+"</div>"}var s=t.price_html||t.price;if(s&&""!==s&&"undefined"!==s&&(e+='<div class="product-price">'+s,!0!==t.on_sale&&"true"!==t.on_sale||(e+=' <span class="sale-badge">ON SALE</span>'),e+="</div>"),t.stock_status&&""!==t.stock_status&&"undefined"!==t.stock_status){var i="instock"===t.stock_status?"in-stock":"out-of-stock",o="instock"===t.stock_status?"In Stock":"Out of Stock";t.stock_quantity&&t.stock_quantity>0&&(o+=" ("+t.stock_quantity+" available)"),e+='<div class="product-stock '+i+'">'+o+"</div>"}t.categories&&Array.isArray(t.categories)&&t.categories.length>0&&(e+='<div class="product-categories">Categories: '+t.categories.join(", ")+"</div>"),t.average_rating&&t.reviews_count&&t.reviews_count>0&&(e+='<div class="product-rating">★ '+t.average_rating+"/5 ("+t.reviews_count+" reviews)</div>"),e+='<div class="product-actions">',t.id&&(e+='<button class="view-button ajax-view-product" data-product-id="'+t.id+'">View Details</button>'),t.id&&"instock"===t.stock_status&&(e+='<button class="add-to-cart-button ajax-add-to-cart" data-product-id="'+t.id+'">Add to Cart</button>'),M(e+="</div></div></div>",!1,!0)}),800*e)}))}),1e3))}function ut(t){return t?((!(t=(t=(t=t.replace(/\d+\.\s*\*\*[^*]+\*\*[^\n]*(?:\n[^\n]*)*?(?=\d+\.|$)/g,"")).replace(/\n{3,}/g,"\n\n")).trim())||t.length<20)&&(t="I found some great products for you! Check them out below."),t):t}function pt(){return ht.apply(this,arguments)}function ht(){return(ht=n(e().mark((function n(){var r;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,B();case 3:e.sent,e.next=10;break;case 7:e.prev=7,e.t0=e.catch(0),console.error("Error clearing expired messages:",e.t0);case 10:return a.hasClass("inline")||("open"===w?(s.show(),P()):"minimized"===w?(s.show().addClass("minimized"),a.find(".askany-content-wrapper").hide(),a.find(".askany-main-tabs").hide(),v=!0,g.html('<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><path d="M9 9h6v6H9z"></path></svg>'),g.attr("title","Restore"),A()):(s.hide(),A())),e.next=13,z();case 13:if(!((r=e.sent).length>0)){e.next=20;break}r.forEach((function(e){var a=e.isUser||e.isProduct?e.text:U(e.text),n=t('<div class="chat-message '+(e.isUser?"user-message":"assistant-message")+'"><div class="message-bubble'+(e.isProduct?" product-message":"")+'">'+a+"</div></div>");i.append(n)})),setTimeout((function(){Y()}),100),Q=!0,e.next=25;break;case 20:if("open"!==w&&!a.hasClass("inline")||Q){e.next=25;break}return e.next=23,et("Hi! I'm your AI assistant. How can I help you today? 👋",!1,!1);case 23:Q=!0,setTimeout((function(){Y()}),100);case 25:("open"===w||a.hasClass("inline"))&&gt()&&setTimeout((function(){a.find(".suggested-prompts").slideDown()}),1e3);case 26:case"end":return e.stop()}}),n,null,[[0,7]])})))).apply(this,arguments)}function gt(){return!localStorage.getItem("askany_hide_suggestions_"+f)}function ft(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||window.innerWidth<=768}function mt(t){var e=window.innerWidth,a=window.innerHeight,n=Math.min(e-40,380);return t?{width:n+"px",height:Math.min(a-60,700)+"px"}:{width:"325px",height:"522px"}}function vt(t,e){return yt.apply(this,arguments)}function yt(){return(yt=n(e().mark((function a(n,r){var s,i;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,new Promise((function(e,a){t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_get_session_info",session_id:f,nonce:askanyData.nonce},success:function(t){var n;t.success?e(t.data):a(new Error((null===(n=t.data)||void 0===n?void 0:n.message)||"Failed to get session info"))},error:function(){a(new Error("Network error"))}})}));case 3:if(!(s=e.sent)||s.is_ai_handled||!s.has_agent){e.next=12;break}return rt(),i="askany_agent_notified_"+f,localStorage.getItem(i)||(et("Your message has been received by our support team. An agent will respond shortly.",!1,!1,!0),localStorage.setItem(i,"true")),e.next=11,wt(n);case 11:return e.abrupt("return");case 12:return i="askany_agent_notified_"+f,localStorage.removeItem(i),e.next=16,kt(n);case 16:e.next=23;break;case 18:return e.prev=18,e.t0=e.catch(0),console.error("Error checking agent mode:",e.t0),e.next=23,kt(n);case 23:case"end":return e.stop()}}),a,null,[[0,18]])})))).apply(this,arguments)}function wt(e){return new Promise((function(a,n){t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_save_user_message",session_id:f,message:e,nonce:askanyData.nonce},success:function(t){a(t)},error:function(){n(new Error("Failed to save message"))}})}))}function kt(t){return bt.apply(this,arguments)}function bt(){return bt=n(e().mark((function a(r){var s,i,o,c,l,d;return e().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:try{s=r,i=f,window.chatEncryption&&ChatEncryption.isSupported()?(s=btoa(unescape(encodeURIComponent(r))),f&&(i=btoa(unescape(encodeURIComponent(f))))):(s=r,i=f),o=askanyData.apiEndpoint||askanyData.ajaxUrl,It.length>0?((c=new FormData).append("action","askany_chat_response_with_files"),c.append("nonce",askanyData.nonce),c.append("message",s),c.append("session_id",i),c.append("api_provider",y),c.append("encrypted",window.chatEncryption&&ChatEncryption.isSupported()),(l=localStorage.getItem(x))&&c.append("user_name",l),It.forEach((function(t,e){c.append("attachments[]",t.file),c.append("attachment_names[]",t.name),c.append("attachment_types[]",t.type)})),t.ajax({url:askanyData.ajaxUrl,type:"POST",data:c,processData:!1,contentType:!1,dataType:"json",success:function(){var t=n(e().mark((function t(a){return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(It=[],Ot(),!a.success){t.next=7;break}return t.next=5,_t(a.data,r);case 5:t.next=8;break;case 7:St(a.data&&a.data.message);case 8:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),error:function(){St()}})):askanyData.apiEndpoint?(d=JSON.stringify({query:s,session_id:i,api_provider:y,_wpnonce:askanyData.nonce,encrypted:window.chatEncryption&&ChatEncryption.isSupported()}),t.ajax({url:o,type:"POST",data:d,contentType:"application/json",dataType:"json",success:function(){var t=n(e().mark((function t(a){return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,_t(a,r);case 2:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),error:function(){St()}})):(d={action:"askany_chat_response",nonce:askanyData.nonce,message:s,session_id:i,api_provider:y,encrypted:window.chatEncryption&&ChatEncryption.isSupported()},(l=localStorage.getItem(x))&&(d.user_name=l),t.post(o,d,function(){var t=n(e().mark((function t(a){return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!a.success){t.next=5;break}return t.next=3,_t(a.data,r);case 3:t.next=6;break;case 5:St(a.data&&a.data.message);case 6:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()).fail((function(){St()})))}catch(t){console.error("Encryption error:",t),St()}case 1:case"end":return a.stop()}}),a)}))),bt.apply(this,arguments)}function _t(t,e){return xt.apply(this,arguments)}function xt(){return(xt=n(e().mark((function a(n,r){var s,o,c,l;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,s=n,!(n.encrypted&&window.chatEncryption&&ChatEncryption.isSupported())){e.next=18;break}if(!n.message){e.next=8;break}return o=window.chatEncryption.deobfuscateData(n.message),e.next=7,window.chatEncryption.decrypt(o);case 7:s.message=e.sent;case 8:if(!n.session_id){e.next=13;break}return c=window.chatEncryption.deobfuscateData(n.session_id),e.next=12,window.chatEncryption.decrypt(c);case 12:s.session_id=e.sent;case 13:if(!n.related_products){e.next=18;break}return l=window.chatEncryption.deobfuscateData(n.related_products),e.next=17,window.chatEncryption.decryptObject(l);case 17:s.related_products=e.sent;case 18:s.search_performed?(rt(),a=void 0,a=t('<div class="chat-message assistant-message" id="search-indicator"><div class="search-indicator"><svg class="search-icon" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.35-4.35"></path></svg><span class="search-text">Searching the internet...</span><div class="search-dots"><span class="typing-dot"></span><span class="typing-dot"></span><span class="typing-dot"></span></div></div></div>'),i.append(a),i.scrollTop(i[0].scrollHeight),At(r,s)):(rt(),s.session_id&&(f=s.session_id),s.message&&et(ut(s.message),!1,!1),s.related_products&&s.related_products.length>0&&dt(s.related_products)),e.next=25;break;case 21:e.prev=21,e.t0=e.catch(0),console.error("Response decryption error:",e.t0),St();case 25:case"end":return e.stop()}var a}),a,null,[[0,21]])})))).apply(this,arguments)}function St(t){rt(),et(t||"Sorry, I couldn't process your request. Please try again later.",!1,!1)}l.on("input keyup",(function(){t(this).val().trim().length>0?(it||(it=!0,function(){if(!t("#user-typing-indicator").length){var e=t('<div class="chat-message user-message" id="user-typing-indicator"><div class="message-bubble"><div class="user-typing-indicator"><span class="typing-text">You are typing</span><div class="typing-dots"><span class="typing-dot"></span><span class="typing-dot"></span><span class="typing-dot"></span></div></div></div></div>');i.append(e),i.scrollTop(i[0].scrollHeight)}}(),lt(!0)),clearTimeout(K),K=setTimeout((function(){ot(),lt(!1)}),2e3)):(ot(),clearTimeout(K),lt(!1))})),c.on("submit",(function(){ot(),clearTimeout(K),lt(!1)})),l.on("blur",(function(){setTimeout((function(){ot(),clearTimeout(K)}),1e3)})),p.on("click",(function(){var e=t(this).text();l.val(e),c.submit()})),a.find(".close-prompts-btn").on("click",(function(){a.find(".suggested-prompts").slideUp(300,(function(){localStorage.setItem("askany_hide_suggestions_"+f,"true")}))})),setTimeout(n(e().mark((function t(){return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,pt();case 2:setTimeout((function(){(s.is(":visible")||a.hasClass("inline"))&&Y()}),200),gt()?a.find(".suggested-prompts").show():a.find(".suggested-prompts").hide(),s.is(":visible")||a.find(".notification-badge").fadeIn(),gt()&&setTimeout((function(){a.find(".suggested-prompts").slideDown()}),1e3),P();case 7:case"end":return t.stop()}}),t)}))),500),r.on("click",(function(){s.fadeToggle(300,(function(){s.is(":visible")?(localStorage.setItem("askany_widget_state","open"),a.find(".notification-badge").fadeOut(),i.is(":empty")&&!Q&&(et("Hi! I'm your AI assistant. How can I help you today? 👋",!1,!1),Q=!0,gt()&&setTimeout((function(){a.find(".suggested-prompts").slideDown()}),1e3)),setTimeout((function(){Y()}),100),P(),l.focus()):(localStorage.setItem("askany_widget_state","closed"),A())}))})),a.find(".askany-chat-header").on("click",(function(e){if(v&&!t(e.target).closest(".header-actions").length){var n=a.find(".askany-content-wrapper"),r=a.find(".askany-main-tabs");s.removeClass("minimized"),r.slideDown(400),n.slideDown(400,(function(){v=!1,localStorage.setItem("askany_widget_state","open"),g.html('<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line></svg>'),g.attr("title","Minimize"),P(),l.focus()}))}})),a.find(".askany-chat-close").on("click",(function(){s.fadeOut(300,(function(){localStorage.setItem("askany_widget_state","closed"),A()}))})),g.on("click",(function(){var t=a.find(".askany-content-wrapper"),e=a.find(".askany-main-tabs");v?(s.removeClass("minimized"),e.slideDown(400),t.slideDown(400,(function(){v=!1,localStorage.setItem("askany_widget_state","open"),g.html('<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line></svg>'),g.attr("title","Minimize"),P(),l.focus()}))):(t.slideUp(400),e.slideUp(400,(function(){v=!0,localStorage.setItem("askany_widget_state","minimized"),s.addClass("minimized"),g.html('<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><path d="M9 9h6v6H9z"></path></svg>'),g.attr("title","Restore"),A()})))})),h.on("click",(function(){if(m=!m,ft()){var t=mt(m);m?(s.addClass("expanded mobile-expanded").animate({height:t.height},300).css({width:t.width,"max-height":"95vh"}),h.html('<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 3H5a2 2 0 0 0-2 2v4"></path><path d="M15 3h4a2 2 0 0 1 2 2v4"></path><path d="M9 21H5a2 2 0 0 1-2-2v-4"></path><path d="M15 21h4a2 2 0 0 0 2-2v-4"></path></svg>')):(s.removeClass("expanded mobile-expanded").animate({height:t.height},300).css({width:t.width,"max-height":"80vh"}),h.html('<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 3h6v6"></path><path d="M9 21H3v-6"></path><path d="M21 3l-7 7"></path><path d="M3 21l7-7"></path></svg>'))}else m?(s.addClass("expanded").animate({width:"560px",height:"650px"}),h.html('<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 3H5a2 2 0 0 0-2 2v4"></path><path d="M15 3h4a2 2 0 0 1 2 2v4"></path><path d="M9 21H5a2 2 0 0 1-2-2v-4"></path><path d="M15 21h4a2 2 0 0 0 2-2v-4"></path></svg>')):(s.removeClass("expanded").animate({width:"460px",height:"573px"}),h.html('<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 3h6v6"></path><path d="M9 21H3v-6"></path><path d="M21 3l-7 7"></path><path d="M3 21l7-7"></path></svg>'))})),t(window).on("resize",(function(){if(ft()&&m){var t=mt(!0);s.css({width:t.width,height:t.height})}})),d.on("click",(function(){u.toggle()})),t(document).on("click",(function(e){t(e.target).closest(".emoji-btn, .emoji-picker").length||u.hide()})),a.find(".emoji").on("click",(function(){var e=t(this).data("emoji");l.val(l.val()+e),u.hide(),l.focus()})),c.on("submit",function(){var t=n(e().mark((function t(n){var r,s;return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n.preventDefault(),""!==(r=l.val().trim())||0!==It.length){t.next=4;break}return t.abrupt("return");case 4:return""===r&&It.length>0&&(r="Please analyze the attached file(s)."),s=r,It.length>0&&(s+="\n📎 "+It.length+" file(s) attached"),et(s,!0,!1),l.val("").focus(),a.find(".suggested-prompts").slideUp(),o.hide().empty(),nt(),t.next=14,vt(r,s);case 14:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}());var It=[],Et=["image/jpeg","image/jpg","image/png","image/gif","image/webp"],Dt=[].concat(Et,["application/pdf"]),Ct=t('<input type="file" multiple accept="image/*,.pdf" style="display: none;">');a.append(Ct);var Tt=t('<div class="attachment-preview-container" style="display: none;"></div>');function jt(t){var e=[],a=[];t.forEach((function(t){Dt.includes(t.type)?t.size>10485760?a.push(t.name+" - File too large. Maximum size is 10MB."):It.some((function(e){return e.name===t.name&&e.size===t.size}))?a.push(t.name+" - File already attached."):e.push(t):a.push(t.name+" - Unsupported file type. Only images (JPEG, PNG, GIF, WebP) and PDF files are supported.")})),a.length>0&&et("❌ File attachment errors:\n• "+a.join("\n• "),!1,!1),e.forEach((function(t){!function(t){var e={id:"file_"+Date.now()+"_"+Math.random().toString(36).substr(2,9),file:t,name:t.name,size:t.size,type:t.type,preview:null};if(Et.includes(t.type)){var a=new FileReader;a.onload=function(t){e.preview=t.target.result,Ot()},a.readAsDataURL(t)}It.push(e),et("📎 Attached: "+t.name+" ("+Pt(t.size)+")",!1,!1)}(t)})),Ot()}function Ot(){var t=a.find(".attachment-btn");if(It.length>0?t.addClass("has-files").attr("data-count",It.length):t.removeClass("has-files").removeAttr("data-count"),0!==It.length){var e='<div class="attachment-preview-header">📎 Attached Files ('+It.length+"):</div>";e+='<div class="attachment-preview-list">',It.forEach((function(t){e+='<div class="attachment-preview-item" data-file-id="'+t.id+'">',t.preview?(e+='<div class="attachment-preview-image">',e+='<img src="'+t.preview+'" alt="'+t.name+'">',e+="</div>"):(e+='<div class="attachment-preview-icon">',e+='<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14,2 14,8 20,8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10,9 9,9 8,9"></polyline></svg>',e+="</div>"),e+='<div class="attachment-preview-info">',e+='<div class="attachment-preview-name">'+t.name+"</div>",e+='<div class="attachment-preview-size">'+Pt(t.size)+"</div>",e+="</div>",e+='<button class="attachment-remove-btn" data-file-id="'+t.id+'" title="Remove attachment">',e+="X",e+="</button>",e+="</div>"})),e+="</div>",e+='<div class="attachment-preview-actions">',e+='<button class="attachment-clear-all-btn">Clear All</button>',e+="</div>",Tt.html(e).show()}else Tt.hide().empty()}function Pt(t){if(0===t)return"0 Bytes";var e=Math.floor(Math.log(t)/Math.log(1024));return parseFloat((t/Math.pow(1024,e)).toFixed(2))+" "+["Bytes","KB","MB","GB"][e]}function At(e,a){t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_search_internet",query:e,session_id:f,nonce:askanyData.nonce},success:function(t){st(),t.success?(t.data.session_id&&(f=t.data.session_id),t.data.message&&et(ut(t.data.message),!1,!1),a.related_products&&a.related_products.length>0&&dt(a.related_products)):et(t.data.message||"I searched the internet but couldn't find specific information. Please try rephrasing your question.",!1,!1)},error:function(){st(),et("I'm sorry, I couldn't search the internet right now. Please try again later.",!1,!1)}})}i.after(Tt),a.find(".attachment-btn").on("click",(function(){Ct.click()})),Ct.on("change",(function(e){jt(Array.from(e.target.files)),t(this).val("")})),i.on("dragover",(function(e){e.preventDefault(),e.stopPropagation(),t(this).addClass("drag-over")})),i.on("dragleave",(function(e){e.preventDefault(),e.stopPropagation(),t(this).removeClass("drag-over")})),i.on("drop",(function(e){e.preventDefault(),e.stopPropagation(),t(this).removeClass("drag-over"),jt(Array.from(e.originalEvent.dataTransfer.files))})),Tt.on("click",".attachment-remove-btn",(function(){var e=t(this).data("file-id");It=It.filter((function(t){return t.id!==e})),Ot(),et("🗑️ Removed attachment",!1,!1)})),Tt.on("click",".attachment-clear-all-btn",(function(){It=[],Ot(),et("🗑️ Cleared all attachments",!1,!1)})),i.on("click",".ajax-view-product",(function(e){e.preventDefault();var a=t(this).data("product-id");a&&(t(this).prop("disabled",!0).text("Loading..."),t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_get_product_details",product_id:a,nonce:askanyData.nonce},success:function(e){e.success?function(e){var a='<div class="askany-product-modal-overlay">';if(a+='<div class="askany-product-modal">',a+='<div class="modal-header">',a+="<h3>"+(e.name||"Product Details")+"</h3>",a+='<button class="modal-close-btn">&times;</button>',a+="</div>",a+='<div class="modal-body">',e.image_url&&(a+='<div class="modal-product-image">',a+='<img src="'+e.image_url+'" alt="'+e.name+'">',a+="</div>"),a+='<div class="modal-product-details">',e.price_html&&(a+='<div class="modal-product-price">'+e.price_html,e.on_sale&&(a+=' <span class="sale-badge">ON SALE</span>'),a+="</div>"),e.sku&&(a+='<div class="modal-product-sku">SKU: '+e.sku+"</div>"),e.stock_status){var n="instock"===e.stock_status?"in-stock":"out-of-stock",r="instock"===e.stock_status?"In Stock":"Out of Stock";e.stock_quantity&&e.stock_quantity>0&&(r+=" ("+e.stock_quantity+" available)"),a+='<div class="modal-product-stock '+n+'">'+r+"</div>"}if(e.description&&(a+='<div class="modal-product-description">'+e.description+"</div>"),e.categories&&e.categories.length>0&&(a+='<div class="modal-product-categories">Categories: '+e.categories.join(", ")+"</div>"),e.average_rating&&e.reviews_count>0&&(a+='<div class="modal-product-rating">★ '+e.average_rating+"/5 ("+e.reviews_count+" reviews)</div>"),e.attributes&&Object.keys(e.attributes).length>0){for(var s in a+='<div class="modal-product-attributes">',a+="<h4>Product Attributes:</h4>",a+="<ul>",e.attributes)a+="<li><strong>"+s+":</strong> "+e.attributes[s]+"</li>";a+="</ul>",a+="</div>"}a+="</div>",a+="</div>",a+='<div class="modal-footer">',"instock"===e.stock_status&&(a+='<div class="modal-quantity-selector">',a+='<label for="modal-quantity">Quantity:</label>',a+='<input type="number" id="modal-quantity" min="1" max="'+(e.stock_quantity||999)+'" value="1">',a+="</div>",a+='<button class="modal-add-to-cart-btn ajax-add-to-cart" data-product-id="'+e.id+'">Add to Cart</button>'),e.url&&(a+='<a href="'+e.url+'" class="modal-view-product-btn" target="_blank">View Full Product Page</a>'),a+="</div>",a+="</div>",a+="</div>",t("body").append(a),t(".askany-product-modal-overlay").fadeIn(300)}(e.data):et("❌ Error loading product details: "+(e.data.message||"Unknown error"),!1,!1)},error:function(){et("❌ Failed to load product details. Please try again.",!1,!1)},complete:function(){t('.ajax-view-product[data-product-id="'+a+'"]').prop("disabled",!1).text("View Details")}}))})),i.on("click",".ajax-add-to-cart",(function(e){e.preventDefault();var a=t(this).data("product-id"),n=t(this).data("quantity")||1;if(a){var r=t(this),s=r.text();r.prop("disabled",!0).text("Adding..."),t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_add_to_cart",product_id:a,quantity:n,nonce:askanyData.nonce},success:function(e){if(e.success){e.data.message;var a=e.data.cart_url||("undefined"!=typeof wc_add_to_cart_params?wc_add_to_cart_params.cart_url:"/cart");!function(e,a,n,r,s){var o='<div class="cart-success-message">';o+='<div class="success-text">✅ '+e+"</div>",n&&(o+='<div class="cart-summary">',o+='<div class="cart-total">Cart Total: '+n+"</div>",o+="</div>"),o+='<div class="cart-actions">',o+='<a href="'+r+'" class="view-cart-btn" target="_blank">🛒 View Cart ('+a+")</a>",s&&(o+='<a href="'+s+'" class="checkout-btn" target="_blank">💳 Checkout Now</a>'),o+='<button class="continue-shopping-btn" onclick="hideContinueShoppingMessage(this)">🛍️ Continue Chat</button>',o+="</div>";var c=t('<div class="chat-message assistant-message"><div class="message-bubble">'+(o+="</div>")+"</div></div>");i.append(c),j||i.scrollTop(i[0].scrollHeight);try{z().then((function(t){t.push({text:"✅ "+e+" - Cart Total: "+(n||"N/A"),isUser:!1,isProduct:!1,timestamp:(new Date).getTime()}),F(t)}))}catch(t){console.error("Failed to save cart success message to localStorage:",t)}}(e.data.message,e.data.cart_count,e.data.cart_total,a,e.data.checkout_url),r.text("Added!").addClass("added"),setTimeout((function(){r.text(s).removeClass("added")}),3e3),e.data.cart_count&&(n=e.data.cart_count,t(".cart-count, .cart-contents-count, .woocommerce-cart-count").text(n),"undefined"!=typeof wc_add_to_cart_params&&t(document.body).trigger("wc_fragment_refresh"))}else et("❌ Error adding to cart: "+(e.data.message||"Unknown error"),!1,!1);var n},error:function(){et("❌ Failed to add product to cart. Please try again.",!1,!1)},complete:function(){r.hasClass("added")?r.prop("disabled",!1):r.prop("disabled",!1).text(s)}})}})),t("body").on("click",".modal-close-btn, .askany-product-modal-overlay",(function(e){e.target===this&&t(".askany-product-modal-overlay").fadeOut(300,(function(){t(this).remove()}))})),t("body").on("click",".modal-add-to-cart-btn",(function(e){e.preventDefault();var a=t("#modal-quantity").val()||1;t(this).data("quantity",a),t(this).trigger("click")}))}))}))})();
     1(()=>{function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(){"use strict";e=function(){return n};var a,n={},s=Object.prototype,r=s.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",c=o.asyncIterator||"@@asyncIterator",d=o.toStringTag||"@@toStringTag";function l(t,e,a,n){return Object.defineProperty(t,e,{value:a,enumerable:!n,configurable:!n,writable:!n})}try{l({},"")}catch(a){l=function(t,e,a){return t[e]=a}}function u(t,e,n,s){var r=e&&e.prototype instanceof g?e:g,o=Object.create(r.prototype);return l(o,"_invoke",function(t,e,n){var s=1;return function(r,o){if(3===s)throw Error("Generator is already running");if(4===s){if("throw"===r)throw o;return{value:a,done:!0}}for(n.method=r,n.arg=o;;){var i=n.delegate;if(i){var c=x(i,n);if(c){if(c===h)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(1===s)throw s=4,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);s=3;var d=p(t,e,n);if("normal"===d.type){if(s=n.done?4:2,d.arg===h)continue;return{value:d.arg,done:n.done}}"throw"===d.type&&(s=4,n.method="throw",n.arg=d.arg)}}}(t,n,new D(s||[])),!0),o}function p(t,e,a){try{return{type:"normal",arg:t.call(e,a)}}catch(t){return{type:"throw",arg:t}}}n.wrap=u;var h={};function g(){}function f(){}function m(){}var v={};l(v,i,(function(){return this}));var y=Object.getPrototypeOf,w=y&&y(y(E([])));w&&w!==s&&r.call(w,i)&&(v=w);var k=m.prototype=g.prototype=Object.create(v);function b(t){["next","throw","return"].forEach((function(e){l(t,e,(function(t){return this._invoke(e,t)}))}))}function _(e,a){function n(s,o,i,c){var d=p(e[s],e,o);if("throw"!==d.type){var l=d.arg,u=l.value;return u&&"object"==t(u)&&r.call(u,"__await")?a.resolve(u.__await).then((function(t){n("next",t,i,c)}),(function(t){n("throw",t,i,c)})):a.resolve(u).then((function(t){l.value=t,i(l)}),(function(t){return n("throw",t,i,c)}))}c(d.arg)}var s;l(this,"_invoke",(function(t,e){function r(){return new a((function(a,s){n(t,e,a,s)}))}return s=s?s.then(r,r):r()}),!0)}function x(t,e){var n=e.method,s=t.i[n];if(s===a)return e.delegate=null,"throw"===n&&t.i.return&&(e.method="return",e.arg=a,x(t,e),"throw"===e.method)||"return"!==n&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+n+"' method")),h;var r=p(s,t.i,e.arg);if("throw"===r.type)return e.method="throw",e.arg=r.arg,e.delegate=null,h;var o=r.arg;return o?o.done?(e[t.r]=o.value,e.next=t.n,"return"!==e.method&&(e.method="next",e.arg=a),e.delegate=null,h):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,h)}function S(t){this.tryEntries.push(t)}function I(t){var e=t[4]||{};e.type="normal",e.arg=a,t[4]=e}function D(t){this.tryEntries=[[-1]],t.forEach(S,this),this.reset(!0)}function E(e){if(null!=e){var n=e[i];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var s=-1,o=function t(){for(;++s<e.length;)if(r.call(e,s))return t.value=e[s],t.done=!1,t;return t.value=a,t.done=!0,t};return o.next=o}}throw new TypeError(t(e)+" is not iterable")}return f.prototype=m,l(k,"constructor",m),l(m,"constructor",f),f.displayName=l(m,d,"GeneratorFunction"),n.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===f||"GeneratorFunction"===(e.displayName||e.name))},n.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,m):(t.__proto__=m,l(t,d,"GeneratorFunction")),t.prototype=Object.create(k),t},n.awrap=function(t){return{__await:t}},b(_.prototype),l(_.prototype,c,(function(){return this})),n.AsyncIterator=_,n.async=function(t,e,a,s,r){void 0===r&&(r=Promise);var o=new _(u(t,e,a,s),r);return n.isGeneratorFunction(e)?o:o.next().then((function(t){return t.done?t.value:o.next()}))},b(k),l(k,d,"Generator"),l(k,i,(function(){return this})),l(k,"toString",(function(){return"[object Generator]"})),n.keys=function(t){var e=Object(t),a=[];for(var n in e)a.unshift(n);return function t(){for(;a.length;)if((n=a.pop())in e)return t.value=n,t.done=!1,t;return t.done=!0,t}},n.values=E,D.prototype={constructor:D,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=a,this.done=!1,this.delegate=null,this.method="next",this.arg=a,this.tryEntries.forEach(I),!t)for(var e in this)"t"===e.charAt(0)&&r.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=a)},stop:function(){this.done=!0;var t=this.tryEntries[0][4];if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(a){o.type="throw",o.arg=t,e.next=a}for(var s=e.tryEntries.length-1;s>=0;--s){var r=this.tryEntries[s],o=r[4],i=this.prev,c=r[1],d=r[2];if(-1===r[0])return n("end"),!1;if(!c&&!d)throw Error("try statement without catch or finally");if(null!=r[0]&&r[0]<=i){if(i<c)return this.method="next",this.arg=a,n(c),!0;if(i<d)return n(d),!1}}},abrupt:function(t,e){for(var a=this.tryEntries.length-1;a>=0;--a){var n=this.tryEntries[a];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var s=n;break}}s&&("break"===t||"continue"===t)&&s[0]<=e&&e<=s[2]&&(s=null);var r=s?s[4]:{};return r.type=t,r.arg=e,s?(this.method="next",this.next=s[2],h):this.complete(r)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),h},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var a=this.tryEntries[e];if(a[2]===t)return this.complete(a[4],a[3]),I(a),h}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var a=this.tryEntries[e];if(a[0]===t){var n=a[4];if("throw"===n.type){var s=n.arg;I(a)}return s}}throw Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={i:E(t),r:e,n},"next"===this.method&&(this.arg=a),h}},n}function a(t,e,a,n,s,r,o){try{var i=t[r](o),c=i.value}catch(t){return void a(t)}i.done?e(c):Promise.resolve(c).then(n,s)}function n(t){return function(){var e=this,n=arguments;return new Promise((function(s,r){var o=t.apply(e,n);function i(t){a(o,s,r,i,c,"next",t)}function c(t){a(o,s,r,i,c,"throw",t)}i(void 0)}))}}jQuery(document).ready((function(t){t(".askany-chat-widget").each((function(){var a=t(this),s=a.find(".askany-chat-toggle"),r=a.find(".askany-chat-container"),o=a.find(".askany-chat-messages"),i=a.find(".askany-chat-products"),c=a.find("#askany-chat-form"),d=c.find("input"),l=a.find(".emoji-btn"),u=a.find(".emoji-picker"),p=a.find(".prompt-item"),h=a.find(".expand-btn"),g=a.find(".minimize-btn"),f="",m=!1,v=!1,y=a.data("api-provider"),w=(a.data("fallback-enabled"),localStorage.getItem("askany_widget_state")||"closed");a.find(".main-tab-btn").on("click",(function(){var e=t(this).data("tab");a.find(".main-tab-btn").removeClass("active"),t(this).addClass("active"),a.find(".askany-main-tab-content").hide(),a.find("#"+e+"-tab").show(),"messages"===e?(A(),setTimeout((function(){Y()}),100)):"home"===e&&P()})),0===a.find(".askany-main-tabs").length&&A(),a.find(".tab-btn").on("click",(function(){var e=t(this).data("tab");a.find(".tab-btn").removeClass("active"),t(this).addClass("active"),a.find(".askany-chat-tab-content").hide(),a.find("#"+e+"-tab").show(),"chat"===e&&setTimeout((function(){Y()}),100)})),a.find(".faq-question").on("click",(function(){var e=t(this).closest(".faq-item").find(".faq-answer"),n=t(this).find("svg");e.is(":visible")?(e.slideUp(),n.css("transform","rotate(0deg)")):(a.find(".faq-answer").slideUp(),a.find(".faq-question svg").css("transform","rotate(0deg)"),e.slideDown(),n.css("transform","rotate(180deg)"))})),a.find(".askany-chat-tabs").length&&a.addClass("with-tabs");var k=function(){var t=localStorage.getItem("askany_user_id");return t||(t="user_"+Math.random().toString(36).substr(2,9)+"_"+Date.now(),localStorage.setItem("askany_user_id",t)),t}(),b="askany_browser_id",_="askany_chat_session_id",x="askany_username",S=function(){var t=localStorage.getItem(b);return t||(t="browser_"+Math.random().toString(36).substr(2,9)+"_"+Date.now(),localStorage.setItem(b,t)),t}();function I(e,a){var n=localStorage.getItem("askany_chat_messages_"+e);n&&(localStorage.setItem("askany_chat_messages_"+a,n),localStorage.removeItem("askany_chat_messages_"+e)),localStorage.setItem(_,a),f=a;var s=localStorage.getItem("askany_hide_suggestions_"+e);s&&(localStorage.setItem("askany_hide_suggestions_"+a,s),localStorage.removeItem("askany_hide_suggestions_"+e)),function(e,a){"undefined"!=typeof askanyData&&t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_merge_session",session_id:e,old_session_id:a,nonce:askanyData.nonce},success:function(t){t.success&&t.data&&t.data.user_name&&(localStorage.setItem(x,t.data.user_name),console.log("Updated username after session merge:",t.data.user_name))},error:function(t){console.warn("Failed to notify server about session merge:",t)}})}(a,e)}function D(){return(D=n(e().mark((function n(){var s;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,!window.chatEncryption||!ChatEncryption.isSupported()){e.next=11;break}return e.next=4,window.chatEncryption.initializeKey();case 4:a.addClass("encrypted"),s=t('<div class="encryption-status">Encrypted</div>'),a.find(".askany-chat-container").append(s),localStorage.getItem("askany_encryption_notice_shown")||setTimeout((function(){var e=t('<div class="security-notice">Your messages are encrypted for security</div>');o.append(e),o.scrollTop(o[0].scrollHeight),setTimeout((function(){e.fadeOut(500,(function(){t(this).remove()}))}),5e3),localStorage.setItem("askany_encryption_notice_shown","true")}),1e3),console.log("Chat encryption initialized successfully"),e.next=15;break;case 11:console.warn("Chat encryption not supported in this browser"),s=t('<div class="encryption-status disabled">Unencrypted</div>'),a.find(".askany-chat-container").append(s),localStorage.getItem("askany_encryption_warning_shown")||setTimeout((function(){var e=t('<div class="security-notice warning">Encryption not available in this browser</div>');o.append(e),o.scrollTop(o[0].scrollHeight),setTimeout((function(){e.fadeOut(500,(function(){t(this).remove()}))}),7e3),localStorage.setItem("askany_encryption_warning_shown","true")}),1e3);case 15:e.next=22;break;case 17:e.prev=17,e.t0=e.catch(0),console.error("Failed to initialize encryption:",e.t0),s=t('<div class="encryption-status disabled">Error</div>'),a.find(".askany-chat-container").append(s);case 22:case"end":return e.stop()}}),n,null,[[0,17]])})))).apply(this,arguments)}!function(){var t=localStorage.getItem(_),e=localStorage.getItem(x);if("undefined"!=typeof askanyData&&askanyData.isLoggedIn&&askanyData.currentUserId){var n="askany_user_session_"+askanyData.currentUserId,s=localStorage.getItem(n);if(s)console.log("Reusing existing user session:",s),f=s,localStorage.setItem(_,s),t&&t.startsWith("anon_")&&t!==s&&(console.log("Merging anonymous session",t,"into existing user session",s),I(t,s));else{var r="user_"+askanyData.currentUserId+"_"+Date.now();t&&t.startsWith("anon_")?(console.log("User logged in, merging session from",t,"to",r),I(t,r)):(f=r,localStorage.setItem(_,r)),localStorage.setItem(n,r),console.log("Created new user session:",r)}askanyData.currentUserName?(localStorage.setItem(x,askanyData.currentUserName),console.log("Set logged-in username:",askanyData.currentUserName)):localStorage.setItem(x,askanyData.currentUserLogin||"Logged-in User"),function(t){var e,n=a.find(".welcome-title");if(n.length>0){var s='<span class="wave-emoji">👋</span>';t?n.html('Hi <span class="user-name">'+(e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"},t.replace(/[&<>"']/g,(function(t){return e[t]}))+"</span> ")+s):n.html("Hi "+s)}}(askanyData.currentUserName||askanyData.currentUserLogin)}else if(t&&(t.startsWith("anon_")||t.startsWith("browser_"))?(f=t,console.log("Using existing anonymous session:",f)):(f="anon_"+S,localStorage.setItem(_,f),console.log("Created new anonymous session:",f)),!e){var o="Anonymous_"+S.split("_")[1].substring(0,6);localStorage.setItem(x,o)}console.log("Initialized session ID:",f),console.log("Username:",localStorage.getItem(x))}(),function(){D.apply(this,arguments)}(),"undefined"!=typeof askanyData&&(window.testAskanyAjax=function(){t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_get_realtime_updates",session_id:f,last_message_time:null,nonce:askanyData.nonce},success:function(t){},error:function(t,e,a){console.error("AJAX test failed:",a,t.responseText)}})});var E=null,C=null,j=new Set,T=!1;function O(){if(f&&"undefined"!=typeof askanyData&&r.is(":visible")){var e=a.find('.main-tab-btn[data-tab="messages"]');if(e.length>0&&!e.hasClass("active"))console.log("Skipping poll - messages tab not active");else{var n=a.find("#askany-chat-form");n.length>0&&!n.is(":visible")?console.log("Skipping poll - chat form not visible"):t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_get_realtime_updates",session_id:f,last_message_time:C,nonce:askanyData.nonce},success:function(e){if(e.success&&e.data.messages&&e.data.messages.length>0){var n=!1;e.data.messages.forEach((function(e){if("agent"===e.sender_type||"ai"===e.sender_type||"system"===e.sender_type){if("ai"===e.sender_type){if(!j.has(e.id)){j.add(e.id);var s=tt(!1),i=t('<div class="chat-message assistant-message" data-message-id="'+e.id+'">'+s+'<div class="message-bubble">'+M(e.message)+"</div></div>");o.append(i),n=!0}}else if("agent"===e.sender_type)j.has(e.id)||(j.add(e.id),s=tt(!1),i=t('<div class="chat-message assistant-message" data-message-id="'+e.id+'">'+s+'<div class="message-bubble">'+M(e.message)+"</div></div>"),o.append(i),n=!0);else if("system"===e.sender_type&&!j.has(e.id)){if(j.add(e.id),i=t('<div class="chat-message assistant-message system-message" data-message-id="'+e.id+'"><div class="message-bubble system-bubble">'+M(e.message)+"</div></div>"),o.append(i),e.message.includes("🤖")){var c="askany_agent_notified_"+f;localStorage.removeItem(c),setTimeout((function(){i.fadeOut(500,(function(){t(this).remove()}))}),8e3)}else e.message.includes("received by our support team")&&setTimeout((function(){i.fadeOut(500,(function(){t(this).remove()}))}),8e3);n=!0}C=e.created_at,r.is(":visible")||a.find(".notification-badge").fadeIn()}})),n&&!T&&o.scrollTop(o[0].scrollHeight)}var s;e.success&&e.data.typing_indicators&&(s=e.data.typing_indicators,t(".remote-typing-indicator").remove(),s&&s.length>0&&s.forEach((function(t){if("agent"!==t.user_type){var e=!1;e="undefined"!=typeof askanyData&&askanyData.currentUserId?t.user_id==askanyData.currentUserId:t.session_id===f&&"user"===t.user_type,t.is_typing&&!e&&ct(t)}else ct(t)})))},error:function(t,e,a){console.warn("Polling error:",a)}})}}}function A(){if(!C){var t=new Date(Date.now()-3e5);C=t.toISOString()}setTimeout((function(){E||(E=setInterval((function(){O()}),3e3))}),1e3)}function P(){E&&(clearInterval(E),E=null)}function M(t){return t?(t=(t=(t=void 0!==window.AskanyMarkdown?window.AskanyMarkdown.parse(t):(t=(t=(t=(t=t.replace(/(https?:\/\/[^\s]+)/g,'<a href="$1" target="_blank" rel="noopener noreferrer">$1</a>')).replace(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/g,'<a href="mailto:$1">$1</a>')).replace(/\n/g,"<br>")).replace(/^\d+\.\s/gm,"<br>• ")).replace(/^-\s/gm,"<br>• ")).replace(/From External_url '([^']+)' \(([^)]+)\):/g,'<div class="external-source-ref"><strong>📄 From:</strong> <a href="$2" target="_blank" rel="noopener noreferrer">$1</a></div>')).replace(/(<br\s*\/?>){3,}/g,"<br><br>")).trim():t}function U(e,a,n){var s=a?"user-message":"assistant-message",r=a||n?e:M(e),i=tt(a),c=t('<div class="chat-message '+s+' message-entering">'+i+'<div class="message-bubble'+(n?" product-message":"")+'">'+r+"</div></div>");o.append(c),setTimeout((function(){c.removeClass("message-entering").addClass("message-entered"),function(){if(!T){var t=o[0].scrollHeight,e=(o.scrollTop(),t-o.height());o.animate({scrollTop:e},600,"swing")}}()}),100);try{z().then((function(t){t.push({text:e,isUser:a,isProduct:n||!1,timestamp:(new Date).getTime()}),F(t)}))}catch(t){console.error("Failed to save message to localStorage:",t)}}function H(){return"askany_chat_messages_"+(f||k)}function F(t){return q.apply(this,arguments)}function q(){return(q=n(e().mark((function t(a){var n,s;return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,R();case 3:if(t.sent){t.next=7;break}return console.error("Cannot write to localStorage due to quota issues"),t.abrupt("return",!1);case 7:if(!window.chatEncryption||!ChatEncryption.isSupported()){t.next=15;break}return t.next=10,window.chatEncryption.encryptObject(a);case 10:n=t.sent,s=window.chatEncryption.obfuscateData(n),localStorage.setItem(H(),s),t.next=16;break;case 15:localStorage.setItem(H(),JSON.stringify(a));case 16:return t.abrupt("return",!0);case 19:if(t.prev=19,t.t0=t.catch(0),"QuotaExceededError"!==t.t0.name&&22!==t.t0.code){t.next=36;break}return console.warn("Storage quota exceeded while saving messages, attempting cleanup..."),t.next=25,R();case 25:if(!t.sent){t.next=36;break}return t.prev=27,localStorage.setItem(H(),JSON.stringify(a)),t.abrupt("return",!0);case 32:return t.prev=32,t.t1=t.catch(27),console.error("Failed to save messages even after cleanup:",t.t1),t.abrupt("return",!1);case 36:return console.error("Failed to save encrypted messages:",t.t0),t.prev=37,localStorage.setItem(H(),JSON.stringify(a)),t.abrupt("return",!0);case 42:return t.prev=42,t.t2=t.catch(37),console.error("Failed to save messages with fallback:",t.t2),t.abrupt("return",!1);case 46:case"end":return t.stop()}}),t,null,[[0,19],[27,32],[37,42]])})))).apply(this,arguments)}function z(){return N.apply(this,arguments)}function N(){return(N=n(e().mark((function t(){var a,n,s,r;return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(t.prev=0,a=localStorage.getItem(H())){t.next=4;break}return t.abrupt("return",[]);case 4:if(!window.chatEncryption||!ChatEncryption.isSupported()){t.next=12;break}return n=window.chatEncryption.deobfuscateData(a),t.next=8,window.chatEncryption.decryptObject(n);case 8:return s=t.sent,t.abrupt("return",Array.isArray(s)?s:[]);case 12:return t.abrupt("return",JSON.parse(a));case 13:t.next=27;break;case 15:return t.prev=15,t.t0=t.catch(0),console.error("Failed to load encrypted messages:",t.t0),t.prev=18,r=localStorage.getItem(H()),t.abrupt("return",r?JSON.parse(r):[]);case 23:return t.prev=23,t.t1=t.catch(18),console.error("Failed to parse stored messages:",t.t1),t.abrupt("return",[]);case 27:case"end":return t.stop()}}),t,null,[[0,15],[18,23]])})))).apply(this,arguments)}function B(){return G.apply(this,arguments)}function G(){return(G=n(e().mark((function t(){var a,n,s;return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,z();case 3:if(a=t.sent,Array.isArray(a)||(a=[]),n=Date.now()-6048e5,(s=a.filter((function(t){return t.timestamp>n}))).length===a.length){t.next=11;break}return t.next=10,F(s);case 10:return t.abrupt("return",!0);case 11:return t.abrupt("return",!1);case 14:return t.prev=14,t.t0=t.catch(0),console.error("Error clearing expired messages:",t.t0),t.abrupt("return",!1);case 18:case"end":return t.stop()}}),t,null,[[0,14]])})))).apply(this,arguments)}function R(){return L.apply(this,arguments)}function L(){return(L=n(e().mark((function t(){var a,n,s;return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,a="askany_storage_test",localStorage.setItem(a,"test"),localStorage.removeItem(a),t.abrupt("return",!0);case 8:if(t.prev=8,t.t0=t.catch(0),"QuotaExceededError"!==t.t0.name&&22!==t.t0.code){t.next=43;break}return console.warn("localStorage quota exceeded, performing cleanup..."),t.next=14,B();case 14:if(!t.sent){t.next=18;break}return console.log("Expired messages cleared due to storage quota"),t.abrupt("return",!0);case 18:return t.prev=18,t.next=21,z();case 21:if(n=t.sent,!(Array.isArray(n)&&n.length>50)){t.next=28;break}return s=n.slice(-50),t.next=26,F(s);case 26:return console.log("Kept only last 50 messages due to storage quota"),t.abrupt("return",!0);case 28:t.next=33;break;case 30:t.prev=30,t.t1=t.catch(18),console.error("Failed to cleanup messages:",t.t1);case 33:return t.prev=33,localStorage.removeItem(H()),console.warn("Cleared all chat messages due to storage quota"),t.abrupt("return",!0);case 39:return t.prev=39,t.t2=t.catch(33),console.error("Failed to clear storage:",t.t2),t.abrupt("return",!1);case 43:return console.error("Storage check failed:",t.t0),t.abrupt("return",!1);case 45:case"end":return t.stop()}}),t,null,[[0,8],[18,30],[33,39]])})))).apply(this,arguments)}function J(){return V.apply(this,arguments)}function V(){return(V=n(e().mark((function t(){return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return localStorage.removeItem(H()),Object.keys(localStorage).forEach((function(t){t.startsWith("askany_hide_suggestions_")&&localStorage.removeItem(t)})),o.empty(),t.next=5,et("Hi! I'm your AI assistant. How can I help you today? 👋",!1,!1);case 5:o.scrollTop(o[0].scrollHeight);case 6:case"end":return t.stop()}}),t)})))).apply(this,arguments)}o.on("scroll",(function(){var e=t(this).scrollTop(),a=t(this)[0].scrollHeight,n=t(this).height();T=e+n<a-50})),window.hideContinueShoppingMessage=function(e){t(e).closest(".chat-message").fadeOut(300,(function(){t(this).remove()}));try{z().then((function(t){F(t.filter((function(t){return!(t.text.includes("has been added to your cart")||t.text.includes("Cart Total:")||t.text.includes("✅")&&t.text.includes("Cart Total:"))})))})).catch((function(t){console.error("Failed to load messages for cleanup:",t)}))}catch(t){console.error("Failed to remove cart message from localStorage:",t)}};var W=a.find(".header-actions"),$=t('<button class="action-btn clear-btn" title="Clear Chat History"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"></path><path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"></path><path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"></path></svg></button>');W.prepend($),a.find(".clear-btn").on("click",n(e().mark((function t(){return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!confirm("Are you sure you want to clear your chat history?")){t.next=3;break}return t.next=3,J();case 3:case"end":return t.stop()}}),t)}))));var K,Q=!1;function Y(){o.length>0&&(o.scrollTop(o[0].scrollHeight),T=!1)}function Z(){return X.apply(this,arguments)}function X(){return(X=n(e().mark((function a(){return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(f&&"undefined"!=typeof askanyData){e.next=3;break}return console.log("Cannot load messages - no session ID"),e.abrupt("return");case 3:try{t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_get_all_messages",session_id:f,nonce:askanyData.nonce},success:function(e){e.success&&e.data.messages&&e.data.messages.length>0?(o.empty(),e.data.messages.forEach((function(e){var a="user"===e.sender_type,n=a?"user-message":"assistant-message",s=a?e.message:M(e.message),r=tt(a),i=t('<div class="chat-message '+n+'" data-message-id="'+e.id+'">'+r+'<div class="message-bubble">'+s+"</div></div>");"system"===e.sender_type&&(i.addClass("system-message"),i.find(".message-bubble").addClass("system-bubble")),o.append(i),e.id&&j.add(e.id)})),setTimeout((function(){Y()}),100),Q=!0):Q||(et("Hi! I'm your AI assistant. How can I help you today? 👋",!1,!1),Q=!0)},error:function(t){console.error("Failed to load messages from database:",t),Q||(et("Hi! I'm your AI assistant. How can I help you today? 👋",!1,!1),Q=!0)}})}catch(t){console.error("Failed to load messages:",t),Q||(et("Hi! I'm your AI assistant. How can I help you today? 👋",!1,!1),Q=!0)}case 4:case"end":return e.stop()}}),a)})))).apply(this,arguments)}function tt(t){return t?askanyData.isLoggedIn&&askanyData.userAvatar?'<div class="message-avatar">'+askanyData.userAvatar+"</div>":'<div class="message-avatar"><div class="avatar-icon user-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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></div></div>':askanyData.assistantAvatar?'<div class="message-avatar"><img src="'+askanyData.assistantAvatar+'" alt="Assistant" class="avatar-image" /></div>':'<div class="message-avatar"><div class="avatar-icon assistant-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 8V4H8"></path><rect width="16" height="12" x="4" y="8" rx="2"></rect><path d="M2 14h2"></path><path d="M20 14h2"></path><path d="M15 13v2"></path><path d="M9 13v2"></path></svg></div></div>'}function et(t,e,a,n){return at.apply(this,arguments)}function at(){return(at=n(e().mark((function a(n,s,r,i){var c,d,l,u,p,h;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(c=s?"user-message":"assistant-message",i&&(c+=" system-message"),d=s||r?n:M(n),l=tt(s),u=t('<div class="chat-message '+c+'">'+l+'<div class="message-bubble'+(r?" product-message":"")+(i?" system-bubble":"")+'">'+d+"</div></div>"),o.append(u),i&&(n.includes("🤖")?(p="askany_agent_notified_"+f,localStorage.removeItem(p),setTimeout((function(){u.fadeOut(500,(function(){t(this).remove()}))}),8e3)):n.includes("received by our support team")&&setTimeout((function(){u.fadeOut(500,(function(){t(this).remove()}))}),8e3)),T||o.scrollTop(o[0].scrollHeight),i){e.next=21;break}return e.prev=9,e.next=12,z();case 12:return(h=e.sent).push({text:n,isUser:s,isProduct:r||!1,timestamp:(new Date).getTime()}),e.next=16,F(h);case 16:e.next=21;break;case 18:e.prev=18,e.t0=e.catch(9),console.error("Failed to save message to localStorage:",e.t0);case 21:case"end":return e.stop()}}),a,null,[[9,18]])})))).apply(this,arguments)}function nt(){var e=t('<div class="chat-message assistant-message" id="typing-indicator"><div class="typing-indicator"><span class="typing-dot"></span><span class="typing-dot"></span><span class="typing-dot"></span></div></div>');o.append(e),o.scrollTop(o[0].scrollHeight)}function st(){t("#typing-indicator").remove()}function rt(){t("#search-indicator").remove()}setTimeout(n(e().mark((function t(){return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Z();case 2:case"end":return t.stop()}}),t)}))),1500);var ot=!1;function it(){t("#user-typing-indicator").remove(),ot=!1}function ct(e){var a=e.user_name||"Someone",n="remote-typing-"+(e.session_id||"unknown");t("#"+n).remove();var s=t('<div class="chat-message assistant-message remote-typing-indicator" id="'+n+'"><div class="message-bubble"><div class="remote-typing-indicator-content"><span class="typing-text">'+a+' is typing</span><div class="typing-dots"><span class="typing-dot"></span><span class="typing-dot"></span><span class="typing-dot"></span></div></div></div></div>');o.append(s),o.scrollTop(o[0].scrollHeight),setTimeout((function(){t("#"+n).fadeOut(300,(function(){t(this).remove()}))}),5e3)}function dt(e){if("undefined"!=typeof askanyData&&f){var a=localStorage.getItem(x)||"Anonymous User";t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_set_typing",session_id:f,is_typing:e?"1":"0",user_type:"user",user_name:a,nonce:askanyData.nonce},success:function(t){},error:function(t,e,a){console.warn("Failed to send typing indicator:",a)}})}}function lt(t){t&&t.length>0&&(nt(),setTimeout((function(){st(),t.forEach((function(t,e){setTimeout((function(){console.log("Product data:",t);var e='<div class="product-item enhanced" data-product-id="'+(t.id||"")+'">';e+='<div class="product-image">';var a=t.image_url||t.image;a&&""!==a&&"undefined"!==a?(e+='<img src="'+a+'" alt="'+(n=t.name||t.title||"Product")+"\" onerror=\"this.style.display='none'; this.nextElementSibling.style.display='flex';\">",e+='<div class="image-placeholder" style="display: none;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg></div>'):e+='<div class="image-placeholder"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg></div>',e+="</div>",e+='<div class="product-details">';var n=t.name||t.title||"Product Name Not Available";if(e+='<div class="product-title"><a href="'+(t.url||"#")+'">'+n+"</a></div>",t.sku&&""!==t.sku&&"undefined"!==t.sku&&(e+='<div class="product-sku">SKU: '+t.sku+"</div>"),t.short_description&&""!==t.short_description&&"undefined"!==t.short_description){var s=t.short_description.substring(0,120);t.short_description.length>120&&(s+="..."),e+='<div class="product-description">'+s+"</div>"}var r=t.price_html||t.price;if(r&&""!==r&&"undefined"!==r&&(e+='<div class="product-price">'+r,!0!==t.on_sale&&"true"!==t.on_sale||(e+=' <span class="sale-badge">ON SALE</span>'),e+="</div>"),t.stock_status&&""!==t.stock_status&&"undefined"!==t.stock_status){var o="instock"===t.stock_status?"in-stock":"out-of-stock",i="instock"===t.stock_status?"In Stock":"Out of Stock";t.stock_quantity&&t.stock_quantity>0&&(i+=" ("+t.stock_quantity+" available)"),e+='<div class="product-stock '+o+'">'+i+"</div>"}t.categories&&Array.isArray(t.categories)&&t.categories.length>0&&(e+='<div class="product-categories">Categories: '+t.categories.join(", ")+"</div>"),t.average_rating&&t.reviews_count&&t.reviews_count>0&&(e+='<div class="product-rating">★ '+t.average_rating+"/5 ("+t.reviews_count+" reviews)</div>"),e+='<div class="product-actions">',t.id&&(e+='<button class="view-button ajax-view-product" data-product-id="'+t.id+'">View Details</button>'),t.id&&"instock"===t.stock_status&&(e+='<button class="add-to-cart-button ajax-add-to-cart" data-product-id="'+t.id+'">Add to Cart</button>'),U(e+="</div></div></div>",!1,!0)}),800*e)}))}),1e3))}function ut(){return pt.apply(this,arguments)}function pt(){return(pt=n(e().mark((function n(){var s;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,B();case 3:e.sent,e.next=10;break;case 7:e.prev=7,e.t0=e.catch(0),console.error("Error clearing expired messages:",e.t0);case 10:return a.hasClass("inline")||("open"===w?(r.show(),A()):"minimized"===w?(r.show().addClass("minimized"),a.find(".askany-content-wrapper").hide(),a.find(".askany-main-tabs").hide(),v=!0,g.html('<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><path d="M9 9h6v6H9z"></path></svg>'),g.attr("title","Restore"),P()):(r.hide(),P())),e.next=13,z();case 13:if(!((s=e.sent).length>0)){e.next=20;break}s.forEach((function(e){var a=e.isUser||e.isProduct?e.text:M(e.text),n=t('<div class="chat-message '+(e.isUser?"user-message":"assistant-message")+'"><div class="message-bubble'+(e.isProduct?" product-message":"")+'">'+a+"</div></div>");o.append(n)})),setTimeout((function(){Y()}),100),Q=!0,e.next=25;break;case 20:if("open"!==w&&!a.hasClass("inline")||Q){e.next=25;break}return e.next=23,et("Hi! I'm your AI assistant. How can I help you today? 👋",!1,!1);case 23:Q=!0,setTimeout((function(){Y()}),100);case 25:("open"===w||a.hasClass("inline"))&&ht()&&setTimeout((function(){a.find(".suggested-prompts").slideDown()}),1e3);case 26:case"end":return e.stop()}}),n,null,[[0,7]])})))).apply(this,arguments)}function ht(){return!localStorage.getItem("askany_hide_suggestions_"+f)}function gt(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||window.innerWidth<=768}function ft(t){var e=window.innerWidth,a=window.innerHeight,n=Math.min(e-40,380);return t?{width:n+"px",height:Math.min(a-60,700)+"px"}:{width:"325px",height:"522px"}}function mt(t,e){return vt.apply(this,arguments)}function vt(){return(vt=n(e().mark((function a(n,s){var r,o;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,new Promise((function(e,a){t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_get_session_info",session_id:f,nonce:askanyData.nonce},success:function(t){var n;t.success?e(t.data):a(new Error((null===(n=t.data)||void 0===n?void 0:n.message)||"Failed to get session info"))},error:function(){a(new Error("Network error"))}})}));case 3:if(!(r=e.sent)||r.is_ai_handled||!r.has_agent){e.next=12;break}return st(),o="askany_agent_notified_"+f,localStorage.getItem(o)||(et("Your message has been received by our support team. An agent will respond shortly.",!1,!1,!0),localStorage.setItem(o,"true")),e.next=11,yt(n);case 11:return e.abrupt("return");case 12:return o="askany_agent_notified_"+f,localStorage.removeItem(o),e.next=16,wt(n);case 16:e.next=23;break;case 18:return e.prev=18,e.t0=e.catch(0),console.error("Error checking agent mode:",e.t0),e.next=23,wt(n);case 23:case"end":return e.stop()}}),a,null,[[0,18]])})))).apply(this,arguments)}function yt(e){return new Promise((function(a,n){t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_save_user_message",session_id:f,message:e,nonce:askanyData.nonce},success:function(t){a(t)},error:function(){n(new Error("Failed to save message"))}})}))}function wt(t){return kt.apply(this,arguments)}function kt(){return kt=n(e().mark((function a(s){var r,o,i,c,d,l;return e().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:try{r=s,o=f,window.chatEncryption&&ChatEncryption.isSupported()?(r=btoa(unescape(encodeURIComponent(s))),f&&(o=btoa(unescape(encodeURIComponent(f))))):(r=s,o=f),i=askanyData.apiEndpoint||askanyData.ajaxUrl,St.length>0?((c=new FormData).append("action","askany_chat_response_with_files"),c.append("nonce",askanyData.nonce),c.append("message",r),c.append("session_id",o),c.append("api_provider",y),c.append("encrypted",window.chatEncryption&&ChatEncryption.isSupported()),(d=localStorage.getItem(x))&&c.append("user_name",d),St.forEach((function(t,e){c.append("attachments[]",t.file),c.append("attachment_names[]",t.name),c.append("attachment_types[]",t.type)})),t.ajax({url:askanyData.ajaxUrl,type:"POST",data:c,processData:!1,contentType:!1,dataType:"json",success:function(){var t=n(e().mark((function t(a){return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(St=[],Tt(),!a.success){t.next=7;break}return t.next=5,bt(a.data,s);case 5:t.next=8;break;case 7:xt(a.data&&a.data.message);case 8:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),error:function(){xt()}})):askanyData.apiEndpoint?(l=JSON.stringify({query:r,session_id:o,api_provider:y,_wpnonce:askanyData.nonce,encrypted:window.chatEncryption&&ChatEncryption.isSupported()}),t.ajax({url:i,type:"POST",data:l,contentType:"application/json",dataType:"json",success:function(){var t=n(e().mark((function t(a){return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,bt(a,s);case 2:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),error:function(){xt()}})):(l={action:"askany_chat_response",nonce:askanyData.nonce,message:r,session_id:o,api_provider:y,encrypted:window.chatEncryption&&ChatEncryption.isSupported()},(d=localStorage.getItem(x))&&(l.user_name=d),t.post(i,l,function(){var t=n(e().mark((function t(a){return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!a.success){t.next=5;break}return t.next=3,bt(a.data,s);case 3:t.next=6;break;case 5:xt(a.data&&a.data.message);case 6:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()).fail((function(){xt()})))}catch(t){console.error("Encryption error:",t),xt()}case 1:case"end":return a.stop()}}),a)}))),kt.apply(this,arguments)}function bt(t,e){return _t.apply(this,arguments)}function _t(){return(_t=n(e().mark((function a(n,s){var r,i,c,d;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,r=n,!(n.encrypted&&window.chatEncryption&&ChatEncryption.isSupported())){e.next=18;break}if(!n.message){e.next=8;break}return i=window.chatEncryption.deobfuscateData(n.message),e.next=7,window.chatEncryption.decrypt(i);case 7:r.message=e.sent;case 8:if(!n.session_id){e.next=13;break}return c=window.chatEncryption.deobfuscateData(n.session_id),e.next=12,window.chatEncryption.decrypt(c);case 12:r.session_id=e.sent;case 13:if(!n.related_products){e.next=18;break}return d=window.chatEncryption.deobfuscateData(n.related_products),e.next=17,window.chatEncryption.decryptObject(d);case 17:r.related_products=e.sent;case 18:r.search_performed?(st(),a=void 0,a=t('<div class="chat-message assistant-message" id="search-indicator"><div class="search-indicator"><svg class="search-icon" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.35-4.35"></path></svg><span class="search-text">Searching the internet...</span><div class="search-dots"><span class="typing-dot"></span><span class="typing-dot"></span><span class="typing-dot"></span></div></div></div>'),o.append(a),o.scrollTop(o[0].scrollHeight),At(s,r)):(st(),r.session_id&&(f=r.session_id),r.message&&setTimeout((function(){O()}),500),r.related_products&&r.related_products.length>0&&lt(r.related_products)),e.next=25;break;case 21:e.prev=21,e.t0=e.catch(0),console.error("Response decryption error:",e.t0),xt();case 25:case"end":return e.stop()}var a}),a,null,[[0,21]])})))).apply(this,arguments)}function xt(t){st(),et(t||"Sorry, I couldn't process your request. Please try again later.",!1,!1)}d.on("input keyup",(function(){t(this).val().trim().length>0?(ot||(ot=!0,function(){if(!t("#user-typing-indicator").length){var e=t('<div class="chat-message user-message" id="user-typing-indicator"><div class="message-bubble"><div class="user-typing-indicator"><span class="typing-text">You are typing</span><div class="typing-dots"><span class="typing-dot"></span><span class="typing-dot"></span><span class="typing-dot"></span></div></div></div></div>');o.append(e),o.scrollTop(o[0].scrollHeight)}}(),dt(!0)),clearTimeout(K),K=setTimeout((function(){it(),dt(!1)}),2e3)):(it(),clearTimeout(K),dt(!1))})),c.on("submit",(function(){it(),clearTimeout(K),dt(!1)})),d.on("blur",(function(){setTimeout((function(){it(),clearTimeout(K)}),1e3)})),p.on("click",(function(){var e=t(this).text();d.val(e),c.submit()})),a.find(".close-prompts-btn").on("click",(function(){a.find(".suggested-prompts").slideUp(300,(function(){localStorage.setItem("askany_hide_suggestions_"+f,"true")}))})),setTimeout(n(e().mark((function t(){return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,ut();case 2:setTimeout((function(){(r.is(":visible")||a.hasClass("inline"))&&Y()}),200),ht()?a.find(".suggested-prompts").show():a.find(".suggested-prompts").hide(),r.is(":visible")||a.find(".notification-badge").fadeIn(),ht()&&setTimeout((function(){a.find(".suggested-prompts").slideDown()}),1e3),A();case 7:case"end":return t.stop()}}),t)}))),500),s.on("click",(function(){r.fadeToggle(300,(function(){r.is(":visible")?(localStorage.setItem("askany_widget_state","open"),a.find(".notification-badge").fadeOut(),o.is(":empty")&&!Q&&(et("Hi! I'm your AI assistant. How can I help you today? 👋",!1,!1),Q=!0,ht()&&setTimeout((function(){a.find(".suggested-prompts").slideDown()}),1e3)),setTimeout((function(){Y()}),100),A(),d.focus()):(localStorage.setItem("askany_widget_state","closed"),P())}))})),a.find(".askany-chat-header").on("click",(function(e){if(v&&!t(e.target).closest(".header-actions").length){var n=a.find(".askany-content-wrapper"),s=a.find(".askany-main-tabs");r.removeClass("minimized"),s.slideDown(400),n.slideDown(400,(function(){v=!1,localStorage.setItem("askany_widget_state","open"),g.html('<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line></svg>'),g.attr("title","Minimize"),A(),d.focus()}))}})),a.find(".askany-chat-close").on("click",(function(){r.fadeOut(300,(function(){localStorage.setItem("askany_widget_state","closed"),P()}))})),g.on("click",(function(){var t=a.find(".askany-content-wrapper"),e=a.find(".askany-main-tabs");v?(r.removeClass("minimized"),e.slideDown(400),t.slideDown(400,(function(){v=!1,localStorage.setItem("askany_widget_state","open"),g.html('<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line></svg>'),g.attr("title","Minimize"),A(),d.focus()}))):(t.slideUp(400),e.slideUp(400,(function(){v=!0,localStorage.setItem("askany_widget_state","minimized"),r.addClass("minimized"),g.html('<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><path d="M9 9h6v6H9z"></path></svg>'),g.attr("title","Restore"),P()})))})),h.on("click",(function(){if(m=!m,gt()){var t=ft(m);m?(r.addClass("expanded mobile-expanded").animate({height:t.height},300).css({width:t.width,"max-height":"95vh"}),h.html('<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 3H5a2 2 0 0 0-2 2v4"></path><path d="M15 3h4a2 2 0 0 1 2 2v4"></path><path d="M9 21H5a2 2 0 0 1-2-2v-4"></path><path d="M15 21h4a2 2 0 0 0 2-2v-4"></path></svg>')):(r.removeClass("expanded mobile-expanded").animate({height:t.height},300).css({width:t.width,"max-height":"80vh"}),h.html('<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 3h6v6"></path><path d="M9 21H3v-6"></path><path d="M21 3l-7 7"></path><path d="M3 21l7-7"></path></svg>'))}else m?(r.addClass("expanded").animate({width:"560px",height:"650px"}),h.html('<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 3H5a2 2 0 0 0-2 2v4"></path><path d="M15 3h4a2 2 0 0 1 2 2v4"></path><path d="M9 21H5a2 2 0 0 1-2-2v-4"></path><path d="M15 21h4a2 2 0 0 0 2-2v-4"></path></svg>')):(r.removeClass("expanded").animate({width:"460px",height:"573px"}),h.html('<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 3h6v6"></path><path d="M9 21H3v-6"></path><path d="M21 3l-7 7"></path><path d="M3 21l7-7"></path></svg>'))})),t(window).on("resize",(function(){if(gt()&&m){var t=ft(!0);r.css({width:t.width,height:t.height})}})),l.on("click",(function(){u.toggle()})),t(document).on("click",(function(e){t(e.target).closest(".emoji-btn, .emoji-picker").length||u.hide()})),a.find(".emoji").on("click",(function(){var e=t(this).data("emoji");d.val(d.val()+e),u.hide(),d.focus()})),c.on("submit",function(){var t=n(e().mark((function t(n){var s,r;return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n.preventDefault(),""!==(s=d.val().trim())||0!==St.length){t.next=4;break}return t.abrupt("return");case 4:return""===s&&St.length>0&&(s="Please analyze the attached file(s)."),r=s,St.length>0&&(r+="\n📎 "+St.length+" file(s) attached"),et(r,!0,!1),d.val("").focus(),a.find(".suggested-prompts").slideUp(),i.hide().empty(),nt(),t.next=14,mt(s,r);case 14:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}());var St=[],It=["image/jpeg","image/jpg","image/png","image/gif","image/webp"],Dt=[].concat(It,["application/pdf"]),Et=t('<input type="file" multiple accept="image/*,.pdf" style="display: none;">');a.append(Et);var Ct=t('<div class="attachment-preview-container" style="display: none;"></div>');function jt(t){var e=[],a=[];t.forEach((function(t){Dt.includes(t.type)?t.size>10485760?a.push(t.name+" - File too large. Maximum size is 10MB."):St.some((function(e){return e.name===t.name&&e.size===t.size}))?a.push(t.name+" - File already attached."):e.push(t):a.push(t.name+" - Unsupported file type. Only images (JPEG, PNG, GIF, WebP) and PDF files are supported.")})),a.length>0&&et("❌ File attachment errors:\n• "+a.join("\n• "),!1,!1),e.forEach((function(t){!function(t){var e={id:"file_"+Date.now()+"_"+Math.random().toString(36).substr(2,9),file:t,name:t.name,size:t.size,type:t.type,preview:null};if(It.includes(t.type)){var a=new FileReader;a.onload=function(t){e.preview=t.target.result,Tt()},a.readAsDataURL(t)}St.push(e),et("📎 Attached: "+t.name+" ("+Ot(t.size)+")",!1,!1)}(t)})),Tt()}function Tt(){var t=a.find(".attachment-btn");if(St.length>0?t.addClass("has-files").attr("data-count",St.length):t.removeClass("has-files").removeAttr("data-count"),0!==St.length){var e='<div class="attachment-preview-header">📎 Attached Files ('+St.length+"):</div>";e+='<div class="attachment-preview-list">',St.forEach((function(t){e+='<div class="attachment-preview-item" data-file-id="'+t.id+'">',t.preview?(e+='<div class="attachment-preview-image">',e+='<img src="'+t.preview+'" alt="'+t.name+'">',e+="</div>"):(e+='<div class="attachment-preview-icon">',e+='<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14,2 14,8 20,8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10,9 9,9 8,9"></polyline></svg>',e+="</div>"),e+='<div class="attachment-preview-info">',e+='<div class="attachment-preview-name">'+t.name+"</div>",e+='<div class="attachment-preview-size">'+Ot(t.size)+"</div>",e+="</div>",e+='<button class="attachment-remove-btn" data-file-id="'+t.id+'" title="Remove attachment">',e+="X",e+="</button>",e+="</div>"})),e+="</div>",e+='<div class="attachment-preview-actions">',e+='<button class="attachment-clear-all-btn">Clear All</button>',e+="</div>",Ct.html(e).show()}else Ct.hide().empty()}function Ot(t){if(0===t)return"0 Bytes";var e=Math.floor(Math.log(t)/Math.log(1024));return parseFloat((t/Math.pow(1024,e)).toFixed(2))+" "+["Bytes","KB","MB","GB"][e]}function At(e,a){t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_search_internet",query:e,session_id:f,nonce:askanyData.nonce},success:function(t){var e;rt(),t.success?(t.data.session_id&&(f=t.data.session_id),t.data.message&&et((e=t.data.message)?((!(e=(e=(e=e.replace(/\d+\.\s*\*\*[^*]+\*\*[^\n]*(?:\n[^\n]*)*?(?=\d+\.|$)/g,"")).replace(/\n{3,}/g,"\n\n")).trim())||e.length<20)&&(e="I found some great products for you! Check them out below."),e):e,!1,!1),a.related_products&&a.related_products.length>0&&lt(a.related_products)):et(t.data.message||"I searched the internet but couldn't find specific information. Please try rephrasing your question.",!1,!1)},error:function(){rt(),et("I'm sorry, I couldn't search the internet right now. Please try again later.",!1,!1)}})}o.after(Ct),a.find(".attachment-btn").on("click",(function(){Et.click()})),Et.on("change",(function(e){jt(Array.from(e.target.files)),t(this).val("")})),o.on("dragover",(function(e){e.preventDefault(),e.stopPropagation(),t(this).addClass("drag-over")})),o.on("dragleave",(function(e){e.preventDefault(),e.stopPropagation(),t(this).removeClass("drag-over")})),o.on("drop",(function(e){e.preventDefault(),e.stopPropagation(),t(this).removeClass("drag-over"),jt(Array.from(e.originalEvent.dataTransfer.files))})),Ct.on("click",".attachment-remove-btn",(function(){var e=t(this).data("file-id");St=St.filter((function(t){return t.id!==e})),Tt(),et("🗑️ Removed attachment",!1,!1)})),Ct.on("click",".attachment-clear-all-btn",(function(){St=[],Tt(),et("🗑️ Cleared all attachments",!1,!1)})),o.on("click",".ajax-view-product",(function(e){e.preventDefault();var a=t(this).data("product-id");a&&(t(this).prop("disabled",!0).text("Loading..."),t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_get_product_details",product_id:a,nonce:askanyData.nonce},success:function(e){e.success?function(e){var a='<div class="askany-product-modal-overlay">';if(a+='<div class="askany-product-modal">',a+='<div class="modal-header">',a+="<h3>"+(e.name||"Product Details")+"</h3>",a+='<button class="modal-close-btn">&times;</button>',a+="</div>",a+='<div class="modal-body">',e.image_url&&(a+='<div class="modal-product-image">',a+='<img src="'+e.image_url+'" alt="'+e.name+'">',a+="</div>"),a+='<div class="modal-product-details">',e.price_html&&(a+='<div class="modal-product-price">'+e.price_html,e.on_sale&&(a+=' <span class="sale-badge">ON SALE</span>'),a+="</div>"),e.sku&&(a+='<div class="modal-product-sku">SKU: '+e.sku+"</div>"),e.stock_status){var n="instock"===e.stock_status?"in-stock":"out-of-stock",s="instock"===e.stock_status?"In Stock":"Out of Stock";e.stock_quantity&&e.stock_quantity>0&&(s+=" ("+e.stock_quantity+" available)"),a+='<div class="modal-product-stock '+n+'">'+s+"</div>"}if(e.description&&(a+='<div class="modal-product-description">'+e.description+"</div>"),e.categories&&e.categories.length>0&&(a+='<div class="modal-product-categories">Categories: '+e.categories.join(", ")+"</div>"),e.average_rating&&e.reviews_count>0&&(a+='<div class="modal-product-rating">★ '+e.average_rating+"/5 ("+e.reviews_count+" reviews)</div>"),e.attributes&&Object.keys(e.attributes).length>0){for(var r in a+='<div class="modal-product-attributes">',a+="<h4>Product Attributes:</h4>",a+="<ul>",e.attributes)a+="<li><strong>"+r+":</strong> "+e.attributes[r]+"</li>";a+="</ul>",a+="</div>"}a+="</div>",a+="</div>",a+='<div class="modal-footer">',"instock"===e.stock_status&&(a+='<div class="modal-quantity-selector">',a+='<label for="modal-quantity">Quantity:</label>',a+='<input type="number" id="modal-quantity" min="1" max="'+(e.stock_quantity||999)+'" value="1">',a+="</div>",a+='<button class="modal-add-to-cart-btn ajax-add-to-cart" data-product-id="'+e.id+'">Add to Cart</button>'),e.url&&(a+='<a href="'+e.url+'" class="modal-view-product-btn" target="_blank">View Full Product Page</a>'),a+="</div>",a+="</div>",a+="</div>",t("body").append(a),t(".askany-product-modal-overlay").fadeIn(300)}(e.data):et("❌ Error loading product details: "+(e.data.message||"Unknown error"),!1,!1)},error:function(){et("❌ Failed to load product details. Please try again.",!1,!1)},complete:function(){t('.ajax-view-product[data-product-id="'+a+'"]').prop("disabled",!1).text("View Details")}}))})),o.on("click",".ajax-add-to-cart",(function(e){e.preventDefault();var a=t(this).data("product-id"),n=t(this).data("quantity")||1;if(a){var s=t(this),r=s.text();s.prop("disabled",!0).text("Adding..."),t.ajax({url:askanyData.ajaxUrl,type:"POST",data:{action:"askany_add_to_cart",product_id:a,quantity:n,nonce:askanyData.nonce},success:function(e){if(e.success){e.data.message;var a=e.data.cart_url||("undefined"!=typeof wc_add_to_cart_params?wc_add_to_cart_params.cart_url:"/cart");!function(e,a,n,s,r){var i='<div class="cart-success-message">';i+='<div class="success-text">✅ '+e+"</div>",n&&(i+='<div class="cart-summary">',i+='<div class="cart-total">Cart Total: '+n+"</div>",i+="</div>"),i+='<div class="cart-actions">',i+='<a href="'+s+'" class="view-cart-btn" target="_blank">🛒 View Cart ('+a+")</a>",r&&(i+='<a href="'+r+'" class="checkout-btn" target="_blank">💳 Checkout Now</a>'),i+='<button class="continue-shopping-btn" onclick="hideContinueShoppingMessage(this)">🛍️ Continue Chat</button>',i+="</div>";var c=t('<div class="chat-message assistant-message"><div class="message-bubble">'+(i+="</div>")+"</div></div>");o.append(c),T||o.scrollTop(o[0].scrollHeight);try{z().then((function(t){t.push({text:"✅ "+e+" - Cart Total: "+(n||"N/A"),isUser:!1,isProduct:!1,timestamp:(new Date).getTime()}),F(t)}))}catch(t){console.error("Failed to save cart success message to localStorage:",t)}}(e.data.message,e.data.cart_count,e.data.cart_total,a,e.data.checkout_url),s.text("Added!").addClass("added"),setTimeout((function(){s.text(r).removeClass("added")}),3e3),e.data.cart_count&&(n=e.data.cart_count,t(".cart-count, .cart-contents-count, .woocommerce-cart-count").text(n),"undefined"!=typeof wc_add_to_cart_params&&t(document.body).trigger("wc_fragment_refresh"))}else et("❌ Error adding to cart: "+(e.data.message||"Unknown error"),!1,!1);var n},error:function(){et("❌ Failed to add product to cart. Please try again.",!1,!1)},complete:function(){s.hasClass("added")?s.prop("disabled",!1):s.prop("disabled",!1).text(r)}})}})),t("body").on("click",".modal-close-btn, .askany-product-modal-overlay",(function(e){e.target===this&&t(".askany-product-modal-overlay").fadeOut(300,(function(){t(this).remove()}))})),t("body").on("click",".modal-add-to-cart-btn",(function(e){e.preventDefault();var a=t("#modal-quantity").val()||1;t(this).data("quantity",a),t(this).trigger("click")}))}))}))})();
  • askany/trunk/includes/class-admin-pages.php

    r3393775 r3411709  
    419419        }
    420420
     421        // Check if pro version is active
     422        $plugin = \Askany\Plugin::get_instance();
     423        $is_pro = $plugin->is_pro_active();
     424
    421425        // Get data to pass to the template.
    422426        $data = array(
     
    425429            'current_user_id' => get_current_user_id(),
    426430            'stats' => $this->database->get_session_statistics(),
     431            'is_pro' => $is_pro,
    427432        );
    428433
  • askany/trunk/includes/class-ajax-handler.php

    r3393775 r3411709  
    148148        add_action('wp_ajax_askany_get_session_info', array( $this, 'get_session_info' ));
    149149        add_action('wp_ajax_nopriv_askany_get_session_info', array( $this, 'get_session_info' ));
     150
     151        // Get all messages for a session AJAX handler
     152        add_action('wp_ajax_askany_get_all_messages', array( $this, 'get_all_messages' ));
     153        add_action('wp_ajax_nopriv_askany_get_all_messages', array( $this, 'get_all_messages' ));
    150154
    151155        // Save user message only AJAX handler
     
    16101614            'has_agent' => ! empty($session->agent_id),
    16111615        ));
     1616    }
     1617
     1618    /**
     1619     * Get all messages for a session via AJAX.
     1620     *
     1621     * @return void
     1622     */
     1623    public function get_all_messages() {
     1624        $nonce = isset($_POST['nonce']) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : '';
     1625       
     1626        if ( ! wp_verify_nonce($nonce, 'askany_chat_nonce') ) {
     1627            wp_send_json_error(array( 'message' => __('Security check failed.', 'askany') ));
     1628        }
     1629
     1630        $session_id = isset($_POST['session_id']) ? sanitize_text_field( wp_unslash( $_POST['session_id'] ) ) : '';
     1631
     1632        if ( empty($session_id) ) {
     1633            wp_send_json_error(array( 'message' => __('Session ID is required.', 'askany') ));
     1634        }
     1635
     1636        // Get all messages for this session ordered by timestamp
     1637        $messages = $this->database->get_chat_messages($session_id);
     1638
     1639        if ( ! $messages ) {
     1640            wp_send_json_success(array( 'messages' => array() ));
     1641        }
     1642
     1643        // Return messages in chronological order
     1644        wp_send_json_success(array( 'messages' => $messages ));
    16121645    }
    16131646
  • askany/trunk/readme.txt

    r3409111 r3411709  
    33Tags: ai chat, chatbot, customer support, woocommerce, pdf search, openai, deepseek
    44Requires at least: 5.9
    5 Tested up to: 6.9
    6 Stable tag: 1.5.2
     5Tested up to: 6.8
     6Stable tag: 1.5.3
    77Requires PHP: 7.4
    88License: GPLv2 or later
     
    290290== Changelog ==
    291291
     292= 1.5.3 – 05 Dev 2025 =
     293- ⚙️ Fixed duplicate message response 
     294
    292295= 1.5.2 – 03 Dev 2025 =
    293 - **Enhancement:** WP 6.9 compatibility
     296- **Enhancement:** WP 6.9 compatibility 
    294297
    295298= 1.5.1 – 12 Nov 2025 =
Note: See TracChangeset for help on using the changeset viewer.