Skip to content

Accessibility Checklist

Guidance for how to make your interfaces accessible

Category Rule Title Applies To Requirement Dev Action How To Test Failure Failure Type User Impact Related WCAG SC Notes
All Inputs Every enabled and disabled input must have a label parameter value a!textField, a!paragraphField, a!integerField, a!decimalField, a!dateField, a!timeField, a!styledTextEditorField, a!encryptedTextField, a!signatureField, a!barcodeField, a!recordsChatField, a!dropdownField, a!multipleDropdownField, a!radioButtonField, a!checkboxField, a!pickerFieldUsers, a!pickerFieldGroups, a!pickerFieldUsersAndGroups, a!pickerFieldDocuments, a!pickerFieldFolders, a!pickerFieldDocumentsAndFolders, a!pickerFieldRecords, a!pickerFieldCustom, a!pickerField, a!sliderField Set the label parameter on every input. The label must describe the input's purpose. Set a label parameter value on every input component. Must not be null. SAIL: label parameter must not be null.

Screen Reader: TAB to input - label must be first thing announced.

Tool: axe DevTools page scan (browser only, not Designer). Note that this test will not work for Appian text and paragraph fields.
Input has no label Error Critical 1.3.1 (A) Info and Relationships
4.1.2 (A) Name, Role, Value
Does not apply to links. Applies to buttons only in certain use cases.
All Inputs Input label must be descriptive a!textField, a!paragraphField, a!integerField, a!decimalField, a!dateField, a!styledTextEditorField, a!encryptedTextField, a!signatureField, a!barcodeField, a!recordsChatField, a!dropdownField, a!multipleDropdownField, a!radioButtonField, a!checkboxField, a!pickerFieldUsers, a!pickerFieldGroups, a!pickerFieldUsersAndGroups, a!pickerFieldDocuments, a!pickerFieldFolders, a!pickerFieldDocumentsAndFolders, a!pickerFieldRecords, a!pickerFieldCustom, a!pickerField, a!sliderField Set the label parameter on every input so it indicates the purpose of the input or the type of input that is expected. Set label on every input component to a value that indicates the purpose of the input. SAIL: label parameter conveys the purpose of the input.

Screen Reader: TAB to input - label must be descriptive and accurate.
Input label not descriptive Warning - Needs Review Needs Context 2.4.6 (AA) Headings and Labels
3.3.2 (A) Labels or Instructions
Applies to both visible and programmatic labels.
All Inputs Don't rely on placeholder text for important info a!textField,a!paragraphField, a!integerField, a!decimalField, a!styledTextEditorField, a!encryptedTextField, a!fileUploadField, a!barcodeField, a!chatField, a!dropdownField, a!multipleDropdownField, a!pickerFieldUsers, a!pickerFieldGroups, a!pickerFieldUsersAndGroups, a!pickerFieldDocuments, a!pickerFieldFolders, a!pickerFieldDocumentsAndFolders, a!pickerField, a!pickerFieldRecords, a!pickerFieldCustom, a!pickerField Placeholder text alone must not convey important information such as valid ranges and formats. Put format hints and ranges in the instructions parameter or a visible label - not just placeholder. Visual: Confirm important info is visible by means other than only the placeholder text. Placeholder text is used to convey important information Warning - Needs Review High 3.3.2 (A) Labels or Instructions
All Inputs Labels must be persistently visible a!textField, a!paragraphField, a!integerField, a!decimalField, a!dateField, a!timeField, a!styledTextEditorField, a!encryptedTextField, a!signatureField, a!barcodeField, a!recordsChatField, a!dropdownField, a!multipleDropdownField, a!radioButtonField, a!checkboxField, a!pickerFieldUsers, a!pickerFieldGroups, a!pickerFieldUsersAndGroups, a!pickerFieldDocuments, a!pickerFieldFolders, a!pickerFieldDocumentsAndFolders, a!pickerFieldRecords, a!pickerFieldCustom, a!pickerField, a!sliderField Every input must have a label that stays visible at all times. Placeholder text or a currently selected value does not meet this requirement. Use label + set the labelPosition parameter to anything other than COLLAPSED.

OR

Use rich text set to the same value as the input label and use a labelPosition parameter of COLLAPSED.
Visual: Confirm the label is visible when the input has and does not have a value. Input has no persistently-visible label Error High 2.4.6 (AA) Headings and Labels
3.3.2 (A) labels or Instructions
This requirement is always met when a label parameter value is provided for the input and a labelPosition of any value other than COLLAPSED is used.
All Inputs Accessible name must include visible label text a!textField, a!paragraphField, a!integerField, a!decimalField, a!dateField, a!timeField, a!styledTextEditorField, a!encryptedTextField, a!signatureField, a!barcodeField, a!recordsChatField, a!dropdownField, a!multipleDropdownField, a!radioButtonField, a!checkboxField, a!pickerFieldUsers, a!pickerFieldGroups, a!pickerFieldUsersAndGroups, a!pickerFieldDocuments, a!pickerFieldFolders, a!pickerFieldDocumentsAndFolders, a!pickerFieldRecords, a!pickerFieldCustom, a!pickerField, a!sliderField The accessible name (the input label parameter value) must contain at least the exact same text as the visible label. When labelPosition is COLLAPSED, ensure the label parameter value contains at least the same exact text as the visible rich text label. SAIL: label parameter contains the exact same string as the visible label.

Screen Reader: TAB to input - announced name must include the exact visible label string.
Input label does not contain the visible label Error Medium 2.5.3 (A) Label in Name The accessible name is the label parameter value set on the input. This is also known as the programmatic label.

This requirement is always met when a label parameter value is provided for the input and a labelPosition of any value other than COLLAPSED is used.
All Inputs Disambiguate duplicate controls Repeated inputs, links, or buttons with identical labels
(any a!textField, a!dropdownField, a!buttonWidget, a!richTextItem, etc. where the same label/text appears more than once on the same screen)
When multiple controls share the same visible name or label parameter value, provide additional context via accessibilityText, icon altText, or a labeled section/box layout. Does not apply to controls and inputs in grids. Set accessibilityText or icon altText/caption to indicate what each duplicate relates to, OR wrap in a!sectionLayout/a!boxLayout with a label. Screen Reader: TAB through duplicates - each must be distinguishable OR use Browse mode: Check for hidden context text immediately before/after each control or input. Duplicate control/input names are present Error Medium to High based on context 1.3.1 (A) Info and Relationships
2.4.4 (A) Link Purpose (In Context) (links)
2.4.6 (AA) Headings and Labels
4.1.2 (A) Name, Role, Value
Because of a known bug, it is not recommended to set accessibility text on rich text links because the information is provided in only one navigation mode for screen reader users.
Checkbox Checkbox: each option must have a choice label a!checkboxField Every individual checkbox must have a label via the choiceLabels parameter. Set choiceLabels - no null values. SAIL: choiceLabels parameter has a meaningful value.

Screen Reader: TAB to each checkbox - must announce its label.

DOM: <label for=...> must match input ID and must not be null.
Individual checkbox has no label Error Critical 1.3.1 (A) Info and Relationships
3.3.2 (A) Labels or Instructions
4.1.2 (A) Name, Role, Value
Use of a rich text label does not meet this requirement.
Checkbox Checkbox group must have a group label a!checkboxField When a checkbox group has more than one option, the component must have a label parameter set. Set label on a!checkboxField. SAIL: label parameter has a value.

Screen Reader: TAB to group - must announce the label and identify as "group" or "grouping".
Checkbox group has no label Error High to Critical based on context 1.3.1 (A) Info and Relationships
4.1.2 (A) Name, Role, Value
Setting the label on a!checkboxField allows screen readers and other assistive technologies to identify the checkboxes as a "group" or "grouping". This information is announced when the first checkbox in the group receives keyboard focus via forward navigation and when the last checkbox in the group receives keyboard focus via backward navigation.
Checkbox Checkbox group must have a descriptive group label a!checkboxField When a checkbox group has more than one option, the component must have a descriptive label parameter set. Set a descriptive label on a!checkboxField. SAIL: label parameter has a descriptive value.

Screen Reader: TAB to group - must announce a descriptive label for the group.
Checkbox group has nondescript label Warning - Needs Review High to Critical based on context 2.4.6 (AA) Headings and Labels
Checkbox Boolean Checkbox: option must have a choice label a!booleanCheckboxField Every boolean checkbox must have a label via the choiceLabel parameter. Set the choiceLabel parameter - no null value. SAIL: choiceLabel parameter has a value.

Screen Reader: TAB to the checkbox - must announce its label.

DOM: <label for=...> must match input ID and must not be null.
Boolean checkbox has no label Error Critical 1.3.1 (A) Info and Relationships
3.3.2 (A) Labels or Instructions
4.1.2 (A) Name, Role, Value
Radio Button Radio button: each option must have a choice label a!radioButtonField Every individual radio button must have a label via the choiceLabels parameter. Set the choiceLabels parameter - no null values. SAIL: choiceLabels parameter has a value.

Screen Reader: Up/Down arrows to each radio button - must announce its label.

DOM: <label for=...> must match input ID and must not be null.
Individual radio button has no label Error Critical 1.3.1 (A) Info and Relationships
3.3.2 (A) Labels or Instructions
4.1.2 (A) Name, Role, Value
Radio Button Radio button group must have a group label a!radioButtonField When a radio button group has more than one option, the component must have a label parameter set. Set label on a!radioButtonField. SAIL: label parameter has a value.

Screen Reader: TAB to selected radio - must announce the label and identify as "group" or "grouping".
Checkbox group has no label Error High to Critical based on context 1.3.1 (A) Info and Relationships
4.1.2 (A) Name, Role, Value
Setting the label on a!radioButtonField allows screen readers and other assistive technologies to identify the radio buttons as a "group" or "grouping".
Radio Button Radio button group must have a descriptive group label a!radioButtonField When a radio button group has more than one option, the component must have a descriptive label parameter set. Set a descriptive label on a!radioButtonField. SAIL: label parameter has a descriptive value.

Screen Reader: TAB to selected radio button - must announce a descriptive label for the group.
Checkbox group has nondescript label Warning - Needs Review High to Critical based on context 2.4.6 (AA) Headings and Labels
Text Field Auto-complete for personal info fields a!textField, a!encryptedTextField for personal data Text fields accepting personal info of the person completing the form must set inputPurpose. "Name" is only for a single full-name field. Do not set inputPurpose on public/shared devices. Set the appropriate inputPurpose parameter value on a!textField or a!encryptedTextField. SAIL: inputPurpose parameter has an appropriate value based on the type of input requested.

Keyboard: TAB to field - previously entered values should appear as suggestions.

DOM: Confirm autocomplete attribute is set on <input type="text"> and the attribute value is appropriate for the input being requested.
No input purpose for personal data input Warning - Needs Review High 1.3.5 (AA) Identify Input Purpose Some browsers will attempt to provide dropdown values by default, but without the input purpose being specifically defined, the browser may provide inaccurate information in the dropdown.

Refer to the product documentation for available values for input purpose.
Toggle Field Toggle: must have a choice label a!toggleField Every toggle must have a label via the choiceLabel parameter. Set choiceLabel - no null values. SAIL: choiceLabel parameter has a value.

Screen Reader: TAB to toggle - must announce its label.

DOM: Second value used for the aria-labeledby parameter must match the <label> ID and <label> must not be null.
Toggle has no label Error Critical 1.3.1 (A) Info and Relationships
3.3.2 (A) Labels or Instructions
4.1.2 (A) Name, Role, Value
Do not indicate the on/off state in the label value.
Required Fields Required fields must be marked All required inputs
(a!textField, a!paragraphField, a!integerField, a!decimalField, a!timeField, a!dateField, a!encryptedTextField, a!dropdownField, a!multipleDropdownField, a!checkboxField, a!radioButtonField, a!booleanCheckboxField, a!toggleField, a!cardChoiceField, a!pickerFieldRecords, a!pickerFieldUsers, a!pickerFieldGroups, a!pickerFieldDocuments, a!pickerFieldFolders, a!pickerFieldCustom, a!fileUploadField, a!signatureField, a!barcodeScannerField)
Inputs that are required must have the required parameter set to TRUE. Set required: true on the input. SAIL: required parameter is set to TRUE.

Screen Reader: TAB to input - must announce "required".

DOM: aria-required="true" on the input.
Input not indicated as being required Error High 1.3.1 (A) Info and Relationships
3.3.2 (A) Labels or Instructions
4.1.2 (A) Name, Role, Value
Do not use a rich text asterisk to indicate required fields.
Error Messages Use OOTB validation for errors All inputs with validation
(a!textField, a!paragraphField, a!integerField, a!decimalField, a!dateField, a!timeField, a!encryptedTextField, a!dropdownField, a!multipleDropdownField, a!checkboxField, a!radioButtonField, a!pickerFieldRecords, a!pickerFieldUser, a!pickerFieldGroups, a!pickerFieldDocuments, a!fileUploadField, a!signatureField, a!barcodeScannerField)
All error messaging must use Appian's built-in validation (applicable validations, validationGroup, validationMessage parameters). Don't build custom error displays or use the message banner for errors. Use the standard validation parameters only. Screen Reader: TAB to an invalid input - must announce the error message and "invalid entry".

