XML 43 R31.htm IDEA: XBRL DOCUMENT
v3.26.1

Operating Segments (Tables) | 6 Months Ended
--- | ---
Jun. 30, 2026
Segment Reporting [Abstract] |
Schedule of Condensed Consolidated Segment Information | Condensed consolidated segment information for the three and six months ended June 30, 2026 and 2025 were as follows:
| Three Months Ended June 30, |  | Six Months Ended June 30,
(in thousands) | 2026 |  | 2025 |  | 2026 |  | 2025
Statement of Operations Data: |  |  |  |  |  |  |
Revenue: |  |  |  |  |  |  |
ODR | $ | 128,414 |  |  | $ | 108,948 |  |  | $ | 228,225 |  |  | $ | 199,341 |
GCR | 45,043 |  |  | 33,293 |  |  | 84,091 |  |  | 76,008 |
Total revenue | 173,457 |  |  | 142,241 |  |  | 312,316 |  |  | 275,349 |
Cost of revenue: |  |  |  |  |  |  |
ODR | 97,654 |  |  | 77,359 |  |  | 174,481 |  |  | 141,591 |
GCR | 38,510 |  |  | 25,056 |  |  | 69,372 |  |  | 57,213 |
Total cost of revenue | 136,164 |  |  | 102,415 |  |  | 243,853 |  |  | 198,804 |
Gross profit: |  |  |  |  |  |  |
ODR | 30,760 |  |  | 31,589 |  |  | 53,744 |  |  | 57,750 |
GCR | 6,533 |  |  | 8,237 |  |  | 14,719 |  |  | 18,795 |
Total gross profit | 37,293 |  |  | 39,826 |  |  | 68,463 |  |  | 76,545 |
Selling, general and administrative(1) | 28,116 |  |  | 26,632 |  |  | 56,230 |  |  | 53,150 |
Acquisition-related retention expense and contingent consideration | 230 |  |  | 795 |  |  | 379 |  |  | 1,222 |
Amortization of intangibles | 1,695 |  |  | 1,757 |  |  | 3,469 |  |  | 3,620 |
Operating income | $ | 7,252 |  |  | $ | 10,642 |  |  | $ | 8,385 |  |  | $ | 18,553 |
Other (expenses) income: |  |  |  |  |  |  |
Interest expense | (773) |  |  | (563) |  |  | (1,474) |  |  | (1,089) |
Interest income | 1 |  |  | 334 |  |  | 16 |  |  | 704 |
Gain on disposition of property and equipment | 81 |  |  | 407 |  |  | 319 |  |  | 740 |
Gain (loss) on change in fair value of interest rate swap | 22 |  |  | (56) |  |  | 60 |  |  | (153) |
Total other (expenses) income | (669) |  |  | 122 |  |  | (1,079) |  |  | 202 |
Income before income taxes | $ | 6,583 |  |  | $ | 10,764 |  |  | $ | 7,306 |  |  | $ | 18,755 |
(1) Included within selling, general and administrative expenses was $2.1 million and $1.6 million of non-cash stock-based compensation expense for the three months ended June 30, 2026 and 2025, respectively, and $3.9 million and $3.2 million for the six months ended June 30, 2026 and 2025, respectively.

X
- Definition Tabular disclosure of segment reporting. Includes, but is not limited to, reconciliation of reportable segment amount to corresponding consolidated total. + References Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 31 -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-31 Reference 2: http://www.xbrl.org/2009/role/commonPracticeRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 34 -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-34 Reference 3: http://www.xbrl.org/2009/role/commonPracticeRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 32 -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-32 Reference 4: http://www.xbrl.org/2009/role/commonPracticeRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 30 -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-30 Reference 5: http://www.xbrl.org/2009/role/commonPracticeRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 26C -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-26C Reference 6: http://www.xbrl.org/2009/role/commonPracticeRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 26B -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-26B Reference 7: http://www.xbrl.org/2009/role/commonPracticeRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 26A -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-26A Reference 8: http://www.xbrl.org/2009/role/commonPracticeRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 25 -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-25 Reference 9: http://www.xbrl.org/2009/role/commonPracticeRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 22 -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-22 Reference 10: http://www.xbrl.org/2009/role/commonPracticeRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 15 -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-15 + Details
Name: | us-gaap_ScheduleOfSegmentReportingInformationBySegmentTextBlock
Namespace Prefix: | us-gaap_
Data Type: | dtr-types:textBlockItemType
Balance Type: | na
Period Type: | duration

X
- References No definition available. + Details
Name: | us-gaap_SegmentReportingAbstract
Namespace Prefix: | us-gaap_
Data Type: | xbrli:stringItemType
Balance Type: | na
Period Type: | duration