YMI Jeans · WCAG 2.2 A and AA · Phase 1

Accessibility audit,
before fixes.

A source review of the Impulse 8.2.1 theme for ymijeans.com. No theme code was changed to produce this report. This is not a certification and not a claim of full ADA compliance.

Store · ymijeans.com Theme · Impulse 8.2.1 Date · 2 October 2026 54 distinct defects
54Total
4Critical
22Serious
18Moderate
10Minor

Executive summary

The theme already has a skip link, a main landmark, translated names on several header icons, hidden decorative icons, a keyboard outline class, and assets/accessibility.css. Those pieces do not cover the custom collection UI, dialogs, or contrast overrides.

The largest barriers are on primary shopping paths:

  • Collection sort is a mouse-only listbox. The native select is removed from the tab order.
  • Cart, navigation, search, quick shop, and popups do not keep keyboard focus inside the open layer, and closing a modal does not return focus.
  • The homepage hero is an unnamed link around two images with no alt.
  • On small screens the logo link loses its name, and the collection h1 is removed with display:none.
  • Footer text is about 2.55:1. Filter chips are about 1.98:1.
  • Several controls that look like buttons are divs or spans with click handlers only.

Counts are distinct defects. The same defect in the default, Royalty, and YMIG headers is one issue.

Findings

Filter by severity or search by id, file, or wording. Each card is the same issue recorded in the markdown audit.

A11Y-001 Critical 2.1.1 Forms

Custom sort is a button plus non-focusable option spans. The real select is aria-hidden and tabindex="-1". custom.js only handles click.

File
snippets/collection-sort.liquid
Location
47–79

Why it matters. Keyboard and screen-reader users cannot change sort.

Smallest fix. Keep the native select as the visible control, or add arrow keys, aria-controls, and a roving tabindex.

A11Y-002 Critical 2.4.3 Focus

_manageFocus wraps Shift+Tab on the first control and does nothing for Tab on the last. Drawers, modals, search, and tooltips share this trap.

File
assets/theme.js
Location
227–237

Why it matters. Focus leaves an open cart, menu, search, or quick shop and reaches the page behind it.

Smallest fix. On Tab from the last control, prevent default and focus the first control.

A11Y-003 Critical 2.4.3 Modals

activeSource is set to the return value of setAttribute, which is undefined.

File
assets/theme.js
Location
2587

Why it matters. Closing quick shop and other modals does not restore focus to the opener.

Smallest fix. Set aria-expanded, then assign activeSource to the element.

A11Y-004 Critical 1.1.1, 2.4.4, 4.1.2 Images

The homepage banner is a link around two images with no alt, and the link has no text.

File
sections/main-banner.liquid
Location
1–3

Why it matters. The hero promotion has no name. Text inside the image is unavailable.

Smallest fix. Add alt from a section setting. Name the link with that text. Hide the unused breakpoint image from assistive technology.

A11Y-005 Serious 4.1.2, 1.3.1 Modals

Open layers are plain divs with no dialog role, aria-modal, or dialog name. PhotoSwipe is the exception.

File
drawer, cart, quick shop, video, newsletter, rescue, search
Location
multiple

Why it matters. Assistive technology does not treat the cart, menu, search, or popups as dialogs.

Smallest fix. Add dialog semantics and an accessible name. Do not rewrite the components.

A11Y-006 Serious 4.1.1, 1.3.1 Landmarks

Three headers are in the DOM, each with SiteHeader, NavDrawer, and CartDrawer. aria-controls always matches the first node.

File
layout/theme.liquid and three header sections
Location
206–216

Why it matters. On Royalty or YMIG, cart and menu buttons point at the hidden default drawer.

Smallest fix. Use one header, or unique ids, and point aria-controls at the visible drawer.

A11Y-007 Serious 1.3.1, 2.4.6 Headings

Brand switcher links are h1 elements. The homepage logo adds another h1.

File
header, royalty-header, ymig-header, header-logo-block
Location
~193, ~201, 45–47

Why it matters. Pages have several level-1 headings that are navigation, not the page title.

Smallest fix. Change the brand links to spans. Keep a single page h1.

A11Y-008 Serious 1.3.1, 2.4.6 Headings

The collection h1 uses small--hide, which is display:none below 769px.

File
main-collection.liquid, main-collection-variant.liquid
Location
69 and 104

Why it matters. Collection pages have no heading on mobile.

