Earnings Per Share - Reconciliation of Basic and Diluted Weighted Average Shares Outstanding (Details) - USD ($) $ / shares in Units, shares in Thousands, $ in Thousands |
12 Months Ended | ||
|---|---|---|---|
Dec. 31, 2021 |
Dec. 31, 2020 |
Dec. 31, 2019 |
|
| Antidilutive Securities Excluded from Computation of Earnings Per Share [Line Items] | |||
| Net income | $ 45,728 | $ 36,951 | $ 33,176 |
| Weighted average common shares outstanding - basic (in shares) | 11,705 | 11,599 | 11,444 |
| Add: Dilutive impact of stock options (in shares) | 37 | 37 | 47 |
| Weighted average number of shares outstanding - diluted (in shares) | 11,836 | 11,751 | 11,612 |
| Basic earnings per share (in dollars per share) | $ 3.91 | $ 3.19 | $ 2.90 |
| Diluted earnings per share (in dollars per share) | $ 3.86 | $ 3.14 | $ 2.86 |
| Anti-dilutive restricted stock units | |||
| Antidilutive Securities Excluded from Computation of Earnings Per Share [Line Items] | |||
| Add: Dilutive impact of restricted stock units (in shares) | 94 | 115 | 121 |