Accessibility Statement
Last updated: September 8, 2026
We want everyone to be able to read a label with Grain, including people who use a screen reader, larger text, a keyboard, or reduced motion. This statement covers the website at grainios.com and the Grain iOS app. It says how far each one currently meets the accessibility standard, lists the gaps we have measured, and tells you how to reach us when something gets in your way.
1. Scope
- The website: every page at grainios.com, including this one.
- The Grain iOS app as distributed on the App Store.
This statement applies to the versions of both that were current on the date above. It is written against EN 301 549, the European standard referred to by the European Accessibility Act, which adopts the Web Content Accessibility Guidelines (WCAG) 2.1 at Level AA.
2. Conformance status
The website and the app are partially conformant with WCAG 2.1 Level AA. Partially conformant means that some parts of the content do not fully meet the standard. The gaps we know about are listed in section 4, together with the numbers we measured.
3. What works
3.1 In the app
- Dynamic Type. Every named text style in the app is built on UIFontMetrics, so it scales with the text size you set in iOS Settings, including the accessibility sizes. A small number of elements stop growing early because the box around them cannot grow; they are listed in section 4.
- VoiceOver. The Grain Score is announced as a number, and each row of the score breakdown is announced as a score out of 100, so the rating never depends on colour or on the ring alone.
- Reduce Motion. The app reads the system Reduce Motion setting and turns its animations down when it is on.
- Languages. The app is available in English, German, Spanish, French and Italian.
3.2 On the website
- Every page declares its language, every image carries alternative text, and the menu button on the home page is labelled for screen readers.
- Keyboard focus is shown with a visible outline on every focusable link and button.
- When your system asks for reduced motion, animations and transitions across the site are switched off.
- The website has no forms, so there is nothing to fill in or submit.
4. Known accessibility issues
We measured the website on September 8, 2026 with axe-core 4.13.0, run over the markup of every page. Because that run has no visual layout, it cannot judge colour contrast; contrast was instead computed directly from the design tokens using the WCAG relative luminance formula. The app was measured the same way, from its colour and typography source rather than with a screen reader. A recorded VoiceOver pass is still owed and is listed below.
4.1 Website
- Muted text contrast (WCAG 1.4.3). The muted text colour #8A8178 measures 3.6:1 on the linen page background, 3.8:1 on white cards and 3.3:1 on the darker alternate sections, below the 4.5:1 required for normal-size text. It is used for small labels such as the "Last updated" line on legal pages, price notes, score-ring captions and the not-found page's subtitle.
- Button text contrast (WCAG 1.4.3). White text on the sage green buttons measures 3.5:1. That ratio is enough only for large text, and the buttons are set at normal text sizes, so it falls short of the 4.5:1 required.
- Landmarks and skipping to content (WCAG 2.4.1). Apart from the password-reset page and this one, pages do not wrap their content in a main landmark, and there is no skip link, so screen-reader users cannot jump past the navigation with a landmark shortcut. Every page has headings, which can be used to navigate instead.
- Heading levels (WCAG 1.3.1). The footer's column headings are level-4 headings that follow a level-1 or level-2 heading, so the heading outline skips a level on every page that has a footer.
- Repeated logo text. The logo image in the header and footer carries the alternative text "Grain" next to the visible word "Grain", so a screen reader reads the name twice.
- Language. This statement is published in English only.
4.2 Grain iOS app
- Muted caption text contrast in light mode (WCAG 1.4.3). The muted text colour, #8A8178 in light mode, measures 3.6:1 on the page background, 3.8:1 on white cards and 3.3:1 on elevated cards. The dark-mode value, #807870, measures 4.1:1, 3.7:1 and 3.3:1 on those same three surfaces. It is used for placeholders, disabled states and small captions. This one is known and scheduled: the fix is a single colour token and it changes no score.
- Sage green as text. The app's sage green, #7A8F6E, measures 3.3:1 on the light background where it is used as text or as an icon colour. A darker variant, #5A6E50, measures 5.2:1 and already exists in the theme; moving the remaining text uses onto it is scheduled alongside the fix above.
- Icon-only buttons (WCAG 4.1.2). Some icon-only controls do not yet carry a VoiceOver label. The scanner screen is the main case: it has four labelled controls among 38 symbol images, and it has not yet had a recorded VoiceOver pass.
- Text that stops growing (WCAG 1.4.4). Twenty-five places in the app put a ceiling on how far Dynamic Type may grow them, because each one sits in a container whose height the app does not control. Twenty-one of those are icons. The other four are real words: the tab bar label at the bottom of every screen, a step number, a household-member emoji and a profile initial. The tab bar stops at 1.15 times the base size; the other capped places stop at 1.4 times. Nothing is clipped or truncated at any text size, but at the largest accessibility sizes those four stop short of the size the rest of the screen reaches.
- Automated auditing. The app's test suite does not yet run Apple's built-in accessibility audit. Adding it for the scanner, the product page, the paywall and onboarding is on the list.
5. Feedback and contact
If you cannot use part of the website or the app, or you hit a problem that is not listed here, email contact@grainios.com. Tell us the page or screen, the assistive technology you use, and what happened. We usually reply within 48 hours, and where we can we will give you the information in another form.
6. Enforcement procedure
If you have reported an accessibility problem to us and you are not satisfied with our response, you can contact the authority responsible for enforcing accessibility requirements where you live. In the European Union, each member state designates such an authority under the European Accessibility Act (Directive (EU) 2019/882). In Great Britain the Equality and Human Rights Commission, and in Northern Ireland the Equality Commission for Northern Ireland, oversee the equality legislation that applies to digital services. We publish this statement and will keep it current whether or not an exemption under that Act turns out to apply to us.
7. Preparation of this statement
This statement was prepared on September 8, 2026 as a self-assessment, using the measurements described in section 4. It will be reviewed whenever the website or the app changes in a way that affects the items above, and at least once a year.