Carousel renders plain <div>s, with no role, no aria-roledescription, no live region and no label. Nothing tells a screen reader that this is a set of slides, or that one changed. Add that around it.
- Hidden slides keep their links in the tab order. Slides that are not current get aria-hidden, but a link or button inside them can still take focus. Track the index with afterChange and make the inactive slides inert, or keep slides free of controls.
- infinite copies the slides at both ends, so an id or a control inside a slide exists more than once. A fade carousel makes no copies.