Condensed Consolidated Statements of Stockholders' Equity (Unaudited) - USD ($) $ in Thousands | Pension Plan [Member] Common Stock [Member] | Pension Plan [Member] Additional Paid-in Capital [Member] | Pension Plan [Member] Retained Earnings [Member] | Pension Plan [Member] AOCI Attributable to Parent [Member] | Pension Plan [Member] | Foreign Exchange Forward [Member] Common Stock [Member] | Foreign Exchange Forward [Member] Additional Paid-in Capital [Member] | Foreign Exchange Forward [Member] Retained Earnings [Member] | Foreign Exchange Forward [Member] AOCI Attributable to Parent [Member] | Foreign Exchange Forward [Member] | Interest Rate Swap [Member] Common Stock [Member] | Interest Rate Swap [Member] Additional Paid-in Capital [Member] | Interest Rate Swap [Member] Retained Earnings [Member] | Interest Rate Swap [Member] AOCI Attributable to Parent [Member] | Interest Rate Swap [Member] | Common Stock [Member] | Additional Paid-in Capital [Member] | Retained Earnings [Member] | AOCI Attributable to Parent [Member] | Total |
Balances (in shares) at Dec. 31, 2022 | | | | | | | | | | | | | | | | 9,927,360 | | | | |
Balance at Dec. 31, 2022 | | | | | | | | | | | | | | | | $ 99 | $ 127,911 | $ 191,053 | $ (789) | $ 318,274 |
Net income | | | | | | | | | | | | | | | | $ 0 | 0 | 9,810 | 0 | 9,810 |
Pension liability adjustment | $ 0 | $ 0 | $ 0 | $ 59 | $ 59 | | | | | | | | | | | | | | | |
Unrealized gain (loss) on derivatives designated as cash flow hedges | | | | | | $ 0 | $ 0 | $ 0 | $ (101) | $ (101) | $ 0 | $ 0 | $ 0 | $ (93) | $ (93) | | | | | |
Issuance of common stock under stock compensation plans, net of tax withholdings (in shares) | | | | | | | | | | | | | | | | 86,836 | | | | |
Issuance of common stock under stock compensation plans, net of tax withholdings | | | | | | | | | | | | | | | | | (1,653) | | | (1,652) |
Share-based compensation expense | | | | | | | | | | | | | | | | $ 0 | 2,304 | 0 | 0 | 2,304 |
Balances (in shares) at Jun. 30, 2023 | | | | | | | | | | | | | | | | 10,014,196 | | | | |
Balance at Jun. 30, 2023 | | | | | | | | | | | | | | | | $ 100 | 128,562 | 200,863 | (924) | 328,601 |
Balances (in shares) at Mar. 31, 2023 | | | | | | | | | | | | | | | | 9,998,292 | | | | |
Balance at Mar. 31, 2023 | | | | | | | | | | | | | | | | $ 100 | 128,478 | 193,415 | (916) | 321,077 |
Net income | | | | | | | | | | | | | | | | $ 0 | 0 | 7,448 | 0 | 7,448 |
Pension liability adjustment | 0 | 0 | 0 | 30 | 30 | | | | | | | | | | | | | | | |
Unrealized gain (loss) on derivatives designated as cash flow hedges | | | | | | 0 | 0 | 0 | (123) | (123) | 0 | 0 | 0 | 85 | 85 | | | | | |
Issuance of common stock under stock compensation plans, net of tax withholdings (in shares) | | | | | | | | | | | | | | | | 15,904 | | | | |
Issuance of common stock under stock compensation plans, net of tax withholdings | | | | | | | | | | | | | | | | | (1,230) | | | (1,230) |
Share-based compensation expense | | | | | | | | | | | | | | | | $ 0 | 1,314 | 0 | 0 | 1,314 |
Balances (in shares) at Jun. 30, 2023 | | | | | | | | | | | | | | | | 10,014,196 | | | | |
Balance at Jun. 30, 2023 | | | | | | | | | | | | | | | | $ 100 | 128,562 | 200,863 | (924) | 328,601 |
Balances (in shares) at Mar. 31, 2023 | | | | | | | | | | | | | | | | 9,998,292 | | | | |
Balance at Mar. 31, 2023 | | | | | | | | | | | | | | | | $ 100 | 128,478 | 193,415 | (916) | 321,077 |
Balances (in shares) at Jun. 30, 2024 | | | | | | | | | | | | | | | | 9,918,711 | | | | |
Balance at Jun. 30, 2024 | | | | | | | | | | | | | | | | $ 99 | 126,020 | 225,982 | (918) | 351,183 |
Balances (in shares) at Dec. 31, 2023 | | | | | | | | | | | | | | | | 9,985,580 | | | | |
Balance at Dec. 31, 2023 | | | | | | | | | | | | | | | | $ 100 | 129,095 | 212,125 | (960) | 340,360 |
Net income | | | | | | | | | | | | | | | | $ 0 | 0 | 13,857 | 0 | 13,857 |
Pension liability adjustment | 0 | 0 | 0 | 44 | 44 | | | | | | | | | | | | | | | |
Unrealized gain (loss) on derivatives designated as cash flow hedges | | | | | | 0 | 0 | 0 | 13 | 13 | 0 | 0 | 0 | (15) | (15) | | | | | |
Issuance of common stock under stock compensation plans, net of tax withholdings (in shares) | | | | | | | | | | | | | | | | 78,021 | | | | |
Issuance of common stock under stock compensation plans, net of tax withholdings | | | | | | | | | | | | | | | | | (1,449) | | | (1,449) |
Repurchase of common stock (in shares) | | | | | | | | | | | | | | | | (144,890) | | | | |
Repurchase of common stock | | | | | | | | | | | | | | | | $ (1) | (4,300) | 0 | 0 | (4,301) |
Share-based compensation expense | | | | | | | | | | | | | | | | $ 0 | 2,674 | 0 | 0 | 2,674 |
Balances (in shares) at Jun. 30, 2024 | | | | | | | | | | | | | | | | 9,918,711 | | | | |
Balance at Jun. 30, 2024 | | | | | | | | | | | | | | | | $ 99 | 126,020 | 225,982 | (918) | 351,183 |
Balances (in shares) at Mar. 31, 2024 | | | | | | | | | | | | | | | | 9,872,897 | | | | |
Balance at Mar. 31, 2024 | | | | | | | | | | | | | | | | $ 99 | 126,057 | 217,363 | (905) | 342,614 |
Net income | | | | | | | | | | | | | | | | $ 0 | 0 | 8,619 | 0 | 8,619 |
Pension liability adjustment | $ 0 | $ 0 | $ 0 | $ 23 | $ 23 | | | | | | | | | | | | | | | |
Unrealized gain (loss) on derivatives designated as cash flow hedges | | | | | | $ 0 | $ 0 | $ 0 | $ 3 | $ 3 | $ 0 | $ 0 | $ 0 | $ (39) | $ (39) | | | | | |
Issuance of common stock under stock compensation plans, net of tax withholdings (in shares) | | | | | | | | | | | | | | | | 63,329 | | | | |
Issuance of common stock under stock compensation plans, net of tax withholdings | | | | | | | | | | | | | | | | | (1,129) | | | (1,129) |
Repurchase of common stock (in shares) | | | | | | | | | | | | | | | | (17,515) | | | | |
Repurchase of common stock | | | | | | | | | | | | | | | | $ 0 | (557) | 0 | 0 | (557) |
Share-based compensation expense | | | | | | | | | | | | | | | | $ 0 | 1,649 | 0 | 0 | 1,649 |
Balances (in shares) at Jun. 30, 2024 | | | | | | | | | | | | | | | | 9,918,711 | | | | |
Balance at Jun. 30, 2024 | | | | | | | | | | | | | | | | $ 99 | $ 126,020 | $ 225,982 | $ (918) | $ 351,183 |