1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="utf-8"/> 5 <meta content="width=device-width, initial-scale=1.0" name="viewport"/> 6 <meta name="color-scheme" content="light only"/> 7 <title>Shopping Cart â MEYER EDV Shop</title> 8 <meta name="description" content="Professionelle Software und IT-Abonnements für Gewerbetreibende."/> 9 <meta name="robots" content="noindex, nofollow"/> 10 11 <link rel="icon" href="/assets/img/favicon.png"/> 12 <link rel="apple-touch-icon" href="/assets/img/apple-touch-icon.png"/> 13 <link href="/fonts.css" rel="stylesheet"/> 14 <link href="/assets/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"/> 15 <link href="/assets/vendor/icofont/icofont.min.css" rel="stylesheet"/> 16 <link href="/assets/vendor/boxicons/css/boxicons.min.css" rel="stylesheet"/> 17 <link href="/assets/vendor/remixicon/remixicon.css" rel="stylesheet"/> 18 <link href="/assets/vendor/aos/aos.css" rel="stylesheet"/> 19 <link href="/assets/css/style.css?v=20260922" rel="stylesheet"/> 20 <link href="/shop/assets/shop.css?v=20260922" rel="stylesheet"/> 21 <link href="/assets/site.css?v=20260923d" rel="stylesheet"/> <!-- Polar Embedded Checkout --> 22
22<script defer data-auto-init 23 src="https://cdn.jsdelivr.net/npm/@polar-sh/[email protected]/dist/embed.global.js"> 24 </script>
24 25</head> 26<body class="shop-page"> 27 28<!-- ======= Header (gemeinsam mit der ganzen Website) ======= --> 29 30<header id="header" class="fixed-top header-inner-pages"> 31 <div class="container d-flex align-items-center"> 32 <h1 class="logo mr-auto"><a href="/en/">MEYER EDV</a></h1> 33 <nav class="nav-menu d-none d-lg-block"> 34 <ul> 35 <li><a href="/en/">Home</a></li> 36 <li><a href="/en/#services">Services</a></li> 37 <li class="drop-down active"><a href="/en/produkte/">Products</a><ul><li><a href="/en/produkte/">All products</a></li><li><a href="/en/produkte/meyer-mail">MEYER | Mail</a></li><li><a href="/en/produkte/emclient">eM Client</a></li><li><a href="/en/produkte/meyer-dms">MEYER | DMS</a></li><li><a href="/en/produkte/meyer-faktur">MEYER | Faktur</a></li><li><a href="/en/produkte/ordnerschutz">Ordnerschutz</a></li><li class="nav-divider" aria-hidden="true"></li><li class="drop-down"><a href="/shop/?lang=en"><i class="bx bx-store-alt"></i> Shop</a><ul><li><a href="/shop/?lang=en">All items</a></li><li><a href="/shop/cart.php?lang=en">Cart</a></li><li><a href="/shop/manage.php?lang=en">Manage subscription</a></li><li><a href="/shop/agb.php?lang=en">Terms</a></li></ul></li></ul></li> 38 <li><a href="/en/downloads/">Downloads</a></li> 39 <li><a href="/en/appointments">Booking</a></li> 40 <li><a href="/en/fernwartung">Remote Support</a></li> 41 <li class="drop-down shop-lang-switcher"><a href="#"><img src="/assets/img/flags/gb.png" alt="EN" class="lang-flag" width="20" height="14" loading="lazy"/> EN</a><ul><li><a href="/shop/cart.php?lang=de"><img src="/assets/img/flags/de.png" alt="DE" class="lang-flag" width="20" height="14" loading="lazy"/> DE</a></li><li class="active"><a href="/shop/cart.php?lang=en"><img src="/assets/img/flags/gb.png" alt="EN" class="lang-flag" width="20" height="14" loading="lazy"/> EN</a></li><li><a href="/shop/cart.php?lang=fr"><img src="/assets/img/flags/fr.png" alt="FR" class="lang-flag" width="20" height="14" loading="lazy"/> FR</a></li><li><a href="/shop/cart.php?lang=es"><img src="/assets/img/flags/es.png" alt="ES" class="lang-flag" width="20" height="14" loading="lazy"/> ES</a></li><li><a href="/shop/cart.php?lang=it"><img src="/assets/img/flags/it.png" alt="IT" class="lang-flag" width="20" height="14" loading="lazy"/> IT</a></li><li><a href="/shop/cart.php?lang=cs"><img src="/assets/img/flags/cz.png" alt="CS" class="lang-flag" width="20" height="14" loading="lazy"/> CS</a></li></ul></li> 42 </ul> 43 </nav> 44 <a href="tel:+4950329279898" class="header-phone-btn"> 45 <i class="bx bx-phone-call"></i> 46 <span class="header-phone-label">+49 5032 927 98 98</span> 47 </a> 48 <a href="/shop/cart.php?lang=en" class="cart-nav-btn" aria-label="Cart"><i class="bx bx-cart"></i></a> 49 </div> 50</header><!-- End Header --> 51<meta name="csrf-token" content="7c0d69074299b61351f316eedeb6b5cd369ab1f95bedb40ee1a85c4f00a83f30"> 52 53<main id="main"> 54<section class="cart-wrap section-bg"> 55 <div class="container" data-aos="fade-up"> 56 57 <!-- B2B-Hinweis prominent oben --> 58 <div style="background:#fff3cd;border:1px solid #ffc107;border-radius:6px;padding:10px 18px;margin-bottom:24px;font-size:13px;color:#856404;font-family:'Jost',sans-serif"> 59 <strong>B2B-Shop:</strong> 60 Sale exclusively to businesses (§14 BGB). Not available to consumers. All prices net excl. VAT. </div> 61 62 <div class="shop-section-title"> 63 <h2>Shopping Cart</h2> 64 </div> 65 66 <div class="text-center py-5"> 67 <i class="bx bx-cart-alt" style="font-size:5rem;color:#d0d8e4"></i> 68 <h4 class="mt-3" style="color:#37517e;font-family:'Jost',sans-serif">Your cart is empty.</h4> 69 <p style="color:#888">Discover our products and add them to your cart.</p> 70 <a href="/shop/" class="btn-shop-primary mt-2">Browse Products</a> 71 </div> 72 73 </div> 74</section> 75</main> 76
77<script> 78(function() { 79 var btn = document.getElementById('cart-checkout-btn'); 80 var label = document.getElementById('cart-checkout-label'); 81 var errDiv = document.getElementById('cart-checkout-error'); 82 var origLbl = label ? label.textContent : ''; 83 84 function showErr(msg) { 85 if (!errDiv) return; 86 errDiv.textContent = msg; 87 errDiv.style.display = 'block'; 88 } 89 90 // Gemeinsame Formular-Validierung + Submit-Logik 91 function readForm() { 92 return { 93 company: (document.getElementById('cart-company') || {}).value || '', 94 vat: (document.getElementById('cart-vat') || {}).value || '', 95 name: (document.getElementById('cart-name') || {}).value || '', 96 email: (document.getElementById('cart-email') || {}).value || '', 97 street: (document.getElementById('cart-street') || {}).value || '', 98 zipcity: (document.getElementById('cart-zipcity') || {}).value || '', 99 country: (document.getElementById('cart-country') || {}).value || '', 100 }; 101 } 102 function validateForm(f) { 103 if (!f.company.trim()) { showErr("Please enter your company name."); document.getElementById('cart-company').focus(); return false; } 104 if (!f.vat.trim()) { showErr("Please enter your VAT ID."); document.getElementById('cart-vat').focus(); return false; } 105 if (!f.street.trim() || !f.zipcity.trim() || !f.country.trim()) { 106 showErr("Please enter your full address (street, ZIP & city, country)."); 107 if (!f.street.trim()) document.getElementById('cart-street').focus(); 108 else if (!f.zipcity.trim()) document.getElementById('cart-zipcity').focus(); 109 else document.getElementById('cart-country').focus(); 110 return false; 111 } 112 return true; 113 } 114 115 // Einzelner Artikel kaufen (bei Multi-Cart) -> nutzt polar-checkout.php 116 document.querySelectorAll('.btn-cart-buy-one').forEach(function(b) { 117 b.addEventListener('click', function() { 118 if (errDiv) errDiv.style.display = 'none'; 119 var f = readForm(); 120 if (!validateForm(f)) return; 121 var slug = b.dataset.slug || ''; 122 var qty = parseInt(b.dataset.qty || '1', 10) || 1; 123 var origText = b.innerHTML; 124 b.disabled = true; 125 b.innerHTML = '<i class="bx bx-loader bx-spin mr-1"></i>' + "Loading\u2026"; 126 fetch('/shop/api/polar-checkout.php', { 127 method: 'POST', 128 headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, 129 body: new URLSearchParams({ 130 product_slug: slug, 131 qty: qty, 132 email: f.email, 133 company: f.company, 134 vat_id: f.vat, 135 name: f.name, 136 street: f.street, 137 zipcity: f.zipcity, 138 country: f.country, 139 lang: "en", 140 b2b_confirmed: '1', 141 csrf_token: document.querySelector('meta[name="csrf-token"]').getAttribute('content'), 142 }) 143 }) 144 .then(function(r) { return r.json().catch(function(){ return {ok:false, error:'invalid_response'}; }); }) 145 .then(function(data) { 146 if (data.ok && data.checkout_url) { 147 window.location.href = data.checkout_url; 148 } else { 149 showErr(data.message || data.error || 'Checkout error'); 150 b.disabled = false; 151 b.innerHTML = origText; 152 } 153 }) 154 .catch(function() { 155 showErr("Network error. Please try again."); 156 b.disabled = false; 157 b.innerHTML = origText; 158 }); 159 }); 160 }); 161 162 if (!btn) return; 163 164 btn.addEventListener('click', function() { 165 if (errDiv) errDiv.style.display = 'none'; 166 167 var company = (document.getElementById('cart-company') || {}).value || ''; 168 var vat = (document.getElementById('cart-vat') || {}).value || ''; 169 var name = (document.getElementById('cart-name') || {}).value || ''; 170 var email = (document.getElementById('cart-email') || {}).value || ''; 171 var street = (document.getElementById('cart-street') || {}).value || ''; 172 var zipcity = (document.getElementById('cart-zipcity') || {}).value || ''; 173 var country = (document.getElementById('cart-country') || {}).value || ''; 174 175 if (!company.trim()) { 176 showErr("Please enter your company name."); 177 document.getElementById('cart-company').focus(); 178 return; 179 } 180 if (!vat.trim()) { 181 showErr("Please enter your VAT ID."); 182 document.getElementById('cart-vat').focus(); 183 return; 184 } 185 if (!street.trim() || !zipcity.trim() || !country.trim()) { 186 showErr("Please enter your full address (street, ZIP & city, country)."); 187 if (!street.trim()) document.getElementById('cart-street').focus(); 188 else if (!zipcity.trim()) document.getElementById('cart-zipcity').focus(); 189 else document.getElementById('cart-country').focus(); 190 return; 191 } 192 193 btn.disabled = true; 194 if (label) label.textContent = "Loading\u2026"; 195 196 fetch('/shop/api/polar-cart-checkout.php', { 197 method: 'POST', 198 headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, 199 body: new URLSearchParams({ 200 company: company, 201 vat_id: vat, 202 name: name, 203 email: email, 204 street: street, 205 zipcity: zipcity, 206 country: country, 207 lang: "en", 208 csrf_token: document.querySelector('meta[name="csrf-token"]').getAttribute('content'), 209 }) 210 }) 211 .then(function(r) { 212 // Sowohl 2xx als auch 4xx als JSON parsen (verhindert catch bei 422) 213 return r.json().catch(function() { return {ok: false, error: 'invali
213d_response'}; }); 214 }) 215 .then(function(data) { 216 if (data.ok && data.checkout_url) { 217 if (window.PolarEmbedCheckout) { 218 window.PolarEmbedCheckout.create(data.checkout_url, { theme: 'light' }); 219 } else { 220 window.location.href = data.checkout_url; 221 } 222 } else { 223 var msg = data.error || "Checkout error. Please try again."; 224 showErr(msg); 225 btn.disabled = false; 226 if (label) label.textContent = origLbl; 227 } 228 }) 229 .catch(function(err) { 230 showErr("Connection error. Please try again."); 231 btn.disabled = false; 232 if (label) label.textContent = origLbl; 233 }); 234 }); 235})(); 236</script>
236 237 238 239<!-- ======= Footer ======= --> 240<footer id="footer"> 241 <div class="footer-top"> 242 <div class="container"> 243 <div class="row"> 244 <div class="col-lg-3 col-md-6 footer-contact"> 245 <h3>Meyer EDV GmbH</h3> 246 <p>Gerberhof 3<br/>31535 Neustadt am Rübenberge<br/>Deutschland<br/><br/> 247 <strong>Telefon:</strong> 05032 927 98 98<br/> 248 <strong>E-Mail:</strong> <a href="mailto:[email protected]">[email protected]</a></p> 249 </div> 250 <div class="col-lg-3 col-md-6 footer-links"> 251 <h4>Shop</h4> 252 <ul> 253 <li><i class="bx bx-chevron-right"></i> <a href="/shop/">All Products</a></li> 254 <li><i class="bx bx-chevron-right"></i> <a href="/shop/cart.php">Cart</a></li> 255 <li><i class="bx bx-chevron-right"></i> <a href="/shop/manage.php">Manage Subscription</a></li> 256 <li><i class="bx bx-chevron-right"></i> <a href="/shop/agb.php">Terms</a></li> 257 </ul> 258 </div> 259 <div class="col-lg-3 col-md-6 footer-links"> 260 <h4>Links</h4> 261 <ul> 262 <li><i class="bx bx-chevron-right"></i> <a href="/">Start</a></li> 263 <li><i class="bx bx-chevron-right"></i> <a href="/impressum.php">Imprint</a></li> 264 <li><i class="bx bx-chevron-right"></i> <a href="/datenschutz.php">Privacy</a></li> 265 <li><i class="bx bx-chevron-right"></i> <a href="/appointments">Booking</a></li> 266 </ul> 267 </div> 268 <div class="col-lg-3 col-md-6 footer-links"> 269 <h4>B2B Shop</h4> 270 <p style="font-size:13px;color:#aaa">B2B only. No right of withdrawal for digital products.</p> 271 <p style="font-size:12px;color:#888;margin-top:10px"> 272 Payment processed by<br/> 273 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 28" height="22" style="margin-top:6px;opacity:0.7;display:inline-block"> 274 <rect width="120" height="28" rx="5" fill="#3B82F6"/> 275 <text x="60" y="19" font-family="sans-serif" font-size="12" font-weight="700" fill="#fff" text-anchor="middle">Polar</text> 276 </svg> 277 </p> 278 </div> 279 </div> 280 </div> 281 </div> 282 <div class="container footer-bottom clearfix"> 283 <div class="copyright">© Copyright <strong><span>MEYER EDV GmbH –</span></strong> All Rights Reserved | 284 <a href="/shop/agb.php">Terms</a> | 285 <a href="/impressum.php">Imprint</a> | 286 <a href="/datenschutz.php">Privacy</a> 287 </div> 288 </div> 289</footer> 290<!-- End Footer --> 291 292<a href="#" class="back-to-top"><i class="ri-arrow-up-line"></i></a> 293
294<script src="/assets/vendor/jquery/jquery.min.js"></script>
vendor: 1 bytes, line 294
294
295<script src="/assets/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
vendor: 1 bytes, line 295
295
296<script src="/assets/vendor/aos/aos.js"></script>
vendor: 1 bytes, line 296
296
297<script src="/assets/js/main.js?v=1790153233"></script>
vendor: 1 bytes, line 297
297
298<script src="/shop/assets/shop.js?v=1790153233"></script>
vendor: 1 bytes, line 298
298
299<script> 300 // Sofort beim DOMContentLoaded starten â nicht erst auf window.load (Bilder) 301 // warten. Sonst kann der Hero bei langsam ladenden Assets sekundenlang unsichtbar 302 // sein, weil [data-aos] per CSS opacity:0 hat. 303 if (typeof AOS !== 'undefined' && AOS.init) { 304 AOS.init({ 305 duration: 600, 306 easing: 'ease-in-out', 307 once: true, 308 startEvent: 'DOMContentLoaded', 309 disableMutationObserver: true, 310 }); 311 } 312 // Sicherheitsnetz: falls AOS aus irgendeinem Grund nicht initialisiert 313 // (Skript blockiert, Adblocker, Fehler), nach 1.2s alle data-aos-Elemente 314 // hart einblenden, damit die Seite nicht "leer" bleibt. 315 setTimeout(function () { 316 document.querySelectorAll('[data-aos]:not(.aos-animate)').forEach(function (el) { 317 el.classList.add('aos-animate'); 318 }); 319 }, 1200); 320</script>
320 321</body> 322</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.