=== Storelly – Product Options, Price Calculator, B2B Quotes & Visual Product Builder for WooCommerce ===
Contributors: storelly
Donate link: https://storelly.com/
Tags: product options, woocommerce, price calculator, b2b, request a quote
Requires at least: 6.2
Tested up to: 7.0
Requires PHP: 7.4
Requires Plugins: woocommerce
Stable tag: 1.7.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

WooCommerce product options, price calculator & visual product builder with live preview. Plus B2B quotes, wholesale pricing & net terms — free.

== Description ==

**Add product options, a live price calculator, and a visual product builder to any WooCommerce product — no code, no product limits.**

Storelly turns ordinary WooCommerce products into configurable products your customers can personalize, price, and order in one flow. It bundles a **product options & price calculator engine**, a **visual product builder** with live preview, and a complete **B2B quote & wholesale workflow** into a single plugin — replacing the three or four add-on plugins most stores stack and fight with. Everything runs entirely on your own server, free, with **no product caps and no trial timers**.

See it in action — two real configurators built with Storelly:

https://www.youtube.com/watch?v=ggXfb793ET4

https://www.youtube.com/watch?v=DMGDfQzYcfU

**Try the live demos:**
[Bag customizer — live demo](https://demo.storelly.com/?product=bag-customizable-2) | [Product builder — explore all examples](https://storelly.com/product-builder)

= 🎯 Why store owners choose Storelly =

Most stores end up stacking three or four plugins — one for product add-ons, one for a price calculator, one for B2B quotes, one for a product designer — and then fighting the conflicts between them. Storelly replaces that stack with a single engine built for configurable products and B2B selling.

= 👥 Who Storelly is built for =

* **Print shops & print-on-demand** — quoting custom jobs takes hours, artwork goes back and forth by email, and reorders start from zero. Storelly turns enquiries into priced quotes and saved designs into one-click reorders.
* **Solo makers & personalized-gift shops** — you need surcharge pricing for engraving, gift wrap, or rush options without hiring a developer. Add an option group, set the price, done.
* **Configurable product retailers** — furniture, curtains and blinds, signage: products priced by size and material explode into thousands of WooCommerce variations. Storelly replaces variation sprawl with options, conditional logic and live price calculation.
* **B2B manufacturers & wholesalers** — negotiated prices live in spreadsheets, quotes in inboxes, and net-term balances in your accountant's head. Storelly puts company accounts, per-company pricing, approvals and account credit inside WooCommerce.
* **Agencies** — one plugin that covers options, calculators, quotes and B2B means one tool to learn and support across every client build.

= 🛍️ Perfect for =

Business cards, flyers & brochures, stickers & labels, t-shirts & apparel, mugs & drinkware, banners & signage, photo gifts, packaging, custom furniture, curtains & blinds, jewelry & engraving, trophies & awards, cakes & bakery, bike builds — any store where "one product, many choices" is the business.

= ✨ Free features — unlimited, forever =

* **Visual product builder** — customers personalize products on a live canvas: add text, upload images, pick colors and swatches, and see exactly what they will get before adding to cart.
* **Every field type you need** — dropdowns, radio buttons, image swatches, text inputs, checkboxes, file uploads, labels and advanced fields, with per-option price surcharges.
* **Price calculator & quantity breaks** — tiered pricing that updates the price live as customers choose quantity and options. Unlimited tiers, unlimited products.
* **Conditional logic** — show or hide options based on previous choices, so customers only ever see what is relevant.
* **B2B quotes (request a quote)** — customers submit a quote request, you reply with a priced quote, they accept online and it converts straight into a WooCommerce order. Expiry dates and email notifications included.
* **Company accounts & wholesale pricing** — upgrade customers into company accounts with negotiated per-company pricing, assigned catalogs, team members with approval rules, and account credit with net payment terms.
* **Quote & order PDF export** — a built-in local PDF export for quotes and orders ships free; no external service required.
* **Custom orders** — design on behalf of a customer from wp-admin and send them a ready-to-pay order.
* **Saved designs & reorder** — customer designs are stored on your site so repeat orders take one click.
* **Import / export** — move option sets between sites with JSON import/export, or seed products from your existing WooCommerce variations in the setup wizard.
* **Translation-ready** — ships in 15 languages with full RTL support.

= ☁️ Storelly Cloud — optional paid services =

The free plugin is complete on its own. Storelly Cloud is an optional subscription that adds managed services running on our infrastructure (`app.storelly.com`) — it never unlocks code on your server:

* **Production print-ready PDF rendering** — high-resolution, print-shop-grade files with bleed for fulfillment (your free local PDF export always keeps working).
* **Order sync & analytics dashboard** — option-level revenue analytics for your store.
* **Premium template library** — industry option presets with one-click import and ongoing updates. Free templates stay free.

= 🌍 Languages =

Storelly ships with translations for **15 languages** out of the box and follows your WordPress Site Language automatically — no extra setup required:

* **Extended coverage (200+ strings):** Vietnamese (vi)
* **Menu labels + core admin verbs (~30 strings):** French (fr_FR), German (de_DE), Spanish (es_ES), Portuguese-Brazil (pt_BR), Italian (it_IT), Japanese (ja), Chinese-Simplified (zh_CN), Russian (ru_RU), Arabic (ar), Dutch (nl_NL), Polish (pl_PL), Turkish (tr_TR), Swedish (sv_SE), Indonesian (id_ID)

**RTL languages** (Arabic, Hebrew) automatically render with right-to-left layout — 18 companion RTL stylesheets ship with the plugin.

**Want to help translate?** Contribute on translate.wordpress.org once the plugin lands there, or send your `.po` file to support@storelly.com.

= 🔌 Works with =

WooCommerce (required), block themes and classic themes, Elementor, WPML/Polylang-style translation workflows, and standard WooCommerce emails, taxes, and payment gateways. Your cart and checkout stay 100% native WooCommerce.

== Frequently Asked Questions ==

= Is the free version really unlimited? =

Yes. Unlimited products, unlimited option groups, unlimited quantity-break tiers, unlimited quotes and company accounts. Every feature that runs on your own server is free with no caps and no trial timers. We only charge for optional cloud services (production print-ready rendering, analytics, premium templates) that run on our infrastructure.

= Do I need WooCommerce? =

Yes. Storelly extends WooCommerce, so WooCommerce must be installed and active. Your existing cart, checkout, taxes, and payment gateways keep working exactly as before.

= How do I add extra options to a WooCommerce product? =

Edit any product and open the Storelly panel: add option groups (dropdowns, swatches, text fields, file uploads and more), set per-option prices, and publish. The options appear on the product page instantly with live price updates.

= Can I create a price calculator with quantity discounts? =

Yes. Define quantity-break tiers per product (for example 1–49, 50–99, 100+) and the displayed price recalculates live as the customer changes quantity and options.

= Can customers personalize products with their own text and images? =

Yes. The visual builder lets customers add text, upload images, choose colors and templates, and preview the result live before adding to cart. Their designs are saved on your site for reordering.

= How does the B2B request-a-quote workflow work? =

A customer submits a quote request from the product page. You review it in wp-admin, adjust pricing, and send the quote by email. The customer accepts online and the quote converts into a normal WooCommerce order. Quotes support expiry dates and full email notifications.

= Does Storelly support B2B / wholesale pricing? =

Yes. Upgrade any customer into a company account with its own negotiated pricing, assigned products, team members with approval rules, and account credit with net payment terms (wallet, credit limit, statements).

= Are PDF exports free? =

Yes — quote and order PDFs render locally on your server, free, with no external service. Storelly Cloud additionally offers production print-ready rendering (high resolution, bleed) for print fulfillment, which runs on our infrastructure.

= Will it slow down my store? =

No. The options and pricing engine runs locally with no external calls on your product pages, and assets only load where they are needed.

= What is "Storelly Cloud" and do I need an account? =

No account is required to use the plugin. The product builder, pricing options, quotes and custom orders all run **locally on your own WordPress site, for free, with no product limit**.

"Storelly Cloud" is a separate, optional online service (app.storelly.com). It adds print-ready PDF rendering, order sync and a central dashboard. You only need it if you want those cloud features.

How connecting works:

* **New users:** click **"Enable Cloud"** on the plugin's Overview/Welcome screen. A Storelly account is created and connected for you automatically, right inside wp-admin — you are not redirected to storelly.com. You then receive an email at your site admin address with your Storelly username, password and login link (please sign in and change the password).
* **Existing Storelly users:** you can instead paste your API keys (SID + Secret) on **Settings → Integration**, or paste your Store ID via "Already have a Store ID? Link it" to attach this site to your existing store.
* **Reinstalling:** the plugin keeps a stable store identifier derived from your site URL and admin email, so reconnecting re-links to the same Storelly store instead of creating a duplicate.

Nothing is sent to Storelly until you explicitly connect, and you can disconnect at any time (Overview → Disconnect). See the "External services" section for exactly what data is shared.

= What happens to my data if I cancel a Cloud subscription? =

Everything local — products, options, designs, quotes, orders, company accounts — is yours and untouched. Cloud actions simply stop being available; local features including the free PDF export keep working.

= How do I use this plugin in my language? =

Go to **Settings → General → Site Language**, pick your language, and save. The plugin admin sidebar, settings pages and Visual Builder will switch to that language immediately. No restart, no cache clearing, no extra plugin needed.

Supported languages: Vietnamese, French, German, Spanish, Portuguese (Brazil), Italian, Japanese, Chinese (Simplified), Russian, Arabic, Dutch, Polish, Turkish, Swedish, Indonesian. If your language is not in WordPress's installed list, install it from the same Settings → General page (WordPress will download it).

= Can each WP user have a different plugin language? =

Yes. Go to **Users → Your Profile → Language** and pick a per-user language different from the site default — useful when the storefront serves customers in one language but the admin reads another.

= My language is missing or incomplete — how do I improve it? =

Two paths:

1. **Quick (just you):** Translate the `.pot` file in `wp-content/plugins/storelly-product-builder-for-woocommerce/languages/` using a tool like Poedit, save as `storelly-product-builder-for-woocommerce-{your-locale}.mo`, and drop it in the same folder.
2. **Permanent (helps everyone):** Submit your translation to the WordPress.org GlotPress project once the plugin is listed there, or email `.po` files to support@storelly.com — we bundle community translations in the next release.

= Does RTL (Arabic, Hebrew) work? =

Yes. The plugin ships 18 companion `*-rtl.css` files that WordPress core auto-loads when `is_rtl()` returns true. Switch your site to Arabic / Hebrew and the entire plugin UI mirrors right-to-left.

= Can I migrate from another product options plugin? =

Storelly imports option sets via JSON and can seed options from your existing WooCommerce variations using the setup wizard. It can also import existing quotes from WooCommerce orders, contact-form plugins (Contact Form 7, WPForms, Gravity Forms, Forminator) and quote plugins (ELEX, Addify, B2BKing). For specific migration questions, open a thread in the support forum — we answer fast.

= How can I contact support? =

You can reach the Storelly team directly:

* Email: support@storelly.com
* WhatsApp: +84 937 869 689

(A searchable knowledge base and a support ticket system are coming soon.)

== External services ==

This plugin connects to the following external services:

- **Cloud2Print PDF generation API (`https://api.cloud2print.net`)**
  - **What it is used for**: Used to generate print-ready PDF files from customers' product designs created with the builder.
  - **What data is sent and when**: When a store admin or automated process exports a design to PDF, the plugin builds a temporary HTML representation of the design (including product artwork, layout information and font usage) and sends a request to the Cloud2Print API, which then fetches that HTML from your site in order to render and return the PDF file.
  - **Service owner and policies**: This service is provided by Cloud2Print. Please review Cloud2Print's policies:
    - Privacy Policy: http://cloud2print.net/privacy-policy
    - Terms of Service: http://cloud2print.net/terms-of-service

- **Storelly Dashboard API (`https://app.storelly.com`)**
  - **What it is used for**: Used to register your Storelly account from inside WooCommerce, to synchronise WooCommerce order information with the Storelly Dashboard, and to check your Storelly Cloud plan (license status, available plans and aggregate dashboard statistics).
  - **What data is sent and when**:
    - **Only after** a store administrator explicitly opts in — by clicking "Enable Cloud" on the plugin's Welcome screen (or connecting the account on the settings page) — the plugin registers your store by sending your store owner details (name, email address, billing address fields, time zone, WooCommerce API keys) and a non-secret store identifier (a stable store ID derived from your site URL and admin email, so reinstalling re-links to the same store) to the Storelly Dashboard API. Nothing is sent before this explicit opt-in.
    - When an order is placed or processed in WooCommerce **and order sync is enabled**, the plugin sends order data (order totals, discount amounts, product and variation identifiers, quantities, unit prices and links to the generated design PDF files) to the Storelly Dashboard API so that orders can be tracked and managed there.
    - When a store administrator opens the License or Overview screen, or clicks "Sync license", the plugin requests the license endpoints (`/api/v1/license/status`, `/api/v1/license/packages`) and the overview endpoint (`/api/v1/plugin/overview`) to read the store's current plan, the list of available plans, and aggregate counts (totals of products, orders and quotes). When the administrator activates a license, the entered license key and the store's numeric business identifier are sent to `/api/v1/license/activate`. These requests are made only in response to the administrator opening those screens or clicking the relevant button.
    - When a store administrator clicks "Choose plan" / "Upgrade" on the Account & Plan screen, the browser is redirected to `https://app.storelly.com/connect` to complete sign-up and payment on Storelly (the plugin never handles card data). The redirect URL carries your site URL, admin email, the chosen plan and a single-use state value. On return, the plugin makes one server-to-server request to `/api/v1/license/exchange` sending the one-time activation token and your site URL to retrieve and store the resulting plan. This happens only when the administrator initiates the upgrade.
  - **Service owner and policies**: This service is operated by Storelly. Please review policies:
    - Terms of Service: https://app.storelly.com/terms
    - Privacy Policy: https://app.storelly.com/privacy

- **Storelly demo product data (`https://app.storelly.com/product-data/data/data.json`)**
  - **What it is used for**: Used by the admin "Global Import" demo catalogue screen to fetch a larger sample catalogue (`data.json`) so the store owner can preview and import additional demo products into WooCommerce. The Welcome screen's one-click "Add demo product" uses a demo bundled inside the plugin and does NOT contact this service.
  - **What data is sent and when**: Only when a logged-in administrator opens the Global Import demo-catalogue screen does the plugin issue an anonymous `GET` request to the URL above. No site URL, user account information, order data or PII is sent in the request body; the only identifying information is the standard HTTP headers (User-Agent, IP) that any outbound HTTP request includes.
  - **Service owner and policies**: This service is operated by Storelly. Please review policies:
    - Terms of Service: https://app.storelly.com/terms
    - Privacy Policy: https://app.storelly.com/privacy

- **Google Fonts API (`https://fonts.googleapis.com`)**
  - **What it is used for**: Used to embed web fonts (Poppins font family) in the print-ready PDF export so generated PDFs render with the intended typography.
  - **What data is sent and when**: When a design is exported to PDF, the generated HTML references the font stylesheet on Google's CDN; the request that fetches it may include the requesting server's IP address and standard HTTP headers. No user account information, order data, or PII is sent by the plugin.
  - **Service owner and policies**: This service is provided by Google LLC. Please review Google Fonts policies:
    - Privacy Policy: https://policies.google.com/privacy
    - Terms of Service: https://policies.google.com/terms

**Note about local file operations**: The plugin reads and writes design configuration files (config.json, design_output.json, used_font.json) to your server's local file system in the WordPress uploads directory. These are not external service calls. The Vue.js runtime used by the admin Global Import screen is bundled inside the plugin (`static/libs/vue.global.prod.js`) and is not loaded from any external CDN.

== Third-party resources ==

This plugin includes or depends on the following open-source libraries, bundled locally:

- Vue.js 3 — MIT License (https://github.com/vuejs/core)
- Animate.css — MIT License (https://github.com/animate-css/animate.css)
- normalize.css v8.0.1 — MIT License (https://github.com/necolas/normalize.css)
- Snap.svg 0.3.0 — Apache License 2.0 (https://github.com/adobe-webplatform/Snap.svg)
- FPDI — MIT License (http://www.setasign.com/products/fpdi/about/)
- fontfaceobserver.js — BSD License (https://github.com/bramstein/fontfaceobserver)
- spectrum.js — MIT License (https://github.com/bgrins/spectrum)
- fabric.js — MIT License (https://github.com/fabricjs/fabric.js)
- SweetAlert — MIT License (https://github.com/t4t5/sweetalert)

== Screenshots ==

1. The visual product builder — customers personalize products with live preview before adding to cart
2. Live customizer — colors, materials and options update the price instantly
3. What your customers see — options with live price updates on a standard WooCommerce product page
4. Swatch-rich product configuration with a live order summary
5. The pricing engine — option fields with quantity breaks and bulk pricing, no code
6. Build option groups with image swatches in the admin option builder
7. Manage every product-builder product from one screen
8. Revenue-focused overview dashboard — see what your options earn
9. The template library — industry presets with one-click import (free and premium)
10. B2B / wholesale — company accounts with tier pricing, credit limit and payment terms

== Changelog ==

= 1.7.1 =
Maintenance release — a focused batch of UX/UI fixes across the admin builder and the storefront. Nothing changes about how your products or options are configured; these are reliability and display fixes.

* **Fixed: gradient swatches losing their second colour on save.** Adding a second colour to a swatch to make a two‑tone gradient, then saving, now keeps both colours instead of reverting to a single colour.
* **Fixed: Visual Builder background auto‑save.** Auto‑save now reliably persists your most recent edits. Previously it could show "Auto‑saved" while sending an out‑of‑date copy, so changes made since the last manual save could be lost when leaving the page.
* **Fixed: right‑to‑left (RTL) storefront layout.** The product options, the designer, and the Request‑a‑Quote form now load their RTL stylesheets on RTL sites, so the layout mirrors correctly instead of appearing misaligned.
* **Fixed: brief flash of unstyled admin editors.** Opening the option builder, Visual Builder or Font Manager no longer momentarily shows raw, unstyled markup before the editor finishes loading.
* **Fixed: imported options showing an unrelated image.** When an image can't be downloaded during import, the option now falls back to no image instead of pointing at another product's picture.
* **Fixed: "Save design" button in the block‑based Cart.** The button now attaches to the correct cart line even after items are reordered or removed.
* **Fixed: uploaded file name when editing a cart item.** Editing a cart item that has an uploaded file now shows the correct file name (and no PHP notice).
* **Fixed: advanced dropdown default state.** While JavaScript is still loading, an advanced dropdown no longer briefly shows the last option as selected.
* **Removed two option controls that had no storefront effect.** The per‑tier "Price depend quantity breaks" and "depend quantity" fields were hidden — they never affected the storefront price. Use the Quantity breaks / bulk pricing feature for real tiered pricing. Any previously saved values are preserved.

= 1.7.0 =
* **Cloud features now follow your plan.** Print-ready PDF rendering and order sync now require an active Storelly Cloud plan — matching what the plugin has always described. The full product builder, pricing options, quotes and custom orders stay free and local on your own site, with no product limit; only these optional cloud features are gated.
* **"Unlock" prompt instead of a silent failure.** A store without a Cloud plan that tries to download a print-ready PDF now sees a clear "Print-ready PDF needs a Cloud plan" message pointing to Account &amp; Plan, instead of an empty download.
* **Order sync respects your plan.** Orders are uploaded to the Storelly Dashboard only when you have both enabled order sync AND an active Cloud plan that includes it. Your local order data is never changed; sync resumes automatically once a plan is active.

= 1.6.6 =
* **Fixed: option builder Save / Update.** The Save and Update buttons in the admin option builder now save reliably, and the apply-to-products status round-trips correctly after saving.
* **Store listing.** Rewritten plugin intro and an expanded screenshot set: the front-end product builder and live customizer, the admin option builder with quantity & bulk pricing, the product list, the overview dashboard, the Template Library, and B2B company accounts.
* **Polish.** Token-styled toast for order-download notices with a shared scrim token, plus minor B2B admin and dialog styling cleanups.

= 1.6.5 =
* **Fixed the demo product installing as duplicates.** On some servers activating the plugin could install the bundled demo product several times over (and briefly slow the site) if the first admin page was reloaded while it was still importing. The one-time install is now guarded so it runs exactly once.
* **Fixed broken images in the demo product.** Component thumbnails and the per-view base images of the demo "bag" now import correctly instead of showing blank or wrong images.
* **New: Remove demo data.** Storelly › Setup Wizard now has a one-click "Remove demo data" button that deletes the demo product, its option set and bundled images (including any duplicates from older versions). Your own products are never touched.

= 1.6.4 =
* **Custom Orders — "View in designer" fixed.** The button now opens the storefront builder pre-loaded with the buyer's actual saved design (it previously used a legacy link with no effect). Admin-only, nonce-protected.
* **Print PDF generation fixed.** Saving a design now keeps the vector (SVG) frames the print-PDF engine rebuilds each page from, so "Regenerate PDFs" / Download (PDF) work instead of failing. (Designs saved before this update should be re-saved once from the builder to generate their print files.)
* **Order sync no longer duplicates.** Each order was being sent to the Storelly Dashboard twice; now sent once. Order sync also moved to a background job so checkout is never slowed by PDF rendering or the dashboard call.
* **Cloud connect hardening (wordpress.org compliance).** No WooCommerce REST keys are minted on activation; cloud PDF defaults to off until you opt in; uninstall now removes cloud secrets + opt-in flags (the stable store ID is kept so reinstalling re-links to the same store). After connecting, the site emails the admin their new Storelly account details.
* **Clearer Storelly guidance.** Settings › Integration now explains what is local vs cloud and which fields are optional; the Custom Order screen shows a "Connect Storelly" prompt when cloud PDF is off; the Overview help section adds direct support contacts (email + WhatsApp).

= 1.6.3 =
* Removed the vestigial designer-marketplace / "launcher" module entirely. It was bundled-but-disabled scaffolding inherited from the NBDesigner / pc-designer codebase (no UI entry point). Deleting it permanently eliminates any possibility of a symbol collision with another NBDesigner / PC Designer–derived web-to-print plugin — superseding the 1.6.1 / 1.6.2 mitigations. Core product builder, quotes, B2B, custom orders and saved designs are unchanged.

= 1.6.2 =
* Comprehensive conflict handling for sites that also run an NBDesigner / PC Designer–derived web-to-print plugin. Storelly now reliably detects a sibling designer plugin (regardless of plugin load order) and cleanly disables only its own optional designer-marketplace module instead of loading code that would collide, with a clear admin notice. This fully resolves the activation fatal introduced when both were active. Core product builder, quotes and B2B features are unaffected.

= 1.6.1 =
* Fixed a fatal error ("Cannot redeclare function") that could occur on activation when another NBDesigner / pc-designer–derived web-to-print plugin was already active. The optional designer-marketplace module now detects those legacy helpers and steps aside instead of crashing the site.

= 1.6.0 =
A major feature release turning Storelly into a full B2B-capable, quote-driven WooCommerce product platform. Everything below runs locally and stays free; only the optional Storelly Cloud features (print-ready PDF, order sync, dashboard analytics) require a paid plan.

* **B2B / Wholesale (new).** Company accounts (with members and roles), a wholesale tier-pricing ladder, and an Account Credit system: prepaid wallet, net-terms credit line with an over-limit approval workflow, monthly volume rebates, partial-refund reversals and accounts-receivable aging — all on a single signed ledger. Each company gets a public, brand-safe storefront, and payment-term labels are fully customizable.
* **Request a Quote (greatly expanded).** Add a file-upload field to quote forms (multi-file, drag-and-drop, shown in admin/email/PDF). New multi-product quote cart and a standalone quote page. Import existing quotes from WooCommerce orders, contact-form plugins (Contact Form 7, WPForms, Gravity Forms, Forminator) and quote plugins (ELEX, Addify, B2BKing). Buyers manage, accept and convert quotes to orders from their account.
* **Custom Orders.** Reworked detail page: instant tabs, clearer CTAs, customer notes, one-click re-order and download-all.
* **My Account portal.** New customer endpoints — quotes, saved designs, re-orders, brand store, team, approvals and store management.
* **Email system.** All transactional mail unified on the WooCommerce email engine, plus an email log, a "send test" tool and an admin Emails dashboard.
* **Designer canvas.** Buyers can now add their own free-form text and images on the canvas alongside admin-defined components, with pricing computed authoritatively on the server.
* **Admin redesign.** Refreshed Emails / About / System / Orders / Quote screens on a shared component library, and a re-organized menu (placed under WooCommerce) grouped into Build / Sell / Configure bands.
* **Reliability & compliance.** PHP 8 compatibility fixes, batched several N+1 query paths, hardened account-endpoint rewrite flushing, and a clean Plugin Check pass.

= 1.5.7 =
* Onboarding & activation polish: one-click bundled (offline-safe) demo product, "resume setup" link, Request-a-Quote badge on by default, a polite dismissible review prompt (after 2+ weeks of use), and large-catalogue migration safety with a re-entrancy lock so concurrent runs never create duplicate option sets.

= 1.5.6 =
* Customizer V3 — Order Summary restructured so the "Add to cart" CTA is the last element pinned to the browser edge and can never be clipped on short viewports. The trust note moved into the scrollable area; the V3 modal now uses a flex column layout so the sticky CTA pins flush to the modal bottom.

= 1.5.5 =
* Customizer V3 — preset Fabric layers (colour/material swatches) are now locked (non-selectable) so customers can't accidentally open the layer-transform toolbar; customer text/image layers stay fully interactive. Zoom controls made larger and clearer.

= 1.5.4 =
* Customizer V3 — fixed the "white square overlay" bug where picking an option that reused a shared placeholder image rendered a solid white box over the product photo. Passive views (where an option doesn't change the image) now hide the layer instead.

= 1.5.3 =
* Customizer V3 — verified primary-view auto-detection against the demo bag product so picking an option always switches the canvas to the view it actually affects.

= 1.5.2 =
* Customizer V3 — picking an option whose change lives on a different view now auto-switches the canvas to that view (improved detection), and hid a ghost overlay that could wash out artwork on multi-view products.

= 1.5.1 =
* Customizer V3 — localStorage design persistence (reopen the modal and your previous design is restored), a floating toast system, accessibility polish (focus rings, aria-live price announcements), full mobile-responsive layout, empty-state tiles, and option-card micro-interactions.

= 1.5.0 =
* Customizer V3 — full UX audit and design-token consistency cleanup; every accent colour now resolves from a single token block so the entire customizer re-themes at once.

= 1.4.0 – 1.4.9 =
* Customizer V3 build-out: 1:1 rewrite of the Order Summary column with live grand total, status progress pill ("5/5 configured"), view-aware accordion that filters to parts affecting the current view, in-canvas view thumbnails, per-attribute filter chips, redesigned Details/Shipping/FAQ tabs, deterministic view switching, and numerous scroll-containment and layout fixes.

= 1.3.0 – 1.3.9 =
* Customizer V3 introduced: new 4-zone layout (product header, vertical tab nav, accordion options panel, canvas, summary column), live grand total, per-component and global reset, progress meter, and a Cloodo/Printcart-aligned design system. Template Library gained a WYSIWYG live preview rendered against a real product, plus restyled storefront option fields. Earlier layouts remain available as fallbacks via filter/constant.

= 1.2.7 =
* Compatibility: replace hardcoded Asia/Ho_Chi_Minh timezone with site-configured wp_timezone_string(). Compliance: declare the Storelly demo-data endpoint in External services. Designer Marketplace module bundled but disabled by default.

= 1.2.6 =
* Add Category-Based Options & enhance import reliability.

= 1.2.5 =
* Fixed Builder Options Export: resolved an issue where export would hang indefinitely.

= 1.2.4 =
* Security improvements: fixed nonce verification patterns, improved file upload sanitization.

= 1.2.3 =
* Enhance Storelly Settings page with professional styling and API sync.

= 1.2.2 =
* Enhance file handling and security checks.

= 1.1.2 =
* Security updates: nonce verification and user permissions.

= 1.1.1 =
* Enhance settings handling, template rendering, and style CSS in plugin.

= 1.1.0 =
* Enhanced security, caching, and code quality across the plugin.

= 1.0.0 =
* Initial release.

== Upgrade Notice ==

= 1.6.6 =
Refreshed store listing (new intro and screenshots) plus a fix for the option-builder Save / Update buttons. Recommended for everyone.

= 1.6.5 =
Fixes the demo product installing as duplicates and with broken images, and adds a one-click "Remove demo data" tool in the Setup Wizard. Recommended for everyone.

= 1.6.4 =
Fixes Custom Order "View in designer", print-PDF generation and duplicate order sync; hardens cloud connect for wordpress.org compliance. Recommended for everyone.

= 1.6.3 =
Removes the unused designer-marketplace module, permanently ending any conflict with NBDesigner / PC Designer-derived plugins. Core features unchanged.

= 1.6.2 =
Definitive fix for activation fatals when another NBDesigner / PC Designer web-to-print plugin is active. Recommended for everyone.

= 1.6.1 =
Fixes a possible activation fatal error when another NBDesigner-derived web-to-print plugin is active. Recommended for everyone on 1.6.0.

= 1.6.0 =
Major update: B2B company accounts and wholesale pricing, Account Credit (wallet, net terms, rebates), expanded Request-a-Quote with imports, redesigned admin and emails, and free-form text/image on the designer canvas. All local features remain free.

= 1.2.7 =
Replaces hardcoded timezone with the site's configured timezone and declares additional external services in readme.

= 1.0.0 =
First stable public version.
