Stock Repurchase Program - Narrative (Details) - USD ($) |
Jul. 31, 2026 |
Apr. 30, 2026 |
Jan. 31, 2026 |
Oct. 31, 2025 |
[1] | Aug. 31, 2025 |
Jul. 31, 2025 |
[1] | Jun. 30, 2025 |
Jun. 29, 2025 |
Apr. 30, 2025 |
Oct. 31, 2024 |
Oct. 30, 2024 |
Jul. 31, 2023 |
Jul. 30, 2023 |
||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Share Repurchase Program [Line Items] | |||||||||||||||||
| Share repurchase program | $ 15,000,000 | $ 11,000,000 | $ 11,000,000 | $ 9,000,000 | $ 9,000,000 | $ 4,000,000 | |||||||||||
| Remaining authorization for future common stock repurchases | $ 2,147,000 | $ 3,173,000 | $ 3,181,000 | $ 3,846,000 | $ 2,631,000 | $ 6,274,000 | |||||||||||
| 2025 Stock Repurchase Program | |||||||||||||||||
| Share Repurchase Program [Line Items] | |||||||||||||||||
| Share repurchase program | $ 5,000,000 | ||||||||||||||||
| 2016 Stock Repurchase Program | |||||||||||||||||
| Share Repurchase Program [Line Items] | |||||||||||||||||
| Remaining authorization for future common stock repurchases | $ 2,100,000 | ||||||||||||||||
| |||||||||||||||||