= 0.22.9 =
* Answers the assistant gives on its own now reach the Agent Inbox too. Your own answers, the "did you mean" choice, the answer suggestions under the greeting, the pleasantries and the handover line were all shown to the visitor while the Inbox displayed the question with nothing under it — so an operator could answer the same thing a second time, or differently. On a site that keeps its prices as own answers, that was every price question. Reproduced on a live site and confirmed in the database.
* The answer suggestions under the greeting previously mirrored nothing at all: a visitor who started the conversation by clicking one stayed completely invisible to the team.
* A reply shown to the visitor but never mirrored now says so in the browser console instead of passing unnoticed. That silence is what kept this hidden; a future answer source that forgets to mirror reports itself.
* Only the identifier of a locally answered reply is sent to the site, never the text — the site looks the answer up in its own options, so nothing a browser types can enter a conversation as something the assistant supposedly said.

= 0.22.8 =
* A plain AI conversation no longer sits in the Agent Inbox as if it were waiting for a person. Only a visitor who actually asks for one — or leaves their address — is marked as waiting. An inbox full of people who are not waiting stops being read, and then the real request goes unnoticed in it.

= 0.22.7 =
* The assistant's own answers no longer go missing from the Agent Inbox. On the very first exchange the conversation is still being created while the AI is already answering, and the reply was dropped if that took more than a few seconds — the visitor saw the answer, the team saw only the question, and could well repeat or contradict it. Observed on a live site where creating the conversation took 15 seconds.
* When a reply genuinely cannot be attached to a conversation, that is now written to the browser console instead of being swallowed. The silence is what kept this invisible.

= 0.22.6 =
* Setup now fills in what your site already says about itself. It reads the imprint and contact page for your phone number, e-mail and address, and the first paragraph of your home page for what you actually do — three ready answers instead of three empty fields. Measured on real sites first: an e-mail was found on 3 of 3, an address on 3 of 3.
* Deliberately not guessed: opening hours. A wrong opening time looks right and sends a visitor to a closed door, so that field stays yours to fill.
* The final setup screen no longer congratulates you on a single stored answer. Below two it says what is missing and offers a button straight back to the answers, with the cursor in the first empty field.

= 0.22.5 =
* The dashboard now says when your unanswered questions arrived. "Fifteen went unanswered" reads the same whether they came at lunchtime or at half past eleven at night — one of those you could still have followed up on. Counted from timestamps already stored; the question text is still never kept.
* Support hours moved out of the narrow statistics column, where the weekday table ran off the edge, into the main column beside the other Live Chat settings — with From/To column headers, which were missing.
* The card now explains what happens inside and outside those hours, and what that means with and without Managed AI. It is a real difference: with it the assistant keeps answering at three in the morning, without it the visitor can only leave an address.
* The dashboard treated Managed AI and Live Chat as active whenever the checkbox was ticked, even without service credentials — so it reported them as done while the visitor got neither, and hid the hint about unanswered questions exactly where it was needed.
* "Run setup again" is a quiet line at the bottom instead of its own section; anyone reading it finished setup long ago.
* A help text in the proactive greeting was still English on German sites.

= 0.22.4 =
* The free assistant no longer hands a visitor an empty box. If no own answers are stored — which is what clicking through setup without typing leaves behind — it offers to take an enquiry instead of ending in a dead end.
* The dashboard tile said "Live" while your "hide on these pages" rules could be hiding the widget. It now names how many rules are active.
* Support hours finally have a screen. The schedule that decides the offline path could not be set anywhere before, on any plan.
* The funnel on shop sites showed five rows, four of which could never fill up, which also pinned the one real row at 0%. It now shows the steps this installation can actually produce.
* The hint under the proactive greeting described its dependency backwards, and the combination that silently does nothing now says so.
* Two dead files are no longer shipped.

