= Changelog =

= 3.2.0 =
* New: Completed the four-stage UI polish pass with a shared frontend and admin design layer for buttons, cards, forms, tables, modals, badges, toasts, empty states, and focus states.
* Improved: Mobile booking flow now has more consistent service selection, time selection, cart bar, drawer, empty states, and checkout review styling.
* Improved: Dashboard, Bookings, and Services admin screens now share a cleaner SaaS-style visual system with improved tables, toolbars, status badges, KPI cards, and dialogs.
* Improved: Reduced more high-impact inline styling in booking and admin templates by moving presentation into the shared UI polish stylesheet.
* Improved: Accessibility, keyboard focus, admin modal semantics, toast announcements, and privacy/external-resource presentation were refined.
= 3.1.5 =
* New: Added a premium booking flow refresh with a stronger venue hero, polished service list, sticky category navigation, and checkout-style summary sidebar.
* Improved: Mobile booking now uses a more refined bottom cart bar and drawer treatment for a cleaner Fresha/Square-like experience.
* Improved: Service cards, appointment type choices, AI helper, location banner, policy blocks, form fields, and success state have clearer spacing, depth, and selected states.
* Improved: Reduced visual dependence on inline template styles by moving more presentation into the shared UI polish stylesheet.
* Improved: Key booking hero strings are now localized for translation workflows.

= 3.1.0 =
* New: Added a unified UI polish layer for frontend booking pages and admin screens with more consistent cards, buttons, spacing, shadows, and mobile behavior.
* New: Added modern admin toast notifications to replace disruptive browser alerts on Yatoon admin pages.
* New: Added privacy controls for loading Google Fonts, international phone assets, and IP-based country detection.
* Improved: Booking form service cards, selected states, summary panels, AI assistant block, success areas, and mobile cart drawer now feel more cohesive.
* Improved: Key frontend labels such as Rating, Read more, and Show less are now localized.

= 3.0.7 =
* Improved: AI service recommendations now rank synced local availability by customer timing preferences such as today, tomorrow, morning, noon, afternoon, and evening without treating those preferences as hard limits.
* Improved: AI availability guidance now clarifies that Square and Vagaro times are based on synced local availability data and must be confirmed in the booking form, avoiding extra live API calls during AI suggestions.

= 3.0.6 =
* Improved: Staff editor modal adapts to wider and narrower admin windows so blocked-time controls remain visible.
* Fixed: Service order numbers are easier to read when they contain two or more digits.
* Fixed: Dragging services saves the new visual order reliably instead of snapping back to the previous order.
* Fixed: Long admin tables show a synced horizontal scrollbar so right-side columns remain reachable.
* New: The AI privacy note under the customer input can be edited from the AI Assistant settings page.
* Improved: AI service recommendations can use live staff assignments and upcoming availability snapshots when answering timing questions.
* New: AI provider order and model choices can be configured for OpenAI, Google Gemini, and Anthropic.

= 3.0.4 =
* Improved: Staff photos and names open the staff profile editor directly, alongside the existing Edit action.
* New: Staff profiles include photo upload/removal through the WordPress Media Library.
* Improved: Blocked Times now use a simple date/time editor with all-day support instead of requiring formatted text rules.

= 3.0.2 =
* Improved: AI Assistant collapsed button keeps the merchant's custom title, size, color, and background controls.
* Improved: Admin list tables keep long names and emails on one line with ellipsis instead of vertical wrapping.
* New: Desktop admin list tables support drag-to-resize columns with saved widths per table.

= 3.0.0 =
* New: AI-ready booking experience for WordPress 7.0 AI Client.
* New: Frontend AI service helper suggests clickable matching services from the salon's real service menu.
* New: AI service description helper improves customer-facing service descriptions from the Services editor.
* New: Pro adds AI reply drafts for Text Us messages, reviewed by staff before sending.
* Improved: AI Assistant page explains provider priority when multiple WordPress Connectors are connected.
* Improved: WordPress 6.9 and older remain fully compatible; AI actions show clear guidance when the AI Client is unavailable.
* Improved: Dedicated AI Assistant admin page now shows AI switches, availability, and connector guidance.

= 2.9.0 =
* New: Beauty-focused booking templates: Clean, Beauty, and Luxury.
* New: Launch Center preview action and setup readiness checks.
* New: Admin-only Test Booking Mode for local booking flow validation.
* Improved: Slimmer default admin menu with optional advanced tools.
* Improved: Mobile booking flow polish and refreshed starter salon data.
* Improved: Front-end style templates now apply consistently across booking views.
* Improved: Local booking race protection and cached next-opening lookups.
* Improved: Added official live demo links for easier customer evaluation.
= 2.8.5 =
* New: Services now include category management for renaming and deleting service categories.
* New: Service category selection now supports existing-category dropdowns plus quick creation of new categories.
* Improved: Add-on copying is now available directly from each service row.
* Fix: Service-row Add Add-on can now create manual local add-ons even when no Square-backed source options exist.

= 2.8.4 =
* Fix: Square and Vagaro no-slot responses now use a safer message that explains the business may be closed or fully booked.
* Fix: Square mode can read Square location hours when available, while keeping Square as the source of bookable time slots.

