Create a mod called mkt-dash: a marketing performance dashboard that opens in a side pane with /mkt.

WHO AND WHICH DECISION
It is for Solomon, marketing lead at Mankind Margin, deciding each morning which channel gets more budget, which gets less, and which ad needs a new creative.

DATA
Read ./data/marketing-daily.csv. One row per day per channel (some exports call it ad network) with columns:
date, channel, spend, impressions, clicks, leads, customers, revenue.
Our currency is INR. The month's total budget is 3,00,000, set in ./data/budget.json as {"month_budget": 300000}.
Re-read the file every 15 minutes and when I run /mkt refresh.

METRICS (compute exactly like this)
- CTR = clicks / impressions
- CPL (cost per lead) = spend / leads
- CAC (cost per customer) = spend / customers
- ROAS = revenue / spend
- Lead-to-customer rate = customers / leads
- Pacing = month-to-date spend / (month budget × days elapsed / days in month)
Show each for the last 7 days, with the change against the 7 days before.

LAYOUT (top to bottom)
1. One row of tiles: Spend, Leads, CPL, CAC, ROAS, Pacing. Each tile: value, arrow, % change.
2. A 14-day sparkline of leads under the tiles.
3. A table by channel, sorted by ROAS (best first): spend, leads, CPL, CAC, ROAS, a 10-character bar of share of spend.
4. A "needs attention" list (see thresholds). If nothing qualifies, say "Nothing needs you today."

THRESHOLDS
- Pacing above 110% or below 85%: amber.
- A channel whose CPL rose more than 25% week on week: amber. Over 50%: red.
- A channel with spend but zero leads for 3 days running: red.
- CTR down more than 30% against its own 14-day average: flag "creative fatigue?".

INTERACTION
/mkt opens or closes the pane. /mkt channel name shows that channel only. /mkt refresh re-reads now.

ONE-LINE READ (optional)
Under the tiles, one sentence from the model: the biggest change this week and the one thing to check first. Give it only the computed numbers, never the raw file. Mark it "AI read".

GUARDRAILS
Read-only. Never estimate or fill a missing value. Show "no data" instead, and name the missing column.
If the file is missing or a column is misnamed, the pane says which, in one line, instead of drawing zeros.
Show the date range and currency on the pane header.
Write a test with a small fixture CSV that checks CPL, ROAS and pacing.