= 0.22.3 =
* Live Inbox mirroring now repairs a stale, deleted or expired visitor session automatically and retries the current message once. Locally answered FAQ questions also open the Inbox when Live Chat is active; previously an entire FAQ-only conversation could remain invisible to the team.
* AI answers safely render descriptive Markdown links and bold emphasis without accepting HTML, so visitors no longer see raw `[label](url)` or `**text**` markers.
* Managed AI now treats follow-up questions as new information requests, avoids repeating its previous recommendation, and gives the most specific supplied product or contact link when an exact price is unavailable.

= 0.22.1 =
* Correctly centres the final setup screen's “Ready for launch” label at desktop and mobile widths.

= 0.22.0 =
* A completely redesigned five-step setup guides owners through business profile, branding, answers, capabilities and launch, with a live widget preview and a compact mobile flow.
* Fresh installs remain private until the owner deliberately activates or previews the widget. Reopening setup preserves saved answers and the current public status.
* Free, Starter and Pro capabilities are explained without silently granting paid access or downgrading an existing plan.
* The own-logo white-label feature is now clearly listed under Starter and Pro and is only published after valid hosted access is connected. Owners may prepare and preview the logo before upgrading.
* Hybrid AI conversations now tell visitors they can ask another question instead of showing the internal "Waiting" state after the AI has replied. A real human request keeps the honest waiting message.
* Managed-AI service sites use translated conversation starters for services, pricing, contact and privacy. An English page no longer exposes German headings from the owner's source FAQ.
* Better answer policy across every managed site: answer price questions directly, recommend before redirecting, ask at most one focused follow-up, and never invent outcomes or response-time promises.
* Setup can now collect four optional quality notes: what the business offers, permitted price information, forbidden promises and the desired next step. The same structured fields remain editable in settings and become explicit AI context.
* Visibility settings now summarise the active public page types and exclusions, with a signed-in administrator preview that always shows the widget on the homepage without changing public rules.
* Agent Inbox deletion moved behind a quiet three-dot menu and a permanent-delete confirmation. Waiting visitor messages receive a stronger visual marker; the safe Done/Close swipe remains.
* Regenerated the complete translation template and German language file from the current code. No German plugin string is left untranslated.

