Adds rust-i18n and refactors all of the text copy in the app to use the
translation function so that the UI language can be dynamically updated
in the settings.
1. Start in Adaptive Drill by default: App launches directly into a
typing lesson instead of the menu screen.
2. Fix error tracking for backspaced corrections: Add typo_flags
HashSet to LessonState that persists error positions through
backspace. Errors at a position are counted even if corrected,
matching keybr.com behavior. Multiple errors at the same position
count as one.
3. Fix keyboard visualization with depressed keys: Enable crossterm
keyboard enhancement flags for key Release events. Track depressed
keys in a HashSet with 150ms fallback clearing. Depressed keys
render with bright/bold styling at highest priority. Add compact
keyboard mode for medium-width terminals.
4. Responsive UI for small terminals: Add LayoutTier enum (Wide >=100,
Medium 60-99, Narrow <60 cols). Medium hides sidebar and shows
compact stats header and compact keyboard. Narrow hides keyboard
and progress bar entirely. Short terminals (<20 rows) also hide
keyboard/progress.
5. Delete sessions from history: Add j/k row navigation in history
tab, x/Delete to initiate deletion with y/n confirmation dialog.
Full chronological replay rebuilds key_stats, letter_unlock,
profile scoring, and streak tracking. Only adaptive sessions update
key_stats/letter_unlock during rebuild. LessonResult now persists
lesson_mode for correct replay gating.
6. Improved statistics display: Bordered summary table on dashboard,
WPM bar graph using block characters (green above goal, red below),
accuracy Braille trend chart, bordered history table with WPM goal
indicators and selected-row highlighting, character speed
distribution with time labels, keyboard accuracy heatmap with
percentage text per key, worst accuracy keys panel, new 7-month
activity calendar heatmap widget with theme-derived intensity
colors, side-by-side panel layout for terminals >170 cols wide.
Also: ignore KeyEventKind::Repeat for typing input, clamp history
selection to visible 20-row range, and suppress dead_code warnings
on now-unused WpmChart.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>