fix(tradein): money-screen contrast AA (#834 fixup)

axe design-loop на /ui-preview/estimate выявил 9 оставшихся serious
color-contrast нод (прошлый PR не покрыл):

- SellTimeSensitivity.tsx: хардкод #6b7280 @10px на тонир. KPI-карточках
  (#dcfce7/#dbeafe/#fef3c7/#fee2e2) = 3.95-4.4:1 → #5f6570 (≥4.8:1).
- PriceTrendCard.tsx: тренд-стрелка ▲/▼ красилась viz-палитрой
  (var(--viz-3)=#36a558 3.14:1 / --accent-2) — bar-цвета, не для текста.
  → семантические var(--success)/var(--danger) ≥4.9:1 на белом.

Verified: axe wcag2a/2aa/21a/21aa на /ui-preview/estimate → 0 violations
(было 9), 29 passes, без регрессий.

Refs #834
This commit is contained in:
bot-frontend 2026-05-31 10:55:07 +03:00
parent 60353beaaf
commit ddb0dbf86c
2 changed files with 5 additions and 3 deletions

View file

@ -65,7 +65,9 @@ export function PriceTrendCard({ estimate }: Props) {
<div>
За <b className="mono">{data.length}</b> мес.
</div>
<div style={{ marginTop: 4, color: up ? "var(--viz-3)" : "var(--accent-2)" }}>
{/* #834 a11y: viz-палитра (--viz-3 #36a558 3.14:1 / --accent-2) bar-цвета,
на белом тексте не проходят AA. Семантические токены: success/danger 4.9:1. */}
<div style={{ marginTop: 4, color: up ? "var(--success)" : "var(--danger)" }}>
{up ? "▲" : "▼"} {Math.abs(changePct).toFixed(1)}%
</div>
</div>

View file

@ -41,11 +41,11 @@ function BucketCard({ bucket }: { bucket: SellTimeBucket }) {
{hasData ? `~${bucket.median_exposure_days} дн.` : "—"}
</div>
{hasData && bucket.p25_days != null && bucket.p75_days != null && (
<div style={{ fontSize: 10, color: "#6b7280", marginTop: 4 }}>
<div style={{ fontSize: 10, color: "#5f6570", marginTop: 4 }}>
обычно {bucket.p25_days}{bucket.p75_days} дн.
</div>
)}
<div style={{ fontSize: 10, color: "#6b7280", marginTop: 2 }}>
<div style={{ fontSize: 10, color: "#5f6570", marginTop: 2 }}>
{bucket.n_lots > 0
? `${bucket.n_lots} аналог${bucket.n_lots === 1 ? "" : bucket.n_lots < 5 ? "а" : "ов"}`
: "нет данных"}