Smallest fix. Keep a visually hidden h1 so the mobile layout stays the same.

A11Y-009 Serious 1.1.1, 2.4.4, 4.1.2 Images

The desktop logo alt falls back to the shop name. The mobile image alt is empty, and it is the one shown below 769px.

File
snippets/header-logo-block.liquid
Location
67–71, 85–89

Why it matters. The mobile logo link has no accessible name.

Smallest fix. Use the same alt on the mobile image.

A11Y-010 Serious 1.1.1 Images

The live natural image branch uses the file alt only, with no product-title fallback.

File
snippets/product-grid-item.liquid
Location
198–207

Why it matters. Empty Shopify alts expose product photos as decorative.

Smallest fix. Fall back to the product title. Do the same in the variant card.

A11Y-011 Serious 4.1.2, 1.1.1 Buttons

On small screens the submit text is display:none. The remaining icon is aria-hidden.

File
snippets/newsletter-form.liquid
Location
19–23

Why it matters. The newsletter submit button has no name.

Smallest fix. Add a visually hidden label that is not display:none.

A11Y-012 Serious 4.1.2, 1.1.1 Buttons

The quick-shop close control is an icon-only button with no accessible name.

File
snippets/product-form.liquid
Location
46–51

Why it matters. Screen readers announce an unlabeled button.

Smallest fix. Add the existing close translation as an aria-label. Hide the SVG.

A11Y-013 Serious 1.3.1, 4.1.1 Forms

Checkbox ids are the raw filter value, repeated in desktop and mobile copies. label for binds only to the first id.

File
snippets/collection-grid-filters-form.liquid
Location
many checkbox blocks

Why it matters. Checking a filter can toggle the wrong control.

Smallest fix. Build a unique id from location, filter name, and index.

A11Y-014 Serious 4.1.2 Forms

The price range is a noUiSlider. Min and max inputs are display:none. Handles have no names.

File
collection-grid-filters-form.liquid, theme.js
Location
~302, ~2866

Why it matters. The price filter has no accessible name.

Smallest fix. Pass handle labels into noUiSlider.create.

A11Y-015 Serious 2.1.1, 4.1.2 Buttons

View results and Close are divs with click styling only. Clear links repeat id="reset".

File
snippets/collection-grid-filters-form.liquid
Location
334, 1404, 1692, 1811

Why it matters. Keyboard users cannot use those controls.

Smallest fix. Use button type="button". Give each clear link a unique id.

A11Y-016 Serious 1.4.1, 1.3.1 Forms

The fieldset legend is display:none. Swatch names are indented or hidden, so color is the only visible difference.

File
variant-button.liquid, collection-grid-filters-form.liquid
Location
58–63, 93–98

Why it matters. Option groups have no accessible name, and swatches are color-only.

Smallest fix. Use a clip technique for the legend and the color name. Scope radio names with the product id.

A11Y-017 Serious 2.1.1, 4.1.2 Keyboard

Tooltip triggers are custom elements, not buttons, and are not in the tab order.

File
tool-tip-trigger.liquid, theme.js
Location
1–8, ~3975

Why it matters. Size-chart and other tips are mouse-only.

Smallest fix. Use a button with aria-expanded, and restore focus on close.

A11Y-018 Serious 2.1.1 Buttons

The reminder message is a div with a click listener.

File
newsletter-reminder.liquid, theme.js
Location
12–14, ~4026

Why it matters. Keyboard users cannot reopen the newsletter from the reminder.

Smallest fix. Make the message a button.

A11Y-019 Serious 2.1.1, 4.1.2 Buttons

The cart upsell toggle is a span created on desktop. Its text flips between open and close.

File
assets/drawer-logic.js
Location
156–181

Why it matters. The disclosure is not keyboard operable and its state is not exposed.

Smallest fix. Use a button and set aria-expanded with the panel.

A11Y-020 Serious 2.2.2, 2.1.1, 4.1.2 Carousels

Hero video autoplays and loops. Play and pause are unnamed divs, and the click handler does not pause the video element.

File
sections/hero-video.liquid, theme.js
Location
78–86, 115–121

Why it matters. Moving video cannot be paused from the keyboard.

Smallest fix. One button that calls play or pause and updates its name.

A11Y-021 Serious 2.2.2 Carousels

Flickity autoplay is on. Previous and next exist. There is no pause control.

File
snippets/promo-sliders.liquid
Location
26–31

Why it matters. Autoplay longer than 5 seconds needs a way to stop it.

