Regal IT LtdRegal IT LtdRegal IT LtdRegal IT Ltd
  • WooCommerce Plugins
    • RMA Pro
    • Delivery Dates
    • Product Personaliser
    • Regal Forms
    • Sale Category Sync
    • Regal Send
    • Cart Notices
    • Made to Order
    • Knowledge Base
    • Menu Editor
    • Marketplace
    • VIEW ALL
  • Ecom Management
  • Support
    • Knowledge Base
    • Changelogs
    • Contact Us
  • My account
  • Basket
  • WooCommerce Plugins
    • RMA Pro
    • Delivery Dates
    • Product Personaliser
    • Regal Forms
    • Sale Category Sync
    • Regal Send
    • Cart Notices
    • Made to Order
    • Knowledge Base
    • Menu Editor
    • Marketplace
    • VIEW ALL
  • Ecom Management
  • Support
    • Knowledge Base
    • Changelogs
    • Contact Us
  • My account
  • Basket
Early Access Price
Sale!
RMA Pro for WooCommerce - Renewal
Premium Licence

RMA Pro for WooCommerce – Renewal

£199.99 £99.99

Unlocks all premium features!

RMA Pro for WooCommerce helps you manage refunds, exchanges and store credit through a professional branded returns portal with advanced rules, clearer workflows and better customer tracking – reducing admin time while improving the post-purchase experience.

Category: Plugins

  • Description
  • Changelog

Description

WooCommerce Returns, Exchanges & Store Credit

Returns software built for real WooCommerce stores.

RMA Pro helps you manage returns, refunds, exchanges, store credit, return labels and customer communication from one flexible, rule-driven system.

Download Free Trial
View Premium Licence
View Demo

✓ Free version available ✓ Built for WooCommerce ✓ Premium from £99.98 introductory price

Built from ecommerce reality

Created because basic return plugins were not enough.

RMA Pro was built by a store owner who needed more than a simple request form. Real stores need conditional policies, exchange flexibility, store credit, return label options, rule-based emails and tools to reduce manual decisions.

1

Control return costs

Choose who sees free returns, paid labels, exchanges or store credit based on rules.

2

Reduce manual handling

Automate approvals, email updates, method visibility and label workflows.

3

Retain more revenue

Offer store credit and bonus credit instead of always refunding to the original payment method.

RMA Pro vs basic return plugins

Capability RMA Pro Typical basic RMA plugin
Rule-based return logic ✓ Advanced IF/THEN rules with priority ✗ Usually static settings only
Stop processing logic ✓ Matching rules can stop later rules ✗ Usually unavailable
Conditional return methods ✓ Show methods by rule, customer or scenario ✗ Same options for everyone
Exchange flexibility ✓ Exchange pool supports multi-item flexibility ✗ Often rigid or one-for-one
Store credit ✓ Wallet balance converted into coupon ✗ Limited or missing
Return labels ✓ Shippo, label emails and customer-paid label flow ✗ Basic or manual

Core features

Advanced Rule Engine

Build rules using customer type, risk, order value, product, category, return reason, order age and more.

Exchange Pool

Combine the value of exchange items so customers can choose flexible replacements.

Wallet Store Credit

Issue store credit to a customer wallet and let customers convert that balance into WooCommerce coupons.

Email Templates

Use status emails, placeholders, label emails, reminders and rule-based overrides.

Start free. Upgrade when you need more control.

The free version remains usable. Premium unlocks advanced features such as deeper rules, zone controls, integrations, forecasting and backup/restore where applicable.

£99.98 introductory premium price (£199.99 standard price)

Download Free Trial
Buy Premium Licence
View Demo

Changelog

RMA Pro for WooCommerce

v2.10.14
Version 2.10.14 - 29th September 2026
- Added Adjust balance and Refund Remaining Balance actions to individual wallet overview pages.
See Full Changelog
Version 2.10.13 - 28th September 2026
- Standardised the product header and version badge, and routed System-tab support through the Licence Server with consent-based diagnostics and structured bug reporting.
- Kept RMA-specific diagnostics opt-in and excluded sensitive licence credentials.

Version 2.10.10 - 23rd September 2026
- Refined the System page appearance for a more consistent experience.

Version 2.10.9 - 23rd September 2026
- Improved the System page experience.

Version 2.10.8 - 23rd September 2026
- Improved the System page presentation and licence experience.

Version 2.10.7 - 23rd September 2026
- Polished the licence and support experience on the System page.

Version 2.10.6 - 23rd September 2026
- Refined licence and support tools for a more consistent experience.

Version 2.10.5 - 23rd September 2026
- Improved licence status synchronisation and the update experience.

Version 2.10.4 - 23rd September 2026
- Simplified the compatibility declarations displayed in release notes.

Version 2.10.3 - 23rd September 2026
- Compatibility with WordPress: 7.1.2
- Tested WooCommerce up to: 11.1.2

Version 2.10.2 - 21st September 2026
- Removed the Coming Soon About and Licence card.
- Expanded the remaining cards to equal columns.

Version 2.10.1 - 21st September 2026
- Added paginated Wallets list results.
- Added a compact selected-wallet adjustment panel to make large wallet lists easier to manage.
- Fixed the selected-wallet adjustment panel so it opens reliably.
- Added compact colour-coded wallet actions with right-aligned token previews.

Version 2.9.20 - 20th September 2026
- Hardened private update validation.
- Refreshed protected download URLs immediately before installation.

Version 2.9.19 - 19th September 2026
- Await Licence Server confirmation before enabling a code-less trial.

Version 2.9.18 - 19th September 2026
- Added a Settings link on the Installed Plugins page.

Version 2.9.17 - 16th September 2026
- Added identified staging activation to the Licence Server check.
- Added compatibility reporting to the Licence Server check.

Version 2.9.16 - 14th September 2026
- Hid trial-only controls and details when a paid licence is attached.
- Simplified the active licence confirmation message.

Version 2.9.15 - 12th September 2026
- Replaced the WordPress admin-menu icon with the new RMA logo mark, without text.

Version 2.9.14 - 11th September 2026
- Standardised System-page commerce actions for paid, expired, trial, paused and cancelled licence states.

Version 2.9.13 - 11th September 2026
- Show the renewal action for active paid licences as well as expired paid licences.

Version 2.9.12 - 11th September 2026
- Moved linked-code guidance below the trial field.
- Added contextual green Purchase or Renew licence actions.

Version 2.9.11 - 11th September 2026
- Added secure account-issued trial activation codes for protected trial updates and plugin information.
- Fixed trial-code activation so it uses the standard server response.
- Retained the actual error when activation is refused.
- Clarified that the code links the existing trial to protected update access rather than starting a second trial.

Version 2.9.10 - 9th September 2026
- Fixed exchange completion actions so they appear and run only when a returned item uses the Exchange resolution.

Version 2.9.9 - 7th September 2026
- Fixed the Requests table, RMA record and CSV export so they show resolutions saved per returned item.

Version 2.9.8 - 26th August 2026
- Keeps the rejection window open while evidence uploads and the rejection email is processed, with upload progress and clear completion states.
- Removed the repeated email-placeholder helper text beneath the saved rejection reason.

Version 2.9.7 - 26th August 2026
- Added optional multiple evidence uploads when rejecting an individual return, with secure file validation and storage on the RMA.
- Newly uploaded rejection evidence is attached to the customer rejection email, including rule-specific rejection templates.

Version 2.9.6 - 26th August 2026
- Requires a customer-facing reason when an individual or bulk action rejects a return.
- Added the {{reject_reason}} email placeholder.
- Recorded the rejection reason on the RMA.

Version 2.9.5 - 26th August 2026
- Updated the Installed Plugins page links for Regal IT and the Regal IT WooCommerce plugins directory.

Version 2.9.4 - 21st August 2026
- Added a WordPress Dashboard widget for open-return workload, seven-day submission trends, status breakdowns and the oldest open return.

Version 2.9.3 - 21st August 2026
- Moved contextual RMA workflow actions beneath the status selector and Apply Status button.
- Shows Go to Action only once a request is marked Received.
- Softened admin buttons and standard form fields.

Version 2.9.2 - 21st August 2026
- Added an approved-return shortcut that takes admins directly to the available refund, store-credit or related action.
- Softened the RMA Record status controls with calmer spacing, rounded surfaces and responsive controls.

Version 2.9.1 - 21st August 2026
- Removed the withdrawn Risk Score feature and its related configuration, rule condition and admin displays.

Version 2.9.0
- Improved reusable admin product, category and return-zone selectors with accessible keyboard navigation.
- Improved search feedback in the reusable admin selectors.
- Improved in-progress search handling in the reusable admin selectors.
- Added a shared scoped admin UI foundation for consistent picker spacing, focus states, chips and loading feedback.

Version 2.8.10
- Allowed admins to refund above the default amount when a return-label deduction should be waived, up to the full remaining returned-item value.
- Added a clear confirmation warning before overriding all or part of the label deduction.
- Recorded deduction overrides in the RMA Activity Log.
- Recorded deduction overrides in WooCommerce order notes.

Version 2.8.9
- Added variation details inline with returned product names on the RMA Record page.
- Uses the stored variation ID or original WooCommerce order item so existing RMA records display their variation where available.
- Preserved item quantities, values, reasons, resolutions and selectable-item behaviour.

Version 2.8.8
- Reordered the RMA Record right column so status and stock controls are followed by the financial Action section, with Notes placed at the bottom.
- Added centred Action and Notes section headings for a clearer processing flow.
- Split note saving from status changes so each form preserves unrelated status, stock and note values safely.

Version 2.8.7
- Fixed refund amount rounding so displayed eligible item values, input defaults, maximum values and backend validation use consistent WooCommerce currency precision.
- Prevented half-penny source values such as 36.985 from displaying as £36.99 while limiting the refund input to £36.98.
- Preserved selected-item recalculation and return-label deductions while applying consistent currency rounding.

Version 2.8.6
- Added a new return-label method that lets customers choose an available Shippo or ShipStation service and price for deduction from their refund or store credit.
- Added validation for selected label rates, providers, order currency and incompatible exchange requests.
- Added return-label deductions to original-payment refund and store-credit calculations using the purchased label cost where available.
- Added provider, service, quoted cost and deduction details to the RMA record, financial summaries and Activity Log context.
- Preserved the existing merchant-funded and customer-paid label methods without changing their behaviour.

Version 2.8.5
- Added provider-neutral return parcel tracking to RMA records for labels generated through Shippo and ShipStation.
- Added a Return Tracking summary with normalised status, carrier, linked tracking number, last update, estimated delivery and latest carrier details.
- Added a collapsible parcel journey showing retained tracking events in chronological order.
- Added readable Activity Log entries for new carrier tracking events while ignoring duplicate webhook updates.
- Added consistent tracking status colours for label generated, in transit, delivery exception, delivered and returned-to-sender states.
- Stored tracking history within the existing label data without adding a database migration.

Version 2.8.1
- Added ShipStation API V2 as an alternative merchant-funded return-label provider.
- Added an active label-provider selector while preserving saved Shippo and ShipStation credentials and settings.
- Added ShipStation carrier, service and package discovery for ShipStation services and connected carrier accounts.
- Added ShipStation manual labels.
- Added approval auto-generation.
- Added secure customer self-service links.
- Added local PDF storage.
- Added customer email delivery.
- Added regional service preferences.
- Added heavy-parcel overrides.
- Added tracking webhooks.
- Updated RMA Record label wording and actions to identify the provider used, while preserving routing for existing Shippo labels and RMAs.
- Preserved merchant-funded label rules when switching the active provider between Shippo and ShipStation.
- Kept customer-paid return labels on Shippo for this release.

Version 2.8.0
- Reworked the RMA Record workflow so status changes are applied beside the status field, while notes and stock settings have a separate save action.
- Moved contextual Approve Return and Mark Received shortcuts beside the status selector.
- Added a clear Action section for refund, store credit and exchange completion workflows.
- Moved Convert Resolution into a collapsed Advanced actions panel.
- Improved received-status guidance for each resolution type.

Version 2.7.16
- Removed the Rule Applied row from the main RMA Record header because this is already available in the debug area.
- Removed the Gateway status line from the refund details panel.
- Included the selectable returned-item refund/store-credit update and adjusted the refund item-value helper text.

Version 2.7.15
- Added selectable returned items on non-exchange RMA records so admins can include or exclude items before issuing refunds or store credit.
- Updated refund helper wording from selected returned items to returned items.

Version 2.7.14
- Added remembered show/hide toggles for completed, rejected and cancelled requests on the requests screen.

Version 2.7.13
- Added sortable columns to the RMA requests table with the selected sort order remembered per admin user.
- Added quick status filter buttons above the requests table using the existing status colours.

Version 2.7.12
- Tightened the RMA Record summary spacing after the Return Label layout changes.
- Moved customer details onto the order row.
- Removed the submitted timestamp row.
- Displayed returned-item quantity inline in bold.
- Simplified completed store-credit records so issued requests show a single issued amount/date summary instead of the pre-issue controls and guidance.

Version 2.7.11
- Fixed the RMA Record Return Label panel placement so it sits within the main request details card instead of creating an extra column.
- Added RMA Record status colour styling for completed, rejected and cancelled requests, with cache-busting version refresh for admin assets.
- Added a coloured status indicator beside the request status field.
- Updated the admin email return reason placeholder so {{return_reason}} outputs reason labels only, with {{item_reason_summary}} preserving the former item plus reason summary.

Version 2.7.10
- Added Return Zone matching to Custom Rules IF Criteria, including zone include/exclude selection for country and region-based returns logic.
- Added Custom Rule validation warnings and save/preview errors when VIP Customer or High Risk Customer criteria are used before their Rule Sources are enabled and configured.
- Improved the Return Zones picker so the field is hidden when Any return zone is selected, available zones appear on focus, and typing filters the list.
- Fixed Return Zones AJAX search to correctly read WooCommerce shipping zone IDs and return matching configured zones.
- Allowed bundled documentation to remain accessible from the Help page while a trial or licence state has feature access locked.

Version 2.7.9
- Fixed Custom Rule metadata matching so rule previews and frontend blocking evaluate order and order-item meta only, preventing products that merely support personalisation from matching before they are actually personalised.
- Added backward-compatible RPP metadata aliases so existing rules using rit_rpp_template_id or rit_rpp_payload match the hidden RPP order-item meta written for genuinely personalised order items.

Version 2.7.8
- Fixed Custom Rule order previews so the Orders tab checks only the rule being previewed instead of any saved rule on the site.
- Hardened Custom Rule meta-data matching so structured order-item, order, and product meta values are evaluated safely without array-to-string conversion side effects.
- Corrected rule preview item values so product-value criteria use real unit prices in recent-order previews.
- Corrected high-risk customer returned-item history metrics so current schema return payloads are included in returned quantity and value calculations.

Version 2.7.7
- Added domain-change reporting to licence, update, and trial requests.

Version 2.7.6
- Release bump after System tab submission cleanup and changelog display updates.

Version 2.7.5
- Removed obsolete frontend browser-side submission capture and plugin debug-log diagnostic toggles from the System tab.
- Fixed frontend submission mode to Standard Form POST.
- Removed the AJAX submission selector from the System tab.
- Updated the latest changelog entries displayed on the System tab for the current 2.7.5 build.
- Added a divider between Order Shipping Value and Credit Total to Issue on the RMA record store-credit panel.

Version 2.7.4
- Fixed frontend diagnostics fatal caused by a missing customer IP helper method.

Version 2.7.3
- Added active-trial notice for newer licensed versions without exposing private updater downloads.
- Updated expired licence notice to explain that visible updates require renewal before download.

Version 2.7.2
- Fixed paid exchange-delivery completion so customers see a return success message after payment.
- Ensured payment-gated exchange RMAs create the on-hold exchange order after successful payment.
- Added automatic completion for RMA service payment orders after cleared payment.
- Added an admin-controlled analytics exclusion toggle for customer-paid return labels.
- Added an admin-controlled analytics exclusion toggle for exchange delivery charges.

Version 2.7.1
- Fixed the System page Check Licence action so it always forces a licence/trial server refresh while the plugin is locked.
- Bumped Licence Server build version to 2.7.1.

Version 2.7.0
- Added exchange delivery charge controls under Return Settings > Exchange with dependent options hidden when the feature is disabled.
- Fixed exchange flow currency formatting to use the original order currency metadata and symbol instead of falling back to the store currency.
- Improved exchange product pricing conversion so current product prices are displayed in the order currency where supported by the active currency plugin.
- Allowed same-price variant exchanges to retain the original paid item value.

Version 2.6.2
- Updated the WordPress admin menu icon to use the new SVG asset with theme-colour-aware masking.
- Added a plugin row metadata link to view other Regal IT WooCommerce plugins.
- Removed duplicate inline helper descriptions from the scoped admin settings areas where helper icons already provide the guidance.
- Removed the extra manual Shippo label action note from the RMA record screen.

Version 2.6.1
- Compliance: moved licence and plugin debug logs into a protected plugin-specific uploads subdirectory instead of writing directly to the uploads root.
- Compliance: removed admin help wording that suggested editing bundled plugin documentation files directly.

Version 2.6.0
- Fix: removed the temporary inline frontend loading fallback.
- Reset step navigation buttons whenever the return form changes steps, preventing buttons from remaining on Loading after successful navigation.
- Refined evidence remove X spacing and cursor/hover behaviour.
- Fix: corrected frontend inline loading fallback string concatenation to prevent a PHP fatal on returns pages.
- Added the WordPress Requires Plugins header for WooCommerce.
- Blocked cancellation of completed RMA records before status changes or emails are triggered.
- Added stronger frontend loading states for order lookup and step navigation buttons.
- Frontend: restored visible loading states on return form step navigation buttons, with a forced paint before slow AJAX work starts.
- Admin UI: Requests search now includes order number and order ID matches as well as RMA, customer, email, product and resolution fields.
- Fix: replaced the Requests status canvas chart with a server-rendered clickable SVG chart so it no longer depends on admin JavaScript timing or cached chart data.
- Fix: hardened request status chart data loading by adding a canvas data fallback, so the chart renders even when localized inline data is unavailable.
- Frontend: forced wallet coupon code text to a dark colour to prevent theme colour inheritance making codes unreadable.
- Fix: restored System page licence/status visual styling via enqueued inline admin CSS so unchanged asset versions do not leave cached styling behind.
- Fix: restored request status chart compatibility by adding a non-script chart data node for cached admin JavaScript while keeping the new localized chart data.
- Documentation: updated the in-plugin documentation logo source to the current 256x256 RMA Pro for WooCommerce asset.
- Admin UI: removed the duplicate Settings Safety Snapshot card from the Activity tab footer; it remains available from Backup/Restore.
- Compliance: moved low-risk admin CSS from direct style output into enqueued/admin style handling.
- Compliance: replaced the request status chart JSON script tag with data passed through the enqueued admin script.
- Compatibility: updated General Settings and documentation to recommend [rit_rma_portal] while preserving [rma_pro_portal].
- Review: completed a low-risk prefix audit and preserved existing public identifiers for backwards compatibility.
- Security hardening: sanitised admin redirect notice values before output.
- Security hardening: sanitised request URI usage in RMA Pro debug request context detection.
- Compatibility: added prefixed [rit_rma_portal] shortcode alias while preserving [rma_pro_portal].

Version 2.5.18
- Added a Premium-locked Settings Safety Snapshot restore card to Backup/Restore.
- Added settings save activity logging with previous/new key counts and suspicious-change warnings.
- Hardened partial admin settings saves to merge only approved keys into existing settings, reducing the risk of accidental full settings wipes.

Version 2.5.17
- Reduced automatic licence-server update-check timeout to avoid slow wp-admin/plugin install screens when the remote update server is slow or unavailable.
- Added short-lived failed update-check caching so repeated automatic update checks degrade gracefully instead of repeatedly blocking admin requests.
- Preserved normal successful update-offer caching and longer manual licence/check request timeouts.

Version 2.5.16
- Fixed Debug Tools AJAX save response handling so debug settings no longer show an error after saving successfully.

Version 2.5.15
- Added Frontend Submission Mode setting with Standard Form POST as the default, most reliable live-store submission path.
- Standard Form POST now uses the existing admin-post handler and browser redirect flow while preserving duplicate-safe submission IDs, early diagnostics, fatal-error capture and success messaging.
- Retained AJAX Submit as an optional smoother mode with REST retry and admin-ajax fallback for stores that prefer the no-reload experience.

Version 2.5.14
- Added REST submit retry and admin-ajax fallback submission handling for mobile/network edge cases.
- Added duplicate-safe submission IDs with short-lived processing locks to prevent duplicate RMAs when retry/fallback paths are used.
- Hardened frontend submit handling with timeout detection.
- Added retry diagnostics.
- Added fallback diagnostics.
- Preserved customer diagnostic references.

Version 2.5.13
- Added early REST receipt logging before validation.
- Added browser fetch lifecycle capture behind the existing toggle.
- Added customer-visible diagnostic references for failed submissions.

Version 2.5.12
- Changed customer evidence uploads and generated return label PDFs to use plugin-controlled RMA Pro storage without creating WordPress Media Library attachment records.
- Added separate General Settings retention controls for evidence uploads and return labels.
- Preserved existing Media Library attachment references for older RMA records.

Version 2.5.11
- Updated the admin wallet view so wallet-link and coupon copy icons sit inside their fields.
- Fixed the Current Balance stat to stay on one line with matching stat styling.

Version 2.5.10
- Added wallet bulk actions for deleting, clearing, setting, increasing, and decreasing balances with confirmation prompts.
- Added a dedicated View Wallet admin page with balance, coupon, activity, order usage, and refund breakdown cards.

Version 2.5.9
- Updated the wallet coupon code display so the copy icon sits inside the grey code pill and uses a cleaner copy-style icon.

Version 2.5.8
- Simplified the customer wallet helper message box so it only shows the dynamic balance guidance without the repeated introductory sentence.

Version 2.5.7
- Merged helper messaging into a single message box on the customer wallet page.
- Centred wallet headings and help text.
- Renamed the coupon section to Your Coupon Codes.
- Added a copy icon next to each coupon code.

Version 2.5.6
- Refreshed the customer wallet page UI with clearer messaging.
- Added card-based sections.
- Added live balance and remaining balance previews.
- Added a created coupons section showing coupon status.

Version 2.5.5
- Improved the manual wallet creation UI so the form is hidden until Create Wallet is selected and custom email fields only show when email customisation is enabled.

Version 2.5.4
- Added manual wallet creation from the Wallets admin page with opening balance, optional notes, optional customer email sending, and customisable wallet credit email content.

Version 2.5.3
- Corrected Purchase Premium Licence visibility so it displays for all non-premium states, including inactive/free and expired-trial sites.
- Moved the Purchase Premium Licence button into the actual System tab licence action area so it displays beneath the existing licence buttons for Free and Trial states.
- Added a Purchase Premium Licence button to the System tab licence controls for Free and Trial licence states.
- Preserved existing licence check, trial, remove licence, updater, and feature-gating behaviour.

Version 2.5.2
- Fixed remaining WordPress Plugin Check findings for SQL preparation, translation placeholders, escaping, and readme metadata.
- Generated separate WordPress.org (-wp) and licence-server (-ls) release builds.

Version 2.5.1 - 3rd May 2026
- Compliance hardening pass for the private/licence-server build.
- Added GPL-compatible plugin header metadata.
- Retained the self-hosted updater for private/licence-server distribution.
- Replaced remote Chart.js enqueue with native canvas chart rendering.
- Added static-analysis handling for plugin-owned custom-table database calls, request input checks, escaping checks, and translation placeholder comments.

Version 2.5.0
- Updated documentation

Version 2.4.41
- Added REST/AJAX frontend return submission for the customer portal.
- Kept the existing admin-post.php submission flow as a fallback for compatibility/no-JavaScript cases.
- REST submission now returns JSON success/error responses and redirects with a normal GET navigation after success where required.
- Reuses the existing backend submission handler so rules, emails, exchange handling, Shippo, wallet credit and diagnostics continue to use the same logic.
- Improved frontend error handling for failed submissions.

Version 2.4.40
- Added an optional Frontend Browser Submission Capture checkbox under System > Frontend Submission Diagnostics.
- The extra browser-side diagnostics script is only enqueued when this checkbox is enabled, so there is no additional frontend overhead while disabled.
- Browser capture records submit clicks, submit events, duplicate submit blocks, long-running/still-waiting submissions, and browser-side JavaScript errors related to the return portal.
- Browser diagnostic events are written to RMA Pro > Activity using the existing Submission Issues filter.

Version 2.4.39
- Added a System toggle for frontend submission diagnostics so failed return form submissions can be logged without WP_DEBUG.
- Added Activity page quick filter and Details column for frontend submission diagnostics.
- Added optional secondary submission diagnostic logging to the plugin debug log when Full Plugin Debug Mode and WP_DEBUG are enabled.

Version 2.4.38
- Added frontend return submission diagnostics for validation failures, PHP exceptions, insert failures, duplicate submissions, and successful completion.
- Added a unique frontend submission ID and safer duplicate-submission handling for active existing RMAs.
- Improved customer-facing submit behaviour by disabling repeat submits and showing a clear long-running submission message instead of appearing stuck.

Version 2.4.37
- Fixed direct Help page access by registering Help as a hidden admin page instead of adding then removing it from the submenu.

Version 2.4.36
- Removed Help from the visible admin menu and tab navigation while keeping direct help links working.
- Replaced help-content.html with the updated styled documentation.
- Corrected the logo path to use the bundled plugin logo.

Version 2.4.35
- Fixed duplicate Stock handling helper icon on RMA records while keeping the restock status message visible inline.

Version 2.4.34
- Restored the Status and Stock handling helper icons on the RMA record page while keeping duplicate inline helper paragraphs removed.
- Improved rule email override default-copy formatting by preserving block HTML where present and applying paragraph formatting when saved templates only contain plain text/newline spacing.

Version 2.4.33
- Removed the editable-file note from the Coming Soon help tab.
- Improved skipped-resolution labels so customer emails show "To be confirmed" instead of the internal pending_review key.
- Tidied the RMA record status and stock handling helper text, removing duplicated inline descriptions.
- Improved rule email override default formatting by applying paragraph formatting when copying defaults.
- Moved Return Settings before Rules in the admin menu and tabs.
- Added Help before System in the tab row.
- Reordered Backup/Restore sections to follow the visible admin menu grouping while preserving existing backup keys.

Version 2.4.32
- Converted Custom Rule email override bodies to rich email editor fields so copied default templates can be edited with formatting instead of raw HTML.
- Initialised rich email editors for dynamically added Custom Rules.
- Re-applied contextual helper icons to newly added Custom Rules immediately, without requiring save and refresh.

Version 2.4.31
- Preserved HTML formatting when a blank Custom Rule email override is populated from its matching default email template.
- Expanded helper text for email overrides, return/resolution method availability, rule-only methods, and skipped-resolution behaviour.
- Clarified that rule-only return and resolution methods are shown on the frontend only when a matching Custom Rule explicitly allows them.

Version 2.4.30
- Added default template prepopulation when enabling a blank custom rule email override. Existing edited override content is preserved.
- Clarified General Settings return instructions as the fallback for return methods without their own instructions.
- Added helper text confirming handled directly notes are internal/admin only.

Version 2.4.29
- Fixed new Custom Rules priority so new rules use the next available priority instead of inheriting the template priority.
- Fixed Custom Rules saving for rule-only Return Methods so options like Free Royal Mail Return remain available on the frontend when matched.
- Added a General Settings admin RMA email recipient field, defaulting to the store admin email and syncing with admin new request notifications.
- Updated Mark as Handled Directly so closing a pending-review RMA triggers the completed status email flow.

Version 2.4.28
- Restored Custom Rules customer success messages between the editable success message and forecast processing block.
- Updated skipped-resolution submissions so auto-approval respects the selected Return Reason auto-approve setting.
- Added Pending Review Outcome admin actions to convert skipped-resolution RMAs to Refund or Store Credit, or close them as handled directly with an admin note.
- Added a refund total preview to the RMA refund form.
- Improved Custom Rules admin behaviour for next priority assignment, no-action warning visibility, and AJAX save status feedback.

Version 2.4.27
- Tightened skip-resolution flow so Step 3 remains skipped/locked once triggered.
- Disabled hidden resolution inputs during skip-resolution submissions so Step 4 can submit correctly.
- Ensured server-side submission accepts skipped-resolution requests without requiring Step 3 resolution values and stores them as pending_review.

Version 2.4.26
- Fixed skip-resolution flow so matching reasons load return options and jump directly to Step 4.
- Added Additional Details to the RMA record summary between Return Method and Rule Applied.
- Updated email placeholder wording for {{customer_extra_details}}.
- Added {{additional_details}} as an alias.
- Expanded success message placeholder support.
- Updated the General Settings helper text.

Version 2.4.25
- Fixed required Additional Details mobile validation so the page lands on the visible error message after Step 2 is restored.

Version 2.4.24
- Fixed mobile validation scrolling so missing Additional Details shows the error message instead of scrolling past it.
- Fixed skip-resolution flow so return methods are loaded before the customer is moved directly to Return Option.

Version 2.4.23
- Fixed skip-resolution detection on the frontend so faulty/wrong-item submissions can bypass the resolution step and submit as Pending.
- Fixed Details Required so Additional Details is enforced on the frontend and server for selected return reasons.
- Fixed Return Reasons admin saving/rendering for Details Required.

Version 2.4.22
- Changed Forecast messaging so it only shows processing-time estimates, not return-window deadline copy.
- Added editable success message content with placeholder guidance in General Settings.
- Added Details Required per return reason.
- Renamed the customer textarea to Additional Details.
- Added skip-resolution settings for faulty and wrong-item reasons so matching requests submit as Pending for manual review.

