IngotForge Cards for ACF — Changelog

1.6.5
- Added the opt-in container_bg shortcode attribute for the complete shortcode instance background.
- Accepted the plugin's existing safe CSS formats, including HEX, RGB, RGBA, transparent, and validated gradients.
- Added no outer background declaration when container_bg is omitted, preserving theme and Elementor styling.
- Kept card_bg limited to individual cards and left AJAX pagination, grid, list, slider, filters, ACF rendering, Events Calendar integration, assets, public identifiers, and stored data unchanged.

1.6.4
- Fixed symbolic <, <=, >, and >= operators in meta_compare and meta_filters.
- Prevented compound ranges such as start:{today}:<=|end:{today}:>= from being interpreted as HTML and truncated.
- Accepted entity-encoded symbols and optional LT, LTE, GT, GTE, EQ, and NE aliases for page-builder compatibility.
- Preserved the approved shortcode, defaults, query behavior outside comparison parsing, slider runtime, AJAX action, assets, CSS selectors, JavaScript events, and stored data.

1.6.3
- Clarified the administrator manual with the canonical [ingotforge_cards] shortcode, plugin folder, settings-page slug, and text domain.
- Added a manual-page warning when another active plugin or custom component registers the legacy [acf_cards] shortcode.
- Audited the package for bare legacy shortcode, menu, text-domain, AJAX, CSS, and JavaScript identifiers.
- Made no changes to card rendering, queries, sliders, AJAX pagination, styles, public defaults, or stored data.

1.6.2
- Restored the approved default slider height/equalization lifecycle for ordinary sliders.
- Added backward-compatible slider handling so an explicitly supplied columns value controls desktop slides when slides_per_view is omitted.
- Kept slides_per_view authoritative when both slider count options are present.
- Preserved grid columns, field alignment, filtering, AJAX, and existing public identifiers.

1.6.1
- Fixed field_value_align when field labels are hidden and on small screens.
- Fixed description_length for the common ACF textarea description field.
- Made explicit image_height authoritative in grid, list, and slider layouts unless image_cover is enabled.
- Allowed image_cover to use the full available height in list and slider layouts instead of inheriting legacy aspect or thumbnail caps.
- Added field_align as a compatibility alias for field_value_align.
- Made explicit field label/value alignment occupy usable row space so center and left/right options are visually effective.
- Allowed explicit label/value alignment and padding to override the document-description compatibility defaults.
- Fixed slider equal-height measurement so card_height and responsive card-height options remain effective.
- Applied the shortcode-argument filter during AJAX pagination to keep later pages consistent with the initial render.
- Prevented aborted or stale AJAX requests from clearing newer loading states or replacing newer results.
- Normalized numeric taxonomy filters to WordPress's documented term_id field.
- Preserved meta_value="0", converted IN/BETWEEN comparisons to the array format expected by WP_Query, honored single-key EXISTS/NOT EXISTS comparisons without values, and preserved colons inside meta-filter values.
- Pre-detected shortcodes in normal post content and Elementor data so front-end styles can load in the document head, and enqueued them late enough to improve theme compatibility while retaining the existing runtime fallback.

1.6.0
- Added the compatible card, visibility, image, responsive-height, and hover controls from the development branch.
- Preserved the approved shortcode, namespace, AJAX action, asset handles, CSS prefixes, option name, query behavior, The Events Calendar integration, custom empty-state text, and existing design defaults.
- Scoped dynamic CSS variables to the individual plugin instance.
- Added image-only cards and link_to="none" support.
- Added safe handling for URL, attachment-ID, and ACF file-array document fields.
- Added accessible region, list, pagination, focus, reduced-motion, slider, and loading states.
- Added instance-scoped Swiper navigation to prevent multiple sliders from controlling one another.
- Added optional slider keyboard, autoplay-pause, equal-height, and auto-height controls.
- Split slider initialization into a conditional asset so Swiper is not loaded for grid/list-only pages.
- Added abortable AJAX requests, error announcements, busy states, and custom refresh/update events.
- Hardened AJAX request handling with named-field whitelisting, unslashing, nonce sanitization, normalization, and late escaping.
- Hardened inline CSS values against added declarations, URLs, at-rules, markup, and !important injection while retaining common CSS functions and color formats.
- Fixed symbolic meta_compare values such as >= during AJAX pagination.
- Fixed textarea separators and preserved complex ACF return values without object-to-string errors.
- Added developer filters and complete third-party source/license documentation.
- Aligned current WordPress.org metadata and direct-access guards, and moved manual-page styling to a conditionally enqueued admin stylesheet.

1.5.1
- Added not_found_text to customize the default empty-state message.

1.5.0
- Renamed the plugin and public identifiers to the approved IngotForge naming.
- Changed the shortcode to [ingotforge_cards].
- Added unique PHP, JavaScript, CSS, option, hook, asset, and nonce prefixes.
- Added output escaping, AJAX sanitization, and the in-admin manual.

1.4.0
- Corrected admin-page HTML validation issues.
- Bundled Swiper v11.1.14 locally instead of using a CDN.
- Added translator comments and WordPress.org compliance updates.

1.3.9
- Improved AJAX sanitization, translations, asset dependencies, and meta sorting.

1.3.8
- Initial public release with grid, list, slider, AJAX pagination, and styling attributes.
