v3.26.1
Note 7 - Stockholders' Equity (Details Textual)
6 Months Ended
Jun. 30, 2026
USD ($)
Milestone
$ / shares
shares
May 06, 2026
USD ($)
Dec. 31, 2025
USD ($)
$ / shares
shares
Jul. 31, 2025
USD ($)
Apr. 16, 2019
shares
Equity [Line Items]          
Preferred Stock, Shares Authorized (in shares) 5,000,000   5,000,000    
Preferred Stock, Par or Stated Value Per Share (in dollars per share) | $ / shares $ 0.0001   $ 0.0001    
Preferred Stock, Shares Issued (in shares) 0   0    
Common Stock, Shares Authorized (in shares) 500,000,000   500,000,000    
Common Stock, Shares, Issued (in shares) 26,186,979   26,520,417    
Common Stock, Par or Stated Value Per Share (in dollars per share) | $ / shares $ 0.0001   $ 0.0001    
Additional paid-in capital | $ $ 542,662,000   $ 523,168,000    
Unrecognized stock-based compensation expense related to stock options | $ $ 0        
Number of Stock Price Milestones Achieved | Milestone 4        
Number Of Additional Stock Price Milestones Achieved | Milestone 2        
Issuance of common stock via employee stock purchase plan (in shares) 7,148        
Preferred Stock, Shares Outstanding (in shares) 0   0    
Common Stock, Shares, Outstanding (in shares) 26,186,979   26,520,417    
Share-based compensation arrangement, measurement period 3 years        
2025 Repurchase Program [Member]          
Equity [Line Items]          
Treasury Stock, Shares, Acquired (in shares) 226,130        
Treasury Stock, Value, Acquired, Cost Method | $ $ 27,300,000        
Share repurchase program, authorized, amount | $       $ 150,000,000  
Average price per share | $ / shares $ 120.65        
2026 Repurchase Program [Member]          
Equity [Line Items]          
Treasury Stock, Shares, Acquired (in shares) 332,844        
Treasury Stock, Value, Acquired, Cost Method | $ $ 36,800,000        
Share repurchase program, authorized, amount | $   $ 200,000,000      
Average price per share | $ / shares $ 110.6        
Authorized amount available for future repurchases | $ $ 163,200,000        
Employee Stock Option [Member] | Share-Based Payment Arrangement, Tranche One [Member] | Minimum [Member]          
Equity [Line Items]          
Share-Based Compensation Arrangement by Share-Based Payment Award, Award Vesting Period (Year) 2 years        
Share-Based Compensation Arrangement by Share-Based Payment Award, Award Vesting Rights, Percentage 25.00%        
Employee Stock Option [Member] | Share-Based Payment Arrangement, Tranche One [Member] | Maximum [Member]          
Equity [Line Items]          
Share-Based Compensation Arrangement by Share-Based Payment Award, Award Vesting Period (Year) 4 years        
Share-Based Compensation Arrangement by Share-Based Payment Award, Award Vesting Rights, Percentage 50.00%        
Restricted Stock Units (RSUs) [Member]          
Equity [Line Items]          
Share-Based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Period for Recognition (Year) 1 year 10 months 24 days        
Share-Based Payment Arrangement, Nonvested Award, Excluding Option, Cost Not yet Recognized, Amount | $ $ 37,000,000        
Restricted Stock Units (RSUs) [Member] | Minimum [Member]          
Equity [Line Items]          
Share-Based Compensation Arrangement by Share-Based Payment Award, Award Vesting Period (Year) 1 year        
Restricted Stock Units (RSUs) [Member] | Maximum [Member]          
Equity [Line Items]          
Share-Based Compensation Arrangement by Share-Based Payment Award, Award Vesting Period (Year) 5 years        
Performance Shares [Member]          
Equity [Line Items]          
Share-Based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Period for Recognition (Year) 9 months 18 days        
Share-Based Payment Arrangement, Nonvested Award, Excluding Option, Cost Not yet Recognized, Amount | $ $ 27,700,000        
Predetermined Performance Achievement, Percentage 100.00%        
Performance Shares [Member] | Share-Based Payment Arrangement, Tranche One [Member]          
Equity [Line Items]          
Number of Days, Achievement of Milestone Stock Price | Milestone 30        
Share-based Compensation Arrangement by Share-based Payment Award, Award Service Period (Year) 5 years        
Performance Shares [Member] | Share-Based Payment Arrangement, Tranche Two [Member]          
Equity [Line Items]          
Share-based Compensation Arrangement by Share-based Payment Award, Award Service Period (Year) 3 years        
Employee Stock [Member]          
Equity [Line Items]          
Share-Based Compensation Arrangement by Share-Based Payment Award, Number of Shares Authorized (in shares)         240,000
Share-based Compensation Arrangement by Share-based Payment Award, Shares Available for Issuance, Authorized Annual Increase, Maximum (in shares)         240,000
Equity Incentive Plan 2019 [Member]          
Equity [Line Items]          
Share-Based Compensation Arrangement by Share-Based Payment Award, Number of Shares Authorized (in shares) 4,646,787       2,400,000
Share Based Compensation Arrangement By Share Based Payment Award Percentage, Number of Additional Shares Available for Grant         3.00%