=== FormFlow for Elementor ===
Contributors: dilschaddauwd
Tags: elementor, elementor forms, form fields, conditional logic, input mask, webhooks, google calendar
Requires at least: 6.0
Tested up to: 6.8
Requires PHP: 7.4
Stable tag: 1.5.3
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Extended Elementor form fields, styling controls, input masks, summaries, containers, and conditional logic.

== Description ==

FormFlow for Elementor extends Elementor with practical form field types, editor controls, styling tools, conditional workflows, and submission helpers.

The plugin is built as an Elementor Forms enhancement layer. Features can be enabled or disabled from the FormFlow settings page in the WordPress dashboard, so site owners can keep only the tools they need available inside the Elementor editor.

= Main Features =

* Checkbox and radio fields with icons or images.
* Rating field with icons, columns, and display controls.
* Range slider field with live value output and custom shapes.
* Calculation field with conditional calculation rules.
* Currency field with formatted numeric input.
* Toggle switcher field with configurable labels and values.
* Booking Calendar field with Google Calendar availability and selectable appointment slots.
* Signature field with mouse and touchscreen support for contracts and PDF summaries.
* Input Mask controls for phone numbers, dates, money, credit cards, Brazilian formats, IP addresses, and custom patterns.
* Confirmation Popup before form submission with custom icon, title, message, and button text.
* Advanced Webhooks with conditional URLs, custom headers, and payload mapping.
* Integrations tab for multiple Zapier, Trello, ClickUp, Zoho CRM, HubSpot, MailChimp, ActiveCampaign, OpenAI, Brevo, and Make accounts.
* Save & Continue Later with secure resume links, draft restore, optional resume-link email, and configurable expiry.
* Conversion Analytics dashboard for Pro and Agency plans, including basic Pro analytics and Agency reporting for funnels, fields, sources, geo, time, revenue estimates, and AI-style insights.
* Analytics PDF Export for Agency plans with duration presets, custom date ranges, per-form or all-form scope, and a branded multi-page A4 report that picks up your Elementor global colors automatically.
* IP Address Blocking with global IPv4/IPv6 rules, per-form custom rules, bulk import, searchable admin list, and customizable blocked messages.
* Google Calendar API integration with multiple Google account sign-ins, appointment reservation, and reserved-time blocking.
* Designed PDF Summary Attachment for response emails with customizable text, logo image, colors, and global or per-form templates.
* PDF Designer option for using Elementor Library templates as PDF Summary content with CSS layout rendering, images, and form field shortcode replacement.
* Selectable PDF design templates with editable recipient, greeting, linked footer columns, uploaded social icons, and clickable social links.
* Step Swipe Navigation for slider-like multi-step forms with gestures and arrows.
* Clickable Step Indicators for jumping directly to the related step in Elementor multi-step forms.
* Label styler presets with per-field label visibility controls.
* Pro standard Elementor radio and checkbox styling controls with custom columns.
* Pro phone country code dropdown with flat flags.
* Starter conditional logic for fields, plus Pro conditional logic for steps, next buttons, submit buttons, conditional email, and conditional redirects.
* Pro data summary field for reviewing submitted values.
* Pro custom CSS class controls for field-level styling hooks.
* Container start/end fields for organizing form layouts.
* Pro prefix and suffix icons for standard input fields.
* WP Rocket compatibility helpers for conditional step logic.

= Editor Settings =

The plugin adds a FormFlow menu item in the WordPress dashboard with direct entries for Settings, Features, Integrations, Analytics, Security, PDF Summary, and License.

= License Tiers =

FormFlow uses feature-level licensing so every module can be assigned to Starter, Pro, or Agency from one central tier map.

* Starter includes professional custom fields, field conditional logic, input masks, and essential form styling.
* Pro adds data summaries, custom CSS classes, phone country code, field prefix/suffix, standard choice columns/styling, conversion analytics, step conditional logic, calculations, conditional redirects, conditional emails, confirmation popup, swipe navigation, icon/image choice fields, and form-level IP blocking.
* Agency adds PDF summaries and attachments, Analytics PDF export, Booking Calendar, Google Calendar, Advanced Webhooks, Integration Hub, global IP blocking, Save & Continue Later, Signature Field, and business analytics.

Locked features stay hidden from the Elementor editor and appear in FormFlow > Features with a plan badge and upgrade prompt.

== Installation ==

1. Upload the plugin zip file from the WordPress Plugins screen.
2. Activate FormFlow for Elementor.
3. Make sure Elementor is active.
4. Open FormFlow in the WordPress dashboard and enable the features you want to use.
5. Edit an Elementor Form widget and configure the new fields or controls when a compatible Elementor Forms module is available.

== Frequently Asked Questions ==

= Does this plugin require Elementor Pro? =

No. The plugin can activate and run its FormFlow dashboard, license, settings, and shared assets with Elementor Free. Features that extend the Elementor Form widget are loaded only when the Elementor Forms API is available.

= Can I disable features I do not use? =

Yes. Open the FormFlow settings page in the WordPress dashboard and switch features on or off.

= What happens if no license is active? =

Starter features remain available. Pro and Agency features are locked until an annual license is activated in FormFlow > License.

= What is required to activate a license? =

Customers activate paid plans with the email address connected to the purchase and the license key.

= Will standard Elementor radio and checkbox styling affect existing forms automatically? =

No. Standard radio and checkbox input styling is controlled per field with the "Style Checkbox / Radio" switcher. Layout controls such as columns and gaps remain independent.

= Can input masks be used for custom formats? =

Yes. The custom pattern option supports `9` for numbers, `A` for letters, and `*` for letters or numbers.

= Do Integrations support multiple accounts? =

Yes. Open FormFlow > Integrations to add multiple account keys per provider. Elementor forms can choose the provider and account key in the form Integrations section.

= How does Save & Continue Later work? =

Enable it in the Elementor form settings. Visitors can click the save button to store their current field values and receive a private resume link. Draft links expire after the configured number of days.

= Does Google Calendar require API setup? =

Yes. Add a Google OAuth Client ID and Client Secret in FormFlow > Integrations, then click "Sign in with Google" to connect each calendar owner account. Editors can pick one connected account or route appointments by an employee/contact field inside Elementor.

= Is the plugin compatible with WP Rocket? =

Compatibility helpers were added for conditional step behavior when optimization plugins delay or defer scripts.

== Screenshots ==

1. FormFlow feature settings in the WordPress dashboard.
2. Custom Elementor form fields in the Form Fields panel.
3. Standard radio and checkbox styling controls.
4. Input Mask controls in the field Advanced tab.
5. Conditional logic controls for fields and steps.

== Changelog ==

Note: this file's version numbers jump from the 1.5.x line (matching the
plugin header / FFE_VERSION, the number WordPress actually compares for
updates) straight to 1.10.x entries that predate the working copy this
changelog now ships with. That jump is a pre-existing inconsistency, not a
gap in the history below 1.5.1 - see the FormFlow project brain.

