== Full Changelog ==

= 2.1.9 =
* Maintenance release — confirmed compatibility with WordPress 6.9.4

= 2.1.8 =
* Removed License page from the free plugin entirely — no license key input, no activation mechanism
* The License page is now only registered by the separate PRO add-on when installed

= 2.1.7 =
* WordPress.org review: removed all service and practitioner creation limits — fully unlimited in free version
* WordPress.org review: removed all payment-related code from free plugin — payment_method, payment_status, bank transfer block and settings moved to PRO via filters
* WordPress.org review: replaced greyed-out fake UI sections with clean non-functional previews (no disabled inputs that mimic real forms)
* WordPress.org review: HMAC token verification now mandatory on GET /bookings/{uid} REST endpoint
* WordPress.org review: cancel REST endpoint restricted to manage_options capability
* WordPress.org review: block render callback return wrapped in wp_kses_post()
* WordPress.org review: font-family CSS output validated against strict whitelist
* Replaced external Flagcdn.com images with local SVG flags (zero third-party requests)
* Fixed practitioner save nonce mismatch (JS nonce name did not match PHP verification)
* Fixed double cancellation email (status_changed and booking_cancelled both triggered the email)
* Fixed customer cancellation reason not saved (now stored in admin notes via Booking::cancel())
* Fixed customer email not sent for bank_transfer bookings in FREE mode (conditional logic corrected)
* Reordered admin menu: Settings now directly after Dashboard
* Updated shortcode references in Settings page code examples to [oumma_easybook]
* Restored PRO accordion JS hook via wp_add_inline_script() (was lost during inline script extraction)
* Added 3 new filter hooks for PRO integration: oumma_easybook_create_booking_data, oumma_easybook_update_booking_data, oumma_easybook_email_bank_transfer_block
* Removed non-existent features from Premium Add-on description
* Translations: all new strings translated in 10 languages, .mo files recompiled

= 2.1.5 =
* WordPress.org compliance: complete External Services documentation (Oumma Pro API, Google Fonts, Oumma Contact link)
* WordPress.org compliance: Freemium Model section documenting PRO previews, license page, and hook-based architecture
* WordPress.org compliance: Data Handling section documenting opt-in uninstall cleanup
* WordPress.org compliance: 8 new FAQ entries for PRO previews, license, data handling, external services, cross-promotion link, database tables
* WordPress.org compliance: removed ALL inline script/style tags — extracted to 5 page-specific JS files + CSS
* WordPress.org compliance: all JS data passed via wp_localize_script()
* WordPress.org compliance: shortcode renamed [easybook] to [oumma_easybook] (Guideline 5 prefix)
* WordPress.org compliance: replaced file_put_contents() with WP_Filesystem API
* WordPress.org compliance: ABSPATH guards on all PHP files, sanitized base64 data
* WordPress.org compliance: removed all error_log() calls (Plugin Check compliance)
* Admin UI: Settings button color fix (CSS specificity), practitioner dropdown redesign, PRO badge standardization
* Translations: 50 corrupted apostrophes fixed, 6 missing strings added, 35 obsolete entries cleaned, all .mo recompiled

= 1.9.16 =
* Freemium cleanup: removed all Premium code (payments, invoices, Google Calendar, export/import)
* Premium features displayed as greyed-out preview sections with PRO badge
* Added 10+ hooks/filters for Premium add-on integration
* Removed 7 Premium files and 2 font files (~530KB size reduction)
* Plugin Check (PCP): 0 errors, 0 warnings

= 1.9.15 =
* WordPress.org banner and plugin icon assets
* Plugin Check compliance refinements

= 1.9.14 =
* Plugin Check: resolved all ERRORS and WARNINGS for WordPress.org compliance
* Removed plugin updater hooks (not permitted on WordPress.org)
* Added translators comments for i18n strings with placeholders
* Replaced unlink() with wp_delete_file(), date() with gmdate()
* Removed all error_log() calls from production code
* Fixed input sanitization, wp_unslash() ordering, and nonce verification

= 1.9.13 =
* WordPress.org compliance: all output properly escaped with esc_attr() and esc_html()
* WordPress.org compliance: all input properly sanitized with sanitize_text_field() and wp_unslash()
* Updated Tested up to WordPress 6.9
* Trimmed readme.txt — older changelog entries moved to changelog.txt

= 1.9.12 =
* Code audit and cleanup — removed 5 orphan files (148KB saved)
* Removed dead CSS class
* Verified 0 orphan functions, 0 broken references

= 1.9.11 =
* New plugin icon with PNG (128x128, 256x256) and SVG formats
* Added icon injection hooks for WordPress Updates screen

= 1.9.10 =
* Dashboard widget: translated all strings in 10 languages
* Fixed duplicate changelog entry

= 1.9.9 =
* Fixed translation for Select a page, email delivery notice, Set Availability, View Booking Page

= 1.9.8 =
* Dashboard: timezone warning added
* Bug Report: custom translated file input and placeholder in all 10 languages

