=== AcceGuru Changelog ===

= 1.0.4 =
* Compatibility: tested with WordPress 7.1.
* Block Editor: find the editor canvas by its frame name instead of a class that WordPress dropped after 6.5, so clicking a finding scrolls to the element and highlights it again.
* Block Editor: a finding whose element is not in the editor (theme header, navigation, footer) now says so under the row instead of doing nothing; the note follows the finding, not its position in the filtered list.
* AI Alt Text: accept AVIF in the count of images without alt text, in the Bulk Alt Text selection and on the way to the provider; AVIF is converted to a temporary JPEG copy first and the stored file is left untouched.
* AI Alt Text: send WordPress's ready-made "large" copy instead of the full-size original, falling back to the original when that copy does not exist.
* AI Alt Text: automatic generation on upload moved to the point where the resized copies exist, and limited to attachments created in the same request - regenerating thumbnails no longer sends existing images to the provider.
* AI Alt Text: report an unreadable format instead of failing silently, and load the temporary-file helper that REST requests do not provide.
* Dashboard and Rules: link rule names to the W3C page for AcceGuru's own 13 checks; axe-core rules keep their Deque pages.
* Settings: item counts next to content types restored, with a note that they are site totals rather than the size of the next scan.
* Dashboard: keep any collapsible block open when a control inside its header is used, including the trend-chart series checkboxes.
* A11y column: run the post-update sorting rebuild silently and warn only when it stalls.
* Settings: restore the "Upgrade to Pro" card and menu entry, hidden whenever the add-on is active; the menu entry uses an internal page name and redirects.

= 1.0.3 =
* Scanner: recognise addresses that redirect elsewhere, report them separately as "Redirected addresses", and keep them out of Failed, Eligible and Retry.
* Scanner: finish a redirected address immediately instead of waiting out the per-page deadline.
* Scanner: pass the expected page to the scan frame and check it before scanning and before saving, so a result is never stored under another page.
* Scanner: treat a blocked frame check as a redirect only after confirming it against the server, so a page that never left the site is no longer dropped.
* Scanner: check list pages such as the WooCommerce Shop page and the assigned Posts page instead of running into the deadline.
* Scanner: report an address that answers with a not-found page as a scan error and do not store its result.
* Scan log: new "Ignored redirects" section in the downloaded file, with the requested and final address.
* Dashboard: remember the selected post statuses between scans.
* Settings: remove the item counts next to content types, which could not match what a scan actually walks.
* A11y column: sort by the visible issue count after current ignored-rule and add-on filters, keep stale and unscanned rows after current results in both directions, and rebuild sorting data safely when filter state changes.

= 1.0.2 =
* Scanner: keep scan-result saves on the current site address when multilingual plugins alter page URLs.
* Scanner: show completed-page progress clearly and keep selected content-type totals accurate after retry.
* Dashboard: keep Media Library alt-text totals stable across WPML languages and third-party query filters.
* AI Alt Text: describe automatically skipped files as likely decorative and show the skipped count before and after generation.
* A11y column: match dashboard counts after ignored rules and add-on filters, and ignore malformed saved rows.
* Accessibility statement: preserve the tracked page when settings are saved and avoid duplicate statement pages.
* Scan log: decode HTML entities in page labels once, then sanitize them before display and download.
* Overlay: protect issue-row alignment from global theme button styles.
* Settings: keep WordPress admin notices above the plugin settings interface.
* Fixers: handle malformed stored settings without warnings on public pages.
* Extensions: provide archive context and a neutral hook for compatible add-ons.