= 1.5.3 =
* Hardened: the updater can no longer end up with no update-server address at all. It read the address only from the FFE_LICENSE_SERVER_URL constant, and if that were ever removed or emptied the update check would be abandoned silently before any request was made - with no error anywhere. (This is exactly how SubscriptionFlow's updater was dead on every site; FormFlow's constant is defined, so FormFlow was working, but the same trap was one edit away.) It now falls back to the same server the license client resolves.
* Verified against the live license server: the feed returns a valid, correctly signed response and a working package URL.

= 1.5.2 =
* Fixed: "Check Again" on the WordPress Updates screen could silently do nothing. The update feed was cached for 6 hours independently of WordPress's own update-check cache, and asking WordPress to recheck only cleared WordPress's cache, not ours - so a recheck soon after the last one kept quietly showing "up to date" with no new request ever reaching the license server. "Check Again" now always reaches the server.

= 1.5.1 =
* Fixed: a required field hidden by field-level Conditional Logic (or hidden inside a Conditional Logic container) could block the form with "This field is required," even though the field was correctly hidden on the page. The skip mechanism that already protected hidden multi-step fields from this now also covers individually hidden fields and containers, and it now works on the Starter plan too - it was previously gated behind the Pro-only Steps feature even though field-level Conditional Logic is a Starter feature.

= 1.10.161 =
* Email Verification (2FA): when WP Mail SMTP is set to force its own sender, the From Name and From Email fields now say so in the Elementor editor and name the address being forced. FormFlow sets the sender correctly, but a forced SMTP sender replaces it afterwards, which made the field look ignored. Turn off "Force From Email" in WP Mail SMTP > Settings, or set that plugin to the address you want.
* FormFlow deliberately does not override a forced SMTP sender: that option usually exists because the mail server only accepts its own authenticated mailbox as the sender.

= 1.10.160 =
* Email Verification (2FA): while empty, the From Name and From Email fields in the Elementor editor now show the sender that is really used - "WordPress" and wordpress@your-domain - and the From Email description spells out the full current sender. In 1.10.159 the empty fields showed the site title and a noreply@ address as examples, which looked like the active sender even though the code still came from "WordPress <wordpress@your-domain>". Type your own name and address to replace it, then update the page.
* How the sender is chosen and sent is unchanged.

= 1.10.159 =
* Email Verification (2FA): the sender of the verification code email can now be set per form. The Email Verification (2FA) section has new "From Name" and "From Email" fields. Before this, the code always came from the WordPress default sender ("WordPress <wordpress@your-domain>"), because FormFlow sent it without a From header and had no setting for one.
* The sender is read on the server from the saved form, never from the visitor's browser, so the verification endpoint cannot be used to send mail under a sender of someone else's choosing. Update (publish) the page in Elementor for a changed sender to take effect.
* If only a From Email is set, the site title is used as the name. If only a From Name is set, it is used with the site's default address. With both fields empty nothing changes: the WordPress default sender - or the one your SMTP plugin sets - is used exactly as before.
* Developers: when a form has a From Email, the `headers` passed to the `ffe_2fa_email` filter now contain its From header. A From header added by the filter still takes precedence.

= 1.10.158 =
* Removed the Diagnostics tab. It was added to track down the cause of the empty field Type dropdown; 1.10.157 fixed that cause, so the tab is no longer needed. It changed no settings and nothing else depended on it.

= 1.10.157 =
* Fixed the root cause of FormFlow's field types missing from the Elementor field Type dropdown. FormFlow attached its listener for elementor_pro/forms/fields/register from inside its elementor/init callback - but Elementor Pro's own elementor/init work runs first, and Pro versions that register their form fields eagerly fire the action right there. FormFlow's listener then arrived after the action was over: no field types, no error, and everything else working.
* The listener is now attached at plugin file load, which precedes every possible firing of the action. It costs nothing when Elementor Pro is absent - the action simply never fires.
* The Turnstile and Support Ticket field types were attached the same late way and are now registered from the same early listener, with one-shot guards so no path can register a field twice.
* Added a recovery path: if a future Elementor Pro change ever fires the action before FormFlow's file loads, the registration is recovered directly from the Forms module instead of leaving the dropdown empty.
* The Diagnostics tab now reports whether the registration was actually delivered in the current request.
* Why this looked like a FormFlow 1.10.142 regression: the FormFlow update and an Elementor Pro update were installed around the same time, and it was the Elementor Pro side that moved the firing earlier. The FormFlow registration code was byte-identical from 1.10.141 through 1.10.154.

= 1.10.156 =
* New Diagnostics tab under FormFlow, reporting everything that has to be true for FormFlow's field types to appear in the Elementor field Type dropdown: the installed and active copies of the plugin, the Elementor Pro version, whether the Forms module is loaded, whether the registration hook is attached, the licence plan in effect, and a per-field-type table showing which are offered and why any are not.
* The Diagnostics tab detects a second, older copy of FormFlow still active alongside this one. The plugin folder was renamed in 1.10.142, so upgrading from 1.10.141 or earlier can leave the old "FormFlow for Elementor" folder behind; two active copies declare the same field classes twice and stop the field types registering.
* Diagnostics are read-only and change no settings.

= 1.10.155 =
* FormFlow's field types no longer depend on an Elementor Pro version comparison to appear in the field Type dropdown. Elementor Pro is the only caller of the registration hook, so a version it did not match could remove every FormFlow field type without saying why. The registration now checks only for the base class the field types extend.
* The Elementor Pro version requirement is still reported, as an admin notice, where it can actually be read.

= 1.10.154 =
* Fixed FormFlow's field types (Rating, Signature, Range Slider, Currency, Toggle Switcher, Containers, Data Summary, Calculation, Booking Calendar, Icon Choices) being missing from the Elementor field Type dropdown on some sites.
* The field types were registered only if Elementor Pro's Forms module could be detected during plugin init, which is before Elementor Pro's autoloader has necessarily seen it. The registration is now hooked unconditionally and the check runs when the hook fires, from inside that module, where the answer is reliable.
* This failed silently: everything else in the plugin kept working, so nothing pointed at the cause.

= 1.10.153 =
* Required Checkboxes is now a free feature, available on every plan including Starter, instead of requiring Pro. It stays in the Conversion UX module.

= 1.10.152 =
* Fixed a regression from 1.10.150 that emptied the Elementor form field panel: every FormFlow field control disappeared, and Elementor's own Required toggle with them. A global-colour link had been added to the Selected Color picker, and Elementor cannot render one on a control inside the form_fields repeater.
* Choice skins still follow the Elementor kit's Secondary global colour - that comes from the stylesheet, which updates live, and was never affected.
* The Required control is now let through for checkbox fields on Elementor versions that hide it, so the Required Checkboxes feature can be switched on.