Smallest fix. Add a pause button that calls pausePlayer and playPlayer.

A11Y-022 Serious 4.1.2 Navigation

aria-haspopup sits on the li. The link never gets aria-expanded. Focus does open the menu.

File
header-desktop-nav.liquid, theme.js
Location
42–44, ~4559

Why it matters. Screen readers are not told when a submenu is open.

Smallest fix. Put aria-expanded on the link and toggle it.

A11Y-023 Serious 1.4.3 Contrast

Footer text, links, and copyright are #a3a2a2 on white.

File
assets/accessibility.css
Location
4–39

Why it matters. Contrast is about 2.55:1. AA needs 4.5:1.

Smallest fix. Set footer text to at least #767676. #595959 is safer.

A11Y-024 Serious 1.4.3 Contrast

The footer email field and placeholder are white on white.

File
assets/theme.css
Location
28–29, 5005–5014

Why it matters. The field is invisible.

Smallest fix. Override the input and placeholder with the same dark footer text.

A11Y-025 Serious 1.4.3 Contrast

Filter chip links are #b8b8b8 on white.

File
assets/custom.css
Location
1735–1740

Why it matters. Contrast is about 1.98:1.

Smallest fix. Darken chip text to at least #767676.

A11Y-026 Serious 3.3.1 Forms

Address forms never print form.errors.

File
templates/customers/addresses.liquid
Location
~19, ~107

Why it matters. A failed address save gives no error text.

Smallest fix. Output the errors and tie them to the fields with aria-describedby.

A11Y-027 Moderate 2.2.2, 2.4.7 Carousels

Autoplay often has no pause button. Where one exists, it stays clipped, including on focus.

File
slideshow.liquid, announcement-bar.liquid
Location
pause control

Why it matters. Sighted users cannot find or see the pause control.

Smallest fix. Show a pause button whenever autoplay is true.

A11Y-028 Moderate 3.3.2 Forms

A programmatic name exists, but the only visible text is a placeholder that disappears while typing.

File
newsletter, footer newsletter, search, reset password
Location
several

Why it matters. Sighted users lose the field instruction.

Smallest fix. Keep a visible label. Leave the placeholder as a hint.

A11Y-029 Moderate 3.3.1, 1.3.1 Forms

Errors are not connected to the fields with aria-invalid or aria-describedby.

File
customer, contact, comment, and newsletter forms
Location
error blocks

Why it matters. Screen readers are not pointed at the message for the field that failed.

Smallest fix. Point each invalid control at its error.

A11Y-030 Moderate 3.3.2 Forms

Required fields are not marked required, and the label does not say so. The contact form already does this.

File
customer, comment, newsletter, tab contact
Location
email and password

Why it matters. Users learn a field was required only after submit.

Smallest fix. Add required and the word required in the visible label.

A11Y-031 Moderate 1.3.5 Forms

No autocomplete tokens such as email, name, or street-address.

File
contact, account, and newsletter fields
Location
personal data inputs

Why it matters. Browsers cannot offer the user’s stored values.

Smallest fix. Add the matching autocomplete token. No visual change.

A11Y-032 Moderate 2.5.3 Forms

The visible label is My Size. aria-label="Select your size" replaces it.

File
snippets/collection-my-size.liquid
Location
58–66

Why it matters. Speech input that says the visible label can miss the control.

Smallest fix. Remove the aria-label and keep the label element.

A11Y-033 Moderate 1.3.1, 4.1.2 Navigation

A megamenu group title is an anchor with the href commented out.

File
snippets/header-desktop-nav.liquid
Location
104–106

Why it matters. It is exposed as a link that cannot be used.

Smallest fix. Use a heading element, or restore a real href.

A11Y-034 Moderate 4.1.2 ARIA

Only the first category tab has aria-expanded. The others omit it until a click.

File
sections/faq.liquid
Location
67–71

Why it matters. Collapsed categories do not expose state on first load.

Smallest fix. Set aria-expanded="false" on every category that is closed.

A11Y-035 Moderate 1.4.3 Contrast

The Sort prefix is #8a8680 on white.

File
assets/custom.css
Location
1856–1859

Why it matters. Contrast is about 3.62:1. The value beside it passes.

Smallest fix. Darken the prefix to at least #767676.

A11Y-036 Moderate 1.4.3 Contrast

The camera New badge is gold on translucent gold at 12px.

File
assets/custom.css
Location
309–321