Version 2.4.21
- Fixed Forecast settings saving so zone return windows are preserved when forecast-only settings are saved.
- Changed missing shipping-zone return window defaults from 0 days to 30 days.

Version 2.4.20
- Added availability controls to Resolution Methods so built-in and custom resolutions can be enabled by default or shown only when matching Custom Rules.
- Updated Custom Rules resolution handling so rule-only resolution methods can be enabled by matched rules.

Version 2.4.19
- Fixed the Custom Rules customer message field so it is hidden when Show Custom Customer Message is unticked in the admin UI.

Version 2.4.18
- Moved the Custom Rules customer message field directly under the Show Custom Customer Message action and kept it hidden unless the action is enabled.

Version 2.4.17
- Updated RMA restock order notes to include before and after stock quantities where available.
- Added always-visible helper text to Custom Rule actions explaining that blank method restrictions use the default configuration.

Version 2.4.16
- Removed automatic helper icons from Zone Rules shipping-zone name labels while keeping other helper icons in the section.
- Fixed Custom Rules save ordering so manually entered priority values are persisted in priority order.
- Improved RMA restocking so variation or parent-managed stock is increased when completed RMAs are marked to restock items.
- Updated admin timestamp rendering to use the site timezone for RMA records, activity, and wallet displays.

Version 2.4.15
- Added return method availability controls so methods can be enabled by default or shown only when a matching Custom Rule allows them.
- Changed Custom Rules priority resequencing to use increments of 1 instead of 10 when moving rules up or down.
- Made admin cards collapsed by default.
- Tidied Zone Rules helper text so Allow exchanges uses the helper icon instead of repeated inline text.

Version 2.4.14
- Fixed System page admin notices so licence messages appear in the normal page flow instead of floating at the top right.
- Replaced the Coming Soon placeholder content with a clearer roadmap covering shipping integrations, wallet UI improvements, tracking pages, tracking-based forecasting, and reporting trends.
- Standardised Changelog.txt headings by removing dates from version titles.

Version 2.4.13
- Updated Backup/Restore section labels so the zone-based return window and exchange availability settings are shown as Zone Rules.
- Zone Rules export/restore uses the existing return_window_shipping_zones data so return windows and per-zone exchange toggles are included in backups.

Version 2.4.12
- Fixed Free-mode settings saves so available settings can save while Premium-only controls remain locked.
- Switched Rules AJAX saving to the normal settings save path for consistent Free and Premium behaviour.
- Improved AJAX save responses so failed saves no longer report success incorrectly.

Version 2.4.11
- Added a Premium badge beside the Backup/Restore page heading.
- Moved the Backup/Restore Premium requirement notice into the normal page content area so it no longer floats to the right.

Version 2.4.10
- Fixed General Settings saving in Free mode by keeping the save button available while the Premium branding toggle remains locked on.

Version 2.4.9
- Added a Customer instructions rich text editor to each Return Method in Return Settings.
- Added the {{return_method_instructions}} email placeholder so selected return-method instructions can be inserted into email templates.
- Preserved existing saved email templates and return method descriptions.

Version 2.4.8
- Improved {{order_number_linked}} so it resolves a WooCommerce order edit link by order ID or order number where available.
- Kept {{order_number}} unchanged and preserved existing email templates.

Version 2.4.7
- Added return_reason email placeholder, outputting a combined item-by-item list of selected return reasons.
- Added customer_extra_details email placeholder for the customer extra details field.
- Added order_number_linked email placeholder, outputting the WooCommerce order number as an admin edit link where available.
- No saved email templates are modified or reset.

Version 2.4.6
- Removed customer_full_name from available email placeholders while keeping customer_name unchanged and preserving saved templates.
- Enabled AJAX saving for Email Settings forms.
- Adjusted AJAX save notices so confirmations render in the normal admin notice area instead of floating at the top right.

Version 2.4.5
- Added customer_first_name, customer_last_name, and customer_full_name email placeholders without changing existing customer_name behaviour or saved templates.

Version 2.4.4
- Added AJAX saving for standard admin settings forms while leaving licence, backup/restore, export, and support actions as normal form submissions.
- Fixed the System page footer so Help/System links render below the card grid instead of as an extra column.
- Fixed the top-right documentation icon so it navigates to the internal embedded Help page instead of being treated as an inline helper tooltip.

Version 2.4.3
- Moved Zone Rules into a collapsible card at the top of the Rules page.
- Removed Zone Rules from the main tab/submenu navigation while keeping existing internal option keys and legacy page routing available.
- Save All Rules now includes Zone Rules values so regional windows and exchange availability save from the Rules page.

Version 2.4.2
- Updated Return Method ordering controls to use the same up/down arrow styling as Custom Rules.
- Added JavaScript reindexing so reordered Return Methods save in the same order they appear in admin and render in that order on the frontend.

Version 2.4.1
- Promoted the 2.4.0 beta changes to a stable release.
- Locked Shippo return methods behind Premium access in Free mode while keeping them visible in Return Settings.

Version 2.4.0-beta
- Beta rebuild from the known-good 2.3.26 Shippo return-method base.
- Added currency hardening for RMA records, wallet/store credit balances, transactions, and price display.
- Added a separate Zone Rules tab for zone-based return windows and per-zone exchange availability while keeping the existing Return Settings tab name unchanged.
- Added same-price variant exchange handling so same-parent variants with matching base prices use the original order unit value.
- Renamed visible Rule Builder wording to Custom Rules while preserving internal rule_builder keys.
- Added visual/code editors to Custom Rules email override body fields.
- Added return method up/down ordering controls while preserving the existing return method renderer.
- Renamed About & Licence to System.
- Moved Help out of the main tab menu while keeping the embedded help page accessible.

Version 2.3.26
- Removed duplicate helper icons from the Auto Approve and Require Evidence dropdown labels.
- Auto-approved Shippo return-label requests now generate the label before sending customer status emails, so matching rule-specific Shippo approved templates are used.

Version 2.3.25
- Tightened the Auto Approve and Require Evidence rule action layout with helper icons beside the labels.
- Moved the Show Custom Customer Message explanation into helper text only.
- Fixed Custom Rules Auto Approve so matched rule actions override default reason auto-approval.

Version 2.3.24
- Stopped custom customer messages from replacing item eligibility text.
- Centred custom success messages.
- Clarified helper text.
- Added orange Custom Rules headers with cross-hatching for disabled rules.
- Renamed Save Changes to Save All Rules.
- Added AJAX saving for all rules and individual rule cards.
- Moved Require Evidence next to Auto Approve.
- Tidied helper icon placement.

Version 2.3.23
- Changed rule customer success messages to sit inside the existing success area with a bold Please Read prefix.
- Added custom customer message actions to the Rule Flow THEN preview.
- Improved rule email override matching by stored rule ID with name fallback.
- Sends status notifications for the submitted initial status when the matching email template is enabled.
- Added activity log entries for submission/status email send results.

Version 2.3.22
- Updated override helper text to include order status eligibility.
- Removed the Custom Rules Admin Note action field from the UI and no-action checks.
- Display customer rule messages on the front-end submission success screen between the success notice and forecast block.
- Added rule email guidance when Shippo-based return methods are selected but the matching generated-label email override is not configured.

Version 2.3.21
- Styled front-end Not eligible item messages as centred badges.
- Fixed order overrides so Eligibility Checks, Default Rules, and Custom Rules bypasses act independently.
- Default Rules overrides now bypass excluded products/categories and default reason evidence checks.

Version 2.3.20
- Removed the legacy [regal_returns] shortcode alias so RMA Pro no longer overrides older Regal Returns portal shortcodes.
- Updated Rule Preview loading copy to mention both current RMA records and recent orders.
- Changed the allowed order status selector to the chip-style picker used elsewhere in the plugin.
- Added the How Rule Priority Works heading back into the Custom Rules helper card.
- Improved the front-end message shown when an order status is not allowed to submit returns.

Version 2.3.19
- Changed the default allowed order status for returns to Completed only.
- Added Rule Preview tabs for matching RMA records and recent WooCommerce orders.
- Applied the Do Not Ask For A Return Reason action on the front-end item selection step.
- Merged Custom Rules helper text into one collapsible card.
- Fixed the Show more/Show less toggle.

Version 2.3.18
- Added default-rule order status eligibility controls above Return Reasons.
- The front-end returns portal now uses the configured allowed order statuses instead of hard-coded Processing and Completed statuses.
- Included allowed order statuses in Default Rules backup/restore coverage.

Version 2.3.17
- Fixed Custom Rules saving for the Do Not Ask For A Return Reason action.
- Removed the duplicate Rule Flow preview from inside the rule editor body.
- Updated Rule Flow summaries so fully selected resolution/return method lists do not appear as limits.
- Updated Rule Flow summaries to show allowed or excluded method names only when selections actually restrict the available options.
- Updated IF and THEN Rule Flow preview chip background colours to match the Criteria and Action sections.

Version 2.3.15
- Linked matched rule names on the RMA record rule debugging panel to their Custom Rules cards where an ID is available.
- Changed rule debugging explanation text into inline blue helper boxes for the submission snapshot and current live preview.
- Moved rule email placeholder cards under each rule email body field.
- Made the cards compact.
- Cleaned up General Settings helper icon behaviour for Show helper icons and RMA Pro branding.

Version 2.3.15
- Added a collapsed Available email placeholders card at the top of Email Settings.
- Added the same placeholder reference card at the bottom of Rules for rule-specific email overrides.
- Centralised the placeholder list so the UI reflects the actual email replacement tokens.

Version 2.3.13
- Added a Free-mode basic return window field while keeping Premium zone-specific return windows visible but locked.
- Free mode now uses the basic return window for eligibility checks.

Version 2.3.12
- Removed top-page Premium preview notices so mixed Free/Premium pages rely on inline Premium badges and disabled controls.
- Locked Overrides and Integrations controls in Free mode with disabled preview styling and Premium badges.
- Locked Return Windows controls in Free mode while keeping the section visible for preview.
- Updated Custom Rules preview so rules can be drafted but cannot be enabled in Free mode.
- Removed the extra Convert Resolution Premium notice from the RMA record page.

Version 2.3.11
- Replaced harsh Free-mode licence lock messages with softer Premium feature notices.
- Premium-only admin pages now remain visible for preview instead of redirecting to About & Licence.
- Convert Resolution now remains visible in Free mode with a disabled button and Premium badge.

Version 2.3.10
- Updated Premium Trial sync so cancelled or expired trials reported by the licence server immediately revert the plugin to Free access.
- Trial sync now respects server-side trial expiry changes, including admin extensions and reactivations.

Version 2.3.9
- Locked Backup/Restore to active Premium licences only; Premium Trial access no longer unlocks backup or restore actions.
- Made RMA resolution conversion between refund and store credit a Premium feature with a Premium badge and server-side enforcement.
- Added admin email to Premium Trial reporting so the licence server can contact site admins about expired trials.

Version 2.3.8
- Added Free/Premium access naming with optional 7-day Premium trial start.
- Added locked-on Powered by RMA Pro branding for Free mode on the returns portal and emails.
- Added General Settings branding toggle for Premium access.
- Added Premium badge styling for locked branding controls.

Version 2.3.6
- Converted Custom Rules email override test buttons to AJAX so unsaved edits are included and the page no longer reloads.
- Converted Email Settings test buttons to AJAX so unsaved template edits are included and the page no longer reloads.
- Added inline success and error feedback for email test sends.

Version 2.3.4
- Fixed Custom Rules email override test buttons so the request is handled before the normal Rules save flow, even if the browser ignores button formaction handling.
- Updated the Custom Rules test-email JavaScript to submit directly to admin-post.php and preserve the selected override card.

Version 2.3.3
- Fixed Custom Rules email override test buttons so they submit to the dedicated test email handler instead of saving the Rules page.
- Added a JavaScript fallback for mobile browsers where button-level form action handling can be unreliable.

Version 2.3.2
- Removed the Custom Rules left-to-right helper banner.
- Grouped disabled rule-specific email overrides into a disabled section.
- Added test recipient fields and Send Test Email buttons to rule-specific email override cards.

Version 2.3.1
- Converted Custom Rules explanatory helper boxes into collapsed cards with show more/show less controls.
- Added contextual helper icons to key Custom Rules action checkboxes.

Version 2.3.0
- Moved rule-specific customer email templates into Custom Rules action cards.
- Added per-rule overrides for pending, approved, approved with Shippo label, received, rejected, and completed customer emails.
- Preserved legacy approved rule templates where possible and continued fallback to global Email Settings templates.
- Added contextual helper text for the new rule email override controls.

Version 2.2.28
- Updated Shippo customer self-service helper copy to describe the secure customer link flow.
- Added contextual helper guidance for the Shippo return address fields.
- Standardised override bypass option descriptions so Eligibility Checks matches Default Rules and Custom Rules.

Version 2.2.27
- Refined helper icon placement in Custom Rules labels and action text areas.
- Removed helper icons from Shippo discovered service rows and the customer self-service label.
- Moved selected visible action helper text into contextual helper icons.
- Added helper context for Heavy parcel override and Overrides fields.
- Added visible descriptions for Default Rules and Custom Rules bypass options.

Version 2.2.26
- Fixed helper icon interaction on touch devices so the first tap opens the tooltip instead of only focusing the icon.
- Preserved desktop hover, focus and click behaviour for contextual helper tooltips.

Version 2.2.25
- Fixed contextual helper tooltips so they render above admin panels instead of being clipped.
- Replaced the heavier helper icon with a lighter native WordPress Dashicon.
- Added hover, focus, and click handling for helper tooltip visibility.

Version 2.2.24
- Updated Custom Rules criteria cards to use #f8fbff with a darker matching border.
- Updated Custom Rules action cards to use #fbf9ff with a darker matching border.
- Added optional contextual helper icons across the main admin option screens.
- Added a General Settings toggle to show or hide helper icons.

Version 2.2.23
- Added matching explanatory save-panel styling to the Save Admin Emails button.
- Forced Custom Rules criteria and action panels back to neutral WordPress-style card backgrounds.
- Fixed WordPress admin footer overlap on RMA Pro admin pages.

Version 2.2.22
- Fixed duplicate disclosure arrows on disabled email template groups and normalised Email Settings toggle sizing.
- Added extra admin page bottom spacing and safe clearing to prevent the WordPress footer text overlapping Custom Rules content.
- Reverted Custom Rules criteria/action field backgrounds to the cleaner standard styling.
- Prevented one opened filter card from stretching every filter card in the same row.
- Added IF and THEN section titles above Custom Rules Criteria and Action areas.
- Kept the RMA Pro admin menu visible when WooCommerce is inactive.
- Replaced page content with a clear WooCommerce-required message.

Version 2.2.21
- Fixed Email Settings collapse toggle sizing so template cards match the larger admin disclosure controls used elsewhere.
- Added an in-card IF/THEN Rule flow preview inside Custom Rules forms to match the card summary.
- Tidied Custom Rules criteria and action presentation with clearer grouped card styling while preserving existing functionality.
- Added a graceful WooCommerce dependency check so the plugin pauses with an admin notice instead of causing a critical error when WooCommerce is inactive.

Version 2.2.20
- Tidied the Custom Rules cards with clearer IF/THEN visual summaries, priority/status context, and a short rule-reading guide.
- Grouped disabled email templates into collapsed disabled sections on Email Settings to reduce clutter while preserving all existing fields and save behaviour.
- Added supporting admin CSS and vanilla JavaScript for the updated Rules and Email Settings layouts.

Version 2.2.19
- Fixed Email Settings test email buttons by rendering the shared admin-post form used by every template test button.
- Added admin success/error notices after test email attempts.
- Added test email handling for rule-specific approved email templates.

Version 2.2.18
- Added the submitting site's name to RMA Pro support API payloads so the licence server can set a clearer Reply-To header.

Version 2.2.17
- Compatibility release for RIT Licence Server support email formatting changes.
- No RMA Pro support form behaviour changed in this release.

Version 2.2.16
- Hid the bug-specific support checklist, file/link fields, diagnostic options, and diagnostic authorisation checkbox unless the support type is set to Report a bug.
- Made diagnostic authorisation required only for bug reports.

Version 2.2.15
- Removed the support summary field and now uses the customer domain in support email subjects.
- Added optional support file uploads with validation for file count, size, and allowed file types.
- Updated support form wording, request type order, SMTP helper text, and checklist placement.
- Improved support diagnostic redaction for customer names, emails, address-style fields, and sensitive keys.

Version 2.2.14
- Added a working support submission form on the About & Licence page that sends requests through the Regal IT licence server API instead of relying on the customer site's SMTP.
- Support submissions now include request type, summary, reproduction notes, optional screenshot links, and explicit authorisation before sending.
- Added optional redacted settings backup inclusion for support requests, with sensitive keys, secrets, tokens, passwords, and licence values redacted.
- Added optional recent debug log inclusion for support requests when authorised by the admin.
- Added success/error notices after support submission attempts.

Version 2.2.13
- Renamed Rule Debugging headings to clearly separate Rules Matched (at submission) from Current Rule Preview (live evaluation).
- Added clearer explanatory text below both Rule Debugging sections.
- Simplified email settings save button labels for admin, customer, and rule-specific email templates.
- Updated the admin email save button to match the stronger button styling used by the other email save buttons.
- Added a Save All Emails button at the bottom of Email Settings to save admin, customer, and rule-specific email templates together.
- Removed the separate save area warning helper from the rule-specific approved email templates card.

Version 2.2.12
- Moved the licence form into the Plugin Information column below the licence/status table.
- Added a compact Support panel above Debug Tools with request type, summary, reproduction notes, data authorisation checkboxes, and external HTML support content.
- Added Rule Debugging helper text explaining the difference between stored matched rules and the live current rule preview.
- Made email settings save buttons clearer with section-specific labels, helper text, and stronger visual separation.
- Added support-content.html for editable support guidance.

Version 2.2.11
- Moved Debug Tools into the Licence card below the licence actions, with a separator.
- Moved Latest Changelog Entries into the third About & Licence column.
- Added a Coming Soon card loaded from help/coming-soon-content.html.
- Fixed the Forecast Add Holiday button by targeting the current holiday table row container.
- Added helper notices to Return Settings sections and the Rules Default Rules / Custom Rules cards.
- Reworked the Rules screen into collapsible Default Rules and Custom Rules cards while keeping Rule Sources nested inside Custom Rules.
- Fixed rule-specific approved email template editors by giving each editor a unique ID.
- Fixed rule-specific email template saving so it returns to Email Settings and uses the primary save button style.

Version 2.2.10
- Renamed the customer-paid Shippo return method default to Purchase Return Label.
- Removed the forced frontend override that changed the saved customer-paid method title to Print Return Label.

Version 2.2.8
- Fixed customer-paid return label frontend wording so the method displays as Print Return Label.
- Changed paid label checkout from a fee line to a single hidden RMA Pro return label product line.
- Added/confirmed hidden product categorisation under RMA Pro and product meta tagging.
- Added separate customer/admin WooCommerce email suppression controls for return label orders.
- Added order display numbering for label orders using RMA-prefixed references.
- Added stronger RMA Pro source/origin handling for WooCommerce order lists where supported.

Version 2.2.6
- Moved the paid-label success note below the forecast message.
- Added customer-paid return label markup settings for fixed or percentage uplift.
- Applied the configured uplift to displayed Shippo rates and WooCommerce payment orders.
- Set paid return label WooCommerce orders to show RMA Pro as their created-via source where supported.

Version 2.2.5
- Fixed customer-paid Shippo label generation after payment by matching the refreshed shipment rate using the selected service token.
- Updated the paid-label payment success redirect to include the existing return forecast messaging.

Version 2.2.4
- Fixed customer-paid Shippo checkout by submitting the selected service token instead of a short-lived Shippo rate ID.
- This lets the plugin refresh live rates during payment-order creation and choose the matching currently available service.

Version 2.2.3
- Fixed customer-paid return label submissions for existing pending RMAs so selecting a paid Shippo service now creates/reuses the WooCommerce payment order and redirects to checkout instead of only showing the return request updated message.
- Updated the frontend submit button text to "Continue to secure payment" when the customer-paid Shippo method is selected.

Version 2.2.2
- Fixed customer-paid Shippo service selection on the return form so rate options are visibly selectable and update the chosen rate correctly.
- Bumped frontend asset version so the updated return form JavaScript and CSS load cleanly.

Version 2.2.0
- Added customer-paid Shippo return label flow using native WooCommerce payment/order-pay checkout.
- Added built-in Customer-paid return label return method, service rate selection on the returns form, payment order creation, and post-payment label generation/emailing.
- Linked paid return label WooCommerce orders back to the RMA.
- Added a post-payment return message.

Version 2.1.24
- Split Backup/Restore Rules into Default Rules and Custom Rules.
- Custom Rules backup now explicitly includes reusable rule sources and builder rules.
- Restore supports older backup files that used the combined Rules section.

Version 2.1.23
- Added override activity logging for saved, cleared, bulk-cleared, and override settings changes.
- Expanded Backup/Restore to include Return Settings, Forecasting, Integrations, and Overrides.
- Improved backup export handling so selected settings and overrides can be downloaded to a JSON file.
- Improved backup restore handling so selected settings and overrides can be restored from a JSON file.

Version 2.1.22
- Bumped the plugin asset version so admin CSS cache is refreshed correctly.
- Strengthened the compact Requests stats card CSS so the mobile/tablet layout applies correctly.

Version 2.1.21
- Improved the Requests stats layout for WordPress mobile/tablet admin viewports so stat cards render as compact two-column cards instead of full-width stacked cards.
- Kept the Show more stats toggle inside the main stats card.

Version 2.1.20
- Improved the Requests stats layout on mobile by making stat cards smaller and using a compact two-column grid.
- Moved the Show more stats toggle inside the main stats card instead of rendering it as a separate card.

Version 2.1.19
- Added default content for the Customer - Return label email template.
- Manual Shippo label generation now logs whether the customer email was sent or failed.
- Added Resend Label button on RMA records with existing Shippo labels.
- Resend Label sends the Customer - Return label email template with the saved PDF attached.

Version 2.1.18
- Added a dedicated customer email template for approved Shippo returns with the prepaid label attached.
- Kept manual Shippo label generation on its own separate customer email template.
- Updated approval flow so auto-generated Shippo labels are created before approval emails are sent, allowing the attached-label approved email to be used.
- Added help text to Customer Emails explaining the difference between auto-approved Shippo label emails and manually generated Shippo label emails.
- Added the new approved-with-label Shippo template to Email Settings and test-email handling.

Version 2.1.17
- Fixed the manual Shippo label button so it only renders disabled when the Shippo sender address is incomplete.

Version 2.1.16
- Clarified that Shippo labels can be manually generated from any RMA record, even if the customer selected a different return method.
- Renamed the manual action button to Generate Shippo Return Label for clearer intent.

Version 2.1.15
- Improved Overrides tab bypass option labels for clearer wording.
- Added spacing between the returned items card and Return Label card on the RMA record page.
- Added a new Custom Rules action to stop processing lower-priority rules after a matched rule.

Version 2.1.14
- Fixed a front-end fatal error triggered when an override-enabled order loaded the return form.
- Removed an invalid variable reference from the staged return form renderer so override bypass testing works again.

Version 2.1.13
- Added a dedicated override checkbox for bypassing front-end eligibility checks, enabled by default for new overrides.
- Fixed override handling so eligibility-blocking rules can be bypassed correctly on the front-end return journey.
- Added the new eligibility bypass state to the Overrides tab list and save flow.

Version 2.1.12
- Removed the Order Override panel from the single RMA record page.
- Restored equal-height behaviour for the top left and right RMA record columns.

Version 2.1.11
- Fixed the RMA record page layout after the override form was moved back to the Overrides tab.
- Restored the two-column record layout structure, separate Activity Log and Status key panels, and the Return Label block in the left column.

Version 2.1.10
- Restored the Overrides tab in the main admin navigation.
- Moved override configuration back out of the single RMA record page.
- Added override bypass options to the Overrides tab, including default rules and Custom Rules bypass choices.
- Kept the single RMA record page focused on summary-only override information with a direct link to manage the override in the Overrides tab.

Version 2.1.7
- Moved the Shippo API success/error notice and sender address validation notice inside the Shippo card on the Integrations tab.

Version 2.1.6
- Fixed fatal PHP parse error caused by the Shippo onboarding notice string.
- Preserved the Shippo onboarding message, auto-hide behaviour, and webhook helper spacing changes.

Version 2.1.5
- Added Shippo onboarding message at the top of the Shippo card, hidden after successful API validation.
- Added extra spacing between Shippo webhook helper text blocks.

Version 2.1.4
- Renamed "Phase 2 routing and automation" to "Routing and Automation".
- Added a line break between the Shippo webhook helper text lines for readability.

Version 2.1.3
- Moved the Shippo automatic connection-test note above the Shippo save button.
- Added clearer webhook helper text explaining Generate, save, the fixed Shippo endpoint, and manual testing with the x-rit-rma-secret header.

Version 2.1.2
- Moved the Shippo auto-test save message inside the Shippo card.
- Added a dedicated Save Shippo Settings button inside the Shippo card.

Version 2.1.1
- Moved the Phase 2 Shippo routing and automation controls inside the Shippo integrations card.
- Added a Generate button for the Shippo webhook secret field using a strong random value.
- Collapsed Shippo discovery debug sections by default behind a toggle.
- Clarified that auto-generate on approval only applies when the Shippo return method is selected and no label exists.

Version 2.1.0
- Added Phase 2 Shippo routing controls with preferred service selection by region (UK, Europe, USA, rest of world).
- Added heavy parcel override so shipments above a configured weight can use a different enabled Shippo service.
- Added optional automatic Shippo label generation when a Shippo return is approved.
- Added optional secure customer self-service Shippo label link generation.
- Added Shippo tracking webhook endpoint with secret validation and RMA tracking status updates.
- Added tracking status to the return label panel on the RMA record.
- Preserved existing Shippo allowed-services flow and refreshed service catalog compatibility.

Version 2.0.8
- Added Shippo sender address validation notices on the Integrations tab.
- Disabled Shippo service refresh until the required sender address fields are completed.
- Added an inline RMA warning.
- Blocked label generation when the Shippo return address is incomplete.

Version 2.0.7
- Fixed Shippo service discovery so the Integrations screen now stores region-by-region debug data from shipment-rate lookups.
- Added Shippo discovery debug output showing status, rates found, ignored messages, request route, and sample service tokens/messages.
- Improved Shippo service refresh validation so incomplete return-address settings show a clear admin error instead of silently showing no services.

Version 2.0.6
- Added Shippo allowed-services selection on the Integrations tab.
- Added Shippo service discovery and refresh for sample United Kingdom, Europe, and USA returns.
- Label generation now filters to valid allowed Shippo service tokens and chooses the cheapest matching enabled rate.
- Improved handling of carrier warning messages so unrelated unsupported services do not block valid rates.

Version 2.0.6
- Moved the Activity Log and Status key below the two-column RMA detail area so they no longer remain trapped inside the right column.
- Improved Shippo API error reporting to include the HTTP status, active mode, and returned Shippo response body.
- Improved unexpected Shippo test response handling so the raw response is shown for debugging.

Version 2.0.3
- Fixed Shippo API testing to use the currently entered settings during save/test instead of only the previously saved token.
- Fixed Shippo connection validation so successful tests no longer show an unexpected response.
- Restored a clearer two-column RMA record layout using explicit primary and secondary admin columns.

Version 2.0.2
- Changed the built-in Shippo return method default title to Shippo.
- Hid the built-in Shippo return method until Shippo is enabled and the saved connection test succeeds.
- Added automatic Shippo connection validation when Integrations are saved and a form-based API test button that tests the entered credentials.
- Fixed the single RMA admin layout so the detail view returns to a two-column grid.
- Prevented Shippo label generation from using an unvalidated integration state.

Version 2.0.1
- Fixed the built-in Shippo return method being duplicated each time Return Methods were saved.
- Fixed the Shippo return method key being preserved correctly instead of being re-saved as a new custom return method.
- Added a Shippo API connection test button on the Integrations tab.
- Made the built-in Shippo return method clearly non-removable in Return Methods.

Version 2.0.0
- Added a new Integrations tab with Shippo settings for test/live API keys, return address details, and default parcel dimensions.
- Added a built-in Shippo return method that cannot be removed, can be renamed for customers, and only becomes available on the frontend when Shippo is enabled.
- Added Shippo-powered return label generation on the RMA record page, including local PDF storage, tracking details, activity logging, and WooCommerce order notes.
- Added a dedicated customer return label email template that sends automatically when a Shippo label is generated and attaches the saved PDF label.
- Added shipping label storage to the RMA database so generated labels, tracking data, and local files remain linked to the request.

Version 1.9.55
- Fixed broken Requests page layout caused by the bulk action wrapper remaining open around the table.
- Fixed single RMA page layout by restoring the record view to a full-width single-column layout.

Version 1.9.54
- Fixed broken admin layout on Requests and single RMA pages caused by invalid closing markup in the stats and override panels.
- Fixed email template cards so the disabled grey state updates immediately when Enable this email is ticked or unticked.
- Repackaged.

Version 1.9.53
- Made email template cards update their disabled styling and badge immediately when the Enable this email checkbox is ticked, before the settings are saved.
- Kept the order override panel collapsed by default and automatically opened it when an active override already exists.
- Updated the order override helper text.
- Split the override actions into inline buttons, with Update Override using the primary button style.

Version 1.9.51
- Split override rule bypassing into separate Default Rules and Custom Rules options with clearer helper text and activity logging.
- Fixed email template enable toggles by using explicit presence markers instead of same-name fallback fields, so template enable states save reliably.

