XML 35 R29.htm IDEA: XBRL DOCUMENT v3.25.3
Revenue Recognition - Disaggregation of Revenue (Details) - USD ($)
$ in Thousands
3 Months Ended 9 Months Ended
Sep. 30, 2025
Sep. 30, 2024
Sep. 30, 2025
Sep. 30, 2024
Disaggregation of Revenue [Line Items]        
Revenues $ 235,651 $ 208,438 $ 695,957 $ 621,376
Revenue, remaining performance obligation, percentage 100.00% 100.00% 100.00% 100.00%
Revenue recognized over time        
Disaggregation of Revenue [Line Items]        
Revenues $ 24,187 $ 15,846 $ 67,559 $ 42,924
Revenue recognized over time | Service Concentration Risk | Revenue Benchmark        
Disaggregation of Revenue [Line Items]        
Revenue, remaining performance obligation, percentage 10.30% 7.60% 9.70% 6.90%
Revenue recognized at a point in time        
Disaggregation of Revenue [Line Items]        
Revenues $ 211,464 $ 192,592 $ 628,398 $ 578,452
Revenue recognized at a point in time | Product Concentration Risk | Revenue Benchmark        
Disaggregation of Revenue [Line Items]        
Revenue, remaining performance obligation, percentage 89.70% 92.40% 90.30% 93.10%
United States        
Disaggregation of Revenue [Line Items]        
Revenues $ 210,714 $ 188,130 $ 627,039 $ 559,283
Asia        
Disaggregation of Revenue [Line Items]        
Revenues 3,835 3,197 11,040 8,845
Canada        
Disaggregation of Revenue [Line Items]        
Revenues 4,542 3,047 12,635 8,240
Europe        
Disaggregation of Revenue [Line Items]        
Revenues 11,550 9,653 32,376 28,472
Mexico        
Disaggregation of Revenue [Line Items]        
Revenues 679 478 1,750 2,530
Middle East        
Disaggregation of Revenue [Line Items]        
Revenues 3,361 3,437 8,476 12,511
Other        
Disaggregation of Revenue [Line Items]        
Revenues $ 970 $ 496 $ 2,641 $ 1,495