= 1.10.151 =
* New feature: Required Checkboxes, under the Conversion UX module. Elementor's Required toggle now works on standard checkbox fields - the visitor must tick at least one option instead of the browser demanding every one.
* Uses Elementor's existing Required setting, asterisk and server-side check; there is no new field control to configure.
* Enforced on the Next button as well as on Submit, so a required group on an early step is caught there.
* Groups hidden by conditional logic, or on a step the visitor is not on, are not enforced.
* Radio fields are left alone, since browsers already treat a radio group as a single required control.

= 1.10.150 =
* Fixed the Morph Tick choice skin drawing a filled bar instead of a tick. The box now folds on a pseudo-element, so the checked state no longer inherits the mark's fill and the row no longer shifts as it folds.
* Choice skins now take their Selected colour from the Elementor kit's Secondary global colour, so they follow the site's brand and change with it. The Selected Color picker on the field is linked to the same global.
* Removed the pink that was hard-coded as the selected colour for choice skins and as the confirmation dialog's fallback; the dialog now falls back to the Accent global its own controls already use.

= 1.10.149 =
* Added eleven animated choice skins to the Style control on standard checkbox and radio fields: Cross Draw, Ripple, Snake Outline, Emboss, Scribble, Circle Scribble, Morph Tick, Outline Draw, Long Tail, Burst and Draw Box.
* Every new skin is driven by the field's existing Size, Unselected Color, Selected Color and Check Color controls, and works on both checkbox and radio fields.
* The new skins stop animating for visitors who have asked their system for reduced motion.
* The skin list is now a single registry shared by the editor control and the renderer, so an unknown value always falls back to Default.

= 1.10.148 =
* Fixed the Step Slider / Swipe arrows being dead on the first step until the native Next button was used once. Arrow availability was computed before Elementor had set its step buttons up, and a disabled button swallows its own click, so the state could never correct itself.
* Arrow state is now derived from the position in the step list when no step button can be resolved yet, and is re-evaluated after Elementor finishes its own initialisation.
* Fixed Step Transition blending the step in before animating it, the same late-start problem as the slider: the animation now runs in the same moment the step changes.
* A step change Elementor refuses (an invalid step) no longer replays the entrance animation on the step that never left.
* Step changes are shown without animation for visitors who ask their system for reduced motion.
* Step Transition is now one setting for the whole form, under Required Mark in Content > Form Fields, instead of a separate choice on every Step field. It only appears once the form has a Step field.
* Forms saved before this release keep their per-step animations until the new form-level control is set.

= 1.10.147 =
* Fixed the Step Slider / Swipe transition starting roughly 150ms after the step changed, which let the browser paint the new step at rest first and made it look like it faded in and only then slid.
* Swipe Navigation now owns the step transition: a Step Animation set on the same form is skipped instead of playing a second animation on top of the slide.
* The step transition is now a real slide - the outgoing step travels off one edge while the incoming step comes in from the other, and the form animates between the two step heights.
* Slide Distance accepts a percentage and defaults to 100% for a full panel slide; the px unit still gives a shorter nudge.
* The side arrows now update the moment the step changes, instead of staying stale for the length of the transition.
* Fixed a stranded transition when a visitor navigated again before the previous slide finished.
* The Back arrow no longer becomes active on the first step because of a Back button inside a step that is not on screen.
* Touch devices no longer track the same gesture twice through both the pointer and the touch events.
* The horizontal-drag guard is registered as a non-passive listener, so it is no longer silently ignored by the browser.
* Step changes are shown without animation for visitors who ask their system for reduced motion.
* Arrow labels built by the fallback script are now translatable.

= 1.10.146 =
* Removed the document icon from the Export PDF button on the Analytics tab, leaving a clean text-only button.

= 1.10.145 =
* Analytics PDF reports now use the Elementor global Text color for every text run, including section headings, so all report copy shares one brand color.
* Muted report text is derived by lightening the global Text color, keeping a readable hierarchy from a single source color.
* Conversion Funnel stages now use the global Accent color as the track and the global Primary color as the filled value, making the funnel the clearest element on the page.
* Field Analytics now shows a Field Name column with the Elementor field label, alongside a separate Field ID column with the stored identifier.
* Field names are resolved from the Elementor form the events were recorded on, and fall back to a readable form of the field ID when a field has no label or the source page is gone.
* Long values such as field IDs, campaign names, and URLs now wrap at underscores, hyphens, and slashes instead of breaking mid-word.

= 1.10.144 =
* Analytics PDF reports now take their colors from the Elementor global colors of the active kit, so a report matches your site brand with no extra configuration.
* The report header band, table headers, and data bars use the Elementor Accent color.
* Report body text and section headings use the Elementor Primary color.
* Secondary report text uses the Elementor Text color, and the thin accent rules use the Elementor Secondary color.
* Card, row, and border tints are derived from those colors so surfaces harmonize with the brand instead of using fixed greys.
* Text placed on the colored header band, table headers, and funnel bars now switches automatically between white and near-black based on measured contrast, so light brand colors such as yellow stay readable.
* Sites without Elementor global colors fall back to the FormFlow report identity. Note that the fallback header band is now the FormFlow accent (amber) rather than the primary purple, matching the new accent-header rule.
* Added the `ffe_analytics_pdf_report_palette` filter for overriding report colors in code.

= 1.10.143 =
* Added Analytics PDF Export: create a branded, print-ready A4 report of the currently filtered Analytics dashboard (Agency plan).
* Added fourteen reporting duration presets to the Analytics filters, including today, yesterday, rolling 7/14/30/90 days, current and previous month, quarter and year, all retained data, and a custom date range.
* Added a dedicated `analytics_pdf_export` license feature key so PDF reporting is enforced on the server, not only hidden in the interface.
* Exported reports include the executive KPI summary, per-form breakdown, conversion funnel with drop-off, field analytics, traffic sources, devices, geography, submission time heatmap, recommendations, and report notes, limited to the sections your plan covers.
* Reports are generated in memory and streamed directly to the browser, so no analytics report is ever written to the server.
* Reports contain only aggregated counts: no IP addresses, session identifiers, browser details, referrer URLs, or submitted form values.
* Fixed Analytics date filters interpreting the reporting period in UTC while events are recorded in the WordPress site time zone, which could shift the first and last day of a report.

= 1.10.102 =
* Fixed Clickable Step Indicators so jumping forward validates required Checkbox with Icon groups before moving to the target step.

= 1.10.101 =
* Fixed required Checkbox with Icon validation so Next step navigation is blocked until at least one option is selected.
* Improved icon choice step validation to find the active Elementor step even when the Next button is rendered outside the same step wrapper.

= 1.10.100 =
* Added a per-form Clickable Step Indicators switcher in Elementor below the label style controls.
* Hid the switcher in the Elementor editor until the form contains at least one Step field.
* Scoped clickable indicator behavior and cursor styling to forms where the switcher is enabled.

= 1.10.99 =
* Cleared the local license key after deactivating the current site so the key is no longer revealed.
* Added Clickable Step Indicators as a separate Pro Conversion UX feature.
* Added frontend navigation that moves to the clicked Elementor step indicator and stops safely if validation blocks forward navigation.