For releases before 0.22.0, see [changelog.txt](https://plugins.svn.wordpress.org/alynivo/trunk/changelog.txt).
# Alynivo — full changelog

The most recent releases are in readme.txt, which is what the plugin
directory shows. Everything older lives here so the directory page stays
about the plugin rather than its history.

= 0.21.5 =
* On a WooCommerce shop the chat was missing exactly where visitors arrive: homepage, blog, contact, about. It only appeared on shop, product, cart and checkout pages. This is the pre-0.21.2 mistake mirrored — that one hid the widget on sites without a shop, this one hid it on sites with one. Existing installs are corrected once on update, unless the owner had already chosen their own pages.
* No more "Online now" with a green dot when there is no Live Chat and therefore nobody to be online. The assistant now says it answers right away, and green is reserved for a person actually attending the conversation.
* A single "/" typed into "hide on these pages" hid the widget on the entire site, because that character sits at position 0 of every path. It is ignored now, like a lone "*" already was.
* Screenshot captions 6 and 8 described features that do not exist. Corrected to what the pictures actually show.
* Two sentences promised support hours that no screen in the plugin lets you set. Rewritten to describe what the product really does when nobody is attending.
* The download is roughly half the size: a 1.15 MB source map that nothing loads is no longer shipped.
* The page-visibility help text claimed that selecting nothing hides the widget everywhere. It has not worked that way for some time.

= 0.21.4 =
* The free version now understands how people actually write. "Ich möchte mit einem Menschen sprechen" was missed because the list held a different case ending; "Bist du eigentlich ein Bot?" was missed over one inserted word; "Danke dir" was missed because "dir" was not in the list. Phrases are matched as a run of words now.
* Own answers are found by their answer text too, not only by the question field. A question about parking went unanswered while the stored answer read "parking behind the building".
* Quick replies no longer pile up: four unanswered questions used to leave sixteen buttons on screen.
* The enquiry e-mail arrived with a German subject and an English body, and said "Page: —" on every enquiry. Both fixed.
* Directory page: two thirds shorter. Releases before 0.20.0 moved to changelog.txt.

= 0.21.3 =
* Fixed the chat answering in the wrong language. On sites using Polylang the language could arrive empty, and the assistant then fell back to English — the cause of replies that were sometimes English and sometimes German on the same site.
* A greeting like "hi" is an English word, so the assistant read it as English even on a German site. Openers too short to place are now answered in the site's language instead of being guessed at. Only openers: a short "thanks" inside an English conversation stays English.
* "Talk to a person" no longer leads nowhere. The request now appears in the Inbox as a real message, so your team can see someone asked for a person, and the visitor gets an honest reply about whether anyone is reachable right now — including an enquiry form when nobody is.
* The assistant no longer says "Waiting for a reply" when nobody is attending the chat.
* Your own answers no longer take over questions they do not fit. One word in common used to be enough, so a question about the chat bubble's colour could be answered with an entry about something else entirely. A match now has to be clear before it is used.
* With Managed AI, your own answers are sent to the assistant as knowledge instead of being served verbatim from the browser — so it can use your facts and reply in the visitor's own language.
* When two of your own answers fit a question equally well, the assistant now asks which one you meant instead of picking one. Writing more answers can no longer take an existing one away.
* Deactivating the plugin now asks why, once. Nothing is sent unless you press the send button; "Just deactivate" switches it off immediately.
* Admin menu: the duplicate "Managed AI & Live Chat" entry, which opened the same screen as the entry above it, is gone. On sites without WooCommerce the Alynivo menu now reads Overview, Agent Inbox, Settings, and an Upgrade badge that disappears once you have both hosted features. On WooCommerce sites Alynivo stays the single entry it has always been under the WooCommerce menu, so it does not crowd out the shop's own items.

= 0.21.1 =
* Every "Cloud" badge now disappears as soon as its feature is switched on — on the settings row, in the setup checklist and next to your own answers. Booking the hosted plan leaves the screen free of any upgrade prompt.

= 0.21.0 =
* Clearer picture of what the optional hosted features add: a card in the sidebar listing them with the starting price, "Cloud" badges on the settings they belong to, and the hint next to your own answers now carries one too. All of it disappears entirely once you have access.

= 0.20.3 =
* The enquiry form is now on by default. Without it, a plugin activated without running the setup wizard left every unanswered question at a dead end. Messages go to the site's admin address unless another one is given.
* Launcher style and position moved into a "Fine tuning" section, so the Design tab leads with the four things that actually change how the chat looks.

= 0.20.2 =
* Far fewer decisions on screen. Settings that only take effect once a feature is switched on now appear only then: knowledge base and persona with Managed AI, presence, page context, proactive outreach and the Agent Inbox with Live Chat. Connection details (service URL, site ID, token) moved into a collapsed section — you fill them in once. A new install now shows 14 settings instead of 34; nothing was removed, and nothing is lost on save.

= 0.20.1 =
* Links and e-mail addresses in answers are now clickable. Previously a visitor had to retype the address by hand — even though the setup wizard itself suggests answers containing a link.
* New "Hide on these pages" setting: list paths (one per line or comma separated) where the widget should never appear — useful for checkout or a focused landing page. Overrides the page types above it.

= 0.20.0 =
* Redesigned settings screen: a tab bar (Start, Assistant, Managed AI & Live Chat, Design, Visibility) replaces the single long page, with a dashboard as the landing tab — status at a glance, a setup checklist with progress, and your chat statistics.
* The dashboard shows how many visitor questions went unanswered in the last 30 days — only the count is ever stored, never the question — with a direct path to Managed AI or to adding more own answers.
* Bundled translations now take precedence over the automatic wordpress.org language pack, which was partial and silently switched half the German interface back to English.
* Connection status for Managed AI & Live Chat is shown as a clear Connected / Not connected chip, and a menu shortcut leads straight to that tab.
* Chat widget polish: messages and the panel now ease in with a short animation, buttons lift on hover. Fully disabled for visitors who prefer reduced motion.
* Fixed the German "Open" label ("Öffnung" → "Öffnen").

= 0.19.4 =
* The assistant now offers your own answers as buttons instead of handing visitors an empty input box. On a site without a shop the chat used to open with nothing but a greeting, so visitors had to guess what it knew — guess wrong, and it looked useless while your answers sat right there. The first click is now a guaranteed hit.
* When it genuinely cannot answer something, it says so and then shows what it does cover, before offering the enquiry form. A dead end becomes a next step.

= 0.19.3 =
* The free version now handles what people actually write. "Hi", "danke", "tschüss", "ok", "are you a bot?", "I want to talk to someone" and "what can you do?" used to fall through to "I cannot answer that reliably" plus a contact form — on the visitor's very first message, which made the assistant look broken. All of these now get a proper reply, in all six widget languages, with no AI and no cost. Asking for a person opens the enquiry form straight away.
* A greeting is only treated as a greeting when that is the whole message: "hallo, wann habt ihr offen?" still reaches your own answers.

= 0.19.2 =
* Fixed the widget never appearing on sites without WooCommerce. The page-type defaults only covered shop, product, cart and checkout, which cannot match anything without a shop plugin, so setup reported "widget is enabled" while no page of the site ever showed it. Existing installations repair themselves on update — a visibility setting that cannot match a single page is now treated as unintended and falls back to the ordinary pages.
* Fixed the assistant being suppressed entirely on a site that never opened the setup wizard. The mode defaults to "Store", and store mode refused to render without WooCommerce even though the assistant already downgrades to Service mode in that case.
* Fixed the chosen business type being discarded on the way into the database, so the suggested answers fell back to the generic set and the trade was forgotten on the next run.
* The suggested answers now follow the business type as you pick it. Previously they were built when the page loaded, so on a fresh install everyone reached step 2 with the generic suggestions no matter which trade they had clicked.
* Added "Practice & health" and "Gym & classes" as business types, and "Online shop" now gets its own shipping question even without WooCommerce.
* The settings screen no longer shows shop, product, cart and checkout options, the assistant mode picker, the recommendation limit or the product-finder statistics on sites without WooCommerce — the plugin detects the shop itself instead of asking.
* Added a "Run setup again" button to the settings screen.

= 0.19.1 =
* The setup wizard's suggested answers now follow the form of address configured for the site, so a site that addresses visitors formally no longer gets informal sentences dropped into it.

= 0.19.0 =
* Rebuilt the setup wizard so a fresh install actually answers questions. It now asks what kind of business the site is — in plain words, not "Store/Service/Both" — and then shows answers already filled in from the site itself: contact page, privacy policy, what the business does. You correct what is wrong instead of starting from an empty form.
* Answers that need a fact only you know (opening hours, delivery times) ship with an empty field and the example in the placeholder, so a sample answer can never be published by accident.
* The enquiry form is offered in the same step, with your admin address filled in.
* "Set up later" no longer throws away what you typed — it only leaves the widget switched off.
* Fixed: the German admin translation was months out of date, so parts of the settings screen appeared in English on German sites. All 356 translatable strings are now translated.
* Accessibility: the wizard step bar is keyboard-operable, panes are properly hidden, and every answer field has a label.

= 0.18.3 =
* Fixed the enquiry form and the "assistant unavailable" notice showing English text on French, Turkish, Italian and Spanish sites. Those seven strings shipped in German and English only, so visitors saw two languages in one conversation. All six built-in widget languages are complete again.

= 0.18.2 =
* Renamed to "Alynivo – Live Chat & AI Chatbot for Customer Support" so the listing says what the plugin is actually used for. Same plugin, same settings, nothing to do.

= 0.18.1 =
* Your own questions and answers now apply in every plan, not just the free one. They are checked before the AI, so a question you wrote an answer for is answered instantly, identically every time, and without using your AI allowance. Skipped once a conversation has reached the Live inbox, so an operator is never talked over.
* The enquiry form is now also offered when the AI itself cannot be reached.

= 0.18.0 =
* New in the free version: your own questions and answers. Enter up to 10 pairs under Alynivo settings; the assistant matches them directly in the visitor's browser — no AI call, no cost, nothing leaves the site. Besides the question you can add words customers actually use ("Opening hours, when open, Saturday").
* New in the free version: "Leave an enquiry". When the assistant cannot help, visitors can leave name, e-mail and message. It is sent by e-mail from your own WordPress site — nothing is stored and nothing goes to Alynivo. Includes a honeypot and rate limiting.
* Together these give the free version a real purpose on sites without a shop, where it previously had almost nothing to say.

= 0.17.2 =
* Fixed the free tier answering almost nothing on sites without WooCommerce. In Service mode the assistant replied to every question except "thanks" with a fallback that offered product recommendations — on a site that has no products. Service mode now has its own wording and no longer shows product quick replies.
* Same fix for the "assistant temporarily unavailable" message, which also pointed to a product finder that does not exist in Service mode.

= 0.17.1 =
* New: Formal address option for German. The widget's built-in German text (greeting, buttons, placeholders) defaults to "du" — sites written entirely in "Sie" can now switch it under Alynivo settings ("Formal address (German)").

= 0.17.0 =
* New: Proactive outreach (Live Chat). Optionally send a fixed opening message on your own initiative once a visitor has stayed on a page (or the site) long enough — no AI cost for the opener itself. If the visitor replies, the conversation continues exactly like any other Live conversation: real AI answer, then a human takeover whenever you want it.
* Configure under Alynivo settings: enable, wait time in seconds, the opening message, and an optional page filter.

= 0.16.17 =
* Dark Mode: the "AI" label and the AI reply bubble itself used a leftover CSS selector that never matched, so both stayed in light colors and were hard to read against the dark Inbox.

= 0.16.16 =
* Dark Mode, second pass: the composer's attach button and the saved-replies/draft pills were nearly invisible against the dark UI. Nine total elements missed by the first Dark Mode pass are now fixed.
* Fixed a long-standing bug where an AI reply shown in the widget never made it into the shared Inbox history — a database constraint silently rejected every one of those writes since the feature shipped.

= 0.16.15 =
* Mobile Inbox: fixed a layout bug that left oversized blank bands above and below the message list on phones, shrinking how much conversation history was visible at once. The header and reply bar now size to their actual content.

= 0.16.14 =
* Dark Mode fix: the message thread, the "take over to reply" bar, and a few remaining panels stayed light instead of switching to dark, most visible on mobile.

= 0.16.13 =
* New setting "Live pages in presence": see which pages visitors have open right now in the Agent Inbox, without storing anything.
* This is now independent of the existing "Page context for agents" setting, which stores a page trail on the conversation and still requires visitor consent.
* Fixes a trap in the old behaviour where enabling page context without a consent tool silently stopped the "on the site" counter entirely.

= 0.16.12 =
* Hybrid AI + Live Chat: the "AI already answered this" mirror shown in the shared inbox now carries a signed proof from the hosted assistant, instead of trusting whatever a browser sends.
* No visible change for visitors; existing conversations are unaffected.

= 0.16.11 =
* Desktop browser widget: reduced the maximum panel height from 720px to 620px for a more compact conversation window.
* The phone layout remains the same near-full-screen sheet and growing conversations still scroll inside the message area.
* The launcher icon now toggles the open chat: click it again to minimize, just like the close button.

= 0.16.10 =
* Dark Mode hotfix: Inbox, product, workspace, and profile headings remain clearly visible in the WordPress admin client.

= 0.16.9 =
* Agent Inbox: added a system-aware Dark Mode with a manual moon/sun switch.
* Dark Mode now covers conversations, loading placeholders, visitor presence, context, and the WordPress admin Inbox.
* Logo and product name link back to the Inbox.

= 0.16.7 =
* Agent Inbox presence: when viewing all websites, online visitors are broken down per site.
* WordPress agent proxy forwards the multi-site presence payload.

= 0.16.6 =
* Mobile Agent Inbox: notes and composer use 16px text so iOS Safari does not auto-zoom.
* Hardened Live Chat / AI mirror paths used by the shared inbox.

= 0.16.5 =
* Hybrid mode: AI replies are mirrored into the Live conversation so the Agent Inbox shows the full thread (visitor + AI + human).

= 0.16.4 =
* Internal notes open as a compact panel above the composer instead of a large permanent card.
* Settings sidebar: Live conversation mix stats (day/week/month) for the connected site.

= 0.16.3 =
* Removed unused Support hours card from the settings UI (hours remain API-capable for Live Chat).

= 0.16.2 =
* Reliability and cache-bust polish for Agent Inbox embeds after Live Chat rollout.

= 0.16.1 =
* While AI is answering, visitor messages are quietly mirrored into Live Chat so agents can take over without a blank thread.

= 0.16.0 =
* New: Live Chat. A real person can take over a conversation the assistant started, in the same chat window, so the visitor never has to begin again.
* New: shared inbox for the browser, phone (mobile web app), and a dedicated screen inside wp-admin.
* New: support hours. Outside them the assistant asks for an email address instead of promising a person who is not there.
* New: internal notes and file attachments on a conversation.
* Privacy: live chat conversations are stored in Germany and deleted automatically after 30 days by default; 7 and 14 days can be selected instead. Text a visitor types but never sends is never transmitted.
* Live Chat is an optional paid add-on and is off by default. Without it the widget keeps working exactly as before.

= 0.15.11 =
* Fixed a mobile chat bug: on phones, opening the on-screen keyboard could push the send button off screen, let the page behind the chat show through, and leave the keyboard hard to dismiss. The panel now tracks the visible area precisely (Visual Viewport API), keeps the composer in view, and no longer auto-focuses the input on phones so the keyboard only opens when the visitor taps the field.

= 0.15.10 =
* Fixed a fatal error on the Alynivo settings page introduced in 0.15.9 (undefined method call in the new usage-statistics card). The front-end widget was never affected.

= 0.15.9 =
* New "Chat statistics" card on the Alynivo settings page: see how many of your Managed AI messages are used this month (with a progress bar that turns amber at 75% and red at 90%), how many conversations and visitor messages the assistant handled in the last 30 days, the daily average, and a 14-day bar chart of messages per day.
* Chat usage is now counted locally alongside the existing shop funnel. As before, only counters are stored — never the content of any message.

= 0.15.8 =
* Added a compact AI disclosure and privacy-policy link inside the widget whenever Managed AI is active.
* Added automatic daily deletion of local funnel events older than 90 days and clears the scheduled cleanup on uninstall.
* Clarified that the locally generated daily session value is pseudonymous rather than anonymous.
* Fixed the setup wizard prefilling the welcome-message field with the built-in English default. Clicking through the wizard without touching the field would save that English text as an explicit override, replacing the translated per-language welcome (and the neutral Service-mode variant) on non-English sites. The field now starts empty and only saves when you type your own text.
* Pressing Enter in a wizard field now moves to the next step instead of accidentally triggering "Skip setup" (the browser's implicit form submission hit the skip button).
* The wizard now shows a live widget preview while you pick a brand color and write your welcome message, and the final step summarizes your choices (mode, color, greeting) before going live.
* Completed wizard steps are clickable to jump back, and on sites without WooCommerce the Service mode is preselected instead of the unavailable Store mode.
* The wizard's final step now mentions the optional Managed AI service with a link to alynivo.de.

= 0.15.7 =
* Setup wizard now opens every time you click Activate (deactivate → activate or a fresh install). Plugin updates do not re-trigger it. Also fixed the wizard being skipped when the setup flag was missing.

= 0.15.6 =
* Added a short first-run setup wizard after activation: choose assistant mode, brand color and welcome message, then enable the widget. Existing installs are unaffected; skip anytime to reach the full settings page.

= 0.15.5 =
* Fixed the built-in default title and welcome message always assuming a shop ("Product advisor", "...answer common store questions") even in Service mode, where there is no shop at all. Service mode now uses a neutral default title/welcome ("Assistant" / "Hi! How can I help you?") in all 6 supported languages; unaffected if you've already set your own title/welcome text.
* Made the chat panel more compact: raised the desktop/tablet height so it fills more of the available space instead of leaving a large empty margin above and below, and switched the mobile panel to a true edge-to-edge full-screen layout (no more wasted margin around it on phones).
* Fixed a mobile Safari bug where opening the on-screen keyboard could visually detach the fixed chat panel from the screen, making the site's own header/footer appear through it. The widget now tracks the real visible area with the Visual Viewport API while typing.

= 0.15.4 =
* Fixed a real access bug on non-WooCommerce sites: the settings page was registered under WooCommerce's admin menu and gated on the `manage_woocommerce` capability, which does not exist without WooCommerce active — so even site administrators were locked out of configuring Alynivo in Service mode (the mode built specifically for agencies and other non-store WordPress sites). Now uses a top-level menu with `manage_options` when WooCommerce is not active, and stays under the WooCommerce submenu with `manage_woocommerce` on shop sites.

= 0.15.3 =
* Fixed a "textdomain loaded too early" notice (WP_DEBUG, WP 6.7+): defaults() called __() for two default strings while running on plugins_loaded, before WordPress's init action. Those two strings are now untranslated literals (no compiled translation catalog exists yet, so this is not a visible behavior change) — found and fixed during a full WP_DEBUG pass on a clean install ahead of resubmission.

= 0.15.2 =
* Fixed a WordPress.org plugin review issue: brand color from the database is now re-validated with sanitize_hex_color() at output time before being interpolated into admin inline CSS (escape late). Also hardened frontend config JSON encoding.

= 0.15.1 =
* Fixed a WordPress.org plugin review issue: the settings page's inline `<style>` block is now registered and enqueued through `wp_enqueue_style()` / `wp_add_inline_style()` instead of being echoed directly into the page markup.
* Added the plugin author's WordPress.org username to the readme's Contributors list.

= 0.15.0 =
* Added a "Persona and tone" setting so the hosted AI assistant's voice (name, tone, style) can be configured per site, without touching code.
* Fixed the hosted assistant not actually receiving the "Knowledge context" text — it was sent by WordPress but silently dropped by the managed service before reaching the AI. Both fields now reach the model as clearly separated instructions.

= 0.14.0 =
* Replaced the waving-hand launcher badge/icon with a neutral speech-bubble icon (same glyph used on mavilab.de's own chat), recolored to the site's brand color.
* Fixed the "Logo always visible" launcher style so a real custom logo now shows cleanly, with no icon/badge overlapping it. Without a custom logo, the closed launcher always falls back to the neutral chat icon instead of the default Alynivo mark, since there is nothing store-specific to brand it with yet.

= 0.13.0 =
* Added Spanish as a 6th fully supported widget language (alongside German, English, French, Turkish, Italian): all 33 built-in widget strings now have a Spanish translation, and Spanish is available as a tab in the per-language override fields (title, welcome message, teaser bubble) on the settings page.

= 0.12.0 =
* WooCommerce is no longer a hard requirement. Added an "Assistant mode" setting (Store / Service / Both): Service mode runs the chat widget as a free-text AI assistant with no product catalog, for sites that are not a WooCommerce store. Store mode keeps the existing guided-selling behavior and still requires WooCommerce; Both shows the product finder and free-text chat together. Without WooCommerce active, the assistant always runs in Service mode regardless of this setting.
* Added a "Knowledge context" field: free text describing the business/services, sent to the hosted AI assistant as background for every conversation.
* Fixed the deterministic (non-AI) fallback replies to no longer offer a "Find products" quick reply in Service mode, where there is no catalog to search.

= 0.11.1 =
* Resolved all Plugin Check warnings in the funnel-analytics code: table names now use the `%i` identifier placeholder in `$wpdb->prepare()` instead of string interpolation, and the two read queries (summary and per-platform breakdown) are now cached for one minute via the object cache to satisfy the "no caching" check on direct database queries.

= 0.11.0 =
* Added complete French, Turkish, and Italian translations for all built-in widget text (title, buttons, questions, delivery/payment/security answers, teaser bubble, etc.). Previously only German and English were built in and every other language fell back to English.

= 0.10.0 =
* Replaced the single "WooCommerce pages only / all public pages" visibility toggle with granular checkboxes: homepage, shop & category, product, cart, checkout, my account, blog, and everything else. Existing sites keep their previous behavior automatically.
* Added a per-product teaser bubble override: a new "Alynivo teaser bubble" box on each product's edit screen lets you show a different invitation on that specific product page, without touching the global text.
* The teaser bubble's built-in default text now includes a 👋 wave, matching the original design proposal.
* Redesigned the settings page into grouped cards (Status & AI, Branding, Teaser bubble, Visibility, Recommendations) with a live launcher preview and a visual funnel chart with progress bars, replacing the plain table layout.

= 0.9.0 =
* Added a "Launcher style" setting: choose between the logo always visible on the launcher (with a chat badge), or a neutral chat icon when closed with the logo appearing only after opening the chat (the common Intercom/Drift/Crisp pattern). The logo itself remains a separate paid white-label setting either way.

= 0.8.4 =
* Rebalanced launcher proportions: the logo now sits on a white background with breathing room (66% scale) instead of filling the button edge-to-edge, and the chat badge grew from 24px to 30px with a larger emoji, matching common chat-widget conventions (Intercom/Drift/Crisp-style launcher).

= 0.8.3 =
* Changed the launcher badge glyph from a generic speech-bubble icon to a waving-hand emoji, matching the original design proposal.

= 0.8.2 =
* Added a permanent small chat-bubble badge on the launcher button (overlapping the logo's corner) so the button reads as "this is a chat" even after the proactive teaser bubble has disappeared or on a custom white-label logo. The badge hides while the panel is open.

= 0.8.1 =
* Declared compatibility with WooCommerce's High-Performance Order Storage and Cart/Checkout Blocks features to clear the "incompatible plugin" admin notice.

= 0.8.0 =
* Added a proactive teaser bubble that invites visitors to chat a few seconds after page load, once per browser session.

= 0.7.0 =
* Added a per-site chat logo setting with a media-library picker, so store owners can replace the default Alynivo mark with their own logo.

= 0.6.0 =
* Added local, privacy-friendly funnel analytics (planner started, platform chosen, plans viewed/unavailable, plan chosen, added to cart) with a summary view on the settings page. No data leaves the site.

= 0.5.1 =
* Fixed a multilingual product-matching bug affecting translated catalogs.

= 0.5.0 =
* Extended the planner contract to support multiple platforms/question flows via store-specific adapters.

= 0.4.0 =
* Renamed the product and plugin to Alynivo after an expanded collision review.
* Prepared the extension contract for store-specific package planners.

= 0.3.0 =
* Added an optional server-side proxy for the managed Alynivo AI service.
* Added hosted-service credentials without exposing provider keys in browser code.
* Added graceful fallback when the hosted service is unavailable.

= 0.2.0 =
* Added a conversational interface with message input and quick replies.
* Added localized German storefront copy.
* Modernized the responsive widget design.

= 0.1.0 =
* Initial guided-selling foundation.