DOM: aria-describedby on input references the error message node.
Input not indicated as having an error Error Critical 1.3.1 (A) Info and Relationships
3.3.1 (A) Error Identification
3.3.3 (AA) Error Suggestion
4.1.2 (A) Name, Role, Value
Error Messages Include input name in error messages All inputs with validation
(a!textField, a!paragraphField, a!integerField, a!decimalField, a!dateField, a!timeField, a!encryptedTextField, a!dropdownField, a!multipleDropdownField, a!checkboxField, a!radioButtonField, a!pickerFieldRecords, a!pickerFieldUser, a!pickerFieldGroups, a!pickerFieldDocuments, a!fileUploadField, a!signatureField, a!barcodeScannerField)
Error messages must include the input's visible name, e.g., "First Name requires a value." Cannot be applied to character counter and integer field errors. Follow the pattern: "[Input Name] requires a value." or "[Input Name] must be numeric." Visual: Read each error message and confirm the visible input name is present. Input name not used in error message Error Medium 3.3.1 (A) Error Identification
Input Instructions Use instructions parameter for input instructions and hints All inputs with visible hints
(a!textField, a!paragraphField, a!integerField, a!decimalField, a!dateField, a!timeField, a!encryptedTextField, a!dropdownField, a!multipleDropdownField, a!checkboxField, a!radioButtonField, a!booleanCheckboxField, a!cardChoiceField, a!toggleField, a!pickerFieldUsers, a!pickerFieldGroups, a!pickerfieldDocuments, a!pickerFieldRecords, a!pickerFieldCustom, a!fileUploadField, a!signatureField)
Visible instructions (formats, ranges, etc.) must be set via the instructions parameter on the input - not placeholder text or free text placed nearby. Set the instructions parameter. SAIL: The instructions parameter is set to the instruction text.

Screen Reader: TAB to input - instructions must be announced.

DOM: aria-describedby references the instructions node.
Instructions not associated with input Error High 1.3.1 (A) Info and Relationships
3.3.2 (A) Labels or Instructions
Input Instructions Instructions do not reference physical location or color All instructions (text, buttons, links, icons, status indicators, charts, form inputs, message banners, accessibility text) Don't identify elements by their physical location (e.g., "left", "right", "corner") or their color (e.g., "red button"). Refer to elements by their name (e.g., "Continue button"), reference a nearby semantic heading to identify location, or use generic terms. It is permissible to use "above", "before", "below", or "after". Visual: Confirm instructions and cues do not identify elements using "left", "right", "corner", etc. or by color. Elements referenced using sensory information Warning - Needs Review High 1.3.3 (A) Sensory Characteristics
Input Instructions Required-field legend Forms with required fields using asterisks If required fields use an asterisk, a visible legend must appear before the first input, e.g., "Required fields are marked with an asterisk (*)". Add legend text before the first input. Visual: Confirm the legend is present at the top of the form. Legend not provided for required inputs using an asterisk Error Medium 3.3.2 (A) Labels or Instructions
Input Instructions Auto-populate previously entered data Multi-step forms/workflows, wizards, milestones Information a user already entered in an earlier step must be auto-populated or selectable - don't make them re-enter it. Carry forward user-entered data across steps. Visual: Walk through multi-step flows and confirm previously entered data carries forward. Previously entered data not prepopulated or selectable Error Medium to High based on context 3.3.7 (A) Redundant Entry
Grid Every grid needs a label a!gridField, a!gridLayout Set the label parameter on a!gridField. Can use labelPosition: COLLAPSED if a visible heading that summarizes the content precedes the grid. Do not use "grid" or "table" in the label text. Set label on a!gridField. SAIL: label parameter has a value.

Screen Reader (Browse): Press T (Windows) or VO+Cmd+T (Mac) - must announce the label.

DOM: aria-labelledby on <table> references the node that contains the label text.
Grid has no label Error Critical 1.3.1 (A) Info and Relationships
4.1.2 (A) Name, Role, Value
Grid Grid label must be descriptive a!gridField, a!gridLayout Set the label on the grid to a value that describes the purpose of or content in the grid. Do not use "grid" or "table" in the label text. Set descriptive label on a!gridField. SAIL: label parameter has a value that accurately describes the purpose of or content in the grid.

Screen Reader (Browse): Press T (Windows) or VO+Cmd+T (Mac) - must announce a descriptive label.

DOM: aria-labelledby on <table> references the node that contains the label text and the label makes sense based on the content in the grid.
Grid has incorrect label Warning - Needs Review High to Critical based on context 1.3.1 (A) Info and Relationships
2.4.6 (AA) Headings and Labels
Grid Column headers are required a!gridColumn Every data column and column that contains form inputs must have header text via a label on a!gridColumn. Exception: columns with single or multiple self-describing controls (action menus, up/down links) typically output in the last (rightmost) grid column. Set label on each a!gridColumn. Visual: Check the top of each column for text.

Screen Reader: Use table nav keys (Ctrl+Alt+Left/Right) - headers must be announced as cells in each row are navigated left and right.

DOM: Each <th> in <thead> must have a value.
Grid column has no header cell Warning - Needs Review Critical 1.3.1 (A) Info and Relationships For columns that contain inputs such as text fields, dropdowns, etc., the column header text provides the required programmatic label for the inputs in the column in the same way setting a label parameter on the individual input would.
Grid Define grid row headers a!gridField, a!gridLayout Set the rowHeader parameter on the grid to the position of the cell that uniquely identifies each row and is not repeated in other rows. Caution on editable grids - in most cases the row header should not be set on a cell that contains an input (editable grids). Set the rowHeader parameter to the numeric position of the identifying cell. Screen Reader: Navigate cells to the right of the column header up/down (Ctrl+Alt+Up/Down) - row header value must be announced before the value in each cell.

DOM: Row header cell uses scope="row".
Grid row header is not defined or is defined on incorrect cell Warning - Needs Review High 1.3.1 (A) Info and Relationships Do not set the row header on cells that can contain the same value in more than one row.
Grid No empty columns for spacing a!gridColumn, a!gridLayoutHeaderCell Don't use empty grid columns as spacers or placeholders for data that is not present. Ensure every column has a label and valid value parameter. Remove empty columns that are used for spacing or as placeholders. Screen Reader: Column count announced must match visible number of columns.

DOM: Every <th> in the header row must contain text.
Empty grid column is used for spacing Error High 1.3.1 (A) Info and Relationships Using empty columns for spacing conveys incorrect grid dimensions to non-sighted users. Screen readers inform users of how many rows and columns are contained in the grid when they are accessed.
Grid Grid instructions a!gridField, a!gridLayout Use the grid's instructions parameter for any instruction text. Use "table" not "grid" in the wording if it must be used. Set instructions on the grid. Use "table" not "grid" if the element must be referenced. SAIL: Grid instructions parameter contains the visible instruction text.

Screen Reader (Browse): Press T (Windows) or VO+Cmd+T (Mac) - instructions must be announced.

