Consolidated Statements of Stockholders' Equity - USD ($) shares in Thousands, $ in Thousands | Common Stock | Additional Paid-in Capital | Accumulated Deficit | Accumulated Other Comprehensive Income (Loss) | Total |
Balance (in shares) at Dec. 31, 2021 | 33,240 | | | | |
Balance at Dec. 31, 2021 | $ 33 | $ 559,883 | $ (22,722) | $ 1,765 | $ 538,959 |
Increase (Decrease) in Stockholders' Equity | | | | | |
Net income | | | 41,614 | | 41,614 |
Foreign currency translation adjustments | | | | (1,186) | (1,186) |
Change in pension obligation | | | | 9 | 9 |
Exercise of stock options (in shares) | 41 | | | | |
Exercise of stock options | | 491 | | | 491 |
Issuance of common stock on restricted stock units, net of shares withheld (in shares) | 67 | | | | |
Issuance of common stock on restricted stock units, net of shares withheld | | (3,315) | | | (3,315) |
Stock-based compensation expense | | 2,701 | | | 2,701 |
Repurchase of common stock (in shares) | (284) | | | | |
Repurchase of common stock | | (5,127) | (14,873) | | (20,000) |
Balance (in shares) at Mar. 31, 2022 | 33,064 | | | | |
Balance at Mar. 31, 2022 | $ 33 | 554,633 | 4,019 | 588 | 559,273 |
Balance (in shares) at Dec. 31, 2021 | 33,240 | | | | |
Balance at Dec. 31, 2021 | $ 33 | 559,883 | (22,722) | 1,765 | 538,959 |
Increase (Decrease) in Stockholders' Equity | | | | | |
Net income | | | | | 126,087 |
Foreign currency translation adjustments | | | | | (7,561) |
Change in pension obligation | | | | | 25 |
Balance (in shares) at Sep. 30, 2022 | 32,937 | | | | |
Balance at Sep. 30, 2022 | $ 33 | 549,735 | 70,893 | (5,771) | 614,890 |
Balance (in shares) at Mar. 31, 2022 | 33,064 | | | | |
Balance at Mar. 31, 2022 | $ 33 | 554,633 | 4,019 | 588 | 559,273 |
Increase (Decrease) in Stockholders' Equity | | | | | |
Net income | | | 44,189 | | 44,189 |
Foreign currency translation adjustments | | | | (2,685) | (2,685) |
Change in pension obligation | | | | 8 | 8 |
Exercise of stock options (in shares) | 25 | | | | |
Exercise of stock options | | 298 | | | 298 |
Issuance of stock under Employee Stock Purchase Plan (in shares) | 15 | | | | |
Issuance of stock under Employee Stock Purchase Plan | | 711 | | | 711 |
Issuance of common stock on restricted stock units, net of shares withheld (in shares) | 205 | | | | |
Issuance of common stock on restricted stock units, net of shares withheld | | (5,896) | | | (5,896) |
Stock-based compensation expense | | 3,527 | | | 3,527 |
Repurchase of common stock (in shares) | (215) | | | | |
Repurchase of common stock | | (3,872) | (8,626) | | (12,498) |
Balance (in shares) at Jun. 30, 2022 | 33,094 | | | | |
Balance at Jun. 30, 2022 | $ 33 | 549,401 | 39,582 | (2,089) | 586,927 |
Increase (Decrease) in Stockholders' Equity | | | | | |
Net income | | | 40,283 | | 40,283 |
Foreign currency translation adjustments | | | | (3,690) | (3,690) |
Change in pension obligation | | | | 8 | 8 |
Exercise of stock options (in shares) | 30 | | | | |
Exercise of stock options | | 367 | | | 367 |
Issuance of common stock on restricted stock units, net of shares withheld (in shares) | 8 | | | | |
Issuance of common stock on restricted stock units, net of shares withheld | | (70) | | | (70) |
Stock-based compensation expense | | 3,562 | | | 3,562 |
Repurchase of common stock (in shares) | (195) | | | | |
Repurchase of common stock | | (3,525) | (8,972) | | (12,497) |
Balance (in shares) at Sep. 30, 2022 | 32,937 | | | | |
Balance at Sep. 30, 2022 | $ 33 | 549,735 | 70,893 | (5,771) | 614,890 |
Balance (in shares) at Dec. 31, 2022 | 32,775 | | | | |
Balance at Dec. 31, 2022 | $ 33 | 550,299 | 118,892 | (1,968) | 667,256 |
Increase (Decrease) in Stockholders' Equity | | | | | |
Net income | | | 47,697 | | 47,697 |
Foreign currency translation adjustments | | | | 50 | 50 |
Exercise of stock options (in shares) | 2 | | | | |
Exercise of stock options | | 25 | | | 25 |
Issuance of common stock on restricted stock units, net of shares withheld (in shares) | 56 | | | | |
Issuance of common stock on restricted stock units, net of shares withheld | | (3,907) | | | (3,907) |
Stock-based compensation expense | | 3,199 | | | 3,199 |
Repurchase of common stock (in shares) | (107) | | | | |
Repurchase of common stock | | (1,924) | (10,575) | | (12,499) |
Balance (in shares) at Mar. 31, 2023 | 32,726 | | | | |
Balance at Mar. 31, 2023 | $ 33 | 547,692 | 156,014 | (1,918) | 701,821 |
Balance (in shares) at Dec. 31, 2022 | 32,775 | | | | |
Balance at Dec. 31, 2022 | $ 33 | 550,299 | 118,892 | (1,968) | 667,256 |
Increase (Decrease) in Stockholders' Equity | | | | | |
Net income | | | | | 175,207 |
Foreign currency translation adjustments | | | | | (2,192) |
Balance (in shares) at Sep. 30, 2023 | 32,772 | | | | |
Balance at Sep. 30, 2023 | $ 33 | 543,577 | 261,521 | (4,160) | 800,971 |
Balance (in shares) at Mar. 31, 2023 | 32,726 | | | | |
Balance at Mar. 31, 2023 | $ 33 | 547,692 | 156,014 | (1,918) | 701,821 |
Increase (Decrease) in Stockholders' Equity | | | | | |
Net income | | | 61,579 | | 61,579 |
Foreign currency translation adjustments | | | | (1,011) | (1,011) |
Issuance of stock under Employee Stock Purchase Plan (in shares) | 6 | | | | |
Issuance of stock under Employee Stock Purchase Plan | | 957 | | | 957 |
Issuance of common stock on restricted stock units, net of shares withheld (in shares) | 199 | | | | |
Issuance of common stock on restricted stock units, net of shares withheld | | (11,558) | | | (11,558) |
Stock-based compensation expense | | 4,749 | | | 4,749 |
Repurchase of common stock (in shares) | (95) | | | | |
Repurchase of common stock | | (1,720) | (10,780) | | (12,500) |
Balance (in shares) at Jun. 30, 2023 | 32,836 | | | | |
Balance at Jun. 30, 2023 | $ 33 | 540,120 | 206,813 | (2,929) | 744,037 |
Increase (Decrease) in Stockholders' Equity | | | | | |
Net income | | | 65,931 | | 65,931 |
Foreign currency translation adjustments | | | | (1,231) | (1,231) |
Issuance of common stock on restricted stock units, net of shares withheld (in shares) | 7 | | | | |
Issuance of common stock on restricted stock units, net of shares withheld | | (349) | | | (349) |
Stock-based compensation expense | | 5,082 | | | 5,082 |
Repurchase of common stock (in shares) | (71) | | | | |
Repurchase of common stock | | (1,276) | (11,223) | | (12,499) |
Balance (in shares) at Sep. 30, 2023 | 32,772 | | | | |
Balance at Sep. 30, 2023 | $ 33 | $ 543,577 | $ 261,521 | $ (4,160) | $ 800,971 |