== Changelog ==

= 2.1.3 =
* Maintenance: unused JavaScript helpers, unused CSS, nested inspect copies, and stale test artifacts removed. No user-facing behavior change.

= 2.1.2 =
* Snapshot undo: restoring a product title keeps the original name when the snapshot also writes the post date.
* Bulk grid: regular and sale prices now use WooCommerce's edit values, so a sale-priced product no longer shows the wrong regular price.
* Undo bar: new snapshots keep their action name instead of a raw #id.
* Pro Generate all: a chunk that fails some saves no longer reports done while combinations are still missing.
* Storefront gallery (Blocksy Flexy): after Clear from a variation, ledge / ledge-reverse keeps the vertical thumbnail rail instead of collapsing to a short bottom row.

= 2.1.1 =
* Bulk Editor: first-page load no longer builds full variation cards, so Save is not stuck behind that work.
* Bulk Editor: load and undo-list AJAX release the PHP session so Save can run while the grid is still hydrating.

= 2.1.0 =
* Snapshot undo: if the snapshot row cannot be stored, the write is refused instead of saving with nothing to undo.
* Snapshot undo: bulk stock apply returns the snapshot batch id so restore uses that write, not a guessed dropdown row.
* Snapshot undo: a failed undo-list refresh no longer paints a successful restore as failed.

= 2.0.0 =
* Dual-track Free + Pro release: bulk editor, variations, undo, and storefront gallery verified together on WordPress 7.1 and WooCommerce 11.
* Pro bulk SKU scheme: the Separator control stays on a full-width row when Find & Replace is present, so sequential SKUs can be applied and undone.
* Storefront gallery: stage chevrons and CLS fixes for Twenty Twenty-Five, Storefront, and Blocksy Flexy (editorial, filmstrip, and ledge layouts).
* Snapshot undo: bulk panel writes (price, stock, sale dates, package, dimensions, categories, SKU scheme, schedule, find/replace, short-from-long) restore from the save snapshot.

= 1.12.0 =
* Snapshot undo: restoring an inline Simple↔Variable type change reloads the product row so the type select returns.
* Bulk grid row save: every row save captures its undo snapshot in a dedicated request (and injects that batch id into the undo dropdown) before WooCommerce save runs, so a slow downloadable/virtual write cannot hide the snapshot. The write still snapshots in-request if capture fails.
* Pro Generate all: prices copy to new attribute-matrix siblings; the “N created, M already existed” notice stays on the variation panel until the next generate.
* Storefront gallery (Blocksy Flexy): selecting a variation attribute replaces the main gallery with that variation’s gallery instead of leaving the parent gallery visible beside it.
* Storefront gallery (Blocksy Flexy): Clear restores the ledge / ledge-reverse vertical thumbnail rail by owning Flexy’s pill-direction tokens and putting thumbs-left back if Blocksy flipped the product to thumbs-bottom.
* Pro personalization: add-to-cart (classic, AJAX, and Cart blocks) now carries the storefront text through to the cart line.
* Storefront gallery: variation Clear unhides the main Flexy gallery at its onload box size instead of crushing it to 1px (that crush made thumbs blow out of the rail).
* Snapshot undo: SKU scheme restore no longer leaves products with an empty SKU when uniqueness or WooCommerce exceptions block the original value (stale lookup ignored; post-write SKU kept as fallback).
* Free package: keep first-lane variation gallery helpers in the WP.org bootstrap so bulk editor product load does not fatal after storefront gallery functions are stripped.
* Storefront + Variations tab: empty later attribute galleries no longer inherit leftover un-keyed variation images. Gallery 1 (first attribute) still reads those un-keyed IDs and the variation featured image, so Hardware is not shown as a thumbnail with “0 images” while Primary color / Engraving say “1 image”.
* Storefront (Blocksy Flexy ledge): Bossy **Main image max height** now overrides Blocksy's product-gallery column percent (this shop was stuck at 34% / ~425px even at 900px max).
* Pro Variations tab: bulk price (and other bulk applies) now drop leftover checkboxes when you change Search & filters, so pricing Engraving Yes then Engraving No cannot overwrite the first group with the last amount.
* Bulk grid (Free + Pro): add **Virtual** and **Downloadable** columns to toggle product type flags directly in the spreadsheet view.
* Snapshot undo: restore now includes the new Virtual/Downloadable flags from bulk grid edits.
* Bulk grid (Free + Pro): inline **Sale start** / **Sale end** columns with date-only editing and row-save support.
* Bulk actions (Free + Pro): **Bulk sale dates** bar added for quick start/end scheduling with Force sale OFF.
* Pro bulk editor: **Preview panel** shows a 5-row before/after sample for bulk price + find/replace.
* Pro CSV export: **image_url** column (featured + gallery URLs on parent rows) for edit-in-Sheets round-trip.
* Pro CSV export: optional **Include variation rows** and **Round trip (import-ready)** column preset — one row per variation with parent link, SKU, prices, stock, variation image URL, attribute pairs, and **bossy_var_gallery**.
* Pro CSV export: numbered **attr_N_*** columns on parent rows (name, values, visible, global, default) aligned with the existing import attribute mapper.
* Pro import auto-map: recognizes Bossy export headers (`attr_1_name`, `var_attr_1_value`, `parent_sku`, etc.) without manual column mapping.
* Pro Variations tab: **SKU find & replace** across selected variation rows (supports case/whole-word/regex).
* Free CSV export: read-only **Core fields (free)** for **Filtered/Selected** rows, capped at **500**.

