+
+
{t('search.filters')}
+ {hasActiveFilters && (
+
+ )}
+
+
+ {/* Entity type filter */}
+
+
+ {t('search.entityType')}
+
+ {isLoading ? (
+
+ {[1, 2, 3].map((i) => )}
+
+ ) : entityTypes.length === 0 ? (
+
{t('common.none')}
+ ) : (
+
+ )}
+
+
+ {/* Tag filter */}
+
+
+ {t('search.tags')}
+
+ {isLoading ? (
+
+ {[1, 2, 3].map((i) => )}
+
+ ) : tags.length === 0 ? (
+
{t('common.none')}
+ ) : (
+
+ )}
+
+
+ {/* Date range filter */}
+
+
+ {/* Sort selector */}
+
+
+ {t('common.sort')}
+
+
+
+ );
+}
diff --git a/frontend/src/components/search/SearchResultCard.tsx b/frontend/src/components/search/SearchResultCard.tsx
new file mode 100644
index 0000000..dc1c171
--- /dev/null
+++ b/frontend/src/components/search/SearchResultCard.tsx
@@ -0,0 +1,114 @@
+import React from 'react';
+import clsx from 'clsx';
+import { useNavigate } from 'react-router-dom';
+import { useTranslation } from 'react-i18next';
+import { SearchResult } from '@/api/hooks';
+import { Badge } from '@/components/ui/Badge';
+
+const TYPE_LABELS: Record