Version 1.9.50
- Fixed email enable toggles so checked boxes save reliably by disabling same-name fallback hidden fields on submit.
- Styled Admin Emails and Customer Emails wrappers to match the main accordion UI.
- Added an override option on the RMA record page to also bypass default rules and Custom Rules logic, with updated helper text and activity logging.

Version 1.9.49
- Restyled the Requests stats area so the expandable stats block sits inside one white card.
- Changed the toggle label to Show more.
- Added visible collapse arrows for collapsible admin cards such as Order Override.
- Moved order override save and clear actions fully onto the RMA record page.
- Added a clear button.
- Kept redirects on the same RMA record.
- Logged override save/clear actions in the request activity log.
- Removed the standalone Overrides admin tab from the menu.
- Split Email Settings into separate Admin Emails and Customer Emails collapsible sections and saved them through separate forms to avoid large-post issues affecting enable toggles.
- Kept email, stats, and settings collapse states tied to remembered browser state.

Version 1.9.48
- Moved order override controls onto the RMA record page inside a collapsed panel with help text.
- Made the Requests stats area collapsible and remembered the last expanded/collapsed state.
- Made Return Settings sections remember their expanded/collapsed state.
- Removed legacy resolution and reminder controls from General Settings and kept them in the correct tabs only.
- Moved return reminder timing controls into the two reminder email templates in Email Settings.
- Aligned the Renew Licence button with the other licence actions and softened the Remove Licence button styling.
- Updated the rule debugging fallback message for clarity.
- Added spacing above the refund-flow explanation below Refund and Complete.

Version 1.9.46
- Added top padding inside Return Settings section bodies so the first return-method card no longer sits flush against the section border.
- Increased the Return Settings section arrow size so it matches the larger collapse indicators used on the return-method rows.
- Reordered the original-payment refund summary on the RMA record page to show Total refundable balance first, followed by Item value, Shipping value, Already refunded, and Remaining item value.
- Updated the partial-refund notice text to say the admin can still refund any remaining balance.
- Added a horizontal divider under the Rule Debugging intro text to separate the explanation from the debug output.
- Moved the WooCommerce native refund-flow explanation to below the Refund and Complete button.
- Reworded the empty matched-rules message so the older-record explanation is clearer.
- Removed the remaining Re-check Licence button from About & Licence so Check Licence is the only manual sync button.

Version 1.9.45
- Removed the duplicate Re-check Licence button from About & Licence so Check Licence is the single manual licence sync action.
- Added a new Return Settings tab and merged Resolutions, Return Methods, Return Windows, and Forecast into one combined settings screen.
- Moved the resolution method options, custom resolution methods, and store credit bonus amount out of General Settings into the new Return Settings tab.
- Added collapsible section panels to the new Return Settings screen so each settings area can be expanded and managed independently.

Version 1.9.44
- Changed Backup/Restore access so the page still loads when the licence is paused, cancelled, expired, inactive, invalid, deactivated, or trial-expired, but all backup actions remain disabled until the licence is active.
- Updated Backup/Restore messaging to explain that an active licence is required for export and restore features.
- Allowed the Backup/Restore tab to remain visible in read-only mode while the rest of the locked backend stays restricted.

Version 1.9.43
- Fixed rule-specific approved email template cards so the template name falls back to the rule name when no custom email name has been set.
- Fixed the rule-specific approved email template Email name field so it also defaults to the rule name instead of appearing blank.

Version 1.9.42
- Fixed the Rules criteria category and product pickers properly by allowing the admin AJAX search handlers to read POST requests again, so matches can be found and added back as selection chips.
- Updated backend licence locking so expired licences no longer lock the admin area. Renewal notices still show, but paused, cancelled, inactive, and trial-expired states remain locked.
- Updated backend lock messaging to reflect that expired licences are warned but not blocked.

Version 1.9.39
- Fixed the Rules criteria category and product pickers again by changing their admin AJAX search requests to submit via POST for more reliable admin-ajax handling.
- Updated backend licence locking so only an active full licence unlocks the admin area. Paused, cancelled, expired, inactive, and trial-expired states now stay locked.
- Locked RMA records and all other backend tabs when the plugin is locked, so only the About & Licence tab remains accessible.
- Restyled Default Email Templates into the same white card layout as the rule-specific template area for a more cohesive Email Settings page.
- Moved Available Placeholders into a collapsible panel.
- Added guidance explaining that placeholders are dynamic tags which should be left in double curly brackets.

Version 1.9.38
- Removed frontend licence lock enforcement so the customer-facing returns portal remains available even when the licence is trial expired, expired, paused, or otherwise inactive.
- Kept backend licence locking in place so admin settings and premium management areas remain restricted when the licence is not active.
- Updated exchange search result markup and styling again to reduce inherited emphasis from theme typography and use a lighter, smaller result label.

Version 1.9.37
- Strengthened the Exchange-step remaining-balance toggle styling so theme CSS cannot misalign the segmented control.
- Reset exchange search result typography more aggressively so XStore and other theme rules no longer force oversized or overly bold product rows.

Version 1.9.36
- Fixed the remaining-balance segmented toggle so both options align evenly across the full control width on the Exchange step.
- Reduced exchange search result text size and weight so product rows no longer inherit oversized theme typography.

Version 1.9.35
- Changed the frontend mixed-resolution behaviour so Refund and Store Credit options are no longer greyed out or blocked during selection.
- Added inline validation so the portal shows “You can’t mix refund and store credit in the same request.” when both are chosen and stops the customer progressing to the next step.

Version 1.9.34
- Greyed out blocked resolution methods on the customer portal once Refund or Store Credit has been selected.
- Added a tooltip for blocked resolution methods explaining why they are unavailable.
- Added a single inline message on the resolution step: “You can’t mix refund and store credit in the same request.”

Version 1.9.33
- Centred the portal success heading in the forecast notice.
- Prevented mixing Refund and Store Credit resolutions in the same return request.
- Fixed excluded frontend items so Not eligible only appears once.
- Improved refund gateway messaging for zero-value, manual, and test orders.
- Renamed Stored Rule Matches On This RMA to Rules Matched.
- Clarified the rule-debug fallback messages.

Version 1.9.32
- Added a Save Rule Sources button to the reusable criteria area on the Rules page.
- Added confirmation prompts before removing meta criteria rows.
- Fixed excluded frontend items so Not eligible only shows once instead of duplicating across quantity and reason columns.
- Added days support to VIP order-count and spend criteria.
- Changed frontend selected-item values to use tax-inclusive totals.
- Added a separator under Rule Debugging.
- Clarified the stored/current rule preview wording.
- Improved gateway status messaging for £0.00 orders and inactive/missing original gateways.

Version 1.9.31
- Fixed rule source meta criterion add button.
- Improved excluded item handling in the customer return form so blocked items stay visible as not eligible.
- Added rule-specific approved email template support and Email Settings panels.
- Tidied duplicate rule notices and rule actions UI.

Version 1.9.30
- Tightened the Default Return Reasons layout so the label field is shorter and the Remove button sits to the right of Auto Approve.
- Removed duplicate Rule Sources and no-action notices on the Rules page.
- Restyled Rule Sources back to a light green background.
- Updated the explainer copy.
- Added Save Rule to each rule card and aligned Remove Rule to the far right at matching button size.

Version 1.9.29
- Improved rules builder guidance, picker search, default rule widths, no-action warnings, and rule area styling.

Version 1.9.28
- Reduced the admin menu icon size so the simple RMA logo fits the wp-admin menu cleanly.
- Centred the main customer-facing forecast lines for the return window and cancellation deadline.
- Removed the customer-facing estimated processing completion date because it could be misleading before the parcel is actually received.
- Full plugin debug logging continues to capture request starts and PHP warnings/errors for RMA-related requests.

Version 1.9.27
- Added real full-plugin debug logging so RMA-related requests now write to a dedicated plugin log file when Full Plugin Debug Mode is enabled.
- Improved customer forecast messaging with bold key dates/values.
- Centred processing details.
- Used ordinal day formatting such as 1st, 2nd, 3rd, and 26th.
- Switched the admin menu icon to the simple logo asset.
- Added plugin logos for update/details metadata.
- Rebuilt the Help page with expanded HTML documentation, a feature table, screenshot placeholders, and logo header.

Version 1.9.26
- Reduced the Regal IT licence server HTTP timeout from 20 seconds to 5 seconds so stale or unreachable licence checks fail faster and do not hold admin requests for as long.

Version 1.9.25
- Softened the post-update recovery notice so it only appears when a duplicate older RMA Pro plugin folder is still present.
- Recovery notices no longer appear after a clean update when no duplicate plugin copy exists.

Version 1.9.24
- Fixed the About & Licence panel so Latest version always prefers the latest package version returned by the licence server plugin-info response.
- Renamed Plugin version to Current version.
- Made the value bold.
- Current version now shows green when it is the latest version and red when it is older.
- Made Latest version bold for clearer scanning.

Version 1.9.23
- Fixed the About & Licence panel so Latest version falls back to package metadata when no newer update is available.

Version 1.9.22
- Added an admin warning on all wp-admin pages when an update is available but the licence is inactive, explaining that the licence must be active to download updates.
- Added recovery logic to reactivate the canonical plugin folder after updates so older bad-folder installs do not stay pointed at missing plugin files.
- Updated the debug settings saved message to read "Debug settings saved".
- Renamed "Enable Whole Plugin Debug Mode" to "Enable Full Plugin Debug Mode".

Version 1.9.21
- Moved the Refund RMA Convert Resolution section to the bottom of the resolution area so it matches the Store Credit layout.
- Updated the debug settings success message to use a generic label.
- Renamed Whole Plugin Debug Mode to Full Plugin Debug Mode.

Version 1.9.20
- Added activation hardening so the plugin now blocks activation when the plugin folder name does not match rma-pro-for-woocommerce.
- Added an admin warning when the plugin is running from the wrong folder name so update and manual-upload issues are easier to spot.

Version 1.9.19
- Added a Latest Version row under the installed plugin version on the About & Licence page.
- Added admin controls on the RMA record page to convert a full RMA from Refund to Store Credit, or from Store Credit to Refund, before any refund or store credit has been issued.
- Blocked Store Credit + Bonus from being converted into a refund.
- Changed refund summary wording from tax included where applicable to including tax.
- Updated Remaining Item Value so it only shows after a refund has already been recorded against that RMA.

Version 1.9.18
- Increased the spacing between the return form and the forecast message shown underneath it on the customer portal.
- Changed the admin refund-complete button label to "Refund and Complete".

Version 1.9.17
- Added extra spacing between the return form and the forecast message shown underneath it.

Version 1.9.16
- Switched the updater client to use the live /update endpoint on the licence server.
- Kept plugin-info lookups aligned with the licence server so the standard WordPress plugin details popup can load correctly.

Version 1.9.15
- Added a separate Whole Plugin Debug Mode toggle under Debug Tools.
- Updated the About & Licence page so the main heading now shows Licence with a smaller Attach or Remove Licence heading beneath it.
- Added a centred Renew Licence button under the licence action buttons for future linking.

Version 1.9.14
- Added a native WordPress updater client so RMA Pro can detect updates from the Regal IT licence server.
- Added support for the standard plugin details popup using server-provided package information.
- Update checks are now cached and cleared automatically when the licence key changes.

Version 1.9.13
- Added an admin-wide licence notice when an active licence is nearing expiry and a persistent admin-wide notice when a licence has expired.
- Changed About & Licence so Trial now shows in amber and Paused now shows as Paused in amber instead of appearing as Trial in red.
- Locked Backup/Restore while the site is in trial mode.
- Added a clear message explaining that a full licence is required to unlock it.
- Changed empty Check Licence and Re-check Licence actions to refresh trial reporting with the licence server instead of showing licence-key errors.

Version 1.9.12
- Improved the trial-report status message so server-side database errors are shown in the plugin when a trial report cannot be stored.
- Prepared for the licence server schema-upgrade fix so trial installs can register correctly after the server plugin is updated.

Version 1.9.11
- Added trial-install reporting back to the Regal IT licence server for unlicensed installs.
- Trial reports now send the site domain, install date, trial expiry date, and plugin version.
- Added cached trial-report timing so the plugin reports on initial setup and then refreshes periodically without spamming the server.

Version 1.9.10
- Fixed the plugin package structure so WordPress upgrades the existing plugin instead of installing it as a separate plugin.
- Reduced the Customer Notes and Private Notes field heights by around 30% on the RMA record page.
- Updated the Pending status guidance to explain that exchange requests should be cancelled and re-submitted instead of edited.

Version 1.9.9
- Added a full-width Rule Debugging panel to the bottom of the RMA record page so staff can see stored rule matches and preview which current rules match that specific RMA.
- Updated the original payment refund summary so Order refundable balance is now labelled Total refundable balance and appears above Remaining item value.
- Removed the Recommended total line from the original payment refund summary.

Version 1.9.8
- Aligned the Latest Changelog Entries card with the other About & Licence cards.
- Made the debug log path appear immediately when Enable Debug Mode is ticked.

Version 1.9.7
- Removed the Trial Lock Test section from About & Licence.
- Added a manual Re-check Licence button to force a fresh server validation.
- Added Registered Domain to the licence summary.
- Added a hidden licence debug mode with logging to the uploads folder and on-screen log path when enabled.

Version 1.9.6
- Removed the Licence server row from the About & Licence page.
- Removed the Grace period ends row from the About & Licence page.
- Removed the licence API explanatory line from the About & Licence page.
- Shortened the About & Licence intro text by removing the licence server/grace-period wording.

Version 1.9.5
- Replaced the dummy local licence checker with live activation, validation, and deactivation against the Regal IT licence server at https://regal-it.co.uk.
- Added cached licence state with a 3 day grace period when the licence server cannot be reached.
- Updated lock logic so a fresh trial install locks after 7 days if no valid licence has ever been activated.
- Allowed previously activated licences to continue after expiry with updates disabled.
- Added a new Forecast master toggle so all forecast messaging can be turned on or off from the Forecast tab.
- Moved forecast-only saving fully onto the Forecast tab.
- Fixed forecast saves so they stay on the Forecast page.
- Replaced the holiday popup date picker with native date fields to avoid the broken mobile calendar layout.
- Updated frontend and email forecast messaging so it falls back cleanly when forecasting is disabled.

Version 1.9.4
- Fixed the customer forecast message so it shows below the returns form before submission and still appears in the success message after submission.
- Removed an incorrect forecast output block from the order lookup form.
- Improved the Forecast holiday date picker behaviour and mobile layout so holiday rows stack cleanly on smaller screens.
- Added stronger date picker popup styling and z-index handling for wp-admin.

Version 1.9.3
- Removed the generic forecast notice at the top of the customer returns portal.
- Moved the pre-submission forecast message to below the return form.
- Kept forecast messaging in the success message area.
- Fixed Forecast tab saving so holiday rows and forecast settings are stored correctly.
- Added holiday date pickers in wp-admin using the site's WordPress date format.
- Simplified Requests bulk-action labels to concise status/action names such as Pending, Approve, Received, Complete, Reject, Cancel, and Delete.
- Updated the admin refund completion button label to Title Case and matched the green completion button styling.

Version 1.9.2
- Added a new Forecast admin tab.
- Moved Return Process Time into the Forecast tab.
- Added Holiday forecast rows with Name, From, To, and Public Holiday options plus customer-facing help text.
- Forecast calculations now skip configured holiday dates when estimating processing completion.
- Added dynamic customer-facing forecast messaging on the portal, submission success message, approved email, and return reminder emails.
- Added public-holiday forecast notice support for approved and reminder email templates.
- Added default bodies for the First Return Reminder and Final Return Reminder email templates.
- Added General Settings help text explaining that enabled return reminders appear in Email Settings.

Version 1.9.0
- Added a clearer About & Licence screen state with a persistent green tick for valid licences and a red cross when the site is unlicensed, disconnected, or expired.
- Updated licence status styling so Active shows in bold green and Expired shows in bold red.
- Added one-year dummy licence expiry tracking with a visible Licence ends date and licence days remaining value.
- Changed dummy licence checking so invalid keys are not kept as attached licences.
- Removed the Store Credit shipping and Store Credit + bonus shipping settings from General Settings because shipping inclusion is already handled per RMA record.
- Tightened override cleanup so linked overrides are removed automatically when the related return is completed, cancelled, or rejected.
- Applied the override cleanup to wallet-credit and refund completion flows.

Version 1.8.32
- Added a new About & Licence admin tab showing the installed plugin version, current trial/licence status, attached licence summary, and the latest three changelog entries.
- Added temporary dummy licence handling with a Licence key field, Check Licence action, Remove Licence action, and a built-in test key for development: RIT-RMA-PRO-TEST-LICENCE.
- Added a 7-day free-trial framework with stored install date tracking and a temporary "7 days past" test toggle to simulate licence expiry without waiting.
- Added licence lock behaviour so protected settings areas cannot be saved once the trial has expired without a valid licence attached.
- Added frontend portal lock behaviour so the returns portal and related submission/ajax actions show a licence-expired style error instead of allowing new return activity.

Version 1.8.31
- Replaced the duplicate double-arrow collapse indicators with a single clear triangle indicator and hid the native browser marker on collapsible admin rows.
- Fixed the frontend return-method markup and styling again using explicit radio/label pairs so cards render full width without overlapping text.
- Fixed return-method selection syncing on the frontend so the hidden submitted value updates when the customer changes method.
- Fixed Backup/Restore export and restore forms so they now submit through the plugin settings handler and the Download Backup File button generates a JSON backup file correctly.

Version 1.8.29
- Increased the size of double-arrow indicators across collapsible rows to make expand/collapse controls clearer.
- Fixed the frontend return-method card markup and styling so methods render cleanly without overlapping.
- Set Rule Sources to be closed by default on the Rules page.
- Renamed the Activity tab table column from Date to Timestamp.
- Added a new Backup/Restore tab and menu page.
- Added backup export so admins can choose which supported sections to include in a backup file.
- Added backup restore so admins can upload a backup file and restore only the selected sections.

Version 1.8.28
- Changed the Activity tab table heading from Date to Timestamp.
- Updated Return Methods to use collapsible cards with open/close indicators, enable toggles, and disabled badges.
- Added toggle indicators to collapsed Email Template rows.
- Fixed frontend return method card markup and styling to prevent jumbled layout.
- Tightened return method filtering so rule-based Allowed Return Methods are applied consistently in the frontend method list.

Version 1.8.27
- Moved the Delete Record action to the bottom-left of the single RMA screen outside the data tables so it no longer affects the Status Key layout.
- Renamed Date Filed to Submitted on the Requests list, export, and single RMA summary for clearer wording.
- Renamed activity log Date columns to Timestamp on the Activity tab and single RMA activity table.
- Moved the Activity Log Retention help text to sit underneath the dropdown in General Settings.
- Added a new Return Methods admin tab and menu where return method options can be added and edited with a title and description.
- Added Allowed Return Methods to the Rules builder so rules can limit which return methods customers may choose.
- Updated the frontend return flow to load the allowed return methods dynamically and require the customer to choose one before submission.

Version 1.8.26
- Removed the Matched Rules column from the Requests page to keep the list cleaner now that Rule Applied is shown on the single RMA record.
- Moved the Delete Record action outside the Activity Log card and restyled it as a red danger button.
- Fixed the Delete request bulk action so selected RMA records are deleted correctly from the Requests page while WooCommerce order notes remain untouched.
- Renamed Log Retention to Activity Log Retention in General Settings.
- Removed the extra Clear logs helper note.

Version 1.8.25
- Removed the legacy Matched rules row from the single RMA record screen now that Rule Applied is the primary rule display.
- Updated rule preview loading so it now shows the total match count, returns the most recent 10 matches first, and can load 20 more at a time with a Show more link.
- Added a Delete Record button to the single RMA screen beneath the activity log with a confirmation warning that activity data for that RMA will be lost while WooCommerce order notes remain.
- Added a Delete request bulk action on the Requests screen with a confirmation warning that activity data for deleted RMA records will be lost while WooCommerce order notes remain.
- Changed log retention so it now applies only to the Activity tab, with clearer guidance in General Settings that per-RMA activity remains unless the RMA record itself is deleted.
- Updated Clear Activity so it now requires confirmation and only clears entries from the Activity tab while preserving activity on each RMA record and preserving order notes.

Version 1.8.24
- Switched the visual hierarchy of the Rules and Default Rules headings so Default Rules now carries the stronger heading style.
- Added a visible manual Priority field to each rule so staff can type priorities directly and save to reorder rules more easily.
- Added a Preview button to each rule to check which current RMA records would match that rule.
- Added a Rule Applied line to the RMA detail screen so staff can quickly see whether Default rules applied or which custom rule took precedence.

Version 1.8.23
- Rebuilt the Rules tab changes from the clean 1.8.20 base after the previous 1.8.22 package was found to be corrupted.
- Moved the Default Rules heading and description into the main content area and kept the section aligned correctly.
- Reworked the Rules tab layout so Exclude Products and Exclude Categories sit under Return Reasons.
- Moved Rule Sources into the top of Custom Rules.
- Styled Rule Sources with a light green background.
- Added expandable grouped criteria sections with triangle indicators.
- Improved collapsed picker summaries for categories and products.
- Moved the custom customer message and block-return options to the top of the Action section.
- Added disabled styling with a badge for collapsed disabled rules.
- Added an optional custom customer message toggle per rule.
- Updated the frontend to show that returned message instead of the generic available resolutions error when a rule blocks the return.

Version 1.8.20
- Standardised customer-facing and admin-facing UI labels to Title Case across the plugin, including buttons, tabs, menu items, section headings, and default email template labels.
- Corrected the plugin header and runtime version so WordPress recognises this as a newer release.

Version 1.8.19
- Fixed the Requests page bulk-action confirmation script so the request table renders again.
- Restored admin footer script output on the Requests page, which also brings back the status chart.

Version 1.8.18
- Fixed the Requests page bulk actions dropdown so all requested actions are available.
- Added bulk actions for Mark as pending, Approve Return, Mark as Received, Complete Return, Reject return, and Cancel request.
- Added a second, stronger confirmation prompt for bulk Complete Return, warning that refunds, store credit, exchange release, restocking, and emails may be triggered and may not be reversible.
- Applied the correct backend handling for emails triggered by the added bulk status actions.
- Applied the correct backend handling for exchange completion in the added bulk status actions.
- Applied the correct backend handling for exchange cancellation in the added bulk status actions.
- Applied the correct backend handling for restocking in the added bulk status actions.
- Applied the correct backend handling for override cleanup where relevant in the added bulk status actions.

Version 1.8.16
- Added wallet running balance to the activity ledger and recorded wallet refunds back to original orders as explicit per-order ledger entries.
- Added request bulk actions for Mark as Received and Complete Return. Complete Return bulk actions only run on requests already marked Received.
- Added test recipient fields and Send Test Email buttons to every email template in Email Settings.
- Updated email rendering so plain URLs are sent as clickable hyperlinks and migrated default email template links to anchor tags.
- Disabled email templates now collapse by default again and show a Disabled label in the header.

Version 1.8.15
- Fixed exchange completion so an already-created held exchange order is now released from On Hold to Processing when the RMA is completed.
- Changed the admin action label from "Clear and Complete" to "Complete Return" and updated related notices.
- Fixed restocking so schema-v2 RMA item payloads restock correctly.
- Added automatic restock processing to store-credit issuance and original-payment refunds when Restock Items is enabled.
- Fixed wallet balance refunds so fully traceable RMA credits can still be refunded even if older consumed wallet entries were non-traceable.

Version 1.8.14
- Updated the return workflow meaning so Approved means approved for return.
- Updated the return workflow meaning so Received means the parcel is back.
- Updated the return workflow meaning so Completed means the item was checked, cleared and fully processed.
- Updated the single RMA screen buttons to use Approve Return, Mark as Received, and Clear and Complete.
- Removed the standalone Complete button from the RMA record screen.
- Updated admin notices, status key text, help content, and default email wording to reflect the revised workflow.
- Changed exchange handling so replacement orders are now created immediately when the request is submitted and placed On Hold to reserve stock.
- Updated exchange completion so the held replacement order is only released when the RMA is cleared and completed.
- Added automatic cancellation of linked held exchange orders when an exchange RMA is rejected.
- Prevented customer editing of pending exchange requests once exchange stock has already been reserved.
- Updated reporting/rule checks so Received RMAs are treated as active returns alongside Approved and Completed where relevant.
- Restricted store-credit and original-payment completion actions so they are only shown once the return has been marked Received.

Version 1.8.13
- Fixed a critical error on the single RMA admin screen caused by a missing wallet lookup method when linking the customer email to wallet activity.
- Added a dedicated wallet-by-email helper so wallet links can be shown safely without creating a new wallet record.

Version 1.8.12
- Linked wallet email addresses in the Wallets tab directly to the wallet activity view.
- Linked the customer email on the single RMA admin screen to the wallet activity view when a wallet exists for that customer.
- Styled the Issue Credit and Mark Complete button to match the green approve-and-complete action styling.
- Removed Approve Only and Approve and Complete from store-credit RMAs.
- Removed Approve Only and Approve and Complete from already-approved RMAs and replaced them with a single green Complete button.
- Limited the exchange approval warning block so it only shows when the approval actions are actually available.

Version 1.8.11
- Added wallet activity drill-down from the Wallets tab so staff can inspect a single wallet in detail.
- Added a wallet ledger view showing issued credit, manual adjustments, coupon redemptions, linked RMAs, and linked original orders where available.
- Added an orders-using-credit section so staff can see which orders used wallet-generated coupons.
- Added a refund breakdown preview showing which original order(s) would be refunded for the wallet's current remaining balance.
- Added a new Refund Remaining Balance action that attempts to refund the wallet balance back to the original payment method(s) using the originating order(s).
- Wallet balance refunds are only allowed when the remaining balance can be traced back to RMA-issued credit with original orders that still have refundable value available.
- Cleaned up wallet credit and coupon methods to remove stray references that could trigger PHP notices or fatal errors.

Version 1.8.10
- Moved the Save Changes button above the exchange approval warning block on the admin RMA detail page.
- Made the Approve and Complete button semi-bold for clearer primary-action emphasis.

Version 1.8.9
- Removed the extra restock guidance sentence from the admin request screen.
- Put Approve Only and Approve and Complete on the same row with clearer spacing from Save Changes.
- Styled Approve Only as light blue and Approve and Complete as green.
- Added confirmation prompts for both approval buttons.

Version 1.8.8
- Renamed the admin Logs tab label to Activity everywhere in the plugin navigation.
- Added Step 2 missing-reason highlighting and automatic scroll to the first item missing a reason on mobile and desktop.
- Added clearer exchange approval actions in the admin request screen, including Approve Only and Approve and Complete.
- Added an approved-but-still-open notice to help staff finish requests cleanly.
- Updated exchange approval warning text to remove the word automatically and keep the action wording clearer.
- Refined the original payment refund breakdown wording so values are shorter and supporting explanations are shown beneath each line in smaller text.

Version 1.8.7
- Centred the Back and Continue buttons on mobile step screens.
- Renamed the Logs tab to Activity across the admin UI.
- Made the per-page selector on the Activity screen submit immediately when changed.
- Moved the clear-history action to the bottom of the Activity screen.
- Renamed it to Clear Activity.
- Updated activity source labels so customer entries show as Customer.
- Updated activity source labels so system-generated entries show as System.
- Updated activity source labels so manual staff actions display the acting user's name when available.

Version 1.8.6
- Made the staged step pills clickable for completed steps so customers can jump back through the flow.
- Centred the step pills on mobile for a cleaner layout.
- The order found notice now only shows on Step 2 and is hidden on later steps.
- Changed return item quantity on the front end from a free-entry number field to a dropdown limited to the purchased quantity.

Version 1.8.5
- Improved evidence-required handling on staged returns so missing evidence now highlights the upload area and scrolls the customer directly to it, especially on mobile.
- Reworked the mobile exchange-step layout so product search and selections appear before the pooled-value summary and remainder toggle.
- Updated the admin RMA detail view to show whether any remaining exchange balance will be refunded or issued as store credit.
- Added a bold red approval warning above Save Changes that spells out the exact remaining-balance action and states that it is not reversible automatically.

Version 1.8.4
- Fixed evidence-required validation so default return reasons like Faulty now correctly force evidence uploads without relying on hidden browser validation.
- Fixed staged form submission flow so missing evidence or exchange selection now returns the customer to the correct step with a visible error.
- Updated exchange help text to explain that any remaining balance is converted to store credit or refunded automatically.

Version 1.8.3
- Moved Upload evidence to sit directly underneath the item selection table in Step 2.
- Moved the customer notes field to Step 2 so supporting information is provided earlier in the return flow.
- Made the full exchange search result row clickable, not just the Add button.
- Added a customer choice for how any remaining exchange balance should be handled: store credit or refund.
- Updated exchange-step totals text so the remaining balance label changes to match the selected remainder option.
- Updated exchange approval processing so the remaining balance now follows the customer's chosen outcome.

Version 1.8.2
- Renamed customer-facing resolution label from "Original Payment Method" to "Refund" across the main plugin UI.
- Moved Upload evidence from Step 4 to Step 2 so customers can add evidence while choosing return items and reasons.
- Moved exchange product selection out of Step 4 into its own exchange step between resolution selection and return option.
- Updated staged return flow so the exchange step is only shown when at least one selected line uses Exchange.
- Kept Step 4 focused on the return option and final submission only.
- Improved Step 4 back-button behaviour so it returns to the exchange step when exchange selections exist, otherwise back to the resolution step.

Version 1.8.1
- Fixed the order lookup form being blocked by request-flow JavaScript validation.
- Request-flow JavaScript now only initialises after a valid order lookup when the staged return form is present.

