| 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 | Treasury Stock | Non-controlling Interest | 
| Redeemable non-controlling interests, beginning balance at Dec. 31, 2020 | $ 38,850 |  |  |  |  |  |  |  |  |  | 
| Increase (Decrease) in Temporary Equity [Roll Forward] |  |  |  |  |  |  |  |  |  |  | 
| Contributions from non-controlling interest | 2,251 |  |  |  |  |  |  |  |  |  | 
| Distributions to redeemable non-controlling interests | (828) |  |  |  |  |  |  |  |  |  | 
| Accretion of tax equity financing fees | 89 |  |  |  |  |  |  |  |  |  | 
| Investment fund call option exercise | (3,759) |  |  |  |  |  |  |  |  |  | 
| Net income | 8,345 |  |  |  |  |  |  |  |  |  | 
| Redeemable non-controlling interests, ending balance at Sep. 30, 2021 | 44,948 |  |  |  |  |  |  |  |  |  | 
| Beginning balance (in shares) at Dec. 31, 2020 |  |  |  | 30,224,654 | 18,000,000 |  |  |  |  |  | 
| Treasury stock, beginning balance (in shares) at Dec. 31, 2020 |  |  |  |  |  |  |  |  | 2,101,795 |  | 
| Beginning balance at Dec. 31, 2020 | 492,813 |  |  | $ 3 | $ 2 | $ 145,496 | $ 368,390 | $ (9,290) | $ (11,788) | $ 0 | 
| Increase (Decrease) in Stockholders' Equity [Roll Forward] |  |  |  |  |  |  |  |  |  |  | 
| Equity offering cost adjustment (in shares) |  |  |  | 2,875,000 |  |  |  |  |  |  | 
| Equity offering cost adjustment | 120,084 |  |  |  |  | 120,084 |  |  |  |  | 
| Exercise of stock options (in shares) |  |  |  | 444,509 |  |  |  |  |  |  | 
| Exercise of stock options | 4,230 |  |  |  |  | 4,230 |  |  |  |  | 
| Stock-based compensation expense | 4,280 |  |  |  |  | 4,280 |  |  |  |  | 
| Employee stock purchase plan (in shares) |  |  |  | 15,297 |  |  |  |  |  |  | 
| Employee stock purchase plan | 653 |  |  |  |  | 653 |  |  |  |  | 
| Unrealized gain from interest rate hedges, net | 2,081 |  |  |  |  |  |  | 2,081 |  |  | 
| Foreign currency translation adjustment | (227) |  |  |  |  |  |  | (227) |  |  | 
| Accretion of tax equity financing fees | (89) |  |  |  |  |  | (89) |  |  |  | 
| Investment fund call option exercise | 2,759 |  |  |  |  | 2,759 |  |  |  |  | 
| Net income | 42,252 |  |  |  |  |  | 42,252 |  |  |  | 
| Ending balance (in shares) at Sep. 30, 2021 |  |  |  | 33,559,460 | 18,000,000 |  |  |  |  |  | 
| Treasury stock, ending balance (in shares) at Sep. 30, 2021 |  |  |  |  |  |  |  |  | 2,101,795 |  | 
| Ending balance at Sep. 30, 2021 | 668,836 |  |  | $ 3 | $ 2 | 277,502 | 410,553 | (7,436) | $ (11,788) | 0 | 
| Redeemable non-controlling interests, beginning balance at Jun. 30, 2021 | 46,003 |  |  |  |  |  |  |  |  |  | 
| Increase (Decrease) in Temporary Equity [Roll Forward] |  |  |  |  |  |  |  |  |  |  | 
| Distributions to redeemable non-controlling interests | (180) |  |  |  |  |  |  |  |  |  | 
| Accretion of tax equity financing fees | 27 |  |  |  |  |  |  |  |  |  | 
| Investment fund call option exercise | (3,759) |  |  |  |  |  |  |  |  |  | 
| Net income | 2,857 |  |  |  |  |  |  |  |  |  | 
| Redeemable non-controlling interests, ending balance at Sep. 30, 2021 | 44,948 |  |  |  |  |  |  |  |  |  | 
| Beginning balance (in shares) at Jun. 30, 2021 |  |  |  | 33,382,331 | 18,000,000 |  |  |  |  |  | 
| Treasury stock, beginning balance (in shares) at Jun. 30, 2021 |  |  |  |  |  |  |  |  | 2,101,795 |  | 
| Beginning balance at Jun. 30, 2021 | 645,575 |  |  | $ 3 | $ 2 | 270,955 | 393,157 | (6,754) | $ (11,788) | 0 | 
| Increase (Decrease) in Stockholders' Equity [Roll Forward] |  |  |  |  |  |  |  |  |  |  | 
| Equity offering cost adjustment | 3 |  |  |  |  | 3 |  |  |  |  | 
| Exercise of stock options (in shares) |  |  |  | 177,129 |  |  |  |  |  |  | 
| Exercise of stock options | 1,619 |  |  |  |  | 1,619 |  |  |  |  | 
| Stock-based compensation expense | 2,166 |  |  |  |  | 2,166 |  |  |  |  | 
| Unrealized gain from interest rate hedges, net | 436 |  |  |  |  |  |  | 436 |  |  | 
| Foreign currency translation adjustment | (1,118) |  |  |  |  |  |  | (1,118) |  |  | 
| Accretion of tax equity financing fees | (27) |  |  |  |  |  | (27) |  |  |  | 
| Investment fund call option exercise | 2,759 |  |  |  |  | 2,759 |  |  |  |  | 
| Net income | 17,423 |  |  |  |  |  | 17,423 |  |  |  | 
| Ending balance (in shares) at Sep. 30, 2021 |  |  |  | 33,559,460 | 18,000,000 |  |  |  |  |  | 
| Treasury stock, ending balance (in shares) at Sep. 30, 2021 |  |  |  |  |  |  |  |  | 2,101,795 |  | 
| Ending balance at Sep. 30, 2021 | 668,836 |  |  | $ 3 | $ 2 | 277,502 | 410,553 | (7,436) | $ (11,788) | 0 | 
| Redeemable non-controlling interests, beginning balance at Dec. 31, 2021 | 46,182 |  |  |  |  |  |  |  |  |  | 
| Increase (Decrease) in Temporary Equity [Roll Forward] |  |  |  |  |  |  |  |  |  |  | 
| Contributions from non-controlling interest | 16,844 |  |  |  |  |  |  |  |  | 16,844 | 
| Distributions to redeemable non-controlling interests | (863) |  |  |  |  |  |  |  |  |  | 
| Accretion of tax equity financing fees | 81 |  |  |  |  |  |  |  |  |  | 
| Investment fund call option exercise | (238) |  |  |  |  |  |  |  |  |  | 
| Net income | 2,915 |  |  |  |  |  |  |  |  |  | 
| Redeemable non-controlling interests, ending balance at Sep. 30, 2022 | $ 48,077 |  |  |  |  |  |  |  |  |  | 
| Beginning balance (in shares) at Dec. 31, 2021 |  | 33,716,309 | 18,000,000 | 33,716,309 | 18,000,000 |  |  |  |  |  | 
| Treasury stock, beginning balance (in shares) at Dec. 31, 2021 | 2,101,795 |  |  |  |  |  |  |  | 2,101,795 |  | 
| Beginning balance at Dec. 31, 2021 | $ 704,264 |  |  | $ 3 | $ 2 | 283,982 | 438,732 | (6,667) | $ (11,788) | 0 | 
| Increase (Decrease) in Stockholders' Equity [Roll Forward] |  |  |  |  |  |  |  |  |  |  | 
| Exercise of stock options (in shares) |  |  |  | 180,888 |  |  |  |  |  |  | 
| Exercise of stock options | 3,482 |  |  |  |  | 3,482 |  |  |  |  | 
| Stock-based compensation expense | 10,837 |  |  |  |  | 10,837 |  |  |  |  | 
| Employee stock purchase plan (in shares) |  |  |  | 16,996 |  |  |  |  |  |  | 
| Employee stock purchase plan | 948 |  |  |  |  | 948 |  |  |  |  | 
| Unrealized gain from interest rate hedges, net | 6,033 |  |  |  |  |  |  | 6,033 |  |  | 
| Foreign currency translation adjustment | (5,016) |  |  |  |  |  |  | (5,016) |  |  | 
| Accretion of tax equity financing fees | (81) |  |  |  |  |  | (81) |  |  |  | 
| Investment fund call option exercise | 238 |  |  |  |  | 238 |  |  |  |  | 
| Net income | $ 76,991 |  |  |  |  |  | 76,991 |  |  |  | 
| Ending balance (in shares) at Sep. 30, 2022 |  | 33,914,193 | 18,000,000 | 33,914,193 | 18,000,000 |  |  |  |  |  | 
| Treasury stock, ending balance (in shares) at Sep. 30, 2022 | 2,101,795 |  |  |  |  |  |  |  | 2,101,795 |  | 
| Ending balance at Sep. 30, 2022 | $ 814,540 |  |  | $ 3 | $ 2 | 299,487 | 515,642 | (5,650) | $ (11,788) | 16,844 | 
| Redeemable non-controlling interests, beginning balance at Jun. 30, 2022 | 47,918 |  |  |  |  |  |  |  |  |  | 
| Increase (Decrease) in Temporary Equity [Roll Forward] |  |  |  |  |  |  |  |  |  |  | 
| Contributions from non-controlling interest | 1,658 |  |  |  |  |  |  |  |  | 1,658 | 
| Distributions to redeemable non-controlling interests | (212) |  |  |  |  |  |  |  |  |  | 
| Accretion of tax equity financing fees | 27 |  |  |  |  |  |  |  |  |  | 
| Net income | 344 |  |  |  |  |  |  |  |  |  | 
| Redeemable non-controlling interests, ending balance at Sep. 30, 2022 | 48,077 |  |  |  |  |  |  |  |  |  | 
| Beginning balance (in shares) at Jun. 30, 2022 |  |  |  | 33,833,893 | 18,000,000 |  |  |  |  |  | 
| Treasury stock, beginning balance (in shares) at Jun. 30, 2022 |  |  |  |  |  |  |  |  | 2,101,795 |  | 
| Beginning balance at Jun. 30, 2022 | 781,567 |  |  | $ 3 | $ 2 | 294,240 | 488,278 | (4,354) | $ (11,788) | 15,186 | 
| Increase (Decrease) in Stockholders' Equity [Roll Forward] |  |  |  |  |  |  |  |  |  |  | 
| Exercise of stock options (in shares) |  |  |  | 80,300 |  |  |  |  |  |  | 
| Exercise of stock options | 1,616 |  |  |  |  | 1,616 |  |  |  |  | 
| Stock-based compensation expense | 3,631 |  |  |  |  | 3,631 |  |  |  |  | 
| Unrealized gain from interest rate hedges, net | 1,757 |  |  |  |  |  |  | 1,757 |  |  | 
| Foreign currency translation adjustment | (3,053) |  |  |  |  |  |  | (3,053) |  |  | 
| Accretion of tax equity financing fees | (27) |  |  |  |  |  | (27) |  |  |  | 
| Net income | $ 27,391 |  |  |  |  |  | 27,391 |  |  |  | 
| Ending balance (in shares) at Sep. 30, 2022 |  | 33,914,193 | 18,000,000 | 33,914,193 | 18,000,000 |  |  |  |  |  | 
| Treasury stock, ending balance (in shares) at Sep. 30, 2022 | 2,101,795 |  |  |  |  |  |  |  | 2,101,795 |  | 
| Ending balance at Sep. 30, 2022 | $ 814,540 |  |  | $ 3 | $ 2 | $ 299,487 | $ 515,642 | $ (5,650) | $ (11,788) | $ 16,844 |