# Decision: `indicator_mode` — a colour-optional rendering mode for UI signals **Date:** 2026-08-31 **Status:** active ## Context Several UI signals were encoded by hue alone and unreadable with a colour-vision deficiency: - `price_quality` (0–9) as a red→yellow→green gradient — a dot in the configurator search dropdown and inline before `lot_name`, a coloured number in the pricelist "Качество" column, a full-row background tint on the "Ценообразование" tab; - the amber `world`-fallback price cell tint ([2026-07-10-world-pricelist-fallback.md](2026-07-10-world-pricelist-fallback.md)); - the red "contaminated total" in the pricing footer ([2026-07-24-pricing-total-world-share.md](2026-07-24-pricing-total-world-share.md)). The bible has no dedicated accessibility contract, but `table-management` §Icon Semantics, `controls-selection` §Buttons, `go-code-style` §Business Logic Placement and `build-version-display` say the same thing: meaning is never carried by one ambiguous channel — back it with shape / number / explicit `title`+`aria-label`, and keep the indicator visually subordinate. ## Decision One per-client preference, **`app_settings.indicator_mode`** = `color` (default) | `accessible`, set on `/setup` ("Настройки") via `GET`/`PUT /api/settings/ui` (`internal/handlers/settings.go`) — no restart. Deliberately named for the concern (how indicators are rendered), not for the current widget, so future colour-only signals attach to the same switch. `internal/handlers/web.go` `render()` and `internal/handlers/setup.go` inject the mode for every page; `base.html` publishes it as `window.QF_INDICATOR_MODE`. `web/static/price-quality.js` is still the single source of the price-quality scale and branches on the mode internally, so its call sites do not change. In `accessible` mode: - `price_quality` renders as a **5-step signal-strength meter** (`priceQualityLevel` = `min(4, floor(score/2))` → `0-1 / 2-3 / 4-5 / 6-7 / 8-9`), five bars in one neutral hue, each instance carrying `title`/`aria-label` = `Качество цены: N/9`. `qualityDotHtml` and `qualityBadgeHtml` return the meter; - `qualityRowStyle` returns `''` — the pricing tab instead shows the meter in a narrow leading column (conditional `