v3.26.1
Revenue from Contracts with Customers - Schedule of the Disaggregation of Revenue (Details) - USD ($)
$ in Thousands
3 Months Ended 6 Months Ended
Jun. 30, 2026
Jun. 30, 2025
Jun. 30, 2026
Jun. 30, 2025
Disaggregation of Revenue [Line Items]        
Operating revenues $ 1,231,547 $ 921,466 $ 2,268,500 $ 1,748,095
Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 1,237,722 925,984 2,277,309 1,759,226
Eliminations        
Disaggregation of Revenue [Line Items]        
Operating revenues (6,175) (4,518) (8,809) (11,131)
Fixed-price | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 630,211 493,189 1,164,755 937,358
Cost reimbursable | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 554,311 389,783 1,013,343 738,652
Unit-price | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 53,200 43,012 99,211 83,216
E&M        
Disaggregation of Revenue [Line Items]        
Operating revenues 1,010,236 711,614 1,845,327 1,355,605
E&M | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 1,010,325 713,600 1,845,449 1,361,827
E&M | Eliminations        
Disaggregation of Revenue [Line Items]        
Operating revenues (89) (1,986) (122) (6,222)
E&M | Commercial | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 753,154 507,717 1,407,975 927,029
E&M | Industrial | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 147,722 77,325 226,089 163,688
E&M | Institutional | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 72,893 92,333 134,635 195,661
E&M | Service & other | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 29,105 25,650 53,755 52,097
E&M | Renewables | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 7,451 10,575 22,995 23,352
E&M | Fixed-price | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 522,130 379,415 952,401 729,981
E&M | Cost reimbursable | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 476,770 323,862 870,246 609,748
E&M | Unit-price | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 11,425 10,323 22,802 22,098
T&D        
Disaggregation of Revenue [Line Items]        
Operating revenues 221,311 209,852 423,173 392,490
T&D | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 227,397 212,384 431,860 397,399
T&D | Eliminations        
Disaggregation of Revenue [Line Items]        
Operating revenues (6,086) (2,532) (8,687) (4,909)
T&D | Utility | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 204,501 184,446 388,828 349,500
T&D | Transportation | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 22,896 27,938 43,032 47,899
T&D | Fixed-price | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 108,081 113,774 212,354 207,377
T&D | Cost reimbursable | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues 77,541 65,921 143,097 128,904
T&D | Unit-price | Operating segments        
Disaggregation of Revenue [Line Items]        
Operating revenues $ 41,775 $ 32,689 $ 76,409 $ 61,118