= 1.10.98 =
* Masked active license keys in the customer plugin license screen and blocked copying of the displayed masked value.
* Refined FormFlow dashboard typography for tabs, section headings, and module headings.
* Changed the license summary dashboard metrics to a four-column desktop row with smaller metric values.

= 1.10.97 =
* Kept third-party WordPress notices out of the FormFlow dashboard title by using a protected branded title element.
* Deactivated the previous license on the license server before saving an empty, changed, or replaced customer license.

= 1.10.96 =
* Removed Elementor Pro as a hard plugin requirement so FormFlow can run with Elementor Free.
* Guarded custom form field registration behind the Elementor Forms API to avoid Pro-only class loading on free installs.
* Required the license email for update checks so customer sites stay aligned with the license manager email and domain validation.

= 1.10.95 =
* Reset paid license access to Starter when activation or status checks fail because the license email is missing or incorrect.
* Required the license email for status checks as well as first activation.

= 1.10.94 =
* Added License Email Address to the customer license activation form.
* Sent the license email together with the license key during activation.
* Improved license activation errors so server messages such as email mismatch are shown clearly.

= 1.10.93 =
* Changed License dashboard subscription wording from Expiration Date to Renews In.
* Changed Starter license status from Inactive to Free.

= 1.10.92 =
* Moved Custom CSS Classes from Starter to the Pro plan.

= 1.10.91 =
* Moved the Data Summary Field from Starter to the Pro plan.

= 1.10.90 =
* Fixed the License dashboard Status card so active Pro and Agency licenses show Active instead of the current plan name.
* Kept basic Analytics in Pro with KPIs, Forms, and Devices while locking advanced analytics reports behind Agency.
* Hid the legacy Upgrade Plan action on Agency licenses.

= 1.10.89 =
* Made dashboard badges plan-aware so Pro badges disappear on Pro sites and all badges disappear on Agency sites.
* Changed the top upgrade button from GO Pro to GO Agency on Pro sites and hid upgrade actions for Agency sites.
* Muted locked feature cards without dimming license badges and added pointer cursors to toggle controls.
* Simplified the License dashboard actions by removing Copy License Key and Manage Subscription.

= 1.10.88 =
* Moved license badges further left and removed badge box shadows in the FormFlow dashboard.

= 1.10.87 =
* Removed the overview box rows from the Integrations and Security dashboard tabs.
* Restored the Security settings layout styling from the previous editor settings design with the new FormFlow colors.
* Removed the Download Plugin button from the License dashboard.
* Moved Pro and Agency badges to the top-left of cards and rotated them in the opposite direction.

= 1.10.86 =
* Restored the Analytics dashboard layout with FormFlow CI colors and removed duplicate placeholder analytics widgets.
* Fixed Google Calendar integration cards so connected calendar accounts show as connected.
* Removed PDF Summary overview boxes and restored the template preview as a sticky right sidebar.
* Fixed Security dashboard card buttons so Settings opens the Security tab instead of Integrations.

= 1.10.85 =
* Updated the FormFlow Features dashboard modules to use two-column boxed sections with purple section headers.
* Restyled feature cards, toggles, and Pro/Agency license badges to match the new uploaded admin design.
* Renamed the feature save button to Save Changes and aligned it with the gold FormFlow action style.

= 1.10.84 =
* Redesigned the WordPress admin interface as a modern SaaS-style single-page FormFlow dashboard.
* Added reusable admin UI components for tabs, cards, toggles, license badges, KPI cards, integration cards, and upgrade modal.
* Added bundled admin SVG icons for Features, PDF Summary, Integrations, Analytics, Security, License, and Go Pro.
* Moved new admin dashboard styling and behavior into separate CSS and JavaScript assets.
* Preserved existing settings storage, save handlers, Elementor controls, and license checks.

= 1.10.83 =
* Moved Phone Country Code and Field Prefix/Suffix to the Pro plan.
* Renamed the WordPress dashboard menu from FFE to FormFlow.
* Added direct FormFlow submenu entries for Features, Integrations, Analytics, Security, and PDF Summary alongside Settings and License.

= 1.10.82 =
* Moved Standard Radio / Checkbox columns and styling controls to the Pro plan with visible Go Pro upgrade links in Elementor.
* Moved Conversion Analytics out of Starter and locked the Analytics dashboard for Starter sites.
* Removed the Analytics dashboard dark mode setting and styling.
* Added Settings and green Get Pro action links to the installed Plugins row for Starter sites.

= 1.10.81 =
* Locked advanced field conditional operators behind Pro while keeping them visible as disabled Pro options in Elementor.
* Kept AND field condition triggers in Starter and locked OR triggers behind Pro.
* Added greater-than-or-equal and less-than-or-equal as Pro field condition operators.

= 1.10.80 =
* Split Conditional Logic for Fields and Conditional Logic for Steps into separate feature toggles.
* Kept Field Conditional Logic in the Starter plan and gated Step Conditional Logic behind the Pro plan.
* Preserved the old combined Conditional Logic setting as a migration fallback for existing sites.

= 1.10.79 =
* Automatically refresh license plan and upgrade URL changes from the License Manager on FormFlow license screens.
* Reduced normal admin license refresh caching so Elementor editor feature locks follow remote plan changes without reactivation.

= 1.10.78 =
* Added a Check License Now button so customer sites can immediately sync plan changes from the License Manager.
* Added the license server last-checked timestamp to the License screen.

= 1.10.77 =
* Updated the license client to store the upgrade URL returned by the FormFlow License Manager.
* The Upgrade Plan button now uses the manager-configured URL after activation, status, or update checks.

= 1.10.76 =
* Added a scalable Starter, Pro, and Agency licensing architecture for FormFlow for Elementor.
* Added a central feature-to-tier mapping system so future modules can be assigned to a plan without changing every module.
* Added feature-level access checks for Elementor controls, module registration, admin settings tabs, analytics panels, IP blocking scopes, and conditional step behavior.
* Added locked feature cards with plan badges and an upgrade comparison modal in FFE > Features.
* Added a dedicated FormFlow > License submenu with plan, status, expiration, activation, deactivation, and upgrade actions.
* Updated license validation to support remote plan data, annual expiration handling, and Starter fallback when no license is active.

= 1.10.75 =
* Renamed the plugin branding from Elementor Best Form to FormFlow for Elementor.
* Renamed the dashboard menu label to FFE while keeping existing saved Elementor controls, field types, options, classes, and functions backward compatible.
* Added the new [ffe_summary_table] PDF Designer marker while keeping [ffe_summary_table] as a legacy alias.

= 1.10.74 =
* Added IP Address Blocking as a new Security feature.
* Added global IPv4 and IPv6 blocking rules in FFE > Security with searchable list, add/edit/delete actions, bulk import, bulk delete, and invalid IP validation.
* Added Elementor form controls for IP Blocking with disabled, global, and custom form rule modes.
* Added early submission validation so blocked IP addresses cannot trigger Actions After Submit.
* Added a scalable security rules table prepared for future whitelist, country restriction, rate limit, temporary ban, and spam protection features.

