Your multipliers now price every surface
You set up those Difficulty Multiplier tables during onboarding. Until now they were mostly a suggestion the AI took under advisement. Now they're the math.
Every wall, floor, pan, and niche on a job carries the finishes you recorded — material, tile size, pattern — whether they came from a voice note, a photo, or you picking them in the surface editor. When a proposal builds, BidCraft reads those finishes off each surface a line covers and matches them to your rows, by name. A 40 sqft herringbone marble back wall at ×2.3 plus 72 sqft of plain walls at ×1.05 prices that walls line at about ×1.5 — the honest weighted average, not the high number and not the low one. Crew days scale by the same multiplier, so your labor pricing and your schedule both know that herringbone takes longer.
The math shows its work. On the scope screen, adjusted lines say 2.0 base days × 1.5 = 3.0 days right under the row. In Costs & Materials, expand any tile line and you get $54.00 base × 1.395 = $75.33/sqft, chips naming which finish on which wall did it, the price chain (103 sqft × $75.33/sqft = $7,758.99), and a short "Why these numbers" note on anything unusual. That base rate is click-to-edit — change it and your multiplier stays applied on top.
Your numbers are protected. Type a day count on the scope screen and it's final — it never gets multiplied a second time. Log actual crew days on a running job and nothing moves: logging records, it doesn't reprice. When you want it to count there's a Use actual for pricing button, and a Reset to estimate to put it back exactly as it was. Regenerating twice with nothing changed gives you the same numbers both times.
And it tells you when it can't price something. If a finish on the job doesn't match any row in your tables, the proposal names it and points you at Pricing Strategy — add or rename a row and regenerate. The row name is the whole interface now; there's nothing to tag or tick. Plain-tile jobs with nothing unusual on them stay quiet.