= 1.0.1 =
* Scanner: update the bundled axe-core accessibility engine from 4.10.2 to 4.12.1.
* Scanner: apply the selected WCAG level and recommended-checks toggle to both axe-core and AcceGuru checks.
* Scanner: correct custom-rule classifications and remove or suppress duplicate axe-core findings.
* Scanner: calculate Passed Checks from axe-core passes and violations only.
* Scanner: accept scan-completion messages only from the active hidden iframe.
* Performance: process scan records, scan targets and AI alt-text candidates in bounded database batches.
* Overlay: add dialog semantics, keyboard navigation, Escape/focus management, visible focus, and reliable highlight/listener cleanup.
* Uninstall: replace the tracked statement shortcode with static content, or move the page to the Trash when full data removal is enabled.
* Scanner: mark saved results for a new scan when the scan profile or ruleset changes; prevent pause/resume and retry from mixing profiles.
* AI Alt Text: add OpenAI and Anthropic providers alongside Gemini and Mistral.
* Scanner: "Retry failed pages" button picks up pages that timed out in the previous run.
* Scanner: cap site-scan log size on huge sites; persist counters server-side so they survive reload.
* Scanner: warn via tab title + banner + beforeunload guard when the scan tab loses focus or you try to navigate away.
* Dashboard: card colour swap (Issues / Critical), Top Offending Pages bumped to 15 with View-all Pages / Posts / Media links, per-segment distribution-bar tips.
* Dashboard: scan-coverage line ("X of Y content types") listing which content types are scanned and which are left out.
* Fixers: add "empty alt" review rule, stop hiding low-count issues, fix featured-image skip in Alt generator.
* Scanner: site-scan runs one page at a time; removed an unused, never-wired concurrency filter.
* Block Editor: fix the "View post on front-end" link in the sidebar.
* Settings: Scanner tab regrouped into two clear sections; the full-site scan can include any public post type registered on the site.
* Various dashboard polish: Cancel button restyle, status filter on one line, reset button alignment.

= 1.0.0 =
First public release. Highlights of everything shipped in 1.0.0:

**Visual + UX**
* Full visual redesign across the Dashboard, Settings, Block Editor sidebar, front-end overlay and admin-bar UI.
* Brand-styled admin bar button and sidebar menu item with new icon.
* Front-end floating launcher button for one-click overlay open.

**Scanner**
* Initial scanner implementation with axe-core integration and Block Editor sidebar.
* Site-wide scan, dashboard, A11y admin column.
* Site-scan pause / resume.
* Adaptive "time left" estimate on the running scan; scan duration + readable local date shown after each run.
* Front-end overlay always runs a fresh scan; no more stale "Showing saved scan" banner.
* Dashboard cards count every scanned page (not just top 10) - fixes silent under-count on sites with more than 10 scanned pages.
* "Show affected code" expandable per issue.
* Six AC-style custom rules (text-too-small, link-opens-new-window-no-warning, possible-heading, text-justified, positive-tabindex, empty-button).
* WCAG 2.2 / Section 508 / EN 301 549 standards coverage.
* Standards displayed as readable colour-coded chips with hover tooltip showing the criterion name (e.g. "WCAG 2.0 A · 4.1.2 - Name, Role, Value").

**Fixers (server-side)**
* Server-side fixers - focus outlines, skip-link.
* Six more auto-fixers: remove positive tabindex, remove redundant title, viewport scalable, label new-window links, search field accessible name, empty-search results page.
* Four more fixers: comment-form labels, document-link labels, force link underline, autoplay video controls.

**AI Alt Text**
* AI alt text - Gemini and Mistral providers; bulk + Media Library + on-upload.

**Accessibility statement**
* Accessibility statement generator with `[acceguru_statement]` shortcode and optional footer link.

**Settings**
* Configurable skip-link target selectors, post types to scan, Block Editor sidebar toggle, overlay docking side (right/left).
* Opt-in "Delete all data on uninstall".

**Performance / security / i18n**
* Lazy-load axe-core (~540KB) on first overlay click instead of every admin pageview.
* Security pass on REST endpoints.
* Cache dashboard aggregation in a transient (faster on large sites).
* Switch image fetch to `wp_safe_remote_get` (SSRF defense in depth).
* Translation-ready: load text domain, register script translations, ship `.pot`.
* Plugin Check: cleared all ERRORS and flagged WARNINGS.
