v3.26.3
Fair Value Measurements - Narrative (Details)
$ in Thousands
1 Months Ended 3 Months Ended 9 Months Ended
Sep. 01, 2026
payment
Apr. 30, 2026
USD ($)
Feb. 28, 2026
USD ($)
Jan. 31, 2026
USD ($)
Feb. 28, 2025
USD ($)
Sep. 30, 2026
USD ($)
Sep. 30, 2025
USD ($)
Sep. 30, 2026
USD ($)
payment
Sep. 30, 2025
USD ($)
Dec. 31, 2025
USD ($)
Dec. 31, 2024
USD ($)
Sep. 30, 2024
USD ($)
Nov. 30, 2023
USD ($)
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Interest income           $ 96 $ 88 $ 112 $ 792        
Acquisition-related retention expense and contingent consideration           571 610 950 [1] 1,832 [1]        
Interest Rate Swap                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Gain (loss) on change in fair value of interest rate swap           (100) (100) 100 (200)        
Balance Sheet Location [Axis]: us-gaap:OtherAssetsNoncurrent                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Fair value of the interest rate swap                   $ 100      
Industrial Air Transaction                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Contingent consideration, liability           6,500   6,500         $ 3,200
Business combination, payment for contingent consideration liability     $ 3,500   $ 3,000                
Industrial Air Transaction | Earn Out Payment One                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Contingent consideration, liability           3,000   $ 3,000          
Number of earnout tranches | payment               2          
Earnout period               12 months          
Industrial Air Transaction | Earn Out Payment One | Maximum                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Gross profits from acquired companies               $ 7,600          
Industrial Air Transaction | Earn Out Payment Two                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Contingent consideration, liability           3,500   $ 3,500          
Earnout period               12 months          
Industrial Air Transaction | Earn Out Payment Two | Maximum                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Gross profits from acquired companies               $ 8,800          
Kent Island                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Contingent consideration, liability           5,000   5,000       $ 4,400  
Business combination, payment for contingent consideration liability       $ 2,500                  
Kent Island | Earn Out Payment One                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Contingent consideration, liability           2,500   $ 2,500          
Number of earnout tranches | payment               2          
Earnout period               12 months          
Kent Island | Earn Out Payment One | Maximum                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Gross profits from acquired companies               $ 3,300          
Kent Island | Earn Out Payment Two                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Earnout period               12 months          
Kent Island | Earn Out Payment Two | Maximum                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Gross profits from acquired companies               $ 200          
Consolidated Mechanical                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Contingent consideration, liability           2,000   2,000     $ 800    
Business combination, payment for contingent consideration liability   $ 900                      
Consolidated Mechanical | Earn Out Payment One                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Contingent consideration, liability           1,000   $ 1,000          
Number of earnout tranches | payment               2          
Earnout period               12 months          
Consolidated Mechanical | Earn Out Payment One | Maximum                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Gross profits from acquired companies               $ 6,800          
Consolidated Mechanical | Earn Out Payment Two                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Earnout period               12 months          
Consolidated Mechanical | Earn Out Payment Two | Maximum                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Gross profits from acquired companies               $ 6,800          
1901 Transaction                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Contingent consideration, liability           6,000   $ 6,000          
Number of earnout tranches | payment 2             2          
1901 Transaction | Initially Recognized                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Contingent consideration, liability           4,800   $ 4,800          
1901 Transaction | Earn Out Payment One                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Contingent consideration, liability           3,000   3,000          
1901 Transaction | Earn Out Payment Two                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Contingent consideration, liability           3,000   3,000          
Jake Marshall Transaction                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Acquisition-related retention expense and contingent consideration           200 300 300 1,500        
Level 1                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Interest income           100 $ 100 100 $ 800        
Level 3 | Revolving Credit Facility | PNC Revolving Credit Facility                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Fair value of debt           75,000   75,000          
Level 3 | Term Loan | PNC Term Loan Facility                          
Fair Value, Assets and Liabilities Measured on Recurring and Nonrecurring Basis [Line Items]                          
Fair value of debt           $ 50,000   $ 50,000          
[1] Certain prior-period operating cash flow amounts have been reclassified to conform to the current-period presentation, including the net presentation of changes in contract assets and contract liabilities and the presentation of acquisition-related retention expense and contingent consideration. These reclassifications had no impact on net cash provided by operating activities.
The Company refined the presentation of contract-related balances within operating activities by presenting changes in contract assets and contract liabilities on a net basis, rather than as separate line items, to align with the presentation of net contract positions.