diff --git a/.cursor/rules/kpi-hybrid.mdc b/.cursor/rules/kpi-hybrid.mdc
new file mode 100644
index 0000000..9d746bf
--- /dev/null
+++ b/.cursor/rules/kpi-hybrid.mdc
@@ -0,0 +1,29 @@
+---
+description: Только hybrid KPI — KpiStatGrid / row tile DNA (stats-12). Запрет SectionCards и hand-roll.
+alwaysApply: true
+---
+
+# KPI hybrid — только kit (stats-12 DNA)
+
+Preview: [stats-12](https://reui.io/preview/base/stats-12). SoT DNA = EvoBGP. Markup в проекте: `apps/web/src/components/reui-kit/kpi-stat-grid.tsx`.
+
+Связанные: [`reui-mcp.mdc`](reui-mcp.mdc), [`frontend-ui-patterns.mdc`](frontend-ui-patterns.mdc).
+
+## MUST
+
+| Зона | Компонент / DNA |
+|------|-----------------|
+| KPI-полосы / dashboard metrics | только `reui-kit/KpiStatGrid` (через `OpsDashboard` / `DetailPanel.Metrics` при наличии) |
+| Markup | horizontal compact hybrid: icon left `Item` `size-10.5` `bg-muted` + `border-background` + shadow + `ItemMedia` + label/Badge + value ± `variant` |
+| Row icon tiles (data-grid) | та же DNA (`AgentPlatformIcon` и клоны) — semantic `text-*` на `bg-muted` |
+| Quick Actions | только `reui-kit/QuickActionGrid` (sibling hybrid DNA) |
+
+Импорты UI: `@evofw/ui/components/*`.
+
+## NEVER
+
+- SectionCards / vertical-only KPI / hand-roll Frame/Card KPI
+- Другой size / radius / solid brand fill вместо `bg-muted`
+- `card-35` как замена stats-12 hybrid KPI
+- Копипаст ReUI block в route — adapt через `reui-kit/`
+- Голый lucide `size-4` в name-cell без hybrid tile
diff --git a/.cursor/rules/reui-mcp.mdc b/.cursor/rules/reui-mcp.mdc
index bd4355b..677faf9 100644
--- a/.cursor/rules/reui-mcp.mdc
+++ b/.cursor/rules/reui-mcp.mdc
@@ -36,7 +36,7 @@ alwaysApply: true
| Data Grid | `@reui` | `@/components/reui/data-grid/*` → `ResourcePage` |
| Filters | `@reui` | `@/components/reui/filters` |
| Frame surface | `@reui` | `@/components/reui/frame` |
-| KPI | block [stats-12](https://reui.io/preview/base/stats-12) | `reui-kit/KpiStatGrid` (EvoBGP hybrid SoT) |
+| KPI | block [stats-12](https://reui.io/preview/base/stats-12) | `reui-kit/KpiStatGrid` — см. [`kpi-hybrid.mdc`](kpi-hybrid.mdc) |
| Quick Actions | Frame tiles sibling KPI | `reui-kit/QuickActionGrid` |
| Semantic badge / alert | `@reui` | `@/components/reui/badge`, `@/components/reui/alert` |
| Number / date / autocomplete / color / kanban | `@reui` | `@/components/reui/*` |
diff --git a/apps/web/src/components/lists/list-type-icon.tsx b/apps/web/src/components/lists/list-type-icon.tsx
new file mode 100644
index 0000000..fdeb5e5
--- /dev/null
+++ b/apps/web/src/components/lists/list-type-icon.tsx
@@ -0,0 +1,51 @@
+import { Globe, List, Network } from 'lucide-react'
+import { cn } from '@evofw/ui/lib/utils'
+import { Item, ItemMedia } from '@evofw/ui/components/item'
+import { isManualListType } from '@evofw/shared'
+
+type ListTypeIconProps = {
+ type: string
+ className?: string
+}
+
+/**
+ * KPI-style type tile for list rows.
+ * Preview DNA: https://reui.io/preview/base/stats-12
+ */
+export function ListTypeIcon({ type, className }: ListTypeIconProps) {
+ const kind = isManualListType(type)
+ ? 'static'
+ : type === 'evobgp_community'
+ ? 'evobgp_community'
+ : 'json_url'
+
+ const Icon =
+ kind === 'evobgp_community' ? Network : kind === 'json_url' ? Globe : List
+ const color =
+ kind === 'evobgp_community'
+ ? 'text-info'
+ : kind === 'json_url'
+ ? 'text-warning'
+ : 'text-muted-foreground'
+
+ return (
+ -
+
+
+
+
+ )
+}
diff --git a/apps/web/src/components/lists/lists-columns.tsx b/apps/web/src/components/lists/lists-columns.tsx
index 3c99d98..f74edc3 100644
--- a/apps/web/src/components/lists/lists-columns.tsx
+++ b/apps/web/src/components/lists/lists-columns.tsx
@@ -1,6 +1,5 @@
-import { Link } from '@tanstack/react-router'
import type { ColumnDef } from '@tanstack/react-table'
-import { ListIcon, RefreshCwIcon, Trash2 } from 'lucide-react'
+import { RefreshCwIcon, Trash2 } from 'lucide-react'
import type { FilterFieldConfig } from '@/components/reui/filters'
import { DataGridColumnHeader } from '@/components/reui/data-grid/data-grid-column-header'
import {
@@ -8,6 +7,7 @@ import {
DataGridPrimaryCell,
} from '@/components/data-grid-cell'
import { StatusBadge } from '@/components/status-badge'
+import { ListTypeIcon } from '@/components/lists/list-type-icon'
import { Button } from '@evofw/ui/components/button'
import { isManualListType, type IpList } from '@evofw/shared'
@@ -58,15 +58,8 @@ export function createListColumns(opts: {
),
cell: ({ row }) => (
-
-
+
+
-
+
),
meta: { headerTitle: 'Список' },
},
@@ -137,15 +130,6 @@ export function createListColumns(opts: {
}
/>
-
- }
- >
- Открыть
-