= 1.9.7 =
* Dashboard: "Only appointments scheduled for today" notice now with yellow background, border, and info icon for better visibility
* Availability: override modal action buttons now centered horizontally
* Massive translation update: 30+ strings translated across all pages (Settings General/Language/Email/Invoice/Design, Availability, Practitioners, Support, User Guide, FAQ)
* Fixed all over-escaped quotes in .po files across all languages — proper compilation restored

= 1.9.6 =
* Availability: FIXED override modal buttons — completely new approach using inline style !important + inline script in availability.php (cache-proof)
* Both buttons now use style="display:none !important" by default in HTML
* Inline script in availability.php manages button visibility with attr('style','display:inline-block !important') — cannot be cached
* FAQ: translated "Frequently asked questions about Oumma EasyBook." in all 10 languages
* User Guide: translated "General tab", "Language tab", "Emails tab", "Design tab", "Method 3: Automatic page", "How it works:" in all 10 languages

= 1.9.5 =
* Dashboard: added explanation text under "Today's Bookings" title — "Only appointments scheduled for today are shown here." — translated in all 10 languages
* Availability: fixed override modal buttons using CSS class approach with !important — Add mode shows only "Add Override" button, Edit mode shows only "Update Override" button
* Added .oumma-easybook-hidden utility CSS class (display: none !important) for reliable element hiding

= 1.9.4 =
* Dashboard: added light grey column borders (border-right) to Today's Bookings table for clearer column separation
* Dashboard: ALL status filter buttons now always visible (Confirmed, Pending, Cancelled, Completed, No-show) even when count is 0
* Availability: reinforced override modal button logic — Add mode hides both buttons first, then shows only "Add Override"
* Availability: Edit mode hides both buttons first, then shows only "Update Override"
* Settings: payment accordion now auto-closes when toggle is switched OFF (previously only auto-opened on ON)

= 1.9.3 =
* Massive translation update: 45+ FAQ and User Guide strings translated in all 10 languages
* FAQ: all questions and answers now fully translated (General, Services, Availability, Bookings, Practitioners, Payments, Google Calendar, Technical)
* User Guide: all step titles, descriptions, tips and client flow steps now fully translated
* Fixed over-escaped quotes and apostrophes in .po files across all languages
* Availability: practitioner dropdown replaced with custom widget (color dots + grey separators between practitioners)
* Availability: override modal buttons fixed with explicit CSS display (Add mode: only Add button, Edit mode: only Update button)
* Settings > General: payment auto-open JS moved to correct tab (was in Invoice tab, now in General tab where payment section lives)

= 1.9.2 =
* Dashboard: Today's Bookings table now has full borders (border, rounded corners, header background, row separators)
* Dashboard: added status filter buttons (All, Confirmed, Pending, Cancelled, Completed, No-show) with colored pills and count badges — click to filter
* Dashboard: pagination system (max 10 bookings per page) with page buttons below the table
* Dashboard: status labels are now translated (no more raw English "Pending" / "Confirmed" etc.)
* Dashboard: "Today's Bookings" title and "No bookings for today" translated in all 10 languages
* New strings "All" and "No-show" translated in all 10 languages

= 1.9.1 =
* FAQ: updated General Q1 answer with 3 shortcode variants ([easybook], [easybook service="5"], [easybook service="5" practitioner="2"])
* FAQ: added Availability Q4 "Can I set different availability for each practitioner?" with detailed answer about fallback system
* FAQ: added Practitioners Q4 "How do I manage a practitioner's availability?" with dropdown + ID explanation
* User Guide: fixed Step 6 (Practitioners) showing wrong number "9" instead of "6"
* User Guide: added "Practitioner availability" substep in Step 3 (4 bullet points about custom schedule, fallback, exceptions)
* User Guide: added 2 new bullet points in Step 6 about managing practitioner schedule and unique IDs
* User Guide: added practitioner selection step in "How it works for your clients" (now 6 steps instead of 5)
* All 13 new/updated strings translated in all 10 languages
* Fixed duplicate entries and unescaped quotes in .po files

= 1.9.0 =
* Practitioners page: cards now ordered by ID ascending (ID:1 first, ID:2 second, etc.)
* Practitioners page: added color dot before practitioner name in each card
* Availability page: practitioner dropdown now shows ID next to name (e.g. "Linda (ID: 2)")
* Availability page: override modal — Add/Update buttons now properly hidden by default, only the correct button appears based on add vs edit mode
* Settings > Google Calendar: restructured as always-visible title + description, with "Configuration" sub-accordion styled like payment gateways (grey background). "Configuration" translated in all 10 languages
* Settings > Payments: toggling a payment switch ON now auto-opens the accordion if it was closed

= 1.8.9 =
* Availability page: added detailed info box when a practitioner is selected, explaining how the fallback system works (general schedule + practitioner exceptions + custom weekly schedule)
* Availability page: "If empty, the general schedule is used as fallback" replaced with prominent blue info box with title and detailed explanation
* All 3 new strings translated in all 10 languages

