Earnings Per Share - Reconciliation of Basic and Diluted Weighted Average Shares Outstanding (Details) - USD ($)
$ / shares in Units, shares in Thousands, $ in Thousands
3 Months Ended 12 Months Ended
Dec. 31, 2019
Sep. 27, 2019
Jun. 28, 2019
Mar. 29, 2019
Dec. 31, 2018
Sep. 28, 2018
Jun. 29, 2018
Mar. 30, 2018
Dec. 31, 2019
Dec. 31, 2018
Dec. 31, 2017
Antidilutive Securities Excluded from Computation of Earnings Per Share [Line Items]                      
Net income $ 10,626 $ 9,382 $ 7,617 $ 7,091 $ 10,124 $ 9,866 $ 9,195 $ 6,111 $ 34,716 $ 35,296 $ 59,497
Weighted average common shares outstanding - basic (in shares) 11,515 11,506 11,455 11,292 11,262 11,248 11,235 11,146 11,444 11,224 11,021
Add: Dilutive impact of stock options (in shares)                 47 63 67
Weighted average number of shares outstanding - diluted (in shares) 11,728 11,678 11,605 11,399 11,369 11,406 11,383 11,338 11,612 11,378 11,209
Basic earnings per share (in dollars per share) $ 0.92 $ 0.82 $ 0.66 $ 0.63 $ 0.90 $ 0.88 $ 0.82 $ 0.55 $ 3.03 $ 3.14 $ 5.40
Diluted earnings per share (in dollars per share) $ 0.91 $ 0.80 $ 0.66 $ 0.62 $ 0.89 $ 0.86 $ 0.81 $ 0.54 $ 2.99 $ 3.10 $ 5.31
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)                 121 91 121