diff --git a/frontend/src/components/site-finder/BestLayoutsBlock.tsx b/frontend/src/components/site-finder/BestLayoutsBlock.tsx index 50fcfe7d..a885333c 100644 --- a/frontend/src/components/site-finder/BestLayoutsBlock.tsx +++ b/frontend/src/components/site-finder/BestLayoutsBlock.tsx @@ -14,10 +14,27 @@ import type { // ── Constants ───────────────────────────────────────────────────────────────── -const CONFIDENCE_STYLES: Record = { - high: { cls: "bg-emerald-100 text-emerald-800", label: "Высокое" }, - medium: { cls: "bg-amber-100 text-amber-800", label: "Среднее" }, - low: { cls: "bg-rose-100 text-rose-800", label: "Низкое" }, +// Inline-токены (НЕ Tailwind-классы): на site-finder-отчёте Tailwind-утилиты +// (flex/gap/bg-*) не генерируются в сборку — секции стилизованы inline (#1953). +const CONFIDENCE_STYLES: Record< + Confidence, + { fg: string; bg: string; label: string } +> = { + high: { + fg: "var(--success, #0A7A3A)", + bg: "var(--success-soft, #DCFCE7)", + label: "Высокое", + }, + medium: { + fg: "var(--warn, #9A6700)", + bg: "var(--warn-soft, #FEF3C7)", + label: "Среднее", + }, + low: { + fg: "var(--danger, #B3261E)", + bg: "var(--danger-soft, #FEE2E2)", + label: "Низкое", + }, }; const TIME_WINDOW_LABELS: Record = { @@ -47,21 +64,50 @@ const ROOM_BUCKET_LABELS: Record = { function DataQualityCard({ dq }: { dq: BestLayoutsResponse["data_quality"] }) { const conf = CONFIDENCE_STYLES[dq.confidence]; return ( -
- + // Inline-стили (НЕ Tailwind): flex/gap/bg-* не применяются на этой странице — + // спаны текли inline и слипались («НизкоеПокрытие», #1953). Inline гарантирует + // flex+gap (воздух вокруг «·») и фон бейджа. +
+ Качество данных: {conf.label} - {/* Явный разделитель + неразрывное «покрытие …» — иначе при flex-wrap бейдж - качества и текст покрытия слипались («Низкое​Покрытие 18%», #1953). */} - + · - + покрытие {dq.velocity_coverage_pct.toFixed(0)}% ( {dq.objects_with_velocity_data} из {dq.objects_total_in_radius} ЖК)