diff --git a/packages/frontend/src/crm/contacts/ContactDetailPage.module.css b/packages/frontend/src/crm/contacts/ContactDetailPage.module.css index e09e0d9..450a3d3 100644 --- a/packages/frontend/src/crm/contacts/ContactDetailPage.module.css +++ b/packages/frontend/src/crm/contacts/ContactDetailPage.module.css @@ -38,7 +38,8 @@ .nameRow { display: flex; align-items: center; - gap: 0.625rem; + gap: 0.75rem; + flex-wrap: wrap; } .name { @@ -48,22 +49,78 @@ color: var(--color-text); } +.nameCompany { + font-size: 1.125rem; + font-weight: 400; + color: var(--color-text-muted); +} + .subtitle { font-size: 0.9375rem; color: var(--color-text-muted); - margin: 0.2rem 0 0; + margin: 0.25rem 0 0; } -/* ---- Main layout ---- */ -.layout { +/* ---- Status badges ---- */ +.badgeActive { + display: inline-flex; + align-items: center; + gap: 0.3rem; + padding: 0.1875rem 0.5rem; + background: #dcfce7; + color: #166534; + border-radius: 9999px; + font-size: 0.75rem; + font-weight: 500; + white-space: nowrap; + flex-shrink: 0; +} + +.badgeActive::before { + content: ''; + display: inline-block; + width: 6px; + height: 6px; + border-radius: 50%; + background: #16a34a; + flex-shrink: 0; +} + +.badgeInactive { + display: inline-flex; + align-items: center; + gap: 0.3rem; + padding: 0.1875rem 0.5rem; + background: #fee2e2; + color: #991b1b; + border-radius: 9999px; + font-size: 0.75rem; + font-weight: 500; + white-space: nowrap; + flex-shrink: 0; +} + +.badgeInactive::before { + content: ''; + display: inline-block; + width: 6px; + height: 6px; + border-radius: 50%; + background: #dc2626; + flex-shrink: 0; +} + +/* ---- Top row: Kontaktdaten + Lexware ---- */ +.topRow { display: grid; - grid-template-columns: 1fr minmax(380px, 40%); + grid-template-columns: 1fr 260px; gap: 1.5rem; align-items: start; + margin-bottom: 1.5rem; } @media (max-width: 960px) { - .layout { + .topRow { grid-template-columns: 1fr; } } diff --git a/packages/frontend/src/crm/contacts/ContactDetailPage.tsx b/packages/frontend/src/crm/contacts/ContactDetailPage.tsx index 0bba98c..7248c42 100644 --- a/packages/frontend/src/crm/contacts/ContactDetailPage.tsx +++ b/packages/frontend/src/crm/contacts/ContactDetailPage.tsx @@ -126,11 +126,6 @@ export function ContactDetailPage() { const activities: Activity[] = contact.activities ?? []; const deals = dealsData?.data ?? []; - // Subtitle: "Position @ Unternehmen" - const subtitle = [contact.position, contact.company?.name] - .filter(Boolean) - .join(' @ '); - return (
{/* Back link */} @@ -151,27 +146,26 @@ export function ContactDetailPage() { {/* ── Header ── */}
-
-
-

{contactDisplayName(contact)}

- -
- {subtitle && ( -

{subtitle}

- )} +
+

+ {contactDisplayName(contact)} + {contact.company && ( + + {' '}({contact.company.name}) + + )} +

+ + {contact.isActive ? 'Aktiv' : 'Inaktiv'} +
+ {contact.position && ( +

{contact.position}

+ )}
- {/* ── Two-column layout ── */} -
- {/* ── Left column ── */} + {/* ── Top row: Kontaktdaten (wide) + Lexware (small) ── */} +
{/* Contact data card */}
@@ -525,82 +518,76 @@ export function ContactDetailPage() {
)} - {/* Lexware Office */} -
- -
- {/* ── Right column: Activities ── */} -
-
+ +
+
+ + {/* ── Aktivitäten (full width below) ── */} +
+
+

+ Aktivitäten +

+ -
- - {activities.length === 0 ? ( -

- Keine Aktivitäten vorhanden -

- ) : ( -
- {activities.map((act) => ( -
-
- {activityIcon(act.type)} -
-
-
- {act.subject} -
-
- {ACTIVITY_TYPE_LABELS[act.type]} ·{' '} - {formatDate(act.createdAt)} -
- {act.description && ( -
- {act.description} -
- )} -
-
- ))} -
- )} + + Neu +
+ + {activities.length === 0 ? ( +

+ Keine Aktivitäten vorhanden +

+ ) : ( +
+ {activities.map((act) => ( +
+
+ {activityIcon(act.type)} +
+
+
{act.subject}
+
+ {ACTIVITY_TYPE_LABELS[act.type]} ·{' '} + {formatDate(act.createdAt)} +
+ {act.description && ( +
+ {act.description} +
+ )} +
+
+ ))} +
+ )}
{/* ── Modals ── */}