v3.26.1
Revenue from Contracts with Customers - Schedule of Components of Contract Asset and Liability Balances (Details) - USD ($)
$ in Thousands
3 Months Ended
Mar. 31, 2026
Dec. 31, 2025
Contract assets    
Costs and estimated earnings in excess of billings on uncompleted contracts $ 30,163 $ 29,254
Retainage receivable, net 16,322 16,213
Total contract assets, net 46,485 45,467
Change in costs and estimated earnings in excess of billings on uncompleted contracts 909  
Change in retainage receivable, net 109  
Change in total contract assets, net 1,018  
Contract liabilities    
Billings in excess of costs and estimated earnings on uncompleted contracts, net 18,008 20,889
Provisions for losses 52 47
Total contract liabilities, net 18,060 $ 20,936
Change in billings in excess of costs and estimated earnings on uncompleted contracts, net (2,881)  
Change in provisions for losses 5  
Change in total contract liabilities, net $ (2,876)