v3.26.3
Operating Segments - Schedule of Condensed Consolidated Segment Information (Details) - USD ($)
$ in Thousands
3 Months Ended 9 Months Ended
Sep. 30, 2026
Sep. 30, 2025
Sep. 30, 2026
Sep. 30, 2025
Segment Reporting [Line Items]        
Revenue $ 230,460 $ 184,583 $ 542,776 $ 459,932
Cost of revenue 176,620 139,898 420,473 338,702
Total gross profit 53,840 44,685 122,303 121,230
Selling, general and administrative 34,591 28,330 90,821 81,480
Acquisition-related retention expense and contingent consideration 571 610 950 [1] 1,832 [1]
Amortization of intangibles 3,615 2,400 7,084 6,020
Operating income 15,063 13,345 23,448 31,898
Interest expense (1,243) (1,223) (2,717) (2,312)
Interest income 96 88 112 792
Gain on disposition of property and equipment 129 367 448 1,107
Loss on early debt extinguishment (250) 0 (250) 0
(Loss) gain on change in fair value of interest rate swap (6) (22) 54 (175)
Total other expenses (1,274) (790) (2,353) (588)
Income before income taxes 13,789 12,555 21,095 31,310
Operating Segments | ODR        
Segment Reporting [Line Items]        
Revenue 150,650 141,382 378,875 340,723
Cost of revenue 112,441 105,703 286,922 247,294
Total gross profit 38,209 35,679 91,953 93,429
Operating Segments | GCR        
Segment Reporting [Line Items]        
Revenue 79,810 43,201 163,901 119,209
Cost of revenue 64,179 34,195 133,551 91,408
Total gross profit 15,631 9,006 30,350 27,801
Corporate        
Segment Reporting [Line Items]        
Selling, general and administrative $ 1,600 $ 1,900 $ 5,500 $ 5,200
[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.