= 2.8.3 =
* Change: Removed separate plugin timezone controls; admin booking and calendar times now follow the WordPress site timezone.
* Fix: Customer self-service cancellation now cancels the full multi-service appointment group and immediately removes it from staff calendars and availability.
* Fix: Sidebar Confirm Booking button now performs the same checkout action as the main form button.
* Fix: Sidebar Confirm Booking button now shows the same confirming state as the main form button after it is clicked.
* Fix: Local multi-service bookings now normalize the whole group to the same auto-confirm status after creation.
* Fix: Local business hours now calculate weekdays in the WordPress site timezone, preventing Sunday/Monday open and closed days from shifting.
* Fix: Local-mode multi-service booking creation now uses the same staff-assignment search as availability display, preventing shown slots from failing at checkout due to a greedy Any staff assignment.
* Fix: Removed old admin placeholder cancel handlers so cancelling a booking shows only the plugin's cancellation dialog.

= 2.8.2 =
* Fix: Local-mode multi-service availability now validates the entire cart before showing a time slot, including Me/guest timing, Any staff assignment, named staff, and existing bookings.

= 2.8.1 =
* Fix: Local-mode Bookings admin list now displays local WordPress timezone correctly instead of converting local records as UTC.
* Fix: Frontend appointment summary no longer appends the slot check text ("Yes") to selected time labels.
* Fix: Local-mode multi-service cart submission keeps one visible appointment as one booking request, preventing partial "appointment 2 failed" results.
* Fix: Local-mode Any staff assignment now chooses a truly available eligible staff member at submit time.

= 2.8.0 =
This release brings the local-mode booking engine to full production quality. Salons that do not use Square or Vagaro now have a complete, reliable booking system �?multi-service, multi-guest, conflict-safe �?running entirely within WordPress with no external dependencies.

**Local mode �?now fully production-ready**

* New: Local mode now supports multi-service bookings. Clients can add Acrylic Fill, Pedicure, and Gel Manicure in a single checkout, and the engine calculates a start time that fits the entire combined duration.
* New: Local mode now supports group / guest bookings. A client can book services for herself and a guest simultaneously; each guest's services run in parallel from the same start time, and each person can have a different staff member.
* New: Double-booking prevention in local mode. Before saving, the booking engine checks both the existing appointments database and the in-progress bookings within the same group submission, so no two services can be assigned to the same staff member at the same time �?even in the same checkout session.
* New: "Any staff" assignment in local mode. When a client selects Any Staff, the engine finds the first available technician for each service, respecting the service-staff assignment matrix and skipping staff who are already booked in that window.
* New: Parallel vs. sequential timing in local mode. Services for the same guest are scheduled back-to-back (sequential); services for different guests in a group start at the same time (parallel) �?matching the logic customers expect.
* Fix: Confirmation emails now send correctly in local mode for both single and multi-service bookings, with all booked services listed in the email body.
* Fix: Local mode bookings now trigger the admin notification and scheduled reminder / review-request emails correctly.
* Fix: Booking start and end times are stored in the correct local WordPress timezone, so the admin list, staff portal, and confirmation emails all show the right time without UTC offset issues.

**Booking confirmation page**

* Fix: "Manage Appointment" links on the confirmation page now show the correct service name for each button when multiple services are booked by the same person. Previously, all buttons showed "Manage appointment for Me" regardless of which appointment they linked to �?making it impossible to tell them apart.
* Fix: The AJAX response for local single-service and multi-service bookings now includes the service name, so the confirmation page can label each manage link correctly.
* Fix: Manage booking URLs are now generated server-side for a more reliable confirmation experience.

**Settings**

* New: Auto-Confirm Bookings toggle in Settings �?Hours. When ON (default), new bookings are immediately set to Confirmed �?the existing behavior. When OFF, bookings start as Pending and must be manually approved in the Bookings list. Useful for salons that review requests before committing.


= 2.7.8 =
* New: Display Timezone setting under Business Identity �?choose which timezone is used when showing appointment times in the admin booking list.


= 2.7.7 =
* Fix: Bookings now complete successfully. In 2.7.6 the phone validation helpers (`validateUSPhone`, `showPhoneError`) were defined inside a jQuery document-ready handler, which placed them outside the class's lexical scope. When the booking submit handler tried to call `validateUSPhone`, it threw a ReferenceError before the AJAX request was sent, leaving the button stuck on "Confirming your booking...". Helpers are now hoisted to the IIFE scope.

= 2.7.6 =
* Improved: Refined the mobile booking flow with shorter step labels, cleaner sticky cart actions, and full service descriptions restored in the service detail view.
* Improved: Pick Time now lets customers switch staff from the appointment summary and refreshes available times immediately.
* Improved: Service detail images now display fully on mobile instead of cropping important content.
* Tweak: Review & Book now shows selected staff as read-only so customers use Edit for appointment changes.

= 2.7.5 =
* Tweak: Align Freemius initialization with the Menu & Online Ordering plugin so the pricing screen can render the Free and Pro plans consistently.