= 1.10.73 =
* Fixed an Analytics dashboard fatal error when funnel, source, or heatmap panels render before analytics data exists.

= 1.10.72 =
* Added Conversion Analytics as a new FFE feature.
* Added analytics event storage for form views, starts, field completions, field errors, abandonment, step views, submit attempts, and confirmed submissions.
* Added an Analytics tab in FFE Settings with KPI cards, filters, conversion funnel, form table, field analytics, traffic sources, device comparison, geo summary, time heatmap, revenue estimates, dark dashboard mode, and rule-based AI insights.
* Added analytics settings for retention days, default lead value, currency symbol, and test-data reset.

= 1.10.71 =
* Added Elementor Style controls for the Save & Continue Later button.
* Added Elementor Style controls for Save & Continue status messages, success/error colors, and resume-link row.

= 1.10.70 =
* Added Save & Continue Later controls for Elementor forms.
* Added frontend draft saving with secure resume links, optional email delivery, and configurable link expiry.
* Added draft restore support for standard inputs, selects, textareas, checkboxes, radios, hidden fields, and custom FFE values.

= 1.10.69 =
* Improved ClickUp payload handling so unsupported root mappings such as email no longer prevent task creation.
* Added ClickUp fallback behavior that appends unmapped fields to the task description when no matching List custom field exists.

= 1.10.68 =
* Added ClickUp-specific custom field mapping so payload keys like custom_fields.email resolve to an existing E-Mail/Email custom field on the selected ClickUp List.
* Improved ClickUp integration errors when a mapped custom field cannot be found or the List custom fields cannot be loaded.

= 1.10.67 =
* Fixed integration rules so an empty condition does not block always-send providers such as ClickUp.
* Improved integration error messages by showing the provider HTTP response details when an API request fails.

= 1.10.66 =
* Added a new FFE Integrations tab for email marketing, CRM, automation, and Google Calendar accounts.
* Added multi-account settings for Zapier, Trello, ClickUp, Zoho CRM, HubSpot, MailChimp, ActiveCampaign, OpenAI, Brevo, and Make.
* Added Elementor form Integrations controls with conditional rules, provider/account selection, endpoint overrides, and payload mapping.
* Moved Google Calendar settings into the Integrations tab while keeping existing Google Calendar OAuth and booking behavior.

= 1.10.65 =
* Removed the default page padding for Custom Elementor Template PDF output so designers can control spacing inside the Elementor template.
* Updated the PDF Designer editor note to recommend direct HEX colors and warn against SVG, CSS variables, and class-only colors/backgrounds.

= 1.10.64 =
* Improved Custom Elementor Template PDF hyperlinks so bare domains, email addresses, phone numbers, and relative paths become real clickable PDF links.
* Added fallback handling for links entered as placeholder href values when the visible link text contains the real URL.

= 1.10.63 =
* Fixed Signature field shortcodes inside Custom Elementor Template PDFs so the submitted signature image is rendered instead of the text value.
* Added Elementor template background fallback CSS from saved section/container settings, including Media Library background images and Elementor global colors.

= 1.10.62 =
* Improved Custom Elementor Template PDF rendering for backgrounds that use Elementor CSS variables.
* Converted inline SVG markup to PDF-friendly image data URIs so SVG icons and logos can render more reliably.
* Restored visible hyperlink styling and normalized relative links for PDF output.
* Added an Elementor editor notice with recommended PDF font sizes, image sizes, and column counts.

= 1.10.61 =
* Hid built-in PDF template controls when Custom Elementor Template is selected, leaving the Elementor template selector and PDF file name.
* Stopped automatically appending the response summary table to Custom Elementor Template PDFs; editors can place it with [ffe_summary_table].
* Added PDF-specific Elementor layout CSS fallbacks for columns, containers, alignment, backgrounds, and images.

= 1.10.60 =
* Fixed Custom Elementor Template PDFs loading Elementor HTML without the matching Elementor CSS.
* Added CSS-enabled Elementor template rendering for PDF Designer output.
* Improved local image and CSS background URL handling for Media Library and plugin assets.

= 1.10.59 =
* Added a bundled Dompdf renderer for Custom Elementor Template PDF summaries.
* Added CSS layout rendering for Elementor-designed PDF templates, including Elementor post CSS when available.
* Added image rendering for Elementor template images by embedding local Media Library and plugin image URLs into the generated PDF.
* Kept the previous lightweight PDF renderer as a fallback if HTML/CSS rendering is not available on the server.

= 1.10.58 =
* Added a Custom Elementor Template option to the PDF Summary Design Template selector.
* Added Elementor Library template dropdowns in FFE settings and per-form custom PDF settings.
* Added PDF-safe rendering of Elementor template text with [field id="..."] shortcode replacement.
* Added [ffe_summary_table] support so editors can place the submitted fields table inside the selected Elementor template.

= 1.10.57 =
* Added a custom Signature field with mouse and touchscreen drawing support.
* Added Signature field controls for canvas height, pen color, background, border, and clear button text.
* Embedded submitted signatures as images in PDF Summary attachments.
* Prevented signature data URLs from appearing as raw text in data summaries and outgoing email content.

= 1.10.56 =
* Added a PDF Summary switcher for the date, timestamp, and page-number side stamp in both FFE settings and custom Elementor PDF templates.
* Removed the fixed current-date line from PDF Summary Template 4.
* Restored full-width footer backgrounds while keeping safer spacing between footer columns.

= 1.10.55 =
* Added a right-center date/time and page-number stamp to every PDF Summary template page.
* Improved PDF Summary padding and wrapped long company/contact text so it stays inside the page.

= 1.10.54 =
* Added right-side image previews for each PDF Summary design template in FFE Editor Settings.

= 1.10.53 =
* Added a Google Calendar cancellation redirect URL control so customers can be sent to a custom page after cancelling an appointment.
* Secured cancellation redirect URLs by including them in the signed cancellation token.

= 1.10.52 =
* Added editable Booking Calendar text controls in the Elementor field settings for the title, choose-date message, no-slots message, loading message, and availability error message.

= 1.10.51 =
* Localized Booking Calendar frontend status messages, month names, and weekday labels using the WordPress site language.

= 1.10.50 =
* Fixed a PHP 8 availability check error caused by the Booking Calendar local-storage removal, restoring routed account availability and form submission.

= 1.10.49 =
* Hardened routed Booking Calendar availability checks so disconnected or missing Google Calendar accounts return a clear JSON message instead of breaking the picker.
* Added clearer FFE status diagnostics for account-specific availability token failures.

= 1.10.48 =
* Removed plugin-side local appointment storage so Google Calendar remains the only booking availability source.
* Added Booking Calendar resting time control to block configurable buffer minutes before and after existing Google Calendar appointments.
* Added optional customer booking details emails with appointment details, cancellation link, and add-to-Google-Calendar link.

