diff --git a/css/frontend.css b/css/frontend.css index 6c8ffa9..fe3aecd 100644 --- a/css/frontend.css +++ b/css/frontend.css @@ -201,24 +201,40 @@ li { .top-bar { background-color: var(--primary-dark); color: #d1e5ed; - font-size: 0.85rem; - padding: 0.5rem 0; + font-size: 0.82rem; + padding: 0.45rem 0; border-bottom: 1px solid rgba(255, 255, 255, 0.08); + white-space: nowrap; +} + +.top-bar .container { + max-width: 1400px; } .top-bar-inner { display: flex; justify-content: space-between; align-items: center; - flex-wrap: wrap; - gap: 0.75rem; + flex-wrap: nowrap; + gap: 1rem; + width: 100%; } -.top-bar-left, .top-bar-right { +.top-bar-left { display: flex; align-items: center; - flex-wrap: wrap; gap: 1.25rem; + flex-shrink: 0; + white-space: nowrap; +} + +.top-bar-right { + display: flex; + align-items: center; + gap: 1.25rem; + flex-shrink: 0; + margin-left: auto; + white-space: nowrap; } .top-bar a { @@ -228,6 +244,7 @@ li { gap: 0.4rem; text-decoration: none; font-weight: 500; + white-space: nowrap; } .top-bar a:hover { @@ -239,6 +256,8 @@ li { display: inline-flex; align-items: center; gap: 0.4rem; + white-space: nowrap; + flex-shrink: 0; } .top-bar-icon { @@ -246,6 +265,14 @@ li { height: 14px; fill: currentColor; opacity: 0.85; + flex-shrink: 0; +} + +/* Anti-Spam Email Obfuscation (RTL Bidi Fallback) */ +.c-rev { + unicode-bidi: bidi-override; + direction: rtl; + display: inline; } /* ========================================================================== @@ -984,9 +1011,11 @@ li { padding: 1.75rem; box-shadow: var(--shadow-sm); display: flex; - gap: 1.5rem; + flex-direction: column; + gap: 1.25rem; align-items: flex-start; transition: var(--transition); + height: 100%; } .doctor-card:hover { @@ -1015,6 +1044,9 @@ li { .doctor-info { flex: 1; + display: flex; + flex-direction: column; + width: 100%; } .doctor-name { @@ -1028,12 +1060,15 @@ li { color: var(--accent); font-weight: 600; font-size: 0.95rem; + line-height: 1.4; + min-height: 2.8em; margin-bottom: 0.5rem; } .doctor-meta { font-size: 0.9rem; color: var(--text-muted); + margin-bottom: 1rem; } .doctor-meta span { @@ -1048,10 +1083,11 @@ li { font-size: 0.8rem; background-color: var(--bg-alt); color: var(--primary); - padding: 0.25rem 0.65rem; + padding: 0.3rem 0.65rem; border-radius: var(--radius-sm); - margin-top: 0.65rem; + margin-top: auto; font-weight: 600; + align-self: flex-start; } /* ========================================================================== @@ -1432,6 +1468,28 @@ textarea.form-control { Responsive Media Queries ========================================================================== */ +/* Prioritized Address Hiding when space is limited */ +@media screen and (max-width: 1240px) { + .top-bar-addr-satellite { + display: none !important; + } +} + +@media screen and (max-width: 992px) { + .top-bar-left { + display: none !important; + } + + .top-bar-inner { + justify-content: center !important; + } + + .top-bar-right { + margin-left: 0 !important; + justify-content: center !important; + } +} + /* Tablet (max 1024px) */ @media screen and (max-width: 1024px) { .grid-4 { @@ -1457,11 +1515,20 @@ textarea.form-control { .top-bar-inner { justify-content: center; text-align: center; + overflow-x: auto; + scrollbar-width: none; + -webkit-overflow-scrolling: touch; } - .top-bar-left, .top-bar-right { + .top-bar-inner::-webkit-scrollbar { + display: none; + } + + .top-bar-right { justify-content: center; - gap: 0.75rem; + gap: 0.85rem; + font-size: 0.8rem; + flex-wrap: nowrap; } .site-header { @@ -1560,6 +1627,11 @@ textarea.form-control { /* Small Smartphone (max 480px) */ @media screen and (max-width: 480px) { + .top-bar-right { + gap: 0.65rem; + font-size: 0.76rem; + } + .logo-title { font-size: 1.05rem; } diff --git a/files/dialyse_flyer.pdf b/files/dialyse_flyer.pdf index cc812ee..7f4997f 100644 Binary files a/files/dialyse_flyer.pdf and b/files/dialyse_flyer.pdf differ diff --git a/files/flyer_map.png b/files/flyer_map.png new file mode 100644 index 0000000..e9caf09 Binary files /dev/null and b/files/flyer_map.png differ diff --git a/files/flyer_template.html b/files/flyer_template.html new file mode 100644 index 0000000..bb3561a --- /dev/null +++ b/files/flyer_template.html @@ -0,0 +1,573 @@ + + + + +Praxis-Flyer | Dialysezentrum Berlin-Mahlsdorf + + + + +
+ +
+
+
+ +
+
+

DIALYSEZENTRUM Berlin-Mahlsdorf

+

Zentrum für Innere Medizin • Nephrologische Schwerpunktpraxis

+
+
+
+
Tel. 030 / 566 24 84
+
E-Mail:
+
Web: www.dialyse-berlin.net
+
+
+ + +
+
„Die individuelle Dialyse im grünen Gürtel von Berlin“
+
Seit 1992 • 2 Standorte • Feriendialyse • Barrierefrei
+
+ + +
+
+
Dr. med. Bianca Bischoff
+
Fachärztin für Innere Medizin & Nephrologie
+
+
+
Dr. med. Juliane Hoffzimmer
+
Fachärztin für Innere Medizin & Nephrologie
+
+
+
Dr. med. Claudia Körner
+
Fachärztin für Innere Medizin
+
+
+ + +
+ +
+ +
+
+ + Leistungsspektrum & Medizintechnik +
+
    +
  • Nephrologische Ambulanz: Diagnostik & Therapie aller Nierenerkrankungen
  • +
  • Optimale Blutdruck- & Blutzuckereinstellung als Schwerpunkt
  • +
  • Spezialisierte Betreuung niereninsuffizienter Diabetiker
  • +
  • Sonographie (Ultraschall Nieren/Abdomen), EKG, 24h-Blutdruck
  • +
  • Hämodialyse & Hämodiafiltration (HDF): Nikkiso DBB-07 und Nikkiso DBB-EXA mit Hemo-Master
  • +
  • Fresenius BCM: Bioelektrische Blutvolumenmessung
  • +
  • Vorbereitung & Betreuung transplantierter Patienten • Ernährungsberatung
  • +
+
+ + +
+
+ + Feriendialyse & Patientenkomfort +
+
    +
  • Ganzjährige Feriendialysen für Berlin-Besucher und Urlauber
  • +
  • Vollständig barrierefreier Zugang für bewegungseingeschränkte Patienten
  • +
  • Wohlfühlatmosphäre mit kostenlosem WLAN, TV & Imbiss- und Getränkeservice
  • +
  • Enge Zusammenarbeit mit Haus- & Fachärzten und umliegenden Krankenhäusern
  • +
+
+ + +
+
+ + Behandlungs- & Sprechzeiten +
+
+
Dialyse (Mo, Mi, Fr):
+
+
1. Schicht 07:00 – 13:00 Uhr
+
2. Schicht 13:00 – 18:00 Uhr
+
3. Schicht 14:30 – 20:00 Uhr
+
+
+
+
Dialyse (Di, Do, Sa):
+
1. Schicht 07:00 – 13:00 Uhr
+
+
+
Ambulanz (Mo, Mi, Fr):
+
08:30 – 11:30 • n. Vereinb. 14:00 – 17:00
+
+
+
Ambulanz (Di, Do):
+
08:30 – 12:00 Uhr
+
+
+
+ + +
+ +
+
+ + Unsere Standorte in Berlin +
+
+
Zentrumsdialyse (Hauptpraxis & Ambulanz)
+
+ Thorner Straße 1 • 12623 Berlin (16 Behandlungsplätze)
+ Telefon Dialyse: 030 / 566 24 84
+ Telefon Ambulanz: 030 / 566 25 39
+ E-Mail: kontakt@dialyse-berlin.net +
+
+
+
Satellitendialyse
+
+ Blumberger Damm 130 • 12685 Berlin (18 Behandlungsplätze)
+ Eingang: Pritzhagener Weg 21 +
+
+
+ + +
+
+ + Anfahrt (Thorner Straße 1) +
+
+
+

Ö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.

+
+ Lageplan +
+
+ + +
+ Praxis aussen +
+
+
+ + + + + +
+
Dialysezentrum Berlin-Mahlsdorf • Dr. med. B. Bischoff & Dr. med. J. Hoffzimmer
+
E-Mail: kontakt@dialyse-berlin.net • Web: www.dialyse-berlin.net
+
Thorner Str. 1, 12623 Berlin • Blumberger Damm 130, 12685 Berlin
+
+
+ + + diff --git a/img/gallery/praxis1.jpg b/img/gallery/praxis1.jpg index 12605ab..f23a2ec 100644 Binary files a/img/gallery/praxis1.jpg and b/img/gallery/praxis1.jpg differ diff --git a/img/gallery/praxis1_thumb.jpg b/img/gallery/praxis1_thumb.jpg index 9c47b62..f23a2ec 100644 Binary files a/img/gallery/praxis1_thumb.jpg and b/img/gallery/praxis1_thumb.jpg differ diff --git a/img/gallery/praxis3.jpg b/img/gallery/praxis3.jpg index 6dcb673..0387de0 100644 Binary files a/img/gallery/praxis3.jpg and b/img/gallery/praxis3.jpg differ diff --git a/img/gallery/praxis3_thumb.jpg b/img/gallery/praxis3_thumb.jpg index 3c05985..0387de0 100644 Binary files a/img/gallery/praxis3_thumb.jpg and b/img/gallery/praxis3_thumb.jpg differ diff --git a/img/gallery/praxis4.jpg b/img/gallery/praxis4.jpg index b589086..b78209b 100644 Binary files a/img/gallery/praxis4.jpg and b/img/gallery/praxis4.jpg differ diff --git a/img/gallery/praxis4_thumb.jpg b/img/gallery/praxis4_thumb.jpg index 39cd3b4..b78209b 100644 Binary files a/img/gallery/praxis4_thumb.jpg and b/img/gallery/praxis4_thumb.jpg differ diff --git a/img/gallery/praxis6.jpg b/img/gallery/praxis6.jpg index 303cb6c..5b6f0d1 100644 Binary files a/img/gallery/praxis6.jpg and b/img/gallery/praxis6.jpg differ diff --git a/img/gallery/praxis6_thumb.jpg b/img/gallery/praxis6_thumb.jpg index 8ecbf68..5b6f0d1 100644 Binary files a/img/gallery/praxis6_thumb.jpg and b/img/gallery/praxis6_thumb.jpg differ diff --git a/img/gallery/praxis7.jpg b/img/gallery/praxis7.jpg index f53e613..4b6b4fd 100644 Binary files a/img/gallery/praxis7.jpg and b/img/gallery/praxis7.jpg differ diff --git a/img/gallery/praxis7_thumb.jpg b/img/gallery/praxis7_thumb.jpg index d3b4278..4b6b4fd 100644 Binary files a/img/gallery/praxis7_thumb.jpg and b/img/gallery/praxis7_thumb.jpg differ diff --git a/img/gallery/praxis8.jpg b/img/gallery/praxis8.jpg index 86e5f09..e95daea 100644 Binary files a/img/gallery/praxis8.jpg and b/img/gallery/praxis8.jpg differ diff --git a/img/gallery/praxis8_thumb.jpg b/img/gallery/praxis8_thumb.jpg index 7dc9469..e95daea 100644 Binary files a/img/gallery/praxis8_thumb.jpg and b/img/gallery/praxis8_thumb.jpg differ diff --git a/img/gallery/startseite1.jpg b/img/gallery/startseite1.jpg index bab5e6d..7fae9e6 100644 Binary files a/img/gallery/startseite1.jpg and b/img/gallery/startseite1.jpg differ diff --git a/img/gallery/startseite1_thumb.jpg b/img/gallery/startseite1_thumb.jpg index e2fd866..7fae9e6 100644 Binary files a/img/gallery/startseite1_thumb.jpg and b/img/gallery/startseite1_thumb.jpg differ diff --git a/js/contact.js b/js/contact.js index 911e7e7..c06f8ab 100644 --- a/js/contact.js +++ b/js/contact.js @@ -3,13 +3,52 @@ * Dialysezentrum Berlin-Mahlsdorf */ -function sending() { - // Obfuscated mailto link to prevent bot harvesting - var parts = ['kontakt', 'dialyse-berlin.net']; - window.location.href = 'mailto:' + parts[0] + '@' + parts[1]; +function sending(user, domain, tld) { + user = user || 'kontakt'; + domain = domain || 'dialyse-berlin'; + tld = tld || 'net'; + window.location.href = 'mailto:' + user + '@' + domain + '.' + tld; return true; } +function initObfuscatedEmails() { + // Dynamically reconstruct obfuscated email links and text for real visitors + $('.mail-obf').each(function() { + var $el = $(this); + var u = $el.attr('data-usr') || $el.data('usr'); + var d = $el.attr('data-dom') || $el.data('dom'); + var t = $el.attr('data-tld') || $el.data('tld'); + if (u && d && t) { + var email = u + '@' + d + '.' + t; + $el.attr('href', 'mailto:' + email); + var $val = $el.find('.mail-val'); + if ($val.length) { + $val.removeClass('c-rev').text(email); + } + } + }); + + $('.mail-obf-text').each(function() { + var $el = $(this); + var u = $el.attr('data-usr') || $el.data('usr'); + var d = $el.attr('data-dom') || $el.data('dom'); + var t = $el.attr('data-tld') || $el.data('tld'); + if (u && d && t) { + var email = u + '@' + d + '.' + t; + var $val = $el.find('.mail-val'); + if ($val.length) { + $val.removeClass('c-rev').text(email); + } else { + $el.text(email); + } + } + }); +} + +$(function() { + initObfuscatedEmails(); +}); + function showMapLocation(loc) { var $frame = $('#mapFrame'); var $addrText = $('#mapAddressText'); @@ -20,14 +59,14 @@ function showMapLocation(loc) { if (loc === 'satellit') { $frame.attr('src', 'https://maps.google.com/maps?q=Blumberger+Damm+130,+12685+Berlin&t=&z=15&ie=UTF8&iwloc=&output=embed'); $addrText.text('Blumberger Damm 130 (Eingang Pritzhagener Weg 21), 12685 Berlin'); - $extLink.attr('href', 'https://www.google.com/maps/place/Dialysezentrum+Berlin-Mahlsdorf+LC/@52.542799,13.5694855,17z/'); + $extLink.attr('href', 'https://www.google.com/maps/place/Dialysezentrum+Berlin-Mahlsdorf+LC/@52.5428128,13.5716785,17z/data=!3m1!4b1!4m6!3m5!1s0x47a84991f9d5111b:0xda0b4785760166c5!8m2!3d52.5428128!4d13.5716785!16s%2Fg%2F1ts_5mmj'); $btnMahlsdorf.removeClass('btn-primary').addClass('btn-outline-primary'); $btnSatellit.removeClass('btn-outline-primary').addClass('btn-primary'); } else { $frame.attr('src', 'https://maps.google.com/maps?q=Thorner+Stra%C3%9Fe+1,+12623+Berlin&t=&z=15&ie=UTF8&iwloc=&output=embed'); $addrText.text('Thorner Straße 1, 12623 Berlin'); - $extLink.attr('href', 'https://www.google.de/maps/place/Dialysezentrum+Berlin-Mahlsdorf/@52.5078935,13.6126659,16z/'); + $extLink.attr('href', 'https://www.google.com/maps/place/Dialysezentrum+Berlin-Mahlsdorf/@52.5078291,13.6092903,17z/data=!3m1!4b1!4m6!3m5!1s0x47a84991f9c57f7f:0xad4486f559442067!8m2!3d52.5078291!4d13.6092903!16s%2Fg%2F1tdqghgn'); $btnMahlsdorf.removeClass('btn-outline-primary').addClass('btn-primary'); $btnSatellit.removeClass('btn-primary').addClass('btn-outline-primary'); diff --git a/lib/Helper.php b/lib/Helper.php index 5d3585d..9a7122e 100644 --- a/lib/Helper.php +++ b/lib/Helper.php @@ -36,4 +36,91 @@ class Helper { return ($dialogShowFrom <= $today && $until > $today); } + + /** + * Generate an obfuscated email link to protect against automated spambot harvesting. + * Raw HTML contains no plain email address or mailto: link. + * Splitting into data attributes with CSS bidi-override fallback renders correctly visually, + * while JavaScript dynamically activates the live mailto link for real human visitors. + * + * @param string $email + * @param string|null $label Optional text/label before or wrapping the email + * @param array $attrs Optional HTML attributes (class, style, title, icon, etc.) + * @return string + */ + public static function obfuscateEmail($email, $label = null, $attrs = []) { + if (strpos($email, '@') === false) { + return htmlspecialchars($email); + } + list($user, $domainPart) = explode('@', $email, 2); + $lastDot = strrpos($domainPart, '.'); + if ($lastDot !== false) { + $domain = substr($domainPart, 0, $lastDot); + $tld = substr($domainPart, $lastDot + 1); + } else { + $domain = $domainPart; + $tld = ''; + } + + $reversed = strrev($email); + $baseClass = isset($attrs['class']) ? $attrs['class'] . ' mail-obf' : 'mail-obf'; + $title = isset($attrs['title']) ? ' title="' . htmlspecialchars($attrs['title']) . '"' : ''; + $style = isset($attrs['style']) ? ' style="' . htmlspecialchars($attrs['style']) . '"' : ''; + $id = isset($attrs['id']) ? ' id="' . htmlspecialchars($attrs['id']) . '"' : ''; + + $content = ''; + if (isset($attrs['icon']) && !empty($attrs['icon'])) { + $content .= $attrs['icon'] . ' '; + } + + if ($label !== null && $label !== '') { + $content .= htmlspecialchars($label) . ' '; + } + + $content .= '' . htmlspecialchars($reversed) . ''; + + return sprintf( + '%s', + htmlspecialchars($baseClass), + htmlspecialchars($user), + htmlspecialchars($domain), + htmlspecialchars($tld), + $title, + $style, + $id, + $content + ); + } + + /** + * Obfuscate plain text email (non-link). + */ + public static function obfuscateEmailText($email, $attrs = []) { + if (strpos($email, '@') === false) { + return htmlspecialchars($email); + } + list($user, $domainPart) = explode('@', $email, 2); + $lastDot = strrpos($domainPart, '.'); + if ($lastDot !== false) { + $domain = substr($domainPart, 0, $lastDot); + $tld = substr($domainPart, $lastDot + 1); + } else { + $domain = $domainPart; + $tld = ''; + } + + $reversed = strrev($email); + $baseClass = isset($attrs['class']) ? $attrs['class'] . ' mail-obf-text' : 'mail-obf-text'; + $style = isset($attrs['style']) ? ' style="' . htmlspecialchars($attrs['style']) . '"' : ''; + + return sprintf( + '%s', + htmlspecialchars($baseClass), + htmlspecialchars($user), + htmlspecialchars($domain), + htmlspecialchars($tld), + $style, + htmlspecialchars($reversed) + ); + } } diff --git a/view/contact.php b/view/contact.php index 72f877a..65c96c4 100644 --- a/view/contact.php +++ b/view/contact.php @@ -22,7 +22,7 @@
Thorner Straße 1
12623 Berlin – Mahlsdorf
- + » In Google Maps öffnen
@@ -44,20 +44,13 @@ -
- -
Telefax:
-
- 030 / 566 25 30 -
-
E-Mail:
- - kontakt@dialyse-berlin.net + + net.nilreb-esylaid@tkatnok
@@ -79,7 +72,7 @@ Blumberger Damm 130
(Eingang: Pritzhagener Weg 21)
12685 Berlin
- + » In Google Maps öffnen @@ -88,11 +81,15 @@
- + + Direkt per E-Mail schreiben: net.nilreb-esylaid@tkatnok + + + Online-Kontaktformular aufrufen » - + Praxis-Flyer herunterladen (PDF) @@ -119,7 +116,7 @@
Thorner Straße 1, 12623 Berlin - + Große Routenkarte »
diff --git a/view/frontend.php b/view/frontend.php index 4c50fc4..c0ce237 100644 --- a/view/frontend.php +++ b/view/frontend.php @@ -32,7 +32,7 @@ $currentAction = isset($action) ? $action : 'main'; - + @@ -47,13 +47,13 @@ $currentAction = isset($action) ? $action : 'main';
- + - Thorner Str. 1, 12623 Berlin-Mahlsdorf + Thorner Str. 1, 12623 Berlin - + - Satellit: Blumberger Damm 130, 12685 Berlin + Satellit: Blumberger Damm 130, 12685 Berlin
@@ -65,10 +65,10 @@ $currentAction = isset($action) ? $action : 'main'; Ambulanz: 030 / 566 25 39 - - - Fax: 030 / 566 25 30 - + + + net.nilreb-esylaid@tkatnok +
@@ -179,7 +179,7 @@ $currentAction = isset($action) ? $action : 'main';