feat: responsive layout + Reminder Manager redesign

- Auto-collapse sidebar at <1536px (all laptops), expand at ≥1536px
- Responsive drawer/panel widths across Pipeline, Properties, MyListings, Anfragen, MatchDetail, AISearch
- Reminder Manager: dot+label priority badge, Fläche column removed, status only for non-active rows
- ReminderKpiBar: focal Überfällig card, three secondary KPIs
- ReminderDetailDrawer: Task Panel redesign — Finanzen removed, Notiz promoted, Pre-Market as inline badge, full create form
- useCreateReminder hook wired to reminderService.create with cache invalidation
- Mock data: contract-derived reminders (LEASE_EXPIRY, BREAK_OPTION, RENT_REVIEW, INSURANCE_RENEWAL, SCHATTENMARKT_RELEASE) now show auto-creation note in Verlauf

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Sutter
2026-06-16 14:30:06 +02:00
parent 5259579f85
commit 6aa4f96bd2
17 changed files with 463 additions and 273 deletions
+19 -22
View File
@@ -70,10 +70,10 @@ export const ReminderListRow = memo(function ReminderListRow({ reminder }: Props
onClick={handleRowClick}
sx={{
display: 'grid',
gridTemplateColumns: '100px 130px 1fr 140px 90px 100px 90px',
gridTemplateColumns: '90px 130px 1fr 140px 80px 90px',
alignItems: 'center',
gap: 1,
pl: 1.5,
pl: 2,
pr: 2,
py: 1.25,
borderBottom: '1px solid #f1f5f9',
@@ -84,8 +84,8 @@ export const ReminderListRow = memo(function ReminderListRow({ reminder }: Props
transition: 'background-color 0.1s',
}}
>
{/* Priority badge */}
<Box>
{/* Priority dot */}
<Box sx={{ display: 'flex', alignItems: 'center' }}>
<ReminderPriorityBadge priority={reminder.priority} />
</Box>
@@ -112,25 +112,22 @@ export const ReminderListRow = memo(function ReminderListRow({ reminder }: Props
<ReminderDaysIndicator dueDate={reminder.dueDate} />
</Box>
{/* Area */}
<Typography variant="caption" color="text.secondary" sx={{ whiteSpace: 'nowrap' }}>
{reminder.areaSqm.toLocaleString('de-CH')} m²
</Typography>
{/* Status chip */}
{/* Status — only shown for non-default states */}
<Box>
<Chip
label={STATUS_LABEL[reminder.status]}
size="small"
sx={{
height: 20,
fontSize: '0.7rem',
fontWeight: 500,
bgcolor: STATUS_STYLE[reminder.status]?.bg ?? '#f8fafc',
color: STATUS_STYLE[reminder.status]?.color ?? '#64748b',
border: `1px solid ${STATUS_STYLE[reminder.status]?.border ?? '#e2e8f0'}`,
}}
/>
{reminder.status !== ReminderStatus.ACTIVE && (
<Chip
label={STATUS_LABEL[reminder.status]}
size="small"
sx={{
height: 20,
fontSize: '0.7rem',
fontWeight: 500,
bgcolor: STATUS_STYLE[reminder.status]?.bg ?? '#f8fafc',
color: STATUS_STYLE[reminder.status]?.color ?? '#64748b',
border: `1px solid ${STATUS_STYLE[reminder.status]?.border ?? '#e2e8f0'}`,
}}
/>
)}
</Box>
{/* Actions */}