+
Feature Image Preview
+
 }})
+
+ {% if hasCustomDescription %}
+ {# Use `del` and `ins` when both are present: #}
+ {% if hasGlobalDescription %}
+
{{ image.alt }}
+
{{ element.featureImageDescription }}
+ {% else %}
+
{{ element.featureImageDescription }}
+ {% endif %}
+ {% else if hasGlobalDescription %}
+ {# Just surface the original text: #}
+
{{ image.alt }}
+ {% else %}
+ {# Uh oh! #}
+
No accessible description is available for this image. Please add one to this article (using the **Feature Image Description** field, above), or set a default one on the image itself.
+ {% endif %}
+
+{% endif %}
+```
+
+This is essentially a more verbose implementation of the fallback logic discussed in the [alternative text section](#alternative-text).
+
+::: tip
+You can do the same thing within the content block-based override!
+:::
+
+### Jump links and labels
+
+Many accessibility attributes (like `aria-describedby` and `aria-controls`) require absolute, unique identifiers.
+Suppose you allow authors to create tabbed “tour” interfaces, within a page builder—
+tab names may collide if they are based on content (`tab.label | handle`) or a sequence (`tab-#{loop.index0}`).
+
+For content with `id`s or `uid`s, you may have enough to reliably connect pieces of an interface.
+Everything else (like rows in a [table field](../reference/field-types/table.md)) will require generating temporary identifiers:
+
+```twig
+{% set tabMap = collect([]) %}
+{% set groupId = "tab-group-#{random()}" %}
+
+
+ {# ... #}
+
+{% endfor %}
+```
+
+This will create identifiers that look something like `pane-63570161`.
+Note that we’re creating a two-way binding between the `tab` and `tabpanel`:
+
+- The `tab` has an `aria-controls` attribute containing the raw identifier, and an `id` attribute with the identifier and a suffix.
+- The `tabpanel` has an `id` attribute containing the raw identifier and an `aria-labelledby` attribute, with the identifier and a `-tab` suffix.
+
+## Testing and auditing
+
+The best time to start auditing your front-end for accessibility is during development.
+
+As you build out your templates, tools like Deque’s [Axe DevTools for Web](https://www.deque.com/axe/devtools/web-accessibility) can flag concrete violations and help you prioritize remediation.
+
+To monitor the accessibility of content and quickly identify issues that crop up after launch, consider using a tool like [Accessible Web](https://accessibleweb.com/)’s [automated scanning tool](https://accessibleweb.com/ramp-web-accessibility-tools/accessibility-monitoring/).
+
+Set up a [custom source](../system/elements.md#sources) for your assets using the **Has alternative text** condition rule to give authors a central place to remedy missing image descriptions:
+
+
diff --git a/docs/5.x/development/image-transforms.md b/docs/5.x/development/image-transforms.md
index 5e6b450cc..0a4affd77 100644
--- a/docs/5.x/development/image-transforms.md
+++ b/docs/5.x/development/image-transforms.md
@@ -251,6 +251,13 @@ You can also provide relative image sizes when eager-loading asset transforms. S
When requesting asset data via the [GraphQL](graphql.md) API, you can get named and ad-hoc transforms with the `@transform` directive.
+::: warning
+To prevent abuse, the `@transform` directive is disabled by default.