XML 47 R35.htm IDEA: XBRL DOCUMENT
v3.24.2

Stock-Based Compensation (Tables) | 6 Months Ended
--- | ---
Jun. 30, 2024
Share-Based Payment Arrangement [Abstract] |
Summary of Stock-Based Compensation Expense | Stock-based compensation expense was allocated in the condensed consolidated statements of comprehensive income as follows:
| Three Months Ended June 30, |  | Six Months Ended June 30,
(in thousands) | 2024 |  | 2023 |  | 2024 |  | 2023
Cost of revenues | $ | 2,730 |  |  | $ | 2,586 |  |  | $ | 6,812 |  |  | $ | 5,089 |
Operating expenses |  |  |  |  |  |  |
Sales and marketing | 2,512 |  |  | 2,528 |  |  | 6,956 |  |  | 4,951 |
Research and development | 1,820 |  |  | 1,812 |  |  | 5,062 |  |  | 3,589 |
General and administrative | 4,432 |  |  | 5,955 |  |  | 12,682 |  |  | 11,032 |
| $ | 11,494 |  |  | $ | 12,881 |  |  | $ | 31,512 |  |  | $ | 24,661 |
Stock-based compensation expense by grant type or plan was as follows:
| Three Months Ended June 30, |  | Six Months Ended June 30,
(in thousands) | 2024 |  | 2023 |  | 2024 |  | 2023
Stock options | $ | 506 |  |  | $ | 494 |  |  | $ | 1,003 |  |  | $ | 985 |
PSUs | 2,445 |  |  | 3,499 |  |  | 4,890 |  |  | 7,424 |
RSUs & DSUs | 6,952 |  |  | 7,381 |  |  | 22,443 |  |  | 13,443 |
RSAs | 89 |  |  | 115 |  |  | 215 |  |  | 223 |
ESPP | 802 |  |  | 748 |  |  | 1,523 |  |  | 1,337 |
401(k) stock match | 700 |  |  | 644 |  |  | 1,438 |  |  | 1,249 |
| $ | 11,494 |  |  | $ | 12,881 |  |  | $ | 31,512 |  |  | $ | 24,661 |
Summary of Stock Option Activity | Our stock option activity was as follows:
| Six Months Ended June 30, 2024
| Options (#) |  | Weighted Average Exercise Price ($/share)
Outstanding, beginning of period | 346,822 |  |  | $ | 80.02 |
Granted | 33,930 |  |  | 196.37 |
Exercised | (48,400) |  |  | 47.83 |
Forfeited | (760) |  |  | 167.08 |
Outstanding, end of period | 331,592 |  |  | $ | 96.43 |
Summary of Weighted Average Fair Value Per Share of Options Granted, Assumptions | This was estimated on the date of grant using the Black-Scholes option pricing model with the following weighted-average assumptions:
Life (in years) | 4.1
Volatility | 36.7 | %
Dividend yield | — |
Risk-free interest rate | 4.3 | %
Summary of PSU, RSU, RSA, and DSU | Activity for our PSUs, RSUs, RSAs, and DSUs in aggregate was as follows:
| Six Months Ended June 30, 2024
| # |  | Weighted Average Grant Date Fair Value ($/share)
Outstanding, beginning of period | 773,414 |  |  | $ | 147.50 |
Granted | 324,896 |  |  | 179.31 |
Vested and common stock issued | (366,823) |  |  | 124.01 |
Forfeited | (3,423) |  |  | 154.70 |
Outstanding, end of period | 728,064 |  |  | $ | 173.50 |
Summary of ESPP Activity | Our ESPP activity was as follows:
| Three Months Ended June 30, |  | Six Months Ended June 30,
(in thousands, except shares) | 2024 |  | 2023 |  | 2024 |  | 2023
Amounts for shares purchased | $ | 4,828 |  |  | $ | 3,895 |  |  | $ | 5,219 |  |  | $ | 4,136 |
Shares purchased | 30,185 |  |  | 35,676 |  |  | 32,583 |  |  | 38,225 |
Summary of Fair Value Estimation of Common Stock, Assumptions | The fair value was estimated based on the market price of our common stock at the beginning of the offering period using the following assumptions:
Life (in years) | 0.5
Volatility | 30.9 | %
Dividend yield | — |
Risk-free interest rate | 5.3 | %

X
- References No definition available. + Details
Name: | us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract
Namespace Prefix: | us-gaap_
Data Type: | xbrli:stringItemType
Balance Type: | na
Period Type: | duration

X
- Definition Tabular disclosure of allocation of amount expensed and capitalized for award under share-based payment arrangement to statement of income or comprehensive income and statement of financial position. Includes, but is not limited to, corresponding line item in financial statement. + References Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef -Name Accounting Standards Codification -Topic 718 -SubTopic 10 -Section 50 -Paragraph 2 -Subparagraph (h)(1) -Publisher FASB -URI https://asc.fasb.org/1943274/2147480429/718-10-50-2 + Details
Name: | us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock
Namespace Prefix: | us-gaap_
Data Type: | dtr-types:textBlockItemType
Balance Type: | na
Period Type: | duration

X
- Definition Tabular disclosure of employee stock purchase plan activity. + References Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef -Name Accounting Standards Codification -Topic 718 -SubTopic 10 -Section 50 -Paragraph 2 -Subparagraph (g) -Publisher FASB -URI https://asc.fasb.org/1943274/2147480429/718-10-50-2 + Details
Name: | us-gaap_ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock
Namespace Prefix: | us-gaap_
Data Type: | dtr-types:textBlockItemType
Balance Type: | na
Period Type: | duration

X
- Definition Tabular disclosure for stock option plans. Includes, but is not limited to, outstanding awards at beginning and end of year, grants, exercises, forfeitures, and weighted-average grant date fair value. + References Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef -Topic 718 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 2 -Subparagraph (c)(1) -Publisher FASB -URI https://asc.fasb.org/1943274/2147480429/718-10-50-2 Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef -Name Accounting Standards Codification -Section 50 -Paragraph 2 -Subparagraph (d) -SubTopic 10 -Topic 718 -Publisher FASB -URI https://asc.fasb.org/1943274/2147480429/718-10-50-2 Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef -Name Accounting Standards Codification -Section 50 -Paragraph 2 -Subparagraph (e) -SubTopic 10 -Topic 718 -Publisher FASB -URI https://asc.fasb.org/1943274/2147480429/718-10-50-2 + Details
Name: | us-gaap_ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock
Namespace Prefix: | us-gaap_
Data Type: | dtr-types:textBlockItemType
Balance Type: | na
Period Type: | duration

X
- Definition Tabular disclosure of the significant assumptions used during the year to estimate the fair value of employee stock purchase plans, including, but not limited to: (a) expected term, (b) expected volatility of the entity's shares, (c) expected dividends, (d) risk-free rate(s), and (e) discount for post-vesting restrictions. + References Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef -Topic 718 -SubTopic 10 -Subparagraph (f)(2) -Name Accounting Standards Codification -Paragraph 2 -Section 50 -Publisher FASB -URI https://asc.fasb.org/1943274/2147480429/718-10-50-2 + Details
Name: | us-gaap_ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock
Namespace Prefix: | us-gaap_
Data Type: | dtr-types:textBlockItemType
Balance Type: | na
Period Type: | duration

X
- Definition Tabular disclosure of the significant assumptions used during the year to estimate the fair value of stock options, including, but not limited to: (a) expected term of share options and similar instruments, (b) expected volatility of the entity's shares, (c) expected dividends, (d) risk-free rate(s), and (e) discount for post-vesting restrictions. + References Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef -Topic 718 -SubTopic 10 -Subparagraph (f)(2) -Name Accounting Standards Codification -Paragraph 2 -Section 50 -Publisher FASB -URI https://asc.fasb.org/1943274/2147480429/718-10-50-2 + Details
Name: | us-gaap_ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock
Namespace Prefix: | us-gaap_
Data Type: | dtr-types:textBlockItemType
Balance Type: | na
Period Type: | duration

X
- Definition Disclosure of the number and weighted-average grant date fair value for restricted stock and restricted stock units that were outstanding at the beginning and end of the year, and the number of restricted stock and restricted stock units that were granted, vested, or forfeited during the year. + References No definition available. + Details
Name: | us-gaap_ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock
Namespace Prefix: | us-gaap_
Data Type: | dtr-types:textBlockItemType
Balance Type: | na
Period Type: | duration