| Note 12 - Share-based Compensation - Stock Option Activity (Details) - USD ($) $ / shares in Units, $ in Thousands | 3 Months Ended | |
|---|---|---|
| Mar. 31, 2025 | Dec. 31, 2024 | |
| Exercised, options (in shares) | (37,000) | |
| Share-Based Payment Arrangement, Option [Member] | ||
| Balance, outstanding (in shares) | 4,692,438 | |
| outstanding, weighted average exercise price (in dollars per share) | $ 3.33 | |
| Balance, aggregate intrinsic value | $ 3,517 | $ 10,243 | 
| Granted, options (in shares) | 453,529 | |
| Granted, weighted average exercise price (in dollars per share) | $ 5.69 | |
| Forfeitures, options (in shares) | (57,625) | |
| Forfeitures, weighted average exercise price (in dollars per share) | $ 2.46 | |
| Exercised, options (in shares) | (37,000) | |
| Exercised, weighted average exercise price (in dollars per share) | $ 2.52 | |
| Balance, outstanding (in shares) | 5,051,342 | |
| outstanding, weighted average exercise price (in dollars per share) | $ 3.56 | 
| X | ||||||||||
| 
- Definition The number of shares under options that were cancelled during the reporting period as a result of occurrence of a terminating event specified in contractual agreements pertaining to the stock option plan. Reference 1: http://www.xbrl.org/2003/role/disclosureRef 
 | 
| X | ||||||||||
| 
- Definition Gross number of share options (or share units) granted during the period. Reference 1: http://www.xbrl.org/2003/role/disclosureRef 
 | 
| X | ||||||||||
| 
- Definition Amount by which the current fair value of the underlying stock exceeds the exercise price of options outstanding. Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef 
 | 
| X | ||||||||||
| 
- Definition Number of options outstanding, including both vested and non-vested options. Reference 1: http://www.xbrl.org/2003/role/disclosureRef 
 | 
| X | ||||||||||
| 
- Definition Weighted average price at which grantees can acquire the shares reserved for issuance under the stock option plan. Reference 1: http://www.xbrl.org/2003/role/disclosureRef 
 | 
| X | ||||||||||
| 
- Definition Weighted average price at which option holders acquired shares when converting their stock options into shares. Reference 1: http://www.xbrl.org/2003/role/disclosureRef 
 | 
| X | ||||||||||
| 
- Definition Weighted average price at which grantees could have acquired the underlying shares with respect to stock options that were terminated. Reference 1: http://www.xbrl.org/2003/role/disclosureRef 
 | 
| X | ||||||||||
| 
- Definition Weighted average per share amount at which grantees can acquire shares of common stock by exercise of options. Reference 1: http://www.xbrl.org/2003/role/disclosureRef 
 | 
| X | ||||||||||
| 
- Definition Number of share options (or share units) exercised during the current period. Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef 
 | 
| X | ||||||||||
| 
- Details 
 |