CONDENSED CONSOLIDATED STATEMENTS OF CHANGES IN STOCKHOLDERS' EQUITY - USD ($) $ in Thousands | Total | Common Stock | Treasury Stock | Additional Paid-in Capital | Retained Earnings | Accumulated Other Comprehensive Income (Loss) |
Beginning balance, common (in shares) at Dec. 31, 2021 | | 38,820,222 | | | | |
Beginning balance at Dec. 31, 2021 | $ 143,040 | $ 4 | $ (5,566) | $ 66,875 | $ 81,803 | $ (76) |
Beginning balance, treasury (in shares) at Dec. 31, 2021 | | | (341,522) | | | |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | |
Net income | 27,638 | | | | 27,638 | |
Issuance of common stock: | | | | | | |
Exercise of stock options, net of shares withheld for taxes (in shares) | | 73,715 | | | | |
Exercise of stock options, net of shares withheld for taxes | 487 | | | 487 | | |
Restricted stock units and awards, net of shares withheld for taxes (in shares) | | 115,327 | | | | |
Restricted stock units and awards, net of shares withheld for taxes | (283) | | | (283) | | |
Fully vested shares (in shares) | | 1,778 | | | | |
Share-based compensation | 2,933 | | | 2,933 | | |
Adjustment from foreign currency translation, net | $ 11 | | | | | 11 |
Acquisition of treasury stock, at cost (in shares) | (727,901) | | (727,901) | | | |
Acquisition of treasury stock, at cost | $ (13,628) | | $ (13,628) | | | |
Ending balance, common (in shares) at Jun. 30, 2022 | | 39,011,042 | | | | |
Ending balance at Jun. 30, 2022 | 160,198 | $ 4 | $ (19,194) | 70,012 | 109,441 | (65) |
Ending balance, treasury (in shares) at Jun. 30, 2022 | | | (1,069,423) | | | |
Beginning balance, common (in shares) at Mar. 31, 2022 | | 38,885,736 | | | | |
Beginning balance at Mar. 31, 2022 | 152,734 | $ 4 | $ (9,194) | 68,431 | 93,457 | 36 |
Beginning balance, treasury (in shares) at Mar. 31, 2022 | | | (565,910) | | | |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | |
Net income | 15,984 | | | | 15,984 | |
Issuance of common stock: | | | | | | |
Exercise of stock options, net of shares withheld for taxes (in shares) | | 29,990 | | | | |
Exercise of stock options, net of shares withheld for taxes | (75) | | | (75) | | |
Restricted stock units and awards, net of shares withheld for taxes (in shares) | | 94,540 | | | | |
Restricted stock units and awards, net of shares withheld for taxes | (9) | | | (9) | | |
Fully vested shares (in shares) | | 776 | | | | |
Share-based compensation | 1,665 | | | 1,665 | | |
Adjustment from foreign currency translation, net | $ (101) | | | | | (101) |
Acquisition of treasury stock, at cost (in shares) | (503,513) | | (503,513) | | | |
Acquisition of treasury stock, at cost | $ (10,000) | | $ (10,000) | | | |
Ending balance, common (in shares) at Jun. 30, 2022 | | 39,011,042 | | | | |
Ending balance at Jun. 30, 2022 | $ 160,198 | $ 4 | $ (19,194) | 70,012 | 109,441 | (65) |
Ending balance, treasury (in shares) at Jun. 30, 2022 | | | (1,069,423) | | | |
Beginning balance, common (in shares) at Dec. 31, 2022 | 36,630,970 | 39,453,236 | | | | |
Beginning balance at Dec. 31, 2022 | $ 149,906 | $ 4 | $ (59,300) | 70,210 | 139,134 | (142) |
Beginning balance, treasury (in shares) at Dec. 31, 2022 | (2,822,266) | | (2,822,266) | | | |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | |
Net income | $ 27,184 | | | | 27,184 | |
Issuance of common stock: | | | | | | |
Exercise of stock options, net of shares withheld for taxes (in shares) | | 67,250 | | | | |
Exercise of stock options, net of shares withheld for taxes | 822 | | | 822 | | |
Restricted stock units and awards, net of shares withheld for taxes (in shares) | | 48,980 | | | | |
Restricted stock units and awards, net of shares withheld for taxes | (872) | | | (872) | | |
Fully vested shares (in shares) | | 1,607 | | | | |
Share-based compensation | 3,943 | | | 3,943 | | |
Adjustment from foreign currency translation, net | $ 357 | | | | | 357 |
Acquisition of treasury stock, at cost (in shares) | (1,232,581) | | (1,232,581) | | | |
Acquisition of treasury stock, at cost | $ (30,515) | | $ (30,515) | | | |
Ending balance, common (in shares) at Jun. 30, 2023 | 35,516,226 | 39,571,073 | | | | |
Ending balance at Jun. 30, 2023 | $ 150,825 | $ 4 | $ (89,815) | 74,103 | 166,318 | 215 |
Ending balance, treasury (in shares) at Jun. 30, 2023 | (4,054,847) | | (4,054,847) | | | |
Beginning balance, common (in shares) at Mar. 31, 2023 | | 39,556,217 | | | | |
Beginning balance at Mar. 31, 2023 | $ 155,853 | $ 4 | $ (66,884) | 71,797 | 150,896 | 40 |
Beginning balance, treasury (in shares) at Mar. 31, 2023 | | | (3,138,725) | | | |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | |
Net income | 15,422 | | | | 15,422 | |
Issuance of common stock: | | | | | | |
Exercise of stock options, net of shares withheld for taxes (in shares) | | 10,000 | | | | |
Exercise of stock options, net of shares withheld for taxes | 99 | | | 99 | | |
Restricted stock units and awards, net of shares withheld for taxes (in shares) | | 4,075 | | | | |
Restricted stock units and awards, net of shares withheld for taxes | (38) | | | (38) | | |
Fully vested shares (in shares) | | 781 | | | | |
Share-based compensation | 2,245 | | | 2,245 | | |
Adjustment from foreign currency translation, net | $ 175 | | | | | 175 |
Acquisition of treasury stock, at cost (in shares) | (916,122) | | (916,122) | | | |
Acquisition of treasury stock, at cost | $ (22,931) | | $ (22,931) | | | |
Ending balance, common (in shares) at Jun. 30, 2023 | 35,516,226 | 39,571,073 | | | | |
Ending balance at Jun. 30, 2023 | $ 150,825 | $ 4 | $ (89,815) | $ 74,103 | $ 166,318 | $ 215 |
Ending balance, treasury (in shares) at Jun. 30, 2023 | (4,054,847) | | (4,054,847) | | | |