Stockholders' Equity - Stock Options and Restricted Stock (Details) $ / shares in Units, $ in Thousands | 3 Months Ended | 6 Months Ended | |
Jun. 30, 2024 USD ($) $ / shares shares | Jun. 30, 2023 USD ($) $ / shares shares | Jun. 30, 2024 USD ($) item $ / shares shares | Jun. 30, 2023 USD ($) $ / shares shares | Dec. 31, 2023 USD ($) |
Stock-based compensation, general disclosures. | | | | | |
Stock-based compensation expense | $ | $ 1,860 | $ 1,808 | $ 3,899 | $ 3,831 | |
Employee Stock Option | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Stock-based compensation expense | $ | 100 | $ 200 | 200 | $ 500 | |
Total unrecognized pre-tax compensation expense related to nonvested stock option awards | $ | $ 100 | | $ 100 | | |
Weighted-average period over which unrecognized compensation cost is expected to be recognized | | | 1 year | | |
Options Outstanding | | | | | |
Outstanding at beginning of period | shares | | | 429,960 | | |
Exercised | shares | | | (1,153) | | |
Cancelled/Expired | shares | | | (12,995) | | |
Outstanding at end of period | shares | 415,812 | | 415,812 | | |
Weighted Average Exercise Price Per Share | | | | | |
Outstanding at beginning of period | $ / shares | | | $ 40.74 | | |
Exercised | $ / shares | | | 1.35 | | |
Cancelled/Expired | $ / shares | | | 41.17 | | |
Outstanding at end of period | $ / shares | $ 40.83 | | $ 40.83 | | |
Other information | | | | | |
Options exercisable number of shares exercisable | shares | 392,239 | 435,559 | 392,239 | 435,559 | |
Options exercisable, weighted-average exercise price | $ / shares | $ 42.19 | $ 44.67 | $ 42.19 | $ 44.67 | |
Weighted average remaining contractual life (in years) | | | 3 years 3 months 18 days | 3 years 9 months 18 days | |
Options exercisable, weighted-average remaining contractual life | | | 3 years 2 months 12 days | | |
Aggregate Intrinsic Value, Options outstanding | $ | $ 125 | | $ 125 | | $ 223 |
Aggregate Intrinsic Value, Exercised | $ | | | 14 | | |
Aggregate Intrinsic Value, Options exercisable | $ | 65 | | $ 65 | | |
Employee Stock Option | Minimum | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Vesting period (in years) | | | 3 years | | |
Term (in years) | | | 7 years | | |
Employee Stock Option | Maximum | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Vesting period (in years) | | | 4 years | | |
Term (in years) | | | 10 years | | |
2016 Plan | Time-Based Restricted Stock Units | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Stock-based compensation expense | $ | 1,500 | $ 1,300 | $ 2,900 | $ 2,600 | |
Total unrecognized pre-tax compensation expense related to awards | $ | $ 8,300 | | $ 8,300 | | |
Weighted-average period over which unrecognized compensation cost is expected to be recognized | | | 1 year 10 months 24 days | | |
Units Outstanding | | | | | |
Restricted stock unit awards outstanding at the beginning of the period (in shares) | shares | | | 589,142 | | |
Granted (in shares) | shares | | | 464,145 | | |
Vested (in shares) | shares | | | (224,149) | | |
Cancelled (in shares) | shares | | | (107,363) | | |
Restricted stock unit awards outstanding at the end of the period (in shares) | shares | 721,775 | | 721,775 | | |
Weighted Average Grant Date Fair Value Per Unit | | | | | |
Restricted stock unit awards outstanding at the beginning of the period (in dollars per share) | $ / shares | | | $ 16.35 | | |
Granted (in dollars per share) | $ / shares | | | 13.87 | | |
Vested (in dollars per share) | $ / shares | | | 18.02 | | |
Cancelled (in dollars per share) | $ / shares | | | 14.62 | | |
Restricted stock unit awards outstanding at the end of the period (in dollars per share) | $ / shares | $ 14.50 | | $ 14.50 | | |
Aggregate Intrinsic Value | | | | | |
Restricted stock unit awards, Average Intrinsic Value | $ | $ 8,618 | | $ 8,618 | | 8,425 |
2016 Plan | Time-Based Restricted Stock Units | Minimum | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Vesting period (in years) | | | 1 year | | |
2016 Plan | Time-Based Restricted Stock Units | Maximum | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Vesting period (in years) | | | 3 years | | |
2016 Plan | Performance-based stock-settled restricted stock units | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Stock-based compensation expense | $ | 200 | $ 100 | $ 600 | $ 300 | |
Total unrecognized pre-tax compensation expense related to awards | $ | $ 1,500 | | $ 1,500 | | |
Weighted-average period over which unrecognized compensation cost is expected to be recognized | | | 2 years 2 months 12 days | | |
Number of performance awards under share-based payment arrangement | item | | | 3 | | |
Units Outstanding | | | | | |
Restricted stock unit awards outstanding at the beginning of the period (in shares) | shares | | | 198,232 | | |
Granted (in shares) | shares | | | 160,659 | | |
Vested (in shares) | shares | | | (44,162) | | |
Cancelled (in shares) | shares | | | (104,913) | | |
Restricted stock unit awards outstanding at the end of the period (in shares) | shares | 209,816 | | 209,816 | | |
Weighted Average Grant Date Fair Value Per Unit | | | | | |
Restricted stock unit awards outstanding at the beginning of the period (in dollars per share) | $ / shares | | | $ 18.93 | | |
Granted (in dollars per share) | $ / shares | | | 13.88 | | |
Vested (in dollars per share) | $ / shares | | | 27.31 | | |
Cancelled (in dollars per share) | $ / shares | | | 14.14 | | |
Restricted stock unit awards outstanding at the end of the period (in dollars per share) | $ / shares | $ 15.70 | | $ 15.70 | | |
Aggregate Intrinsic Value | | | | | |
Restricted stock unit awards, Average Intrinsic Value | $ | $ 2,505 | | $ 2,505 | | $ 2,785 |
2016 Plan | Performance-based stock-settled restricted stock units | Minimum | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Performance goals revenue change and adjusted EBITDA margin | | | 25% | | |
2016 Plan | Performance-based stock-settled restricted stock units | Maximum | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Performance goals revenue change and adjusted EBITDA margin | | | 175% | | |
2016 Plan | 2025 PSUs | Minimum | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Performance goals revenue change and adjusted EBITDA margin | | | 25% | | |
2016 Plan | 2025 PSUs | Maximum | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Performance goals revenue change and adjusted EBITDA margin | | | 175% | | |
2016 Plan | 2024 PSUs | Minimum | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Performance goals revenue change and adjusted EBITDA margin | | | 25% | | |
2016 Plan | 2024 PSUs | Maximum | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Performance goals revenue change and adjusted EBITDA margin | | | 175% | | |
2016 Plan | 2023 PSUs | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Number of performance awards under share-based payment arrangement | item | | | 3 | | |
2016 Plan | Tranche one | 2024 PSUs | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Award vesting percentage | | | 33.33% | | |
2016 Plan | Tranche one | 2023 PSUs | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Award vesting percentage | | | 33.33% | | |
2016 Plan | Tranche two | 2025 PSUs | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Award vesting percentage | | | 33.33% | | |
2016 Plan | Tranche three | 2026 PSUs | | | | | |
Stock-based compensation, general disclosures. | | | | | |
Award vesting percentage | | | 33.33% | | |