== Zoe Booking changelog: older releases ==

The latest releases are listed in readme.txt.

= 1.7.0 =
* New: **Import bookings from a CSV** — move your calendar over from a spreadsheet or another booking plugin, customers included. Zoe recognises the usual column names, reads several date and time formats, and always offers a **dry run first**: it reads the whole file, tells you exactly what would happen and writes nothing. Services and people are matched by name and never created for you. Imports are silent — nobody is emailed about an appointment they made months ago somewhere else.
* New: **Private notes on a booking** — "always 15 minutes late", "prefers the quiet room". Yours alone: the customer never sees it, and neither does the staff panel.
* New: **Conversion tracking** — announce completed bookings to the analytics your site already runs (a `zoe_booking` dataLayer event, a GA4 `purchase`, a Meta Pixel `Schedule`). Zoe loads no tracking script and contacts nobody; it only speaks to a tag that is already on the page. Off by default.
* New (PRO): **You decide what staff can do** — five switches under Settings → What staff can do: change statuses, move appointments, manage their own hours, see the customer's phone number, edit their own name and photo. Everything starts switched on, so nothing changes when you update; untick what you would rather keep. Each one is enforced on the server, not just hidden from the screen.
* New (PRO): a **"today" strip** at the top of the staff panel — how many appointments, how many are behind them, and what is next — and a **My Profile** page where they can change the name and photo customers see. Uploading a photo does not give them the media library.
* New: **Move an appointment** — reschedule from the calendar day panel instead of deleting and re-booking. Pick a date, pick from the free times, done. The booking keeps its id, its customer, its price and its payment, and the customer is emailed a fresh calendar invite for the new time. Staff can move their own appointments from their panel (PRO), except ones that have been paid for — those stay with the owner.
* New (PRO): **Earnings & commissions** — a per-person report of appointments, revenue, the commission you owe and what you keep, for any date range, with a CSV export. Set a percentage or a fixed rate per person; a service can override it when its margin is different. Figures come from the price saved with each booking, so raising a price next month never rewrites last month. Cancelled bookings and refunded charges are left out. It reports what is owed — Zoe never moves money.
* New (PRO): **Design presets** — a complete look in one click: colours, layout, skin, shape and spacing together. Nine to choose from — Zoe Classic, Nordic, Midnight, Blush, Atelier, Clinic, Terracotta, Mono and Botanical. Applying one only fills the Appearance fields, so nothing changes on your site until you press Save. You can also save your own design as a preset and carry it to another site. Every one of those settings stays free and fully editable by hand; "Neutral", which clears them all back to the defaults, is free too.
* New: **Minimum notice** — refuse bookings made too close to the appointment. Set it to two hours and nobody can take a slot that starts in ten minutes. Works across midnight, so a two-day notice correctly rules out tomorrow as well.
* New: **Booking window** — how far into the future the calendar opens. Thirty days keeps customers inside the next month; leave it at 0 for no limit.
* New: **Buffer before a service** — the gap you need in front of an appointment for setup, travel or preparing the room. Sits alongside the existing buffer after.
* New: **"Earliest available"** — one tap on the booking form jumps straight to the first free slot instead of making customers page through a calendar.
* New: **Spam protection** for the booking form — a decoy field no human ever sees, plus a cap on how many bookings one visitor can make per hour. The public form writes a row and sends mail on every submission, so this keeps a script out of your calendar and off your mail server. Logged-in users are never counted.
* Fixed: **"Buffer after" did not actually keep the gap free.** The buffer was saved with the booking but ignored when the next customer's slots were worked out, so a 15-minute clean-up break could be booked straight over. Buffers now hold in the customer calendar, in the manual "+ Add booking" screen and in every payment mode.
* Fixed: in WooCommerce mode the booking request was only checked for collisions, never against the schedule itself — a tampered request could place an appointment outside working hours or on a day off. It now goes through the same validation as the other two modes.

