CONDENSED CONSOLIDATED STATEMENTS OF CHANGES IN REDEEMABLE NON-CONTROLLING INTERESTS AND STOCKHOLDERS’ EQUITY - USD ($)  $ in Thousands  | 
Total  | 
Class A Common Stock  | 
Class B Common Stock  | 
 Common Stock  
Class A Common Stock 
 | 
 Common Stock  
Class B Common Stock 
 | 
Additional Paid-in Capital  | 
Retained Earnings  | 
Accumulated Other Comprehensive (Loss) Income  | 
Treasury Stock  | 
Non-controlling Interests (“NCI”)  | 
| Redeemable non-controlling interests, beginning balance at Dec. 31, 2023 | 
$ 46,865
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Redeemable Non-controlling Interests (“RNCI”) | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Distributions to RNCI | 
(287)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Accretion of tax equity financing fees | 
54
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Net (loss) income | 
(2,855)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Redeemable non-controlling interests, ending balance at Jun. 30, 2024 | 
43,777
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Beginning balance (in shares) at Dec. 31, 2023 | 
 
 | 
 
 | 
 
 | 
34,277,195
 | 
18,000,000
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Treasury stock, beginning balance (in shares) at Dec. 31, 2023 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2,101,795
 | 
 
 | 
| Beginning balance at Dec. 31, 2023 | 
925,886
 | 
 
 | 
 
 | 
$ 3
 | 
$ 2
 | 
$ 320,892
 | 
$ 595,911
 | 
$ (3,045)
 | 
$ (11,788)
 | 
$ 23,911
 | 
| Increase (Decrease) in Stockholders' Equity [Roll Forward] | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Exercise of stock options (in shares) | 
 
 | 
 
 | 
 
 | 
62,589
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Exercise of stock options | 
504
 | 
 
 | 
 
 | 
 
 | 
 
 | 
504
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Stock-based compensation expense | 
6,704
 | 
 
 | 
 
 | 
 
 | 
 
 | 
6,704
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Employee stock purchase plan (in shares) | 
 
 | 
 
 | 
 
 | 
32,841
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Employee stock purchase plan | 
990
 | 
 
 | 
 
 | 
 
 | 
 
 | 
990
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Restricted stock units released (in shares) | 
 
 | 
 
 | 
 
 | 
29,890
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Unrealized gain (loss) from interest rate hedges, net | 
614
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
614
 | 
 
 | 
 
 | 
| Foreign currency translation adjustment | 
(1,351)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
(1,369)
 | 
 
 | 
18
 | 
| Accretion of tax equity financing fees | 
(54)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
(54)
 | 
 
 | 
 
 | 
 
 | 
| Contributions from NCI | 
30,792
 | 
 
 | 
 
 | 
 
 | 
 
 | 
3,040
 | 
 
 | 
 
 | 
 
 | 
27,752
 | 
| Distributions to NCI | 
(1,004)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
(1,004)
 | 
| Purchase of shares from NCI | 
(23,760)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
226
 | 
 
 | 
 
 | 
 
 | 
(23,986)
 | 
| Net (loss) income | 
1,871
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2,073
 | 
 
 | 
 
 | 
(202)
 | 
| Ending balance (in shares) at Jun. 30, 2024 | 
 
 | 
 
 | 
 
 | 
34,402,515
 | 
18,000,000
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Treasury stock, ending balance (in shares) at Jun. 30, 2024 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2,101,795
 | 
 
 | 
| Ending balance at Jun. 30, 2024 | 
941,192
 | 
 
 | 
 
 | 
$ 3
 | 
$ 2
 | 
332,356
 | 
597,930
 | 
(3,800)
 | 
$ (11,788)
 | 
26,489
 | 
| Redeemable non-controlling interests, beginning balance at Mar. 31, 2024 | 
43,908
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Redeemable Non-controlling Interests (“RNCI”) | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Distributions to RNCI | 
(158)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Accretion of tax equity financing fees | 
27
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Net (loss) income | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Redeemable non-controlling interests, ending balance at Jun. 30, 2024 | 
43,777
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Beginning balance (in shares) at Mar. 31, 2024 | 
 
 | 
 
 | 
 
 | 