= 2.7.4 =
* Fix: Send the plugin-list Upgrade to Pro link directly to Freemius checkout to avoid confusing free users with the internal pricing table.
* Tweak: Align the Freemius SDK initialization with the WordPress.org compliant setup used by the menu plugin.

= 2.7.3 =
* Fix: Added the missing Upgrade to Pro action link on the WordPress Plugins screen.

= 2.7.2 =
* Fix: Removed placeholder image file from assets
* Fix: Staff limit now shown in admin UI before hitting the cap (disabled button + upgrade notice)

= 2.7.1 =
* Fix: Resolved Plugin Check warnings in class-yatoon-staff-portal.php (sanitization and unslash)
* Updated: Plugin description

= 2.7.0 =
* New: Setup Wizard - guided 5-step onboarding for new installs
* Fix: Appointment reminder and review request emails now actually send (cron was not registered)
* Fix: Confirmation email now lists all services when multiple services are booked
* Fix: Timezone now reads from WordPress site settings instead of a hardcoded fallback
* Fix: Added database columns for reminder/review tracking on existing installs

= 2.6.2 =
* Improved: "Make Another Booking" button now clearly separated from action buttons with a divider line

= 2.6.1 =
* Fix: Business phone number now correctly appears in confirmation emails

= 2.6.0 =
* Fix: Booking confirmation no longer hangs - extended server timeout for booking submission
* Fix: Business phone number now appears correctly in confirmation emails
* Fix: "Make Another Booking" button now has proper spacing below the action buttons

= 2.5.4 =
* Fix: {business_phone} variable now correctly shows the phone number in confirmation emails

= 2.5.3 =
* Improved: "Make Another Booking" button spacing increased for a cleaner separation from the action buttons above

= 2.5.2 =
* Fix: Booking confirmation no longer hangs indefinitely - PHP execution time limit extended to prevent silent timeouts during booking submission
* Fix: "Make Another Booking" button now appears on its own line below the action buttons for a cleaner layout

= 2.5.1 =
* Fix: Customer self-service cancel/reschedule (Manage Booking) now works in Square mode - token is generated for all booking platforms
* Fix: Multi-service bookings now show correct service names in Staff Portal (booking_options populated on Square sync)
* Fix: Appointment times display correctly across all browsers including Safari (Unix timestamp format)
* Fix: Staff Portal day tabs now show text in correct color on all backgrounds
* Fix: ZIP package folder name corrected to yatoon-booking-system for proper WordPress installation

= 2.5.0 =
* New: Staff Portal PWA - technicians can view their weekly schedule and manage appointment status from their phone. Add [yatoon_staff_portal] to any page, set a 4-digit PIN per staff member under Settings > Staff, and share the link. Installable as a home screen app on iOS and Android.
* New: Set PIN button in Staff admin table - securely hashed, with brute-force rate limiting (10 attempts per 5 minutes per IP)

= 2.4.0 =
* New: Checkout Options - Gift Card and Coupon Code fields can now be individually toggled on/off in Settings > Checkout Options
* New: Coupon Code now has an Apply button with real-time validation and discount preview at checkout
* New: Multi-Location support - add unlimited locations under Yatoon Booking > Locations, each with its own address, description, phone, email, timezone, and accent color. Use [yatoon_booking location="2"] or [yatoon_booking location="downtown"] to scope a booking form to a specific location
* Improved: Location banner shown on booking form when a specific location is selected via shortcode
* Note: Pro users can assign a separate Square Location ID per location for independent live availability sync

= 2.3.6 =
* Fix: Removed "Checking availability..." indicator on service cards - availability is shown at the time selection step instead

= 2.3.5 =
* New: Multi-person booking gets a cleaner, more intuitive interface - each person's services are clearly grouped and easier to manage
* Improved: No-availability message now shows the specific service name (single service) or total appointment count (multiple services) for clearer feedback
* Improved: Service menu category tabs now sit closer to the first section heading for a tighter, more polished layout
* Removed: "Checking availability..." indicator on service cards - availability is shown at the time selection step instead
* Fix: Duplicate service modal - "Dismiss" button now closes the popup and keeps the client on the service menu instead of jumping to the time selection step
* Fix: UP/DOWN reorder buttons now only appear when the same person has 2 or more services

= 2.2.0 =
* New: Apple-style service cards with hero image, rounded corners, soft shadow, and Book pill button
* New: Star rating and review count on each service card
* New: "Next Available" hint on service cards with green pulsing dot
* New: Week/Month calendar in local mode replaces native date picker
* Improved: Service card typography, padding, and selected-state ring

= 2.1.2 =
* New: International phone number support with country flag picker
* New: Email OTP and SMS OTP verification before booking confirmation
* New: Phone number optional toggle

= 2.1.0 =
* New: [yatoon_gallery] infinite-loop auto-scrolling photo carousel
* New: [yatoon_catalog] service image card grid with popup booking
* New: Custom booking form fields with drag-and-drop builder
* New: Tip / gratuity at checkout
* New: Star rating collection and Reviews admin page
* New: Recurring appointments
* New: Closed Dates manager
* New: Redesigned dashboard with KPI cards and trend chart

= 2.0.0 =
* Initial public release