Why it matters. Computed contrast is about 1.79:1.

Smallest fix. Use dark text on a solid background that clears 4.5:1.

A11Y-037 Moderate 1.4.3 Contrast

Global placeholders use 50% opacity.

File
assets/theme.css
Location
7780–7782

Why it matters. Black at 50% on white is about 3.95:1.

Smallest fix. Raise placeholder contrast, and add visible labels.

A11Y-038 Moderate 1.1.1, 2.4.4 Images

The cart promo is a CSS background on a link with no text. The default href is #.

File
sections/main-cart.liquid
Location
6–20

Why it matters. The banner link has no name.

Smallest fix. Add an accessible name from a text setting. Do not use href="#" with no destination.

A11Y-039 Moderate 1.1.1, 2.4.4 Images

Linked images use the file alt only. A blank alt leaves the link unnamed. As Seen In can become just @.

File
logo-list, image block, as-seen-in
Location
several

Why it matters. Logo and press links can be empty.

Smallest fix. Fall back to a caption or a fixed name such as View on Instagram.

A11Y-040 Moderate 2.4.6, 4.1.2 Buttons

The product zoom control’s only text is the close translation, Close (esc).

File
snippets/media.liquid
Location
113–115

Why it matters. The button is announced as Close while it opens the gallery.

Smallest fix. Use a zoom label. Keep the SVG decorative.

A11Y-041 Moderate 1.3.1, 2.4.6 Headings

The page h1 renders only when both show title and show content are on. Customer service turns both off.

File
sections/main-page.liquid
Location
1–7

Why it matters. Some pages have no h1.

Smallest fix. Show the h1 from the title setting alone.

A11Y-042 Moderate 3.2.2 Buttons

Buy now is a button inside the product form with no type, so it submits.

File
snippets/product-form.liquid
Location
55

Why it matters. Activating it submits the product form.

Smallest fix. Set type="button" if script handles checkout.

A11Y-043 Moderate 4.1.2 ARIA

Filter disclosures have aria-controls but no aria-expanded in Liquid. Script sets it later.

File
snippets/collection-grid-filters-form.liquid
Location
85–90 and later

Why it matters. Before script runs, state is missing.

Smallest fix. Output aria-expanded from the collapsed setting.

A11Y-044 Moderate 1.4.3 Contrast

Slider ticks use #999 and #ccc. PhotoSwipe error text is #ccc.

File
assets/theme.css
Location
731, 741, 7459–7463

Why it matters. Helper and error text fails AA, down to about 1.61:1.

Smallest fix. Use #595959 or darker for text that is meant to be read.

A11Y-045 Minor 4.1.2 Buttons

Thumbnail previous and next buttons are named only with title.

File
snippets/product-images.liquid
Location
56 and 121

Why it matters. title is an unreliable accessible name.

Smallest fix. Add aria-label with the same words.

A11Y-046 Minor 2.4.6, 4.1.2 Links

More colors is an anchor with no href, role=button, and the name +N.

File
snippets/product-grid-item.liquid
Location
421–424

Why it matters. The purpose is unclear, and it is not a real link.

Smallest fix. Use a button named Show N more colors.

A11Y-047 Minor 4.1.2 Carousels

The reel starts playing while the button says Play video. Script corrects it after play.

File
sections/insta-reel.liquid
Location
22–33, 306–307

Why it matters. The first announcement is wrong.

Smallest fix. Initial label Pause video.

A11Y-048 Minor 4.1.2 Navigation

The search close name is passed through the json filter, so it includes quotation marks.

File
sections/ymig-header.liquid
Location
339–344

Why it matters. The button name is wrong on the YMIG header.

Smallest fix. Match the default header: aria-label without json.

A11Y-049 Minor 4.1.2 ARIA

aria-open is not a state. Script later sets aria-expanded.

File
snippets/ymig-drawer-menu.liquid
Location
116 and 166

Why it matters. Invalid ARIA is ignored.

Smallest fix. Use aria-expanded.

A11Y-050 Minor 3.2.1, WAVE redirect Links

List-collections pages run location.replace to /collections/shop-all.

File
layout/theme.liquid
Location
119–123

Why it matters. Unexpected navigation. WAVE flags this as a redirect.

Smallest fix. Redirect in Liquid if merchandising still wants that URL.

A11Y-051 Minor 3.1.2 Forms

Visible strings are hardcoded English while the theme has locale files.

