feat(settings): per-user message text size (LC-327) #340
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/lc-327-message-text-size"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
A "Text size" control (Small / Normal / Large) in the Appearance settings that scales message body text for readability. Implements LC-327 / LC-328.
How
Purely device-local, mirroring the existing
lc-sidebar/lc-unread-onlypreferences (localStorage only - a per-device reading ergonomic, not synced server-side):base.html): a block alongside the theme/density/sidebar/unread-only ones. Reads localStoragelc-textsizeand setsdata-lc-textsizeon<html>before first paint (small/large;normalremoves the attribute), so text never reflows after load. Exposeswindow.__lcSetTextSize(v).main.css):[data-lc-textsize="small"] .lc-md { font-size: 0.875rem }and[..="large"] .lc-md { font-size: 1.125rem }. Scoped to.lc-md(the message body) so chrome / timestamps / sidebar are untouched;.lc-mdcode/pre areem-relative and scale with it. Default (no attribute) inherits the 1rem body size.settings/page.html): a<select>in the Appearance form, after density. It isname-less, so it is NOT submitted with the server-persisted theme/density POST - no user column, migration, or handler.onchangecalls__lcSetTextSize; a small inline script initializes the select from localStorage (the server can't render selected state for a device-local pref).settings-textsize,textsize-small/normal/large).Scope / assumptions
remand stay fixed (dominant content is paragraph text).users.text_sizecolumn like density if wanted.Testing
just check(clippy standalone + saas, fmt; Askama compilesbase.html+settings/page.html) clean.just testandjust test-saasgreen; en/es parity verified for the four new keys. No server contract changed, so the gate is template compilation + the i18n coverage the suites enforce.Operator impact
None. No new env var, config, or contract change; no
[operator-action]marker.🤖 Generated with Claude Code