Ignoring system font size, reduced motion, or contrast splits the experience
Aliases: ignore Dynamic Type · ignore reduced motion · experience split
What it is
The user maxed system type, turned on reduced motion, turned on high contrast. Status bar, Settings, notifications already display for that body. Inside the app, body text is still 12px, the launch animation still runs, light grey sits on a light ground — that is the split from ignoring system accessibility preferences. The split is not “the app has no accessibility page.” It is that OS chrome and app content suddenly stop being the same world. The user has to re-adapt on every crossing, or abandon the app.
Type, motion, and contrast are the three inputs most often dropped; dropping one is enough to make “I already set this” false.
Why it happens
People treat system settings as environment, not as one app’s skin. When the environment changes, every surface should follow. After an app ignores it, the visual channel jumps at the boundary: large system buttons beside small app labels; a reduced-motion desktop, and the app still does parallax. Attention and vestibular sense are already working under “less motion”; a full-length animation re-triggers discomfort. Contrast is the same: system high contrast pushed chrome to the limit, the app still uses mock greys, and the user thinks high contrast “broke,” when the app simply did not read.
The second layer is collapsed trust. Users cannot debug which layer ignored them. They conclude “this phone’s accessibility is bad” and turn the system items off — so even apps that did inherit lose their adaptation. The cost of ignoring is socialised onto the whole platform.
Studying it
Turn the three system items on one at a time. Screenshot OS chrome and the app’s main view side by side. Measure type ratio, motion duration, contrast (including compositing). Walk low-vision, vestibular-sensitive, and high-contrast users through a cross-app task (notification into app back to home) and record stalls at the boundary and whether they say “the setting did nothing.” Do not use “does the app have an accessibility entry” as the metric.
Independent variables: which input was ignored (type / motion / contrast), whether ignore hits launch / chrome / custom widgets. Dependent variables: measurable gap across the boundary, task interruptions, whether users disable the system setting.
Where it stops holding
Launch screens and ad SDKs are where ignore concentrates; a main view that already inherits does not cancel the vertigo at the door. Game world-space text and HUD are not the same scale path; ignoring HUD type leaves an unreadable menu on a playable scene. In browsers, user zoom and system type are two paths; listening to only one still splits when the other is ignored — measure both. Cutting purely decorative micro-motion under reduced motion does not remove a function; binding a function to an animation-end callback does.
Applying it
- Launch, onboarding, paywalls, WebViews, and third-party players must take the same system inputs as the main view; do not only fix Settings.
- Custom widgets, chart axis labels, and nav titles follow system type; when motion is bound to a function, provide a no-animation completion path.
- When high / increased contrast is on, inspect custom colours, overlays, and placeholders; swapping only system components is not enough.
- How to check: all three system items on, enter the app from a notification and leave. Photograph both sides of the boundary: a type cliff, motion sickness at the door, contrast collapsing inside the app, is ignore in that region. Include launch and ads, not only the home view.
Related
- Same group: J5.13.1 Inherit OS accessibility settings rather than shipping a parallel stack · J5.13.3 Duplicate in-app accessibility controls collide with system settings · J5.13.4 Apps must respond to system setting changes live, not only on restart
- Nearby: J2.02 Text resize · J4.08 Attention and distraction
- Search terms:
ignoring system accessibility preferences·reduced motion·Dynamic Type