Version 1.8.0
- Redesigned the frontend return flow to support per-item resolution selection instead of a single global resolution.
- Added pooled exchange basket logic so multiple exchange-marked items contribute to one exchange value pool.
- Added multi-product exchange selection with running pool used vs remaining totals.
- Remaining exchange balance is now converted to store credit automatically.
- New RMA submissions now store a forward-only schema v2 payload while older RMAs remain supported.
- Updated admin detail view to show per-item resolutions and exchange basket breakdowns more clearly.
- Updated mixed/exchange approval handling to create the exchange order from the pooled basket.
- Updated original payment refund calculations so schema v2 RMAs only refund lines set to original payment method.
- Updated store credit issuing flow so schema v2 RMAs only credit lines set to store credit or store credit + bonus.

Version 1.8.0
- Redesigned the frontend return flow to support per-item resolution selection instead of a single global resolution.
- Added pooled exchange basket logic so multiple exchange-marked items contribute to one exchange value pool.
- Added multi-product exchange selection with running pool used vs remaining totals.
- Remaining exchange balance is now converted to store credit automatically.
- New RMA submissions now store a forward-only schema v2 payload while older RMAs remain supported.
- Updated admin detail view to show per-item resolutions and exchange basket breakdowns more clearly.
- Updated mixed/exchange approval handling to create the exchange order from the pooled basket.
- Updated original payment refund calculations so schema v2 RMAs only refund lines set to original payment method.
- Updated store credit issuing flow so schema v2 RMAs only credit lines set to store credit or store credit + bonus.

Version 1.7.13
- Fixed rule-based resolution filtering on the front end by evaluating the selected return items before the customer chooses a resolution.
- Added a staged customer return flow: choose items, choose resolution, then choose return option.
- Added a resolution availability AJAX check so the Preferred Resolution list now only shows methods allowed by the matched rules.
- Improved rule matching for product-based criteria so variation items also match parent product rules correctly.
- Removed the unused criteria option for matching based on customer-selected resolution methods.
- Simplified rule actions to use allowed resolution methods only and removed the block resolution methods UI.
- Added a temporary Step 4 return option with a single customer-arranged return choice.

Version 1.7.13
- Fixed rule-based resolution filtering on the front end by evaluating the selected return items before the customer chooses a resolution.
- Added a staged customer return flow: choose items, choose resolution, then choose return option.
- Added a resolution availability AJAX check so the Preferred Resolution list now only shows methods allowed by the matched rules.
- Improved rule matching for product-based criteria so variation items also match parent product rules correctly.
- Removed the unused criteria option for matching based on customer-selected resolution methods.
- Simplified rule actions to use allowed resolution methods only and removed the block resolution methods UI.
- Added a temporary Step 4 return option with a single customer-arranged return choice.

Version 1.7.11
- Email Settings summary rows now grey out disabled templates instead of showing an enabled/disabled text label.
- Email subject preview now appears beneath the template name in the collapsed summary row.
- Admins can now edit the display name for each email template.

Version 1.7.11
- Email settings summary rows now grey out disabled templates instead of showing an enabled/disabled text label.
- Email subject preview now appears beneath the template name in the collapsed summary row.
- Admins can now edit the display name for each email template.

Version 1.7.10
- Fixed package version mismatch from the prior zip.
- Email Settings now use collapsible summary rows with enabled status and subject preview.

Version 1.7.10
- Fixed package version mismatch from the prior zip.
- Email settings now use collapsible summary rows with enabled status and subject preview.

Version 1.7.8
- Fixed Email Settings fatal error caused by calling RIT_RMA_Pro_Settings::all() instead of RIT_RMA_Pro_Settings::get_settings().

Version 1.7.8
- Fixed Email settings fatal error caused by calling RIT_RMA_Pro_Settings::all() instead of RIT_RMA_Pro_Settings::get_settings().

Version 1.7.8
- Fixed Email settings fatal error caused by calling RIT_RMA_Pro_Settings::all() instead of RIT_RMA_Pro_Settings::get_settings().

Version 1.7.6
- Added separate general settings to control whether standard store credit and store credit + bonus should include original shipping by default.
- The Issue Store Credit screen now preselects shipping based on those settings.
- Fixed the Email Settings tab fatal error by restoring the renderer.
- Added persistent stock handling preference per RMA so admins can untick Restock Items, save that choice, and have it logged.
- Cancelled RMAs no longer block a customer from filing a new return for the same order.

Version 1.7.6
- Added separate general settings to control whether standard store credit and store credit + bonus should include original shipping by default.
- The Issue store credit screen now preselects shipping based on those settings.
- Fixed the Email settings tab fatal error by restoring the renderer.
- Added persistent stock handling preference per RMA so admins can untick Restock items, save that choice, and have it logged.
- Cancelled RMAs no longer block a customer from filing a new return for the same order.

Version 1.7.6
- Added separate general settings to control whether standard store credit and store credit + bonus should include original shipping by default.
- The Issue store credit screen now preselects shipping based on those settings.
- Fixed the Email settings tab fatal error by restoring the renderer.
- Added persistent stock handling preference per RMA so admins can untick Restock items, save that choice, and have it logged.
- Cancelled RMAs no longer block a customer from filing a new return for the same order.

Version 1.7.5
- Front-end resolution label now shows the configured bonus amount, for example Store Credit + £5 bonus.
- Select styling adjusted to stop the text being cut off on the front end.

Version 1.7.5
- Front-end resolution label now shows the configured bonus amount, for example Store credit + £5 bonus.
- Select styling adjusted to stop the text being cut off on the front end.

Version 1.7.5
- Front-end resolution label now shows the configured bonus amount, for example Store credit + £5 bonus.
- Select styling adjusted to stop the text being cut off on the front end.

Version 1.7.4
- Fixed the Return windows tab fatal error by restoring a dedicated return windows renderer.
- Added a Return windows settings screen that lists WooCommerce shipping zones and allows per-zone day limits to be saved.
- Updated admin status badge colours to better match the request status pie chart colours.
- Improved Exchange Details on the single RMA page so each returned item is shown in its own card for easier scanning.
- Tightened admin menu icon rendering.
- Added a versioned icon URL to reduce stale icon caching.

Version 1.7.2
- Added pagination to the Requests page with a per-page selector and page navigation.
- Added confirmation before deleting a rule.
- Added support for custom resolution methods in General settings.
- Fixed the Return windows tab fatal error by restoring the missing renderer.
- Updated the rules UI so VIP Customer and High Risk Customer can sit on the same line.
- Increased spacing around the rule move controls.
- Updated the bundled admin menu icon.

Version 1.7.1
- Fixed the rule builder category/product pickers so multiple selections can be added correctly without the search box disappearing.
- Added product search criteria to rules with multi-select support.
- Removed the order age/date mutual exclusion logic so both can be used together again.
- Reworked VIP criteria rows so the visible fields now match the selected criterion type.
- Added clearer visual separation for Criteria and Action sections with larger headings and bordered panels.
- Replaced drag sorting in the rules UI with up/down move controls and priority re-numbering.
- Kept Rules saves on the Rules page.
- Removed the Personalised item meta keys field from the Rules page.

Version 1.7.0
- Reworked the Rules page so VIP, High Risk, and meta data criteria are now defined once outside individual rules and can then be ticked inside rules.
- Renamed High-return customer criteria to High Risk throughout the rules engine and admin UI.
- Added toggleable source sections for VIP, High Risk, and meta data criteria to keep the page cleaner when unused.
- Updated rule matching so order age and order date range behave as alternatives, with age taking priority when both are filled.
- Improved the rule editor UI with collapsed rule rows, clearer Criteria and Actions sections, drag-and-drop priority ordering, and inline rule summaries.
- Fixed rules save redirect so saving from the Rules page now returns to the Rules page.

Version 1.6.1
- Fixed a fatal error on the Rules page caused by a missing admin picker renderer method used by the rule/category/product selectors.
- Rules page now loads correctly again in wp-admin.

Version 1.6.0
- Added a working rule builder on the Rules page with priority-based matching and per-rule actions.
- Kept existing return reason evidence/auto-approve settings as the default baseline so current behaviour remains unchanged until custom rules are added.
- Added a rule condition for order age.
- Added a rule condition for order date.
- Added a rule condition for first-time customers.
- Added rule conditions for VIP definitions.
- Added rule conditions for high-return customer definitions.
- Added a rule condition for order total.
- Added a rule condition for product value.
- Added a rule condition for category.
- Added a rule condition for discounted items.
- Added a rule condition for metadata.
- Added a rule condition for return reason.
- Added a rule condition for selected resolution method.
- Added a rule action for auto approval.
- Added a rule action for evidence requirement overrides.
- Added a rule action for full return blocking.
- Added a rule action for allow-only resolution methods.
- Added a rule action for blocked resolution methods.
- Added a rule action for customer messages.
- Added a rule action for admin notes.
- Added support for admin-defined VIP matching using customer/order meta, lifetime spend, and order count thresholds.
- Added support for admin-defined high-return customer matching using historical returned order percentage.
- Added support for admin-defined high-return customer matching using recent return request counts in a time window.
- Added support for admin-defined high-return customer matching using returned quantity percentage.
- Added support for admin-defined high-return customer matching using returned order value percentage.
- Added rule evaluation during customer submission and pending-request amendment so matched rules are re-calculated each time the request is submitted or edited.
- Stored matched rules, rule evaluation data, and evaluation timestamps on the RMA record.
- Added matched rule visibility to the individual RMA record and the main Requests list for quicker staff triage.
- Added activity log entries when rules are evaluated on a request.
- Added dynamic admin UI controls to add and remove rules directly from the Rules page.

Version 1.5.1
- Changed the Resolution Methods setting label from "Store credit + £x.xx bonus" to the static wording "Store credit + bonus".
- Added a new Help admin tab and submenu.
- Help content now loads from the editable plugin file help/help-content.html so usage guidance can be updated without changing PHP code.
- Pre-populated the Help page with plugin documentation covering setup, portal usage, requests, rules, return windows, emails, wallets, overrides, logs, exchanges, and restocking behaviour.

Version 1.5.0
- Fixed Requests tab URLs so the Requests submenu and top tab both correctly open admin.php?page=rit-rma-pro instead of the invalid rit-rma-pro-requests slug.
- Updated the Requests page filter bar to include a dedicated Search button so admins do not need to press Enter to run a search.
- Added a Clear button to reset the Requests page search term, date jump field, and status filter while keeping the selected stats range.

Version 1.4.9
- Fixed the top-level WordPress admin menu icon sizing issue caused by using a large source image.
- Replaced the oversized menu icon asset with a proper 20x20 admin menu icon to prevent layout overlap and menu rendering issues.

- Moved RMA Pro to its own top-level WordPress admin menu with Requests as the default landing page.
- Added submenu entries for Requests, General settings, Rules, Return windows, Email settings, Wallets, Overrides, and Logs.
- Added a custom RMA Pro menu icon asset.
- Added Requests page search for RMA number, customer name, customer email, product text, and resolution method.
- Added a date jump filter on the Requests page using a calendar date picker.
- Preserved search and date filters when opening and returning from individual RMA records.
- Removed the separate "Reason provided on submission" block from the individual RMA record page.
- Added a new Rules tab/page.
- Moved Return reasons, Excluded products, Excluded categories, and Personalised item meta keys from General settings to Rules.
- Added a placeholder Rule builder section to the Rules page for future expansion.

Version 1.4.7
- Changed RMA restocking so items are only added back into stock when the request is marked Completed.
- Restocking no longer runs when an RMA is marked Received, allowing admins to inspect or reject returned items first without affecting stock counts.

Version 1.4.6
- Added a Restock items checkbox to the individual RMA record page, enabled by default while the RMA has not yet been restocked.
- Returned items are now added back into WooCommerce stock once when an RMA is saved as Received or Completed and restocking is enabled on the form.
- Added restock success, info, and error notices on the RMA record page, plus an order note and RMA log entry when items are restocked.
- Added persistent tracking for whether an RMA has already been restocked to prevent duplicate stock increases on later edits.
- Improved exchange RMA item display on the record page by replacing the generic Items list with a dedicated Exchange Details section that shows Original Product -> New Product.
- Renamed front-end wording from Preferred refund method to Preferred Resolution.
- Renamed back-end wording from Refund method to Resolution in key request screens.
- Renamed the General settings section label from Refund methods to Resolution Methods.

Version 1.4.5
- Added a new Overrides admin tab for manually allowing returns on selected orders in special circumstances.
- Added order override search by order number or customer email.
- Added override reason entry and editing for each override record.
- Added an overrides list showing order, customer, RMA, return status, items returning, override reason, and actions.
- Added multi-select delete and per-record delete/edit actions for override records.
- Added a toggle to automatically remove overrides once the linked return is completed or cancelled.
- Updated front-end lookup checks so qualifying overrides bypass the normal return window and order status block.

Version 1.4.4
- Added a test send function for every email template in Email settings.
- Each template now has its own test recipient field and Send test email button.
- Test emails use the site's default WordPress mail mechanism, so SMTP/mail plugins continue to be respected.
- Added admin success/error notices for test sends.
- Updated plugin version constants to 1.4.4.

Version 1.4.2
- Added duplicate-return protection so customers cannot create a second RMA for the same order.
- Added pending-RMA amendment flow so customers can reopen the order lookup, see that a request already exists, and amend that same pending RMA instead of creating another one.
- Added customer-facing notices explaining when an order already has an RMA and whether it can still be edited.
- Added admin guidance on the RMA detail screen explaining that setting a request back to Pending allows the customer to edit it again.
- Added a status key to the bottom of the RMA detail screen explaining each status.
- Bumped plugin version to 1.4.2.

Version 1.4.1
- Exchange requests no longer auto-approve, even if the selected return reason is configured for auto-approval.
- Added a prominent admin warning on exchange RMAs explaining that approving the request will create the exchange order and refund any remaining item balance, and that the refund cannot be undone.
- Added an Activity log section to each RMA detail screen so admins can review all recorded actions for that request in one place.

Version 1.4.0
- Updated the exchange helper notice so it now explains that any remaining balance will be refunded.
- Updated the evidence upload helper text to remove the wording about PDF uploads.
- Added automatic exchange fulfilment when an exchange RMA is approved.
- Exchange approval now creates a linked WooCommerce order with the selected exchange products.
- Exchange approval copies the original billing and shipping details.
- Exchange approval applies an exchange credit so the replacement order total is zero.
- Exchange approval sets the new order to Processing.
- Added automatic remaining-balance refunds for exchange approvals using WooCommerce native refund support where the original gateway supports API refunds. Shipping is not included in this refund.
- Added exchange processing logs.
- Added admin notices.
- Added source-order notes.
- Added linked exchange-order details on the RMA screen.
- Added database fields to track the linked exchange order.
- Added database fields to track the linked exchange refund.

Version 1.3.9
- Added a dedicated Return windows tab.
- Replaced domestic and international return windows with per-shipping-zone return windows pulled from WooCommerce shipping zones.
- Added support for WooCommerce zone matching during return lookup.
- Added support for the WooCommerce default zone for locations not covered by other zones.
- Kept legacy domestic and international values as fallback defaults for older installs and unmatched data.

Version 1.3.7
- Fixed a fatal error when submitting an RMA with an auto-approved return reason.
- Restored the missing frontend auto-approval method that determines whether all selected reasons are eligible for automatic approval.
- Auto-approved submissions now correctly save as Approved and continue to send the expected notifications and order note without crashing the site.

Version 1.3.6
- Removed the front-end exchange notice sentence: "On mobile, scroll back up to the product list to choose the exchange item."
- Fixed return reason configuration normalisation so the per-reason Auto approve setting persists correctly after saving.
- Fixed the Add reason template so newly added reasons include the Auto approve checkbox and save correctly.

Version 1.3.5
- Hid the exchange product column on the customer return form unless the preferred refund method is set to Exchange, reducing confusion on mobile and desktop.
- Added an Auto approve checkbox to each return reason in General settings.
- Added reason-level auto-approval logic so new RMAs are submitted directly as Approved when all selected return reasons are configured for automatic approval.
- Added automatic logging, order notes, and approved-status email notifications for auto-approved return requests.

Version 1.3.4
- Added a remembered stats period filter with: All data, Today, Yesterday, Last 7 days, Last 14 days, Last month, Last 3 months, Last 6 months, and Last year.
- Stats cards, request status breakdown, and refund method usage now reflect the selected stats period and show the active period clearly.
- Chart click filtering now preserves the selected stats period.
- Fixed original-payment refund logic so remaining item value and remaining shipping value are calculated separately.
- Replaced the shipping refund checkbox with a shipping refund amount field so partial shipping refunds can be issued.
- Removed the incorrect duplicate-refund lock so additional partial refunds remain available while refundable balance still exists.
- Changed refund shipping tracking to store the refunded shipping amount, enabling accurate remaining-shipping calculations.
- Removed the Manual action notice row from the request screen.
- Removed the Evidence uploads settings checkbox. Evidence requirement is now controlled by return-reason configuration only.
- Evidence upload field remains available on the front end and validation now checks only the selected reason configuration.

Version 1.3.3
- Changed original-payment refund locking so RMAs remain refundable while an eligible balance still exists for items or shipping.
- Added running RMA refund totals so multiple partial original-method refunds can be processed until the balance is exhausted.
- Expanded the Requests dashboard counters to show every request status across the top.
- Made the status chart clickable so clicking a segment filters the Requests list by that status.
- Added a visible active-filter notice with a clear filter action on the Requests screen.
- Replaced the plain return-reasons textarea with an add/remove reason builder and per-reason Evidence required toggle.
- Updated front-end evidence validation to use the configured per-reason setting instead of keyword matching.
- Removed the Manual action notice row from the request detail screen.

Version 1.3.2
- Updated the front-end order lookup field label from Billing email to Email.
- Added guidance that it must match the email used on the order.
- Improved the front-end refund method row so the Preferred refund method select has more room and better mobile display.
- Made evidence uploads required for selected items where the return reason indicates a faulty, damaged, or wrong item received case, with both front-end and server-side validation.
- Improved exchange guidance for mobile users.
- Added focus/scroll to the first missing exchange selector.
- Highlighted the required exchange field when no exchange product has been chosen.
- Removed SKU wording from the exchange helper text so it now refers to searching by product or variant name only.
- Reduced the desktop status chart display size for a cleaner Requests dashboard layout.
- Added a copy button and copied-state feedback for wallet links on the Wallets tab.

Version 1.3.1
- Fixed a settings save regression that could clear values from other tabs when saving General settings or Email settings.
- Updated settings saving so each tab only updates its own fields and preserves all existing values from the other tabs.
- No change to the original-payment refund logic added in 1.3.0.

Version 1.3.0
- Added admin-side refunds to the original payment method using WooCommerce's native refund flow where the order gateway supports API refunds.
- Added gateway compatibility checks and clear admin messaging when automatic refunds are unavailable and must be handled manually.
- Added support for partial refunds, optional shipping refunds, and tax-aware refund calculations based on the original WooCommerce order line items.
- Added duplicate-refund protection, failure logging, order notes, and RMA completion updates after successful original-payment refunds.
- Updated admin currency formatting so bonus and refund previews use the store currency instead of a hard-coded pound symbol / GBP assumption.
- Updated settings wording so store credit bonus references no longer imply a fixed currency symbol.

Version 1.2.5
- Added a Returns portal shortcode notice to the very top of the General Settings tab.
- Kept Wallet page URL shortcode guidance in General Settings.

Version 1.2.3
- Updated Settings help text for Wallet page URL to show the [rit_rma_wallet] shortcode setup steps.
- Added guidance in Settings explaining that the returns portal requires the [rma_pro_portal] shortcode on a page.

Version 1.2.2
- Added visible Logs tab date pickers and a visible records-per-page selector (20, 40, 60, 80, 100) with per-user persistence.
- Added Logs summary text, quick go-to-page control, and button-style pagination.
- Added Log retention setting and Clear logs action with confirmation, respecting the selected retention period.

- Fixed fatal error on the Return windows tab by adding the missing admin renderer for shipping-zone return window settings.

Version 1.2.1
- Added log summary text showing current range and total log count.
- Added quick jump to page control on the Logs tab.
- Added visible date range filters and a clearer records-per-page selector to the Logs tab.

Version 1.1.9
- Added order notes when wallet balance is redeemed into a coupon, including coupon code and amount.
- Updated Logs tab records-per-page options to 20, 40, 60, 80, and 100 with 20 as default.
- Updated Logs tab pagination to use button-style page links.

Version 1.1.9
- Added order notes when wallet balance is redeemed into a coupon, including coupon code and amount.
- Updated Logs tab records-per-page options to 20, 40, 60, 80, and 100 with 20 as default.
- Updated Logs tab pagination to use button-style page links.

Version 1.1.8
- Added sorting, per-column filters, pagination, and per-page selection to the Logs tab (default 20 records per page).
- Removed the "Refunded against order" column from the Requests tab.
- Added WooCommerce order notes when store credit is issued from an RMA record.
- Added WooCommerce order notes when wallet balances are manually adjusted or cleared from the Wallets tab.
- Corrected CSV export columns so exported request data matches the current Requests table structure.

Version 1.1.8
- Added sorting, per-column filters, pagination, and per-page selection to the Logs tab (default 20 records per page).
- Removed the "Refunded against order" column from the Requests tab.
- Added WooCommerce order notes when store credit is issued from an RMA record.
- Added WooCommerce order notes when wallet balances are manually adjusted or cleared from the Wallets tab.
- Corrected CSV export columns so exported request data matches the current Requests table structure.

Version 1.1.7
- Updated request status chart colours: Cancelled is now black, Rejected red, Approved teal, and Completed darker green.
- Fixed wallet clear actions so unused coupons created from redeemed wallet balances are also deleted.

Version 1.1.7
- Clearing wallet credit now unlocks linked RMA records.
- Clearing wallet credit now removes unused wallet coupons.
- Added clear issued credit action on locked RMA records.
- Updated wallet adjustment labels for clarity.

Version 1.1.7
- Updated request status chart colours: Cancelled is now black, Rejected red, Approved teal, and Completed darker green.
- Fixed wallet clear actions so unused coupons created from redeemed wallet balances are also deleted.

Version 1.1.7
- Clearing wallet credit now unlocks linked RMA records.
- Clearing wallet credit now removes unused wallet coupons.
- Added clear issued credit action on locked RMA records.
- Updated wallet adjustment labels for clarity.

Version 1.1.6
- Clearing wallet credit now unlocks linked RMA records.
- Clearing wallet credit now removes unused wallet coupons.
- Added clear issued credit action on locked RMA records.
- Updated wallet adjustment labels for clarity.

Version 1.1.5
- Fixed plugin package structure so WordPress upgrades the existing plugin correctly instead of installing a second copy.
- No functional changes beyond packaging/upgrade fix.

Version 1.1.5
- Fixed plugin package structure so WordPress upgrades the existing plugin correctly instead of installing a second copy.
- No functional changes beyond packaging/upgrade fix.

Version 1.1.5
- Fixed plugin package structure so WordPress upgrades the existing plugin correctly instead of installing a second copy.
- No functional changes beyond packaging/upgrade fix.

Version 1.1.4
- Fixed admin wallet credit preview so ticking "Include order shipping in store credit" updates the total immediately.
- Rebuilt admin JavaScript to restore the shipping toggle, note syncing, picker search, and chart behaviour cleanly.

Version 1.1.4
- Fixed admin wallet credit preview so ticking "Include order shipping in store credit" updates the total immediately.
- Rebuilt admin JavaScript to restore the shipping toggle, note syncing, picker search, and chart behaviour cleanly.

Version 1.1.4
- Fixed admin wallet credit preview so ticking "Include order shipping in store credit" updates the total immediately.
- Rebuilt admin JavaScript to restore the shipping toggle, note syncing, picker search, and chart behaviour cleanly.

Version 1.1.2
- Store credit can only be issued once per RMA with a server-side guard.
- Added issued-state messaging for already-credited RMAs.

Version 1.1.2
- Store credit can only be issued once per RMA with a server-side guard.
- Added issued-state messaging for already-credited RMAs.

Version 1.1.2
- Store credit can only be issued once per RMA with a server-side guard.
- Added issued-state messaging for already-credited RMAs.

Version 1.1.1
- Improved wallet coupon success message with bold black code.
- Updated checkout wording.
- Added customer notes field to RMAs, separate from private admin notes.
- Customer notes are available in customer-facing email templates via {{customer_notes}}.
- Issue credit flow now saves current private and customer notes when credit is issued.
- Issue credit area now shows shipping value and updates the credit total preview when shipping is included.
- Removed extra wallet note field from the issue credit action.
- Added wallet balance adjustment tools in the Wallets tab: set, increase, decrease, or clear.

Version 1.1.0
- Added an internal wallet ledger system for store credit balances.
- Added wallet database tables for wallet balances and wallet transactions.
- Added a new Wallets admin tab showing customer wallet balances and secure wallet access links.
- Added wallet page URL setting for use with the [rit_rma_wallet] shortcode and customer wallet emails.
- Added a new [rit_rma_wallet] shortcode so logged-in customers and guests with a secure token link can view wallet balances and recent activity.
- Added secure guest wallet access using email address plus tokenised wallet link.
- Added a new Issue store credit action on RMA request screens for store credit and store credit + bonus requests.
- Added support for optionally including order shipping when issuing wallet credit.
- Added support for bonus credit when the Store credit + bonus refund method is selected.
- Issuing store credit now marks the RMA as Completed and logs the wallet issuance event.
- Added a dedicated wallet credit customer email toggle, subject, and template in Email settings.
- Added wallet email tokens for issued amount, wallet balance, and wallet URL.
- Added wallet redemption to one-time WooCommerce coupons restricted to the customer email address.
- Coupon redemptions are one use only and compatible with other discount codes.
- Added a wallet transaction history table on the wallet shortcode page.
- Added storage of returned item unit prices in RMA item data for wallet credit calculations.

Version 1.0.11
- Removed the Refunded status from the request workflow and admin status dropdowns.
- Simplified the single request admin screen so it only shows Status and Admin notes.
- Removed admin-side Refund method, Refund amount, Shipping refunded, and Refunded against order controls from the request view.
- Added an admin notice explaining that refund, store credit, exchange, or wallet actions must currently be completed manually based on the customer-selected method.

Version 1.0.10
- Restored pre-populated default email template bodies when email subject/body settings are blank or missing.
- Updated all default email template sign-offs to use the dynamic {{site_name}} token instead of a hard-coded plugin name.
- Added migration logic to replace legacy 'RMA Pro for WooCommerce' email sign-offs in saved templates with the dynamic store name token.
- Added {{site_name}} token replacement support in email rendering for admin and customer emails.

Version 1.0.9
- Replaced the front-end exchange dropdown with an AJAX product search field so customers can search products and variations by name or SKU.
- Added live exchange search results with same-value or lower-value filtering per return item.
- Added front-end selection UI for exchange products, including clear selected-item feedback and remove option.
- Added server-side validation to re-check exchange selections against the original order item price before submission.
- Bumped plugin version to 1.0.9.

Version 1.0.8
- Added a requests stats area at the top of the Requests page.
- Added Chart.js powered status breakdown chart.
- Added summary cards for total requests, pending requests, completed requests, and top refund method.
- Added refund method usage summary panel.
- Added CSV export for requests, including filtered exports when a status filter is applied.
- Replaced free-text refund methods with hard-coded selectable methods in settings.
- Added supported refund methods: Original payment method, Store credit, Store credit + bonus, Exchange.
- Added a conditional Store credit bonus amount field in settings.
- Updated the Store credit + bonus front-end label to include the configured bonus amount.
- Updated request storage to use stable internal refund method keys instead of user-entered labels.
- Added exchange selection UI to the customer return form.
- Added per-item exchange product selection limited to products of the same or lower value.
- Added customer-facing exchange guidance text on the return form.
- Added admin request detail display for exchange selections captured on submitted RMAs.
- Updated refund method rendering across admin lists, detail pages, CSV export, and email tokens to use consistent labels.
- Updated the personalised item meta key settings description text.
- Moved the admin JavaScript away from jQuery for the updated interactions.
- Bumped plugin version to 1.0.8.

Version 1.0.7
- Added rich text email editors with media button support for email templates.
- Added pre-populated admin and customer email template content.
- Added customer email recipient handling so the customer is always the main recipient, with optional extra recipients and Bcc handling.
- Improved email settings UI and template editing experience.
- Included media-capable editors for inserting formatted content and images into email bodies.

Version 1.0.6
- Improved plugin packaging and activation handling.
- Continued general stability and UI improvements.

Version 1.0.5
- Added RMA request management foundations, settings, logging, and customer submission flow.

Version 1.0.4
- Replaced the mobile-problematic exclusion picker with a custom AJAX search and multi-select control for excluded products and categories.
- Fixed the admin exclusion UI so search results no longer overlap helper text on mobile.
- Fixed the exclusion picker so search remains available after selecting items.
- Added a dedicated Email settings tab separate from General settings.
- Split email controls clearly into Admin emails and Customer emails.
- Added editable recipients, subject, and body fields for admin new-request emails.
- Added per-status email toggles for both admin and customer emails.
- Added conditional reveal of recipients, subject, and body fields when each email type is enabled.
- Added support for multiple recipients using commas or new lines.
- Updated status change handling to send both admin and customer status emails based on the new email settings.
- Added token guidance for editable email templates.

Version 1.0.3
- Fixed the admin AJAX exclusion pickers on mobile so dropdown results no longer sit over the helper description text.
- Fixed the admin AJAX exclusion pickers so the search input remains available after selecting an item, allowing multiple selections without losing the field.
- Improved Select2 admin styling for narrow screens and multi-select rendering stability.

Version 1.0.2
- Replaced manual product exclusion ID field with AJAX search-and-select multi-picker for WooCommerce products.
- Replaced manual category exclusion ID field with AJAX search-and-select multi-picker for WooCommerce product categories.
- Renamed settings label from Return window UK to Return window domestic.
- Added admin-side AJAX search endpoints and select2 initialisation for exclusion pickers.

