+ {editing === null && (
+
+ )}
+
+ {editing !== null && (
+
+ )}
+
+ {records.loading &&
{de.common.loading}
}
+ {records.error && (
+
+ {records.error}
+
+
+ )}
+ {removal.error &&
{removal.error}
}
+
+ {!records.loading && !records.error && (records.data ?? []).length === 0 && (
+
{t.empty}
+ )}
+
+ {(records.data ?? []).length > 0 && (
+
+ {(records.data ?? []).map((r) => (
+ -
+
+
+ {r.date ? formatDate(toDateInput(r.date as string | null)) : '—'}
+
+ {r.placement && {r.placement}}
+ {r.award && {r.award}}
+
+
+ {r.eventName}
+
+ {r.note && {r.note}
}
+
+
+
+
+
+ ))}
+
+ )}
+
+ )
+}
diff --git a/gerbil-manager-web/src/pages/GerbilDetailPage.tsx b/gerbil-manager-web/src/pages/GerbilDetailPage.tsx
index 47761c7..605c145 100644
--- a/gerbil-manager-web/src/pages/GerbilDetailPage.tsx
+++ b/gerbil-manager-web/src/pages/GerbilDetailPage.tsx
@@ -11,6 +11,7 @@ import { fromDisplayString, genotypeToFarbschlag, displayGenotypeSafe } from '..
import type { Gender, GerbilStatus } from '../api/types'
import FarbschlagImage from '../components/FarbschlagImage'
import GerbilAcquisitionSection from '../components/GerbilAcquisitionSection'
+import GerbilExhibitionsTab from '../components/GerbilExhibitionsTab'
import GerbilHealthTab from '../components/GerbilHealthTab'
import GerbilPhotosTab from '../components/GerbilPhotosTab'
import GerbilProfilePhoto from '../components/GerbilProfilePhoto'
@@ -21,7 +22,7 @@ import { useGerbilName } from '../components/breederSuffix'
import { useToast } from '../components/toast'
import './rennmausakte.css'
-type DetailTab = 'photos' | 'health' | 'weight'
+type DetailTab = 'photos' | 'health' | 'weight' | 'exhibitions'
// DESIGN (Rennmausakte): per-status colours for the hero status badge.
const STATUS_COLORS: Record