Read <progress> as a percentage, that's more international.
eSpeak can trivially localize this to it's various locales.
Extend MIMEtype dispatch to support alternative stylesheets.
Catch more cases of consecutive breaks.
Collapse consecutive breaks again.
FIXME: Collapse when one <break> is inside another tag.
Implement :target pseudoclass.
Defaults to <main> to further avoid excess clutter from pages.
Implement new -rhaps-marker property for controlling user interaction.
Extensively refactor to use the CSS engine's counters implementation.
Take advantage of new Haskell Stylist assets & pseudoclass filters.
Refactor Rhapsode to use new HURL APIs and more leniantly handle MIMEtypes.
Serve link.wav with correct MIMEtype.
I converted it to audio/vnd.wav but without updating the metadata
another check concluded eSpeak-NG wouldn't be able to play it.
update Accepts header for CSS assets.
Output audio cues in live speech.
Turned out I was overcomplicating things, all I needed to do was use file paths not URIs.
eSpeak NG handled it from there.
Don't delete downloads, was happening before use.
Allow disabling of URL rewriting for SSML output.
Upload Types modules, & useragent stylesheet with audio cues.
Prevent websites (and userstyles) from overriding the link audio cue.
Download CSS assets, including new useragent audio cues.
Audio cues are public domain from freesound.org and archive.org via elementary OS's sound theme.
Use libsndfile to write audio files.
Import libsndfile, prepare to use it for writing audio files.