Version 1.0.1
- Fixed the front-end lookup flow so old error messages are cleared once a valid order is found.
- Fixed redirect handling so stale lookup, error, and submitted query args are removed before new ones are added.
- Removed the phone number field from the customer-facing return form.
- Added configurable return reasons to admin settings.
- Pre-populated return reasons using the original Regal Dog plugin defaults:
  - I ordered the wrong size
  - It doesn't suit my dog
  - Faulty - Please supply details
  - I ordered the wrong product
  - Received wrong item - Please supply details
  - Other - Please supply details
- Changed front-end item reasons from a free-text input to an admin-driven dropdown.
- Hid the return reason field on the front end when no return reasons are configured in settings.

Version 1.0.0
- Initial clean rebuild of the plugin under the new RMA Pro for WooCommerce.
- Added modular class-based structure for safer maintenance.
- Added custom database table for RMA records.
- Added custom database table for activity logs.
- Added admin request list with order links, customer details, returned items, refund method, refund flag, status, and RMA number.
- Added admin request detail screen for status updates, refund tracking, shipping refund flag, refund amount, and admin notes.
- Added configurable RMA numbering with prefix, suffix, and next number controls.
- Added configurable refund methods in settings.
- Added status-based customer email triggers with per-status toggles.
- Added admin email toggle for new request notifications.
- Added front-end shortcode portal for order lookup and return submission.
- Added legacy shortcode alias support for existing pages.
- Added configurable personalised item meta keys instead of hard-coded VPC-only logic.
- Added optional evidence uploads.
- Added HPOS compatibility declaration.

Changelog

RMA Pro for WooCommerce

v2.10.14
Version 2.10.14 - 29th September 2026
- Added Adjust balance and Refund Remaining Balance actions to individual wallet overview pages.
See Full Changelog
Version 2.10.13 - 28th September 2026
- Standardised the product header and version badge, and routed System-tab support through the Licence Server with consent-based diagnostics and structured bug reporting.
- Kept RMA-specific diagnostics opt-in and excluded sensitive licence credentials.

Version 2.10.10 - 23rd September 2026
- Refined the System page appearance for a more consistent experience.

Version 2.10.9 - 23rd September 2026
- Improved the System page experience.

Version 2.10.8 - 23rd September 2026
- Improved the System page presentation and licence experience.

Version 2.10.7 - 23rd September 2026
- Polished the licence and support experience on the System page.

Version 2.10.6 - 23rd September 2026
- Refined licence and support tools for a more consistent experience.

Version 2.10.5 - 23rd September 2026
- Improved licence status synchronisation and the update experience.

Version 2.10.4 - 23rd September 2026
- Simplified the compatibility declarations displayed in release notes.

Version 2.10.3 - 23rd September 2026
- Compatibility with WordPress: 7.1.2
- Tested WooCommerce up to: 11.1.2

Version 2.10.2 - 21st September 2026
- Removed the Coming Soon About and Licence card.
- Expanded the remaining cards to equal columns.

Version 2.10.1 - 21st September 2026
- Added paginated Wallets list results.
- Added a compact selected-wallet adjustment panel to make large wallet lists easier to manage.
- Fixed the selected-wallet adjustment panel so it opens reliably.
- Added compact colour-coded wallet actions with right-aligned token previews.

Version 2.9.20 - 20th September 2026
- Hardened private update validation.
- Refreshed protected download URLs immediately before installation.

Version 2.9.19 - 19th September 2026
- Await Licence Server confirmation before enabling a code-less trial.

Version 2.9.18 - 19th September 2026
- Added a Settings link on the Installed Plugins page.

Version 2.9.17 - 16th September 2026
- Added identified staging activation to the Licence Server check.
- Added compatibility reporting to the Licence Server check.

Version 2.9.16 - 14th September 2026
- Hid trial-only controls and details when a paid licence is attached.
- Simplified the active licence confirmation message.

Version 2.9.15 - 12th September 2026
- Replaced the WordPress admin-menu icon with the new RMA logo mark, without text.

Version 2.9.14 - 11th September 2026
- Standardised System-page commerce actions for paid, expired, trial, paused and cancelled licence states.

Version 2.9.13 - 11th September 2026
- Show the renewal action for active paid licences as well as expired paid licences.

Version 2.9.12 - 11th September 2026
- Moved linked-code guidance below the trial field.
- Added contextual green Purchase or Renew licence actions.

Version 2.9.11 - 11th September 2026
- Added secure account-issued trial activation codes for protected trial updates and plugin information.
- Fixed trial-code activation so it uses the standard server response.
- Retained the actual error when activation is refused.
- Clarified that the code links the existing trial to protected update access rather than starting a second trial.

Version 2.9.10 - 9th September 2026
- Fixed exchange completion actions so they appear and run only when a returned item uses the Exchange resolution.

Version 2.9.9 - 7th September 2026
- Fixed the Requests table, RMA record and CSV export so they show resolutions saved per returned item.

Version 2.9.8 - 26th August 2026
- Keeps the rejection window open while evidence uploads and the rejection email is processed, with upload progress and clear completion states.
- Removed the repeated email-placeholder helper text beneath the saved rejection reason.

Version 2.9.7 - 26th August 2026
- Added optional multiple evidence uploads when rejecting an individual return, with secure file validation and storage on the RMA.
- Newly uploaded rejection evidence is attached to the customer rejection email, including rule-specific rejection templates.

Version 2.9.6 - 26th August 2026
- Requires a customer-facing reason when an individual or bulk action rejects a return.
- Added the {{reject_reason}} email placeholder.
- Recorded the rejection reason on the RMA.

Version 2.9.5 - 26th August 2026
- Updated the Installed Plugins page links for Regal IT and the Regal IT WooCommerce plugins directory.

Version 2.9.4 - 21st August 2026
- Added a WordPress Dashboard widget for open-return workload, seven-day submission trends, status breakdowns and the oldest open return.

Version 2.9.3 - 21st August 2026
- Moved contextual RMA workflow actions beneath the status selector and Apply Status button.
- Shows Go to Action only once a request is marked Received.
- Softened admin buttons and standard form fields.

Version 2.9.2 - 21st August 2026
- Added an approved-return shortcut that takes admins directly to the available refund, store-credit or related action.
- Softened the RMA Record status controls with calmer spacing, rounded surfaces and responsive controls.

Version 2.9.1 - 21st August 2026
- Removed the withdrawn Risk Score feature and its related configuration, rule condition and admin displays.

Version 2.9.0
- Improved reusable admin product, category and return-zone selectors with accessible keyboard navigation.
- Improved search feedback in the reusable admin selectors.
- Improved in-progress search handling in the reusable admin selectors.
- Added a shared scoped admin UI foundation for consistent picker spacing, focus states, chips and loading feedback.

Version 2.8.10
- Allowed admins to refund above the default amount when a return-label deduction should be waived, up to the full remaining returned-item value.
- Added a clear confirmation warning before overriding all or part of the label deduction.
- Recorded deduction overrides in the RMA Activity Log.
- Recorded deduction overrides in WooCommerce order notes.

Version 2.8.9
- Added variation details inline with returned product names on the RMA Record page.
- Uses the stored variation ID or original WooCommerce order item so existing RMA records display their variation where available.
- Preserved item quantities, values, reasons, resolutions and selectable-item behaviour.

Version 2.8.8
- Reordered the RMA Record right column so status and stock controls are followed by the financial Action section, with Notes placed at the bottom.
- Added centred Action and Notes section headings for a clearer processing flow.
- Split note saving from status changes so each form preserves unrelated status, stock and note values safely.

Version 2.8.7
- Fixed refund amount rounding so displayed eligible item values, input defaults, maximum values and backend validation use consistent WooCommerce currency precision.
- Prevented half-penny source values such as 36.985 from displaying as £36.99 while limiting the refund input to £36.98.
- Preserved selected-item recalculation and return-label deductions while applying consistent currency rounding.

Version 2.8.6
- Added a new return-label method that lets customers choose an available Shippo or ShipStation service and price for deduction from their refund or store credit.
- Added validation for selected label rates, providers, order currency and incompatible exchange requests.
- Added return-label deductions to original-payment refund and store-credit calculations using the purchased label cost where available.
- Added provider, service, quoted cost and deduction details to the RMA record, financial summaries and Activity Log context.
- Preserved the existing merchant-funded and customer-paid label methods without changing their behaviour.

Version 2.8.5
- Added provider-neutral return parcel tracking to RMA records for labels generated through Shippo and ShipStation.
- Added a Return Tracking summary with normalised status, carrier, linked tracking number, last update, estimated delivery and latest carrier details.
- Added a collapsible parcel journey showing retained tracking events in chronological order.
- Added readable Activity Log entries for new carrier tracking events while ignoring duplicate webhook updates.
- Added consistent tracking status colours for label generated, in transit, delivery exception, delivered and returned-to-sender states.
- Stored tracking history within the existing label data without adding a database migration.

Version 2.8.1
- Added ShipStation API V2 as an alternative merchant-funded return-label provider.
- Added an active label-provider selector while preserving saved Shippo and ShipStation credentials and settings.
- Added ShipStation carrier, service and package discovery for ShipStation services and connected carrier accounts.
- Added ShipStation manual labels.
- Added approval auto-generation.
- Added secure customer self-service links.
- Added local PDF storage.
- Added customer email delivery.
- Added regional service preferences.
- Added heavy-parcel overrides.
- Added tracking webhooks.
- Updated RMA Record label wording and actions to identify the provider used, while preserving routing for existing Shippo labels and RMAs.
- Preserved merchant-funded label rules when switching the active provider between Shippo and ShipStation.
- Kept customer-paid return labels on Shippo for this release.

Version 2.8.0
- Reworked the RMA Record workflow so status changes are applied beside the status field, while notes and stock settings have a separate save action.
- Moved contextual Approve Return and Mark Received shortcuts beside the status selector.
- Added a clear Action section for refund, store credit and exchange completion workflows.
- Moved Convert Resolution into a collapsed Advanced actions panel.
- Improved received-status guidance for each resolution type.

Version 2.7.16
- Removed the Rule Applied row from the main RMA Record header because this is already available in the debug area.
- Removed the Gateway status line from the refund details panel.
- Included the selectable returned-item refund/store-credit update and adjusted the refund item-value helper text.

Version 2.7.15
- Added selectable returned items on non-exchange RMA records so admins can include or exclude items before issuing refunds or store credit.
- Updated refund helper wording from selected returned items to returned items.

Version 2.7.14
- Added remembered show/hide toggles for completed, rejected and cancelled requests on the requests screen.

Version 2.7.13
- Added sortable columns to the RMA requests table with the selected sort order remembered per admin user.
- Added quick status filter buttons above the requests table using the existing status colours.

Version 2.7.12
- Tightened the RMA Record summary spacing after the Return Label layout changes.
- Moved customer details onto the order row.
- Removed the submitted timestamp row.
- Displayed returned-item quantity inline in bold.
- Simplified completed store-credit records so issued requests show a single issued amount/date summary instead of the pre-issue controls and guidance.

Version 2.7.11
- Fixed the RMA Record Return Label panel placement so it sits within the main request details card instead of creating an extra column.
- Added RMA Record status colour styling for completed, rejected and cancelled requests, with cache-busting version refresh for admin assets.
- Added a coloured status indicator beside the request status field.
- Updated the admin email return reason placeholder so {{return_reason}} outputs reason labels only, with {{item_reason_summary}} preserving the former item plus reason summary.

Version 2.7.10
- Added Return Zone matching to Custom Rules IF Criteria, including zone include/exclude selection for country and region-based returns logic.
- Added Custom Rule validation warnings and save/preview errors when VIP Customer or High Risk Customer criteria are used before their Rule Sources are enabled and configured.
- Improved the Return Zones picker so the field is hidden when Any return zone is selected, available zones appear on focus, and typing filters the list.
- Fixed Return Zones AJAX search to correctly read WooCommerce shipping zone IDs and return matching configured zones.
- Allowed bundled documentation to remain accessible from the Help page while a trial or licence state has feature access locked.

Version 2.7.9
- Fixed Custom Rule metadata matching so rule previews and frontend blocking evaluate order and order-item meta only, preventing products that merely support personalisation from matching before they are actually personalised.
- Added backward-compatible RPP metadata aliases so existing rules using rit_rpp_template_id or rit_rpp_payload match the hidden RPP order-item meta written for genuinely personalised order items.

Version 2.7.8
- Fixed Custom Rule order previews so the Orders tab checks only the rule being previewed instead of any saved rule on the site.
- Hardened Custom Rule meta-data matching so structured order-item, order, and product meta values are evaluated safely without array-to-string conversion side effects.
- Corrected rule preview item values so product-value criteria use real unit prices in recent-order previews.
- Corrected high-risk customer returned-item history metrics so current schema return payloads are included in returned quantity and value calculations.

Version 2.7.7
- Added domain-change reporting to licence, update, and trial requests.

Version 2.7.6
- Release bump after System tab submission cleanup and changelog display updates.

Version 2.7.5
- Removed obsolete frontend browser-side submission capture and plugin debug-log diagnostic toggles from the System tab.
- Fixed frontend submission mode to Standard Form POST.
- Removed the AJAX submission selector from the System tab.
- Updated the latest changelog entries displayed on the System tab for the current 2.7.5 build.
- Added a divider between Order Shipping Value and Credit Total to Issue on the RMA record store-credit panel.

Version 2.7.4
- Fixed frontend diagnostics fatal caused by a missing customer IP helper method.

Version 2.7.3
- Added active-trial notice for newer licensed versions without exposing private updater downloads.
- Updated expired licence notice to explain that visible updates require renewal before download.

Version 2.7.2
- Fixed paid exchange-delivery completion so customers see a return success message after payment.
- Ensured payment-gated exchange RMAs create the on-hold exchange order after successful payment.
- Added automatic completion for RMA service payment orders after cleared payment.
- Added an admin-controlled analytics exclusion toggle for customer-paid return labels.
- Added an admin-controlled analytics exclusion toggle for exchange delivery charges.

Version 2.7.1
- Fixed the System page Check Licence action so it always forces a licence/trial server refresh while the plugin is locked.
- Bumped Licence Server build version to 2.7.1.

Version 2.7.0
- Added exchange delivery charge controls under Return Settings > Exchange with dependent options hidden when the feature is disabled.
- Fixed exchange flow currency formatting to use the original order currency metadata and symbol instead of falling back to the store currency.
- Improved exchange product pricing conversion so current product prices are displayed in the order currency where supported by the active currency plugin.
- Allowed same-price variant exchanges to retain the original paid item value.

Version 2.6.2
- Updated the WordPress admin menu icon to use the new SVG asset with theme-colour-aware masking.
- Added a plugin row metadata link to view other Regal IT WooCommerce plugins.
- Removed duplicate inline helper descriptions from the scoped admin settings areas where helper icons already provide the guidance.
- Removed the extra manual Shippo label action note from the RMA record screen.

Version 2.6.1
- Compliance: moved licence and plugin debug logs into a protected plugin-specific uploads subdirectory instead of writing directly to the uploads root.
- Compliance: removed admin help wording that suggested editing bundled plugin documentation files directly.

Version 2.6.0
- Fix: removed the temporary inline frontend loading fallback.
- Reset step navigation buttons whenever the return form changes steps, preventing buttons from remaining on Loading after successful navigation.
- Refined evidence remove X spacing and cursor/hover behaviour.
- Fix: corrected frontend inline loading fallback string concatenation to prevent a PHP fatal on returns pages.
- Added the WordPress Requires Plugins header for WooCommerce.
- Blocked cancellation of completed RMA records before status changes or emails are triggered.
- Added stronger frontend loading states for order lookup and step navigation buttons.
- Frontend: restored visible loading states on return form step navigation buttons, with a forced paint before slow AJAX work starts.
- Admin UI: Requests search now includes order number and order ID matches as well as RMA, customer, email, product and resolution fields.
- Fix: replaced the Requests status canvas chart with a server-rendered clickable SVG chart so it no longer depends on admin JavaScript timing or cached chart data.
- Fix: hardened request status chart data loading by adding a canvas data fallback, so the chart renders even when localized inline data is unavailable.
- Frontend: forced wallet coupon code text to a dark colour to prevent theme colour inheritance making codes unreadable.
- Fix: restored System page licence/status visual styling via enqueued inline admin CSS so unchanged asset versions do not leave cached styling behind.
- Fix: restored request status chart compatibility by adding a non-script chart data node for cached admin JavaScript while keeping the new localized chart data.
- Documentation: updated the in-plugin documentation logo source to the current 256x256 RMA Pro for WooCommerce asset.
- Admin UI: removed the duplicate Settings Safety Snapshot card from the Activity tab footer; it remains available from Backup/Restore.
- Compliance: moved low-risk admin CSS from direct style output into enqueued/admin style handling.
- Compliance: replaced the request status chart JSON script tag with data passed through the enqueued admin script.
- Compatibility: updated General Settings and documentation to recommend [rit_rma_portal] while preserving [rma_pro_portal].
- Review: completed a low-risk prefix audit and preserved existing public identifiers for backwards compatibility.
- Security hardening: sanitised admin redirect notice values before output.
- Security hardening: sanitised request URI usage in RMA Pro debug request context detection.
- Compatibility: added prefixed [rit_rma_portal] shortcode alias while preserving [rma_pro_portal].

Version 2.5.18
- Added a Premium-locked Settings Safety Snapshot restore card to Backup/Restore.
- Added settings save activity logging with previous/new key counts and suspicious-change warnings.
- Hardened partial admin settings saves to merge only approved keys into existing settings, reducing the risk of accidental full settings wipes.

Version 2.5.17
- Reduced automatic licence-server update-check timeout to avoid slow wp-admin/plugin install screens when the remote update server is slow or unavailable.
- Added short-lived failed update-check caching so repeated automatic update checks degrade gracefully instead of repeatedly blocking admin requests.
- Preserved normal successful update-offer caching and longer manual licence/check request timeouts.

Version 2.5.16
- Fixed Debug Tools AJAX save response handling so debug settings no longer show an error after saving successfully.

Version 2.5.15
- Added Frontend Submission Mode setting with Standard Form POST as the default, most reliable live-store submission path.
- Standard Form POST now uses the existing admin-post handler and browser redirect flow while preserving duplicate-safe submission IDs, early diagnostics, fatal-error capture and success messaging.
- Retained AJAX Submit as an optional smoother mode with REST retry and admin-ajax fallback for stores that prefer the no-reload experience.

Version 2.5.14
- Added REST submit retry and admin-ajax fallback submission handling for mobile/network edge cases.
- Added duplicate-safe submission IDs with short-lived processing locks to prevent duplicate RMAs when retry/fallback paths are used.
- Hardened frontend submit handling with timeout detection.
- Added retry diagnostics.
- Added fallback diagnostics.
- Preserved customer diagnostic references.

Version 2.5.13
- Added early REST receipt logging before validation.
- Added browser fetch lifecycle capture behind the existing toggle.
- Added customer-visible diagnostic references for failed submissions.

Version 2.5.12
- Changed customer evidence uploads and generated return label PDFs to use plugin-controlled RMA Pro storage without creating WordPress Media Library attachment records.
- Added separate General Settings retention controls for evidence uploads and return labels.
- Preserved existing Media Library attachment references for older RMA records.

Version 2.5.11
- Updated the admin wallet view so wallet-link and coupon copy icons sit inside their fields.
- Fixed the Current Balance stat to stay on one line with matching stat styling.

Version 2.5.10
- Added wallet bulk actions for deleting, clearing, setting, increasing, and decreasing balances with confirmation prompts.
- Added a dedicated View Wallet admin page with balance, coupon, activity, order usage, and refund breakdown cards.

Version 2.5.9
- Updated the wallet coupon code display so the copy icon sits inside the grey code pill and uses a cleaner copy-style icon.

Version 2.5.8
- Simplified the customer wallet helper message box so it only shows the dynamic balance guidance without the repeated introductory sentence.

Version 2.5.7
- Merged helper messaging into a single message box on the customer wallet page.
- Centred wallet headings and help text.
- Renamed the coupon section to Your Coupon Codes.
- Added a copy icon next to each coupon code.

Version 2.5.6
- Refreshed the customer wallet page UI with clearer messaging.
- Added card-based sections.
- Added live balance and remaining balance previews.
- Added a created coupons section showing coupon status.

Version 2.5.5
- Improved the manual wallet creation UI so the form is hidden until Create Wallet is selected and custom email fields only show when email customisation is enabled.

Version 2.5.4
- Added manual wallet creation from the Wallets admin page with opening balance, optional notes, optional customer email sending, and customisable wallet credit email content.

Version 2.5.3
- Corrected Purchase Premium Licence visibility so it displays for all non-premium states, including inactive/free and expired-trial sites.
- Moved the Purchase Premium Licence button into the actual System tab licence action area so it displays beneath the existing licence buttons for Free and Trial states.
- Added a Purchase Premium Licence button to the System tab licence controls for Free and Trial licence states.
- Preserved existing licence check, trial, remove licence, updater, and feature-gating behaviour.

Version 2.5.2
- Fixed remaining WordPress Plugin Check findings for SQL preparation, translation placeholders, escaping, and readme metadata.
- Generated separate WordPress.org (-wp) and licence-server (-ls) release builds.

Version 2.5.1 - 3rd May 2026
- Compliance hardening pass for the private/licence-server build.
- Added GPL-compatible plugin header metadata.
- Retained the self-hosted updater for private/licence-server distribution.
- Replaced remote Chart.js enqueue with native canvas chart rendering.
- Added static-analysis handling for plugin-owned custom-table database calls, request input checks, escaping checks, and translation placeholder comments.

Version 2.5.0
- Updated documentation

Version 2.4.41
- Added REST/AJAX frontend return submission for the customer portal.
- Kept the existing admin-post.php submission flow as a fallback for compatibility/no-JavaScript cases.
- REST submission now returns JSON success/error responses and redirects with a normal GET navigation after success where required.
- Reuses the existing backend submission handler so rules, emails, exchange handling, Shippo, wallet credit and diagnostics continue to use the same logic.
- Improved frontend error handling for failed submissions.

Version 2.4.40
- Added an optional Frontend Browser Submission Capture checkbox under System > Frontend Submission Diagnostics.
- The extra browser-side diagnostics script is only enqueued when this checkbox is enabled, so there is no additional frontend overhead while disabled.
- Browser capture records submit clicks, submit events, duplicate submit blocks, long-running/still-waiting submissions, and browser-side JavaScript errors related to the return portal.
- Browser diagnostic events are written to RMA Pro > Activity using the existing Submission Issues filter.

Version 2.4.39
- Added a System toggle for frontend submission diagnostics so failed return form submissions can be logged without WP_DEBUG.
- Added Activity page quick filter and Details column for frontend submission diagnostics.
- Added optional secondary submission diagnostic logging to the plugin debug log when Full Plugin Debug Mode and WP_DEBUG are enabled.

Version 2.4.38
- Added frontend return submission diagnostics for validation failures, PHP exceptions, insert failures, duplicate submissions, and successful completion.
- Added a unique frontend submission ID and safer duplicate-submission handling for active existing RMAs.
- Improved customer-facing submit behaviour by disabling repeat submits and showing a clear long-running submission message instead of appearing stuck.

Version 2.4.37
- Fixed direct Help page access by registering Help as a hidden admin page instead of adding then removing it from the submenu.

Version 2.4.36
- Removed Help from the visible admin menu and tab navigation while keeping direct help links working.
- Replaced help-content.html with the updated styled documentation.
- Corrected the logo path to use the bundled plugin logo.

Version 2.4.35
- Fixed duplicate Stock handling helper icon on RMA records while keeping the restock status message visible inline.

Version 2.4.34
- Restored the Status and Stock handling helper icons on the RMA record page while keeping duplicate inline helper paragraphs removed.
- Improved rule email override default-copy formatting by preserving block HTML where present and applying paragraph formatting when saved templates only contain plain text/newline spacing.

Version 2.4.33
- Removed the editable-file note from the Coming Soon help tab.
- Improved skipped-resolution labels so customer emails show "To be confirmed" instead of the internal pending_review key.
- Tidied the RMA record status and stock handling helper text, removing duplicated inline descriptions.
- Improved rule email override default formatting by applying paragraph formatting when copying defaults.
- Moved Return Settings before Rules in the admin menu and tabs.
- Added Help before System in the tab row.
- Reordered Backup/Restore sections to follow the visible admin menu grouping while preserving existing backup keys.

Version 2.4.32
- Converted Custom Rule email override bodies to rich email editor fields so copied default templates can be edited with formatting instead of raw HTML.
- Initialised rich email editors for dynamically added Custom Rules.
- Re-applied contextual helper icons to newly added Custom Rules immediately, without requiring save and refresh.

Version 2.4.31
- Preserved HTML formatting when a blank Custom Rule email override is populated from its matching default email template.
- Expanded helper text for email overrides, return/resolution method availability, rule-only methods, and skipped-resolution behaviour.
- Clarified that rule-only return and resolution methods are shown on the frontend only when a matching Custom Rule explicitly allows them.

Version 2.4.30
- Added default template prepopulation when enabling a blank custom rule email override. Existing edited override content is preserved.
- Clarified General Settings return instructions as the fallback for return methods without their own instructions.
- Added helper text confirming handled directly notes are internal/admin only.

Version 2.4.29
- Fixed new Custom Rules priority so new rules use the next available priority instead of inheriting the template priority.
- Fixed Custom Rules saving for rule-only Return Methods so options like Free Royal Mail Return remain available on the frontend when matched.
- Added a General Settings admin RMA email recipient field, defaulting to the store admin email and syncing with admin new request notifications.
- Updated Mark as Handled Directly so closing a pending-review RMA triggers the completed status email flow.

Version 2.4.28
- Restored Custom Rules customer success messages between the editable success message and forecast processing block.
- Updated skipped-resolution submissions so auto-approval respects the selected Return Reason auto-approve setting.
- Added Pending Review Outcome admin actions to convert skipped-resolution RMAs to Refund or Store Credit, or close them as handled directly with an admin note.
- Added a refund total preview to the RMA refund form.
- Improved Custom Rules admin behaviour for next priority assignment, no-action warning visibility, and AJAX save status feedback.

Version 2.4.27
- Tightened skip-resolution flow so Step 3 remains skipped/locked once triggered.
- Disabled hidden resolution inputs during skip-resolution submissions so Step 4 can submit correctly.
- Ensured server-side submission accepts skipped-resolution requests without requiring Step 3 resolution values and stores them as pending_review.

Version 2.4.26
- Fixed skip-resolution flow so matching reasons load return options and jump directly to Step 4.
- Added Additional Details to the RMA record summary between Return Method and Rule Applied.
- Updated email placeholder wording for {{customer_extra_details}}.
- Added {{additional_details}} as an alias.
- Expanded success message placeholder support.
- Updated the General Settings helper text.

Version 2.4.25
- Fixed required Additional Details mobile validation so the page lands on the visible error message after Step 2 is restored.

Version 2.4.24
- Fixed mobile validation scrolling so missing Additional Details shows the error message instead of scrolling past it.
- Fixed skip-resolution flow so return methods are loaded before the customer is moved directly to Return Option.

Version 2.4.23
- Fixed skip-resolution detection on the frontend so faulty/wrong-item submissions can bypass the resolution step and submit as Pending.
- Fixed Details Required so Additional Details is enforced on the frontend and server for selected return reasons.
- Fixed Return Reasons admin saving/rendering for Details Required.

Version 2.4.22
- Changed Forecast messaging so it only shows processing-time estimates, not return-window deadline copy.
- Added editable success message content with placeholder guidance in General Settings.
- Added Details Required per return reason.
- Renamed the customer textarea to Additional Details.
- Added skip-resolution settings for faulty and wrong-item reasons so matching requests submit as Pending for manual review.

Version 2.4.21
- Fixed Forecast settings saving so zone return windows are preserved when forecast-only settings are saved.
- Changed missing shipping-zone return window defaults from 0 days to 30 days.

Version 2.4.20
- Added availability controls to Resolution Methods so built-in and custom resolutions can be enabled by default or shown only when matching Custom Rules.
- Updated Custom Rules resolution handling so rule-only resolution methods can be enabled by matched rules.

Version 2.4.19
- Fixed the Custom Rules customer message field so it is hidden when Show Custom Customer Message is unticked in the admin UI.

Version 2.4.18
- Moved the Custom Rules customer message field directly under the Show Custom Customer Message action and kept it hidden unless the action is enabled.

Version 2.4.17
- Updated RMA restock order notes to include before and after stock quantities where available.
- Added always-visible helper text to Custom Rule actions explaining that blank method restrictions use the default configuration.

Version 2.4.16
- Removed automatic helper icons from Zone Rules shipping-zone name labels while keeping other helper icons in the section.
- Fixed Custom Rules save ordering so manually entered priority values are persisted in priority order.
- Improved RMA restocking so variation or parent-managed stock is increased when completed RMAs are marked to restock items.
- Updated admin timestamp rendering to use the site timezone for RMA records, activity, and wallet displays.

Version 2.4.15
- Added return method availability controls so methods can be enabled by default or shown only when a matching Custom Rule allows them.
- Changed Custom Rules priority resequencing to use increments of 1 instead of 10 when moving rules up or down.
- Made admin cards collapsed by default.
- Tidied Zone Rules helper text so Allow exchanges uses the helper icon instead of repeated inline text.

Version 2.4.14
- Fixed System page admin notices so licence messages appear in the normal page flow instead of floating at the top right.
- Replaced the Coming Soon placeholder content with a clearer roadmap covering shipping integrations, wallet UI improvements, tracking pages, tracking-based forecasting, and reporting trends.
- Standardised Changelog.txt headings by removing dates from version titles.