DOM: aria-describedby on <table> references the instructions node.
Instructions are not associated with the grid Error High 1.3.1 (A) Info and Relationships
3.3.2 (A) Labels or Instructions
The need to use "table" in instruction text should be rare.
Grid Warn users about controls enabled by row selection a!gridField, a!gridLayout with selectable rows When controls above a grid become enabled on row selection, set accessibility text on the grid (preferred) OR use a!messageBanner to announce when controls become enabled. Use "table" not "grid" if the information needs to reference the element. Set accessibility text of "Controls above table become enabled on row selection" on the grid and do not indicate the condition under which controls become disabled (PREFERRED). OR use a!messageBanner with announceBehavior of ANNOUNCE_ONLY with a basic message of "Controls above grid are enabled" and do not use an announcement when controls are subsequently disabled. Screen Reader: Navigate to the grid - accessibility text must be announced, OR select a row and listen for a message banner announcement. Users not informed of dynamic control states Error High 1.3.1 (A) Info and Relationships
1.3.2 (A) Meaningful Sequence
2.4.3 (A) Focus Order
Non-sighted users need to be informed of this function EITHER before it occurs or afterward (not both). It is preferred to put the information in the grid accessibility text rather than using a message banner to reduce the potential number of screen reader announcements.
Grid Row reorder links: target size Grid row ordering links Up/down row-ordering links must be at least 24x24px, OR 24px circles centered on each link must not overlap. Three spaces between links or the use of buttons meet this requirement. Ensure links are ≥24x24px or add 3 spaces between them. Phase 1: DOM inspect - check link size ≥24x24px (check the link anchor, not the icon within the link).

Phase 2 (if undersized): Use target size bookmarklet or axe DevTools scan "All touch targets must have sufficient size".
Controls have insufficient target size Error High 2.5.8 (AA) Target Size (Minimum) Buttons should be used for these controls. Links are typically not used to perform this function on the web.
Grid Drag-and-drop needs a single-click alternative Grids with drag-and-drop row reordering Grid row drag-and-drop must also provide single-click alternatives (e.g., up/down controls). Add up/down controls alongside drag-and-drop. Visual: Confirm single click-based reorder controls exist alongside drag-and-drop. No single-click alternative to grid row drag and drop Error Critical 2.1.1 (A) Keyboard
Grid Drag-and-drop needs a keyboard alternative Grids with drag-and-drop row reordering Grid row drag-and-drop must also provide a keyboard alternative (e.g., up/down controls). Add up/down controls alongside drag-and-drop. Keyboard: Confirm row reordering controls are available that can receive keyboard focus with the TAB key and can be operated with the keyboard. No keyboard alternative to grid row drag and drop Error Critical 2.1.1 (A) Keyboard Buttons should be used for up/down controls. These are typically used to perform this function on the web.
Headings Use semantic headings a!headingField, layouts with labelHeadingTag (a!sectionLayout, a!boxLayout) Visual headings must be defined using a!headingField or a layout's labelHeadingTag parameter - not just styled text. Use a!headingField or set the labelHeadingTag parameter on section/box layouts. Screen Reader (Browse): Press H - must identify as a heading with level.

DOM: Text is inside <h1>-<h6> tags.
Headings not defined Error High 1.3.1 (A) Info and Relationships
Headings Use rich text for text that does not summarize or "head" content a!headingField Text that does not summarize or "head" adjacent content must not be defined as a semantic heading. Use rich text for the text. SAIL: a!richTextDisplayField is used for the text.

Screen Reader (Browse): Press H - text must not be navigated to as a heading and not identified as a heading.

DOM: Text is inside <p>/</p> tags.
Heading defined for regular text Error High 1.3.1 (A) Info and Relationships
Headings Use correct heading levels a!headingField, layouts with labelHeadingTag (a!sectionLayout, a!boxLayout) Heading levels (headingTag / labelHeadingTag parameters) must reflect content hierarchy and parent/child heading relationships - try to avoid skipping levels. Set headingTag or labelHeadingTag (section/box layout) to the appropriate level. Screen Reader (Browse): Press H - heading levels identified must match the visual structure.

DOM: Correct <h1>-<h6> tags in appropriate sequence.
Incorrect heading levels used Warning - Needs Review Medium to High based on context 1.3.1 (A) Info and Relationships Although it is always preferred that heading levels are sequential, it is not a hard requirement. The requirement is that the heading levels used make sense based on the structure of the content. Keeping them in sequence can remove any subjective scrutiny. The use of two H1 headings in a single interface should be avoided.
Lists Use semantic lists a!richTextBulletedList, a!richTextNumberedList Visually styled lists (bullets, numbers, checkmarks, etc.) must use a!richTextBulletedList or a!richTextNumberedList. Does not apply to lists of nav links. Use a!richTextBulletedList or a!richTextNumberedList instead of manual bullet styling. SAIL: The list uses a!richTextBulletedList, a!richTextNumberedList, or was created using the rich text editor.

Screen Reader (Browse): Press L - must identify as a list.

DOM: Uses <ul>/<li> or <ol>/<li> tags.
Lists not defined Error Medium 1.3.1 (A) Info and Relationships
Pane Layout Pane layout: accessibility text required a!pane Each a!pane must have accessibility text that brielfy describes the content in the pane. Avoid reserved terms: pane, main, navigation, section, form, search, header, footer, article. Set the accessibilityText parameter on a!pane with a brief descriptive, unique name. SAIL: accessibilityText must not be null.

Screen Reader (Browse): Press R (JAWS), D (NVDA), or use Rotor (Mac) - must identify as "region" with a descriptive name.
Pane has no label Error Critical 1.3.1 (A) Info and Relationships
2.4.1 (A) Bypass Blocks
2.4.6 (AA) Headings and Labels
4.1.2 (A) Name, Role, Value
Section Layout Expandable section layout: label + heading tag a!sectionLayout (expandable) Expandable a!sectionLayout must have both label and labelHeadingTag parameters set. Set both label and labelHeadingTag on a!sectionLayout. SAIL: label and labelHeadingTag on expandable a!sectionLayout must not be null.

Screen Reader: Press H to find the heading, or TAB to the expand/collapse button - must announce section name, heading level, and button state.

DOM: Label text inside <h1>-<h6> tags.
Expandable section layout has no label Error Critical 1.3.1 (A) Info and Relationships
2.4.6 (AA) Headings and Labels
4.1.2 (A) Name, Role, Value
Setting a label and heading for a non-expandable section layout is considered to be a best practice.
Box Layout Expandable box layout: label + heading tag a!boxLayout (expandable) Expandable a!boxLayout must have both label and labelHeadingTag parameters set. Set both label and labelHeadingTag on a!boxLayout. SAIL: label and labelHeadingTag on expandable a!boxLayout must not be null.

Screen Reader: Press H to find the heading, or TAB to the expand/collapse button - must announce section name, heading level, and button state.

DOM: Label in a <div> with role="heading" and aria-level.
Expandable box layout has no label Error Critical 1.3.1 (A) Info and Relationships
2.4.6 (AA) Headings and Labels
4.1.2 (A) Name, Role, Value
Setting a label and heading for a non-expandable box layout is considered to be a best practice.
Card Linked cards must not contain other interactive elements a!cardLayout with link If a!cardLayout has a link, no other links, buttons, or inputs may exist inside the card. Remove all interactive elements from inside a linked card. Keyboard: TAB to the card, then TAB again - focus must not move to anything inside the card other than an icon that uses a caption.

