Add msg_gradient() helper function to render.py that applies message
(ntfy) gradient using the active theme's message_gradient property.
This replaces hardcoded magenta gradient in scroll.py with a theme-aware
approach that uses complementary colors from the active theme.
- Add msg_gradient(rows, offset) helper in render.py with fallback to
default magenta gradient when no theme is active
- Update scroll.py imports to use msg_gradient instead of
lr_gradient_opposite
- Replace lr_gradient_opposite() call with msg_gradient() in message
overlay rendering
- Add 6 comprehensive tests for msg_gradient covering theme usage,
fallback behavior, and edge cases
All tests pass (121 passed), no regressions detected.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Remove hardcoded GRAD_COLS and MSG_GRAD_COLS module constants
- Add _default_green_gradient() and _default_magenta_gradient() fallback functions
- Add _color_codes_to_ansi() to convert integer color codes from themes to ANSI escape strings
- Update lr_gradient() signature: cols parameter (was grad_cols)
- lr_gradient() now pulls colors from config.ACTIVE_THEME when available
- Falls back to default green gradient when no theme is active
- Existing calls with explicit cols parameter continue to work
- Add comprehensive tests for new functionality
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Fix import sorting (isort) across all engine modules
- Fix SIM105 try-except-pass patterns (contextlib.suppress)
- Fix nested with statements in tests
- Fix unused loop variables
Run 'uv run pytest' to verify tests still pass.