= 1.8.8 =
* Export/Import: "Choose a file" translated in all 10 languages
* Export/Import: added padding (margin-top:12px) between "Choose a file" and "Import Data" buttons
* Export/Import: "Import Data" button styled (grey/disabled → green when file loaded), "Export All Data" button styled with icon
* Google Calendar Sync: section converted to collapsible accordion (click title to expand/collapse)
* Payments: fixed "Pay on site" accordion isolated outside Payments section (removed extra closing div)
* Payments: added "How to enable Test Mode" explanation box with green styling, translated in all 10 languages
* All 71 PHP files verified clean

= 1.8.7 =
* Frontend booking summary: removed gradient color on price, now displays in black (default text color)
* Availability page: added explanation text below "Manage availability for:" dropdown, translated in all 10 languages
* Availability page: "Manage availability for:" and "General schedule (all practitioners)" translated in all 10 languages
* Practitioners page: ID badge moved inside each practitioner card (next to name), no longer at page top-right
* Practitioners page: "— Not specified —" gender dropdown option translated in all 10 languages
* Practitioners page: enforced white background + border on all practitioner cards via inline styles
* User Guide section 4: added 3rd shortcode option [easybook service="5" practitioner="2"], translated in all 10 languages

= 1.8.6 =
* CRITICAL FIX: Fixed fatal PHP syntax error in easybook-pro.php that prevented plugin activation since v1.7.0
* Missing semicolon after Oumma_EasyBook_Shortcodes instantiation (line 187) caused parse error on plugin load
* All 71 PHP files verified clean with php -l
* All changes from v1.7.0 through v1.8.5 preserved intact

= 1.8.5 =
* User Guide page: 33 strings fully translated in all 10 languages
* Covers: General settings, Services setup, Availability, Booking form, Practitioners, Payments (Stripe/PayPal/WooCommerce/Bank/On-site), Google Calendar, Invoicing
* Added missing msgids to .pot and all .po files for 8 strings not previously extracted

= 1.8.4 =
* FAQ Availability: 3 questions + 3 answers fully translated in all 10 languages
* FAQ Services: Q2 answer, Q3+A3, Q4+A4 fully translated in all 10 languages
* FAQ General: Q1 answer fully translated in all 10 languages

= 1.8.3 =
* FAQ Google Calendar: 2 Q&A fully translated in all 10 languages
* FAQ Technical: Q1 (time slots), Q3 (delete plugin), Q6 (invoices) answers translated in all 10 languages
* FAQ Technical Q6: confirmed "Oumma EasyBook Premium" branding in English source and all translations
* FAQ Bookings: Q1 (Confirmed vs Pending) question + answer translated in all 10 languages — added missing msgid to .pot
* FAQ Bookings: Q4 (same time slot) answer translated in all 10 languages

= 1.8.2 =
* Practitioner card: ID badge now highly visible with indigo gradient background and shadow
* Services list: ID column confirmed with visible code-styled identifiers
* FAQ Practitioners section: 3 Q&A fully translated in all 10 languages (6 new languages)
* FAQ Payments section: 4 Q&A fully translated in all 10 languages (6 new languages)
* FAQ Payments Q1: confirmed "Oumma EasyBook Premium" branding in all translations
* Payment API key fields: unified CSS class with focus state and consistent styling
* Practitioner cards: white background with shadow and hover effect
* TEST badge on Stripe/PayPal/WooCommerce headers with dynamic toggle

= 1.8.1 =
* Unified payment API key fields: all Stripe inputs (Publishable Key, Secret Key, Webhook Secret) now use identical CSS class for consistent appearance
* Added TEST badge on payment gateway headers: visible yellow badge when Stripe, PayPal, or WooCommerce test mode is active
* TEST badge updates dynamically when toggling the test mode checkbox (no page reload needed)
* Frontend booking form: all 67 public-facing strings now 100% translated in all 10 languages
* Added missing translations: Practitioner, Reference:, JavaScript required, Loading form
* Added TEST badge string translated in all languages

= 1.8.0 =
* Massive translation update: 350+ strings translated across 9 languages
* Google Calendar Sync section: fully translated in all languages
* Payments section: fully translated in all languages (Stripe, PayPal, WooCommerce, Bank Transfer, On-site)
* Fixed accordion system for payment gateways (proper CSS class-based toggle)
* Added missing WooCommerce test mode string to all language files
* Fixed Italian .po file apostrophe escaping issues
* Improved payment gateway UI with proper collapse/expand animations

= 1.0.0 =
* Initial release.
* Unlimited services with custom durations, prices, and colors.
* Smart booking calendar with real-time availability.
* Anti-double booking system.
* Weekly availability schedule with multiple periods per day.
* Date-specific overrides (holidays, special hours).
* Email notifications (customer confirmation, admin notification, cancellation).
* Admin dashboard with statistics.
* Shortcode `[easybook]` and Gutenberg block support.
* REST API for programmatic access.
* Bug report system.
* Translations: EN, FR, ES, DE, IT, PT, NL, PL, RU, TR, AR.
* Fully responsive design.
* WordPress 5.8+ and PHP 7.4+ support.