DOM: The element with role="link" must have no focusable child elements.
Invalid control nesting Error Critical 2.1.1 (A) Keyboard
4.1.2 (A) Name, Role, Value
Card No label on card links a!cardLayout with link When a link is set on a!cardLayout, the link label must be null. Set the link's label to null. SAIL: The label parameter for the link used in a!cardLayout does not have a value.

Screen Reader (Browse): Read the card - "link" must be announced only once.

DOM: First child of role="link" must not be a standalone <a> tag.
Invalid control role conveyed Error High 1.3.1 (A) Info and Relationships
4.1.2 (A) Name, Role, Value
Card Indicate selected cards with accessibility text a!cardLayout (selectable) When color or a decorative bar indicates selection, set accessibility text: "Selected" on the card. Remove it when deselected. Don't use "Unselected" when the card is not the current selection. Conditionally set the accessibilityText parameter to "Selected" based on selected state. Screen Reader: TAB to the card link or Browse mode - must announce "Selected".

DOM: Last child of role="link" element contains "Selected".
Only styling indicates the selected card Error High 1.3.1 (A) Info and Relationships
4.1.2 (A) Name, Role, Value
Consider using a!tabLayout if the design and functionality allows. Selected states are managed by the component.
Card Choice Field Card choice field: group label a!cardChoiceField a!cardChoiceField must have a label when more than one card is in the group. Set label on a!cardChoiceField. Screen Reader: TAB to first card - must announce the label and "grouping".

DOM: role="group with aria-labelledby pointing to label text.
Card choice field has no label Error High to Critical based on context 1.3.1 (A) Info and Relationships
4.1.2 (A) Name, Role, Value
Setting the label on a!cardChoiceField allows screen readers and other assistive technologies to identify the card choices as a "group" or "grouping".
Card Group Layout Card group layout: group label a!cardGroupLayout a!cardGroupLayout must have a label when more than one card is in the group. Set label on a!cardGroupLayout. Screen Reader: TAB to first card (or Browse mode) - must announce the label and "grouping".

DOM: role="group" with aria-labelledby pointing to label text.
Card group layout has no label Error High to Critical based on context 1.3.1 (A) Info and Relationships
4.1.2 (A) Name, Role, Value
Setting the label on a!cardGroupLayout allows screen readers and other assistive technologies to identify the cards as a "group" or "grouping".
Links Links in text need more than just color a!richTextItem links embedded in text Links embedded in text must be visually distinct beyond color alone: use underline (linkStyle: INLINE), font change, icon, or have ≥3:1 contrast with surrounding text. Repositioning on a new line also works. Set linkStyle: INLINE on a!richTextItem, or apply another visual differentiator. SAIL/Visual: Check the linkStyle parameter on a!richTextItem OR confirm other visual differentiation is present. Link distinguishable only by color Warning - Needs Review Medium 1.4.1 (A) Use of Color Producing an underline below the link when the link is hovered over with a mouse or when it gains keyboard focus does not meet this requirement.

This requirement does not apply to lists of links, e.g., navigation links listed in a navigation region.
Links Selected link indication Rich text links indicating selection For rich text links indicating selection: if no icon, set accessibility text of "Selected" on a!richTextDisplayField. If an icon is used, set altText: "Selected" on the icon instead. Remove when deselected. Conditionally set the accessibilityText parameter (no icon) or icon altText parameter (with icon) to "Selected". Screen Reader: Must be tested using Browse mode because of a platform bug. The screen reader must announce "Selected" immediately prior to the link when selected. Selected link not indicated Error High 1.3.1 (A) Info and Relationships
4.1.2 (A) Name, Role, Value
If the design and functionality allows, consider using a!tabLayout instead of links. Selected states are managed by the component.
Links Link focus must be visible Rich text links Rich text links must show a visible focus indicator (underline color change, focus ring, etc.) when focused via keyboard. Ensure link styling includes a visible focus state and there is enough spacing for the link for the focus state to be visible. Keyboard: TAB to the link - confirm a visible change occurs on focus. Link has no indication of keyboard focus Error High to Critical based on context 2.4.7 (AA) Focus Visible In some cases an indication of focus may not be present because the link uses a combination of the standalone link style and a style parameter value of UNDERLINE. This causes the link to have the same visual appearance in both default and focused states.
Breadcrumb Breadcrumb accessibility text Breadcrumb patterns Breadcrumbs must use accessibility text to identify the component as a breadcrumb and indicate the current (last) page, e.g., "Breadcrumbs, Corporate is the current page". Set the accessibilityText parameter on the breadcrumb's a!richTextDisplayField. Screen Reader (Browse): Read the breadcrumb - must identify as breadcrumb first and announce current page. Breadcrumb not defined Error High 1.3.1 (A) Info and Relationships
iFrames iFrame: needs a label HTML <iframe> element iFrames that contain content must have a label. Does not apply to iFrames used as shims, data transport, or use display:none or aria-hidden="true". Set the label on the iFrame using the existing aria-label attribute present on the iFrame OR set the title attribute on the iFrame. DOM: The aria-label or title attribute on the <iframe> is set to a value that describes the purpose of or content within the iFrame.

Tool: axe DevTools: "Frames must have an accessible name".
iFrame has no label Error High to Critical based on context 1.3.1 (A) Info and Relationships
2.4.1 (A) Bypass Blocks
4.1.2 (A) Name, Role, Value
If your team cannot resolve this issue, then reassign it to the platform.
Progress Bar Progress bar: needs a label a!progressBarField a!progressBarField must have a label. Set the label parameter on a!progressBarField. SAIL: label parameter is not null.

Screen Reader (Browse): Must announce label before the value.

Tool: axe DevTools: "ARIA progressbar nodes must have an accessible name".
Progress bar has no label Error High to Critical based on context 1.3.1 (A) Info and Relationships
4.1.2 (A) Name, Role, Value
Progress Bar Progress bar: must not rely only on color a!progressBarField Because of color restrictions with a!progressBarField, the textual percentage value of the progress bar must be present. Set the percentage parameter on a!progressBarField and ensure the showPercentage parameter is NOT set to FALSE. SAIL: The percentage parameter is not null and the showPercentage parameter is not set to FALSE on a!progressBarField.

Visual: Ensure the completion percentage is output in text for the progress bar and not only the bar colors convey the information.
Progress bar has insufficient color contrast Error Medium to High based on context 1.4.11 (AA) Non-text Contrast The color contrast of the base gray color used in progress bars cannot be modified in low code. Therefore, the textual value of the component must be output.
File Upload File upload: label required a!fileUploadField a!fileUploadField must have a label. Set the label parameter on a!fileUploadField. SAIL: label parameter on a!fileUploadField is not null.

