CONDENSED CONSOLIDATED STATEMENTS OF STOCKHOLDERS’ EQUITY - USD ($) $ in Thousands | Total | Common Stock | Treasury Stock | Additional Paid-in Capital | Retained Earnings | Accumulated Other Comprehensive Gain (Loss) |
Beginning balance (in shares) at Dec. 31, 2022 | | 36,158,046 | | | | |
Beginning balance at Dec. 31, 2022 | $ 537,073 | $ 38 | $ (128,892) | $ 476,117 | $ 193,221 | $ (3,411) |
Beginning balance (in shares) at Dec. 31, 2022 | | | 2,151,098 | | | |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | |
Stock-based compensation | 34,192 | | | 34,192 | | |
Shares issued pursuant to stock awards (in shares) | | 496,500 | | | | |
Shares issued pursuant to stock awards | 5,524 | $ 1 | | 5,523 | | |
Employee stock purchase plan activity (in shares) | | 41,384 | | | | |
Employee stock purchase plan activity | $ 4,481 | | | 4,481 | | |
Repurchases of common stock, net of costs (in shares) | 0 | | | | | |
Repurchases of common stock, net of costs | $ 0 | | | | | |
Net income | 46,813 | | | | 46,813 | |
Foreign currency translation adjustments | (1,446) | | | | | (1,446) |
Unrealized gain on investments, net of tax | 1,376 | | | | | 1,376 |
Reclassification of gain on investments into earnings, net of tax | (1,169) | | | | | (1,169) |
Ending balance (in shares) at Sep. 30, 2023 | | 36,695,930 | | | | |
Ending balance at Sep. 30, 2023 | 626,844 | $ 39 | $ (128,892) | 520,313 | 240,034 | (4,650) |
Ending balance (in shares) at Sep. 30, 2023 | | | 2,151,098 | | | |
Beginning balance (in shares) at Jun. 30, 2023 | | 36,646,819 | | | | |
Beginning balance at Jun. 30, 2023 | 600,981 | $ 39 | $ (128,892) | 508,484 | 223,192 | (1,842) |
Beginning balance (in shares) at Jun. 30, 2023 | | | 2,151,098 | | | |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | |
Stock-based compensation | 10,780 | | | 10,780 | | |
Shares issued pursuant to stock awards (in shares) | | 45,952 | | | | |
Shares issued pursuant to stock awards | 705 | | | 705 | | |
Employee stock purchase plan activity (in shares) | | 3,159 | | | | |
Employee stock purchase plan activity | $ 344 | | | 344 | | |
Repurchases of common stock, net of costs (in shares) | 0 | | | | | |
Repurchases of common stock, net of costs | $ 0 | | | | | |
Net income | 16,842 | | | | 16,842 | |
Foreign currency translation adjustments | (2,966) | | | | | (2,966) |
Unrealized gain on investments, net of tax | 570 | | | | | 570 |
Reclassification of gain on investments into earnings, net of tax | (412) | | | | | (412) |
Ending balance (in shares) at Sep. 30, 2023 | | 36,695,930 | | | | |
Ending balance at Sep. 30, 2023 | $ 626,844 | $ 39 | $ (128,892) | 520,313 | 240,034 | (4,650) |
Ending balance (in shares) at Sep. 30, 2023 | | | 2,151,098 | | | |
Beginning balance (in shares) at Dec. 31, 2023 | 36,820,048 | 36,820,048 | | | | |
Beginning balance at Dec. 31, 2023 | $ 667,475 | $ 39 | $ (128,892) | 537,061 | 259,045 | 222 |
Beginning balance (in shares) at Dec. 31, 2023 | 2,151,098 | | 2,151,098 | | | |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | |
Stock-based compensation | $ 40,075 | | | 40,075 | | |
Shares issued pursuant to stock awards (in shares) | | 488,849 | | | | |
Shares issued pursuant to stock awards | 4,198 | | | 4,198 | | |
Employee stock purchase plan activity (in shares) | | 35,416 | | | | |
Employee stock purchase plan activity | $ 5,672 | | | 5,672 | | |
Repurchases of common stock, net of costs (in shares) | 205,331 | (205,331) | 205,331 | | | |
Repurchases of common stock, net of costs | $ (37,567) | | $ (37,567) | | | |
Reissuances of treasury stock (in shares) | | 427,461 | (427,461) | | | |
Reissuances of treasury stock | 91,424 | | $ 66,711 | 24,713 | | |
Net income | 59,495 | | | | 59,495 | |
Foreign currency translation adjustments | (886) | | | | | (886) |
Unrealized gain on investments, net of tax | 1,089 | | | | | 1,089 |
Reclassification of gain on investments into earnings, net of tax | $ (1,610) | | | | | (1,610) |
Ending balance (in shares) at Sep. 30, 2024 | 37,566,443 | 37,566,443 | | | | |
Ending balance at Sep. 30, 2024 | $ 829,365 | $ 39 | $ (99,748) | 611,719 | 318,540 | (1,185) |
Ending balance (in shares) at Sep. 30, 2024 | 1,928,968 | | 1,928,968 | | | |
Beginning balance (in shares) at Jun. 30, 2024 | | 37,086,627 | | | | |
Beginning balance at Jun. 30, 2024 | $ 703,421 | $ 39 | $ (162,187) | 574,842 | 295,080 | (4,353) |
Beginning balance (in shares) at Jun. 30, 2024 | | | 2,333,099 | | | |
Increase (Decrease) in Stockholders' Equity [Roll Forward] | | | | | | |
Stock-based compensation | 9,996 | | | 9,996 | | |
Shares issued pursuant to stock awards (in shares) | | 72,852 | | | | |
Shares issued pursuant to stock awards | 1,884 | | | 1,884 | | |
Employee stock purchase plan activity (in shares) | | 2,833 | | | | |
Employee stock purchase plan activity | $ 453 | | | 453 | | |
Repurchases of common stock, net of costs (in shares) | 456 | (456) | 456 | | | |
Repurchases of common stock, net of costs | $ (84) | | $ (84) | | | |
Reissuances of treasury stock (in shares) | | 404,587 | (404,587) | | | |
Reissuances of treasury stock | 87,067 | | $ 62,523 | 24,544 | | |
Net income | 23,460 | | | | 23,460 | |
Foreign currency translation adjustments | 3,332 | | | | | 3,332 |
Unrealized gain on investments, net of tax | 84 | | | | | 84 |
Reclassification of gain on investments into earnings, net of tax | $ (248) | | | | | (248) |
Ending balance (in shares) at Sep. 30, 2024 | 37,566,443 | 37,566,443 | | | | |
Ending balance at Sep. 30, 2024 | $ 829,365 | $ 39 | $ (99,748) | $ 611,719 | $ 318,540 | $ (1,185) |
Ending balance (in shares) at Sep. 30, 2024 | 1,928,968 | | 1,928,968 | | | |