=== SpaVexa Manager – Booking & Appointment Manager ===
Contributors: miroseo
Tags: booking, appointment, appointment booking, spa, salon
Requires at least: 6.4
Tested up to: 7.0
Requires PHP: 8.0
Stable tag: 1.5.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Booking & appointment scheduling for spas, salons, and beauty clinics — booking form, calendar, staff, and email confirmations.

== Description ==

**SpaVexa Manager** helps spas, salons, and beauty clinics accept appointments on WordPress — without a monthly SaaS subscription.

= Free features =

* Multi-step online booking form
* Admin dashboard and booking calendar
* Unlimited services and staff
* Email booking confirmations (customer and admin)
* Automated email appointment reminders
* Win-back / rebooking email campaigns
* WhatsApp click-to-chat button
* Before/after gallery and testimonials
* Opening hours, services list, and book button shortcodes
* Gutenberg blocks for booking and services
* Setup wizard for quick onboarding

= Pro upgrade (optional) =

Need deposits, packages, or reports? [SpaVexa Manager Pro](https://miroseo.com/product/spavexa-manager-pro/) adds Stripe/PayPal deposits, SMS & WhatsApp Cloud API messaging, Google Calendar sync, packages, coupons, gift cards, PDF invoices, and more — with a **one-time license** (no monthly fees).

= Shortcodes =

* `[spavma_booking_form]` — booking form
* `[spavma_book_button]` — call-to-action button
* `[spavma_calendar]` — date picker
* `[spavma_services]` / `[spavma_services_list]` — service showcase
* `[spavma_staff]` — team grid
* `[spavma_gallery]` — before/after gallery
* `[spavma_testimonials]` — client reviews
* `[spavma_opening_hours]` — business hours
* `[spavma_whatsapp_cta]` — WhatsApp button

= Privacy =

This plugin stores booking data in your WordPress database. It does not send customer data to external servers unless you configure optional integrations in **SpaVexa Manager Pro** (payments, SMS, etc.).

== Installation ==

1. Upload the plugin folder to `/wp-content/plugins/` or install from the WordPress plugin directory.
2. Activate **SpaVexa Manager** through the **Plugins** menu.
3. Complete the setup wizard under **SpaVexa → Getting Started**.
4. Add `[spavma_booking_form]` to a page.

== Frequently Asked Questions ==

= Is this really free? =

Yes. The core booking system is free on WordPress.org. Pro features are sold separately as [SpaVexa Manager Pro](https://miroseo.com/product/spavexa-manager-pro/).

= What is included in free vs Pro? =

Free includes unlimited services and staff, the booking form, calendar, email confirmations, email reminders, rebooking campaigns, gallery, and testimonials. Pro adds deposits, packages, SMS/WhatsApp API, reports, and other business tools.

= Does this require WooCommerce? =

No. WooCommerce is optional and available in the Pro version.

= Can I upgrade without losing bookings? =

Yes. Deactivate the free plugin, install **SpaVexa Manager Pro**, and activate your license. Your existing services and bookings use the same data structure.

= Where can I get help? =

See [SpaVexa documentation](https://miroseo.com/spavexa-documentation/) or use the WordPress.org support forum.

== Screenshots ==

1. Command Center dashboard
2. Online booking form
3. Admin calendar
4. Services management
5. Upgrade comparison (Pro features)

== Changelog ==

= 1.5.2 =
* Fix glow/shadow effects (active step, selected time slot, selected calendar day, focused inputs, buttons) staying the default maroon color regardless of the chosen Primary color — they used hardcoded rgba(139,90,107,X) instead of following the theme

= 1.5.1 =
* Fix calendar day colors looking mismatched on hover — hovering the already-selected date was overriding its gradient/solid color with the plain hover color due to a CSS specificity conflict
* Add a "Book with [Name]" button to each Our Team staff card — previously staff cards had no click action at all; clicking now pre-selects that staff member on the booking form

= 1.5.0 =
* Add a "Color Style" option under Settings → Appearance: Gradient (Primary → Accent, default) or Solid (Primary color only) — affects buttons, step indicators, and everywhere the brand color is used

= 1.4.2 =
* Fix price text, active step labels, and a few buttons still using the hardcoded default colors after the 1.4.0 color fix — the "-dark" variants of primary/accent weren't being derived from the admin's chosen colors, only the base colors were

= 1.4.1 =
* Increase weight/line-height of the booking form subtitle text — it was too thin/light to read comfortably

= 1.4.0 =
* Fix Appearance colors (Primary/Secondary/Accent) never actually applying to the booking form or shortcodes — a long-standing bug where hardcoded default colors in the stylesheet always outranked the admin's chosen colors, regardless of what was picked in Settings
* Replace the plain date field on the booking form with a proper visual calendar (month grid with prev/next navigation) instead of the browser's native date input
* Remove the "Default package image shape/fit" settings from the free build's Appearance tab — Packages is a Pro-only feature, so these had no effect

= 1.3.36 =
* Fix each service appearing twice in the Setup Wizard's "Add your team" service picker (and anywhere else Services::get_all() is used) — an OR/NOT-EXISTS meta_query was causing WP_Query to double-join wp_postmeta and return duplicate rows

= 1.3.35 =
* Update the Upgrade page comparison table: add Google Meet links, booking form themes/layouts, Custom CSS editor, and correct the Waitlist/Recurring descriptions to match what Pro actually ships now

= 1.3.34 =
* Move the Book Appointment theme presets, layout picker (Card/Minimal/Split), and Custom CSS field to SpaVexa Manager Pro — the free build's Appearance tab is back to the original 3-color picker

= 1.3.33 =
* Add a Custom CSS field under Settings → Appearance — loads after the plugin's own styles so it can override any color, spacing, or layout choice without editing files

= 1.3.32 =
* Fix step-number digits sitting outside their circle badges in the Split layout — the left-aligned step label text was inheriting into the circle, pushing the digit to the left edge instead of centering it. Verified live.

= 1.3.31 =
* Fix the Split Book Appointment layout: the sidebar branding panel stopped short of the form fields below it instead of spanning the full height. Switched to named grid-template-areas.

= 1.3.30 =
* Add 3 Book Appointment layouts (Card, Minimal, Split) selectable under Settings → Appearance, with a "Preview Live Book Appointment Page" link; the [spavma_booking_form] shortcode can still override with style="card|minimal|split"

= 1.3.29 =
* Add 6 ready-made color theme presets and a live preview card to the Appearance settings tab, so the booking form's look can be previewed and picked without guessing at hex codes

= 1.3.28 =
* Add missing Pro features to the Upgrade page comparison table: built-in SMTP mail delivery, delivery log, customer CRM, and WooCommerce checkout — the list had fallen behind what Pro actually ships

= 1.3.27 =
* Richer admin page header (hero banner) styling: deeper multi-tone gradient, subtle dot-pattern texture, layered glow, and refined title/badge/button polish for a more premium look

= 1.3.26 =
* Match the Getting Started checklist's step buttons (e.g. "Open Setup Wizard") to the plugin's brand color instead of default WordPress blue

= 1.3.25 =
* Add "Send Test Email" button under Settings → Notifications, and an automatic admin notice when a booking email fails to send — hosts commonly block or spam-flag PHP's default mail sending, so this surfaces delivery problems before customers are affected

= 1.3.24 =
* Remove "Pro feature" upsell wording from the customer-facing manage-appointment page — that message is for site admins, not the business owner's own customers
* Add a "View Booking in Dashboard" button to the admin new-booking notification email, linking straight to the Bookings page

= 1.3.23 =
* Add visible field labels to the Setup Wizard's "Add your services" row — the Duration field pre-fills with "60" but its placeholder (which would have explained the unit) never showed since browsers hide placeholder text once a value is set, leaving a bare unexplained number

= 1.3.22 =
* Fix "Manage your appointment" link in emails going nowhere on the free build — added a read-only appointment status page (reschedule/cancel from this link remains a Pro feature; the free build now shows the booking instead of a dead link)
* Redesign email template: "Label: value" lines (Service, Staff, Date, Price, etc.) now render as a clean receipt-style block instead of plain text, links (like the manage-appointment link) stay real clickable links, and a footer with the business name was added

= 1.3.21 =
* Fix booking form still showing the Continue button and steps after a successful submission — now shows only the "Booking request sent" confirmation
* Fix admin/customer email header text showing default blue/underlined link styling in Gmail when the business name looks like a domain (Gmail auto-linkifies plain text) — header is now an explicit white, non-underlined link

= 1.3.19 =
* Add full Arabic (ar) translation covering the admin dashboard and public booking UI

= 1.3.18 =
* Add RTL layout support across the public booking UI and admin dashboard (badges, tables, corner ribbons, notices, calendar navigation, setup wizard, comparison table)

= 1.3.17 =
* Update plugin display name and short description for clearer, more search-friendly branding (URL/slug unchanged)
* Refine readme.txt tags for discoverability

= 1.3.16 =
* Move the Popular badge to a floating corner ribbon on the card instead of sitting next to the title text

= 1.3.15 =
* Move the Popular badge inline next to the service title instead of on its own line, so titles line up across cards whether or not a service is marked Popular

= 1.3.14 =
* Pin the Book Now button to the bottom of every service/package card so buttons stay aligned across a row regardless of whether the Popular badge or a description is present

= 1.3.13 =
* Force full-width Book Now buttons on service/package cards (align-self:stretch alone could be overridden by theme CSS, making the button narrower on cards with the Popular badge)

= 1.3.12 =
* Fix duplicate block entries in the inserter (blocks were registered under 4 names each)
* Fix missing front-end CSS/JS on pages built with blocks (asset loader only recognized shortcodes and the legacy Pro block name)
* Prefix REST rest_base for bookings/customers post types (spavma-bookings, spavma-customers)
* Restrict booking/customer post types to the plugin's own capability, and remove them from the default REST controller (they carry customer PII)
* Prefix remaining script/style handles and block.json namespaces (spavma-*)
* Remove split-string obfuscation of a legacy option prefix in uninstall.php

= 1.3.11 =
* Prefix Gutenberg editor JavaScript data as spavmaBlocksEditor
* Reject any non-spavma wp_localize_script object during the free build

= 1.3.10 =
* Add nonces to testimonial/gallery admin-post handlers (CSRF)
* Document spavma_* shortcodes in readme (match registered tags)
* Sanitize booking custom_fields before save

= 1.3.9 =
* Keep uninstall legacy cleanup inside the prefixed function (Plugin Check globals)

= 1.3.8 =
* Remove function_exists() around own uninstall helper (WordPress.org guideline)

= 1.3.7 =
* Rename remaining spavma_ post types, meta, caps, and CSS to spavma_ (WordPress.org 4+ char prefix)

= 1.3.6 =
* Fix fatal error: use global WP_Block_Type_Registry inside Spavma namespace

= 1.3.5 =
* Fix duplicate Gutenberg block registration (spavma/* already registered notice)

= 1.3.4 =
* Remove legacy brand strings from the free WordPress.org package

= 1.3.3 =
* Unify all PHP identifiers under the spavma_ prefix (WordPress.org prefix review)

= 1.3.2 =
* Prefix uninstall callback as spavexa_manager_uninstall (Plugin Check)

= 1.3.1 =
* Rename free helper functions and PHP namespace to SpaVexaManager / spavexa_manager_ (WordPress.org prefix review)
* Register spavexa_* shortcodes (legacy spavma_* tags still work)

= 1.3.0 =
* Prefix slot cache transients as spavexa_manager_slots_ (WordPress.org naming)

= 1.2.9 =
* Fix block.json UTF-8 BOM so Plugin Check can read apiVersion 3

= 1.2.8 =
* Fix admin Calendar not rendering after ID rename

= 1.2.7 =
* Add Business Hours settings (controls Available Times on the booking form)
* Show loading state while Available Times load
* Add Advanced → Reset Everything (factory reset + setup wizard)

= 1.2.6 =
* Register legacy Gutenberg block names so older pages (spavexa-manager-pro/*) still work in the editor

= 1.2.5 =
* Fix New Booking: opens Quick Add Booking instead of the setup wizard
* Create Pages from Getting Started is one-click (no wizard step 6)

= 1.2.4 =
* Hide Pro-only settings UI that had no free implementation (SMS, waitlist, deposits, demo)
* Ship email reminder template with the free build
* Clarify free vs Pro FAQ (email reminders are free)

= 1.2.3 =
* Show the Reminders settings tab in the free build (email reminders UI)

= 1.2.2 =
* Unlock email reminders and rebooking for the free build (Guideline 5)
* Longer plugin prefixes (spavexa_manager / SPAVMA_*) for WordPress.org compliance
* Harden register_setting sanitization and package-balances REST permissions
* Remove free-version package marker

= 1.2.1 =
* Point product and documentation links to SpaVexa store URLs

= 1.2.0 =
* Rebrand to SpaVexa Manager (slug spavexa-manager)
* Remove service/staff quantity caps (Guideline 5 / trialware)
* Enqueue admin notice CSS/JS via wp_enqueue (no raw inline tags)
* Public staff REST returns display fields only (no email/phone/commission)
* Uninstall deletes an explicit option whitelist only
* Keep build tooling out of the WordPress.org zip

= 1.1.7 =
* Compliance hardening for WordPress.org review

= 1.1.6 =
* Gutenberg category pinned in the inserter
* Block titles/descriptions always registered in PHP for reliable discovery

= 1.1.5 =
* Fix blocks missing from inserter — load editor script + category

= 1.1.4 =
* Fix Gutenberg blocks not appearing in the inserter (PHP registration)

= 1.1.3 =
* Fix Gutenberg blocks category registration
* Fix invalid block.json encoding that caused JSON decode notices
* Inherit theme font on public booking UI
* Show admin notice when WhatsApp CTA has no number configured

= 1.1.2 =
* Stop auto-creating a Packages page on free (Pro-only shortcode)
* Auto-remove empty Packages stub pages left from older free installs

= 1.1.1 =
* Clean Gutenberg markup from testimonials
* Guard invoice helpers when Pro classes are absent

= 1.0.1 =
* Fix fatal error on plugin deactivation (License class guard)
* Fix booking flow when Pro-only classes are not loaded

= 1.0.0 =
* Initial WordPress.org release
* Online booking form and admin calendar
* Unlimited services and staff
* Email confirmations, gallery, testimonials, WhatsApp button
* Setup wizard and Gutenberg blocks

== Upgrade Notice ==

= 1.2.0 =
Rebranded to SpaVexa Manager. Install as a new plugin slug (spavexa-manager); deactivate any older free build first.
