Changeset 3411709
- Timestamp:
- 12/05/2025 05:28:52 AM (3 months ago)
- Location:
- askany
- Files:
-
- 414 added
- 12 edited
-
tags/1.5.3 (added)
-
tags/1.5.3/askany.php (added)
-
tags/1.5.3/assets (added)
-
tags/1.5.3/assets/css (added)
-
tags/1.5.3/assets/css/admin.css (added)
-
tags/1.5.3/assets/css/dynamic-pricing.css (added)
-
tags/1.5.3/assets/css/frontend.css (added)
-
tags/1.5.3/assets/css/pro-features.css (added)
-
tags/1.5.3/assets/js (added)
-
tags/1.5.3/assets/js/admin.js (added)
-
tags/1.5.3/assets/js/dynamic-pricing.js (added)
-
tags/1.5.3/assets/js/encryption.js (added)
-
tags/1.5.3/assets/js/external-sources.js (added)
-
tags/1.5.3/assets/js/frontend-sse.js (added)
-
tags/1.5.3/assets/js/frontend.js (added)
-
tags/1.5.3/assets/js/markdown-parser.js (added)
-
tags/1.5.3/assets/js/pro-modal.js (added)
-
tags/1.5.3/assets/js/sse-client.js (added)
-
tags/1.5.3/assets/library (added)
-
tags/1.5.3/assets/library/toastmaster.min.js (added)
-
tags/1.5.3/changelog.txt (added)
-
tags/1.5.3/composer.json (added)
-
tags/1.5.3/dist (added)
-
tags/1.5.3/dist/css (added)
-
tags/1.5.3/dist/css/admin.min.css (added)
-
tags/1.5.3/dist/css/dynamic-pricing.min.css (added)
-
tags/1.5.3/dist/css/frontend.min.css (added)
-
tags/1.5.3/dist/css/pro-features.min.css (added)
-
tags/1.5.3/dist/js (added)
-
tags/1.5.3/dist/js/admin.min.js (added)
-
tags/1.5.3/dist/js/dynamic-pricing.min.js (added)
-
tags/1.5.3/dist/js/encryption.min.js (added)
-
tags/1.5.3/dist/js/frontend.min.js (added)
-
tags/1.5.3/dist/js/markdown-parser.min.js (added)
-
tags/1.5.3/dist/js/pro-features.min.js (added)
-
tags/1.5.3/dist/js/pro-modal.min.js (added)
-
tags/1.5.3/dist/js/sse-client.min.js (added)
-
tags/1.5.3/includes (added)
-
tags/1.5.3/includes/class-admin-pages.php (added)
-
tags/1.5.3/includes/class-ajax-handler.php (added)
-
tags/1.5.3/includes/class-api-manager.php (added)
-
tags/1.5.3/includes/class-assets-manager.php (added)
-
tags/1.5.3/includes/class-content-indexer.php (added)
-
tags/1.5.3/includes/class-database.php (added)
-
tags/1.5.3/includes/class-encryption-handler.php (added)
-
tags/1.5.3/includes/class-external-sources-handler.php (added)
-
tags/1.5.3/includes/class-pdf-handler.php (added)
-
tags/1.5.3/includes/class-pdf-upload-handler.php (added)
-
tags/1.5.3/includes/class-plugin.php (added)
-
tags/1.5.3/includes/class-session-manager.php (added)
-
tags/1.5.3/includes/class-shortcode-handler.php (added)
-
tags/1.5.3/includes/class-sse-handler.php (added)
-
tags/1.5.3/includes/providers (added)
-
tags/1.5.3/includes/providers/class-abstract-provider.php (added)
-
tags/1.5.3/includes/providers/class-deepseek-provider.php (added)
-
tags/1.5.3/includes/providers/class-gemini-provider.php (added)
-
tags/1.5.3/includes/providers/class-openai-provider.php (added)
-
tags/1.5.3/includes/providers/class-provider-factory.php (added)
-
tags/1.5.3/includes/providers/interface-ai-provider.php (added)
-
tags/1.5.3/languages (added)
-
tags/1.5.3/languages/askany.pot (added)
-
tags/1.5.3/package.json (added)
-
tags/1.5.3/readme.txt (added)
-
tags/1.5.3/templates (added)
-
tags/1.5.3/templates/admin-api-stats.php (added)
-
tags/1.5.3/templates/admin-chat-logs.php (added)
-
tags/1.5.3/templates/admin-content-index.php (added)
-
tags/1.5.3/templates/admin-external-sources.php (added)
-
tags/1.5.3/templates/admin-home-settings.php (added)
-
tags/1.5.3/templates/admin-live-chat.php (added)
-
tags/1.5.3/templates/admin-pdf-import.php (added)
-
tags/1.5.3/templates/admin-qa.php (added)
-
tags/1.5.3/templates/admin-settings.php (added)
-
tags/1.5.3/templates/admin-user-agents.php (added)
-
tags/1.5.3/templates/frontend-widget.php (added)
-
tags/1.5.3/uninstall.php (added)
-
tags/1.5.3/vendor (added)
-
tags/1.5.3/vendor/autoload.php (added)
-
tags/1.5.3/vendor/bin (added)
-
tags/1.5.3/vendor/composer (added)
-
tags/1.5.3/vendor/composer/ClassLoader.php (added)
-
tags/1.5.3/vendor/composer/InstalledVersions.php (added)
-
tags/1.5.3/vendor/composer/LICENSE (added)
-
tags/1.5.3/vendor/composer/autoload_classmap.php (added)
-
tags/1.5.3/vendor/composer/autoload_files.php (added)
-
tags/1.5.3/vendor/composer/autoload_namespaces.php (added)
-
tags/1.5.3/vendor/composer/autoload_psr4.php (added)
-
tags/1.5.3/vendor/composer/autoload_real.php (added)
-
tags/1.5.3/vendor/composer/autoload_static.php (added)
-
tags/1.5.3/vendor/composer/installed.json (added)
-
tags/1.5.3/vendor/composer/installed.php (added)
-
tags/1.5.3/vendor/composer/platform_check.php (added)
-
tags/1.5.3/vendor/freemius (added)
-
tags/1.5.3/vendor/freemius/LICENSE.txt (added)
-
tags/1.5.3/vendor/freemius/README.md (added)
-
tags/1.5.3/vendor/freemius/assets (added)
-
tags/1.5.3/vendor/freemius/assets/css (added)
-
tags/1.5.3/vendor/freemius/assets/css/admin (added)
-
tags/1.5.3/vendor/freemius/assets/css/admin/account.css (added)
-
tags/1.5.3/vendor/freemius/assets/css/admin/add-ons.css (added)
-
tags/1.5.3/vendor/freemius/assets/css/admin/affiliation.css (added)
-
tags/1.5.3/vendor/freemius/assets/css/admin/checkout.css (added)
-
tags/1.5.3/vendor/freemius/assets/css/admin/clone-resolution.css (added)
-
tags/1.5.3/vendor/freemius/assets/css/admin/common.css (added)
-
tags/1.5.3/vendor/freemius/assets/css/admin/connect.css (added)
-
tags/1.5.3/vendor/freemius/assets/css/admin/debug.css (added)
-
tags/1.5.3/vendor/freemius/assets/css/admin/dialog-boxes.css (added)
-
tags/1.5.3/vendor/freemius/assets/css/admin/gdpr-optin-notice.css (added)
-
tags/1.5.3/vendor/freemius/assets/css/admin/index.php (added)
-
tags/1.5.3/vendor/freemius/assets/css/admin/optout.css (added)
-
tags/1.5.3/vendor/freemius/assets/css/admin/plugins.css (added)
-
tags/1.5.3/vendor/freemius/assets/css/customizer.css (added)
-
tags/1.5.3/vendor/freemius/assets/css/index.php (added)
-
tags/1.5.3/vendor/freemius/assets/img (added)
-
tags/1.5.3/vendor/freemius/assets/img/askany.png (added)
-
tags/1.5.3/vendor/freemius/assets/img/index.php (added)
-
tags/1.5.3/vendor/freemius/assets/img/plugin-icon.png (added)
-
tags/1.5.3/vendor/freemius/assets/img/theme-icon.png (added)
-
tags/1.5.3/vendor/freemius/assets/index.php (added)
-
tags/1.5.3/vendor/freemius/assets/js (added)
-
tags/1.5.3/vendor/freemius/assets/js/index.php (added)
-
tags/1.5.3/vendor/freemius/assets/js/jquery.form.js (added)
-
tags/1.5.3/vendor/freemius/assets/js/nojquery.ba-postmessage.js (added)
-
tags/1.5.3/vendor/freemius/assets/js/postmessage.js (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing/14fb1bd5b7c41648488b06147f50a0dc.svg (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing/178afa6030e76635dbe835e111d2c507.png (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing/27b5a722a5553d9de0170325267fccec.png (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing/4375c4a3ddc6f637c2ab9a2d7220f91e.png (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing/4529cac82a2d1f300d3c4702b7b5e8f3.svg (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing/5480ed23b199531a8cbc05924f26952b.png (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing/b4f3b958f4a019862d81b15f3f8eee3a.svg (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing/c03f665db27af43971565560adfba594.png (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing/cb5fc4f6ec7ada72e986f6e7dde365bf.png (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing/dd89563360f0272635c8f0ab7d7f1402.png (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing/e366d70661d8ad2493bd6afbd779f125.png (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing/f18006f6535a1a6e9c6bfbffafe6f18a.svg (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing/f3aac72a8e63997d6bb888f816457e9b.png (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing/f928f1be99776af83e8e6be4baf8ffe7.svg (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing/fde48e4609a6ddc11d639fc2421f2afd.png (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing/freemius-pricing.js (added)
-
tags/1.5.3/vendor/freemius/assets/js/pricing/freemius-pricing.js.LICENSE.txt (added)
-
tags/1.5.3/vendor/freemius/config.php (added)
-
tags/1.5.3/vendor/freemius/includes (added)
-
tags/1.5.3/vendor/freemius/includes/class-freemius-abstract.php (added)
-
tags/1.5.3/vendor/freemius/includes/class-freemius.php (added)
-
tags/1.5.3/vendor/freemius/includes/class-fs-admin-notices.php (added)
-
tags/1.5.3/vendor/freemius/includes/class-fs-api.php (added)
-
tags/1.5.3/vendor/freemius/includes/class-fs-garbage-collector.php (added)
-
tags/1.5.3/vendor/freemius/includes/class-fs-lock.php (added)
-
tags/1.5.3/vendor/freemius/includes/class-fs-logger.php (added)
-
tags/1.5.3/vendor/freemius/includes/class-fs-options.php (added)
-
tags/1.5.3/vendor/freemius/includes/class-fs-plugin-updater.php (added)
-
tags/1.5.3/vendor/freemius/includes/class-fs-security.php (added)
-
tags/1.5.3/vendor/freemius/includes/class-fs-storage.php (added)
-
tags/1.5.3/vendor/freemius/includes/class-fs-user-lock.php (added)
-
tags/1.5.3/vendor/freemius/includes/customizer (added)
-
tags/1.5.3/vendor/freemius/includes/customizer/class-fs-customizer-support-section.php (added)
-
tags/1.5.3/vendor/freemius/includes/customizer/class-fs-customizer-upsell-control.php (added)
-
tags/1.5.3/vendor/freemius/includes/customizer/index.php (added)
-
tags/1.5.3/vendor/freemius/includes/debug (added)
-
tags/1.5.3/vendor/freemius/includes/debug/class-fs-debug-bar-panel.php (added)
-
tags/1.5.3/vendor/freemius/includes/debug/debug-bar-start.php (added)
-
tags/1.5.3/vendor/freemius/includes/debug/index.php (added)
-
tags/1.5.3/vendor/freemius/includes/entities (added)
-
tags/1.5.3/vendor/freemius/includes/entities/class-fs-affiliate-terms.php (added)
-
tags/1.5.3/vendor/freemius/includes/entities/class-fs-affiliate.php (added)
-
tags/1.5.3/vendor/freemius/includes/entities/class-fs-billing.php (added)
-
tags/1.5.3/vendor/freemius/includes/entities/class-fs-entity.php (added)
-
tags/1.5.3/vendor/freemius/includes/entities/class-fs-payment.php (added)
-
tags/1.5.3/vendor/freemius/includes/entities/class-fs-plugin-info.php (added)
-
tags/1.5.3/vendor/freemius/includes/entities/class-fs-plugin-license.php (added)
-
tags/1.5.3/vendor/freemius/includes/entities/class-fs-plugin-plan.php (added)
-
tags/1.5.3/vendor/freemius/includes/entities/class-fs-plugin-tag.php (added)
-
tags/1.5.3/vendor/freemius/includes/entities/class-fs-plugin.php (added)
-
tags/1.5.3/vendor/freemius/includes/entities/class-fs-pricing.php (added)
-
tags/1.5.3/vendor/freemius/includes/entities/class-fs-scope-entity.php (added)
-
tags/1.5.3/vendor/freemius/includes/entities/class-fs-site.php (added)
-
tags/1.5.3/vendor/freemius/includes/entities/class-fs-subscription.php (added)
-
tags/1.5.3/vendor/freemius/includes/entities/class-fs-user.php (added)
-
tags/1.5.3/vendor/freemius/includes/entities/index.php (added)
-
tags/1.5.3/vendor/freemius/includes/fs-core-functions.php (added)
-
tags/1.5.3/vendor/freemius/includes/fs-essential-functions.php (added)
-
tags/1.5.3/vendor/freemius/includes/fs-html-escaping-functions.php (added)
-
tags/1.5.3/vendor/freemius/includes/fs-plugin-info-dialog.php (added)
-
tags/1.5.3/vendor/freemius/includes/index.php (added)
-
tags/1.5.3/vendor/freemius/includes/l10n.php (added)
-
tags/1.5.3/vendor/freemius/includes/managers (added)
-
tags/1.5.3/vendor/freemius/includes/managers/class-fs-admin-menu-manager.php (added)
-
tags/1.5.3/vendor/freemius/includes/managers/class-fs-admin-notice-manager.php (added)
-
tags/1.5.3/vendor/freemius/includes/managers/class-fs-cache-manager.php (added)
-
tags/1.5.3/vendor/freemius/includes/managers/class-fs-checkout-manager.php (added)
-
tags/1.5.3/vendor/freemius/includes/managers/class-fs-clone-manager.php (added)
-
tags/1.5.3/vendor/freemius/includes/managers/class-fs-contact-form-manager.php (added)
-
tags/1.5.3/vendor/freemius/includes/managers/class-fs-debug-manager.php (added)
-
tags/1.5.3/vendor/freemius/includes/managers/class-fs-gdpr-manager.php (added)
-
tags/1.5.3/vendor/freemius/includes/managers/class-fs-key-value-storage.php (added)
-
tags/1.5.3/vendor/freemius/includes/managers/class-fs-license-manager.php (added)
-
tags/1.5.3/vendor/freemius/includes/managers/class-fs-option-manager.php (added)
-
tags/1.5.3/vendor/freemius/includes/managers/class-fs-permission-manager.php (added)
-
tags/1.5.3/vendor/freemius/includes/managers/class-fs-plan-manager.php (added)
-
tags/1.5.3/vendor/freemius/includes/managers/class-fs-plugin-manager.php (added)
-
tags/1.5.3/vendor/freemius/includes/managers/index.php (added)
-
tags/1.5.3/vendor/freemius/includes/sdk (added)
-
tags/1.5.3/vendor/freemius/includes/sdk/Exceptions (added)
-
tags/1.5.3/vendor/freemius/includes/sdk/Exceptions/ArgumentNotExistException.php (added)
-
tags/1.5.3/vendor/freemius/includes/sdk/Exceptions/EmptyArgumentException.php (added)
-
tags/1.5.3/vendor/freemius/includes/sdk/Exceptions/Exception.php (added)
-
tags/1.5.3/vendor/freemius/includes/sdk/Exceptions/InvalidArgumentException.php (added)
-
tags/1.5.3/vendor/freemius/includes/sdk/Exceptions/OAuthException.php (added)
-
tags/1.5.3/vendor/freemius/includes/sdk/Exceptions/index.php (added)
-
tags/1.5.3/vendor/freemius/includes/sdk/FreemiusBase.php (added)
-
tags/1.5.3/vendor/freemius/includes/sdk/FreemiusWordPress.php (added)
-
tags/1.5.3/vendor/freemius/includes/sdk/LICENSE.txt (added)
-
tags/1.5.3/vendor/freemius/includes/sdk/index.php (added)
-
tags/1.5.3/vendor/freemius/includes/supplements (added)
-
tags/1.5.3/vendor/freemius/includes/supplements/fs-essential-functions-1.1.7.1.php (added)
-
tags/1.5.3/vendor/freemius/includes/supplements/fs-essential-functions-2.2.1.php (added)
-
tags/1.5.3/vendor/freemius/includes/supplements/fs-migration-2.5.1.php (added)
-
tags/1.5.3/vendor/freemius/includes/supplements/index.php (added)
-
tags/1.5.3/vendor/freemius/index.php (added)
-
tags/1.5.3/vendor/freemius/languages (added)
-
tags/1.5.3/vendor/freemius/languages/freemius-cs_CZ.mo (added)
-
tags/1.5.3/vendor/freemius/languages/freemius-da_DK.mo (added)
-
tags/1.5.3/vendor/freemius/languages/freemius-de_DE.mo (added)
-
tags/1.5.3/vendor/freemius/languages/freemius-es_ES.mo (added)
-
tags/1.5.3/vendor/freemius/languages/freemius-fr_FR.mo (added)
-
tags/1.5.3/vendor/freemius/languages/freemius-he_IL.mo (added)
-
tags/1.5.3/vendor/freemius/languages/freemius-hu_HU.mo (added)
-
tags/1.5.3/vendor/freemius/languages/freemius-it_IT.mo (added)
-
tags/1.5.3/vendor/freemius/languages/freemius-ja.mo (added)
-
tags/1.5.3/vendor/freemius/languages/freemius-nl_NL.mo (added)
-
tags/1.5.3/vendor/freemius/languages/freemius-ru_RU.mo (added)
-
tags/1.5.3/vendor/freemius/languages/freemius-ta.mo (added)
-
tags/1.5.3/vendor/freemius/languages/freemius-zh_CN.mo (added)
-
tags/1.5.3/vendor/freemius/languages/freemius.pot (added)
-
tags/1.5.3/vendor/freemius/languages/index.php (added)
-
tags/1.5.3/vendor/freemius/require.php (added)
-
tags/1.5.3/vendor/freemius/start.php (added)
-
tags/1.5.3/vendor/freemius/templates (added)
-
tags/1.5.3/vendor/freemius/templates/account (added)
-
tags/1.5.3/vendor/freemius/templates/account.php (added)
-
tags/1.5.3/vendor/freemius/templates/account/billing.php (added)
-
tags/1.5.3/vendor/freemius/templates/account/index.php (added)
-
tags/1.5.3/vendor/freemius/templates/account/partials (added)
-
tags/1.5.3/vendor/freemius/templates/account/partials/activate-license-button.php (added)
-
tags/1.5.3/vendor/freemius/templates/account/partials/addon.php (added)
-
tags/1.5.3/vendor/freemius/templates/account/partials/deactivate-license-button.php (added)
-
tags/1.5.3/vendor/freemius/templates/account/partials/disconnect-button.php (added)
-
tags/1.5.3/vendor/freemius/templates/account/partials/index.php (added)
-
tags/1.5.3/vendor/freemius/templates/account/partials/site.php (added)
-
tags/1.5.3/vendor/freemius/templates/account/payments.php (added)
-
tags/1.5.3/vendor/freemius/templates/add-ons.php (added)
-
tags/1.5.3/vendor/freemius/templates/add-trial-to-pricing.php (added)
-
tags/1.5.3/vendor/freemius/templates/admin-notice.php (added)
-
tags/1.5.3/vendor/freemius/templates/ajax-loader.php (added)
-
tags/1.5.3/vendor/freemius/templates/api-connectivity-message-js.php (added)
-
tags/1.5.3/vendor/freemius/templates/auto-installation.php (added)
-
tags/1.5.3/vendor/freemius/templates/checkout (added)
-
tags/1.5.3/vendor/freemius/templates/checkout.php (added)
-
tags/1.5.3/vendor/freemius/templates/checkout/frame.php (added)
-
tags/1.5.3/vendor/freemius/templates/checkout/process-redirect.php (added)
-
tags/1.5.3/vendor/freemius/templates/checkout/redirect.php (added)
-
tags/1.5.3/vendor/freemius/templates/clone-resolution-js.php (added)
-
tags/1.5.3/vendor/freemius/templates/connect (added)
-
tags/1.5.3/vendor/freemius/templates/connect.php (added)
-
tags/1.5.3/vendor/freemius/templates/connect/index.php (added)
-
tags/1.5.3/vendor/freemius/templates/connect/permission.php (added)
-
tags/1.5.3/vendor/freemius/templates/connect/permissions-group.php (added)
-
tags/1.5.3/vendor/freemius/templates/contact.php (added)
-
tags/1.5.3/vendor/freemius/templates/debug (added)
-
tags/1.5.3/vendor/freemius/templates/debug.php (added)
-
tags/1.5.3/vendor/freemius/templates/debug/api-calls.php (added)
-
tags/1.5.3/vendor/freemius/templates/debug/index.php (added)
-
tags/1.5.3/vendor/freemius/templates/debug/logger.php (added)
-
tags/1.5.3/vendor/freemius/templates/debug/plugins-themes-sync.php (added)
-
tags/1.5.3/vendor/freemius/templates/debug/scheduled-crons.php (added)
-
tags/1.5.3/vendor/freemius/templates/email.php (added)
-
tags/1.5.3/vendor/freemius/templates/forms (added)
-
tags/1.5.3/vendor/freemius/templates/forms/affiliation.php (added)
-
tags/1.5.3/vendor/freemius/templates/forms/data-debug-mode.php (added)
-
tags/1.5.3/vendor/freemius/templates/forms/deactivation (added)
-
tags/1.5.3/vendor/freemius/templates/forms/deactivation/contact.php (added)
-
tags/1.5.3/vendor/freemius/templates/forms/deactivation/form.php (added)
-
tags/1.5.3/vendor/freemius/templates/forms/deactivation/index.php (added)
-
tags/1.5.3/vendor/freemius/templates/forms/deactivation/retry-skip.php (added)
-
tags/1.5.3/vendor/freemius/templates/forms/email-address-update.php (added)
-
tags/1.5.3/vendor/freemius/templates/forms/index.php (added)
-
tags/1.5.3/vendor/freemius/templates/forms/license-activation.php (added)
-
tags/1.5.3/vendor/freemius/templates/forms/optout.php (added)
-
tags/1.5.3/vendor/freemius/templates/forms/premium-versions-upgrade-handler.php (added)
-
tags/1.5.3/vendor/freemius/templates/forms/premium-versions-upgrade-metadata.php (added)
-
tags/1.5.3/vendor/freemius/templates/forms/resend-key.php (added)
-
tags/1.5.3/vendor/freemius/templates/forms/subscription-cancellation.php (added)
-
tags/1.5.3/vendor/freemius/templates/forms/trial-start.php (added)
-
tags/1.5.3/vendor/freemius/templates/forms/user-change.php (added)
-
tags/1.5.3/vendor/freemius/templates/gdpr-optin-js.php (added)
-
tags/1.5.3/vendor/freemius/templates/index.php (added)
-
tags/1.5.3/vendor/freemius/templates/js (added)
-
tags/1.5.3/vendor/freemius/templates/js/index.php (added)
-
tags/1.5.3/vendor/freemius/templates/js/jquery.content-change.php (added)
-
tags/1.5.3/vendor/freemius/templates/js/open-license-activation.php (added)
-
tags/1.5.3/vendor/freemius/templates/js/permissions.php (added)
-
tags/1.5.3/vendor/freemius/templates/js/style-premium-theme.php (added)
-
tags/1.5.3/vendor/freemius/templates/partials (added)
-
tags/1.5.3/vendor/freemius/templates/partials/index.php (added)
-
tags/1.5.3/vendor/freemius/templates/partials/network-activation.php (added)
-
tags/1.5.3/vendor/freemius/templates/plugin-icon.php (added)
-
tags/1.5.3/vendor/freemius/templates/plugin-info (added)
-
tags/1.5.3/vendor/freemius/templates/plugin-info/description.php (added)
-
tags/1.5.3/vendor/freemius/templates/plugin-info/features.php (added)
-
tags/1.5.3/vendor/freemius/templates/plugin-info/index.php (added)
-
tags/1.5.3/vendor/freemius/templates/plugin-info/screenshots.php (added)
-
tags/1.5.3/vendor/freemius/templates/pricing.php (added)
-
tags/1.5.3/vendor/freemius/templates/secure-https-header.php (added)
-
tags/1.5.3/vendor/freemius/templates/sticky-admin-notice-js.php (added)
-
tags/1.5.3/vendor/freemius/templates/tabs-capture-js.php (added)
-
tags/1.5.3/vendor/freemius/templates/tabs.php (added)
-
tags/1.5.3/vendor/smalot (added)
-
tags/1.5.3/vendor/smalot/pdfparser (added)
-
tags/1.5.3/vendor/smalot/pdfparser/.github (added)
-
tags/1.5.3/vendor/smalot/pdfparser/.github/ISSUE_TEMPLATE (added)
-
tags/1.5.3/vendor/smalot/pdfparser/.github/ISSUE_TEMPLATE/incorrect-parsing.md (added)
-
tags/1.5.3/vendor/smalot/pdfparser/.github/pull_request_template.md (added)
-
tags/1.5.3/vendor/smalot/pdfparser/.github/workflows (added)
-
tags/1.5.3/vendor/smalot/pdfparser/.github/workflows/coding-standards.yml (added)
-
tags/1.5.3/vendor/smalot/pdfparser/.github/workflows/continuous-integration.yml (added)
-
tags/1.5.3/vendor/smalot/pdfparser/.github/workflows/performance.yml (added)
-
tags/1.5.3/vendor/smalot/pdfparser/.php-cs-fixer.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/CONTRIBUTING.md (added)
-
tags/1.5.3/vendor/smalot/pdfparser/LICENSE.txt (added)
-
tags/1.5.3/vendor/smalot/pdfparser/Makefile (added)
-
tags/1.5.3/vendor/smalot/pdfparser/README.md (added)
-
tags/1.5.3/vendor/smalot/pdfparser/alt_autoload.php-dist (added)
-
tags/1.5.3/vendor/smalot/pdfparser/composer.json (added)
-
tags/1.5.3/vendor/smalot/pdfparser/doc (added)
-
tags/1.5.3/vendor/smalot/pdfparser/doc/CustomConfig.md (added)
-
tags/1.5.3/vendor/smalot/pdfparser/doc/Developer.md (added)
-
tags/1.5.3/vendor/smalot/pdfparser/doc/Usage.md (added)
-
tags/1.5.3/vendor/smalot/pdfparser/phpunit-windows.xml (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Config.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Document.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementArray.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementBoolean.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementDate.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementHexa.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementMissing.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementName.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNull.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNumeric.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementString.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementStruct.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementXRef.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/AbstractEncoding.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/EncodingLocator.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin1Encoding.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin9Encoding.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/MacRomanEncoding.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PDFDocEncoding.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PostScriptGlyphs.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/StandardEncoding.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/WinAnsiEncoding.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/EmptyPdfException.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/EncodingNotFoundException.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/InvalidDictionaryObjectException.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/MissingCatalogException.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/MissingPdfHeaderException.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/NotImplementedException.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType0.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType2.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontTrueType.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType0.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType1.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType3.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Header.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/PDFObject.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Page.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Pages.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/Parser.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/FilterHelper.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/RawDataParser.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Form.php (added)
-
tags/1.5.3/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Image.php (added)
-
tags/1.5.3/vendor/symfony (added)
-
tags/1.5.3/vendor/symfony/polyfill-mbstring (added)
-
tags/1.5.3/vendor/symfony/polyfill-mbstring/LICENSE (added)
-
tags/1.5.3/vendor/symfony/polyfill-mbstring/Mbstring.php (added)
-
tags/1.5.3/vendor/symfony/polyfill-mbstring/README.md (added)
-
tags/1.5.3/vendor/symfony/polyfill-mbstring/Resources (added)
-
tags/1.5.3/vendor/symfony/polyfill-mbstring/Resources/unidata (added)
-
tags/1.5.3/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php (added)
-
tags/1.5.3/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php (added)
-
tags/1.5.3/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php (added)
-
tags/1.5.3/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php (added)
-
tags/1.5.3/vendor/symfony/polyfill-mbstring/bootstrap.php (added)
-
tags/1.5.3/vendor/symfony/polyfill-mbstring/bootstrap80.php (added)
-
tags/1.5.3/vendor/symfony/polyfill-mbstring/composer.json (added)
-
trunk/askany.php (modified) (2 diffs)
-
trunk/assets/css/admin.css (modified) (3 diffs)
-
trunk/assets/css/dynamic-pricing.css (added)
-
trunk/assets/css/frontend.css (modified) (3 diffs)
-
trunk/assets/css/pro-features.css (added)
-
trunk/assets/js/admin.js (modified) (7 diffs)
-
trunk/assets/js/dynamic-pricing.js (added)
-
trunk/assets/js/encryption.js (modified) (9 diffs)
-
trunk/assets/js/frontend.js (modified) (9 diffs)
-
trunk/assets/js/markdown-parser.js (added)
-
trunk/assets/js/pro-modal.js (added)
-
trunk/assets/library/toastmaster.min.js (modified) (1 diff)
-
trunk/dist/css/frontend.min.css (modified) (1 diff)
-
trunk/dist/js/frontend.min.js (modified) (1 diff)
-
trunk/includes/class-admin-pages.php (modified) (2 diffs)
-
trunk/includes/class-ajax-handler.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
askany/trunk/askany.php
r3409111 r3411709 4 4 * Plugin URI: https://wordpress.org/plugins/askany 5 5 * 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. 26 * Version: 1.5.3 7 7 * Requires at least: 5.9 8 8 * Requires PHP: 7.4 … … 66 66 67 67 // Define plugin constants. 68 define('ASKANY_VERSION', '1.5. 2');68 define('ASKANY_VERSION', '1.5.3'); 69 69 define('ASKANY_PLUGIN_FILE', __FILE__); 70 70 define('ASKANY_PLUGIN_DIR', plugin_dir_path(__FILE__)); -
askany/trunk/assets/css/admin.css
r3336134 r3411709 261 261 } 262 262 263 button#upload-avatar-button, 264 button#toggle-api-key { 263 button#upload-avatar-button { 265 264 margin-top: 10px; 266 265 } … … 1874 1873 } 1875 1874 1876 .askany-message.user {1875 /* .askany-message.user { 1877 1876 justify-content: flex-end; 1878 } 1877 } */ 1879 1878 1880 1879 .askany-message.agent, … … 3452 3451 3453 3452 /* 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 892 892 } 893 893 894 .chat-message.user-message {894 /* .chat-message.user-message { 895 895 justify-content: flex-end; 896 } 896 } */ 897 897 898 898 .chat-message.assistant-message { … … 2090 2090 min-height: 0; 2091 2091 padding: 15px; 2092 margin-top: -50px; 2092 2093 } 2093 2094 … … 4181 4182 } 4182 4183 } 4184 4185 /* 4186 Message 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 10 10 const apiKeyInput = document.getElementById('askany_api_key'); 11 11 const apiURLInput = document.getElementById('askany_api_url'); 12 const apiModelSelect = document.getElementById('askany_api_model'); 12 13 13 14 const uploadPdfButton = document.getElementById('askany-upload-pdf'); … … 155 156 const provider = apiProviderSelect.value; 156 157 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 158 222 fetch(askanyAdmin.ajaxUrl, { 159 223 method: 'POST', … … 171 235 if (data.success) { 172 236 // 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 176 241 if (apiUrlInput) { 177 242 apiUrlInput.value = data.data.api_url || ''; 178 243 } 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); 179 250 } 180 251 }) … … 601 672 // showNotice(isUpdate ? askanyAdmin.i18n.updateSuccess : askanyAdmin.i18n.addSuccess, 'success'); 602 673 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 603 681 // Reload page to show updated list 604 682 setTimeout(function () { … … 703 781 Toast.success(askanyAdmin.i18n.deleteSuccess || 'Q&A pair deleted successfully!'); 704 782 783 // Update Q&A count 784 if (window.askanyQA) { 785 window.askanyQA.qaCount--; 786 window.askanyQA.updateProLockUI(); 787 } 788 705 789 // Remove row with fade effect 706 790 row.style.transition = 'opacity 0.4s'; … … 748 832 749 833 function testApiConnection(e) { 750 751 // console.log('Testing API connection...');752 834 e.preventDefault(); 753 835 754 836 const provider = apiProviderSelect.value; 755 837 const apiKey = apiKeyInput.value; 756 const api Url = apiURLInput.value;838 const apiModel = apiModelSelect ? apiModelSelect.value : ''; 757 839 758 840 if (!apiKey) { 759 // showNotice(askanyAdmin.i18n.noApiKey || 'Please enter an API key first', 'error');760 841 Toast.warn(askanyAdmin.i18n.noApiKey || 'Please enter an API key first'); 761 842 return; 762 843 } 763 844 764 const testButton = document.getElementById(' test-api-connection');845 const testButton = document.getElementById('askany-ai-connect-test'); 765 846 766 847 Toast.loading('Testing API connection...'); 767 848 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) 771 854 fetch(askanyAdmin.ajaxUrl, { 772 855 method: 'POST', … … 779 862 provider: provider, 780 863 api_key: apiKey, 781 api_ url: apiUrl864 api_model: apiModel 782 865 }) 783 866 }) 784 867 .then(response => response.json()) 785 868 .then(data => { 869 Toast.loading(false); 870 786 871 if (data.success) { 787 // Create detailed connection status notice788 872 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 } 802 882 } 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); 806 886 } 807 887 }) 808 888 .catch(error => { 809 889 console.error('Error:', error); 810 showTestNotice('Network error during connection test', 'error');811 890 Toast.loading(false); 812 891 Toast.error('Network error during connection test'); 813 892 }) 814 893 .finally(() => { 815 setLoading(testButton, false);816 Toast.loading(false);817 894 if (testButton) { 895 setLoading(testButton, false); 896 } 818 897 }); 819 898 } -
askany/trunk/assets/js/encryption.js
r3336134 r3411709 11 11 this.textEncoder = new TextEncoder(); 12 12 this.textDecoder = new TextDecoder(); 13 this.cryptoKey = null; 14 this.isInitialized = false; 13 15 14 // Initialize encryption key 15 this.initializeKey(); 16 // Don't initialize automatically - let caller do it when ready 16 17 } 17 18 … … 20 21 */ 21 22 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 22 34 try { 23 35 // Try to get existing key from localStorage … … 38 50 await this.generateNewKey(); 39 51 } 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; 43 57 } 44 58 } … … 48 62 */ 49 63 async generateNewKey() { 64 if (!ChatEncryption.isSupported()) { 65 throw new Error('Web Crypto API not supported'); 66 } 67 50 68 try { 51 69 this.cryptoKey = await window.crypto.subtle.generateKey( … … 117 135 async decrypt(encryptedData) { 118 136 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 119 143 if (!this.cryptoKey) { 120 144 await this.initializeKey(); 145 } 146 147 if (!this.cryptoKey) { 148 // Encryption not available, return as-is 149 return encryptedData; 121 150 } 122 151 … … 142 171 return this.textDecoder.decode(decryptedData); 143 172 } 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) 146 174 return encryptedData; 147 175 } … … 284 312 deobfuscateData(obfuscatedData) { 285 313 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 286 320 const decoded = atob(obfuscatedData); 287 321 const parts = decoded.split('|'); … … 291 325 return obfuscatedData; 292 326 } 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); 294 329 return obfuscatedData; 295 330 } … … 297 332 } 298 333 299 // Create global instance 300 window.chatEncryption = new ChatEncryption(); 334 // Expose the class globally for static method access 335 window.ChatEncryption = ChatEncryption; 336 337 // Create global instance only if supported 338 if (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 } 301 357 302 358 // Export for module usage -
askany/trunk/assets/js/frontend.js
r3387630 r3411709 481 481 482 482 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); 489 485 490 486 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); 492 492 var $message = $( 493 '<div class="chat-message assistant-message">' + 493 '<div class="chat-message assistant-message" data-message-id="' + message.id + '">' + 494 avatarHtml + 494 495 '<div class="message-bubble">' + formatMessageContent(message.message) + '</div>' + 495 496 '</div>' … … 507 508 processedMessageIds.add(message.id); 508 509 509 // Add agent message with proper formatting 510 // Add agent message with proper formatting and avatar 511 var avatarHtml = getAvatarHtml(false); 510 512 var $message = $( 511 513 '<div class="chat-message assistant-message" data-message-id="' + message.id + '">' + 514 avatarHtml + 512 515 '<div class="message-bubble">' + formatMessageContent(message.message) + '</div>' + 513 516 '</div>' … … 643 646 } 644 647 645 // Function to format message content with proper links and styling648 // Function to format message content with markdown and proper links 646 649 function formatMessageContent(text) { 647 650 if (!text) return text; 648 651 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 } 659 672 660 673 // Format external source references with better styling … … 664 677 // Clean up multiple line breaks 665 678 text = text.replace(/(<br\s*\/?>){3,}/g, '<br><br>'); 666 667 // Format lists better668 text = text.replace(/^\d+\.\s/gm, '<br>• ');669 text = text.replace(/^-\s/gm, '<br>• ');670 679 671 680 return text.trim(); … … 714 723 var formattedText = (!isUser && !isProduct) ? formatMessageContent(text) : text; 715 724 725 // Get avatar HTML 726 var avatarHtml = getAvatarHtml(isUser); 727 716 728 var $message = $( 717 729 '<div class="chat-message ' + messageClass + ' message-entering">' + 730 avatarHtml + 718 731 '<div class="message-bubble' + (isProduct ? ' product-message' : '') + '">' + formattedText + '</div>' + 719 732 '</div>' … … 1025 1038 // Load existing messages on widget initialization 1026 1039 async function loadExistingMessages() { 1040 if (!sessionId || typeof askanyData === 'undefined') { 1041 console.log('Cannot load messages - no session ID'); 1042 return; 1043 } 1044 1027 1045 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 } 1048 1102 } 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 }); 1070 1113 } catch (error) { 1071 console.error('Failed to load existingmessages:', error);1072 // Add welcome message as fallback only if not already added1114 console.error('Failed to load messages:', error); 1115 // Add welcome message on error 1073 1116 if (!welcomeMessageAdded) { 1074 a wait 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); 1075 1118 welcomeMessageAdded = true; 1076 // Force scroll to bottom after adding welcome message1077 setTimeout(function () {1078 forceScrollToBottom();1079 }, 100);1080 1119 } 1081 1120 } … … 1087 1126 }, 1500); 1088 1127 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 1089 1163 // Function to add a message to the chat and save to local storage 1090 1164 async function addMessage(text, isUser, isProduct, isSystem) { … … 1099 1173 var formattedText = (!isUser && !isProduct) ? formatMessageContent(text) : text; 1100 1174 1175 // Get avatar HTML 1176 var avatarHtml = getAvatarHtml(isUser); 1177 1101 1178 var $message = $( 1102 1179 '<div class="chat-message ' + messageClass + '">' + 1180 avatarHtml + 1103 1181 '<div class="message-bubble' + (isProduct ? ' product-message' : '') + (isSystem ? ' system-bubble' : '') + '">' + formattedText + '</div>' + 1104 1182 '</div>' … … 2123 2201 } 2124 2202 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 2126 2208 if (decryptedResponse.message) { 2127 var formattedMessage = formatAIResponse(decryptedResponse.message); 2128 addMessage(formattedMessage, false, false); 2209 setTimeout(function() { 2210 pollForNewMessages(); 2211 }, 500); 2129 2212 } 2130 2213 -
askany/trunk/assets/library/toastmaster.min.js
r3296536 r3411709 3 3 * A lightweight, versatile modal and toast notification library that works seamlessly with vanilla JavaScript, React, Vue and other frameworks. 4 4 */ 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||""}">×</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","A dvanced securitypackages"],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||""}">×</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={"&":"&","<":"<",">":">",'"':""","'":"'"},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"))&>()&&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">×</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={"&":"&","<":"<",">":">",'"':""","'":"'"},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&<(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&<(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">×</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 419 419 } 420 420 421 // Check if pro version is active 422 $plugin = \Askany\Plugin::get_instance(); 423 $is_pro = $plugin->is_pro_active(); 424 421 425 // Get data to pass to the template. 422 426 $data = array( … … 425 429 'current_user_id' => get_current_user_id(), 426 430 'stats' => $this->database->get_session_statistics(), 431 'is_pro' => $is_pro, 427 432 ); 428 433 -
askany/trunk/includes/class-ajax-handler.php
r3393775 r3411709 148 148 add_action('wp_ajax_askany_get_session_info', array( $this, 'get_session_info' )); 149 149 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' )); 150 154 151 155 // Save user message only AJAX handler … … 1610 1614 'has_agent' => ! empty($session->agent_id), 1611 1615 )); 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 )); 1612 1645 } 1613 1646 -
askany/trunk/readme.txt
r3409111 r3411709 3 3 Tags: ai chat, chatbot, customer support, woocommerce, pdf search, openai, deepseek 4 4 Requires at least: 5.9 5 Tested up to: 6. 96 Stable tag: 1.5. 25 Tested up to: 6.8 6 Stable tag: 1.5.3 7 7 Requires PHP: 7.4 8 8 License: GPLv2 or later … … 290 290 == Changelog == 291 291 292 = 1.5.3 – 05 Dev 2025 = 293 - ⚙️ Fixed duplicate message response 294 292 295 = 1.5.2 – 03 Dev 2025 = 293 - **Enhancement:** WP 6.9 compatibility 296 - **Enhancement:** WP 6.9 compatibility 294 297 295 298 = 1.5.1 – 12 Nov 2025 =
Note: See TracChangeset
for help on using the changeset viewer.