= 1.10.47 =
* Added explicit Google Calendar read permission for manually added calendar events so phone bookings can be blocked in Booking Calendar.
* Added a visible admin status when manual Google Calendar event checks fail, including a reconnect hint for older OAuth connections.

= 1.10.46 =
* Added plugin-side Booking Calendar reservation tracking so submitted appointments are blocked locally even when Google Calendar would allow overlapping events.
* Merged local reservations into frontend availability and backend submission validation to reduce double-booking risk.

= 1.10.45 =
* Merged Google Calendar events list checks with free/busy checks so Booking Calendar blocks existing events even when Google free/busy omits them.
* Improved double-booking protection for manually created Google Calendar events and longer reserved appointments.

= 1.10.44 =
* Added no-cache headers and request cache-busting to the Google Calendar busy-slot endpoint used by Booking Calendar.

= 1.10.43 =
* Removed Google Calendar free/busy caching from Booking Calendar availability checks so newly booked slots are blocked immediately.

= 1.10.42 =
* Improved Booking Calendar availability checks so the field can inherit the form-level Google Calendar account routing.
* Blocked dates before today and time slots earlier than the current time.
* Reduced Google Calendar busy-slot cache duration so newly blocked appointments appear unavailable sooner.

= 1.10.41 =
* Improved Booking Calendar submission handling by merging raw posted form fields into the Google Calendar reservation parser.
* Added clearer missing date/time diagnostics with the configured field IDs and submitted field keys.

= 1.10.40 =
* Fixed Booking Calendar submissions when Elementor only exposes the main booking field value and not the hidden date/time helper fields.

= 1.10.39 =
* Replaced the Booking Calendar native date input with a custom month calendar UI.
* Added Booking Calendar style controls for colors, spacing, date size, panel padding, and border radius.

= 1.10.38 =
* Added a Booking Calendar custom field that shows a date picker and available appointment slots from Google Calendar free/busy data.
* The booking field writes date, time, and duration hidden values so Google Calendar submissions can reserve the selected appointment.
* Added the Booking Calendar feature toggle to FFE editor settings.

= 1.10.37 =
* Added clearer Google Calendar 404 diagnostics, including the actual Calendar ID used for routed bookings.
* Clarified that Calendar ID is separate from the FFE account key.

= 1.10.36 =
* Fixed new Google Calendar account keys so they no longer inherit another account's existing OAuth token before sign-in.

= 1.10.35 =
* Added the routed Google Calendar account key and submitted routing value to the last submission status for easier multi-account troubleshooting.

= 1.10.34 =
* Hardened Google Calendar OAuth state handling for multiple calendar accounts.
* Added specific Google Calendar connection error messages in FFE settings.

= 1.10.33 =
* Added support for multiple connected Google Calendar accounts.
* Added Elementor controls to choose a calendar account or route bookings by a submitted employee/contact field.
* Improved Google Calendar performance by skipping live free/busy calls inside Elementor editor preview and caching free/busy checks briefly.

= 1.10.32 =
* Fixed Google Calendar event creation when the Calendar ID setting is left empty by using the connected account's primary calendar.
* Added Service Field ID and Contact Person Field ID mappings for Google Calendar events.
* Added clearer Google Calendar API error details to the last submission status.

= 1.10.31 =
* Replaced Google Calendar service account credentials with a Google account OAuth sign-in flow.
* Added Sign in with Google and Disconnect controls in FFE > Google Calendar.
* Stores and refreshes the connected Google account token for calendar free/busy checks and event creation.

= 1.10.30 =
* Changed Google Calendar from a pre-filled redirect link to a real Google Calendar API reservation integration.
* Added global Google Calendar API connection settings under FFE > Google Calendar.
* Added server-side appointment conflict checks before form processing and event creation.
* Added frontend availability checks that disable already reserved time options for the selected date.
* Changed appointment duration to support a Duration Field ID with a fallback duration.

= 1.10.29 =
* Added Google Calendar integration with an FFE feature toggle and Elementor form controls.
* Added no-code event mapping for title, date, time, duration, timezone, location, description, and guest emails.
* After successful submission, forms can redirect visitors to a pre-filled Google Calendar event.

= 1.10.28 =
* Fixed standard Elementor Email PDF attachment targeting so Email 1 and Email 2 respect their own Attach PDF Summary switchers independently.

= 1.10.27 =
* Moved PDF Summary attachment switchers into their related Elementor Email, Email 2, and Conditional Response Email sections.
* Added a Fields Summary Table switcher for PDF summary templates.
* Improved standard Elementor Email PDF attachment targeting and kept footer column links clickable in generated attachments.

= 1.10.26 =
* Footer column links now support HTML anchor entries such as `<a href="https://example.com">Link</a>`.
* Added uploadable PDF footer social icons with separate clickable social URLs.
* Split PDF Summary Attachment controls into their own Elementor section, so standard Elementor Email PDF attachments no longer require Conditional Email to be enabled.

= 1.10.25 =
* Preserved transparent PNG and WebP logos in generated PDFs by embedding PDF image alpha masks instead of flattening logos onto a white JPEG background.
* Added editable social icon URLs for PDF footer icons so the generated PDF can include clickable social links.
* Added an opt-in switch to attach the PDF summary to the standard Elementor Email action.

= 1.10.24 =
* Added four selectable PDF summary design templates based on the uploaded V1, V2, V3, and V4 layouts.
* Added Elementor and FFE settings controls for PDF template design, recipient block, greeting line, footer columns, footer social labels, and footer background color.
* Added field shortcode support inside PDF template text blocks, such as [field id="firstname"].

= 1.10.23 =
* Improved WebP logo conversion for PDF summary attachments when the server cannot decode WebP through the default WordPress image editor path.
* Added a Logo Border Color control for global FFE PDF settings and per-form PDF templates.

= 1.10.22 =
* Added native PDF embedding for 8-bit RGB and RGBA PNG logos.
* Flattened transparent PNG logos onto a white background inside the PDF without requiring server-side JPEG conversion.

= 1.10.21 =
* Removed the colored background from the PDF logo area.
* Added more WordPress media path resolution fallbacks using attachment metadata, content URLs, and uploads URL paths.

= 1.10.20 =
* Added a same-site logo URL fetch fallback for PDF summaries when the selected media file cannot be resolved to a local upload path.
* Added in-memory JPEG conversion for fetched logo bytes so JPG, PNG, and WebP uploads can be embedded more reliably.

= 1.10.19 =
* Improved PDF logo fallback rendering so the logo box never appears empty when image embedding fails.
* Attempted WordPress image conversion before rejecting logos that cannot be read by getimagesize, improving support for SVG and uncommon media formats when the server image engine supports conversion.

= 1.10.18 =
* Improved PDF logo image resolution from Elementor media controls, attachment URLs, and FFE global settings.
* Added a GD fallback converter so PNG, WebP, and GIF logo images can be embedded as JPEG when WordPress image editor conversion is unavailable.
* Preserved logo aspect ratio inside the PDF header block.

