Context
tui_loop() calls terminal.draw() every 250ms tick including idle. Widget rendering and diff still consume CPU.
Solution
Add dirty: bool flag set by event handlers, skip draw when !dirty and no agent events.
Epic: #862 | Effort: S | Crate: zeph-tui