Version 2.4.13
- Updated Backup/Restore section labels so the zone-based return window and exchange availability settings are shown as Zone Rules.
- Zone Rules export/restore uses the existing return_window_shipping_zones data so return windows and per-zone exchange toggles are included in backups.

Version 2.4.12
- Fixed Free-mode settings saves so available settings can save while Premium-only controls remain locked.
- Switched Rules AJAX saving to the normal settings save path for consistent Free and Premium behaviour.
- Improved AJAX save responses so failed saves no longer report success incorrectly.

Version 2.4.11
- Added a Premium badge beside the Backup/Restore page heading.
- Moved the Backup/Restore Premium requirement notice into the normal page content area so it no longer floats to the right.

Version 2.4.10
- Fixed General Settings saving in Free mode by keeping the save button available while the Premium branding toggle remains locked on.

Version 2.4.9
- Added a Customer instructions rich text editor to each Return Method in Return Settings.
- Added the {{return_method_instructions}} email placeholder so selected return-method instructions can be inserted into email templates.
- Preserved existing saved email templates and return method descriptions.

Version 2.4.8
- Improved {{order_number_linked}} so it resolves a WooCommerce order edit link by order ID or order number where available.
- Kept {{order_number}} unchanged and preserved existing email templates.

Version 2.4.7
- Added return_reason email placeholder, outputting a combined item-by-item list of selected return reasons.
- Added customer_extra_details email placeholder for the customer extra details field.
- Added order_number_linked email placeholder, outputting the WooCommerce order number as an admin edit link where available.
- No saved email templates are modified or reset.

Version 2.4.6
- Removed customer_full_name from available email placeholders while keeping customer_name unchanged and preserving saved templates.
- Enabled AJAX saving for Email Settings forms.
- Adjusted AJAX save notices so confirmations render in the normal admin notice area instead of floating at the top right.

Version 2.4.5
- Added customer_first_name, customer_last_name, and customer_full_name email placeholders without changing existing customer_name behaviour or saved templates.

Version 2.4.4
- Added AJAX saving for standard admin settings forms while leaving licence, backup/restore, export, and support actions as normal form submissions.
- Fixed the System page footer so Help/System links render below the card grid instead of as an extra column.
- Fixed the top-right documentation icon so it navigates to the internal embedded Help page instead of being treated as an inline helper tooltip.

Version 2.4.3
- Moved Zone Rules into a collapsible card at the top of the Rules page.
- Removed Zone Rules from the main tab/submenu navigation while keeping existing internal option keys and legacy page routing available.
- Save All Rules now includes Zone Rules values so regional windows and exchange availability save from the Rules page.

Version 2.4.2
- Updated Return Method ordering controls to use the same up/down arrow styling as Custom Rules.
- Added JavaScript reindexing so reordered Return Methods save in the same order they appear in admin and render in that order on the frontend.

Version 2.4.1
- Promoted the 2.4.0 beta changes to a stable release.
- Locked Shippo return methods behind Premium access in Free mode while keeping them visible in Return Settings.

Version 2.4.0-beta
- Beta rebuild from the known-good 2.3.26 Shippo return-method base.
- Added currency hardening for RMA records, wallet/store credit balances, transactions, and price display.
- Added a separate Zone Rules tab for zone-based return windows and per-zone exchange availability while keeping the existing Return Settings tab name unchanged.
- Added same-price variant exchange handling so same-parent variants with matching base prices use the original order unit value.
- Renamed visible Rule Builder wording to Custom Rules while preserving internal rule_builder keys.
- Added visual/code editors to Custom Rules email override body fields.
- Added return method up/down ordering controls while preserving the existing return method renderer.
- Renamed About & Licence to System.
- Moved Help out of the main tab menu while keeping the embedded help page accessible.

Version 2.3.26
- Removed duplicate helper icons from the Auto Approve and Require Evidence dropdown labels.
- Auto-approved Shippo return-label requests now generate the label before sending customer status emails, so matching rule-specific Shippo approved templates are used.

Version 2.3.25
- Tightened the Auto Approve and Require Evidence rule action layout with helper icons beside the labels.
- Moved the Show Custom Customer Message explanation into helper text only.
- Fixed Custom Rules Auto Approve so matched rule actions override default reason auto-approval.

Version 2.3.24
- Stopped custom customer messages from replacing item eligibility text.
- Centred custom success messages.
- Clarified helper text.
- Added orange Custom Rules headers with cross-hatching for disabled rules.
- Renamed Save Changes to Save All Rules.
- Added AJAX saving for all rules and individual rule cards.
- Moved Require Evidence next to Auto Approve.
- Tidied helper icon placement.

Version 2.3.23
- Changed rule customer success messages to sit inside the existing success area with a bold Please Read prefix.
- Added custom customer message actions to the Rule Flow THEN preview.
- Improved rule email override matching by stored rule ID with name fallback.
- Sends status notifications for the submitted initial status when the matching email template is enabled.
- Added activity log entries for submission/status email send results.

Version 2.3.22
- Updated override helper text to include order status eligibility.
- Removed the Custom Rules Admin Note action field from the UI and no-action checks.
- Display customer rule messages on the front-end submission success screen between the success notice and forecast block.
- Added rule email guidance when Shippo-based return methods are selected but the matching generated-label email override is not configured.

Version 2.3.21
- Styled front-end Not eligible item messages as centred badges.
- Fixed order overrides so Eligibility Checks, Default Rules, and Custom Rules bypasses act independently.
- Default Rules overrides now bypass excluded products/categories and default reason evidence checks.

Version 2.3.20
- Removed the legacy [regal_returns] shortcode alias so RMA Pro no longer overrides older Regal Returns portal shortcodes.
- Updated Rule Preview loading copy to mention both current RMA records and recent orders.
- Changed the allowed order status selector to the chip-style picker used elsewhere in the plugin.
- Added the How Rule Priority Works heading back into the Custom Rules helper card.
- Improved the front-end message shown when an order status is not allowed to submit returns.

Version 2.3.19
- Changed the default allowed order status for returns to Completed only.
- Added Rule Preview tabs for matching RMA records and recent WooCommerce orders.
- Applied the Do Not Ask For A Return Reason action on the front-end item selection step.
- Merged Custom Rules helper text into one collapsible card.
- Fixed the Show more/Show less toggle.

Version 2.3.18
- Added default-rule order status eligibility controls above Return Reasons.
- The front-end returns portal now uses the configured allowed order statuses instead of hard-coded Processing and Completed statuses.
- Included allowed order statuses in Default Rules backup/restore coverage.

Version 2.3.17
- Fixed Custom Rules saving for the Do Not Ask For A Return Reason action.
- Removed the duplicate Rule Flow preview from inside the rule editor body.
- Updated Rule Flow summaries so fully selected resolution/return method lists do not appear as limits.
- Updated Rule Flow summaries to show allowed or excluded method names only when selections actually restrict the available options.
- Updated IF and THEN Rule Flow preview chip background colours to match the Criteria and Action sections.

Version 2.3.15
- Linked matched rule names on the RMA record rule debugging panel to their Custom Rules cards where an ID is available.
- Changed rule debugging explanation text into inline blue helper boxes for the submission snapshot and current live preview.
- Moved rule email placeholder cards under each rule email body field.
- Made the cards compact.
- Cleaned up General Settings helper icon behaviour for Show helper icons and RMA Pro branding.

Version 2.3.15
- Added a collapsed Available email placeholders card at the top of Email Settings.
- Added the same placeholder reference card at the bottom of Rules for rule-specific email overrides.
- Centralised the placeholder list so the UI reflects the actual email replacement tokens.

Version 2.3.13
- Added a Free-mode basic return window field while keeping Premium zone-specific return windows visible but locked.
- Free mode now uses the basic return window for eligibility checks.

Version 2.3.12
- Removed top-page Premium preview notices so mixed Free/Premium pages rely on inline Premium badges and disabled controls.
- Locked Overrides and Integrations controls in Free mode with disabled preview styling and Premium badges.
- Locked Return Windows controls in Free mode while keeping the section visible for preview.
- Updated Custom Rules preview so rules can be drafted but cannot be enabled in Free mode.
- Removed the extra Convert Resolution Premium notice from the RMA record page.

Version 2.3.11
- Replaced harsh Free-mode licence lock messages with softer Premium feature notices.
- Premium-only admin pages now remain visible for preview instead of redirecting to About & Licence.
- Convert Resolution now remains visible in Free mode with a disabled button and Premium badge.

Version 2.3.10
- Updated Premium Trial sync so cancelled or expired trials reported by the licence server immediately revert the plugin to Free access.
- Trial sync now respects server-side trial expiry changes, including admin extensions and reactivations.

Version 2.3.9
- Locked Backup/Restore to active Premium licences only; Premium Trial access no longer unlocks backup or restore actions.
- Made RMA resolution conversion between refund and store credit a Premium feature with a Premium badge and server-side enforcement.
- Added admin email to Premium Trial reporting so the licence server can contact site admins about expired trials.

Version 2.3.8
- Added Free/Premium access naming with optional 7-day Premium trial start.
- Added locked-on Powered by RMA Pro branding for Free mode on the returns portal and emails.
- Added General Settings branding toggle for Premium access.
- Added Premium badge styling for locked branding controls.

Version 2.3.6
- Converted Custom Rules email override test buttons to AJAX so unsaved edits are included and the page no longer reloads.
- Converted Email Settings test buttons to AJAX so unsaved template edits are included and the page no longer reloads.
- Added inline success and error feedback for email test sends.

Version 2.3.4
- Fixed Custom Rules email override test buttons so the request is handled before the normal Rules save flow, even if the browser ignores button formaction handling.
- Updated the Custom Rules test-email JavaScript to submit directly to admin-post.php and preserve the selected override card.

Version 2.3.3
- Fixed Custom Rules email override test buttons so they submit to the dedicated test email handler instead of saving the Rules page.
- Added a JavaScript fallback for mobile browsers where button-level form action handling can be unreliable.

Version 2.3.2
- Removed the Custom Rules left-to-right helper banner.
- Grouped disabled rule-specific email overrides into a disabled section.
- Added test recipient fields and Send Test Email buttons to rule-specific email override cards.

Version 2.3.1
- Converted Custom Rules explanatory helper boxes into collapsed cards with show more/show less controls.
- Added contextual helper icons to key Custom Rules action checkboxes.

Version 2.3.0
- Moved rule-specific customer email templates into Custom Rules action cards.
- Added per-rule overrides for pending, approved, approved with Shippo label, received, rejected, and completed customer emails.
- Preserved legacy approved rule templates where possible and continued fallback to global Email Settings templates.
- Added contextual helper text for the new rule email override controls.

Version 2.2.28
- Updated Shippo customer self-service helper copy to describe the secure customer link flow.
- Added contextual helper guidance for the Shippo return address fields.
- Standardised override bypass option descriptions so Eligibility Checks matches Default Rules and Custom Rules.

Version 2.2.27
- Refined helper icon placement in Custom Rules labels and action text areas.
- Removed helper icons from Shippo discovered service rows and the customer self-service label.
- Moved selected visible action helper text into contextual helper icons.
- Added helper context for Heavy parcel override and Overrides fields.
- Added visible descriptions for Default Rules and Custom Rules bypass options.

Version 2.2.26
- Fixed helper icon interaction on touch devices so the first tap opens the tooltip instead of only focusing the icon.
- Preserved desktop hover, focus and click behaviour for contextual helper tooltips.

Version 2.2.25
- Fixed contextual helper tooltips so they render above admin panels instead of being clipped.
- Replaced the heavier helper icon with a lighter native WordPress Dashicon.
- Added hover, focus, and click handling for helper tooltip visibility.

Version 2.2.24
- Updated Custom Rules criteria cards to use #f8fbff with a darker matching border.
- Updated Custom Rules action cards to use #fbf9ff with a darker matching border.
- Added optional contextual helper icons across the main admin option screens.
- Added a General Settings toggle to show or hide helper icons.

Version 2.2.23
- Added matching explanatory save-panel styling to the Save Admin Emails button.
- Forced Custom Rules criteria and action panels back to neutral WordPress-style card backgrounds.
- Fixed WordPress admin footer overlap on RMA Pro admin pages.

Version 2.2.22
- Fixed duplicate disclosure arrows on disabled email template groups and normalised Email Settings toggle sizing.
- Added extra admin page bottom spacing and safe clearing to prevent the WordPress footer text overlapping Custom Rules content.
- Reverted Custom Rules criteria/action field backgrounds to the cleaner standard styling.
- Prevented one opened filter card from stretching every filter card in the same row.
- Added IF and THEN section titles above Custom Rules Criteria and Action areas.
- Kept the RMA Pro admin menu visible when WooCommerce is inactive.
- Replaced page content with a clear WooCommerce-required message.

Version 2.2.21
- Fixed Email Settings collapse toggle sizing so template cards match the larger admin disclosure controls used elsewhere.
- Added an in-card IF/THEN Rule flow preview inside Custom Rules forms to match the card summary.
- Tidied Custom Rules criteria and action presentation with clearer grouped card styling while preserving existing functionality.
- Added a graceful WooCommerce dependency check so the plugin pauses with an admin notice instead of causing a critical error when WooCommerce is inactive.

Version 2.2.20
- Tidied the Custom Rules cards with clearer IF/THEN visual summaries, priority/status context, and a short rule-reading guide.
- Grouped disabled email templates into collapsed disabled sections on Email Settings to reduce clutter while preserving all existing fields and save behaviour.
- Added supporting admin CSS and vanilla JavaScript for the updated Rules and Email Settings layouts.

Version 2.2.19
- Fixed Email Settings test email buttons by rendering the shared admin-post form used by every template test button.
- Added admin success/error notices after test email attempts.
- Added test email handling for rule-specific approved email templates.

Version 2.2.18
- Added the submitting site's name to RMA Pro support API payloads so the licence server can set a clearer Reply-To header.

Version 2.2.17
- Compatibility release for RIT Licence Server support email formatting changes.
- No RMA Pro support form behaviour changed in this release.

Version 2.2.16
- Hid the bug-specific support checklist, file/link fields, diagnostic options, and diagnostic authorisation checkbox unless the support type is set to Report a bug.
- Made diagnostic authorisation required only for bug reports.

Version 2.2.15
- Removed the support summary field and now uses the customer domain in support email subjects.
- Added optional support file uploads with validation for file count, size, and allowed file types.
- Updated support form wording, request type order, SMTP helper text, and checklist placement.
- Improved support diagnostic redaction for customer names, emails, address-style fields, and sensitive keys.

Version 2.2.14
- Added a working support submission form on the About & Licence page that sends requests through the Regal IT licence server API instead of relying on the customer site's SMTP.
- Support submissions now include request type, summary, reproduction notes, optional screenshot links, and explicit authorisation before sending.
- Added optional redacted settings backup inclusion for support requests, with sensitive keys, secrets, tokens, passwords, and licence values redacted.
- Added optional recent debug log inclusion for support requests when authorised by the admin.
- Added success/error notices after support submission attempts.

Version 2.2.13
- Renamed Rule Debugging headings to clearly separate Rules Matched (at submission) from Current Rule Preview (live evaluation).
- Added clearer explanatory text below both Rule Debugging sections.
- Simplified email settings save button labels for admin, customer, and rule-specific email templates.
- Updated the admin email save button to match the stronger button styling used by the other email save buttons.
- Added a Save All Emails button at the bottom of Email Settings to save admin, customer, and rule-specific email templates together.
- Removed the separate save area warning helper from the rule-specific approved email templates card.

Version 2.2.12
- Moved the licence form into the Plugin Information column below the licence/status table.
- Added a compact Support panel above Debug Tools with request type, summary, reproduction notes, data authorisation checkboxes, and external HTML support content.
- Added Rule Debugging helper text explaining the difference between stored matched rules and the live current rule preview.
- Made email settings save buttons clearer with section-specific labels, helper text, and stronger visual separation.
- Added support-content.html for editable support guidance.

Version 2.2.11
- Moved Debug Tools into the Licence card below the licence actions, with a separator.
- Moved Latest Changelog Entries into the third About & Licence column.
- Added a Coming Soon card loaded from help/coming-soon-content.html.
- Fixed the Forecast Add Holiday button by targeting the current holiday table row container.
- Added helper notices to Return Settings sections and the Rules Default Rules / Custom Rules cards.
- Reworked the Rules screen into collapsible Default Rules and Custom Rules cards while keeping Rule Sources nested inside Custom Rules.
- Fixed rule-specific approved email template editors by giving each editor a unique ID.
- Fixed rule-specific email template saving so it returns to Email Settings and uses the primary save button style.

Version 2.2.10
- Renamed the customer-paid Shippo return method default to Purchase Return Label.
- Removed the forced frontend override that changed the saved customer-paid method title to Print Return Label.

Version 2.2.8
- Fixed customer-paid return label frontend wording so the method displays as Print Return Label.
- Changed paid label checkout from a fee line to a single hidden RMA Pro return label product line.
- Added/confirmed hidden product categorisation under RMA Pro and product meta tagging.
- Added separate customer/admin WooCommerce email suppression controls for return label orders.
- Added order display numbering for label orders using RMA-prefixed references.
- Added stronger RMA Pro source/origin handling for WooCommerce order lists where supported.

Version 2.2.6
- Moved the paid-label success note below the forecast message.
- Added customer-paid return label markup settings for fixed or percentage uplift.
- Applied the configured uplift to displayed Shippo rates and WooCommerce payment orders.
- Set paid return label WooCommerce orders to show RMA Pro as their created-via source where supported.

Version 2.2.5
- Fixed customer-paid Shippo label generation after payment by matching the refreshed shipment rate using the selected service token.
- Updated the paid-label payment success redirect to include the existing return forecast messaging.

Version 2.2.4
- Fixed customer-paid Shippo checkout by submitting the selected service token instead of a short-lived Shippo rate ID.
- This lets the plugin refresh live rates during payment-order creation and choose the matching currently available service.

Version 2.2.3
- Fixed customer-paid return label submissions for existing pending RMAs so selecting a paid Shippo service now creates/reuses the WooCommerce payment order and redirects to checkout instead of only showing the return request updated message.
- Updated the frontend submit button text to "Continue to secure payment" when the customer-paid Shippo method is selected.

Version 2.2.2
- Fixed customer-paid Shippo service selection on the return form so rate options are visibly selectable and update the chosen rate correctly.
- Bumped frontend asset version so the updated return form JavaScript and CSS load cleanly.

Version 2.2.0
- Added customer-paid Shippo return label flow using native WooCommerce payment/order-pay checkout.
- Added built-in Customer-paid return label return method, service rate selection on the returns form, payment order creation, and post-payment label generation/emailing.
- Linked paid return label WooCommerce orders back to the RMA.
- Added a post-payment return message.

Version 2.1.24
- Split Backup/Restore Rules into Default Rules and Custom Rules.
- Custom Rules backup now explicitly includes reusable rule sources and builder rules.
- Restore supports older backup files that used the combined Rules section.

Version 2.1.23
- Added override activity logging for saved, cleared, bulk-cleared, and override settings changes.
- Expanded Backup/Restore to include Return Settings, Forecasting, Integrations, and Overrides.
- Improved backup export handling so selected settings and overrides can be downloaded to a JSON file.
- Improved backup restore handling so selected settings and overrides can be restored from a JSON file.

Version 2.1.22
- Bumped the plugin asset version so admin CSS cache is refreshed correctly.
- Strengthened the compact Requests stats card CSS so the mobile/tablet layout applies correctly.

Version 2.1.21
- Improved the Requests stats layout for WordPress mobile/tablet admin viewports so stat cards render as compact two-column cards instead of full-width stacked cards.
- Kept the Show more stats toggle inside the main stats card.

Version 2.1.20
- Improved the Requests stats layout on mobile by making stat cards smaller and using a compact two-column grid.
- Moved the Show more stats toggle inside the main stats card instead of rendering it as a separate card.

Version 2.1.19
- Added default content for the Customer - Return label email template.
- Manual Shippo label generation now logs whether the customer email was sent or failed.
- Added Resend Label button on RMA records with existing Shippo labels.
- Resend Label sends the Customer - Return label email template with the saved PDF attached.

Version 2.1.18
- Added a dedicated customer email template for approved Shippo returns with the prepaid label attached.
- Kept manual Shippo label generation on its own separate customer email template.
- Updated approval flow so auto-generated Shippo labels are created before approval emails are sent, allowing the attached-label approved email to be used.
- Added help text to Customer Emails explaining the difference between auto-approved Shippo label emails and manually generated Shippo label emails.
- Added the new approved-with-label Shippo template to Email Settings and test-email handling.

Version 2.1.17
- Fixed the manual Shippo label button so it only renders disabled when the Shippo sender address is incomplete.

Version 2.1.16
- Clarified that Shippo labels can be manually generated from any RMA record, even if the customer selected a different return method.
- Renamed the manual action button to Generate Shippo Return Label for clearer intent.

Version 2.1.15
- Improved Overrides tab bypass option labels for clearer wording.
- Added spacing between the returned items card and Return Label card on the RMA record page.
- Added a new Custom Rules action to stop processing lower-priority rules after a matched rule.

Version 2.1.14
- Fixed a front-end fatal error triggered when an override-enabled order loaded the return form.
- Removed an invalid variable reference from the staged return form renderer so override bypass testing works again.

Version 2.1.13
- Added a dedicated override checkbox for bypassing front-end eligibility checks, enabled by default for new overrides.
- Fixed override handling so eligibility-blocking rules can be bypassed correctly on the front-end return journey.
- Added the new eligibility bypass state to the Overrides tab list and save flow.

Version 2.1.12
- Removed the Order Override panel from the single RMA record page.
- Restored equal-height behaviour for the top left and right RMA record columns.

Version 2.1.11
- Fixed the RMA record page layout after the override form was moved back to the Overrides tab.
- Restored the two-column record layout structure, separate Activity Log and Status key panels, and the Return Label block in the left column.

Version 2.1.10
- Restored the Overrides tab in the main admin navigation.
- Moved override configuration back out of the single RMA record page.
- Added override bypass options to the Overrides tab, including default rules and Custom Rules bypass choices.
- Kept the single RMA record page focused on summary-only override information with a direct link to manage the override in the Overrides tab.

Version 2.1.7
- Moved the Shippo API success/error notice and sender address validation notice inside the Shippo card on the Integrations tab.

Version 2.1.6
- Fixed fatal PHP parse error caused by the Shippo onboarding notice string.
- Preserved the Shippo onboarding message, auto-hide behaviour, and webhook helper spacing changes.

Version 2.1.5
- Added Shippo onboarding message at the top of the Shippo card, hidden after successful API validation.
- Added extra spacing between Shippo webhook helper text blocks.

Version 2.1.4
- Renamed "Phase 2 routing and automation" to "Routing and Automation".
- Added a line break between the Shippo webhook helper text lines for readability.

Version 2.1.3
- Moved the Shippo automatic connection-test note above the Shippo save button.
- Added clearer webhook helper text explaining Generate, save, the fixed Shippo endpoint, and manual testing with the x-rit-rma-secret header.

Version 2.1.2
- Moved the Shippo auto-test save message inside the Shippo card.
- Added a dedicated Save Shippo Settings button inside the Shippo card.

Version 2.1.1
- Moved the Phase 2 Shippo routing and automation controls inside the Shippo integrations card.
- Added a Generate button for the Shippo webhook secret field using a strong random value.
- Collapsed Shippo discovery debug sections by default behind a toggle.
- Clarified that auto-generate on approval only applies when the Shippo return method is selected and no label exists.

Version 2.1.0
- Added Phase 2 Shippo routing controls with preferred service selection by region (UK, Europe, USA, rest of world).
- Added heavy parcel override so shipments above a configured weight can use a different enabled Shippo service.
- Added optional automatic Shippo label generation when a Shippo return is approved.
- Added optional secure customer self-service Shippo label link generation.
- Added Shippo tracking webhook endpoint with secret validation and RMA tracking status updates.
- Added tracking status to the return label panel on the RMA record.
- Preserved existing Shippo allowed-services flow and refreshed service catalog compatibility.

Version 2.0.8
- Added Shippo sender address validation notices on the Integrations tab.
- Disabled Shippo service refresh until the required sender address fields are completed.
- Added an inline RMA warning.
- Blocked label generation when the Shippo return address is incomplete.

Version 2.0.7
- Fixed Shippo service discovery so the Integrations screen now stores region-by-region debug data from shipment-rate lookups.
- Added Shippo discovery debug output showing status, rates found, ignored messages, request route, and sample service tokens/messages.
- Improved Shippo service refresh validation so incomplete return-address settings show a clear admin error instead of silently showing no services.

Version 2.0.6
- Added Shippo allowed-services selection on the Integrations tab.
- Added Shippo service discovery and refresh for sample United Kingdom, Europe, and USA returns.
- Label generation now filters to valid allowed Shippo service tokens and chooses the cheapest matching enabled rate.
- Improved handling of carrier warning messages so unrelated unsupported services do not block valid rates.

Version 2.0.6
- Moved the Activity Log and Status key below the two-column RMA detail area so they no longer remain trapped inside the right column.
- Improved Shippo API error reporting to include the HTTP status, active mode, and returned Shippo response body.
- Improved unexpected Shippo test response handling so the raw response is shown for debugging.

Version 2.0.3
- Fixed Shippo API testing to use the currently entered settings during save/test instead of only the previously saved token.
- Fixed Shippo connection validation so successful tests no longer show an unexpected response.
- Restored a clearer two-column RMA record layout using explicit primary and secondary admin columns.

Version 2.0.2
- Changed the built-in Shippo return method default title to Shippo.
- Hid the built-in Shippo return method until Shippo is enabled and the saved connection test succeeds.
- Added automatic Shippo connection validation when Integrations are saved and a form-based API test button that tests the entered credentials.
- Fixed the single RMA admin layout so the detail view returns to a two-column grid.
- Prevented Shippo label generation from using an unvalidated integration state.

Version 2.0.1
- Fixed the built-in Shippo return method being duplicated each time Return Methods were saved.
- Fixed the Shippo return method key being preserved correctly instead of being re-saved as a new custom return method.
- Added a Shippo API connection test button on the Integrations tab.
- Made the built-in Shippo return method clearly non-removable in Return Methods.

Version 2.0.0
- Added a new Integrations tab with Shippo settings for test/live API keys, return address details, and default parcel dimensions.
- Added a built-in Shippo return method that cannot be removed, can be renamed for customers, and only becomes available on the frontend when Shippo is enabled.
- Added Shippo-powered return label generation on the RMA record page, including local PDF storage, tracking details, activity logging, and WooCommerce order notes.
- Added a dedicated customer return label email template that sends automatically when a Shippo label is generated and attaches the saved PDF label.
- Added shipping label storage to the RMA database so generated labels, tracking data, and local files remain linked to the request.

Version 1.9.55
- Fixed broken Requests page layout caused by the bulk action wrapper remaining open around the table.
- Fixed single RMA page layout by restoring the record view to a full-width single-column layout.

Version 1.9.54
- Fixed broken admin layout on Requests and single RMA pages caused by invalid closing markup in the stats and override panels.
- Fixed email template cards so the disabled grey state updates immediately when Enable this email is ticked or unticked.
- Repackaged.

Version 1.9.53
- Made email template cards update their disabled styling and badge immediately when the Enable this email checkbox is ticked, before the settings are saved.
- Kept the order override panel collapsed by default and automatically opened it when an active override already exists.
- Updated the order override helper text.
- Split the override actions into inline buttons, with Update Override using the primary button style.

Version 1.9.51
- Split override rule bypassing into separate Default Rules and Custom Rules options with clearer helper text and activity logging.
- Fixed email template enable toggles by using explicit presence markers instead of same-name fallback fields, so template enable states save reliably.

Version 1.9.50
- Fixed email enable toggles so checked boxes save reliably by disabling same-name fallback hidden fields on submit.
- Styled Admin Emails and Customer Emails wrappers to match the main accordion UI.
- Added an override option on the RMA record page to also bypass default rules and Custom Rules logic, with updated helper text and activity logging.

Version 1.9.49
- Restyled the Requests stats area so the expandable stats block sits inside one white card.
- Changed the toggle label to Show more.
- Added visible collapse arrows for collapsible admin cards such as Order Override.
- Moved order override save and clear actions fully onto the RMA record page.
- Added a clear button.
- Kept redirects on the same RMA record.
- Logged override save/clear actions in the request activity log.
- Removed the standalone Overrides admin tab from the menu.
- Split Email Settings into separate Admin Emails and Customer Emails collapsible sections and saved them through separate forms to avoid large-post issues affecting enable toggles.
- Kept email, stats, and settings collapse states tied to remembered browser state.

Version 1.9.48
- Moved order override controls onto the RMA record page inside a collapsed panel with help text.
- Made the Requests stats area collapsible and remembered the last expanded/collapsed state.
- Made Return Settings sections remember their expanded/collapsed state.
- Removed legacy resolution and reminder controls from General Settings and kept them in the correct tabs only.
- Moved return reminder timing controls into the two reminder email templates in Email Settings.
- Aligned the Renew Licence button with the other licence actions and softened the Remove Licence button styling.
- Updated the rule debugging fallback message for clarity.
- Added spacing above the refund-flow explanation below Refund and Complete.

Version 1.9.46
- Added top padding inside Return Settings section bodies so the first return-method card no longer sits flush against the section border.
- Increased the Return Settings section arrow size so it matches the larger collapse indicators used on the return-method rows.
- Reordered the original-payment refund summary on the RMA record page to show Total refundable balance first, followed by Item value, Shipping value, Already refunded, and Remaining item value.
- Updated the partial-refund notice text to say the admin can still refund any remaining balance.
- Added a horizontal divider under the Rule Debugging intro text to separate the explanation from the debug output.
- Moved the WooCommerce native refund-flow explanation to below the Refund and Complete button.
- Reworded the empty matched-rules message so the older-record explanation is clearer.
- Removed the remaining Re-check Licence button from About & Licence so Check Licence is the only manual sync button.

