Note 5 - Stock-based Compensation (Tables)
|
12 Months Ended |
Dec. 31, 2023 |
Notes Tables |
|
Share-Based Payment Arrangement, Expensed and Capitalized, Amount [Table Text Block] |
| | Year Ended December 31, | |
| | 2023 | | | 2022 | |
Stock-based compensation: | | | | | | | | |
Cost of revenue | | $ | 1,126 | | | $ | 913 | |
Sales and marketing | | | 2,640 | | | | 3,842 | |
Research, development and engineering | | | 2,962 | | | | 2,646 | |
General and administrative | | | 4,430 | | | | 3,888 | |
Stock-based compensation expense | | | 11,158 | | | | 11,289 | |
Capitalized to software and patent costs | | | 63 | | | | 128 | |
Total stock-based compensation | | $ | 11,221 | | | $ | 11,417 | |
|
Share-Based Payment Arrangement, Nonvested Award, Cost [Table Text Block] |
| | December 31, | | | December 31, | |
| | 2023 | | | 2022 | |
Total unrecognized compensation costs | | $ | 15,370 | | | $ | 16,051 | |
|
Employee Service Share Based Compensation Non Vested Awards Compensation Cost Not Yet Recognized Period for Recognition [Table Text Block] |
| | | | | | | | | | | |
| | RSAs | | | RSUs | | | PRSUs | |
Weighted average period (in years) | | | 0.76 | | | | 1.50 | | | | 1.64 | |
|
Share-Based Payment Arrangement, Option, Activity [Table Text Block] |
| | | | | | Weighted | | | Weighted | | | | | |
| | | | | | Average | | | Average | | | Aggregate | |
| | Number of | | | Exercise | | | Grant Date | | | Intrinsic | |
| | Options | | | Price | | | Fair Value | | | Value | |
Options outstanding, December 31, 2021 | | | 50 | | | $ | 39.54 | | | $ | 22.23 | | | | | |
Granted | | | 1 | | | $ | 22.15 | | | $ | — | | | | | |
Exercised | | | — | | | $ | — | | | $ | — | | | | | |
Forfeited or expired | | | — | | | $ | — | | | $ | — | | | | | |
Options outstanding, December 31, 2022 | | | 51 | | | $ | 39.14 | | | $ | 21.72 | | | | | |
Granted | | | — | | | $ | — | | | $ | — | | | | | |
Exercised | | | — | | | $ | — | | | $ | — | | | | | |
Forfeited or expired | | | (50 | ) | | $ | 39.54 | | | $ | 22.23 | | | | | |
Options outstanding, December 31, 2023 | | | 1 | | | | 22.15 | | | $ | — | | | | 16 | |
Options exercisable, December 31, 2023 | | | 1 | | | $ | 22.15 | | | | | | | $ | 16 | |
Options unvested, December 31, 2023 | | | — | | | $ | — | | | | | | | $ | — | |
|
Share-Based Payment Arrangement, Option, Exercise Price Range [Table Text Block] |
| | Options Outstanding | | | Options Exercisable | |
| | | | | | | | | | Weighted | | | | | | | | | | | Weighted | |
| | | | | | Remaining | | | Average | | | | | | | Remaining | | | Average | |
| | Number | | | Contractual | | | Exercise | | | Number | | | Contractual | | | Exercise | |
Exercise Price | | Outstanding | | | Life (Years) | | | Price | | | Outstanding | | | Life (Years) | | | Price | |
$21-$24 | | | 1 | | | | 6.85 | | | $ | 22.15 | | | | 1 | | | | 6.85 | | | $ | 22.15 | |
|
Nonvested Restricted Stock Shares Activity [Table Text Block] |
| | | | | | Weighted | |
| | | | | | Average | |
| | Number of | | | Grant Date | |
| | Shares | | | Fair Value | |
Unvested balance, December 31, 2021 | | | 360 | | | $ | 34.90 | |
Granted | | | 54 | | | $ | 18.36 | |
Vested | | | (187 | ) | | $ | 32.72 | |
Forfeited | | | (31 | ) | | $ | 36.90 | |
Unvested balance, December 31, 2022 | | | 196 | | | $ | 32.06 | |
Granted | | | 45 | | | $ | 22.10 | |
Vested | | | (130 | ) | | $ | 30.18 | |
Forfeited | | | (6 | ) | | $ | 34.89 | |
Unvested balance, December 31, 2023 | | | 105 | | | $ | 29.89 | |
|
Schedule of Fair Value of Restricted Stock Awards Vested [Table Text Block] |
| | Year Ended December 31, | |
| | 2023 | | | 2022 | |
Fair value of RSA vested | | $ | 3,273 | | | $ | 4,445 | |
|
Share-Based Payment Arrangement, Restricted Stock Unit, Activity [Table Text Block] |
| | | | | | Weighted | |
| | | | | | Average | |
| | Number of | | | Grant Date | |
| | Units | | | Fair Value | |
Unvested balance, December 31, 2021 | | | — | | | $ | — | |
Granted | | | 601 | | | $ | 26.31 | |
Vested | | | (144 | ) | | $ | 30.25 | |
Forfeited | | | (87 | ) | | $ | 26.31 | |
Unvested balance, December 31, 2022 | | | 370 | | | $ | 24.77 | |
Granted | | | 298 | | | $ | 23.20 | |
Vested | | | (161 | ) | | $ | 24.46 | |
Forfeited | | | (65 | ) | | $ | 25.17 | |
Unvested balance, December 31, 2023 | | | 442 | | | $ | 23.77 | |
|
Schedule of Fair Value of Restricted Stock Units Vested [Table Text Block] |
| | Year Ended December 31, | |
| | 2023 | | | 2022 | |
Fair value of RSU awards vested | | $ | 4,893 | | | $ | 2,509 | |
|
Share-Based Payment Arrangement, Performance Shares, Activity [Table Text Block] |
| | | | | | Weighted | |
| | | | | | Average | |
| | Number of | | | Grant Date | |
| | Units | | | Fair Value | |
Unvested balance, December 31, 2020 | | | 124 | | | $ | 11.08 | |
Granted | | | — | | | $ | — | |
Vested (1) | | | (82 | ) | | $ | 15.54 | |
Forfeited (1) | | | (42 | ) | | $ | 11.08 | |
Unvested balance, December 31, 2021 | | | — | | | $ | — | |
Granted | | | 73 | | | $ | 31.93 | |
Vested | | | — | | | $ | — | |
Forfeited | | | (6 | ) | | $ | 32.02 | |
Unvested balance, December 31, 2022 | | | 67 | | | $ | 31.92 | |
Change in units based on performance expectations | | | (6 | ) | | $ | 32.02 | |
Granted | | | 134 | | | $ | 27.75 | |
Vested | | | (2 | ) | | $ | 32.02 | |
Forfeited | | | (1 | ) | | $ | 32.02 | |
Unvested balance, December 31, 2023 | | | 192 | | | $ | 29.01 | |
|
Schedule of Fair Value of Performance Stock Units Vested [Table Text Block] |
| | Year Ended December 31, | |
| | 2023 | | | 2022 | |
Fair value of PRSU awards vested | | $ | 54 | | | $ | — | |
|
Black Scholes Option Valuation [Member] |
|
Notes Tables |
|
Schedule of Share-Based Payment Award, Stock Options, Valuation Assumptions [Table Text Block] |
| | Year Ended December 31, | |
| | 2023 | | | 2022 | |
Stock price | | $ | 22.37 | | | $ | 32.02 | |
Expected volatility | | | 74.7 | % | | | 82.8 | % |
Risk-free interest rate | | | 4.3 | % | | | 1.8 | % |
|