Screen Reader: TAB to Upload button - must announce label + "upload" + "drop files here".
File upload has no label Error High 1.3.1 (A) Info and Relationships
4.1.2 (A) Name, Role, Value
File Upload File upload: use instructions parameter a!fileUploadField Visible upload instructions must be set via the instructions parameter on a!fileUploadField. Set instructions on a!fileUploadField to match visible instruction text. Screen Reader: TAB to Upload button - instructions must be announced.

DOM: aria-describedby references the instructions node.
File upload instructions not associated with file upload button Error High 1.3.1 (A) Info and Relationships
3.3.2 (A) Labels or Instructions
File Upload File upload: use visual required indicator a!fileUploadField When a file upload is required, the labelPosition parameter on a!fileUploadField is not set to COLLAPSED. When a!fileUploadField uses a required parameter value of TRUE, set the labelPosition parameter on a!fileUploadField to any value other than COLLAPSED. SAIL: If the required parameter is set to TRUE, the labelPosition parameter is not set to COLLAPSED.

Visual: Ensure required asterisk is visible adjacent to the label.
Visual required asterisk not used with File Upload field Error High 1.3.1 (A) Info and Relationships
3.3.2 (A) Labels or Instructions
Signature Signature: provide a keyboard alternative a!signatureField The Signature component must have an accessible keyboard alternative (checkbox, dropdown, DocuSign, etc.). Don't default values. Provide an alternative, keyboard accessible input method alongside the signature component. Visual: Confirm an accessible alternative input method exists and is not pre-filled. No keyboard alternative for Signature component Error Critical 2.1.1 (A) Keyboard
Date & Time Component Date & Time component: do not use a!dateTimeField a!dateTimeField must not be used - it is not accessible. Do not use a!dateTimeField. Use a!dateField and a!timeField instead. SAIL: Search for a!dateTimeField in the interface code - must not be present. Date & Time component used Error Critical 1.3.1 (A) Info and Relationships
4.1.2 (A) Name, Role, Value
Chart Charts: label required All chart components (a!areaChartField, a!barChartField, a!columnChartField, a!lineChartField, a!pieChartField, a!scatterChartField) Every chart must have a label parameter set. Can use labelPosition: COLLAPSED if a heading directly above describes the chart. Set label on the chart component. SAIL: The label parameter on the chart component is not null.

Screen Reader: TAB to the chart - must announce the label.

DOM: aria-label on the highcharts-container div.
Chart has no label Error Critical 1.3.1 (A) Info and Relationships
4.1.2 (A) Name, Role, Value
Stamp Stamp: no important info in help tooltip a!stampField a!stampField must not use a helpTooltip parameter to convey important information - this is not keyboard accessible. Use only the tooltip parameter for stamp tooltips, do not use the helpTooltip parameter on a!stampField. SAIL: Confirm helpTooltip parameter is null. Stamp tooltip inaccessible Error Critical 1.3.1 (A) Info and Relationships The stamp helpTooltip parameter value cannot be made visible with a keyboard. Setting this parameter is the same as setting the accessibilityText parameter on the stamp.
Tooltip Tooltip: keyboard accessible Components with tooltips Tooltips visible on hover must also be visible via keyboard focus on the triggering element. Ensure tooltip triggers are keyboard focusable elements. Do not set tooltips on disabled inputs and controls. Keyboard: TAB to the element - tooltip must appear without a mouse. Tooltip not keyboard accessible Error Critical 2.1.1 (A) Keyboard
Workflow Visualization Plugin Workflow Visualization: provide an alternative view Workflow Visualization plugin Provide an accessible alternative view for the Workflow Visualization plugin (grid, rich text, cards, etc.) that conveys the same information including node name, dependencies, next node, and drill-down capability. Build an alternative view (toggled, same page, or linked) with equivalent information. Visual: Confirm an alternative view exists with node name, dependencies, next node, and drill-down content. No alternative for Workflow Visualization Error Critical 1.1.1 (A) Non-text Content
1.3.1 (A) Info and Relationships
1.3.2 (A) Meaningful Sequence
2.1.1 (A) Keyboard
2.4.1 (A) Bypass Blocks
4.1.2 (A) Name, Role, Value
Simulated Grid Simulated grid: accessibility text per cell Non-grid table-like layouts Data visually displayed as a grid but not using a!gridField must have accessibilityText in each "cell" containing the column header text (and row header text if applicable). Set accessibility text as the first element in each "cell" with column header and row header text. Screen Reader (Browse): Read cells - must announce column header and row header before the cell value. Simulated grid provides no context Error Critical 1.3.1 (A) Info and Relationships
1.3.2 (A) Meaningful Sequence
Is is always preferred to use a grid for information coneyed in a tabular layout.
Custom Pagination Disabled pagination links: no accessibility text and icon text alternative Custom pagination controls Inactive/non-applicable pagination links must not have accessibilityText, altText, or caption set. Remove all text alternatives when theese controls are inactive and the link is removed. Set accessibilityText, altText, and caption to null when pagination controls are inactive OR do not output the icons when the pagination does not apply (when the links are removed). Screen Reader (Browse): Inactive/non-applicable pagination elements must be ignored.

DOM: Icon SVG has focusable="false", aria-hidden="true", tabindex="-1".
Non-applicable pagination links not ignored by assistive technologies Error Critical 1.3.1 (A) Info and Relationships It is preferred to use buttons for pagination, with the buttons being disabled (and still labeled) when they do not apply.
Custom Pagination Pagination link target size Adjacent active pagination links Adjacent active pagination links must be ≥24x24px, or 24px circles centered on each must not overlap. Ensure links are ≥24x24px or add sufficient spacing or use buttons. Phase 1: DOM inspect - check link size ≥24x24px.

Phase 2 (if undersized): Use target size bookmarklet or axe DevTools "All touch targets must have sufficient size" (axe DevTools may not test accurately if content is in a modal dialog).
Links have insufficient target size Error High 2.5.8 (AA) Target Size (Minimum) Passes by default if there are 3 spaces between each link or if buttons are used instead of links.
Icon - In a Link (standalone) Standalone icon in a link needs text alternative Icons as the only element in a link When an icon is the only element in a link, set the altText or caption parameter (prefer altText) to describe the icon's purpose. Set the altText (preferred) or caption parameter on the icon. SAIL: The altText or caption parameter is set on the icon.

Screen Reader: TAB to the link - must announce the text alternative.

Tool: axe DevTools: "Links must have discernible text".

DOM: aria-label on the icon SVG.
Standalone icon used in link has no text alternative Error Critical 1.1.1 (A) Non-text Content
2.4.4 (A) Link Purpose (In Context)
4.1.2 (A) Name, Role, Value
Use a caption ONLY if the purpose of the icon may not be clear to all sighted users based on its visual presentation.
Icon - In a Link (with text) Informational icon with text in a link needs text alternative Icons alongside text in a link Only provide a text alternative for the icon if the link text doesn't already convey the same info. Set via altText or caption - don't use accessibilityText or tooltip on the link. Set the altText or caption parameter on the icon only if the link text does not convey they information presented by the icon. Screen Reader: TAB to the link - icon alt text must be announced alongside link text only when needed.

