Consolidated Statements of Shareholders' Equity - USD ($) $ in Thousands | Total | Common Stock | Additional Paid-In Capital | Retained Earnings | Accumulated Other Comprehensive Loss |
Beginning balance (in shares) at Dec. 31, 2022 | | 26,888,425 | | | |
Beginning balance at Dec. 31, 2022 | $ 697,648 | $ 27 | $ 473,740 | $ 258,236 | $ (34,355) |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | | 26,798 | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | (401) | | (401) | | |
Stock-based compensation expense | 3,695 | | 3,695 | | |
Repurchases of common stock (in shares) | | (712,500) | | | |
Repurchases of common stock | (21,325) | $ (1) | (11,849) | (9,475) | |
Net income (loss) | 2,659 | | | 2,659 | |
Other comprehensive income | | | | | |
Foreign currency translation adjustment | 527 | | | | 527 |
Net unrealized gains (losses) on investments in securities | 334 | | | | 334 |
Comprehensive income | 3,520 | | | | |
Ending balance (in shares) at Mar. 31, 2023 | | 26,202,723 | | | |
Ending balance at Mar. 31, 2023 | 683,137 | $ 26 | 465,185 | 251,420 | (33,494) |
Beginning balance (in shares) at Dec. 31, 2022 | | 26,888,425 | | | |
Beginning balance at Dec. 31, 2022 | 697,648 | $ 27 | 473,740 | 258,236 | (34,355) |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | |
Net income (loss) | 10,230 | | | | |
Other comprehensive income | | | | | |
Comprehensive income | 14,297 | | | | |
Ending balance (in shares) at Sep. 30, 2023 | | 25,785,903 | | | |
Ending balance at Sep. 30, 2023 | 684,922 | $ 26 | 463,908 | 251,276 | (30,288) |
Beginning balance (in shares) at Mar. 31, 2023 | | 26,202,723 | | | |
Beginning balance at Mar. 31, 2023 | 683,137 | $ 26 | 465,185 | 251,420 | (33,494) |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | | 169,229 | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | 962 | | 962 | | |
Stock-based compensation expense | 3,675 | | 3,675 | | |
Repurchases of common stock (in shares) | | (276,518) | | | |
Repurchases of common stock | (8,979) | | (4,872) | (4,107) | |
Net income (loss) | (383) | | | (383) | |
Other comprehensive income | | | | | |
Foreign currency translation adjustment | 4,254 | | | | 4,254 |
Net unrealized gains (losses) on investments in securities | 19 | | | | 19 |
Comprehensive income | 3,890 | | | | |
Ending balance (in shares) at Jun. 30, 2023 | | 26,095,434 | | | |
Ending balance at Jun. 30, 2023 | 682,685 | $ 26 | 464,950 | 246,930 | (29,221) |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | | 1,037 | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | (11) | | (11) | | |
Stock-based compensation expense | 4,441 | | 4,441 | | |
Repurchases of common stock (in shares) | | (310,568) | | | |
Repurchases of common stock | (9,080) | | (5,472) | (3,608) | |
Net income (loss) | 7,954 | | | 7,954 | |
Other comprehensive income | | | | | |
Foreign currency translation adjustment | (1,307) | | | | (1,307) |
Net unrealized gains (losses) on investments in securities | 240 | | | | 240 |
Comprehensive income | 6,887 | | | | |
Ending balance (in shares) at Sep. 30, 2023 | | 25,785,903 | | | |
Ending balance at Sep. 30, 2023 | $ 684,922 | $ 26 | 463,908 | 251,276 | (30,288) |
Beginning balance (in shares) at Dec. 31, 2023 | 25,721,957 | 25,721,957 | | | |
Beginning balance at Dec. 31, 2023 | $ 695,295 | $ 26 | 466,884 | 256,398 | (28,013) |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | | 29,974 | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | (533) | | (533) | | |
Stock-based compensation expense | 4,276 | | 4,276 | | |
Repurchases of common stock and other (in shares) | | (435,861) | | | |
Repurchases of common stock and other | (16,164) | | (7,912) | (8,252) | |
Net income (loss) | 5,268 | | | 5,268 | |
Other comprehensive income | | | | | |
Foreign currency translation adjustment | (925) | | | | (925) |
Net unrealized gains (losses) on investments in securities | 93 | | | | 93 |
Comprehensive income | 4,436 | | | | |
Ending balance (in shares) at Mar. 31, 2024 | | 25,316,070 | | | |
Ending balance at Mar. 31, 2024 | $ 687,310 | $ 26 | 462,715 | 253,414 | (28,845) |
Beginning balance (in shares) at Dec. 31, 2023 | 25,721,957 | 25,721,957 | | | |
Beginning balance at Dec. 31, 2023 | $ 695,295 | $ 26 | 466,884 | 256,398 | (28,013) |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | |
Net income (loss) | 16,997 | | | | |
Other comprehensive income | | | | | |
Comprehensive income | $ 18,158 | | | | |
Ending balance (in shares) at Sep. 30, 2024 | 24,510,076 | 24,510,076 | | | |
Ending balance at Sep. 30, 2024 | $ 679,993 | $ 25 | 454,025 | 252,795 | (26,852) |
Beginning balance (in shares) at Mar. 31, 2024 | | 25,316,070 | | | |
Beginning balance at Mar. 31, 2024 | 687,310 | $ 26 | 462,715 | 253,414 | (28,845) |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | | 176,780 | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | 707 | | 707 | | |
Stock-based compensation expense | 4,244 | | 4,244 | | |
Repurchases of common stock and other (in shares) | | (345,234) | | | |
Repurchases of common stock and other | (10,978) | | (6,266) | (4,712) | |
Net income (loss) | 4,540 | | | 4,540 | |
Other comprehensive income | | | | | |
Foreign currency translation adjustment | (678) | | | | (678) |
Net unrealized gains (losses) on investments in securities | 91 | | | | 91 |
Comprehensive income | 3,953 | | | | |
Ending balance (in shares) at Jun. 30, 2024 | | 25,147,616 | | | |
Ending balance at Jun. 30, 2024 | 685,236 | $ 26 | 461,400 | 253,242 | (29,432) |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | |
Stock-based compensation expense | 4,196 | | 4,196 | | |
Repurchases of common stock and other (in shares) | | (637,540) | | | |
Repurchases of common stock and other | (19,208) | $ (1) | (11,571) | (7,636) | |
Net income (loss) | 7,189 | | | 7,189 | |
Other comprehensive income | | | | | |
Foreign currency translation adjustment | 2,430 | | | | 2,430 |
Net unrealized gains (losses) on investments in securities | 150 | | | | 150 |
Comprehensive income | $ 9,769 | | | | |
Ending balance (in shares) at Sep. 30, 2024 | 24,510,076 | 24,510,076 | | | |
Ending balance at Sep. 30, 2024 | $ 679,993 | $ 25 | $ 454,025 | $ 252,795 | $ (26,852) |