Zoom moves into a new Accessibility section (the section keeps its
section-zoom id, which layout plugins anchor to) next to:
- Message text size, 80 to 200 %, separate from Zoom: messages, threads,
forum posts, code blocks and the message boxes.
- Line spacing (normal, relaxed, loose) and letter spacing (normal, wide).
- Font: the theme's, the system's, Atkinson Hyperlegible or OpenDyslexic,
self-hosted under SIL OFL 1.1 with their licenses in /fonts.
- High contrast: secondary text and borders pulled toward each theme's own
text color, and a thick focus ring.
- Reduce motion: follow system, on or off. One html.reduce-motion class now
covers every animation, the theme effects, the shimmering role colors,
smooth scrolling, and GIFs, animated emoji and profile pictures, which
wait for hover or tap. The old prefers-reduced-motion rules use it too.
- Underline links, and larger click targets.
Everything is per device and applied by theme-init.js before first paint,
which hands the same read/apply functions to the settings page.
Also: keyboard focus rings, keyboard-reachable settings nav rows,
aria-labels on the icon buttons in the channel header and message box, and
aria-pressed on the picker buttons.
Co-authored-by: ancsemi <ancsemi@gmail.com>
Colorful Emoji shows them in full color; Monochrome draws them in the
name's gradient like the letters, so people who chose monochrome icons do
not get full-color faces in names. The setting's hints say so.
The gradient is painted through the text with a transparent fill, which
turned emoji into flat gradient silhouettes. Emoji runs in a gradient name
now sit in their own span with a visible fill, including after a nickname
change.
style.css now only imports the parts in order, after voice.css and
music.css as before, so the cascade is unchanged. Each cut sits between
top-level rules. Checked twice: the parts (minus the one-line header each
got) rebuild the old file byte for byte, and a browser loading the new
style.css ends up with the same 3,526 rules, in the same order, as it parses
from the old one. The largest part is 1,559 lines. Tests that read
style.css now read it with its imports filled in (test/coreCss.js), and the
theme contract test names the part each checked rule lives in.
What stays in app-admin.js is the setup wizard and loading, saving and
cancelling the admin settings (1,452 lines). The rest moved unchanged: server
branding, members, message box autocomplete, status and idle, Discord import,
roles, the Role Assignment center and moderation (audit log, auto-mod, tags)
each have their own file; general file upload, resizable sidebars and the
donors list joined app-ui.js; the connectivity test and invite links window
joined app-admin-controls.js.
The permission list, admin-only permissions and their labels were module-level
constants used by both role files, so they moved verbatim into perm-catalog.js,
which both import. Checked by loading every module before and after: all 1,125
methods have identical source, and every module-level name a method uses still
resolves to the same declaration.