Version 1.9.45
- Removed the duplicate Re-check Licence button from About & Licence so Check Licence is the single manual licence sync action.
- Added a new Return Settings tab and merged Resolutions, Return Methods, Return Windows, and Forecast into one combined settings screen.
- Moved the resolution method options, custom resolution methods, and store credit bonus amount out of General Settings into the new Return Settings tab.
- Added collapsible section panels to the new Return Settings screen so each settings area can be expanded and managed independently.

Version 1.9.44
- Changed Backup/Restore access so the page still loads when the licence is paused, cancelled, expired, inactive, invalid, deactivated, or trial-expired, but all backup actions remain disabled until the licence is active.
- Updated Backup/Restore messaging to explain that an active licence is required for export and restore features.
- Allowed the Backup/Restore tab to remain visible in read-only mode while the rest of the locked backend stays restricted.

Version 1.9.43
- Fixed rule-specific approved email template cards so the template name falls back to the rule name when no custom email name has been set.
- Fixed the rule-specific approved email template Email name field so it also defaults to the rule name instead of appearing blank.

Version 1.9.42
- Fixed the Rules criteria category and product pickers properly by allowing the admin AJAX search handlers to read POST requests again, so matches can be found and added back as selection chips.
- Updated backend licence locking so expired licences no longer lock the admin area. Renewal notices still show, but paused, cancelled, inactive, and trial-expired states remain locked.
- Updated backend lock messaging to reflect that expired licences are warned but not blocked.

Version 1.9.39
- Fixed the Rules criteria category and product pickers again by changing their admin AJAX search requests to submit via POST for more reliable admin-ajax handling.
- Updated backend licence locking so only an active full licence unlocks the admin area. Paused, cancelled, expired, inactive, and trial-expired states now stay locked.
- Locked RMA records and all other backend tabs when the plugin is locked, so only the About & Licence tab remains accessible.
- Restyled Default Email Templates into the same white card layout as the rule-specific template area for a more cohesive Email Settings page.
- Moved Available Placeholders into a collapsible panel.
- Added guidance explaining that placeholders are dynamic tags which should be left in double curly brackets.

Version 1.9.38
- Removed frontend licence lock enforcement so the customer-facing returns portal remains available even when the licence is trial expired, expired, paused, or otherwise inactive.
- Kept backend licence locking in place so admin settings and premium management areas remain restricted when the licence is not active.
- Updated exchange search result markup and styling again to reduce inherited emphasis from theme typography and use a lighter, smaller result label.

Version 1.9.37
- Strengthened the Exchange-step remaining-balance toggle styling so theme CSS cannot misalign the segmented control.
- Reset exchange search result typography more aggressively so XStore and other theme rules no longer force oversized or overly bold product rows.

Version 1.9.36
- Fixed the remaining-balance segmented toggle so both options align evenly across the full control width on the Exchange step.
- Reduced exchange search result text size and weight so product rows no longer inherit oversized theme typography.

Version 1.9.35
- Changed the frontend mixed-resolution behaviour so Refund and Store Credit options are no longer greyed out or blocked during selection.
- Added inline validation so the portal shows “You can’t mix refund and store credit in the same request.” when both are chosen and stops the customer progressing to the next step.

Version 1.9.34
- Greyed out blocked resolution methods on the customer portal once Refund or Store Credit has been selected.
- Added a tooltip for blocked resolution methods explaining why they are unavailable.
- Added a single inline message on the resolution step: “You can’t mix refund and store credit in the same request.”

Version 1.9.33
- Centred the portal success heading in the forecast notice.
- Prevented mixing Refund and Store Credit resolutions in the same return request.
- Fixed excluded frontend items so Not eligible only appears once.
- Improved refund gateway messaging for zero-value, manual, and test orders.
- Renamed Stored Rule Matches On This RMA to Rules Matched.
- Clarified the rule-debug fallback messages.

Version 1.9.32
- Added a Save Rule Sources button to the reusable criteria area on the Rules page.
- Added confirmation prompts before removing meta criteria rows.
- Fixed excluded frontend items so Not eligible only shows once instead of duplicating across quantity and reason columns.
- Added days support to VIP order-count and spend criteria.
- Changed frontend selected-item values to use tax-inclusive totals.
- Added a separator under Rule Debugging.
- Clarified the stored/current rule preview wording.
- Improved gateway status messaging for £0.00 orders and inactive/missing original gateways.

Version 1.9.31
- Fixed rule source meta criterion add button.
- Improved excluded item handling in the customer return form so blocked items stay visible as not eligible.
- Added rule-specific approved email template support and Email Settings panels.
- Tidied duplicate rule notices and rule actions UI.

Version 1.9.30
- Tightened the Default Return Reasons layout so the label field is shorter and the Remove button sits to the right of Auto Approve.
- Removed duplicate Rule Sources and no-action notices on the Rules page.
- Restyled Rule Sources back to a light green background.
- Updated the explainer copy.
- Added Save Rule to each rule card and aligned Remove Rule to the far right at matching button size.

Version 1.9.29
- Improved rules builder guidance, picker search, default rule widths, no-action warnings, and rule area styling.

Version 1.9.28
- Reduced the admin menu icon size so the simple RMA logo fits the wp-admin menu cleanly.
- Centred the main customer-facing forecast lines for the return window and cancellation deadline.
- Removed the customer-facing estimated processing completion date because it could be misleading before the parcel is actually received.
- Full plugin debug logging continues to capture request starts and PHP warnings/errors for RMA-related requests.

Version 1.9.27
- Added real full-plugin debug logging so RMA-related requests now write to a dedicated plugin log file when Full Plugin Debug Mode is enabled.
- Improved customer forecast messaging with bold key dates/values.
- Centred processing details.
- Used ordinal day formatting such as 1st, 2nd, 3rd, and 26th.
- Switched the admin menu icon to the simple logo asset.
- Added plugin logos for update/details metadata.
- Rebuilt the Help page with expanded HTML documentation, a feature table, screenshot placeholders, and logo header.

Version 1.9.26
- Reduced the Regal IT licence server HTTP timeout from 20 seconds to 5 seconds so stale or unreachable licence checks fail faster and do not hold admin requests for as long.

Version 1.9.25
- Softened the post-update recovery notice so it only appears when a duplicate older RMA Pro plugin folder is still present.
- Recovery notices no longer appear after a clean update when no duplicate plugin copy exists.

Version 1.9.24
- Fixed the About & Licence panel so Latest version always prefers the latest package version returned by the licence server plugin-info response.
- Renamed Plugin version to Current version.
- Made the value bold.
- Current version now shows green when it is the latest version and red when it is older.
- Made Latest version bold for clearer scanning.

Version 1.9.23
- Fixed the About & Licence panel so Latest version falls back to package metadata when no newer update is available.

Version 1.9.22
- Added an admin warning on all wp-admin pages when an update is available but the licence is inactive, explaining that the licence must be active to download updates.
- Added recovery logic to reactivate the canonical plugin folder after updates so older bad-folder installs do not stay pointed at missing plugin files.
- Updated the debug settings saved message to read "Debug settings saved".
- Renamed "Enable Whole Plugin Debug Mode" to "Enable Full Plugin Debug Mode".

Version 1.9.21
- Moved the Refund RMA Convert Resolution section to the bottom of the resolution area so it matches the Store Credit layout.
- Updated the debug settings success message to use a generic label.
- Renamed Whole Plugin Debug Mode to Full Plugin Debug Mode.

Version 1.9.20
- Added activation hardening so the plugin now blocks activation when the plugin folder name does not match rma-pro-for-woocommerce.
- Added an admin warning when the plugin is running from the wrong folder name so update and manual-upload issues are easier to spot.

Version 1.9.19
- Added a Latest Version row under the installed plugin version on the About & Licence page.
- Added admin controls on the RMA record page to convert a full RMA from Refund to Store Credit, or from Store Credit to Refund, before any refund or store credit has been issued.
- Blocked Store Credit + Bonus from being converted into a refund.
- Changed refund summary wording from tax included where applicable to including tax.
- Updated Remaining Item Value so it only shows after a refund has already been recorded against that RMA.

Version 1.9.18
- Increased the spacing between the return form and the forecast message shown underneath it on the customer portal.
- Changed the admin refund-complete button label to "Refund and Complete".

Version 1.9.17
- Added extra spacing between the return form and the forecast message shown underneath it.

Version 1.9.16
- Switched the updater client to use the live /update endpoint on the licence server.
- Kept plugin-info lookups aligned with the licence server so the standard WordPress plugin details popup can load correctly.

Version 1.9.15
- Added a separate Whole Plugin Debug Mode toggle under Debug Tools.
- Updated the About & Licence page so the main heading now shows Licence with a smaller Attach or Remove Licence heading beneath it.
- Added a centred Renew Licence button under the licence action buttons for future linking.

Version 1.9.14
- Added a native WordPress updater client so RMA Pro can detect updates from the Regal IT licence server.
- Added support for the standard plugin details popup using server-provided package information.
- Update checks are now cached and cleared automatically when the licence key changes.

Version 1.9.13
- Added an admin-wide licence notice when an active licence is nearing expiry and a persistent admin-wide notice when a licence has expired.
- Changed About & Licence so Trial now shows in amber and Paused now shows as Paused in amber instead of appearing as Trial in red.
- Locked Backup/Restore while the site is in trial mode.
- Added a clear message explaining that a full licence is required to unlock it.
- Changed empty Check Licence and Re-check Licence actions to refresh trial reporting with the licence server instead of showing licence-key errors.

Version 1.9.12
- Improved the trial-report status message so server-side database errors are shown in the plugin when a trial report cannot be stored.
- Prepared for the licence server schema-upgrade fix so trial installs can register correctly after the server plugin is updated.

Version 1.9.11
- Added trial-install reporting back to the Regal IT licence server for unlicensed installs.
- Trial reports now send the site domain, install date, trial expiry date, and plugin version.
- Added cached trial-report timing so the plugin reports on initial setup and then refreshes periodically without spamming the server.

Version 1.9.10
- Fixed the plugin package structure so WordPress upgrades the existing plugin instead of installing it as a separate plugin.
- Reduced the Customer Notes and Private Notes field heights by around 30% on the RMA record page.
- Updated the Pending status guidance to explain that exchange requests should be cancelled and re-submitted instead of edited.

Version 1.9.9
- Added a full-width Rule Debugging panel to the bottom of the RMA record page so staff can see stored rule matches and preview which current rules match that specific RMA.
- Updated the original payment refund summary so Order refundable balance is now labelled Total refundable balance and appears above Remaining item value.
- Removed the Recommended total line from the original payment refund summary.

Version 1.9.8
- Aligned the Latest Changelog Entries card with the other About & Licence cards.
- Made the debug log path appear immediately when Enable Debug Mode is ticked.

Version 1.9.7
- Removed the Trial Lock Test section from About & Licence.
- Added a manual Re-check Licence button to force a fresh server validation.
- Added Registered Domain to the licence summary.
- Added a hidden licence debug mode with logging to the uploads folder and on-screen log path when enabled.

Version 1.9.6
- Removed the Licence server row from the About & Licence page.
- Removed the Grace period ends row from the About & Licence page.
- Removed the licence API explanatory line from the About & Licence page.
- Shortened the About & Licence intro text by removing the licence server/grace-period wording.

Version 1.9.5
- Replaced the dummy local licence checker with live activation, validation, and deactivation against the Regal IT licence server at https://regal-it.co.uk.
- Added cached licence state with a 3 day grace period when the licence server cannot be reached.
- Updated lock logic so a fresh trial install locks after 7 days if no valid licence has ever been activated.
- Allowed previously activated licences to continue after expiry with updates disabled.
- Added a new Forecast master toggle so all forecast messaging can be turned on or off from the Forecast tab.
- Moved forecast-only saving fully onto the Forecast tab.
- Fixed forecast saves so they stay on the Forecast page.
- Replaced the holiday popup date picker with native date fields to avoid the broken mobile calendar layout.
- Updated frontend and email forecast messaging so it falls back cleanly when forecasting is disabled.

Version 1.9.4
- Fixed the customer forecast message so it shows below the returns form before submission and still appears in the success message after submission.
- Removed an incorrect forecast output block from the order lookup form.
- Improved the Forecast holiday date picker behaviour and mobile layout so holiday rows stack cleanly on smaller screens.
- Added stronger date picker popup styling and z-index handling for wp-admin.

Version 1.9.3
- Removed the generic forecast notice at the top of the customer returns portal.
- Moved the pre-submission forecast message to below the return form.
- Kept forecast messaging in the success message area.
- Fixed Forecast tab saving so holiday rows and forecast settings are stored correctly.
- Added holiday date pickers in wp-admin using the site's WordPress date format.
- Simplified Requests bulk-action labels to concise status/action names such as Pending, Approve, Received, Complete, Reject, Cancel, and Delete.
- Updated the admin refund completion button label to Title Case and matched the green completion button styling.

Version 1.9.2
- Added a new Forecast admin tab.
- Moved Return Process Time into the Forecast tab.
- Added Holiday forecast rows with Name, From, To, and Public Holiday options plus customer-facing help text.
- Forecast calculations now skip configured holiday dates when estimating processing completion.
- Added dynamic customer-facing forecast messaging on the portal, submission success message, approved email, and return reminder emails.
- Added public-holiday forecast notice support for approved and reminder email templates.
- Added default bodies for the First Return Reminder and Final Return Reminder email templates.
- Added General Settings help text explaining that enabled return reminders appear in Email Settings.

Version 1.9.0
- Added a clearer About & Licence screen state with a persistent green tick for valid licences and a red cross when the site is unlicensed, disconnected, or expired.
- Updated licence status styling so Active shows in bold green and Expired shows in bold red.
- Added one-year dummy licence expiry tracking with a visible Licence ends date and licence days remaining value.
- Changed dummy licence checking so invalid keys are not kept as attached licences.
- Removed the Store Credit shipping and Store Credit + bonus shipping settings from General Settings because shipping inclusion is already handled per RMA record.
- Tightened override cleanup so linked overrides are removed automatically when the related return is completed, cancelled, or rejected.
- Applied the override cleanup to wallet-credit and refund completion flows.

Version 1.8.32
- Added a new About & Licence admin tab showing the installed plugin version, current trial/licence status, attached licence summary, and the latest three changelog entries.
- Added temporary dummy licence handling with a Licence key field, Check Licence action, Remove Licence action, and a built-in test key for development: RIT-RMA-PRO-TEST-LICENCE.
- Added a 7-day free-trial framework with stored install date tracking and a temporary "7 days past" test toggle to simulate licence expiry without waiting.
- Added licence lock behaviour so protected settings areas cannot be saved once the trial has expired without a valid licence attached.
- Added frontend portal lock behaviour so the returns portal and related submission/ajax actions show a licence-expired style error instead of allowing new return activity.

Version 1.8.31
- Replaced the duplicate double-arrow collapse indicators with a single clear triangle indicator and hid the native browser marker on collapsible admin rows.
- Fixed the frontend return-method markup and styling again using explicit radio/label pairs so cards render full width without overlapping text.
- Fixed return-method selection syncing on the frontend so the hidden submitted value updates when the customer changes method.
- Fixed Backup/Restore export and restore forms so they now submit through the plugin settings handler and the Download Backup File button generates a JSON backup file correctly.

Version 1.8.29
- Increased the size of double-arrow indicators across collapsible rows to make expand/collapse controls clearer.
- Fixed the frontend return-method card markup and styling so methods render cleanly without overlapping.
- Set Rule Sources to be closed by default on the Rules page.
- Renamed the Activity tab table column from Date to Timestamp.
- Added a new Backup/Restore tab and menu page.
- Added backup export so admins can choose which supported sections to include in a backup file.
- Added backup restore so admins can upload a backup file and restore only the selected sections.

Version 1.8.28
- Changed the Activity tab table heading from Date to Timestamp.
- Updated Return Methods to use collapsible cards with open/close indicators, enable toggles, and disabled badges.
- Added toggle indicators to collapsed Email Template rows.
- Fixed frontend return method card markup and styling to prevent jumbled layout.
- Tightened return method filtering so rule-based Allowed Return Methods are applied consistently in the frontend method list.

Version 1.8.27
- Moved the Delete Record action to the bottom-left of the single RMA screen outside the data tables so it no longer affects the Status Key layout.
- Renamed Date Filed to Submitted on the Requests list, export, and single RMA summary for clearer wording.
- Renamed activity log Date columns to Timestamp on the Activity tab and single RMA activity table.
- Moved the Activity Log Retention help text to sit underneath the dropdown in General Settings.
- Added a new Return Methods admin tab and menu where return method options can be added and edited with a title and description.
- Added Allowed Return Methods to the Rules builder so rules can limit which return methods customers may choose.
- Updated the frontend return flow to load the allowed return methods dynamically and require the customer to choose one before submission.

Version 1.8.26
- Removed the Matched Rules column from the Requests page to keep the list cleaner now that Rule Applied is shown on the single RMA record.
- Moved the Delete Record action outside the Activity Log card and restyled it as a red danger button.
- Fixed the Delete request bulk action so selected RMA records are deleted correctly from the Requests page while WooCommerce order notes remain untouched.
- Renamed Log Retention to Activity Log Retention in General Settings.
- Removed the extra Clear logs helper note.

Version 1.8.25
- Removed the legacy Matched rules row from the single RMA record screen now that Rule Applied is the primary rule display.
- Updated rule preview loading so it now shows the total match count, returns the most recent 10 matches first, and can load 20 more at a time with a Show more link.
- Added a Delete Record button to the single RMA screen beneath the activity log with a confirmation warning that activity data for that RMA will be lost while WooCommerce order notes remain.
- Added a Delete request bulk action on the Requests screen with a confirmation warning that activity data for deleted RMA records will be lost while WooCommerce order notes remain.
- Changed log retention so it now applies only to the Activity tab, with clearer guidance in General Settings that per-RMA activity remains unless the RMA record itself is deleted.
- Updated Clear Activity so it now requires confirmation and only clears entries from the Activity tab while preserving activity on each RMA record and preserving order notes.

Version 1.8.24
- Switched the visual hierarchy of the Rules and Default Rules headings so Default Rules now carries the stronger heading style.
- Added a visible manual Priority field to each rule so staff can type priorities directly and save to reorder rules more easily.
- Added a Preview button to each rule to check which current RMA records would match that rule.
- Added a Rule Applied line to the RMA detail screen so staff can quickly see whether Default rules applied or which custom rule took precedence.

Version 1.8.23
- Rebuilt the Rules tab changes from the clean 1.8.20 base after the previous 1.8.22 package was found to be corrupted.
- Moved the Default Rules heading and description into the main content area and kept the section aligned correctly.
- Reworked the Rules tab layout so Exclude Products and Exclude Categories sit under Return Reasons.
- Moved Rule Sources into the top of Custom Rules.
- Styled Rule Sources with a light green background.
- Added expandable grouped criteria sections with triangle indicators.
- Improved collapsed picker summaries for categories and products.
- Moved the custom customer message and block-return options to the top of the Action section.
- Added disabled styling with a badge for collapsed disabled rules.
- Added an optional custom customer message toggle per rule.
- Updated the frontend to show that returned message instead of the generic available resolutions error when a rule blocks the return.

Version 1.8.20
- Standardised customer-facing and admin-facing UI labels to Title Case across the plugin, including buttons, tabs, menu items, section headings, and default email template labels.
- Corrected the plugin header and runtime version so WordPress recognises this as a newer release.

Version 1.8.19
- Fixed the Requests page bulk-action confirmation script so the request table renders again.
- Restored admin footer script output on the Requests page, which also brings back the status chart.

Version 1.8.18
- Fixed the Requests page bulk actions dropdown so all requested actions are available.
- Added bulk actions for Mark as pending, Approve Return, Mark as Received, Complete Return, Reject return, and Cancel request.
- Added a second, stronger confirmation prompt for bulk Complete Return, warning that refunds, store credit, exchange release, restocking, and emails may be triggered and may not be reversible.
- Applied the correct backend handling for emails triggered by the added bulk status actions.
- Applied the correct backend handling for exchange completion in the added bulk status actions.
- Applied the correct backend handling for exchange cancellation in the added bulk status actions.
- Applied the correct backend handling for restocking in the added bulk status actions.
- Applied the correct backend handling for override cleanup where relevant in the added bulk status actions.

Version 1.8.16
- Added wallet running balance to the activity ledger and recorded wallet refunds back to original orders as explicit per-order ledger entries.
- Added request bulk actions for Mark as Received and Complete Return. Complete Return bulk actions only run on requests already marked Received.
- Added test recipient fields and Send Test Email buttons to every email template in Email Settings.
- Updated email rendering so plain URLs are sent as clickable hyperlinks and migrated default email template links to anchor tags.
- Disabled email templates now collapse by default again and show a Disabled label in the header.

Version 1.8.15
- Fixed exchange completion so an already-created held exchange order is now released from On Hold to Processing when the RMA is completed.
- Changed the admin action label from "Clear and Complete" to "Complete Return" and updated related notices.
- Fixed restocking so schema-v2 RMA item payloads restock correctly.
- Added automatic restock processing to store-credit issuance and original-payment refunds when Restock Items is enabled.
- Fixed wallet balance refunds so fully traceable RMA credits can still be refunded even if older consumed wallet entries were non-traceable.

Version 1.8.14
- Updated the return workflow meaning so Approved means approved for return.
- Updated the return workflow meaning so Received means the parcel is back.
- Updated the return workflow meaning so Completed means the item was checked, cleared and fully processed.
- Updated the single RMA screen buttons to use Approve Return, Mark as Received, and Clear and Complete.
- Removed the standalone Complete button from the RMA record screen.
- Updated admin notices, status key text, help content, and default email wording to reflect the revised workflow.
- Changed exchange handling so replacement orders are now created immediately when the request is submitted and placed On Hold to reserve stock.
- Updated exchange completion so the held replacement order is only released when the RMA is cleared and completed.
- Added automatic cancellation of linked held exchange orders when an exchange RMA is rejected.
- Prevented customer editing of pending exchange requests once exchange stock has already been reserved.
- Updated reporting/rule checks so Received RMAs are treated as active returns alongside Approved and Completed where relevant.
- Restricted store-credit and original-payment completion actions so they are only shown once the return has been marked Received.

Version 1.8.13
- Fixed a critical error on the single RMA admin screen caused by a missing wallet lookup method when linking the customer email to wallet activity.
- Added a dedicated wallet-by-email helper so wallet links can be shown safely without creating a new wallet record.

Version 1.8.12
- Linked wallet email addresses in the Wallets tab directly to the wallet activity view.
- Linked the customer email on the single RMA admin screen to the wallet activity view when a wallet exists for that customer.
- Styled the Issue Credit and Mark Complete button to match the green approve-and-complete action styling.
- Removed Approve Only and Approve and Complete from store-credit RMAs.
- Removed Approve Only and Approve and Complete from already-approved RMAs and replaced them with a single green Complete button.
- Limited the exchange approval warning block so it only shows when the approval actions are actually available.

Version 1.8.11
- Added wallet activity drill-down from the Wallets tab so staff can inspect a single wallet in detail.
- Added a wallet ledger view showing issued credit, manual adjustments, coupon redemptions, linked RMAs, and linked original orders where available.
- Added an orders-using-credit section so staff can see which orders used wallet-generated coupons.
- Added a refund breakdown preview showing which original order(s) would be refunded for the wallet's current remaining balance.
- Added a new Refund Remaining Balance action that attempts to refund the wallet balance back to the original payment method(s) using the originating order(s).
- Wallet balance refunds are only allowed when the remaining balance can be traced back to RMA-issued credit with original orders that still have refundable value available.
- Cleaned up wallet credit and coupon methods to remove stray references that could trigger PHP notices or fatal errors.

Version 1.8.10
- Moved the Save Changes button above the exchange approval warning block on the admin RMA detail page.
- Made the Approve and Complete button semi-bold for clearer primary-action emphasis.

Version 1.8.9
- Removed the extra restock guidance sentence from the admin request screen.
- Put Approve Only and Approve and Complete on the same row with clearer spacing from Save Changes.
- Styled Approve Only as light blue and Approve and Complete as green.
- Added confirmation prompts for both approval buttons.

Version 1.8.8
- Renamed the admin Logs tab label to Activity everywhere in the plugin navigation.
- Added Step 2 missing-reason highlighting and automatic scroll to the first item missing a reason on mobile and desktop.
- Added clearer exchange approval actions in the admin request screen, including Approve Only and Approve and Complete.
- Added an approved-but-still-open notice to help staff finish requests cleanly.
- Updated exchange approval warning text to remove the word automatically and keep the action wording clearer.
- Refined the original payment refund breakdown wording so values are shorter and supporting explanations are shown beneath each line in smaller text.

Version 1.8.7
- Centred the Back and Continue buttons on mobile step screens.
- Renamed the Logs tab to Activity across the admin UI.
- Made the per-page selector on the Activity screen submit immediately when changed.
- Moved the clear-history action to the bottom of the Activity screen.
- Renamed it to Clear Activity.
- Updated activity source labels so customer entries show as Customer.
- Updated activity source labels so system-generated entries show as System.
- Updated activity source labels so manual staff actions display the acting user's name when available.

Version 1.8.6
- Made the staged step pills clickable for completed steps so customers can jump back through the flow.
- Centred the step pills on mobile for a cleaner layout.
- The order found notice now only shows on Step 2 and is hidden on later steps.
- Changed return item quantity on the front end from a free-entry number field to a dropdown limited to the purchased quantity.

Version 1.8.5
- Improved evidence-required handling on staged returns so missing evidence now highlights the upload area and scrolls the customer directly to it, especially on mobile.
- Reworked the mobile exchange-step layout so product search and selections appear before the pooled-value summary and remainder toggle.
- Updated the admin RMA detail view to show whether any remaining exchange balance will be refunded or issued as store credit.
- Added a bold red approval warning above Save Changes that spells out the exact remaining-balance action and states that it is not reversible automatically.

Version 1.8.4
- Fixed evidence-required validation so default return reasons like Faulty now correctly force evidence uploads without relying on hidden browser validation.
- Fixed staged form submission flow so missing evidence or exchange selection now returns the customer to the correct step with a visible error.
- Updated exchange help text to explain that any remaining balance is converted to store credit or refunded automatically.

Version 1.8.3
- Moved Upload evidence to sit directly underneath the item selection table in Step 2.
- Moved the customer notes field to Step 2 so supporting information is provided earlier in the return flow.
- Made the full exchange search result row clickable, not just the Add button.
- Added a customer choice for how any remaining exchange balance should be handled: store credit or refund.
- Updated exchange-step totals text so the remaining balance label changes to match the selected remainder option.
- Updated exchange approval processing so the remaining balance now follows the customer's chosen outcome.

Version 1.8.2
- Renamed customer-facing resolution label from "Original Payment Method" to "Refund" across the main plugin UI.
- Moved Upload evidence from Step 4 to Step 2 so customers can add evidence while choosing return items and reasons.
- Moved exchange product selection out of Step 4 into its own exchange step between resolution selection and return option.
- Updated staged return flow so the exchange step is only shown when at least one selected line uses Exchange.
- Kept Step 4 focused on the return option and final submission only.
- Improved Step 4 back-button behaviour so it returns to the exchange step when exchange selections exist, otherwise back to the resolution step.

Version 1.8.1
- Fixed the order lookup form being blocked by request-flow JavaScript validation.
- Request-flow JavaScript now only initialises after a valid order lookup when the staged return form is present.

Version 1.8.0
- Redesigned the frontend return flow to support per-item resolution selection instead of a single global resolution.
- Added pooled exchange basket logic so multiple exchange-marked items contribute to one exchange value pool.
- Added multi-product exchange selection with running pool used vs remaining totals.
- Remaining exchange balance is now converted to store credit automatically.
- New RMA submissions now store a forward-only schema v2 payload while older RMAs remain supported.
- Updated admin detail view to show per-item resolutions and exchange basket breakdowns more clearly.
- Updated mixed/exchange approval handling to create the exchange order from the pooled basket.
- Updated original payment refund calculations so schema v2 RMAs only refund lines set to original payment method.
- Updated store credit issuing flow so schema v2 RMAs only credit lines set to store credit or store credit + bonus.

Version 1.8.0
- Redesigned the frontend return flow to support per-item resolution selection instead of a single global resolution.
- Added pooled exchange basket logic so multiple exchange-marked items contribute to one exchange value pool.
- Added multi-product exchange selection with running pool used vs remaining totals.
- Remaining exchange balance is now converted to store credit automatically.
- New RMA submissions now store a forward-only schema v2 payload while older RMAs remain supported.
- Updated admin detail view to show per-item resolutions and exchange basket breakdowns more clearly.
- Updated mixed/exchange approval handling to create the exchange order from the pooled basket.
- Updated original payment refund calculations so schema v2 RMAs only refund lines set to original payment method.
- Updated store credit issuing flow so schema v2 RMAs only credit lines set to store credit or store credit + bonus.

Version 1.7.13
- Fixed rule-based resolution filtering on the front end by evaluating the selected return items before the customer chooses a resolution.
- Added a staged customer return flow: choose items, choose resolution, then choose return option.
- Added a resolution availability AJAX check so the Preferred Resolution list now only shows methods allowed by the matched rules.
- Improved rule matching for product-based criteria so variation items also match parent product rules correctly.
- Removed the unused criteria option for matching based on customer-selected resolution methods.
- Simplified rule actions to use allowed resolution methods only and removed the block resolution methods UI.
- Added a temporary Step 4 return option with a single customer-arranged return choice.

