v3.26.1
Revenue from Contracts with Customers - Schedule of the Disaggregation of Revenue (Details) - USD ($)
$ in Thousands
3 Months Ended
Mar. 31, 2026
Mar. 31, 2025
Disaggregation of Revenue [Line Items]    
Operating revenues $ 1,036,953 $ 826,629
Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 1,039,587 833,242
Eliminations    
Disaggregation of Revenue [Line Items]    
Operating revenues (2,634) (6,613)
Fixed-price | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 534,544 444,169
Cost reimbursable | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 459,032 348,869
Unit-price | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 46,011 40,204
E&M    
Disaggregation of Revenue [Line Items]    
Operating revenues 835,091 643,991
E&M | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 835,124 648,227
E&M | Eliminations    
Disaggregation of Revenue [Line Items]    
Operating revenues (33) (4,236)
E&M | Commercial | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 654,821 419,312
E&M | Institutional | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 61,742 103,328
E&M | Industrial | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 78,367 86,363
E&M | Service & other | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 24,650 26,447
E&M | Renewables | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 15,544 12,777
E&M | Fixed-price | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 430,271 350,566
E&M | Cost reimbursable | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 393,476 285,886
E&M | Unit-price | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 11,377 11,775
T&D    
Disaggregation of Revenue [Line Items]    
Operating revenues 201,862 182,638
T&D | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 204,463 185,015
T&D | Eliminations    
Disaggregation of Revenue [Line Items]    
Operating revenues (2,601) (2,377)
T&D | Utility | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 184,327 165,054
T&D | Transportation | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 20,136 19,961
T&D | Fixed-price | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 104,273 93,603
T&D | Cost reimbursable | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues 65,556 62,983
T&D | Unit-price | Operating segments    
Disaggregation of Revenue [Line Items]    
Operating revenues $ 34,634 $ 28,429