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