= 1.6.1 =
* Fixed: if a PRO licence lapses, pages holding the `[ms_events]` shortcode showed the raw text "[ms_events]" to visitors, because WordPress prints shortcodes it does not recognise. Those pages now simply leave the section out until the licence is active again.

= 1.6.0 =
* New: **Special days** — different hours on one particular date, for the weeks that refuse to repeat. A coach free on Tuesday this week and Saturday the next no longer needs a weekly grid that fits nobody: pick the date, set the hours, done. A special day also opens a day that is normally closed, and a day off always wins over it, so a holiday can never be reopened by accident.
* New (PRO): **My Calendar** in the Staff panel — the same month grid the owner uses, showing only that person's own appointments, with the day panel and quick status changes.
* Staff members set their own special days from their panel, without touching anything else on the site.

= 1.5.1 =
* Fixed (PRO): on sites running WooCommerce, a staff member logging in was redirected to the WooCommerce "My account" page and could never reach the Staff Panel — WooCommerce locks anyone without shop permissions out of the WordPress admin. Staff accounts are now allowed into their own panel (and nowhere else).
* Staff now land straight on their own bookings after signing in, instead of on the WordPress profile screen.
* The Staff Panel got a proper Zoe header that greets the team member by name, so it is always obvious whose bookings are on screen — and the view links (Upcoming / Past / All) no longer collide with the page title.
* Linking a WordPress account that already belonged to another staff profile now says so: one account runs one profile, and the previous link is reported as moved instead of disappearing quietly.

= 1.5.0 =
* New (PRO): Staff Panel — each team member gets their own limited wp-admin area. Create a WordPress account with the new "Zoe Staff" role, link it on the Staff edit screen, and that person sees only their own bookings (with quick status updates) plus their own weekly schedule and time off. No settings, no payments, nobody else's data.
* New: a "Regenerate link" button next to the private calendar-feed URL (on the Staff edit screen and in the Staff Panel) — one click invalidates the old .ics link when someone leaves the team.
* Hardening: staff save/delete now verify the record really is a staff member before writing.

= 1.4.1 =
* New (PRO): a fourth Events layout — "Banner" feature rows with a large date badge (rounded square, circle or minimal tile), the date · time · price line, a tickets-left pill and a pill-shaped Get tickets button with an arrow.
* New (PRO): an optional corner decoration image on Banner cards, fading in from the right edge — set one image for all cards, or let each event's photo take that role.
* The badge colours, size, decoration width and opacity are all adjustable in the Elementor widget's new Banner layout section; the `[ms_events]` shortcode accepts `layout="banner"`, `badge="circle"` and `ornament="<image url>"`.

= 1.4.0 =
* New: a service catalogue — `[ms_services]` (and a matching Elementor widget) shows your services as cards with photo, description, duration and price, in list, grid or large-card layouts, with optional category filters, search and sorting.
* New: each card's Book button opens the booking form with that service already selected — and when only one team member offers it, they are picked automatically, so the customer lands straight on the calendar.
* New: services now have a Short description field, shown on those cards.
* Services with duration variants advertise "from <lowest price>" instead of a base price the checkout would never charge.

= 1.3.0 =
* New (PRO): an event can now run on SEVERAL dates. A workshop series is one event with one description, image and price — add a date per session, and customers pick the date they want when they buy. Ticket capacity counts per date, so each session sells its own seats.
* New (PRO): "Duplicate" on the Events screen — copy an event with all its settings and just set the new dates.
* Existing single-date events keep working exactly as before; nothing to migrate.

= 1.2.3 =
* New: export the bookings list to CSV — one click exports exactly what your filters select (staff, service, date range, status, search), with prices, customer details and payment references, ready for Excel, Numbers, Google Sheets or your accountant.

