Revenue, Receivables and Contract Assets and Liabilities (Tables)
|
6 Months Ended |
Aug. 29, 2026 |
| Revenue from Contract with Customer [Abstract] |
|
| Schedule of Disaggregates Total Revenue by Timing of Recognition |
The following table disaggregates total revenue by timing of recognition (see Note 12 for disclosure of revenue by segment): | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Three Months Ended | | Six Months Ended | | (In thousands) | | August 29, 2026 | | August 30, 2025 | | August 29, 2026 | | August 30, 2025 | | Recognized at shipment | | $ | 214,752 | | | $ | 171,681 | | | $ | 380,762 | | | $ | 329,837 | | | Recognized over time (input method) | | 108,849 | | | 118,134 | | | 224,845 | | | 237,357 | | | Recognized over time (output method) | | 67,534 | | | 68,379 | | | 128,213 | | | 137,622 | | | Total | | $ | 391,135 | | | $ | 358,194 | | | $ | 733,820 | | | $ | 704,816 | |
|
| Schedule of Receivables |
| | | | | | | | | | | | | | | | (In thousands) | | August 29, 2026 | | February 28, 2026 | | Trade accounts | | $ | 147,505 | | | $ | 111,679 | | | Construction contracts | | 61,005 | | | 88,445 | | | Total receivables | | 208,510 | | | 200,124 | | | Less: allowance for credit losses | | 2,183 | | | 1,608 | | | Receivables, net | | $ | 206,327 | | | $ | 198,516 | |
|
| Schedule of Allowance for Credit Losses |
The following table summarizes the activity in the allowance for credit losses for the six months ended August 29, 2026: | | | | | | | | | | | | (In thousands) | | August 29, 2026 | | | | Beginning balance | | $ | 1,608 | | | | | Credits against costs and expenses | | 152 | | | | | Deductions from allowance, net of recoveries | | (97) | | | | | Allowance for credit losses from acquisitions | | 520 | | | | | | | | | | Ending balance | | $ | 2,183 | | | |
|
| Schedule of Other Contract-Related Disclosures |
| | | | | | | | | | | | | | | | (In thousands) | | August 29, 2026 | | February 28, 2026 | | Contract assets | | $ | 68,806 | | | $ | 59,512 | | | Contract liabilities | | 59,343 | | | 60,903 | |
| | | | | | | | | | | | | | | | | | | | | | Three Months Ended | Six Months Ended | | (In thousands) | August 29, 2026 | | August 30, 2025 | August 29, 2026 | | August 30, 2025 | | Revenue recognized related to contract liabilities from prior year-end | $ | 8,933 | | | $ | 21,499 | | $ | 51,537 | | | $ | 28,329 | | | Revenue recognized related to prior satisfaction of performance obligations | 1,386 | | | 1,935 | | 627 | | | 2,408 | |
|
| Schedule of Performance Obligations Expected to be Satisfied |
The transaction price associated with performance obligations that were not yet satisfied as of August 29, 2026, will be recognized as revenue in the following estimated time periods: | | | | | | | | | | | (In thousands) | | August 29, 2026 | | Within one year | | $ | 444,374 | | | Between one and two years | | 289,941 | | | Beyond two years | | 100,948 | | | Total | | $ | 835,263 | |
|
| Schedule of Impact of Adjustments on Operating Income |
The net cumulative catch-up adjustments on our longer-term contracts for changes in estimates had the following effect on the respective periods shown: | | | | | | | | | | | | | | | | | | | | | | | | | | | | (in thousands, except earnings per share data) | | | Three Months Ended | Six Months Ended | | | | | | | August 29, 2026 | | August 30, 2025 | August 29, 2026 | | August 30, 2025 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Operating income | | | | | $ | 1,532 | | | $ | 731 | | $ | 863 | | | $ | 799 | | | | | Earnings per share: | | | | | | | | | | | | | | Basic | | | | | 0.06 | | 0.03 | 0.03 | | 0.03 | | | | Diluted | | | | | 0.06 | | 0.03 | 0.03 | | 0.03 | | |
|