1<!doctype html> 2<html lang="de"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 6 <title>Karriere – PHARMA CONCEPT</title> 7<meta name='robots' content='max-image-preview:large' /> 8 <style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style> 9 <link rel="alternate" type="application/rss+xml" title="PHARMA CONCEPT » Feed" href="https://pharma-concept.de/feed/" /> 10<link rel="alternate" type="application/rss+xml" title="PHARMA CONCEPT » Kommentar-Feed" href="https://pharma-concept.de/comments/feed/" /> 11<style id='classic-theme-styles-inline-css'> 12/*! This file is auto-generated */ 13.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} 14</style> 15<link rel='stylesheet' id='minymal-style-custom-css' href='https://pharma-concept.de/wp-content/themes/e/dist/css/style.425fb0265631af219c498064d951bd9bc5b5b31d82444264c69fb47e5f47e774.css' media='all' />
16<script src="https://pharma-concept.de/wp/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
vendor: 1 bytes, line 16
16
17<script src="https://pharma-concept.de/wp/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
17 18<link rel="canonical" href="https://pharma-concept.de/karriere/" />
19<script> 20 var g_tqtools_structureddata_lang = 'de'; 21 var g_tqtools_structureddata_url_restv1 = 'https://pharma-concept.de/wp-json/tq-tools/structureddata/v1'; 22</script>
vendor: 1 bytes, line 22
22
23<script> 24 var g_tqtools_easyrest_lang = 'de'; 25 var g_tqtools_easyrest_url_restv1 = 'https://pharma-concept.de/wp-json/tq-tools/easyrest/v1'; 26</script>
26 27 28<link rel="icon" href="/wp-content/themes/e/dist/favicon/favicon.svg" type="image/svg+xml"> 29<link rel="icon" href="/wp-content/themes/e/dist/favicon/favicon-16.png" sizes="16x16" type="image/png"> 30<link rel="icon" href="/wp-content/themes/e/dist/favicon/favicon-32.png" sizes="32x32" type="image/png"> 31<link rel="apple-touch-icon" href="/wp-content/themes/e/dist/favicon/favicon-180.png" sizes="180x180" type="image/png"> 32<link rel="icon" href="/wp-content/themes/e/dist/favicon/favicon-192.png" sizes="192x192" type="image/png"><meta name="theme-color" content="#fff">
33<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":["MedicalBusiness"],"name":"PHARMA CONCEPT GmbH","address":{"@type":"PostalAddress","streetAddress":"Ma\u00dfholderstra\u00dfe 5","addressLocality":"Bad Endbach","addressRegion":"HE","postalCode":"35080","addressCountry":"DE"},"geo":{"@type":"GeoCoordinates","latitude":50.756727519055666,"longitude":8.46387532785336},"telephone":"+4927762338800","email":"[email protected]","sameAs":["https:\/\/www.facebook.com\/Einhundert.PharmaConcept#","https:\/\/www.linkedin.com\/company\/einhundert-pharma-concept\/","https:\/\/www.instagram.com\/einhundert_pharma_concept"],"url":"https:\/\/pharma-concept.de"}</script>
33</head> 34 35<body class="wp-singular page page-id-235 wp-theme-e karriere"> 36<header class="container-fluid page-header"> 37 <nav class="navbar navbar-expand-xl navbar-light py-0" role="navigation"> 38 <div class="container "> 39 <a class="navbar-brand" href="https://pharma-concept.de/"> 40 <img class="header-brand-logo" src="https://pharma-concept.de/wp-content/themes/e/dist/images/logo.svg" 41 alt="PHARMA CONCEPT"> 42 </a> 43 <button class="navbar-toggler" type="button" data-bs-toggle="collapse" 44 data-bs-target="#navbarNavDropdown" 45 aria-controls="navbarNavDropdown" aria-expanded="false" 46 aria-label="Navigation um/anschalten"> 47 <span class="icon hamburger"></span> 48 </button> 49 <div class="collapse navbar-collapse" id="navbarNavDropdown"> 50 <ul id="bs-primary-navbar-collapse-inner" class="navbar-nav main-nav"><li id="12345" class="menu-item menu-item-type-custom menu-item-object-custom nav-item nav-item-109"><a href="/#block_1" class="nav-link ">Ãber uns</a></li> 51<li id="12345" class="menu-item menu-item-type-custom menu-item-object-custom nav-item nav-item-111"><a href="/#block_2" class="nav-link ">Services</a></li> 52<li id="12345" class="menu-item menu-item-type-custom menu-item-object-custom nav-item nav-item-112"><a href="/#block_11" class="nav-link ">Kontakt</a></li> 53<li id="12345" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-235 current_page_item nav-item nav-item-240"><a href="https://pharma-concept.de/karriere/" class="nav-link active">Karriere</a></li> 54</ul> </div> 55 </div> 56 </nav> 57</header> 58<!-- end of header.php --> 59 <main id="main-content" class="hyphenate"> 60 <div class="hero-banner"> 61 <picture> 62 <source media="(min-width: 992px)" type="image/webp" width="1920" height="1080" srcset="https://pharma-concept.de/uploads/2025/11/Karriere-1920x1080.jpg.webp 1920w, https://pharma-concept.de/uploads/2025/11/Karriere-768x432.jpg.webp 768w, https://pharma-concept.de/uploads/2025/11/Karriere-384x216.jpg.webp 384w" sizes="1400px"> 63 <source media="(min-width: 768px)" type="image/webp" width="1000" height="1000" srcset="https://pharma-concept.de/uploads/2025/11/Karriere-1000x1000.jpg.webp 1000w, https://pharma-concept.de/uploads/2025/11/Karriere-500x500.jpg.webp 500w, https://pharma-concept.de/uploads/2025/11/Karriere-250x250.jpg.webp 250w" sizes="100vw"> 64 <source media="(min-width: 576px)" type="image/webp" width="500" height="1000" srcset="https://pharma-concept.de/uploads/2025/11/Karriere-500x1000.jpg.webp 500w, https://pharma-concept.de/uploads/2025/11/Karriere-250x500.jpg.webp 250w, https://pharma-concept.de/uploads/2025/11/Karriere-125x250.jpg.webp 125w" sizes="100vw"> 65 <source media="(min-width: 992px)" type="image/jpeg" width="1920" height="1080" srcset="https://pharma-concept.de/uploads/2025/11/Karriere-1920x1080.jpg 1920w, https://pharma-concept.de/uploads/2025/11/Karriere-768x432.jpg 768w, https://pharma-concept.de/uploads/2025/11/Karriere-384x216.jpg 384w" sizes="1400px"> 66 <source media="(min-width: 768px)" type="image/jpeg" width="1000" height="1000" srcset="https://pharma-concept.de/uploads/2025/11/Karriere-1000x1000.jpg 1000w, https://pharma-concept.de/uploads/2025/11/Karriere-500x500.jpg 500w, https://pharma-concept.de/uploads/2025/11/Karriere-250x250.jpg 250w" sizes="100vw"> 67 <source media="(min-width: 576px)" type="image/jpeg" width="500" height="1000" srcset="https://pharma-concept.de/uploads/2025/11/Karriere-500x1000.jpg 500w, https://pharma-concept.de/uploads/2025/11/Karriere-250x500.jpg 250w, https://pharma-concept.de/uploads/2025/11/Karriere-125x250.jpg 125w" sizes="100vw"> 68 <img srcset="https://pharma-concept.de/uploads/2025/11/Karriere-500x1000.jpg 500w, https://pharma-concept.de/uploads/2025/11/Karriere-250x500.jpg 250w, https://pharma-concept.de/uploads/2025/11/Karriere-125x250.jpg 125w" sizes="100vw" width="125" height="250" src="https://pharma-concept.de/uploads/2025/11/Karriere-125x250.jpg" loading="eager" alt=""> 69</picture> <div class="content"> 70 <h1 class='headline h2'>KARRIERE 71</h1> 72 <p class="hero-banner-text"></p> 73 74 </div> <div class="linear-gradient"></div> 75 </div> 76 <section class="accordion-standard-section light-background"> 77 <div class="container"> 78 <h2 class="h1">OFFENE STELLEN</h2> 79 <div id="accordion-1" class="accordion"> 80 81 82<div class="accordion-item"> 83 <div class="accordion-header" id="item-1"> 84 <button class="btn accordion-button collapsed" 85 data-bs-toggle="collapse" 86 data-bs-target="#collapse-1" 87 aria-expanded="true>" 88 aria-controls="collapse-1"> 89 Experte CQV <span class="angles down icon"></span> 90 </button> 91 </div> 92 <div id="collapse-1" 93 class="accordion-collapse collapse" 94 data-bs-parent="#accordion-1" 95 aria-labelledby="item-1"> 96 <div class="accordion-body"> 97 <p><strong>Traumjob gesucht?</strong></p> 98<p><strong>Experte CQV (m/w/d)</strong></p> 99<p>Heftiger CQV-Experte?<br /> 100Wir sollten reden!</p> 101<p><strong>Deine Verantwortung</strong></p> 102<ul> 103<li>Prozessvalidierung</li> 104<li>Enger Kundenkontakt</li> 105<li>Durchführung DQ/IQ/OQ/PQ</li> 106<li>Inbetriebnahme von Anlagen</li> 107<li>Computer System Validierung</li> 108<li>Programmierkenntnisse PCS7/TIA</li> 109<li>Prüfen technischer Dokumentation</li> 110<li>Qualifizierungsdokumente erstellen</li> 111</ul> 112<p><strong>Deine Erfahrung</strong></p> 113<ul> 114<li>Anlagenbau</li> 115<li>DQ/IQ/OQ/PQ</li> 116<li>GxP / Annex 1</li> 117<li>Sterile Abfüllung</li> 118<li>Prozessvalidierung</li> 119<li>SPS Programmierung</li> 120<li>Aseptic Process Simulation</li> 121</ul> 122<p><strong>Key Facts</strong></p> 123<p><em>Home Base</em><br /> 124Bad Endbach oder Dessau-RoÃlau</p> 125<p><em>Arbeitsort</em><br /> 126Im Büro, mobil und bei unseren Kunden</p> 127<p><em>Arbeitszeit & Urlaub</em><br /> 128Entscheide selbst!</p> 129<p>Was wir tun und ob wir zueinander passen – jetzt checken!</p> 130 </div> 131 </div> 132</div> 133 134 135 136<div class="accordion-item"> 137 <div class="accordion-header" id="item-2"> 138 <button class="btn accordion-button collapsed" 139 data-bs-toggle="collapse" 140 data-bs-target="#collapse-2" 141 aria-expanded="false>" 142 aria-controls="collapse-2"> 143 Experte Prozesstechnik <span class="angles down icon"></span> 144 </button> 145 </div> 146 <div id="collapse-2" 147 class="accordion-collapse collapse" 148 data-bs-parent="#accordion-1" 149 aria-labelledby="item-2"> 150 <div class="accordion-body"> 151 <p><strong>Traumjob gesucht?</strong></p> 152<p><strong>Experte Prozesstechnik (m/w/d)</strong></p> 153<p>Starker Pharmaprozess-Experte?<br /> 154Wir sollten reden!</p> 155<p><strong>Deine Verantwortung</strong></p> 156<ul> 157<li>Fachliche Reviews</li> 158<li>Enger Kundenkontakt</li> 159<li>R+Is lesen & erstellen</li> 160<li>Schnittstellenplanung</li> 161<li>Technologievergleiche</li> 162<li>Basic- & Detail-Engineering</li> 163<li>Spezifikationen ausarbeiten</li> 164<li>Anforderungen prüfen & bewerten</li> 165</ul> 166<p><strong>Deine Erfahrung</strong></p> 167<ul> 168<li>Anlagenbau</li> 169<li>GxP / Annex 1</li> 170<li>Hygienic Design</li> 171<li>Sterile Abfüllung</li> 172<li>Containment Systeme</li> 173</ul> 174<p><strong>Key Facts</strong></p> 175<p><em>Home Base</em><br /> 176Bad Endbach oder Dessau-RoÃlau</p> 177<p><em>Arbeitsort</em><br /> 178Im Büro, mobil und bei unseren Kunden</p> 179<p><em>Arbeitszeit & Urlaub</em><br /> 180Entscheide selbst!</p> 181<p>Was wir tun und ob wir zueinander passen – jetzt checken!</p> 182 </div> 183 </div> 184</div> 185 186 187 188<div class="accordion-item"> 189 <div class="accordion-header" id="item-3"> 190 <button class="btn accordion-button collapsed" 191 data-bs-toggle="collapse" 192 data-bs-target="#collapse-3" 193 aria-expanded="false>" 194 aria-controls="collapse-3"> 195 Technischer Vertrieb <span class="angles down icon"></span> 196 </button> 197 </div> 198 <div id="collapse-3" 199 class="accordion-collapse collapse" 200 data-bs-parent="#accordion-1" 201 aria-labelledby="item-3"> 202 <div class="accordion-body"> 203 <p><strong>Traumjob gesucht?</strong></p> 204<p><strong>Technischer Vertrieb (m/w/d)</strong></p> 205<p>Totaler Experte im technischen Vertrieb?<br /> 206Wir sollten reden!</p> 207<p><strong>Deine Verantwortung</strong></p> 208<ul> 209<li>Betreuung & Beratung von Kunden</li> 210<li>Erarbeitung geeigneter Leistungen</li> 211<li>Analyse technischer Anforderungen</li> 212<li>Planung & Durchführung von Messen</li> 213<li>Erstgespräch mit Fach- & Führungskräften</li> 214<li>Aufbau & Pflege partnerschaftlicher Kundenbeziehungen</li> 215<li>Vertriebstechnische Projektbegleitung</li> 216</ul> 217<p><strong>Deine Erfahrung</strong></p> 218<ul> 219<li>B2B Vertrieb</li> 220<li>GxP / Annex 1</li> 221<li>MS-Office umfänglich</li> 222<li>Akquisition von Neukunden</li> 223<li>Deutsch & Englisch flieÃend</li> 224<li>Kontinuierliche Marktbeobachtung</li> 225<li>Aufbereitung betriebswitschaftlicher Handlungsempfehlungen</li> 226</ul> 227<p><strong>Key Facts</strong></p> 228<p><em>Home Base</em><br /> 229Bad Endbach</p> 230<p><em>Arbeitsort</em><br /> 231Im Büro, mobil und bei unseren Kunden</p> 232<p><em>Arbeitszeit & Urlaub</em><br /> 233Entscheide selbst!</p> 234<p>Was wir tun und ob wir zueinander passen – jetzt checken!</p> 235 </div> 236 </div> 237</div> 238 239 240 241<div class="accordion-item"> 242 <div class="accordion-header" id="item-4"> 243 <button class="btn accordion-button collapsed" 244 data-bs-toggle="collapse" 245 data-bs-target="#collapse-4" 246 aria-expanded="false>" 247 aria-controls="collapse-4"> 248 Experte Qualifizierung <span class="angles down icon"></span> 249 </button> 250 </div> 251 <div id="collapse-4" 252 class="accordion-collapse collapse" 253 data-bs-parent="#accordion-1" 254 aria-labelledby="item-4"> 255 <div class="accordion-body"> 256 <p><strong>Traumjob gesucht?</strong></p> 257<p><strong>Experte Qualifizierung (m/w/d)</strong></p> 258<p>Krasser Experte für Qualifizierung?<br /> 259Wir sollten reden!</p> 260<p><strong>Deine Verantwortung</strong></p> 261<ul> 262<li>Risikoanalysen</li> 263<li>Enger Kundenkontakt</li> 264<li>Durchführung DQ/IQ/OQ/PQ</li> 265<li>Computer System Validierung</li> 266<li>Prozess- & Designentwicklung</li> 267<li>Prüfen technischer Dokumentation</li> 268<li>Material- & SchweiÃdokumentation</li> 269<li>Qualifizierungsdokumente erstellen</li> 270</ul> 271<p><strong>Deine Erfahrung</strong></p> 272<ul> 273<li>Anlagenbau</li> 274<li>DQ/IQ/OQ/PQ</li> 275<li>GxP / Annex 1</li> 276<li>Hygienic Design</li> 277<li>Sterile Abfüllung</li> 278<li>Containment Systeme</li> 279</ul> 280<p><strong>Key Facts</strong></p> 281<p><em>Home Base</em><br /> 282Bad Endbach oder Dessau-RoÃlau</p> 283<p><em>Arbeitsort</em><br /> 284Im Büro, mobil und bei unseren Kunden</p> 285<p><em>Arbeitszeit & Urlaub</em><br /> 286Entscheide selbst!</p> 287<p>Was wir tun und ob wir zueinander passen – jetzt checken!</p> 288 </div> 289 </div> 290</div> 291 292 293 294<div class="accordion-item"> 295 <div class="accordion-header" id="item-5"> 296 <button class="btn accordion-button collapsed" 297 data-bs-toggle="collapse" 298 data-bs-target="#collapse-5" 299 aria-expanded="false>" 300 aria-controls="collapse-5"> 301 Assistenz der Geschäftsführung <span class="angles down icon"></span> 302 </button> 303 </div> 304 <div id="collapse-5" 305 class="accordion-collapse collapse" 306 data-bs-parent="#accordion-1" 307 aria-labelledby="item-5"> 308 <div class="accordion-body"> 309 <p><strong>Traumjob gesucht?</strong></p> 310<p><strong>Assistenz der Geschäftsführung (m/w/d)</strong></p> 311<p>Multitalent oder Universalgenie?<br /> 312Wir sollten reden!</p> 313<p><strong>Deine Verantwortung</strong></p> 314<ul> 315<li>Der erste Eindruck</li> 316<li>Dokumentenerstellung</li> 317<li>Recherche und Analyse</li> 318<li>Betriebsentwicklung unterstützen</li> 319<li>Planung von Meetings & Dienstreisen</li> 320<li>Veranstaltungen planen & organisieren</li> 321<li>Organisation, Ablage & Verwaltung wichtiger Dokumente</li> 322</ul> 323<p><strong>Deine Erfahrung</strong></p> 324<ul> 325<li>Eventplanung</li> 326<li>MS-Office umfänglich</li> 327<li>Dokumentenmanagement</li> 328<li>Finanz- & Lohnbuchhaltung</li> 329<li>Deutsch & Englisch flieÃend</li> 330<li>Pflege & Ablage digitaler Daten</li> 331<li>Effizient, freundlich & zielgerichtet kommunizieren mit Kunden & Partnern</li> 332</ul> 333<p><strong>Key Facts</strong></p> 334<p><em>Home Base</em><br /> 335Bad Endbach</p> 336<p><em>Arbeitsort</em><br /> 337Im Büro & mobil</p> 338<p><em>Arbeitszeit & Urlaub</em><br /> 339Entscheide selbst!</p> 340<p>Was wir tun und ob wir zueinander passen – jetzt checken!</p> 341 </div> 342 </div> 343</div> 344 345 </div> 346 </div> 347</section> 348 349<section id="block_2" class="standard-content-editor dark-background"> 350 <div class="container"> 351 </div> 352 <div class="spalte-wrapper container two-column-one-one"><div class="spalte-1"><h2>DEINE QULIFIKATION</h2> 353<p>Du hast fundierte Berufserfahrung im Bereich der Arzneimittelherstellung? Genial! Du hast Ingenieurwesen studiert und kennst die Regeln der Pharma? Super! Du hast eine Ausbildung als Pharmakant:in oder Laborant:in und weiÃt, wovon du sprichst? Sehr gut! Du bist Quereinsteiger und nun Experte? Daumen hoch! Du hast promoviert und weiÃt, auf was es bei der Wirkstoffherstellung ankommt? Spitze! Du bist Verfa
353hrenstechniker und fit in pharmazeutischem Anlagenbau? Perfekt! Es kommt uns nicht darauf an, wie du zu deinem Können gekommen bist. Wir möchten unsere Erfahrung mit dir teilen. Ebenso solltest du dein Knowhow begeistert und kommunikationsstark mit uns und unseren Kunden teilen wollen. Die Hauptsache ist, du hast Lust etwas zu bewegen.</p> 354</div><div class="spalte-2"><h2>UNSER ANGEBOT</h2> 355<p>Durch kollegiale Zusammenarbeit auf Augenhöhe, Zukunft gemeinsam gestalten. Wir möchten, dass du in sinnstiftenden und abwechslungsreichen Projekten mitentscheidest. Dabei bieten wir dir die Möglichkeit, mobil und zeitlich flexibel zu arbeiten. Denn du weiÃt am besten, wann du auf Hochtouren läufst und wo du am produktivsten bist. Dazu entscheidest du selbst, wieviel Urlaub gut für dich ist und wie viele Stunden in der Woche du arbeiten möchtest. Ein Smartphone, ein Notebook und den eigenen Firmenwagen darfst du gerne auch privat nutzen. Und da nichts individueller ist als deine Bedürfnisse, gilt dies auch für deinen Karriereweg bei uns. Zugleich sind dir 13 Gehälter sicher und mit betrieblicher Altersversorgung, ebnen wir deinen entspannten Weg in Richtung Zukunft.</p> 356</div></div></section> 357<section id="block_3" class="contact-section bewerbung-section light-background"> 358 <div class="container wrapper"> 359 <h2>BOCK DRAUF? | JETZT ONLINE BEWERBEN</h2> 360 <p>Du hast Lust PHARMA CONCEPTER zu werden?</p> 361 <p>JETZT online bewerben:</p> 362 <div class="form-wrapper"> 363 <div id="tqmailform" class="tqmailform-container"><form method="post" id="tqmailform_form" enctype="multipart/form-data" class="tqmailform-form" style=""><input type="hidden" name="formfile" value="bewerbung"><input type="hidden" name="themedir" value="wp-content/themes/e"><input type="hidden" name="baseid" value="tqmailform"><div class="row"> 364 <div class="form-group col-md-6"> 365 <input type="text" class="form-control" name="vorname" id="tqmailform_vorname" placeholder="Vorname*" required value="" > </div> 366 <div class="form-group col-md-6"> 367 <input type="text" class="form-control" name="nachname" id="tqmailform_nachname" placeholder="Nachname" required value="" > </div> 368</div> 369<div class="row"> 370 <div class="form-group col-md-6"> 371 <input type="email" id="tqmailform_e_mail_adresse" name="e_mail_adresse" placeholder="E-Mail-Adresse" value="" class="form-control" required> </div> 372 <div class="form-group col-md-6"> 373 <input type="tel" id="tqmailform_telefon" name="telefon" placeholder="Telefon" value="" class="form-control" required> </div> 374</div> 375<div class="row"> 376 <div class="form-group col-12"> 377 <textarea rows="6" id="tqmailform_nachricht" name="nachricht" placeholder="Nachricht" class="form-control" ></textarea> </div> 378 <div class="form-group col-12"> 379 <input type="file" id="tqmailform_bewerbungsanlagen" name="bewerbungsanlagen" placeholder="Bewerbungsanlagen (PDF)" onchange="tqmailform_checkMaxByteSize(tqmailform_bewerbungsanlagen, 2000000 )" class="form-control form-control-file" required> </div> 380</div> 381<p> 382 Wie wir mit Ihren Daten umgehen, erfahren Sie in unserer <a href="/datenschutz/">Datenschutzerklärung</a>.*</p> 383 384<div class="text-end"> 385 <input type="submit" id="tqmailform_senden" class="btn btn-primary" onClick="tqmailform_reload('https://pharma-concept.de/wp-content/plugins/tq-mailform/entrypoint.php', null, null, null, this); return false" value="Senden"></div> 386 387 388</form></div>
389<script>/** 390 * JS des Mailforms. 391 * 392 * Wird ins HTML eingebunden und nicht als JS-Datei geladen. 393 * 394 * @type {number} 395 */ 396 397let tqmailform_activeFileUploadsCount = 0 398 399/** 400 * Holt den Node (div.tqmailform-container), in dem das Formular ist. 401 * 402 * @param node_element ein optionales Element des Formulars, z.B. der Submit-Button. Falls nicht, wird der 403 * erste passende Container geliefert. 404 * @return den Node oder null 405 */ 406function tqmailform_getFormContainer(node_element = null) { 407 408 if (node_element) { 409 return node_element.closest('div.tqmailform-container'); 410 } else { 411 return document.querySelector('div.tqmailform-container'); 412 } 413 414} 415 416/** 417 * Diese Funktion wird vom onclick des Submit-Buttons aufgerufen. 418 * 419 * @param url 420 * @param before 421 * @param after 422 * @param success 423 * @param node_button Node des Submit-Buttons 424 * @returns {boolean} 425 */ 426function tqmailform_reload(url, before, after, success, node_button = null) { 427 428 // Den div.tqmailform-container, in dem das Formular ist, holen 429 let node_container = tqmailform_getFormContainer(node_button); 430 if (!node_container) { 431 alert("mailform: Container nicht gefunden."); 432 return false; 433 } 434 435 // Das Form brauchen wir auch unten mehrmals 436 let node_form = node_container.querySelector('form'); 437 if (!node_form) { 438 alert("mailform: Form nicht gefunden."); 439 return false; 440 } 441 442 if (tqmailform_activeFileUploadsCount > 0) { 443 alert('Bitte warten Sie, bis die Datei/n hochgeladen wurden.') 444 return false; 445 } 446 447 if (typeof before === 'function') { 448 before(); 449 } 450 451 // Wir löschen hier alle Files, da die Dateien schon chunked gesendet wurde. 452 let file_inputs = node_form.querySelectorAll('.chunked_files'); 453 file_inputs.forEach((input) => { 454 input.value = ''; 455 }) 456 457 const xhttp = new XMLHttpRequest(); 458 xhttp.onreadystatechange = function () { 459 // Callback für den AJAX-Request 460 if (this.readyState === 4 && this.status === 200) { 461 462 node_container.innerHTML = this.responseText; 463 464 // BK 2025-11-28: Ich glaube, dass man das eval() hier nicht braucht, weil alles JS 465 // bereits beim ersten Laden dabei sein sollte. 466 let scriptElements = node_container.getElementsByTagName("script"); 467 for (let scriptElement of scriptElements) { 468 eval(scriptElement.text) 469 } 470 471 let node_error = node_container.querySelector('#tqmailformerror'); 472 let node_thankyou = node_container.querySelector('#tqmailformthankyou'); 473 let node_success = node_container.querySelector('#tqmailformsuccess'); 474 if (node_error) { 475 setTimeout(function () { 476 // console.log( 'Scroling error.' ); 477 node_error.scrollIntoView({behavior: "smooth", block: "center", inline: "nearest"}); 478 node_error.focus(); 479 }, 500); 480 } else { 481 if (node_thankyou) { 482 // console.log( 'Scroling thank you.' ); 483 // BK 2025-11-26: Das Scrollen funktioniert nur etwas zeitverzögert. Wohl wegen Repaint? 484 setTimeout(function () { 485 node_thankyou.scrollIntoView({behavior: "smooth", block: "center", inline: "nearest"}); 486 node_thankyou.focus(); 487 }, 500); 488 } 489 } 490 if (typeof after === 'function') { 491 after(); 492 } 493 if (typeof success === 'function' && node_success) { 494 success(); 495 } 496 497 } 498 }; 499 xhttp.open("POST", url, true); 500 501 let formdata; 502 formdata = new FormData(node_form); 503 504 xhttp.send(formdata); 505} 506 507 508/** 509 * Ein input Feld so machen, dass die Datei chunked gesendet wird. 510 * 511 * Wird über das onchange-Event des file-Feldes aufgerufen 512 * 513 * @param node_input Node des Submit-Buttons 514 */ 515async function tqmailform_sendChunkedFiles(inputname, formurl, maxbyte, node_input = null) { 516 517 // Den div.tqmailform-container, in dem das Formular ist, holen 518 let node_container = tqmailform_getFormContainer(node_input);
519 if (!node_container) { 520 alert("mailform: Container nicht gefunden."); 521 return false; 522 } 523 524 tqmailform_activeFileUploadsCount++; 525 let input = node_container.querySelector('#file_' + inputname); 526 let label = node_container.querySelector('#label_' + inputname); 527 let file = input.files[0]; 528 let data = new FormData(); 529 let result_input = node_container.querySelector('#result_' + inputname); 530 let remove = node_container.querySelector('#remove_' + inputname); 531 let warning = node_container.querySelector('#warning_' + inputname); 532 let placeholder = node_container.querySelector('#placeholder_' + inputname); 533 let hiddenfield = node_container.querySelector('#' + inputname); 534 let form = input.form; 535 // Falls Input File leer ist 536 if (file === undefined) { 537 result_input.innerHTML = ''; 538 hiddenfield.value = ''; 539 tqmailform_activeFileUploadsCount--; 540 return; 541 } 542 543 // Falls Maxbyte überschritten ist 544 if (file.size >= parseInt(maxbyte)) { 545 result_input.style = 'right: 155px;position: relative;z-index: 999; min-width: 300px;top: 6px;'; 546 result_input.innerHTML = '<span class="error">Bitte DateigröÃe nicht überschreiten.<span>'; 547 input.value = ''; 548 tqmailform_activeFileUploadsCount--; 549 return; 550 } 551 result_input.style = 'right: 55px; position: absolute; z-index: 999; top: 6px;'; 552 data.append('name', file.name); 553 data.append('size', file.size); 554 data.append('type', file.type); 555 data.append('chunkedfilerequestid', 0); 556 557 // holt sich das Formular vom Server erst mal eine ID 558 const sessionId = await fetch(formurl, { 559 method: 'POST', body: data, 560 }).then((response) => response.text()); 561 562 // kleinen Chunks werden dann hochgeladen 563 let chunksize = 30720; 564 let filesize = file.size; 565 let chunkcount = Math.ceil(filesize / chunksize); 566 let chunkcountdown = chunkcount; 567 let percent; 568 let byte; 569 let chunkdata; 570 let $base64_code; 571 572 for (byte = 0; byte < file.size; byte = byte + chunksize) { 573 chunkdata = file.slice(byte, byte + chunksize); 574 let chunk = new FormData(); 575 576 chunk.append('chunkedfilerequestid', sessionId); 577 chunk.append('chunknumber', chunkcount - chunkcountdown); 578 chunk.append('chunk', chunkdata); 579 580 const chunkok = await fetch(formurl, { 581 method: 'POST', body: chunk, 582 }).then((response) => { 583 response.text(); 584 }); 585 percent = Math.ceil(100 * (byte + chunksize) / filesize); 586 if (percent > 100) { 587 percent = 100; 588 } 589 590 if (byte + chunksize >= filesize) { 591 setTimeout(function () { 592 result_input.innerHTML = '✔'; 593 }, 1000); 594 } 595 // animieren Upload im Frontend 596 $base64_code = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QCgRXhpZgAATU0AKgAAAAgABQEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAAEyAAIAAAAUAAAAWodpAAQAAAABAAAAbgAAAAAAAABIAAAAAQAAAEgAAAABMjAyMzowMToxMSAxMjozNDoyOAAAA6ABAAMAAAABAAEAAKACAAMAAAABAAoAAKADAAMAAAABAAoAAAAAAAD/4QudaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjUuMCI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0ZURhdGU9IjIwMjMtMDEtMTFUMTI6Mjg6MjErMDEwMCIgeG1wOk1vZGlmeURhdGU9IjIwMjMtMDEtMTFUMTI6MzQ6MjgrMDE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjMtMDEtMTFUMTI6MzQ6MjgrMDE6MDAiIHBob3Rvc2hvcDpEYXRlQ3JlYXRlZD0iMjAyMy0wMS0xMVQxMjoyODoyMSswMTAwIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJwcm9kdWNlZCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWZmaW5pdHkgUGhvdG8gMiAyLjAuMCIgc3RFdnQ6d2hlbj0iMjAyMy0wMS0xMVQxMjozNDoyOCswMTowMCIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0idyI/Pv/tACxQaG90b3Nob3AgMy4wADhCSU0EJQAAAAAAENQdjNmPALIE6YAJmOz4Qn7/4gJkSUNDX1BST0ZJTEUAAQEAAAJUbGNtcwQwAABtbnRyUkdCIFhZWiAH5wABAAsACwAKABthY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtkZXNjAAABCAAAAD5jcHJ0AAABSAAAAEx3d
596HB0AAABlAAAABRjaGFkAAABqAAAACxyWFlaAAAB1AAAABRiWFlaAAAB6AAAABRnWFlaAAAB/AAAABRyVFJDAAACEAAAACBnVFJDAAACEAAAACBiVFJDAAACEAAAACBjaHJtAAACMAAAACRtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACIAAAAcAHMAUgBHAEIAIABJAEUAQwA2ADEAOQA2ADYALQAyAC4AMQAAbWx1YwAAAAAAAAABAAAADGVuVVMAAAAwAAAAHABOAG8AIABjAG8AcAB5AHIAaQBnAGgAdAAsACAAdQBzAGUAIABmAHIAZQBlAGwAeVhZWiAAAAAAAAD21gABAAAAANMtc2YzMgAAAAAAAQxCAAAF3v//8yUAAAeTAAD9kP//+6H///2iAAAD3AAAwG5YWVogAAAAAAAAb6AAADj1AAADkFhZWiAAAAAAAAAknwAAD4QAALbDWFlaIAAAAAAAAGKXAAC3hwAAGNlwYXJhAAAAAAADAAAAAmZmAADypwAADVkAABPQAAAKW2Nocm0AAAAAAAMAAAAAo9cAAFR7AABMzQAAmZoAACZmAAAPXP/bAEMAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/bAEMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAoACgMBEQACEQEDEQH/xAAVAAEBAAAAAAAAAAAAAAAAAAAAB//EABQQAQAAAAAAAAAAAAAAAAAAAAD/xAAWAQEBAQAAAAAAAAAAAAAAAAAABwn/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCfp+wHAAAf/9k='; 597 input.type = 'text'; 598 input.value = file.name; 599 input.style = `background-image: url(${$base64_code}); background-repeat: repeat-y; background-size: ${percent}% auto; color:#fff;z-index:99;`; 600 result_input.style.display = "block"; 601 result_input.innerHTML = percent + '%'; 602 chunkcountdown--; 603 } 604 605 // Upload fertig 606 result_input.style.color = "#fff"; 607 hiddenfield.value = sessionId; 608 input.style = "display:none"; 609 if (label) { 610 label.style = "display:none"; 611 } 612 placeholder.value = file.name; 613 placeholder.style = "display:block; background-color: #1FA869; color: #fff;padding-right: 4rem;text-overflow: ellipsis;"; 614 remove.style.display = "block"; 615 616 tqmailform_activeFileUploadsCount--; 617 618} 619 620/** 621 * Delete-Button eines Upload-Feldes. 622 * 623 * @param inputname 624 * @param node_button Node des Submit-Buttons 625 */ 626function tqmailform_deleteAttachment(inputname, node_button = null) { 627 628 // Den div.tqmailform-container, in dem das Formular ist, holen 629 let node_container = tqmailform_getFormContainer(node_button); 630 if (!node_container) { 631 alert("mailform: Container nicht gefunden."); 632 return false; 633 } 634 635 // remove input file onclick 636 let input = node_container.querySelector('#file_' + inputname); 637 let label = node_container.querySelector('#label_' + inputname); 638 let remove = node_container.querySelector('#remove_' + inputname); 639 let placeholder = node_container.querySelector('#placeholder_' + inputname); 640 let hiddenfield = node_container.querySelector('#' + inputname); 641 let result_input = node_container.querySelector('#result_' + inputname); 642 input.value = ''; 643 input.type = 'file'; 644 input.style = 'display:block'; 645 result_input.style.color = "#000"; 646 if (label) { 647 label.style = 'display:block'; 648 } 649 remove.style.display = "none"; 650 placeholder.style.display = "none"; 651 result_input.style.display = "none"; 652 hiddenfield.value = ""; 653 remove.classList.replace('d-block', 'd-none'); 654} 655 656function tqmailform_checkMaxByteSize($inputname, $maxbytes) { 657 /* Wenn maxBytes überschreitet, wird eine Fehlermeldung in Frontend erscheint 658 * und der Input wird geleert. 659 */ 660 if ($inputname.files[0].size > $maxbytes) { 661 alert('Die DateigröÃe ist überschritten'); 662 $inputname.value = ''; 663 } 664} 665 666/** 667 * Klont ein Set von Formular-Feldern, z.B. um X Personen zu erfassen. 668 * 669 * @param source_id 670 * @param target_id 671 * @param data 672 * @returns {boolean} 673 */ 674function tqmailform_addNewInputGroup(source_id, target_id, data = []) { 675 676 // BK 2025-12-01: Hier kann ich leider kein this einbringen und daher das Formular nicht gezielt erfassen. 677 // Der Ersteller muss die Eindeutigkeit über Formulare hinweg selbst sicherstellen. 678 679 let source_el = document.getElementById(source_id); 680 let target_el = document.getElementById(target_id); 681 682 if (!source_el || !target_el) { 683 console.log('tqmailform_addNewInputGroup(): failed to found source or target.'); 684 return; 685 } 686 687 // Den div.tqmailform-container, in dem das Formular ist, holen 688 let node_container = tqmailform_getFormContainer(source_el);
689 if (!node_container) { 690 alert("mailform: Container nicht gefunden."); 691 return false; 692 } 693 694 let clone_source_el = source_el.cloneNode(true); 695 clone_source_el.style.display = 'block'; 696 let allInputs = clone_source_el.querySelectorAll("input"); 697 let allLabels = clone_source_el.querySelectorAll("label"); 698 699 // ich will da nicht mitglied_counter als variable haben, die ich hochzähle, 700 // sondern der Name der Variablen soll target_id + "_counter" sein. 701 702 countername = target_id + '_counter'; 703 704 // Inputs 705 allInputs.id = allInputs.id + '_' + window[countername]; 706 clone_source_el.id = target_id + '-' + window[countername]; 707 708 allInputs.forEach((e) => { 709 e.classList.add('form-control'); 710 if (data[e.id]) { 711 e.classList += ' ' + data[e.id].classes; 712 if (e.type === 'checkbox') { 713 e.checked = (data[e.id].value === 'on'); 714 } else { 715 e.value = data[e.id].value; 716 } 717 718 } 719 720 e.name = target_id + '[' + window[countername] + '][' + e.id + ']'; 721 e.id = target_id + '_' + window[countername] + '_' + e.id; 722 }); 723 724 // disable Elemente, wenn das Formular erfolgreich gesendet wird 725 let node_success = node_container.querySelector('#tqmailformsuccess'); 726 if (node_success) { 727 allInputs.forEach((e) => { 728 e.disabled = true; 729 }); 730 console.log('#' + target_id + '_button'); 731 node_container.querySelector('#' + target_id + '_button').disabled = true; 732 let remove_buttons = node_container.querySelectorAll('.remove-btn'); 733 remove_buttons.forEach((e) => { 734 e.disabled = true; 735 }); 736 } 737 738 // Errors 739 let y = clone_source_el.querySelectorAll(".error"); 740 741 y.forEach((e) => { 742 let myid = e.id.substring(6); 743 if (data[myid] && data[myid].error) { 744 e.innerHTML = data[myid].error; 745 } else { 746 e.remove(); 747 } 748 }); 749 750 // Labels "for" setzen
751 allLabels.forEach((e) => { 752 e.htmlFor = e.firstElementChild.id; 753 }); 754 755 756 target_el.appendChild(clone_source_el); 757 window[countername]++; 758} 759 760function tqmailform_removeInputGroup(e) { 761 e.target.parentElement.parentElement.remove(); 762} 763 764/* Kompatibilität nach besserer Benennung der Funktionen oben */ 765 766function removeInputGroup(e) { 767 tqmailform_removeInputGroup(e); 768} 769 770</script>
770 </div> 771 </div> 772</section> 773 </main> 774<!-- BEGIN footer.php --> 775<footer id="page-footer" class="page-footer"> 776 <div class="footer-inner"> 777 <div class="container"> 778 <div class="row py-5"> 779 <div class="col-md-4 mb-5 mb-lg-0"> 780 <ul> 781 <li class="company-name">PHARMA CONCEPT GmbH</li> 782 <li>MaÃholderstraÃe 5</li> 783 <li>D-35080 Bad Endbach</li> 784 </ul> 785 </div> 786 787 <div class="col-md-4 mb-5 mb-lg-0"> 788 <ul class="phone-email"> 789 <li><span class="icon phone"></span><a 790 href="tel:+4927762338800">+49 (0) 2776 - 2338 800 </a></li> 791 <li><span class="icon envelope"></span><a 792 href="mailto:[email protected]">[email protected]</a></li> 793 </ul> 794 </div> 795 796 <div class="col-md-4"> 797 <ul class="socials"> 798 <li><a href="https://www.facebook.com/Einhundert.PharmaConcept#"><span class="icon facebook"></span></a> </li><li><a href="https://www.linkedin.com/company/einhundert-pharma-concept/"><span class="icon linkedin"></span></a> </li><li><a href="https://www.instagram.com/einhundert_pharma_concept"><span class="icon instagram"></span></a> </li> <li class="linkedin-follow-wrapper"> 799
799<script type="IN/FollowCompany" data-id="72444395" data-counter="bottom"></script>
799 800 </li> 801 </ul> 802 </div> 803 </div> 804 </div> 805 <div class="footer-bottom dark-background"> 806 <div class="col-12 footer-menu-wrapper"> 807 <ul id="menu-fusszeile" class="footer-menu"><li class="menu-item menu-datenschutz"><a href="https://pharma-concept.de/datenschutz/">Datenschutz</a></li> 808<li class="menu-item menu-impressum"><a href="https://pharma-concept.de/impressum/">Impressum</a></li> 809</ul> </div> 810 </div> 811 </div> 812 <div class="scroll-to-top"> 813 <i class="icon up"></i> 814 </div> 815</footer>
816<script src="https://pharma-concept.de/wp-content/themes/e/assets/js/linkedin-in.js">lang: de_DE</script>
vendor: 1 bytes, line 816
816
817<script type="speculationrules"> 818{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/*"},{"not":{"href_matches":["\/wp\/wp-*.php","\/wp\/wp-admin\/*","\/uploads\/*","\/wp-content\/*","\/wp-content\/plugins\/*","\/wp-content\/themes\/e\/*","\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 819</script>
819 820
820<script> 821 window.PH_Child = {"ID":0,"user_login":false,"user_email":false,"display_name":false} </script>
821 822 823
823<script> 824 (function(d, t, g, k) { 825 var ph = d.createElement(t), 826 s = d.getElementsByTagName(t)[0], 827 l = false, 828 t = (new URLSearchParams(window.location.search)).get(k); 829 t && localStorage.setItem(k, t); 830 t = localStorage.getItem(k) 831 if (!l && !t) return; 832 ph.type = 'text/javascript'; 833 ph.async = true; 834 ph.defer = true; 835 ph.charset = 'UTF-8'; 836 ph.src = g + '&v=' + (new Date()).getTime(); 837 ph.src += t ? '&' + k + '=' + t : ''; 838 s.parentNode.insertBefore(ph, s); 839 })(document, 'script', '//www.website-feedback.de?p=2661&ph_apikey=05b1743f15c3e9e46e66477c581c9823', 'ph_access_token'); 840 </script>
840 841
841<script src="https://pharma-concept.de/wp-content/plugins/tq-tools/src/Domain/StructuredData/js/structureddata-v1-20210521.js" id="tq-tools-structureddata-v1-js"></script>
vendor: 1 bytes, line 841
841
842<script src="https://pharma-concept.de/wp-content/plugins/tq-tools/src/Domain/EasyREST/js/easyrest-v1-20210521.js" id="tq-tools-easyrest-v1-js"></script>
vendor: 1 bytes, line 842
842
843<script src="https://pharma-concept.de/wp-content/themes/e/dist/js/bootstrap.bundle.min.4953edaa7a9fcd047b03a7c610a7088564d33911d3151f7e94bfe53a290500f8.js" id="bootstrapbundle-js"></script>
vendor: 1 bytes, line 843
843
844<script src="https://pharma-concept.de/wp-content/themes/e/dist/js/scripts.min.b32e430fc5b96145e259c24d13e6c5d3b375d5eaec591b16f01cf20b8018b0d5.js" id="scripts-js"></script>
844 845</body> 846</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.