v3.25.2
Revenue Recognition - Disaggregation of Revenue (Details) - USD ($)
$ in Thousands
3 Months Ended 6 Months Ended
Jun. 30, 2025
Jun. 30, 2024
Jun. 30, 2025
Jun. 30, 2024
Disaggregation of Revenue [Line Items]        
Revenues $ 238,095 $ 216,658 $ 460,306 $ 412,938
Revenue, remaining performance obligation, percentage 100.00% 100.00% 100.00% 100.00%
Revenue recognized over time        
Disaggregation of Revenue [Line Items]        
Revenues $ 23,086 $ 14,345 $ 43,372 $ 27,078
Revenue recognized over time | Service Concentration Risk | Revenue Benchmark        
Disaggregation of Revenue [Line Items]        
Revenue, remaining performance obligation, percentage 9.70% 6.60% 9.40% 6.60%
Revenue recognized at a point in time        
Disaggregation of Revenue [Line Items]        
Revenues $ 215,009 $ 202,313 $ 416,934 $ 385,860
Revenue recognized at a point in time | Product Concentration Risk | Revenue Benchmark        
Disaggregation of Revenue [Line Items]        
Revenue, remaining performance obligation, percentage 90.30% 93.40% 90.60% 93.40%
United States        
Disaggregation of Revenue [Line Items]        
Revenues $ 214,350 $ 193,963 $ 416,325 $ 371,153
Asia        
Disaggregation of Revenue [Line Items]        
Revenues 4,083 2,735 7,205 5,648
Canada        
Disaggregation of Revenue [Line Items]        
Revenues 4,147 3,015 8,093 5,193
Europe        
Disaggregation of Revenue [Line Items]        
Revenues 11,278 9,410 20,826 18,819
Mexico        
Disaggregation of Revenue [Line Items]        
Revenues 594 1,431 1,071 2,052
Middle East        
Disaggregation of Revenue [Line Items]        
Revenues 2,649 5,463 5,115 9,074
Other        
Disaggregation of Revenue [Line Items]        
Revenues $ 994 $ 641 $ 1,671 $ 999