Now I'll write the full-year budget versus actual commentary following the output.

## Headline

YTD 2025 revenue of $11.2M fell ($362K), or (3.1%), short of budget, and operating income of $388K was ($195K), or (33.5%), below plan.

## Results

| Measure | Actual | Budget | Variance |
|---------|--------|--------|----------|
| Revenue | $11.2M | $11.6M | ($362K) |
| COGS | $8.3M | $8.5M | $167K |
| Gross profit | $2.9M | $3.1M | ($194K) |
| Gross margin | 25.9% | 26.8% | (0.9) pts |
| Operating expenses | $2.5M | $2.5M | ($649) |
| Operating income | $388K | $583K | ($195K) |

## Month

December 2025 revenue of $827K ran $3K, or 0.38%, ahead of budget. Operating income of $8K lagged budget by ($5K), or (38.0%), as cost pressure and elevated other operating expenses offset tight control elsewhere.

## Drivers

- **Salaries and wages** ran ($38K), or (2.5%), unfavourable for the year, reflecting elevated headcount or wage pressures through the period.
- **Revenue shortfalls concentrated in Q3**, with July ($132K) miss, August ($105K) miss, and March ($123K) miss accounting for ($360K) of the ($362K) full-year gap.
- **Marketing and Technology** were bright spots, running $38K, or 28.5%, and $25K, or 15.0%, favourable respectively, while COGS came in $196K, or 2.4%, better than budget.
- **Freight out and rent occupancy** headwinds added ($29K), or (8.3%), and ($23K), or (5.6%), respectively, suggesting supply chain or facility cost pressures.

## Data notes

pnl_fy2025.csv, 120 rows, sha256 `eaa52ac89e97`