JST Fitness — Accessibility Statement
Last reviewed: 22 August 2026
JST Fitness is committed to being usable by everyone, including people who use a screen reader, navigate by keyboard, need larger text, or find motion uncomfortable. This statement says plainly how far we have got, what we know is still not good enough, and how to tell us when we are wrong.
How accessible this app is
JST Fitness is partially conformant with WCAG 2.1 level AA.
"Partially conformant" means most of the app meets the standard, but a small number of things — listed by name further down — do not yet. We have chosen the honest word. Nothing on this page is a claim we have not checked.
The app was audited against WCAG 2.1 AA across seven dimensions in July 2026. Every serious finding from that audit has been fixed. The remainder are listed below rather than quietly left out.
What works
- Screen readers. Every error message, confirmation and status change is announced, not just shown. Custom controls the app builds itself — the number wheels, the sliding toggles, the steppers, the segmented pickers that choose a workout type or a session length, the pop-up dialogs — report their role, their state and their current value, so they are read out the same way a standard control would be.
- Keyboard. Everything can be reached and operated without a pointer, and focus is always visible. In the app's dialogs, focus is also kept inside the dialog while it is open and returns to where you were when it closes — with one exception we would rather name than let you find: the panel that appears when you pause a follow-along circuit does neither. It is listed below.
- Colour and contrast. This is not checked by eye. Every colour pair the tests cover is recalculated automatically each time the app's tests run, and a pair that drops below its AA threshold fails the test suite. That covers body text, accent text on its surfaces, and the status colours, in all nine themes and in both light and dark. To be exact about what that guard is: the measuring is automatic, but running the tests before a release is a rule we keep rather than something the build machinery enforces on its own.
We are not claiming every pixel is measured. Some pairings are not in the checked set — a few decorative and state colours among them — and we would rather say so than let you find one. If something is hard to read, tell us where and we will measure it and fix it.
- Gestures always have a button. Nothing in the app can only be done by dragging, swiping or long-pressing. Reordering exercises, reordering your saved routines, building supersets and drop sets, and deleting rows each have an ordinary button as well as the gesture. Saved routines can be put in your own order by dragging a card's handle, and the same move is on a plain Move Up / Move Down button inside each card, reachable by opening the card with no gesture at all. Building a superset has an ordinary button in the routine builder; during a live workout it is a hold, and that one currently has no button beside it — it is in the list below rather than glossed. Several controls also respond to a deliberate hold: ending a meditation session, editing the rest time from the workout clock, pressing a saved routine to see its breakdown, holding an exercise card to build a superset, and holding a set row to add a drop set. Ending a session and editing the rest time are ordinary buttons underneath: Enter or Space works, and so does activating them with TalkBack, Switch Access or Voice Access, none of which can perform a holding gesture. The routine hold is a shortcut, and everything behind it has another way in: tapping a routine's header opens the card, where Start and the Move Up / Move Down buttons are ordinary, visible buttons. There is no visible Edit or Delete on that card, and the routine's full breakdown is not there either — those live in the routine preview and in View All. View All is an ordinary button and needs no gesture at all, so nothing here is reachable only by holding. (There is also an Edit button on the card itself that is hidden from sight but present for TalkBack, Switch Access and Voice Access, so those users reach the editor in one step instead of two. It stays out of sight until a keyboard reaches it, and then it shows itself so you can see where you are.) The meditation hold is there so a knuckle or a cat cannot end twenty minutes of sitting by accident; the rest-time hold keeps a single tap meaning "start resting", which is what you want nearly every time.
- Reduced motion. Exercise demonstration videos never auto-play when your device asks for reduced motion. What you get instead depends on where you are. In the exercise library and during an ordinary workout, the clip shows native playback controls and starts only when you press play; either way, a playing clip can always be paused with a tap. In a follow-along circuit there are no playback controls, because the clip there is decoration rather than content — it is hidden from screen readers entirely, and the exercise is named in text beside it. Under reduced motion each station shows that exercise's written instructions and a "Play demo" button, which grants the clip for that station only: the next station goes back to text without asking. Tapping the clip itself in a circuit pauses the whole circuit — the timer and the video together — rather than the video alone. If your device says you prefer reduced motion, the app's CSS animations and transitions stop — that is the large majority of the movement in the app, and it covers every screen transition, every panel that opens and closes, and every list that reorders.
You can also ask for this in the app alone. Profile → Accessibility → Reduce motion. It does the same thing your device's setting does, and it is there because your device's setting is all-or-nothing across every app on the phone: nobody should have to turn animation off for their launcher, their messages and their maps to calm down a fitness tracker. It is a switch of its own — you do not have to turn Accessibility Mode on to use it.
This switch can only ask for less movement, never more. If your device is already asking, the row says so and shows no switch, because turning the app's copy off could not have overridden your phone and we will not draw a control that cannot do what it says.
One thing keeps moving on purpose: the bar that fills while you hold to end a meditation session. It is not decoration, it is telling you how much longer to hold, and freezing it would tell you that you had held long enough when you had not.
We are not claiming this is complete. A handful of animations are drawn frame-by-frame in code rather than in CSS, and those are not covered by the switch that stops the rest — they have to be found and fixed one at a time, and we have not finished doing that. If something is still moving when you have asked it not to, please tell us where and we will fix it.
- Larger text. The app follows your device's own font-size setting (Settings → Display → Font size) and reflows to fit it. This is the way to make text bigger in JST Fitness, and it applies everywhere.
- Accessibility Mode. A single switch on the Profile tab, in the Settings card that is always visible — not inside the Preferences drawer. It is the first row of that card, above JSTFitness Guide and Preferences. It turns on higher-contrast text and larger touch targets. It switches itself on by default if your device's own settings (large font, reduce motion, or increased contrast) already say that is what you want, and it keeps following those settings if you change them later, so you do not have to come back here. When it has switched itself on, the row says which of your settings did it. The moment you set the switch yourself your choice wins, and we stop deciding for you.
- The meditation timer. While a session is running that screen deliberately cannot be dismissed — not by tapping outside it, not by Escape, not by the Android back button — because any of those would end a twenty-minute sit by accident with nothing to recover. So the way out is guaranteed three times over: hold the end button, press Enter or Space on it, or activate it the way TalkBack, Switch Access and Voice Access do. The countdown is deliberately not announced every second, which would make the screen unusable with a screen reader running; the time remaining sits on its own item instead, read out whenever you move to it and correct every time you ask.
- Follow-along circuits, which are built to be used without looking at the screen. Each change of interval is announced in three channels at once, and two of them are yours to switch off:
- Sound. A cue at the start of each work and rest interval, a nudge at the halfway point of a long one, and a 3-2-1 into the next. Cues play at media volume, so putting the phone on silent does not mute them — that is written on the screen before you start, not discovered afterwards.
- Vibration. One buzz at each interval boundary, its length carrying which kind of interval just started. This is the primary cue if you are Deaf or hard of hearing, which is why it exists.
- The screen, for a screen reader: the app speaks the boundary and nothing else — "Go: Push-ups", "Rest. Next: Squats, 30 seconds", "Circuit complete" — and never counts down out loud, which would make the screen unusable. The time remaining and the current exercise sit on their own item, read out whenever you move to it. Both the sound and the vibration have a switch on the ready screen, where the circuit starts, rather than buried in Settings — you set them in the room you are about to train in, and flipping either one takes effect from the next interval without stopping the circuit. Both start switched on, because a follow-along circuit whose cues are silent is a countdown you have to watch, which is the thing the feature exists to remove.
There are no gestures: pause is a tap anywhere, and Android's back button pauses instead of exiting, so a circuit cannot be lost by reflex. Paused, every control is an ordinary button — Resume, Back, Skip, Exit — and on a rest, +20s and Skip are full-width buttons you do not have to aim at.
- The JSTFitness Guide. Sixteen short chapters you can read in a sheet, and thirteen of them you can be walked through instead: a ring appears around a real control on the real screen, a short cue names it, and you press that control yourself. The reading sheet is one of the app's ordinary dialogs — it announces itself, keeps focus inside it while it is open, and puts focus back where you were when it closes.
The walk deliberately does not keep focus inside it, and that is the one place in this app where not doing so is the right answer. Every other overlay wants you looking at it; this one wants you looking through it, at the real button underneath. Holding focus inside the bubble would hold you away from the very control the ring is drawn around, which does not make the feature safer; it makes it impossible. So the walk moves no focus, keeps none, and marks nothing unreachable: you reach the ringed control exactly as you would if the walk were not running. This is also why the promise further up is written about dialogs: the walk is not one, does not claim to be one, and is not marked up as one.
Where your taps land is a separate question, and the dimmed area now holds them off. Not keeping focus inside the walk is the decision above. What the dim does is a different matter, and it used to do nothing at all: a press anywhere outside the ring reached whatever sat underneath it, so pressing the wrong thing moved the app while the step stayed where it was, and the cue ended up describing a screen you had already left. The dim is no longer only shading. A press outside the ring is now held off and answered — the ring gives a small pulse, pointing at what to press rather than telling you off — and the app underneath does not move. The ringed control itself is not covered by anything, so pressing it works exactly as it always did, and the bubble carrying the cue still takes its own presses, because that is where Exit tour, Got it and Skip live. Swiping sideways across the dim no longer changes tab either; the trade is that the screen does not scroll while a ring is up, which it does not need to, because the walk has already brought the control into view.
What that does not cover, which is worth knowing before you meet it. It holds off presses and swipes, which is not the same as making the rest of the screen unavailable, and there are four places it does not reach:
- On steps that ring nothing there is no dim and nothing is held off. Some steps are explaining rather than pointing, and some are waiting for you to go and find a control that is on another screen. Dimming and blocking the whole screen there would read as the app having frozen, exactly when you need it working, so the app stays live and ordinary.
- It works for touch and mouse, not for keyboard, TalkBack, Switch Access or Voice Access. If you are moving by focus or by voice you can still reach a control the ring is not around, and if you do, the app will move while the step stays put. This is the direct cost of not trapping focus, which we would still make the same way — but it means this improvement reaches people using a pointer and not people using those. If it strands you, Exit tour on the bubble ends the walk cleanly and every chapter can be read as plain text instead.
- The Android back gesture is not affected, because it is the system's, not the app's.
- If you have asked for reduced motion, a held-off press is silent — the ring does not pulse, because the pulse is movement and we would rather not make movement you have asked us not to make. Nothing moves under you, which is the part that mattered, but you get no acknowledgement either. We are not satisfied with that and would like to hear if it reads as the app having stopped working.
A screen reader is given more words than the screen shows, not fewer. The bubble is deliberately terse — "Tap + Add." — because someone looking at it can see the ring, the tail and the button all at once. Someone who cannot has none of that, so the spoken announcement carries the chapter's whole sentence, and where you are in the chapter with it ("Step 4 of 9"). It reaches you through a live region, which announces without taking your place on the screen — the same reason the walk moves no focus.
Reduced motion is honoured, and it is read live. The ring glides from one control to the next; if your device asks for reduced motion it moves with no animation at all, and the scroll that brings the next control into view jumps rather than glides. That second one is decided in code rather than left to the app-wide rule that stops the other movement, because a scroll that explicitly asks to be smooth overrides that rule — it is one of the few pieces of movement the switch cannot reach on its own. And the setting is watched while the walk is running, so turning it on part-way through takes effect at the next step instead of the next time you open the app.
What does not work yet
These are real limitations. We would rather write them down than let you discover them.
- Section headings are not marked up as headings. Screen-reader users can read every section, but cannot jump between them using heading navigation. Nothing is unreachable — it is slower than it should be. This is queued to be fixed. The Settings groups and the Weekly Report's sections are marked up now; the remaining screens are queued.
- Input outlines in light mode are faint. In the light themes the thin border around a text box is below the 3:1 contrast ratio. The boxes are still identifiable by their fill, their label and their focus ring, but the outline alone is not enough.
- The number wheels can clip at very large font sizes. At the largest Android font settings the scrolling number picker (used for weight, height and dates) can cut off. What to do instead: tap the number in the middle of the wheel and type the value directly. That path works at every font size.
- The muscle body-map is harder to read in light mode. The highlighted-muscle diagram was designed against the dark themes and has less separation on the light ones. The same information is available as text on the exercise itself.
- Building a superset during a live workout is a hold, with no button beside it. In the routine builder there is an ordinary button. In the middle of a workout there is not, so a keyboard, TalkBack, Switch Access or Voice Access user cannot link two exercises once the session has started. What to do instead: build the superset into the routine beforehand, where the button exists. This is the one place the "gestures always have a button" rule above is not yet met, and we would rather name it than let it pass.
- The meditation bell is a sound, and only a sound. When a session ends the app rings a bowl. If you are Deaf or hard of hearing — or you simply have the volume down — nothing else reaches you: the phone does not vibrate, and no notification is posted. The screen does show it, because the ring closes and the panel changes to the finished card, but that only helps if you are looking at the screen, and not having to look at the screen is the whole point of that timer. What to do instead: glance at the countdown as you get close, or set an alarm on your phone alongside the session. We have written this down as the next thing to fix on that screen. (Follow-along circuits do not have this problem — every interval boundary there buzzes as well as sounding.)
- The hold countdown in a workout is sound-only, and its sound is off until you turn it on. Added 20 August 2026: a timed hold — a plank, a wall sit, a dead hang — offers a countdown with a start button, and when the time is up it chimes if you have switched the rest-timer sound on, announces "time" to a screen reader, and changes what the ring shows. It does not vibrate, and it posts no notification. The sound is off by default, so out of the box the only signal is one you have to be looking at — during an exercise where you are usually looking at the floor. The screen says so under the ring, in as many words, rather than letting you find out afterwards. What to do instead: turn the rest-timer sound on in Settings, which this countdown shares, or watch the ring. Vibration here needs a decision we have not made yet: the app deliberately keeps a short, checked list of the places allowed to buzz, and this is not on it.
- Between them, the meditation timer and the hold countdown are the two places that can ring without buzzing, which makes each harder to defend, not easier.
- Two cues inside a follow-along interval are sound only. The boundaries buzz and are announced, but the two cues that land in the middle of an interval are not: the halfway nudge on a long work interval, and — this is the one that matters — the "switch sides" cue on a station trained one limb at a time. That second one is an instruction, not a progress marker, and if you cannot hear it you can finish the interval having trained one side. What to do instead: on a single-arm or single-leg station, watch the countdown and swap at the halfway mark. This is the next thing to fix on that screen, and it is a gap in a feature whose whole promise is that you do not have to look.
- The paused panel over a running circuit is not marked up as a dialog. When you pause a follow-along circuit, the panel that appears does not announce itself as a dialog, does not keep keyboard focus inside itself, and does not put focus back where it was when it closes. Every button in it is a real button and can be reached and pressed — nothing is unusable — but with a keyboard, TalkBack or Switch Access you can tab past the panel into the screen behind it and lose track of where you are. Every other dialog in the app does this properly, including the "Finish now?" confirmation that appears if you press Exit — that one used to be listed here too, and it is now built on the app's standard dialog and behaves correctly. The paused panel is the one still built by hand. What to do instead: the controls are large and centred, so touch and Voice Access are unaffected. This is queued.
- The Guide's "Try it" chip does not answer to its own name. The chip in the header that starts a walk reads Try it on screen, while the name it gives to assistive technology is "Start the interactive tour" — the two share no word at all. So a Voice Access user who says "Tap Try it", which is the whole point of that way of working, matches nothing on the screen in front of them. What to do instead: say "Tap Start the interactive tour", or take the other route in — Profile → JSTFitness Guide, then the Walk me through it button on the chapter you want. That button's spoken name starts with the same words you can see, so it answers to them, and reading the chapters never needed the chip at all. This is queued: the fix is to put the visible words at the front of the spoken name, which is what the standard (2.5.3, Label in Name) is asking for.
Text size, and why we do it the device's way
JST Fitness is a native Android app, not a website, and the way to make everything bigger is your device's own font-size setting (Settings → Display → Font size). The app respects it throughout, and that is the supported route — if text is too small, that setting is the one to reach for.
Pinch-to-zoom is switched off by default, which is the normal behaviour for an Android app: a pinch inside a workout should scroll or swipe, not zoom the screen. Banking and fitness apps overwhelmingly behave the same way.
We are aware this looks like it ought to fail WCAG 1.4.4 (Resize Text) and we do not think it does. For a native application the requirement is that text can reach 200% through the platform's own accessibility controls, which it can — the criterion asks for resizable text, not for the pinch gesture specifically. If you disagree, please tell us; the contact details are below and we would rather hear it than not.
Assistive technology we test with
The app is developed and checked against TalkBack on Android, plus keyboard-only navigation and the operating system's font-size, reduced-motion and increased-contrast settings.
We do not currently have test coverage on iOS/VoiceOver, because the app has not been released for iOS yet, or on external braille displays.
Telling us we got something wrong
If any part of JST Fitness is difficult or impossible for you to use, we want to hear it — including things not listed above.
- In the app: Profile → Send Feedback. It reaches the same place and needs no email address.
- By email: [email protected]
JST Fitness is built and maintained by one person, so there is no support desk and no guaranteed response time — but accessibility reports go to the front of the queue, and you will get a reply from a human whenever we have a way to reach you. (An in-app report sent without an email address is read just as carefully, but can't be replied to.)
If you tell us about a problem, please say what you were trying to do and what assistive technology you were using, if any. That is usually enough to reproduce it.
About this statement
This statement applies to the JST Fitness Android app and to the pages hosted alongside it.
It was written on 30 July 2026 following an internal accessibility audit of the app carried out in July 2026, and last re-checked against the release of 21 August 2026, which corrected a false sentence on this page and changed the app to match what the page had been promising. The check before that was 15 August 2026, which added the JSTFitness Guide; before that 14 August 2026; the one before that was the release of 13 August 2026, which added follow-along circuits — the timed interval runner with its sound, vibration and screen-reader cues — and the one before that was 7 August 2026, which added the yoga sessions and the meditation timer. It is based on self-assessment: the app has not been audited by an external accessibility organisation.
What the 21 August check changed on this page. One sentence here was wrong, and it was wrong in the way that matters most: it sent a reader to the wrong place. It said the Accessibility Mode switch is "in Preferences". It is not, and never was — it is the first row of the Settings card on the Profile tab, the card that is always visible, deliberately kept out of the Preferences drawer so nobody has to navigate the small-target, lower-contrast UI to reach the control that fixes it. Anyone who trusted this page opened the drawer and did not find the setting. That is a page doing the opposite of its job, so the sentence now names where the switch actually is.
⚠ The first attempt at this correction, earlier the same day, replaced the false sentence with another false one: it said "directly above Preferences", and the JSTFitness Guide row sits between the two. It was caught by a review pass that had not been told what the change was supposed to say — which is the argument for that kind of review, and the reason the wording above now counts the rows rather than describing a neighbour.
Two things about the app changed with it, both of which this page had already claimed. It said the mode "switches itself on by default" from your device's settings, and that was true only once, on the day the app was installed: the reading was taken at first run and then frozen, so turning on your phone's larger font or higher contrast a month later did nothing, ever. The app now keeps watching those settings and follows them — until you set the switch yourself, at which point your choice wins permanently and we stop touching it. And when the app has made that decision for you, the row now tells you which of your device settings caused it; the text explaining that had been written weeks ago and was never actually shown to anyone.
What the 15 August check changed on this page. Nothing was corrected, because nothing here had become wrong. The Guide was built after the 14 August check and this page was simply silent about it — including about the one overlay in the app that deliberately does not keep focus inside itself, which is exactly the kind of decision a reader of this page is entitled to have explained rather than to discover. So the Guide is now described under What works, with the reason for that decision written next to it, and its one known gap is named under What does not work yet — the chip that starts a walk does not answer to its own name. Silence about a feature is not the same fault as a sentence that is false, but it is how a page stops describing the app — and a page that has stopped describing the app is where the false sentences come from next.
Later the same day that new passage was split in two, and then the second half of it changed. It had described the walk not keeping focus inside itself, and the walk letting every tap fall through to the app underneath, as though they were one decision with one reason. They are two decisions answering two different problems. Keeping them fused mattered more than it looked: the second was about to change, and written as one sentence, fixing it would have read as abandoning the first.
And it did change, hours later. The dim around the ring used to be decoration — press the wrong thing during a walk and the app moved while the step stayed where it was. It now holds off presses and swipes outside the ringed control. Not keeping focus inside the walk is unchanged and is not going to change, because you have to be able to reach the control the ring is drawn around; holding off a pointer is a different mechanism aimed at a different problem, and the two are described separately above for that reason. The four things the new behaviour does not cover — steps that ring nothing, keyboard and assistive-technology users, the Android back gesture, and the absence of any acknowledgement under reduced motion — are written next to it rather than left for you to find, because a protection described without its edges is the kind of sentence this page exists to avoid.
What the 14 August check changed on this page. Two statements were corrected rather than added. The "Finish now?" confirmation over a running circuit was listed as one of two panels missing dialog semantics; it has since been rebuilt on the app's standard dialog and now announces itself, traps focus and restores it, so only the paused panel is still named. And the contrast check was described as failing the build; it fails the test suite, which is not the same guarantee, so the sentence now says which one it is. A statement that names a failure that has been fixed is still a statement that is wrong, and it hides the gaps that are real.
We review this statement whenever the app changes in a way that affects it, and at minimum whenever a new version is released to the Play Store.