File
quantity, my size, sort, multi-selectors
Location
several

Why it matters. Translated storefronts mix languages.

Smallest fix. Use existing translation keys.

A11Y-052 Minor 3.3.2 Forms

Required fields use an asterisk, and nothing defines it.

File
sections/contact-form.liquid
Location
41, 46, 51, 65, 88

Why it matters. The symbol is unexplained.

Smallest fix. Add one line: Required fields are marked *.

A11Y-053 Minor 4.1.1 Forms

A label tag prints the color name as an invalid attribute.

File
snippets/collection-grid-filters-form.liquid
Location
215, 1070, 1780, 1915, 2095

Why it matters. Broken markup can drop or mis-bind the label.

Smallest fix. Remove the value from the tag.

A11Y-054 Minor 1.3.1 Navigation

The current page has no aria-current. Collection breadcrumbs can omit the current title.

File
pagination.liquid, breadcrumbs.liquid
Location
~18, 24–31

Why it matters. Location in a set of pages is weaker than it should be.

Smallest fix. Add aria-current="page" and always include the current crumb.

By category

Headings

Product, search, cart, and 404 each have a page h1. Extra brand h1s sit beside them.

Landmarks

Skip link, one main, and one footer are in place. Three headers share the same ids until script shows one.

Focus

A focus-visible outline already exists. The trap does not wrap forward Tab, and modal close does not return focus.

Dynamic content

The cart count is not announced. Filter and sort changes do not send a status. Confirm variant updates before adding live regions.

See the notes in this card. These items are documented rather than given a single issue id.

Shopify

Product form, filters, search, and the cart drawer are theme-owned. Shop Pay and content_for_header stay with Shopify.

See the notes in this card. These items are documented rather than given a single issue id.

Third-party

Klaviyo, Syndeca, Kiwi, Syte, Klarna, TrueVault, and chat widgets are app-owned. Do not patch them from the theme.

See the notes in this card. These items are documented rather than given a single issue id.

Contrast

Color changes required for WCAG 2.2 AA. Samples show the current pair. Announcement text and buttons pass and should stay.

IDSurfaceSampleRatioAA
A11Y-023 Footer text #a3a2a2 on #ffffff 2.55:1 Fail
A11Y-024 Footer field #ffffff on #ffffff 1:1 Fail
A11Y-025 Filter chips #b8b8b8 on #ffffff 1.98:1 Fail
A11Y-035 Sort prefix #8a8680 on #ffffff 3.62:1 Fail
A11Y-036 New badge #beae54 on #f4efe0 1.79:1 Fail
A11Y-037 Placeholders #808080 on #ffffff 3.95:1 Fail
A11Y-044 Helper text #cccccc on #ffffff 1.61:1 Fail
Pass Announcement #1c1d1d on #e7a3e9 8.7:1 Pass
Pass Buttons #ffffff on #111111 17:1 Pass

Target for normal text is 4.5:1. A safer footer text color on white is #595959. #767676 is the minimum that clears AA.

Third-party apps

Do not patch these from the theme. The connection-verification wall seen in WAVE is not theme markup.

SourceWhereOwnership
negate.iolayout/theme.liquid line 4Tracking script. No theme UI.
TrueVault Polaristheme.liquid lines 8–9; footer-menuPrivacy UI is the app. The theme image alt is already set.
Google Tag Manager, Ads, GA4theme.liquid headTags. Widgets they inject are outside the theme.
Kiwi sizingkiwiSizing.liquid via theme.liquidSize widget UI is injected.
ETS contactthree page idsApp date picker. Not a theme form.
Klaviyoback-in-stock and add-to-cart snippetsBack-in-stock modal is app UI.
Syndecatheme.liquid lines 246–255Shoppable image. The theme only handles the click.
KlarnaKlarnaThemeGlobalsMessaging widget is the app.
Sytecamera button and product cardsVisual search UI is the app. The theme camera button is named.
Smile, Swym, MNTNsnippets presentSmile and MNTN are not rendered from theme.liquid.
redo chatclass hook in theme.jsChat widget is the app.

Files to change in phase 2

theme.css.liquid mirrors theme.css. Confirm which file Shopify serves before editing either. Do not edit jQuery, Flickity, vendor scripts, or app snippets.