34,320,161
 | 
18,000,000
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Treasury stock, beginning balance (in shares) at Mar. 31, 2024 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2,101,795
 | 
 
 | 
| Beginning balance at Mar. 31, 2024 | 
930,163
 | 
 
 | 
 
 | 
$ 3
 | 
$ 2
 | 
327,367
 | 
592,947
 | 
(3,592)
 | 
$ (11,788)
 | 
25,224
 | 
| Increase (Decrease) in Stockholders' Equity [Roll Forward] | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Exercise of stock options (in shares) | 
 
 | 
 
 | 
 
 | 
30,700
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Exercise of stock options | 
321
 | 
 
 | 
 
 | 
 
 | 
 
 | 
321
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Stock-based compensation expense | 
3,678
 | 
 
 | 
 
 | 
 
 | 
 
 | 
3,678
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Employee stock purchase plan (in shares) | 
 
 | 
 
 | 
 
 | 
32,841
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Employee stock purchase plan | 
990
 | 
 
 | 
 
 | 
 
 | 
 
 | 
990
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Restricted stock units released (in shares) | 
 
 | 
 
 | 
 
 | 
18,813
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Unrealized gain (loss) from interest rate hedges, net | 
75
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
75
 | 
 
 | 
 
 | 
| Foreign currency translation adjustment | 
(189)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
(283)
 | 
 
 | 
94
 | 
| Accretion of tax equity financing fees | 
(27)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
(27)
 | 
 
 | 
 
 | 
 
 | 
| Contributions from NCI | 
1,928
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 
 | 
 
 | 
 
 | 
1,928
 | 
| Distributions to NCI | 
(941)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
(941)
 | 
| Net (loss) income | 
5,194
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5,010
 | 
 
 | 
 
 | 
184
 | 
| Ending balance (in shares) at Jun. 30, 2024 | 
 
 | 
 
 | 
 
 | 
34,402,515
 | 
18,000,000
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Treasury stock, ending balance (in shares) at Jun. 30, 2024 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2,101,795
 | 
 
 | 
| Ending balance at Jun. 30, 2024 | 
941,192
 | 
 
 | 
 
 | 
$ 3
 | 
$ 2
 | 
332,356
 | 
597,930
 | 
(3,800)
 | 
$ (11,788)
 | 
26,489
 | 
| Redeemable non-controlling interests, beginning balance at Dec. 31, 2024 | 
2,463
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Redeemable Non-controlling Interests (“RNCI”) | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Accretion of tax equity financing fees | 
54
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Net (loss) income | 
(974)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Redeemable non-controlling interests, ending balance at Jun. 30, 2025 | 
$ 1,543
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Beginning balance (in shares) at Dec. 31, 2024 | 
 
 | 
34,501,213
 | 
18,000,000
 | 
34,501,213
 | 
18,000,000
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Treasury stock, beginning balance (in shares) at Dec. 31, 2024 | 
2,101,835
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2,101,835
 | 
 
 | 
| Beginning balance at Dec. 31, 2024 | 
$ 1,045,149
 | 
 
 | 
 
 | 
$ 3
 | 
$ 2
 | 
378,321
 | 
652,561
 | 
(5,874)
 | 
$ (11,788)
 | 
31,924
 | 
| Increase (Decrease) in Stockholders' Equity [Roll Forward] | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Exercise of stock options (in shares) | 
 
 | 
 
 | 
 
 | 
80,178
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Exercise of stock options | 
503
 | 
 
 | 
 
 | 
 
 | 
 
 | 
503
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Stock-based compensation expense | 
6,595
 | 
 
 | 
 
 | 
 
 | 
 
 | 
6,595
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Employee stock purchase plan (in shares) | 
 
 | 
 
 | 
 
 | 
60,762
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Employee stock purchase plan | 
795
 | 
 
 | 
 
 | 
 
 | 
 
 | 
795
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Restricted stock units released (in shares) | 
 
 | 
 
 | 
 
 | 
61,506
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 
 | 
| Unrealized gain (loss) from interest rate hedges, net | 
(630)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
(630)
 | 
 
 | 
 
 | 
| Foreign currency translation adjustment | 
6,679
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
6,744
 | 
 
 | 
(65)
 | 
| Accretion of tax equity financing fees | 
(54)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
(54)
 | 
 
 | 
 
 | 
 
 | 
| Contributions from NCI | 
3,799
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 
 | 
 
 | 
 
 | 
3,799
 | 
| Distributions to NCI | 
(2,851)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
(2,851)
 | 
| Net (loss) income | 
$ 10,886
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
7,381
 | 
 
 | 
 
 | 
3,505
 | 
| Ending balance (in shares) at Jun. 30, 2025 | 
 
 | 
34,703,659
 | 
18,000,000
 | 
34,703,659
 | 
18,000,000
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Treasury stock, ending balance (in shares) at Jun. 30, 2025 | 
2,101,835
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2,101,835
 | 
 
 | 
| Ending balance at Jun. 30, 2025 | 
$ 1,070,871
 | 
 
 | 
 
 | 
$ 3
 | 
$ 2
 | 
386,214
 | 
659,888
 | 
240
 | 
$ (11,788)
 | 
36,312
 | 
| Redeemable non-controlling interests, beginning balance at Mar. 31, 2025 | 
1,966
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Redeemable Non-controlling Interests (“RNCI”) | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Accretion of tax equity financing fees | 
27
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Net (loss) income | 
(450)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Redeemable non-controlling interests, ending balance at Jun. 30, 2025 | 
1,543
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Beginning balance (in shares) at Mar. 31, 2025 | 
 
 | 
 
 | 
 
 | 
34,603,581
 | 
18,000,000
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Treasury stock, beginning balance (in shares) at Mar. 31, 2025 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2,101,835
 | 
 
 | 
| Beginning balance at Mar. 31, 2025 | 
1,046,078
 | 
 
 | 
 
 | 
$ 3
 | 
$ 2
 | 
381,595
 | 
647,051
 | 
(4,935)
 | 
$ (11,788)
 | 
34,150
 | 
| Increase (Decrease) in Stockholders' Equity [Roll Forward] | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Exercise of stock options (in shares) | 
 
 | 
 
 | 
 
 | 
10,000
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Exercise of stock options | 
74
 | 
 
 | 
 
 | 
 
 | 
 
 | 
74
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Stock-based compensation expense | 
3,750
 | 
 
 | 
 
 | 
 
 | 
 
 | 
3,750
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Employee stock purchase plan (in shares) | 
 
 | 
 
 | 
 
 | 
60,762
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Employee stock purchase plan | 
795
 | 
 
 | 
 
 | 
 
 | 
 
 | 
795
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Restricted stock units released (in shares) | 
 
 | 
 
 | 
 
 | 
29,316
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Unrealized gain (loss) from interest rate hedges, net | 
(128)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
(128)
 | 
 
 | 
 
 | 
| Foreign currency translation adjustment | 
5,272
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5,303
 | 
 
 | 
(31)
 | 
| Accretion of tax equity financing fees | 
(27)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
(27)
 | 
 
 | 
 
 | 
 
 | 
| Contributions from NCI | 
938
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
938
 | 
| Distributions to NCI | 
(1,849)
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
(1,849)
 | 
| Net (loss) income | 
$ 15,968
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
12,864
 | 
 
 | 
 
 | 
3,104
 | 
| Ending balance (in shares) at Jun. 30, 2025 | 
 
 | 
34,703,659
 | 
18,000,000
 | 
34,703,659
 | 
18,000,000
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
| Treasury stock, ending balance (in shares) at Jun. 30, 2025 | 
2,101,835
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2,101,835
 | 
 
 | 
| Ending balance at Jun. 30, 2025 | 
$ 1,070,871
 | 
 
 | 
 
 | 
$ 3
 | 
$ 2
 | 
$ 386,214
 | 
$ 659,888
 | 
$ 240
 | 
$ (11,788)
 | 
$ 36,312
 |