= 1.10.17 =
* Fixed a PHP parse error on the FFE PDF Summary settings page caused by inline media-picker JavaScript.

= 1.10.16 =
* Added PDF logo image selection for global FFE settings and per-form Elementor templates.
* Made all PDF template labels and visible helper texts customizable.
* Added PDF color controls for primary, accent, text, muted text, row backgrounds, borders, and logo text.
* Added JPEG logo embedding with conversion support for other WordPress-supported image formats.

= 1.10.15 =
* Redesigned PDF Summary Attachment to match a professional email response summary layout.
* Added branded PDF header controls for logo text, company name, subtitle, email, phone, and website.
* Added per-form Elementor overrides for the PDF header details.
* Improved PDF summary output with a purple header block, orange divider, section hierarchy, table-style submitted fields, and footer.

= 1.10.14 =
* Added PDF Summary Attachment for Conditional Response Email.
* Added FFE settings tab for the default PDF title, intro, footer, and file name.
* Added Elementor form controls to attach a PDF summary and override the PDF template per form.
* Generated PDF summaries include filled submitted fields only.

= 1.10.13 =
* Fixed Step Swipe Navigation touch gestures on mobile devices.
* Improved swipe tracking when the touch starts on normal form field areas.
* Added active swipe tracking so mobile touch end can finish navigation reliably.
* Added touchmove handling to prevent horizontal swipes from being swallowed by page scrolling.

= 1.10.12 =
* Added Elementor icon pickers for Step Swipe Navigation previous and next arrows.
* Updated arrow rendering to use selected Elementor icons with a CSS chevron fallback.
* Improved arrow icon sizing controls for SVG and font icons.

= 1.10.11 =
* Fixed Step Swipe Navigation arrows not appearing on some Elementor form layouts.
* Added a frontend fallback that creates the arrow overlay when Elementor output does not include it.
* Improved step detection for arrow visibility across Elementor step markup variants.

= 1.10.10 =
* Added Style tab controls for Step Swipe Navigation arrows and transition motion.
* Moved swipe arrows inside the form markup so they render reliably above multi-step forms.
* Added automatic directional slide animation for swipe, arrow, and native Next/Previous navigation.
* Added configurable transition duration and slide distance for the slider feel.

= 1.10.9 =
* Added Step Swipe Navigation for Elementor multi-step forms.
* Added form-level controls for slider navigation, swipe gestures, arrows, and swipe sensitivity.
* Added frontend swipe handling that triggers Elementor's native Previous and Next buttons.
* Added optional floating arrow buttons for step navigation.
* Added the Step Swipe Navigation feature toggle to FFE Editor Settings.

= 1.10.8 =
* Restored the dedicated conditional logic frontend runtime.
* Restored skipped-step required-field handling to the last working behavior.
* Kept Advanced Webhooks URL hardening from the security pass.

= 1.10.7 =
* Hardened conditional-step required-field handling with server-side validation of skipped fields.
* Added stricter Advanced Webhooks URL checks to block localhost, private, and reserved network targets.
* Removed duplicate conditional logic frontend loading to reduce JavaScript payload and duplicate observer work.
* Cleaned macOS metadata files from the plugin package.

= 1.10.6 =
* Added Advanced Webhooks for Elementor Form submissions.
* Added conditional webhook rules so different URLs can run based on submitted field values.
* Added payload mapping with field, all-fields, static/template, and page/site meta value sources.
* Added custom webhook headers and JSON or form-encoded request formats.
* Added the Advanced Webhooks feature toggle to FFE Editor Settings.

= 1.10.5 =
* Added the Confirmation Popup feature for Elementor Forms.
* Added form-level controls for popup icon, title, message, Send button text, and Cancel button text.
* Added Style tab controls for the popup, icon, title, message, and confirmation/cancel buttons.
* Added the Confirmation Popup feature toggle to FFE Editor Settings.

= 1.10.4 =
* Fixed Label Style 3 textarea labels so they sit at the top of the textarea instead of the center.
* Adjusted active Label Style 4 labels to 11px font size and 4px top position for clearer typed values.
* Updated the FFE settings page heading to show the full plugin name, FormFlow for Elementor.

= 1.10.3 =
* Removed the internal `includes/README.md` file.
* Added a WordPress-standard `readme.txt` file to the plugin root.
* Updated plugin metadata for the new documentation package.

= 1.10.2 =
* Fixed the German phone input mask so the fixed `+49` prefix no longer changes while typing.
* Prevented the German phone mask from adding extra `4` characters during repeated keyboard input.

= 1.10.1 =
* Added the Input Mask feature.
* Added field Advanced tab controls for phone, date and time, money, credit card, Brazilian formats, IP address, and custom masks.
* Added frontend input formatting with safe `data-ffe-input-mask` attributes.
* Added the Input Mask feature toggle to FFE Editor Settings.

= 1.10.0 =
* Marked the standard choice gap and style build as the latest working baseline.

= 1.9.99 =
* Made standard radio and checkbox layout controls independent from the custom input style switcher.
* Kept columns, gaps, direction, alignment, and label box styles working when input style is set to Default.

= 1.9.98 =
* Kept standard radio and checkbox layout styling active when Default input style is selected.

= 1.9.97 =
* Kept columns working when standard radio and checkbox input style is set to Default.

= 1.9.96 =
* Restored Elementor native input appearance when Default style is selected.

= 1.9.95 =
* Removed the custom choice mark from the Cover style.

= 1.9.94 =
* Improved switch style sizing and SVG fit.

= 1.9.93 =
* Fixed switch style layout and color behavior for standard radio and checkbox fields.

= 1.9.92 =
* Switched standard choice check marks to SVG-based markup for more reliable styling.

= 1.9.91 =
* Fixed selected and unselected color controls for standard radio and checkbox styles.

= 1.9.90 =
* Improved SVG check icon color handling.

= 1.9.89 =
* Fixed standard choice input size and color application.

= 1.9.88 =
* Improved standard radio and checkbox preset styles, check icons, switch layout, and numeric column control.

= 1.9.87 =
* Added seven standard radio and checkbox style presets.
* Added opt-in controls for styling standard Elementor radio and checkbox fields.

= 1.9.86 =
* Fixed number field label overlap in floating label styles.
* Added per-field label show/hide controls when global labels are enabled.

= 1.9.85 =
* Improved floating label behavior so labels stay moved when fields contain values.

= 1.9.84 =
* Added label styler presets for Elementor form fields.

= 1.9.83 =
* Added label position options for the Toggle Switcher field.

= 1.9.82 =
* Added the Toggle Switcher custom field type.

= 1.9.81 =
* Fixed required-field validation for skipped conditional steps.

= 1.9.80 =
* Added WP Rocket compatibility handling for conditional step logic.

= 1.9.79 =
* Added opt-in styling controls for standard Elementor radio and checkbox fields.

