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
|