Problem: Different users have different reading preferences and visual needs. Some want small text to see more content, others need large text for comfortable reading — especially on mobile devices or for users with visual impairments.
Solution: A 7-step font size scale with A+/A- buttons in the reader, plus a settings page with a visual picker. Three "comfort profiles" (Standard, Comfortable, Large & Clear) provide quick presets.
Not included: Per-verse font sizing or automatic font adjustment based on screen size. The font size applies uniformly to all reader text.
Users can increase or decrease the reader font size using A+ and A- buttons in the chapter navigation bar. The setting persists across sessions.
User flow:
Comfort profiles (in Settings page):
Edge cases:
Font size scale (7 steps):
| Step | Size | Line Height |
|---|---|---|
| XS | 14px (0.875rem) | 1.6 |
| S | 16px (1rem) | 1.55 |
| M | 18px (1.125rem) | 1.5 — default |
| L | 21px (1.3125rem) | 1.45 |
| XL | 24px (1.5rem) | 1.4 |
| 2XL | 28px (1.75rem) | 1.35 |
| 3XL | 32px (2rem) | 1.3 |
Buttons: A- and A+ in the chapter nav bar, styled as small pill buttons.
Settings page: 7-button picker (XS through 3XL) with a live preview showing Genesis 1:1-2 at the selected size.
CSS custom properties:
--reader-font-size — applied to all reader text--reader-line-height — scales inversely with font size (larger text = tighter lines)--reader-font-weight — set by comfort profile (400 normal, 500 medium, 600 bold)State management:
settings.svelte.ts as a key string ('xs' through '3xl')applyFontSizeToDom() sets CSS custom properties on document.documentElementlocalStorage under bibleweb_settingsComponents:
ChapterNav.svelte — inline A-/A+ buttons (call increaseFontSize()/decreaseFontSize())VerseList.svelte — applies font-size: var(--reader-font-size, 1.125rem)Files:
apps/web/src/lib/components/bible/ChapterNav.svelte — A-/A+ buttonsapps/web/src/lib/stores/settings.svelte.ts — font size state + persistenceapps/web/src/routes/(app)/settings/+page.svelte — settings picker + comfort profilesCurrent: DONE Milestone: v1 Priority: Medium — important for accessibility and comfort
History:
Dependencies: