Share-Based Compensation (Tables)
   | 
12 Months Ended | 
Dec. 31, 2024  | 
| Share-Based Payment Arrangement [Abstract] | 
 
 | 
| Schedule of Stock-Based Compensation Expense | 
 The following table presents the total stock-based compensation expense, which is included in selling, general and administrative expenses (in thousands): 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
 | 
 | 
Years Ended December 31, | 
 
 | 
 | 
2024 | 
 | 
2023 | 
 | 
 | 
 
| Restricted share expense | 
 | 
$ | 
2,384  | 
 | 
 | 
$ | 
2,584  | 
 | 
 | 
 | 
 
| Stock option expense | 
 | 
2,076  | 
 | 
 | 
1,490  | 
 | 
 | 
 | 
 
| Total stock-based compensation expense | 
 | 
$ | 
4,460  | 
 | 
 | 
$ | 
4,074  | 
 | 
 | 
 | 
 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
| Tax benefit related to stock-based compensation | 
 | 
$ | 
475  | 
 | 
 | 
$ | 
1,045  | 
 | 
 | 
 | 
 
  
 | 
| Schedule of Restricted Share Activity, Excluding Company's Employee Stock Purchase Plan | 
 The following table summarizes the Company’s restricted share activity, excluding the Company’s employee stock purchase plan: 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
 | 
Number of shares | 
 | 
Weighted average grant date fair value | 
 
 | 
 | 
 | 
 | 
 
| Unvested at December 31, 2023 | 
529,862  | 
 | 
 | 
$ | 
11.42  | 
 | 
 
| Granted | 
216,263  | 
 | 
 | 
7.51  | 
 | 
 
| Vested | 
(143,953) | 
 | 
 | 
14.04  | 
 | 
 
| Vested shares forgone to satisfy minimum statutory withholding | 
(83,528) | 
 | 
 | 
14.04  | 
 | 
 
| Forfeitures | 
(14,750) | 
 | 
 | 
11.61  | 
 | 
 
| Unvested at December 31, 2024 | 
503,894  | 
 | 
 | 
$ | 
8.55  | 
 | 
 
  
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
 | 
Year Ended December 31, | 
 
 | 
2024 | 
 | 
2023 | 
 | 
 | 
 
 | 
 | 
 | 
 | 
 | 
 | 
 
| Weighted average grant date fair value of awards granted | 
$ | 
7.51  | 
 | 
 | 
$ | 
9.37  | 
 | 
 | 
 | 
 
| Total fair value of shares vested | 
$ | 
1,122,749  | 
 | 
 | 
$ | 
649,700  | 
 | 
 | 
 | 
 
| Total fair value of shares forgone to satisfy minimum statutory withholding | 
$ | 
651,469  | 
 | 
 | 
$ | 
364,670  | 
 | 
 | 
 | 
 
  
 | 
| Schedule of PSU Activity | 
 The following table summarizes the Company’s PSU activity: 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
 | 
Number of shares | 
 | 
Weighted average grant  date fair value | 
 
 | 
 | 
 | 
 | 
 
| Unvested at December 31, 2023 | 
112,776  | 
 | 
 | 
$ | 
10.49  | 
 | 
 
| Granted | 
117,582  | 
 | 
 | 
5.69  | 
 | 
 
| Performance adjustment upon vesting | 
(17,690) | 
 | 
 | 
8.58  | 
 | 
 
| Vested | 
(13,022) | 
 | 
 | 
8.58  | 
 | 
 
| Vested shares forgone to satisfy minimum statutory withholding | 
(10,425) | 
 | 
 | 
8.58  | 
 | 
 
 | 
 | 
 | 
 | 
 
| Unvested at December 31, 2024 | 
189,221  | 
 | 
 | 
$ | 
7.92  | 
 | 
 
  
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
 | 
Year Ended December 31, | 
 
 | 
2024 | 
 | 
2023 | 
 | 
 | 
 
 | 
 | 
 | 
 | 
 | 
 | 
 
| Weighted average grant date fair value of awards granted | 
$ | 
5.69  | 
 | 
 | 
$ | 
11.59  | 
 | 
 | 
 | 
 
| Total fair value of shares vested | 
$ | 
83,862  | 
 | 
 | 
$ | 
—  | 
 | 
 | 
 | 
 
| Total fair value of shares forgone to satisfy minimum statutory withholding | 
$ | 
67,137  | 
 | 
 | 
$ | 
—  | 
 | 
 | 
 | 
 
  
 | 
| Schedule of Share-based Compensation, Employee Stock Purchase Plan, Activity | 
The following table summarizes the activity relating to the Company’s ESPP program:
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
 | 
Years Ended December 31, | 
 
 | 
2024 | 
 | 
2023 | 
 | 
 | 
 
| Compensation expense | 
$ | 
93,523  | 
 | 
 | 
$ | 
179,595  | 
 | 
 | 
 | 
 
| Shares of stock sold to employees | 
52,965  | 
 | 
 | 
71,623  | 
 | 
 | 
 | 
 
| Weighted average fair value per ESPP award | 
$ | 
9.21  | 
 | 
 | 
$ | 
7.32  | 
 | 
 | 
 | 
 
  
 | 
| Schedule of Share-based Payment Arrangement, Option, Activity | 
 The following tables detail the various stock option activity: 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
| 2014 Plan (Options) | 
 | 
Number of Authorized Shares | 
 | 
Weighted- Average Exercise Price | 
 | 
Weighted- Average Remaining Contractual Term (in Years) | 
 | 
Aggregate Intrinsic Value | 
 
| Outstanding at December 31, 2023 | 
 | 
657,346  | 
 | 
 | 
$ | 
6.69  | 
 | 
 | 
4.16 | 
 | 
$ | 
2,983,514  | 
 | 
 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
| Exercised | 
 | 
(37,332) | 
 | 
 | 
3.62  | 
 | 
 | 
 | 
 | 
 | 
 
| Exercised shares forgone to satisfy minimum statutory withholding | 
 | 
(14,654) | 
 | 
 | 
2.69  | 
 | 
 | 
 | 
 | 
 | 
 
| Shares tendered for cashless exercise | 
 | 
(43,193) | 
 | 
 | 
3.78  | 
 | 
 | 
 | 
 | 
 | 
 
| Forfeitures and expirations | 
 | 
(26,500) | 
 | 
 | 
11.49  | 
 | 
 | 
 | 
 | 
 | 
 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
| Outstanding at December 31, 2024 | 
 | 
535,667  | 
 | 
 | 
$ | 
7.00  | 
 | 
 | 
3.57 | 
 | 
$ | 
1,588,137  | 
 | 
 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
| Exercisable at December 31, 2024 | 
 | 
535,667  | 
 | 
 | 
$ | 
7.00  | 
 | 
 | 
3.57 | 
 | 
$ | 
1,588,137  | 
 | 
 
  
Aggregate Intrinsic Value = Excess of market value over the option exercise price of all in-the-money stock options. 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
| 2021 Plan (Options) | 
 | 
Number of Authorized Shares | 
 | 
Weighted- Average Exercise Price | 
 | 
Weighted- Average Remaining Contractual Term (in Years) | 
 | 
Aggregate Intrinsic Value | 
 
| Outstanding at December 31, 2023 | 
 | 
1,051,673  | 
 | 
 | 
$ | 
11.05  | 
 | 
 | 
8.79 | 
 | 
$ | 
1,207,118  | 
 | 
 
| Granted | 
 | 
879,411  | 
 | 
 | 
6.85  | 
 | 
 | 
 | 
 | 
 | 
 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
| Forfeitures and expirations | 
 | 
(90,298) | 
 | 
 | 
13.13  | 
 | 
 | 
 | 
 | 
 | 
 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
| Outstanding at December 31, 2024 | 
 | 
1,840,786  | 
 | 
 | 
$ | 
8.93  | 
 | 
 | 
8.54 | 
 | 
$ | 
1,504,894  | 
 | 
 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
| Exercisable at December 31, 2024 | 
 | 
575,876  | 
 | 
 | 
$ | 
11.95  | 
 | 
 | 
7.49 | 
 | 
$ | 
—  | 
 | 
 
  
Aggregate Intrinsic Value = Excess of market value over the option exercise price of all in-the-money stock options. 
 | 
| Schedule of Share-based Payment Award, Stock Options, Valuation Assumptions | 
 The following is the average fair value per share estimated on the date of grant and the assumptions used for options granted: 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 
 | 
 | 
Years Ended December 31, | 
 
| Stock Options: | 
 | 
2024 | 
 | 
2023 | 
 | 
 | 
 
| Expected volatility | 
 | 
46% to 51%  | 
 | 
52% to 53%  | 
 | 
 | 
 
| Risk free interest rate | 
 | 
4.22% to 4.60%  | 
 | 
3.71% to 4.83%  | 
 | 
 | 
 
| Expected lives at date of grant (in years) | 
 | 
4.08 | 
 | 
3.99 | 
 | 
 | 
 
| Weighted average fair value of options granted | 
 | 
$2.97 | 
 | 
$4.10 | 
 | 
 | 
 
| Total intrinsic value of options exercised | 
 | 
$ | 
322,797  | 
 | 
 | 
$ | 
3,155,770  | 
 | 
 | 
 | 
 
  
 |