feat: Future Availability Intelligence — rebrand & card redesign

Replaces "Schattenmarkt" branding with professional Future Availability
Intelligence throughout the UI. Two distinct card types: Pre-Market
(LEASE_EXPIRY + verified, green accent) and Market Signal (probabilistic,
blue accent). Professioneller Data-Header replaces dark purple gradient.
New detail panel sections: Erkannte Marktindikatoren, Strategische
Interpretation, Bestätigt/Nicht bestätigt. All 15 mock signals enriched
with concrete Swiss CRE market indicators and strategic interpretations.
Signal quality shown as 4-dot indicator (Hoch/Mittel/Niedrig).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Sutter
2026-05-20 13:06:16 +02:00
parent d5a4862a28
commit 5fe15bac62
12 changed files with 531 additions and 358 deletions
+6 -6
View File
@@ -309,7 +309,7 @@ function UnitStructurePanel({ p }: { p: Property }) {
)
}
// ── Schattenmarkt release panel ───────────────────────────────────────────────
// ── Pre-Market release panel ──────────────────────────────────────────────────
const MOCK_TODAY = new Date('2026-05-20')
@@ -346,7 +346,7 @@ function SchattenmarktReleasePanel({ p }: { p: Property }) {
await propertyService.update(p.id, { schattenmarktRelease: { enabled: nextEnabled, leadTimeMonths: nextLeadTime } })
await queryClient.invalidateQueries({ queryKey: ['property', p.id] })
await queryClient.invalidateQueries({ queryKey: ['properties'] })
showToast(nextEnabled ? 'Schattenmarkt-Freigabe aktiviert.' : 'Schattenmarkt-Freigabe deaktiviert.', 'success')
showToast(nextEnabled ? 'Pre-Market Freigabe aktiviert.' : 'Pre-Market Freigabe deaktiviert.', 'success')
} catch {
showToast('Fehler beim Speichern.', 'error')
} finally {
@@ -367,7 +367,7 @@ function SchattenmarktReleasePanel({ p }: { p: Property }) {
return (
<>
<Divider sx={{ my: 2 }} />
<SectionTitle title="Schattenmarkt" />
<SectionTitle title="Pre-Market Freigabe" />
<Box
sx={{
border: '1px solid',
@@ -383,10 +383,10 @@ function SchattenmarktReleasePanel({ p }: { p: Property }) {
<Zap size={15} color={enabled ? '#7c3aed' : '#94a3b8'} style={{ marginTop: 2 }} />
<Box>
<Typography variant="body2" sx={{ fontWeight: 600, lineHeight: 1.3 }}>
Für Schattenmarkt freigeben
Pre-Market freigeben
</Typography>
<Typography variant="caption" color="text.secondary">
Nachfragesuchende sehen dieses Objekt vor Vertragsende im Feed
Fläche vor offizieller Vermarktung im Markt sichtbar machen
</Typography>
</Box>
</Box>
@@ -455,7 +455,7 @@ function SchattenmarktReleasePanel({ p }: { p: Property }) {
{!enabled && (
<Typography variant="caption" color="text.secondary" sx={{ display: 'block', mt: 1 }}>
Wenn aktiviert, erscheint dieses Objekt {leadTimeMonths} Monate vor Vertragsende als
verifiziertes Schattenmarkt-Signal im Nachfrage-Feed.
verifiziertes Pre-Market Signal im Nachfrage-Feed.
</Typography>
)}
</Box>