= 1.9.78 =
* Added the Currency Field custom field type.

= 1.9.77 =
* Added conditional calculation support to the Calculation field.

= 1.9.76 =
* Added the Calculation field type.

= 1.9.75 =
* Removed search from the phone country dropdown.

= 1.9.74 =
* Fixed default country display for the phone country code dropdown.

= 1.9.73 =
* Added flat flag rendering for the phone country dropdown.

= 1.9.72 =
* Reworked phone country code styling controls.

= 1.9.70 =
* Added country code dropdown controls for phone fields.

= 1.9.69 =
* Added conditional redirect after form submission.

= 1.9.68 =
* Added range slider track shape controls and moving value display above the slider thumb.

= 1.9.67 =
* Updated color style controls to support Elementor global colors.

= 1.9.66 =
* Added the Range Slider custom field type and Editor Settings toggle.

= 1.9.65 =
* Performed security hardening across plugin inputs and render output.

= 1.9.64 =
* Moved plugin settings to a dedicated FFE dashboard menu.

= 1.9.63 =
* Added the Editor Settings screen with feature toggles and license settings.

= 1.9.62 =
* Restructured the plugin into feature-specific files and folders.

= 1.9.61 =
* Fixed Elementor nested repeater behavior for added options and conditions.

= 1.9.60 =
* Restored clickable nested add buttons in the Elementor editor.

= 1.9.59 =
* Fixed nested add containment to prevent unwanted fields from being added.

= 1.9.58 =
* Improved nested editor stability when editing options and conditions.

= 1.9.57 =
* Fixed editor preview disappearing after editing nested repeater items.

= 1.9.56 =
* Improved keeping the active form field open after adding nested items.

= 1.9.55 =
* Fixed field panels closing after adding options or conditional logic rows.

= 1.9.54 =
* Renamed the standard icon style section to Field Prefix/Suffix.
* Hid overflow for prefix and suffix icon boxes.

= 1.9.53 =
* Kept image option sizing independent from the visual box size control.

= 1.9.52 =
* Added image alt text, width, and height handling for icon checkbox and radio options.
* Fixed custom icon fields appearing in summary output.

= 1.9.51 =
* Treated the columns styling build as a stable working baseline.

= 1.9.50 =
* Added columns and display controls to the Rating custom field.

= 1.9.49 =
* Updated custom required messages to use Elementor standard validation text.

= 1.9.48 =
* Improved editor preview refresh when a custom field is first added.

= 1.9.47 =
* Forced editor preview refresh when custom field settings change.

= 1.9.46 =
* Improved editor preview refresh behavior for step animation updates.

== Upgrade Notice ==

= 1.10.44 =
Prevents cached Google Calendar availability responses from leaving newly booked Booking Calendar slots selectable.

= 1.10.43 =
Booking Calendar checks Google availability fresh so one appointment slot cannot be selected again after it is booked.

= 1.10.42 =
Booking Calendar now blocks past dates/times and follows the form-level Google Calendar routing more reliably.

= 1.10.41 =
Reads Booking Calendar date/time values directly from the submitted form payload when Elementor omits helper fields from its record.

= 1.10.40 =
Fixes missing date/time detection for Google Calendar reservations from the Booking Calendar field.

= 1.10.39 =
Adds a styled month calendar interface and Style tab controls for the Booking Calendar field.

= 1.10.38 =
Adds a dedicated Booking Calendar field for choosing available Google Calendar appointment slots.

= 1.10.37 =
Clarifies Google Calendar 404 errors when a routed account uses an invalid or inaccessible Calendar ID.

= 1.10.36 =
Prevents newly saved Google Calendar accounts from reusing a different connected account token.

= 1.10.35 =
Shows which Google Calendar account received or rejected a routed appointment.

= 1.10.34 =
Fixes fragile multi-account Google sign-in state handling and shows clearer OAuth errors.

= 1.10.33 =
Adds multiple Google Calendar accounts and reduces editor/front-end free-busy overhead.

= 1.10.32 =
Fixes Google Calendar event creation with the default primary calendar and adds service/contact person event details.

= 1.10.31 =
Connect Google Calendar by signing in with the calendar owner Google account instead of using a service account key.

= 1.10.30 =
Uses the Google Calendar API to reserve appointments and block already reserved time slots.

= 1.10.29 =
Adds simple Google Calendar event creation through a pre-filled post-submit redirect.

= 1.10.28 =
Keeps PDF attachments scoped to the enabled Elementor email section only.

= 1.10.27 =
Moves PDF attachment switchers into each email section and adds a PDF fields summary table toggle.

= 1.10.26 =
Adds HTML footer links, uploaded social icons, and standalone PDF controls for standard Elementor emails.

= 1.10.25 =
Preserves transparent PDF logos, adds clickable social links, and supports attaching the PDF to Elementor standard emails.

= 1.10.24 =
Adds editable PDF design templates for response summary attachments.

= 1.10.23 =
Improves WebP logo support in PDF summaries and adds logo border color control.

= 1.10.22 =
Adds native PNG logo embedding for PDF summaries.

= 1.10.21 =
Removes the PDF logo background and improves logo file path detection.

= 1.10.20 =
Improves PDF logo embedding when WordPress stores only a media URL or the local media path cannot be resolved.

= 1.10.19 =
Prevents empty PDF logo boxes and improves conversion attempts for difficult logo formats.

= 1.10.18 =
Fixes logo images not appearing in generated PDF summary attachments.

= 1.10.17 =
Fixes the FFE PDF Summary settings page fatal error from version 1.10.16.

= 1.10.16 =
Adds full PDF template text, logo image, and color customization.

= 1.10.15 =
Improves the PDF attachment design and adds company header template controls.

= 1.10.14 =
Adds optional PDF summary attachments for response emails.

= 1.10.13 =
Fixes mobile touch swipe gestures for Step Swipe Navigation.

= 1.10.12 =
Adds custom icon selection for Step Swipe Navigation arrows.

= 1.10.11 =
Fixes missing Step Swipe Navigation arrows.

= 1.10.10 =
Improves Step Swipe Navigation with visible arrows, Style controls, and slider-like animation.

= 1.10.9 =
Adds swipe and arrow navigation for slider-like Elementor multi-step forms.

= 1.10.8 =
Hotfix for conditional field logic and skipped-step submissions after the 1.10.7 optimization pass.

= 1.10.7 =
Security and performance hardening for conditional fields and Advanced Webhooks.

= 1.10.6 =
Adds conditional webhooks with mapped payloads for connecting Elementor Forms to external services.

= 1.10.5 =
Adds an optional confirmation dialog before form submission.

= 1.10.4 =
Improves label readability in textarea fields and updates the settings page title.

= 1.10.3 =
This release updates the plugin package documentation and keeps the latest Input Mask phone fix from 1.10.2.

= 1.10.2 =
Recommended for sites using the German phone input mask.

= 1.10.1 =
Adds guided input masks for common form formats.
