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

WHO AND WHICH DECISION
It is for Solomon, who runs the Mankind Margin merch store, deciding each week what to reorder, which products to promote, and which to discount or drop.

DATA
Read two files:
- ./data/orders.csv: order_id, date, sku, qty, unit_price, discount, shipping_cost, returned (true/false)
- ./data/products.csv: sku, name, category, unit_cost, stock_on_hand, lead_time_days
Payment fees are 2.5% of revenue. Currency INR. Re-read every hour and on /shop refresh.

METRICS (per SKU, last 30 days unless I say otherwise)
- Net revenue = sum(qty × unit_price − discount) for orders not returned
- Contribution margin = net revenue − (qty × unit_cost) − shipping_cost − payment fees − cost of returns
- Margin % = contribution margin / net revenue
- Return rate = returned units / units sold
- Daily sales rate = units sold / days in period
- Days of cover = stock_on_hand / daily sales rate
- Reorder point = daily sales rate × (lead_time_days + 7 safety days)
- ABC class: sort SKUs by contribution margin; A = top 80% of total margin, B = next 15%, C = last 5%

LAYOUT (top to bottom)
1. Tiles: Net revenue, Contribution margin, Margin %, Return rate, Orders.
2. A table of SKUs sorted by contribution margin, with class A/B/C, units, margin %, return rate, days of cover, and a bar of margin share.
3. "Reorder now": SKUs at or below their reorder point, with suggested quantity = reorder point × 2 − stock_on_hand.
4. "Selling but losing money": SKUs with revenue in the top half and margin % below 10%.
5. "Dead stock": SKUs with stock but no sale in 45 days, with the cash tied up = stock × unit_cost.

THRESHOLDS
- Days of cover below lead_time_days: red. Below lead time + safety: amber.
- Return rate above 8%: amber; 15%: red.
- Margin % below 10%: amber; below 0: red.

INTERACTION
/shop opens or closes. /shop category filters. /shop sku code shows one product's 30-day sparkline and numbers. /shop period 7|30|90 changes the window.

ONE-LINE READ (optional)
One sentence from the model: the product most worth attention this week and why, from computed numbers only. Mark it "AI read".

GUARDRAILS
Read-only: it suggests reorder quantities, it never places orders.
A SKU in orders but missing from products.csv is listed under "unknown SKUs", never given a zero cost.
Show the period and currency on the header.
Write a test with fixture files that checks contribution margin, days of cover and ABC classes.
