Fix: TOC β preg_match_all and preg_replace_callback results validated before use; prevents PHP 8 TypeError when PCRE fails on pathological content.
Fix: Ad Manager β blockAutoAds() now correctly preserves AWO-managed ad slots (inside [data-awo-slot]) while still blocking Google Auto Ads injections; sticky footer ad was being removed by its own observer.
Fix: Sticky footer β added to Google Auto Ads blocklist to prevent double-ad stacking; CSS max-height (40vh) and scrollable overflow prevent full-screen takeover on mobile; close button is now position:sticky so it stays reachable.
Fix: Ad Settings β awozware_anti_adblock_message_es and awozware_anti_adblock_message_en were missing register_setting() calls, causing WordPress to silently discard values on save.
Fix: AWOZWARE_SUPPORT_URL constant now uses defined() || guard to prevent PHP Warning when AWO Free and AWO Premium are active simultaneously.
2.4.0
Table of Contents moved from AWO Premium to AWO Free β no licence required.
MutationObserver blocks Google Auto Ads from injecting inside AWO containers (.awozware-toc, .lets-info-up, .awozware-related-grid).
Related post cards: titles now clamp to 5 lines maximum; cards maintain equal height via flexbox.
Added load_plugin_textdomain() for proper translation support.
2.3.0
New: Unified Features page β free and premium module toggles in one view when Premium is active.