diff --git a/contact.php b/contact.php index 9d1df1f..de258ac 100644 --- a/contact.php +++ b/contact.php @@ -6,11 +6,12 @@ require_once __DIR__ . '/lib/Session.php'; $session = new Session(); function validate($data) { - return !empty($data['name']) && !empty($data['email']) && !empty($data['phone']) && !empty($data['message']); + $hasContact = !empty(trim($data['email'] ?? '')) || !empty(trim($data['phone'] ?? '')); + return !empty(trim($data['name'] ?? '')) && $hasContact && !empty(trim($data['message'] ?? '')); } function isBot($data) { - return !empty($data['company']) || ($data['check'] != 'send') && (time() - $data['timestamp']) <= 5; + return !empty($data['company']) || (($data['check'] ?? '') != 'send' && (time() - (int)($data['timestamp'] ?? 0)) <= 5); } if($_POST && count($_POST) > 0) { @@ -21,16 +22,18 @@ if($_POST && count($_POST) > 0) { if(!validate($_POST)) { $session->set('form', $_POST); $session->set('alert-class', 'alert-danger'); - $session->set('alert', 'Nicht alle Pflichtfelder ausgefüllt.'); + $session->set('alert', 'Bitte füllen Sie alle Pflichtfelder aus und geben Sie mindestens eine E-Mail-Adresse oder Telefonnummer an.'); } else { $ip = $_SERVER['REMOTE_ADDR']; $mail = new SendMail(); - $mail->setReplyTo($_POST['email'], $_POST['name']); + if(!empty(trim($_POST['email'] ?? ''))) { + $mail->setReplyTo(trim($_POST['email']), trim($_POST['name'])); + } $mail->setTo('kontakt@dialyse-berlin.net', 'Kontaktformular'); // $mail->setTo('dominic.zirpel@web.de', 'Kontaktformular'); $mail->setSubject('Kontaktformular - Dialyse Homepage'); - $mail->setBody(sprintf("Name: %s %s\nTelefon: %s\nIP: %s\nE-Mail: %s\n-----------------------------\n%s", $_POST['surname'], $_POST['name'], $_POST['phone'], $ip, $_POST['email'], $_POST['message'])); + $mail->setBody(sprintf("Name: %s %s\nTelefon: %s\nIP: %s\nE-Mail: %s\n-----------------------------\n%s", $_POST['surname'] ?? '', $_POST['name'] ?? '', $_POST['phone'] ?? '', $ip, $_POST['email'] ?? '', $_POST['message'] ?? '')); if($mail->send()) { $session->remove('form'); $session->set('alert-class', 'alert-success'); diff --git a/files/dialyse_flyer.pdf b/files/dialyse_flyer.pdf index 0d5d5af..71a4f47 100644 Binary files a/files/dialyse_flyer.pdf and b/files/dialyse_flyer.pdf differ diff --git a/files/flyer_template.html b/files/flyer_template.html index 9cdba18..fec89c5 100644 --- a/files/flyer_template.html +++ b/files/flyer_template.html @@ -19,8 +19,8 @@ font-family: 'Open Sans', Arial, Helvetica, sans-serif; color: #1e293b; background: #ffffff; - line-height: 1.35; - font-size: 8.5pt; + line-height: 1.36; + font-size: 8.2pt; -webkit-print-color-adjust: exact; print-color-adjust: exact; } @@ -29,11 +29,10 @@ width: 210mm; height: 297mm; position: relative; - padding: 9.5mm 12mm; + padding: 9mm 11.5mm 8.5mm; overflow: hidden; display: flex; flex-direction: column; - justify-content: space-between; } /* Header */ @@ -41,60 +40,21 @@ display: flex; justify-content: space-between; align-items: center; - padding-bottom: 2mm; + padding-bottom: 2.5mm; border-bottom: 2px solid #0284c7; + margin-bottom: 3mm; } .brand { display: flex; align-items: center; - gap: 3mm; - } - - .logo-badge { - width: 36px; - height: 36px; - background: linear-gradient(135deg, #07384d 0%, #0284c7 100%); - border-radius: 7px; - display: flex; - align-items: center; - justify-content: center; - color: #ffffff; - flex-shrink: 0; - } - - .logo-badge svg { - width: 22px; - height: 22px; - fill: currentColor; - } - - .brand-text h1 { - font-size: 14pt; - font-weight: 800; - color: #07384d; - line-height: 1.1; - letter-spacing: -0.01em; - } - - .brand-text h1 span { - color: #0284c7; - } - - .brand-text p { - font-size: 7pt; - font-weight: 600; - color: #64748b; - text-transform: uppercase; - letter-spacing: 0.05em; - margin-top: 1px; } .header-contact { text-align: right; - font-size: 7.8pt; + font-size: 8pt; color: #07384d; - line-height: 1.25; + line-height: 1.35; } .header-contact strong { @@ -111,9 +71,8 @@ background: linear-gradient(135deg, #07384d 0%, #0b4f6c 100%); color: #ffffff; border-radius: 6px; - padding: 2.8mm 4mm; - margin-top: 2mm; - margin-bottom: 2mm; + padding: 2.8mm 4.2mm; + margin-bottom: 3mm; display: flex; justify-content: space-between; align-items: center; @@ -121,83 +80,101 @@ } .motto-text { - font-size: 9.8pt; + font-size: 9.6pt; font-weight: 700; font-style: italic; color: #f0f9ff; - } - - .motto-sub { - font-size: 7.2pt; - color: #bae6fd; white-space: nowrap; } - /* Physicians Row (Shortened to Name & Role) */ + .motto-sub { + font-size: 7.4pt; + color: #bae6fd; + white-space: nowrap; + font-weight: 600; + } + + /* Physicians Row */ .physicians-row { display: grid; grid-template-columns: repeat(3, 1fr); - gap: 2.5mm; - margin-bottom: 2.2mm; + gap: 3mm; + margin-bottom: 3.2mm; } .physician-card { background: #f8fafc; border: 1px solid #e2e8f0; - border-left: 3px solid #0284c7; - border-radius: 5px; - padding: 2mm 2.5mm; + border-left: 3.5px solid #0284c7; + border-radius: 6px; + padding: 2.4mm 3mm; } .physician-name { - font-size: 8.5pt; + font-size: 8.8pt; font-weight: 700; color: #07384d; - line-height: 1.2; + line-height: 1.22; } .physician-role { - font-size: 7pt; + font-size: 7.3pt; font-weight: 600; color: #0284c7; - margin-top: 1px; - line-height: 1.2; + margin-top: 0.5mm; + line-height: 1.22; + } + + .physician-meta { + font-size: 6.7pt; + color: #64748b; + margin-top: 0.8mm; } /* Main 2-Column Content Grid */ .content-grid { display: grid; grid-template-columns: 1fr 1fr; - gap: 3.5mm; + gap: 3.6mm; + flex: 1; + margin-bottom: 3.2mm; + } + + .col-stack { + display: flex; + flex-direction: column; + gap: 3mm; + height: 100%; } .section-card { background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 6px; - padding: 2.8mm 3.2mm; - margin-bottom: 2.2mm; + padding: 3mm 3.6mm; } - .section-card:last-child { - margin-bottom: 0; + .section-card.card-grow { + flex: 1; + display: flex; + flex-direction: column; } .card-header { display: flex; align-items: center; - gap: 4px; - font-size: 8.3pt; + gap: 5px; + font-size: 8.8pt; font-weight: 700; color: #07384d; - margin-bottom: 1.2mm; - padding-bottom: 0.8mm; + margin-bottom: 1.8mm; + padding-bottom: 1.1mm; border-bottom: 1px solid #e2e8f0; } .card-header svg { - width: 12px; - height: 12px; + width: 13px; + height: 13px; fill: #0284c7; flex-shrink: 0; } @@ -205,15 +182,15 @@ /* Lists & Details */ .check-list { list-style: none; - font-size: 7.1pt; + font-size: 7.7pt; color: #334155; } .check-list li { position: relative; - padding-left: 11px; - margin-bottom: 0.8mm; - line-height: 1.25; + padding-left: 12px; + margin-bottom: 1.25mm; + line-height: 1.32; } .check-list li:last-child { @@ -227,17 +204,33 @@ top: 0; color: #0284c7; font-weight: bold; - font-size: 7.5pt; + font-size: 7.9pt; + } + + .sub-note { + display: block; + font-size: 7.1pt; + color: #475569; + margin-top: 0.3mm; + line-height: 1.28; } /* Schedule rows */ + .sched-list { + display: flex; + flex-direction: column; + justify-content: space-around; + flex: 1; + } + .sched-item { display: flex; justify-content: space-between; - font-size: 7.1pt; - padding: 0.7mm 0; + align-items: center; + font-size: 7.7pt; + padding: 1.4mm 0; border-bottom: 1px dashed #e2e8f0; - line-height: 1.25; + line-height: 1.35; } .sched-item:last-child { @@ -248,6 +241,7 @@ .sched-title { font-weight: 700; color: #07384d; + white-space: nowrap; } .sched-hours { @@ -258,28 +252,44 @@ .badge-tag { background: #e0f2fe; color: #0369a1; - font-size: 5.8pt; + font-size: 6.3pt; font-weight: 700; - padding: 0.5px 3px; - border-radius: 2px; + padding: 0.5px 3.5px; + border-radius: 3px; margin-right: 2px; } /* Locations */ .loc-block { - margin-bottom: 1.8mm; - font-size: 7.1pt; - line-height: 1.25; + margin-bottom: 2.4mm; + font-size: 7.7pt; + line-height: 1.36; } .loc-block:last-child { margin-bottom: 0; } + .loc-head-row { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 0.5mm; + } + .loc-head { font-weight: 700; color: #07384d; - font-size: 7.6pt; + font-size: 8.2pt; + } + + .loc-badge { + background: #e0f2fe; + color: #0369a1; + font-size: 6.6pt; + font-weight: 700; + padding: 0.4mm 1.8mm; + border-radius: 99px; } .loc-body { @@ -293,19 +303,19 @@ /* Anfahrt & Map */ .anfahrt-flex { display: flex; - gap: 3mm; + gap: 3.2mm; align-items: center; } .anfahrt-text { flex: 1; - font-size: 7pt; + font-size: 7.5pt; color: #475569; - line-height: 1.22; + line-height: 1.32; } .anfahrt-text p { - margin-bottom: 0.8mm; + margin-bottom: 1.2mm; } .anfahrt-text p:last-child { @@ -313,26 +323,64 @@ } .map-thumb { - width: 32mm; - height: 36mm; + width: 35mm; + height: 40mm; object-fit: contain; border: 1px solid #cbd5e1; - border-radius: 4px; + border-radius: 5px; background: #ffffff; padding: 1mm; flex-shrink: 0; } + /* Photo Showcase Card */ + .photo-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 2.6mm; + flex: 1; + } + + .photo-item { + position: relative; + border-radius: 5px; + overflow: hidden; + border: 1px solid #cbd5e1; + height: 100%; + min-height: 58mm; + } + + .photo-item img { + width: 100%; + height: 100%; + object-fit: cover; + object-position: center 65%; + display: block; + } + + .photo-caption { + position: absolute; + bottom: 0; + left: 0; + right: 0; + background: linear-gradient(to top, rgba(7, 56, 77, 0.9), rgba(7, 56, 77, 0)); + color: #ffffff; + font-size: 6.6pt; + font-weight: 600; + padding: 3.5mm 2.2mm 1.2mm; + white-space: nowrap; + } + /* Bottom Callout & Footer */ .footer-callout { background: linear-gradient(135deg, #07384d 0%, #0284c7 100%); color: #ffffff; border-radius: 6px; - padding: 2.5mm 4mm; + padding: 2.8mm 4.2mm; display: flex; justify-content: space-between; align-items: center; - margin-top: 2.2mm; + gap: 3mm; } .callout-left { @@ -340,19 +388,21 @@ } .callout-title { - font-size: 8.5pt; + font-size: 8.6pt; font-weight: 700; - margin-bottom: 0.5mm; + margin-bottom: 0.4mm; + white-space: nowrap; } .callout-sub { - font-size: 6.8pt; + font-size: 7pt; color: #e0f2fe; + white-space: nowrap; } .callout-channels { display: flex; - gap: 5mm; + gap: 4.5mm; align-items: center; } @@ -366,11 +416,11 @@ font-weight: 600; color: #bae6fd; text-transform: uppercase; - letter-spacing: 0.05em; + letter-spacing: 0.04em; } .callout-item .channel-val { - font-size: 9.8pt; + font-size: 9pt; font-weight: 800; color: #ffffff; white-space: nowrap; @@ -378,12 +428,13 @@ .flyer-bottom-info { border-top: 1px solid #e2e8f0; - padding-top: 1.2mm; + padding-top: 1.4mm; margin-top: 1.8mm; display: flex; justify-content: space-between; - font-size: 6.6pt; + font-size: 6.3pt; color: #64748b; + white-space: nowrap; } @@ -393,41 +444,43 @@
+
ÖPNV: S-Bahn S5 bis S-Bhf. Berlin-Mahlsdorf, von dort wenige Minuten Fußweg oder per Bus.
-Pkw: Über die B1 / B5 (Alt-Mahlsdorf) in die Hönower Str., weiter über Waldowstr. / Wilhelmsmühlenweg in die Thorner Str. 1.
-Gute Parkmöglichkeiten direkt vor der Praxis vorhanden.
+ÖPNV: S-Bahn S5 oder Regionalbahn bis S-Bhf. Berlin-Mahlsdorf, von dort wenige Minuten Fußweg oder per Bus.
+Pkw: Über die B1 / B5 (Alt-Mahlsdorf) in die Hönower Str., weiter über Waldowstr. und Wilhelmsmühlenweg in die Thorner Str. 1.
+✓ Gute Parkmöglichkeiten direkt vor der Praxis vorhanden.
+
+
+
+