DOM: aria-label on the icon SVG.
Icon that conveys information in link having text has no text alternative Warning - Needs Review High to Critical based on context 1.1.1 (A) Non-text Content
2.4.4 (A) Link Purpose (In Context)
4.1.2 (A) Name, Role, Value
Use a caption ONLY if the purpose of the icon may not be clear to all sighted users based on its visual presentation.
Icon - In a Button (standalone) Standalone icon in a button needs a text alternative Icons as the only element in a button When an icon is the only element in a button, set accessibilityText or tooltip on the button. Set the accessibilityText or tooltip parameter on the button. SAIL: The accessibilityText or tooltip parameter is set on the button.

Screen Reader: TAB to the button - must announce the text alternative.

Tool: axe DevTools: "Buttons must have discernible text".
Standalone icon used in button has no text alternative Error Critical 1.1.1 (A) Non-text Content
4.1.2 (A) Name, Role, Value
Use a tooltip ONLY if the purpose of the icon may not be clear to all sighted users based on its visual presentation.
Icon - In a Button (with text) Informational icon with text in a button needs text alternative Icons alongside text in a button Only provide a text alternative if the button label doesn't already convey the icon's meaning. Set via accessibilityText or tooltip on the button. Set the accessibilityText or tooltip parameter on the button only if the button label does not convey the same information as the icon. Screen Reader: TAB to the button - icon description must be announced alongside button text only when needed.

DOM: Node positioned inside of button contains accessibility text.
Icon that conveys information in button having text has no text alternative Warning - Needs Review High to Critical based on context 1.1.1 (A) Non-text Content
4.1.2 (A) Name, Role, Value
Use a tooltip ONLY if the purpose of the icon may not be clear to all sighted users based on its visual presentation.
Icon - Standalone (informative) Standalone informational icon needs a text alternative Standalone icons conveying information (not in link/button) Set altText, caption, or accessibilityText to describe the icon when no adjacent text conveys the same info. Use a caption if the icon's meaning may not be universally understood based on its visual presentation. Set the altText (preferred) or caption parameter on the icon or set the accessibilityText parameter on a!richTextDisplayField (if used). Screen Reader (Browse): Read the icon - must announce the text alternative.

DOM: aria-label on the icon SVG or a node containing accessibility text (stamp).
Standalone icon that conveys information has no text alternative Warning - Needs Review Critical 1.1.1 (A) Non-text Content Use a caption ONLY if the purpose of the icon may not be clear to all sighted users based on its visual presentation.
Icon - Decorative/Redundant Decorative or redundant icons must be ignored Decorative icons or icons with adjacent equivalent text Do not set altText or caption on icons that are purely decorative or where adjacent text already conveys the same info. Set the altText and caption parameters to null on decorative/redundant icons. Screen Reader (Browse): Icon must be ignored (nothing announced).

DOM: Icon SVG has focusable="false", tabindex="-1", aria-hidden="true", and no aria-label.
Decorative icon has a text alternative Warning - Needs Review Medium to High based on context 1.1.1 (A) Non-text Content
Icon - General No redundant text alternatives All icons that accept both altText and caption parameters Do not set altText and caption on icons where both parameters have the same value. Use only one of the parameters UNLESS one parameter provides necessary contextual information in addition to the other parameter value. SAIL: The icon altText and caption parameters are not set to the same value.

Screen Reader (Browse): A redundant text alternative is not announced.

DOM: Icon SVG has aria-label set to two redundant values seperated by a comma.
Icon has redundant text alternative Warning - Needs Review Medium to High based on context 1.1.1 (A) Non-text Content
Image of Text No images of text Images containing text Don't use images containing text unless it's a logo or a font that browsers can't render. Use real text instead of images of text. Visual/DOM: Determine if text is embedded in the image or overlaid via CSS. Image of text is used Warning - Needs Review High to Critical based on context 1.4.5 (AA) Images of Text If an image of text is used, the text must also have adequate color contrast between it and the background unless the text is part of a logo.
Text Contrast Regular text: 4.5:1 contrast All regular-sized text
(body text, labels, placeholder text, button labels, link text, table cells - any text below 18pt or below 14pt bold)
Regular-sized text must have ≥4.5:1 color contrast ratio against its background. Ensure text and background color combinations meet the 4.5:1 color contrast ratio. Tools: Colour Contrast Analyser or axe DevTools page scan. Regular-sized text has insufficient color contrast Error Medium to High based on context 1.4.3 (AA) Contrast (Minimum) It is possible to get unequal results between the Colour Contrast Analyzer and axe DevTools. axe DevTools is better at accounting for opacity.
Text Contrast Large text: 3:1 contrast Large text (≥18pt or ≥14pt bold) Large text (≥18pt or ≥14pt bold) must have ≥3:1 color contrast ratio against its background. Ensure large text and background color combinations meet the 3:1 color contrast ratio. Tools: Colour Contrast Analyser or axe DevTools page scan. Large text has insufficient color contrast Error Medium to High based on context 1.4.3 (AA) Contrast (Minumum) It is possible to get unequal results between the Colour Contrast Analyzer and axe DevTools. axe DevTools is better at accounting for opacity.
Image & Icon (non-text) Contrast Icons/images/non-text: 3:1 contrast Informational (non-redundant) icons/images/non-textual content Informational icons, images, and non-textual content must have ≥3:1 color contrast between the part of the image or non-text content that conveys information and adjacent colors. Ensure icon/image/non-text colors meet the 3:1 color contrast ratio against adjacent colors. Tool: Colour Contrast Analyser. Image/non-textual content that conveys information has insufficient color contrast Warning - Needs Review Medium to High based on context 1.4.11 (AA) Non-text Contrast The Appian product has a user setting that allows users to change colors used in charts to patterns.
Selected State Contrast Selected state: 3:1 contrast Adjacent elements with selected/unselected states The color indicating a "selected" state must have ≥3:1 color contrast against the same area of an adjacent unselected element. Ensure selected state color has 3:1 color contrast vs. the adjacent unselected state. Tool: Colour Contrast Analyser. Insufficient color contrast between selected and unselected states Warning - Needs Review Medium to High based on context 1.4.11 (AA) Non-text Contrast
Color Use Color must not be the only indicator All visual elements
(text, buttons, links, icons, status indicators, charts, form inputs - any element where color is used to communicate meaning)
Don't use color as the sole means of conveying information (e.g., "click the red button", "added items are green"). Always pair color with text, icons, patterns, or other non-color cues. Visual: Confirm meaning is conveyed through text, icons, patterns, or other non-color cues alongside color. Color alone is used to convey information Warning - Needs Review High to Critical based on context 1.4.1 (A) Use of Color
200% Zoom 200% zoom: content must be readable and functional All content
(all text, inputs, buttons, links, images, grids, layouts - everything visible on the interface)
At 200% browser zoom, all text must be readable, functional, and not overlapping. If text is truncated, a method to access it must exist. Ensure layouts are responsive at 200% zoom. Browser (not Designer): Maximize window: Ctrl+"+" five times to reach 200% magnification. Check readability and functionality. Ctrl+0 to reset. Content does not reflow at 200% screen magnification Warning - Needs Review Medium to Critcal based on context 1.4.4 (AA) Resize Text
400% Zoom 400% zoom: no loss of content, no 2D scrolling All content (grids and complex images exempt)
(all text, inputs, buttons, links, images, layouts - everything visible on the interface; a!gridField and complex images are excluded)
At 1280px browser width and 400% zoom, content must not require both vertical and horizontal scrolling, and no content or functionality may be lost. The two-way scrolling requirement does not apply to complex images and grids. Ensure layouts reflow to single-column at 400% zoom with a browser width of 1280px. Browser (not Designer): Set width to 1280px: Ctrl+"+" eight times to reach 400% magnification. Verify no content loss and no two-way scrolling. Ctrl+0 to reset. Content does not reflow at 400% screen magnification Warning - Needs Review Medium to Critical based on context 1.4.10 (AA) Reflow Using more than one pane layout or panes with fixed header and footer in an interface increases the chance of failing this requirement.
Modal Dialog Modal dialog: don't auto-focus past content Modal dialogs with forms When a modal dialog opens, don't move focus to a form input if important content precedes it. Set focusOnFirstInput: false on the form inside the dialog. Screen Reader: On dialog open - must announce the dialog name and 'dialog'. Focus must not jump to an input when important content comes first. Mismanaged keyboard focus in dialog Warning - Needs Review High 1.3.2 (A) Meaningful Sequence
2.4.3 (A) Focus Order
Not all screen readers will announce the dialog name and role when a dialog opens because of a bug in how Appian moves focus to dialogs when they open. This gist of this requirement is that focus is not moved past important content when the dialog opens.
Dynamically-Added Content Dynamically added content: tab order Interfaces with dynamically added content (does not apply to dynamic visual messages with screen reader announcement) New content added to the page must appear in the tab order after the control that triggered it, OR visible instructions must warn the user beforehand, OR a!messageBanner with announceBehavior: ANNOUNCE_ONLY must notify users of the content's location after the content has been added. Position new content after the trigger in DOM order, or use instructions/messageBanner. Keyboard: After activating the trigger, TAB forward - new content must be next.

