Early on, importing a book threw its formatting away. Bold, italic, headings, and lists all collapsed into a flat wall of text. That is fine for the speech, since the engine reads words and not styles, but it makes a book stop looking like a book.
Now Aoede keeps the formatting for display. EPUB retains bold and italic inline, along with headings, blockquotes, and lists. PDF recovers bold and italic by inferring them from each run's font traits. The reader renders headings in the display face, sets blockquotes with an indent and a rule, marks lists with bullets, and the word highlight still tracks correctly across all of it.
The decision underneath was the interesting part: letting the spoken text and the shown text diverge. They used to be the same string. Now styling lives only on the display side as offset spans, while the spoken side stays plain. Once I stopped forcing the two to match, a lot got simpler. The formatted path skips spoken-text normalization and lets the speech engines handle numbers and abbreviations themselves, which they already do well. That same split is the groundwork for fixing pronunciation later without changing a thing on the page.