Behavior

  • assets/theme.js — focus trap, modal focus restore, price-slider names
  • assets/custom.js — sort keyboard behavior, only if the native select is not restored
  • assets/drawer-logic.js — cart upsell toggle
  • snippets/collection-sort.liquid
  • snippets/collection-grid-filters-form.liquid
  • sections/hero-video.liquid

Semantics

  • sections/main-banner.liquid
  • sections/header.liquid
  • sections/royalty-header.liquid
  • sections/ymig-header.liquid
  • snippets/header-logo-block.liquid
  • snippets/header-desktop-nav.liquid
  • snippets/header-icons.liquid
  • snippets/drawer-menu.liquid
  • snippets/royalty-drawer-menu.liquid
  • snippets/ymig-drawer-menu.liquid
  • snippets/cart-drawer.liquid
  • snippets/royalty-cart-drawer.liquid
  • snippets/quick-shop-modal.liquid
  • snippets/video-modal.liquid
  • snippets/product-form.liquid
  • snippets/product-grid-item.liquid
  • snippets/product-grid-item-variant.liquid
  • snippets/product-images.liquid
  • snippets/media.liquid
  • snippets/variant-button.liquid
  • snippets/newsletter-form.liquid
  • snippets/footer-newsletter.liquid
  • snippets/newsletter-reminder.liquid
  • snippets/search-bar.liquid
  • snippets/tool-tip-trigger.liquid
  • snippets/promo-sliders.liquid
  • snippets/collection-my-size.liquid
  • snippets/pagination.liquid
  • sections/newsletter-popup.liquid
  • sections/rescue-popup.liquid
  • sections/slideshow.liquid
  • sections/faq.liquid
  • sections/main-collection.liquid
  • sections/main-collection-variant.liquid
  • sections/main-cart.liquid
  • sections/main-page.liquid
  • sections/logo-list.liquid
  • sections/as-seen-in.liquid
  • sections/insta-reel.liquid
  • sections/contact-form.liquid
  • sections/article-template.liquid
  • snippets/announcement-bar.liquid
  • snippets/tab-contact.liquid
  • snippets/quantity-input.liquid
  • snippets/multi-selectors.liquid
  • blocks/ai_gen_block_9fd727f.liquid
  • templates/customers/login.liquid
  • templates/customers/register.liquid
  • templates/customers/addresses.liquid
  • templates/customers/reset_password.liquid
  • templates/customers/activate_account.liquid
  • layout/theme.liquid — list-collections redirect only, if merchandising agrees

Color

  • assets/accessibility.css
  • assets/custom.css
  • assets/theme.css — placeholders, slider ticks, and PhotoSwipe error text only

Risk of fixing

FixLayoutCSSJavaScriptShopifyMobileDesktop
Dialog roles, labels, alt, autocompleteNone expectedNoneNoneNoneNoneNone
Focus trap and focus restoreNoneNoneCart, menu, search, quick shop, tooltipsMust still open and closeDrawer scroll lock must staySame
Sort controlKeep the current lookPossibleSort reload must keep workingQuery params must stayDuplicated in the filter formSame
Filter ids and div-to-buttonPadding already existsNone if classes stayFilter submit and chipsCollection filteringMobile drawerSidebar
Collection h1Prefer a visually hidden h1 so mobile layout staysClip utility onlyNoneNoneTitle stays visually hiddenUnchanged
Brand h1 to spanNone if the class staysNoneheader-switch.js must still find .logoBrand switchingSameSame
Footer and chip colorsNoneColor onlyNoneNoneSameSame
Hero pause buttonUse the existing media button slotMinimalMust pause the video elementNoneSameSame
Promo slider pauseOne extra controlMinimalFlickity player APINoneSameSame
Three headersHigh if a header is removed. Prefer unique ids.NoneDepends on #header, #royalty-header, #ymig-headerBrand sessionSameSame
List-collections redirectNoneNoneRemoving it changes /collections routingMerchandisingSameSame

Already in good shape

Not verified in this phase

  • Screen reader announcements in VoiceOver, NVDA, and TalkBack.
  • Rendered contrast of text sitting on photography.
  • Checkout. That surface is Shopify’s, apart from checkout.css and checkout.js.
  • Whether every slideshow instance in settings has autoplay on.
  • Empty alt strings stored on live Shopify files. The code path is confirmed; the merchant data was not.
  • Keyboard behavior inside Klaviyo, Syte, Syndeca, Kiwi, Klarna, and TrueVault.

Phase 2 should start with A11Y-001 through A11Y-004, then the rest of the serious group, then moderate, then minor.