Version 1.7.13
- Fixed rule-based resolution filtering on the front end by evaluating the selected return items before the customer chooses a resolution.
- Added a staged customer return flow: choose items, choose resolution, then choose return option.
- Added a resolution availability AJAX check so the Preferred Resolution list now only shows methods allowed by the matched rules.
- Improved rule matching for product-based criteria so variation items also match parent product rules correctly.
- Removed the unused criteria option for matching based on customer-selected resolution methods.
- Simplified rule actions to use allowed resolution methods only and removed the block resolution methods UI.
- Added a temporary Step 4 return option with a single customer-arranged return choice.

Version 1.7.11
- Email Settings summary rows now grey out disabled templates instead of showing an enabled/disabled text label.
- Email subject preview now appears beneath the template name in the collapsed summary row.
- Admins can now edit the display name for each email template.

Version 1.7.11
- Email settings summary rows now grey out disabled templates instead of showing an enabled/disabled text label.
- Email subject preview now appears beneath the template name in the collapsed summary row.
- Admins can now edit the display name for each email template.

Version 1.7.10
- Fixed package version mismatch from the prior zip.
- Email Settings now use collapsible summary rows with enabled status and subject preview.

Version 1.7.10
- Fixed package version mismatch from the prior zip.
- Email settings now use collapsible summary rows with enabled status and subject preview.

Version 1.7.8
- Fixed Email Settings fatal error caused by calling RIT_RMA_Pro_Settings::all() instead of RIT_RMA_Pro_Settings::get_settings().

Version 1.7.8
- Fixed Email settings fatal error caused by calling RIT_RMA_Pro_Settings::all() instead of RIT_RMA_Pro_Settings::get_settings().

Version 1.7.8
- Fixed Email settings fatal error caused by calling RIT_RMA_Pro_Settings::all() instead of RIT_RMA_Pro_Settings::get_settings().

Version 1.7.6
- Added separate general settings to control whether standard store credit and store credit + bonus should include original shipping by default.
- The Issue Store Credit screen now preselects shipping based on those settings.
- Fixed the Email Settings tab fatal error by restoring the renderer.
- Added persistent stock handling preference per RMA so admins can untick Restock Items, save that choice, and have it logged.
- Cancelled RMAs no longer block a customer from filing a new return for the same order.

Version 1.7.6
- Added separate general settings to control whether standard store credit and store credit + bonus should include original shipping by default.
- The Issue store credit screen now preselects shipping based on those settings.
- Fixed the Email settings tab fatal error by restoring the renderer.
- Added persistent stock handling preference per RMA so admins can untick Restock items, save that choice, and have it logged.
- Cancelled RMAs no longer block a customer from filing a new return for the same order.

Version 1.7.6
- Added separate general settings to control whether standard store credit and store credit + bonus should include original shipping by default.
- The Issue store credit screen now preselects shipping based on those settings.
- Fixed the Email settings tab fatal error by restoring the renderer.
- Added persistent stock handling preference per RMA so admins can untick Restock items, save that choice, and have it logged.
- Cancelled RMAs no longer block a customer from filing a new return for the same order.

Version 1.7.5
- Front-end resolution label now shows the configured bonus amount, for example Store Credit + £5 bonus.
- Select styling adjusted to stop the text being cut off on the front end.

Version 1.7.5
- Front-end resolution label now shows the configured bonus amount, for example Store credit + £5 bonus.
- Select styling adjusted to stop the text being cut off on the front end.

Version 1.7.5
- Front-end resolution label now shows the configured bonus amount, for example Store credit + £5 bonus.
- Select styling adjusted to stop the text being cut off on the front end.

Version 1.7.4
- Fixed the Return windows tab fatal error by restoring a dedicated return windows renderer.
- Added a Return windows settings screen that lists WooCommerce shipping zones and allows per-zone day limits to be saved.
- Updated admin status badge colours to better match the request status pie chart colours.
- Improved Exchange Details on the single RMA page so each returned item is shown in its own card for easier scanning.
- Tightened admin menu icon rendering.
- Added a versioned icon URL to reduce stale icon caching.

Version 1.7.2
- Added pagination to the Requests page with a per-page selector and page navigation.
- Added confirmation before deleting a rule.
- Added support for custom resolution methods in General settings.
- Fixed the Return windows tab fatal error by restoring the missing renderer.
- Updated the rules UI so VIP Customer and High Risk Customer can sit on the same line.
- Increased spacing around the rule move controls.
- Updated the bundled admin menu icon.

Version 1.7.1
- Fixed the rule builder category/product pickers so multiple selections can be added correctly without the search box disappearing.
- Added product search criteria to rules with multi-select support.
- Removed the order age/date mutual exclusion logic so both can be used together again.
- Reworked VIP criteria rows so the visible fields now match the selected criterion type.
- Added clearer visual separation for Criteria and Action sections with larger headings and bordered panels.
- Replaced drag sorting in the rules UI with up/down move controls and priority re-numbering.
- Kept Rules saves on the Rules page.
- Removed the Personalised item meta keys field from the Rules page.

Version 1.7.0
- Reworked the Rules page so VIP, High Risk, and meta data criteria are now defined once outside individual rules and can then be ticked inside rules.
- Renamed High-return customer criteria to High Risk throughout the rules engine and admin UI.
- Added toggleable source sections for VIP, High Risk, and meta data criteria to keep the page cleaner when unused.
- Updated rule matching so order age and order date range behave as alternatives, with age taking priority when both are filled.
- Improved the rule editor UI with collapsed rule rows, clearer Criteria and Actions sections, drag-and-drop priority ordering, and inline rule summaries.
- Fixed rules save redirect so saving from the Rules page now returns to the Rules page.

Version 1.6.1
- Fixed a fatal error on the Rules page caused by a missing admin picker renderer method used by the rule/category/product selectors.
- Rules page now loads correctly again in wp-admin.

Version 1.6.0
- Added a working rule builder on the Rules page with priority-based matching and per-rule actions.
- Kept existing return reason evidence/auto-approve settings as the default baseline so current behaviour remains unchanged until custom rules are added.
- Added a rule condition for order age.
- Added a rule condition for order date.
- Added a rule condition for first-time customers.
- Added rule conditions for VIP definitions.
- Added rule conditions for high-return customer definitions.
- Added a rule condition for order total.
- Added a rule condition for product value.
- Added a rule condition for category.
- Added a rule condition for discounted items.
- Added a rule condition for metadata.
- Added a rule condition for return reason.
- Added a rule condition for selected resolution method.
- Added a rule action for auto approval.
- Added a rule action for evidence requirement overrides.
- Added a rule action for full return blocking.
- Added a rule action for allow-only resolution methods.
- Added a rule action for blocked resolution methods.
- Added a rule action for customer messages.
- Added a rule action for admin notes.
- Added support for admin-defined VIP matching using customer/order meta, lifetime spend, and order count thresholds.
- Added support for admin-defined high-return customer matching using historical returned order percentage.
- Added support for admin-defined high-return customer matching using recent return request counts in a time window.
- Added support for admin-defined high-return customer matching using returned quantity percentage.
- Added support for admin-defined high-return customer matching using returned order value percentage.
- Added rule evaluation during customer submission and pending-request amendment so matched rules are re-calculated each time the request is submitted or edited.
- Stored matched rules, rule evaluation data, and evaluation timestamps on the RMA record.
- Added matched rule visibility to the individual RMA record and the main Requests list for quicker staff triage.
- Added activity log entries when rules are evaluated on a request.
- Added dynamic admin UI controls to add and remove rules directly from the Rules page.

Version 1.5.1
- Changed the Resolution Methods setting label from "Store credit + £x.xx bonus" to the static wording "Store credit + bonus".
- Added a new Help admin tab and submenu.
- Help content now loads from the editable plugin file help/help-content.html so usage guidance can be updated without changing PHP code.
- Pre-populated the Help page with plugin documentation covering setup, portal usage, requests, rules, return windows, emails, wallets, overrides, logs, exchanges, and restocking behaviour.

Version 1.5.0
- Fixed Requests tab URLs so the Requests submenu and top tab both correctly open admin.php?page=rit-rma-pro instead of the invalid rit-rma-pro-requests slug.
- Updated the Requests page filter bar to include a dedicated Search button so admins do not need to press Enter to run a search.
- Added a Clear button to reset the Requests page search term, date jump field, and status filter while keeping the selected stats range.

Version 1.4.9
- Fixed the top-level WordPress admin menu icon sizing issue caused by using a large source image.
- Replaced the oversized menu icon asset with a proper 20x20 admin menu icon to prevent layout overlap and menu rendering issues.

- Moved RMA Pro to its own top-level WordPress admin menu with Requests as the default landing page.
- Added submenu entries for Requests, General settings, Rules, Return windows, Email settings, Wallets, Overrides, and Logs.
- Added a custom RMA Pro menu icon asset.
- Added Requests page search for RMA number, customer name, customer email, product text, and resolution method.
- Added a date jump filter on the Requests page using a calendar date picker.
- Preserved search and date filters when opening and returning from individual RMA records.
- Removed the separate "Reason provided on submission" block from the individual RMA record page.
- Added a new Rules tab/page.
- Moved Return reasons, Excluded products, Excluded categories, and Personalised item meta keys from General settings to Rules.
- Added a placeholder Rule builder section to the Rules page for future expansion.

Version 1.4.7
- Changed RMA restocking so items are only added back into stock when the request is marked Completed.
- Restocking no longer runs when an RMA is marked Received, allowing admins to inspect or reject returned items first without affecting stock counts.

Version 1.4.6
- Added a Restock items checkbox to the individual RMA record page, enabled by default while the RMA has not yet been restocked.
- Returned items are now added back into WooCommerce stock once when an RMA is saved as Received or Completed and restocking is enabled on the form.
- Added restock success, info, and error notices on the RMA record page, plus an order note and RMA log entry when items are restocked.
- Added persistent tracking for whether an RMA has already been restocked to prevent duplicate stock increases on later edits.
- Improved exchange RMA item display on the record page by replacing the generic Items list with a dedicated Exchange Details section that shows Original Product -> New Product.
- Renamed front-end wording from Preferred refund method to Preferred Resolution.
- Renamed back-end wording from Refund method to Resolution in key request screens.
- Renamed the General settings section label from Refund methods to Resolution Methods.

Version 1.4.5
- Added a new Overrides admin tab for manually allowing returns on selected orders in special circumstances.
- Added order override search by order number or customer email.
- Added override reason entry and editing for each override record.
- Added an overrides list showing order, customer, RMA, return status, items returning, override reason, and actions.
- Added multi-select delete and per-record delete/edit actions for override records.
- Added a toggle to automatically remove overrides once the linked return is completed or cancelled.
- Updated front-end lookup checks so qualifying overrides bypass the normal return window and order status block.

Version 1.4.4
- Added a test send function for every email template in Email settings.
- Each template now has its own test recipient field and Send test email button.
- Test emails use the site's default WordPress mail mechanism, so SMTP/mail plugins continue to be respected.
- Added admin success/error notices for test sends.
- Updated plugin version constants to 1.4.4.

Version 1.4.2
- Added duplicate-return protection so customers cannot create a second RMA for the same order.
- Added pending-RMA amendment flow so customers can reopen the order lookup, see that a request already exists, and amend that same pending RMA instead of creating another one.
- Added customer-facing notices explaining when an order already has an RMA and whether it can still be edited.
- Added admin guidance on the RMA detail screen explaining that setting a request back to Pending allows the customer to edit it again.
- Added a status key to the bottom of the RMA detail screen explaining each status.
- Bumped plugin version to 1.4.2.

Version 1.4.1
- Exchange requests no longer auto-approve, even if the selected return reason is configured for auto-approval.
- Added a prominent admin warning on exchange RMAs explaining that approving the request will create the exchange order and refund any remaining item balance, and that the refund cannot be undone.
- Added an Activity log section to each RMA detail screen so admins can review all recorded actions for that request in one place.

Version 1.4.0
- Updated the exchange helper notice so it now explains that any remaining balance will be refunded.
- Updated the evidence upload helper text to remove the wording about PDF uploads.
- Added automatic exchange fulfilment when an exchange RMA is approved.
- Exchange approval now creates a linked WooCommerce order with the selected exchange products.
- Exchange approval copies the original billing and shipping details.
- Exchange approval applies an exchange credit so the replacement order total is zero.
- Exchange approval sets the new order to Processing.
- Added automatic remaining-balance refunds for exchange approvals using WooCommerce native refund support where the original gateway supports API refunds. Shipping is not included in this refund.
- Added exchange processing logs.
- Added admin notices.
- Added source-order notes.
- Added linked exchange-order details on the RMA screen.
- Added database fields to track the linked exchange order.
- Added database fields to track the linked exchange refund.

Version 1.3.9
- Added a dedicated Return windows tab.
- Replaced domestic and international return windows with per-shipping-zone return windows pulled from WooCommerce shipping zones.
- Added support for WooCommerce zone matching during return lookup.
- Added support for the WooCommerce default zone for locations not covered by other zones.
- Kept legacy domestic and international values as fallback defaults for older installs and unmatched data.

Version 1.3.7
- Fixed a fatal error when submitting an RMA with an auto-approved return reason.
- Restored the missing frontend auto-approval method that determines whether all selected reasons are eligible for automatic approval.
- Auto-approved submissions now correctly save as Approved and continue to send the expected notifications and order note without crashing the site.

Version 1.3.6
- Removed the front-end exchange notice sentence: "On mobile, scroll back up to the product list to choose the exchange item."
- Fixed return reason configuration normalisation so the per-reason Auto approve setting persists correctly after saving.
- Fixed the Add reason template so newly added reasons include the Auto approve checkbox and save correctly.

Version 1.3.5
- Hid the exchange product column on the customer return form unless the preferred refund method is set to Exchange, reducing confusion on mobile and desktop.
- Added an Auto approve checkbox to each return reason in General settings.
- Added reason-level auto-approval logic so new RMAs are submitted directly as Approved when all selected return reasons are configured for automatic approval.
- Added automatic logging, order notes, and approved-status email notifications for auto-approved return requests.

Version 1.3.4
- Added a remembered stats period filter with: All data, Today, Yesterday, Last 7 days, Last 14 days, Last month, Last 3 months, Last 6 months, and Last year.
- Stats cards, request status breakdown, and refund method usage now reflect the selected stats period and show the active period clearly.
- Chart click filtering now preserves the selected stats period.
- Fixed original-payment refund logic so remaining item value and remaining shipping value are calculated separately.
- Replaced the shipping refund checkbox with a shipping refund amount field so partial shipping refunds can be issued.
- Removed the incorrect duplicate-refund lock so additional partial refunds remain available while refundable balance still exists.
- Changed refund shipping tracking to store the refunded shipping amount, enabling accurate remaining-shipping calculations.
- Removed the Manual action notice row from the request screen.
- Removed the Evidence uploads settings checkbox. Evidence requirement is now controlled by return-reason configuration only.
- Evidence upload field remains available on the front end and validation now checks only the selected reason configuration.

Version 1.3.3
- Changed original-payment refund locking so RMAs remain refundable while an eligible balance still exists for items or shipping.
- Added running RMA refund totals so multiple partial original-method refunds can be processed until the balance is exhausted.
- Expanded the Requests dashboard counters to show every request status across the top.
- Made the status chart clickable so clicking a segment filters the Requests list by that status.
- Added a visible active-filter notice with a clear filter action on the Requests screen.
- Replaced the plain return-reasons textarea with an add/remove reason builder and per-reason Evidence required toggle.
- Updated front-end evidence validation to use the configured per-reason setting instead of keyword matching.
- Removed the Manual action notice row from the request detail screen.

Version 1.3.2
- Updated the front-end order lookup field label from Billing email to Email.
- Added guidance that it must match the email used on the order.
- Improved the front-end refund method row so the Preferred refund method select has more room and better mobile display.
- Made evidence uploads required for selected items where the return reason indicates a faulty, damaged, or wrong item received case, with both front-end and server-side validation.
- Improved exchange guidance for mobile users.
- Added focus/scroll to the first missing exchange selector.
- Highlighted the required exchange field when no exchange product has been chosen.
- Removed SKU wording from the exchange helper text so it now refers to searching by product or variant name only.
- Reduced the desktop status chart display size for a cleaner Requests dashboard layout.
- Added a copy button and copied-state feedback for wallet links on the Wallets tab.

Version 1.3.1
- Fixed a settings save regression that could clear values from other tabs when saving General settings or Email settings.
- Updated settings saving so each tab only updates its own fields and preserves all existing values from the other tabs.
- No change to the original-payment refund logic added in 1.3.0.

Version 1.3.0
- Added admin-side refunds to the original payment method using WooCommerce's native refund flow where the order gateway supports API refunds.
- Added gateway compatibility checks and clear admin messaging when automatic refunds are unavailable and must be handled manually.
- Added support for partial refunds, optional shipping refunds, and tax-aware refund calculations based on the original WooCommerce order line items.
- Added duplicate-refund protection, failure logging, order notes, and RMA completion updates after successful original-payment refunds.
- Updated admin currency formatting so bonus and refund previews use the store currency instead of a hard-coded pound symbol / GBP assumption.
- Updated settings wording so store credit bonus references no longer imply a fixed currency symbol.

Version 1.2.5
- Added a Returns portal shortcode notice to the very top of the General Settings tab.
- Kept Wallet page URL shortcode guidance in General Settings.

Version 1.2.3
- Updated Settings help text for Wallet page URL to show the [rit_rma_wallet] shortcode setup steps.
- Added guidance in Settings explaining that the returns portal requires the [rma_pro_portal] shortcode on a page.

Version 1.2.2
- Added visible Logs tab date pickers and a visible records-per-page selector (20, 40, 60, 80, 100) with per-user persistence.
- Added Logs summary text, quick go-to-page control, and button-style pagination.
- Added Log retention setting and Clear logs action with confirmation, respecting the selected retention period.

- Fixed fatal error on the Return windows tab by adding the missing admin renderer for shipping-zone return window settings.

Version 1.2.1
- Added log summary text showing current range and total log count.
- Added quick jump to page control on the Logs tab.
- Added visible date range filters and a clearer records-per-page selector to the Logs tab.

Version 1.1.9
- Added order notes when wallet balance is redeemed into a coupon, including coupon code and amount.
- Updated Logs tab records-per-page options to 20, 40, 60, 80, and 100 with 20 as default.
- Updated Logs tab pagination to use button-style page links.

Version 1.1.9
- Added order notes when wallet balance is redeemed into a coupon, including coupon code and amount.
- Updated Logs tab records-per-page options to 20, 40, 60, 80, and 100 with 20 as default.
- Updated Logs tab pagination to use button-style page links.

Version 1.1.8
- Added sorting, per-column filters, pagination, and per-page selection to the Logs tab (default 20 records per page).
- Removed the "Refunded against order" column from the Requests tab.
- Added WooCommerce order notes when store credit is issued from an RMA record.
- Added WooCommerce order notes when wallet balances are manually adjusted or cleared from the Wallets tab.
- Corrected CSV export columns so exported request data matches the current Requests table structure.

Version 1.1.8
- Added sorting, per-column filters, pagination, and per-page selection to the Logs tab (default 20 records per page).
- Removed the "Refunded against order" column from the Requests tab.
- Added WooCommerce order notes when store credit is issued from an RMA record.
- Added WooCommerce order notes when wallet balances are manually adjusted or cleared from the Wallets tab.
- Corrected CSV export columns so exported request data matches the current Requests table structure.

Version 1.1.7
- Updated request status chart colours: Cancelled is now black, Rejected red, Approved teal, and Completed darker green.
- Fixed wallet clear actions so unused coupons created from redeemed wallet balances are also deleted.

Version 1.1.7
- Clearing wallet credit now unlocks linked RMA records.
- Clearing wallet credit now removes unused wallet coupons.
- Added clear issued credit action on locked RMA records.
- Updated wallet adjustment labels for clarity.

Version 1.1.7
- Updated request status chart colours: Cancelled is now black, Rejected red, Approved teal, and Completed darker green.
- Fixed wallet clear actions so unused coupons created from redeemed wallet balances are also deleted.

Version 1.1.7
- Clearing wallet credit now unlocks linked RMA records.
- Clearing wallet credit now removes unused wallet coupons.
- Added clear issued credit action on locked RMA records.
- Updated wallet adjustment labels for clarity.

Version 1.1.6
- Clearing wallet credit now unlocks linked RMA records.
- Clearing wallet credit now removes unused wallet coupons.
- Added clear issued credit action on locked RMA records.
- Updated wallet adjustment labels for clarity.

Version 1.1.5
- Fixed plugin package structure so WordPress upgrades the existing plugin correctly instead of installing a second copy.
- No functional changes beyond packaging/upgrade fix.

Version 1.1.5
- Fixed plugin package structure so WordPress upgrades the existing plugin correctly instead of installing a second copy.
- No functional changes beyond packaging/upgrade fix.

Version 1.1.5
- Fixed plugin package structure so WordPress upgrades the existing plugin correctly instead of installing a second copy.
- No functional changes beyond packaging/upgrade fix.

Version 1.1.4
- Fixed admin wallet credit preview so ticking "Include order shipping in store credit" updates the total immediately.
- Rebuilt admin JavaScript to restore the shipping toggle, note syncing, picker search, and chart behaviour cleanly.

Version 1.1.4
- Fixed admin wallet credit preview so ticking "Include order shipping in store credit" updates the total immediately.
- Rebuilt admin JavaScript to restore the shipping toggle, note syncing, picker search, and chart behaviour cleanly.

Version 1.1.4
- Fixed admin wallet credit preview so ticking "Include order shipping in store credit" updates the total immediately.
- Rebuilt admin JavaScript to restore the shipping toggle, note syncing, picker search, and chart behaviour cleanly.

Version 1.1.2
- Store credit can only be issued once per RMA with a server-side guard.
- Added issued-state messaging for already-credited RMAs.

Version 1.1.2
- Store credit can only be issued once per RMA with a server-side guard.
- Added issued-state messaging for already-credited RMAs.

Version 1.1.2
- Store credit can only be issued once per RMA with a server-side guard.
- Added issued-state messaging for already-credited RMAs.

Version 1.1.1
- Improved wallet coupon success message with bold black code.
- Updated checkout wording.
- Added customer notes field to RMAs, separate from private admin notes.
- Customer notes are available in customer-facing email templates via {{customer_notes}}.
- Issue credit flow now saves current private and customer notes when credit is issued.
- Issue credit area now shows shipping value and updates the credit total preview when shipping is included.
- Removed extra wallet note field from the issue credit action.
- Added wallet balance adjustment tools in the Wallets tab: set, increase, decrease, or clear.

Version 1.1.0
- Added an internal wallet ledger system for store credit balances.
- Added wallet database tables for wallet balances and wallet transactions.
- Added a new Wallets admin tab showing customer wallet balances and secure wallet access links.
- Added wallet page URL setting for use with the [rit_rma_wallet] shortcode and customer wallet emails.
- Added a new [rit_rma_wallet] shortcode so logged-in customers and guests with a secure token link can view wallet balances and recent activity.
- Added secure guest wallet access using email address plus tokenised wallet link.
- Added a new Issue store credit action on RMA request screens for store credit and store credit + bonus requests.
- Added support for optionally including order shipping when issuing wallet credit.
- Added support for bonus credit when the Store credit + bonus refund method is selected.
- Issuing store credit now marks the RMA as Completed and logs the wallet issuance event.
- Added a dedicated wallet credit customer email toggle, subject, and template in Email settings.
- Added wallet email tokens for issued amount, wallet balance, and wallet URL.
- Added wallet redemption to one-time WooCommerce coupons restricted to the customer email address.
- Coupon redemptions are one use only and compatible with other discount codes.
- Added a wallet transaction history table on the wallet shortcode page.
- Added storage of returned item unit prices in RMA item data for wallet credit calculations.

Version 1.0.11
- Removed the Refunded status from the request workflow and admin status dropdowns.
- Simplified the single request admin screen so it only shows Status and Admin notes.
- Removed admin-side Refund method, Refund amount, Shipping refunded, and Refunded against order controls from the request view.
- Added an admin notice explaining that refund, store credit, exchange, or wallet actions must currently be completed manually based on the customer-selected method.

Version 1.0.10
- Restored pre-populated default email template bodies when email subject/body settings are blank or missing.
- Updated all default email template sign-offs to use the dynamic {{site_name}} token instead of a hard-coded plugin name.
- Added migration logic to replace legacy 'RMA Pro for WooCommerce' email sign-offs in saved templates with the dynamic store name token.
- Added {{site_name}} token replacement support in email rendering for admin and customer emails.

Version 1.0.9
- Replaced the front-end exchange dropdown with an AJAX product search field so customers can search products and variations by name or SKU.
- Added live exchange search results with same-value or lower-value filtering per return item.
- Added front-end selection UI for exchange products, including clear selected-item feedback and remove option.
- Added server-side validation to re-check exchange selections against the original order item price before submission.
- Bumped plugin version to 1.0.9.

Version 1.0.8
- Added a requests stats area at the top of the Requests page.
- Added Chart.js powered status breakdown chart.
- Added summary cards for total requests, pending requests, completed requests, and top refund method.
- Added refund method usage summary panel.
- Added CSV export for requests, including filtered exports when a status filter is applied.
- Replaced free-text refund methods with hard-coded selectable methods in settings.
- Added supported refund methods: Original payment method, Store credit, Store credit + bonus, Exchange.
- Added a conditional Store credit bonus amount field in settings.
- Updated the Store credit + bonus front-end label to include the configured bonus amount.
- Updated request storage to use stable internal refund method keys instead of user-entered labels.
- Added exchange selection UI to the customer return form.
- Added per-item exchange product selection limited to products of the same or lower value.
- Added customer-facing exchange guidance text on the return form.
- Added admin request detail display for exchange selections captured on submitted RMAs.
- Updated refund method rendering across admin lists, detail pages, CSV export, and email tokens to use consistent labels.
- Updated the personalised item meta key settings description text.
- Moved the admin JavaScript away from jQuery for the updated interactions.
- Bumped plugin version to 1.0.8.

Version 1.0.7
- Added rich text email editors with media button support for email templates.
- Added pre-populated admin and customer email template content.
- Added customer email recipient handling so the customer is always the main recipient, with optional extra recipients and Bcc handling.
- Improved email settings UI and template editing experience.
- Included media-capable editors for inserting formatted content and images into email bodies.

Version 1.0.6
- Improved plugin packaging and activation handling.
- Continued general stability and UI improvements.

Version 1.0.5
- Added RMA request management foundations, settings, logging, and customer submission flow.

Version 1.0.4
- Replaced the mobile-problematic exclusion picker with a custom AJAX search and multi-select control for excluded products and categories.
- Fixed the admin exclusion UI so search results no longer overlap helper text on mobile.
- Fixed the exclusion picker so search remains available after selecting items.
- Added a dedicated Email settings tab separate from General settings.
- Split email controls clearly into Admin emails and Customer emails.
- Added editable recipients, subject, and body fields for admin new-request emails.
- Added per-status email toggles for both admin and customer emails.
- Added conditional reveal of recipients, subject, and body fields when each email type is enabled.
- Added support for multiple recipients using commas or new lines.
- Updated status change handling to send both admin and customer status emails based on the new email settings.
- Added token guidance for editable email templates.

Version 1.0.3
- Fixed the admin AJAX exclusion pickers on mobile so dropdown results no longer sit over the helper description text.
- Fixed the admin AJAX exclusion pickers so the search input remains available after selecting an item, allowing multiple selections without losing the field.
- Improved Select2 admin styling for narrow screens and multi-select rendering stability.

Version 1.0.2
- Replaced manual product exclusion ID field with AJAX search-and-select multi-picker for WooCommerce products.
- Replaced manual category exclusion ID field with AJAX search-and-select multi-picker for WooCommerce product categories.
- Renamed settings label from Return window UK to Return window domestic.
- Added admin-side AJAX search endpoints and select2 initialisation for exclusion pickers.

Version 1.0.1
- Fixed the front-end lookup flow so old error messages are cleared once a valid order is found.
- Fixed redirect handling so stale lookup, error, and submitted query args are removed before new ones are added.
- Removed the phone number field from the customer-facing return form.
- Added configurable return reasons to admin settings.
- Pre-populated return reasons using the original Regal Dog plugin defaults:
  - I ordered the wrong size
  - It doesn't suit my dog
  - Faulty - Please supply details
  - I ordered the wrong product
  - Received wrong item - Please supply details
  - Other - Please supply details
- Changed front-end item reasons from a free-text input to an admin-driven dropdown.
- Hid the return reason field on the front end when no return reasons are configured in settings.

Version 1.0.0
- Initial clean rebuild of the plugin under the new RMA Pro for WooCommerce.
- Added modular class-based structure for safer maintenance.
- Added custom database table for RMA records.
- Added custom database table for activity logs.
- Added admin request list with order links, customer details, returned items, refund method, refund flag, status, and RMA number.
- Added admin request detail screen for status updates, refund tracking, shipping refund flag, refund amount, and admin notes.
- Added configurable RMA numbering with prefix, suffix, and next number controls.
- Added configurable refund methods in settings.
- Added status-based customer email triggers with per-status toggles.
- Added admin email toggle for new request notifications.
- Added front-end shortcode portal for order lookup and return submission.
- Added legacy shortcode alias support for existing pages.
- Added configurable personalised item meta keys instead of hard-coded VPC-only logic.
- Added optional evidence uploads.
- Added HPOS compatibility declaration.
  • Changelogs
  • Roadmap
  • RMA Pro Documentation
  • Ecommerce Management
  • What we can do
  • Professional Setup Services
  • Blog
  • Knowledge Base
  • Terms and Conditions
  • Privacy Policy
  • Acceptable Use Policy
© Copyright Regal IT Ltd. All Rights Reserved