v3.26.1
Note 9 - Net Income (Loss) Per Share (Tables)
6 Months Ended
Jun. 30, 2026
Notes Tables  
Schedule of Earnings Per Share, Basic and Diluted [Table Text Block]
   

Three Months Ended June 30,

   

Six Months Ended June 30,

 
   

2026

   

2025

   

2026

   

2025

 

Numerator:

                               

Net income (loss)

  $ 4,271     $ 1,146     $ 9,062     $ (1,886 )

Denominator:

                               

Basic weighted average common shares outstanding

    40,932       39,148       40,397       39,118  

Effect of dilutive stock options, unvested restricted stock units, and shares of common stock expected to be issued under employee stock purchase plan

    844       112       682        

Diluted weighted average common shares outstanding

    41,776       39,260       41,079       39,118  
                                 

Net income (loss) per share:

                               

Basic

  $ 0.10     $ 0.03     $ 0.22     $ (0.05 )

Diluted

  $ 0.10     $ 0.03     $ 0.22     $ (0.05 )
Schedule of Antidilutive Securities Excluded from Computation of Earnings Per Share [Table Text Block]
   

Three Months Ended June 30,

   

Six Months Ended June 30,

 
   

2026

   

2025

   

2026

   

2025

 

Non-vested restricted stock units

    5       1,164       17       1,518  

Outstanding stock options

          6             26  

Shares issuable under employee stock purchase plan

    62       268       55       268  

Total

    67       1,438       72       1,812