Screen Reader: If not in forward order, the trigger or a banner must announce where content will be or was added.
Illogical tab order Warning - Needs Review High to Critical based on context 2.4.3 (A) Focus Order Don't overuse the message banner. It is preferred to warn the user prior to the content addition if it cannot be added in front of the user.
Dynamically-Added Content Dynamically added content: reading order Interfaces with dynamically added content (does not apply to dynamic visual messages with screen reader announcement) New content added to the page must be in the screen reader reading order after the control that triggered it, OR visible instructions must warn the user beforehand, OR a!messageBanner with announceBehavior: ANNOUNCE_ONLY must notify users of the content's specific location after the content has been added. Position new content after the trigger in DOM order, or use instructions/messageBanner. Screen Reader (Browse): After activating the trigger read the content in the forward reading order. If not in forward reading order, the trigger or a banner must announce where content was added. Illogical content reading sequence Warning - Needs Review High to Critical based on context 1.3.2 (A) Meaningful Sequence Don't overuse the message banner. It is preferred to warn the user prior to the content addition.
Dynamically-Added Content Dynamically added content: wizards Multi-step wizards that do not use the Milestone component Non-sighted users are aware of which wizard step is being accessed as they navigate forward and backward within the wizard. Use the Milestone component or use a!messageBanner with a screen reader announcement. Screen Reader: Access steps within the wizard using forward and backward navigation. The step number or name must be announced as it is accessed, or any other screen reader announcement that indicates that new content has been served. Wizard steps are not perceivable Warning - Needs Review High to Critical based on context 1.3.1 (A) Info and Relationships
Dynamically-Added Content Misuse of message banner: static content Interfaces containing text Message banners with screen reader announcements are not used for static text that is present when the interface is initialized. Avoid using the message banner screen reader announcement for static text that exists when the interface is initialized. Screen Reader: Open the interface and ensure static text that is present in the interface when it initializes is not announced by the screen reader. Misuse of message banner with screen reader announcement Error Medium to High based on context and what is announced 1.3.1 (A) Info and Relationships The exception is when a user is instructed to refresh the page or their browser, causing a change/update to any previously available text.
Dynamic Status Messages Dynamic status messages: use message banner Dynamic status/notification/toast messages Dynamic status messages must use a!messageBanner with an appropriate announceBehavior parameter value. For screen reader announcements, the entire visual message must be included in the screen reader announcement. Use a!messageBanner with the announceBehavior parameter for all dynamic messages. Screen Reader: Perform the action that initiates the message - the full message must be announced when it appears. Dynamic message unavailable to assistive technologies Warning - Needs Review Critical 1.3.1 (A) Info and Relationships
1.4.3 (AA) Status Messages
Keyboard Focus Keyboard focus must be visible All actionable elements including inputs, controls, pane layouts All elements that can receive keyboard focus must show a visible focus indicator (underline color change, focus ring, etc.) when focused via keyboard. Ensure the spacing around the element is sufficient to allow the default focus indicator to be visible. For custom controls, ensure the CSS outline property is not set to none. Keyboard: TAB to the active element - confirm a visible change occurs on focus. Active element has no indication of keyboard focus Error High to Critical based on context 2.4.7 (AA) Focus Visible
Focus Order Focus order must be logical Buttons adjacent to text or paragraph fields that are enabled after input is entered (applies mostly to searches) The button that becomes enabled based on user input is next in the forward tab order when the input loses keyboard focus. Use a refreshAfter value of KEYPRESS and not UNFOCUS. Keyboard: TAB to the button after providing input in the text or paragraph field - confirm the button is next in the forward tab order and is not skipped. Button not enabled in time to receive keyboard focus Error High to Critical based on context 2.4.3 (A) Focus Order
Accessibility Text Accessibility text is not redundant All components that accept accessibility text Accessibility text does not duplicate text already available onscreen. Do not use accessibility text that duplicates adjacent onscreen text. Screen Reader (Browse): For all components, read the component content and content immediately before the component.

Screen Reader (Forms): Navigate to the component using the TAB or SHIFT + TAB keys (does not work for all components, Browse mode is more effective).
Misuse of accessibility text Warning - Needs Review Medium to Critical based on context 1.3.1 (A) Info and Relationships

Can apply to other WCAG criteria based on context