= 1.11.1 =
* Pro variation SKUs: fixed generate-all and add-attribute leaving new variation SKUs blank. The parent-scoped backfill ({parent-sku}-01, -02, …) now reads each variation's own SKU (edit context) instead of the parent-inherited value, so freshly created variations are numbered instead of falling back to the bare parent SKU.
* Pro variation images: single-image **Apply** on variation cards now replaces the target gallery lane instead of appending, regardless of the gallery-mode dropdown state.
* Pro import: re-importing a title-only CSV (no listing id / blank SKU, e.g. Etsy exports) now matches existing products by title across all product types and dedupes to a single product instead of creating duplicates; added a **Match existing by** control (Auto / Title / SKU / Listing ID) in the import options.

= 1.11.0 =
* Bulk grid (Free + Pro): optional **Featured**, **Menu order**, and **Tax class** columns — inline edit, row save, bulk save, and snapshot undo.
* Bulk actions (Free + Pro): new apply tools for **Featured**, **Tax class**, and **Menu order** on selected products, plus existing bulk action confirmations showing **N selected · M will change**.
* Bulk grid UI (Free + Pro): panel layout reworked into a compact, organized control deck with tighter spacing and consistent card placement across free and Pro.
* Bulk grid columns (Free + Pro): reordered for faster flow — Featured/Menu near Img, package fields grouped before Shipping Class, and copy controls aligned near pricing.
* Bulk grid visuals (Free + Pro): Featured now uses a star toggle (hollow to filled yellow) for clear separation from row-selection checkboxes.
* Pro CSV export: **featured**, **menu_order**, **tax_class**, **virtual**, and **downloadable** fields for round-trip with import.
* Pro Find & Replace: **regex** and **whole-word** match modes (plain, whole-word, or regex).
* Frontend gallery (Blocksy/Flexy): fixed filmstrip overflow, thumbnail rail nav/chevrons, autoscroll behavior, stage-chevron layering, and load smoothness across filmstrip/editorial/ledge paths.
* Pro Variations tab: gallery column selector (Gallery 1/2/…), pop-out gallery reorder, max columns on load, default visible gallery columns.
* Pro Variations tab / bulk panel: chunked variation generate, in-place panel refresh, bulk pool-to-variation distribution, and variation image clears (continued from 1.10.x).
* Importer note: new export/grid fields require matching import aliases — Tier 2 will expand image URL and variation-row import paths.
* Dead-code cleanup: removed unhooked legacy gallery helpers superseded by head-priority enforcer; restored `bossy_enrich_available_variation_gallery` hook callback; added free Variations tab stub; dropped dev debug asset.

= 1.10.17 =
* Variation image pool (Free): refined selection state and apply-target UI in the bulk editor, with each variable product's parent images now included in the grid row data so the picker always has the full pool on hand — plus undo labels and undo state handling for variation and pool image actions.
* Pro — This is the big variation-image release. Generate all variations: expand in place when adding attributes. Existing variations keep their IDs and get default values for new attributes; only missing combinations are created. Duplicates and invalid rows are still removed.
* Pro — Generate all and Add variation: chunked creation removes the old ~200-combination ceiling. Large attribute matrices (500+ variations) run in batched AJAX passes with in-grid progress, a single undo batch, and no full-grid reload when the variation panel stays open.
* Pro — Bulk Editor variation panel: generate-all, add variation, clear variation images, and related variation-card actions refresh the open panel in place so expanded cards stay open instead of reloading the whole product grid.
* Pro — Media Manager: **Clear gallery** on each product card clears the parent featured image and gallery (variation images unchanged), with undo.
* Pro — Bulk Editor: **Fill empty mains** and **Assign in order** on the product image pool distribute parent gallery images to variation mains in bulk (chunked + undo).
* Pro — Variations tab: clear actions now use explicit variation wording — **Clear variation main image(s)**, **Clear variation gallery image(s)**, and **Clear variation main + gallery** on selected variation rows (chunked + undo).
* Pro — Frontend gallery layouts: quilt/tiled collage now uses square-only mixed-size tiles; editorial main stage is square with contained/anchored thumbnails and no editorial chevrons; filmstrip thumbnail navigation/autoscroll behavior corrected.
* Pro — Frontend gallery controls: chevron visuals and alignment standardized across stage, filmstrip, and ledge/ledge-reverse layouts.

= 1.10.14 =
* Variation image picker (Free + Pro): click a variation main image zone or gallery slot to open a product-first modal showing only images attached to that product — assign in two clicks without searching the full media library.
* Variation image pool: click a pool thumbnail to assign it to the active gallery slot; empty galleries auto-open the picker on expand or click.
* Pro: drag-and-drop from the product image pool onto variation main zones and gallery slots remains available alongside click-to-pick.
* Bulk editor: clearing all categories on a row save now persists as Uncategorized instead of leaving stale terms.
* Packaging: exclude tmp-*.txt scratch files from release zips.
