I've written the variance note to `output/ttm-note.md`. Over the twelve months to June 2025, revenue was **$11.3M against a $11.5M budget, unfavourable by ($157K), or (1.4%)**. Operating income was **$485K against $598K, unfavourable by ($113K), or (18.8%)**. The script's reconciliation checks all passed.

The main drivers:
- **Revenue:** most of the miss fell in three months: March 2025 at ($123K), July 2024 at ($45K) and August 2024 at ($44K). September 2024 to January 2025 were favourable.
- **Cost of goods sold** was favourable by $82K, which offset part of the revenue miss. Freight out was unfavourable by ($16K), and gross margin fell (0.4) pts.
- **Salaries and wages**, unfavourable by ($19K), and **rent and occupancy**, unfavourable by ($15K), were both at their worst in June 2025, so neither shows any sign of reversing.
- **Professional fees** is a timing difference. About $30K budgeted for May 2025 was spent in March, so the line was ($29K) unfavourable at March and is now slightly favourable.

**How I got the twelve-month figures:** the budget-vs-actual script only totals within a calendar year, and this period runs across both your files. So I:
- combined July 2024 to June 2025 from the two files into `output/pnl_ttm_2025-06.csv`, 120 rows;
- ran a copy of the script, `output/bva_ttm.py`, built by `output/ttm_build.py`. The only changes are that it totals all twelve months in the file and labels the period "TTM to June 2025". All its checks are unchanged.

The full figures are in `output/bva-ttm.json`. The data notes line in the note points to the combined file, not your two original files, because that is the file the script read.