v3.26.1
Revenue (Tables)
6 Months Ended
Jun. 30, 2026
Revenue from Contract with Customer [Abstract]  
Schedule of Sales by Major Product Line
The following table summarizes the Company’s sales by major product and service line for the periods presented:

Three Months Ended
June 30,
Six Months Ended
June 30,
2026202520262025
Rail Products$34,569 $47,570 $75,848 $76,889 
Global Friction Management24,134 20,431 45,841 35,994 
Technology Services and Solutions13,309 7,972 25,099 17,105 
Rail, Technologies, and Services72,012 75,973 146,788 129,988 
Precast Concrete Products47,123 46,174 80,168 74,378 
Steel Products19,415 21,411 32,738 36,984 
Infrastructure Solutions66,538 67,585 112,906 111,362 
Total net sales$138,550 $143,558 $259,694 $241,350 
Schedule of Disaggregation of Revenue
Net sales by the timing of the transfer of goods and services were as follows for the periods presented:

Three Months Ended June 30, 2026
Rail, Technologies, and ServicesInfrastructure SolutionsTotal
Point in time$57,994 $40,843 $98,837 
Over time14,018 25,695 39,713 
Total net sales$72,012 $66,538 $138,550 
Three Months Ended June 30, 2025
Rail, Technologies, and ServicesInfrastructure SolutionsTotal
Point in time$66,173 $41,185 $107,358 
Over time9,800 26,400 36,200 
Total net sales$75,973 $67,585 $143,558 
Six Months Ended June 30, 2026
Rail, Technologies, and ServicesInfrastructure SolutionsTotal
Point in time$121,259 $72,055 $193,314 
Over time25,529 40,851 66,380 
Total net sales$146,788 $112,906 $259,694 
Six Months Ended June 30, 2025
Rail, Technologies, and ServicesInfrastructure SolutionsTotal
Point in time$111,098 $69,812 $180,910 
Over time18,890 41,550 60,440 
Total net sales$129,988 $111,362 $241,350 
Revenue recognized over time was as follows for the periods presented:

Three Months Ended
June 30,
Percentage of Total Net Sales
Three Months Ended June 30,
2026202520262025
Over time input method$11,320 $6,884 8.2 %4.8 %
Over time output method28,393 29,316 20.5 20.4 
Total over time sales$39,713 $36,200 28.7 %25.2 %

Six Months Ended
June 30,
Percentage of Total Net Sales
Six Months Ended June 30,
2026202520262025
Over time input method$21,173 $14,627 8.2 %6.1 %
Over time output method45,207 45,813 17.4 19.0 
Total over time sales$66,380 $60,440 25.6 %25.1 %
Schedule of Contract with Customer, Contract Asset, Contract Liability
The following table sets forth the Company’s contract assets:

Contract Assets
Balance as of December 31, 2025$6,395 
Revenue recognized but not yet billed
1,754 
Transfers from contract asset balance to accounts receivable (4,373)
Balance as of June 30, 2026$3,776 

The following table sets forth the Company’s contract liabilities:
Contract Liabilities
Balance as of December 31, 2025$973 
Revenue recognized from contract liabilities(687)
Increase in billings in excess of cost, excluding revenue recognized 1,443 
Balance as of June 30, 2026
$1,729