= 1.2.2 =
* New: one-click "Install PRO now" — after activating a PRO license key, the PRO package downloads and installs itself (no more manual ZIP upload). A manual-upload fallback remains for sites where dashboard installs are disabled.
* New: buying PRO from the panel now brings you straight back to WordPress after checkout, with the license key activated automatically.
* Fixed: with an active license key but the PRO package not yet installed, the panel now shows the License page with clear next steps instead of the pricing page.

= 1.2.1 =
* The "Get support" button now opens your email client (hello@zoebooking.com) — quicker help, no separate ticket portal.

= 1.2.0 =
* The plugin no longer bundles any third-party SDK — a fully self-contained install. Licensing & checkout for the separate PRO version now run on Lemon Squeezy (nothing loads or phones home unless you open the Get PRO page or enter a license key).
* New License page (PRO): activate or deactivate your key, re-check its status and jump to the Lemon Squeezy customer portal to manage billing.

= 1.1.4 =
* New (PRO): show a single event (or a hand-picked set) — `[ms_events ids="123"]`, an event picker in the Elementor Events widget, and a copy-ready shortcode column on the Events screen.
* New (PRO): events are now clearly separated from appointments — All/Appointments/Events tabs and a per-event filter on the Bookings list, an "Event" badge on ticket rows, and the calendar collapses each event into a single chip with a sold/capacity counter plus grouped attendee lists in the day panel.

= 1.1.3 =
* New: full Dutch (Nederlands) translation — the plugin now ships in English, Dutch, French, German, Italian, Polish and Spanish.
* Pricing page starts on the Monthly cycle; small admin polish (no tier badge in the free version).

= 1.1.2 =
* Free version got bigger: service extras, group appointments, recurring series, per-staff calendar feeds (.ics), WhatsApp links and the customer panel are now fully included — and the staff limit is gone (unlimited team).
* Security: customer-panel, calendar and invoice access tokens are now signed with a plugin-generated secret instead of WordPress auth salts.
* Under the hood: every admin and front-end script/style now loads through the WordPress enqueue APIs.

= 1.1.1 =
* Fixed: bundled translations (de/fr/es/it/pl) were not loading — the form and admin stayed in English on non-English sites.
* Fixed: dropdown panels could render permanently open on block themes (e.g. Twenty Twenty-Five) that ship no `[hidden]` CSS reset.
* Fixed: theme styles no longer distort the form's line icons (global `svg { fill }` rules), underline the contact links or outline the collapse button.
* New: "Date & time box max height" option — in Settings → Appearance (desktop + mobile) and in the Elementor widget (responsive).
* Improved: service-picker categories stack vertically on small screens instead of a horizontal scroller.

= 1.1.0 =
* First public release on WordPress.org.
* Stability, performance and UI polish across the admin panel and booking form.
* Consistent 12/24-hour time and date formatting everywhere in the panel.
* Updated German, French, Spanish, Italian and Polish translations.

= 0.3.0 =
* Online payments: Stripe Checkout, PayPal and Square — hosted checkouts with server-side verification and automatic slot-conflict refunds.
* Events & tickets with an Elementor widget (list / grid / standard) and ticket sales through every booking mode.
* Customer panel with magic-link sign-in, self-service cancellations, invoices and GDPR data export/erasure.
* New form layouts (process timeline, progress bar, icon rail), design skins (outline, soft, dark, glass) and popup mode.
* Discount coupons, service extras, group appointments, recurring series, waiting list, multiple locations, invoices, per-staff calendar feeds, refunds, WhatsApp links, taxes, duration variants, QR add-to-calendar — all behind feature switches.
* Dashboard reports, currency & time-format settings, phone country picker, customer notes, mobile polish and a recolourable admin panel.

= 0.2.0 =
* Rebranded to Zoe Booking with a single, unified admin menu.
* Custom Services & Staff screens, visual month calendar, dual Standalone / WooCommerce mode.

= 0.1.0 =
* Initial booking engine, WooCommerce product-type integration, Elementor widget.
