Discrete milestones the break-timer announces, picked so a screen
reader hears about progress without the per-second chatter that a
live region on the countdown itself would produce.
Order of dominance (highest wins) — exactly one fires per render:
end — break is finished or remaining hits 0
ten-seconds — final stretch
one-minute — only if the break is longer than 60 seconds
(otherwise we'd announce it immediately on start, which is noise)
halfway — only if the break is longer than 60 seconds; for
a 70-second break the one-minute milestone fires first and
swallows the halfway window, which is desired behaviour
Discrete milestones the break-timer announces, picked so a screen reader hears about progress without the per-second chatter that a live region on the countdown itself would produce.
Order of dominance (highest wins) — exactly one fires per render:
end— break is finished or remaining hits 0ten-seconds— final stretchone-minute— only if the break is longer than 60 seconds (otherwise we'd announce it immediately on start, which is noise)halfway— only if the break is longer than 60 seconds; for a 70-second break the one-minute milestone fires first and swallows the halfway window, which is desired behaviournull— no milestone reached yet