v3.26.1
Revenue from Contracts with Customers - Schedule of Components of Contract Asset and Liability Balances (Details) - USD ($)
$ in Thousands
6 Months Ended
Jun. 30, 2026
Dec. 31, 2025
Contract assets    
Costs and estimated earnings in excess of billings on uncompleted contracts $ 27,399 $ 29,254
Retainage receivable, net 14,188 16,213
Total contract assets, net 41,587 45,467
Change in costs and estimated earnings in excess of billings on uncompleted contracts (1,855)  
Change in retainage receivable, net (2,025)  
Change in total contract assets, net (3,880)  
Contract liabilities    
Billings in excess of costs and estimated earnings on uncompleted contracts, net 34,895 20,889
Provisions for losses 232 47
Total contract liabilities, net 35,127 $ 20,936
Change in billings in excess of costs and estimated earnings on uncompleted contracts, net 14,006  
Change in provisions for losses 185  
Change in total contract liabilities, net $ 14,191