=== Soltacia Live Chat ===
Contributors: soltacia
Tags: chat, live chat, support, inbox
Requires at least: 6.2
Requires PHP: 8.0
Tested up to: 7.1
Stable tag: 1.0.63
License: GPLv2 or later

A simple self-hosted live chat widget for WordPress.

== How it works ==
- Visitors click the floating chat button and send messages.
- In wp-admin, go to "Soltacia Live Chat" to reply in the inbox.

== Notes ==
This is a polling-based chat (AJAX/REST). If you need true real-time with many agents, add WebSockets (Phase 2).

== 1.7.33 ==
* Hotfix: remove early rewrite-rule registration that could fatal on some hosts.
* Serve the service worker from the site root via a query param (no custom rewrite rules needed).
* Fix PHP string concatenation in service worker output (prevents "critical error" when opening the SW URL).

== 1.7.32 ==
* Fix Web Push service worker delivery: use root endpoint /soltacia-chat-sw.js to avoid CDN/WAF blocking plugin asset JS.
* On update, auto-flush rewrite rules once to ensure the SW endpoint works without manual permalinks save.

== 1.1.0 ==
* Added admin email notifications (throttled)
* Added Close/Reopen conversation controls in admin inbox

== 1.2.0 ==
* Added near real-time admin updates via Server-Sent Events (push stream)
* Added desktop notifications + sound for new visitor messages (opt-in)

== 1.7.21 ==

== 1.7.22 ==
* Front-end: configurable floating chat button label (Settings)
* Front-end: added theme palettes for the button + widget window (Settings)

== 1.7.25 ==
* Widget header layout option (logo left vs centered) and option to hide title when logo is present.
* Operator inbox: search conversations by last message text or date.
* Operator inbox: mark conversation unread/read toggle.
* Alerts: optional "Only when tab not focused" behavior for sound + desktop notifications.

== 1.7.24 ==
* Widget branding: configurable header logo (media upload) and optional Support Hours line under the title
* Settings screen: added Support Hours + Header Logo controls
* Front-end widget header now renders logo + support hours when set


== 1.3.0 ==
* Added Web Push notifications (no-payload) using VAPID
* Added device subscription management in Settings
* Added root-served service worker via /soltacia-chat-sw.js

== 1.3.1 ==
* Notification click now opens the newest unread conversation (focus=unread)
* Admin title '(New)' badge clears when conversations are read

== 1.4.0 ==
* Added encrypted Web Push payloads (preview + cid deep-link)
* Notification click opens the exact conversation

== 1.4.1 ==
* PHP 8 compatibility hardening: encrypted payload previews auto-fallback on PHP 8.0 (works without previews)
* Added Settings status indicator for payload preview support

== 1.5.0 ==
* Added PHP 8.0 push payload preview support when GMP is available (no need for openssl_pkey_derive)
* Auto-fallback remains for hosts without GMP or openssl_pkey_derive
== 1.6.0 ==
* Added Diagnostics screen (HTTPS, SW URL, VAPID, PHP/OpenSSL capability)
* Added Test Push button (per-user subscriptions)
* Fixed admin localization for push (sw_url, vapid_public)

== 1.6.1 ==
* Added Service Worker check (inline fetch + content-type/snippet)
* Added Push subscription stats (total + per-user counts)

== 1.6.2 ==
* Added Push Log table + viewer (last 50 sends)
* Added log clear button
* Branded plugin metadata for Soltacia.com

== 1.6.3 ==
* Fixed PHP parse error in SSE stream output (escaped JSON quotes)

== 1.6.4 ==
* Fix fatal error: removed duplicate b64url_json() method in push class

== 1.6.5 ==
* Fix PHP parse error in GMP ECDH helper (removed malformed duplicate Z3 assignment)

== 1.6.6 ==
* Fix PHP parse error in GMP ECDH helper: rewrote Z3 computation into safe two-line form

== 1.6.7 ==
* Fix fatal: added missing Soltacia_Chat_Admin::render_diagnostics() method

== 1.6.8 ==
* UI fix: chat composer bar now uses proper flex layout (textarea + send button aligned)

== 1.7.20 ==
* Admin: Desktop alerts button now toggles label Enable/Disable based on state
* Visitor: Closed chats can no longer receive new visitor messages (prevents closed threads resurfacing)
* Visitor: Widget resumes the last conversation id on this device and prompts a new chat if closed

== 1.6.9 ==
* Fix messages not saving: corrected wpdb->insert() format arrays for message inserts (visitor/admin/system)
* Fix widget bottom cut-off: convert panel layout to flex column (header/body/compose)

== 1.7.0 ==
* Front-end UX fix: Send now auto-starts a chat if user hasn't clicked Start chat yet

== 1.7.12 ==
* Gold rebuild from v1.7.0 with audited JS/PHP (PHP 8 compatible)
* Widget mount is rendered safely (no duplicates) and can be created by JS if missing
* Front-end send UX improved (instant feedback, fewer silent failures)
* CSS hardened so compose area never floats outside the widget

== 1.7.19 ==
* Admin inbox: improved alerts/status readability (wrap-safe chips; no overflow into the thread pane)
* Admin inbox: added per-device mute/unmute button for notification sound
* Admin inbox: removed Delete button (Close/Reopen is the workflow)

== 1.7.18 ==
* Admin inbox: fixed “Enable desktop alerts” button (now requests permission + enables alerts)
* Admin inbox: added notification sound for new visitor messages
* Admin inbox: restored SSE stream client (startStream) so new messages update live across all conversations
* Admin inbox: notifications only auto-mark read when the tab is focused

== 1.7.28 ==
* Offline mode + lead capture: support schedule, offline message, optional require-email when offline
* Operator presence + SLA: operator mode toggle, admin activity ping, auto-away, “Typically replies in X min”
* Transcripts + exports: email transcript (admin + visitor), admin export CSV/JSON
* Hardening + polish: honeypot, message clamps, safe-area + focus-visible styles, transcript button
