Checkout-Fenster deutlich breiter; PayPal auf einen sauberen Button reduziert; Klarna verbindet automatisch bei Auswahl

- Das Zahlungsart/Kontakt-Fenster war unabsichtlich auf 560px begrenzt
  (geerbtes Formular-Limit von Kontakt-/Konto-Seite) — jetzt nutzt es die
  volle verfügbare Spaltenbreite (~820px statt 560px).
- PayPal-Button zeigt jetzt nur noch den einen echten PayPal-Button statt
  zusätzlich einem redundanten "Debit- oder Kreditkarte"-Button (dafür
  gibt's ja schon die eigene Kreditkarte-Zahlungsart) — ein Klick auf die
  PayPal-Karte, ein Klick auf den einen PayPal-Button, direkt der echte
  Login-Popup. Mehr geht aus Sicherheitsgründen bei keinem Shop weltweit:
  PayPal öffnet den Login-Popup nur bei einem echten Klick auf ihr
  eigenes Button-Element, nie automatisiert per Skript (Schutz vor
  Missbrauch/Clickjacking).
- Klarna verbindet jetzt automatisch, sobald die Karte ausgewählt wird —
  kein zusätzlicher Klick auf einen Verbinden-Button mehr nötig
  (Kreditkarte und Banküberweisung waren bereits ohne Extra-Klick).

Verifiziert per Puppeteer: Formularbreite jetzt 820px (vorher 560px),
Klarna verbindet automatisch beim Auswählen, keine Konsolenfehler.
This commit is contained in:
qcigano
2026-08-02 20:00:51 +02:00
parent 1c9bee94ca
commit b8f4454bea
5 changed files with 68 additions and 41 deletions
+10 -4
View File
@@ -208,7 +208,7 @@ import { bankverbindung, bankverbindungVollstaendig } from "../../../data/bankve
if (paypalLoaded || !document.getElementById("paypal-button-container")) return; if (paypalLoaded || !document.getElementById("paypal-button-container")) return;
paypalLoaded = true; paypalLoaded = true;
const script = document.createElement("script"); const script = document.createElement("script");
script.src = "https://www.paypal.com/sdk/js?client-id=sb&currency=EUR&intent=capture"; script.src = "https://www.paypal.com/sdk/js?client-id=sb&currency=EUR&intent=capture&disable-funding=card,credit";
script.onload = () => { script.onload = () => {
if (!window.paypal) return; if (!window.paypal) return;
window.paypal.Buttons({ window.paypal.Buttons({
@@ -228,8 +228,8 @@ import { bankverbindung, bankverbindungVollstaendig } from "../../../data/bankve
// die Oberfläche schon fertig aussieht und 1:1 austauschbar ist, sobald die Anbindung steht. // die Oberfläche schon fertig aussieht und 1:1 austauschbar ist, sobald die Anbindung steht.
const klarnaBtn = document.getElementById("klarna-connect"); const klarnaBtn = document.getElementById("klarna-connect");
const klarnaStatus = document.getElementById("klarna-status"); const klarnaStatus = document.getElementById("klarna-status");
if (klarnaBtn) { function connectKlarna() {
klarnaBtn.addEventListener("click", () => { if (!klarnaBtn || klarnaBtn.disabled) return;
klarnaBtn.disabled = true; klarnaBtn.disabled = true;
klarnaBtn.textContent = klarnaConnectingLabel; klarnaBtn.textContent = klarnaConnectingLabel;
setTimeout(() => { setTimeout(() => {
@@ -237,7 +237,13 @@ import { bankverbindung, bankverbindungVollstaendig } from "../../../data/bankve
klarnaBtn.disabled = false; klarnaBtn.disabled = false;
klarnaStatus.textContent = "✅ " + klarnaConnectedLabel; klarnaStatus.textContent = "✅ " + klarnaConnectedLabel;
}, 1100); }, 1100);
}); }
if (klarnaBtn) {
klarnaBtn.addEventListener("click", connectKlarna);
const klarnaRadio = document.querySelector('input[name="pay"][value="klarna"]');
// Verbindet automatisch, sobald die Klarna-Karte ausgewählt wird — kein separater Klick
// auf den Button nötig (der bleibt als "erneut verbinden" erhalten).
klarnaRadio?.addEventListener("change", () => { if (!klarnaStatus.textContent) connectKlarna(); });
} }
// Banküberweisung (Vorkasse): braucht KEINE externe Anbindung — zeigt einfach VanVans echte, // Banküberweisung (Vorkasse): braucht KEINE externe Anbindung — zeigt einfach VanVans echte,
+10 -4
View File
@@ -211,7 +211,7 @@ import { bankverbindung, bankverbindungVollstaendig } from "../../data/bankverbi
if (paypalLoaded || !document.getElementById("paypal-button-container")) return; if (paypalLoaded || !document.getElementById("paypal-button-container")) return;
paypalLoaded = true; paypalLoaded = true;
const script = document.createElement("script"); const script = document.createElement("script");
script.src = "https://www.paypal.com/sdk/js?client-id=sb&currency=EUR&intent=capture"; script.src = "https://www.paypal.com/sdk/js?client-id=sb&currency=EUR&intent=capture&disable-funding=card,credit";
script.onload = () => { script.onload = () => {
if (!window.paypal) return; if (!window.paypal) return;
window.paypal.Buttons({ window.paypal.Buttons({
@@ -231,8 +231,8 @@ import { bankverbindung, bankverbindungVollstaendig } from "../../data/bankverbi
// die Oberfläche schon fertig aussieht und 1:1 austauschbar ist, sobald die Anbindung steht. // die Oberfläche schon fertig aussieht und 1:1 austauschbar ist, sobald die Anbindung steht.
const klarnaBtn = document.getElementById("klarna-connect"); const klarnaBtn = document.getElementById("klarna-connect");
const klarnaStatus = document.getElementById("klarna-status"); const klarnaStatus = document.getElementById("klarna-status");
if (klarnaBtn) { function connectKlarna() {
klarnaBtn.addEventListener("click", () => { if (!klarnaBtn || klarnaBtn.disabled) return;
klarnaBtn.disabled = true; klarnaBtn.disabled = true;
klarnaBtn.textContent = klarnaConnectingLabel; klarnaBtn.textContent = klarnaConnectingLabel;
setTimeout(() => { setTimeout(() => {
@@ -240,7 +240,13 @@ import { bankverbindung, bankverbindungVollstaendig } from "../../data/bankverbi
klarnaBtn.disabled = false; klarnaBtn.disabled = false;
klarnaStatus.textContent = "✅ " + klarnaConnectedLabel; klarnaStatus.textContent = "✅ " + klarnaConnectedLabel;
}, 1100); }, 1100);
}); }
if (klarnaBtn) {
klarnaBtn.addEventListener("click", connectKlarna);
const klarnaRadio = document.querySelector('input[name="pay"][value="klarna"]');
// Verbindet automatisch, sobald die Klarna-Karte ausgewählt wird — kein separater Klick
// auf den Button nötig (der bleibt als "erneut verbinden" erhalten).
klarnaRadio?.addEventListener("change", () => { if (!klarnaStatus.textContent) connectKlarna(); });
} }
// Banküberweisung (Vorkasse): braucht KEINE externe Anbindung — zeigt einfach VanVans echte, // Banküberweisung (Vorkasse): braucht KEINE externe Anbindung — zeigt einfach VanVans echte,
+10 -4
View File
@@ -208,7 +208,7 @@ import { bankverbindung, bankverbindungVollstaendig } from "../../../data/bankve
if (paypalLoaded || !document.getElementById("paypal-button-container")) return; if (paypalLoaded || !document.getElementById("paypal-button-container")) return;
paypalLoaded = true; paypalLoaded = true;
const script = document.createElement("script"); const script = document.createElement("script");
script.src = "https://www.paypal.com/sdk/js?client-id=sb&currency=EUR&intent=capture"; script.src = "https://www.paypal.com/sdk/js?client-id=sb&currency=EUR&intent=capture&disable-funding=card,credit";
script.onload = () => { script.onload = () => {
if (!window.paypal) return; if (!window.paypal) return;
window.paypal.Buttons({ window.paypal.Buttons({
@@ -228,8 +228,8 @@ import { bankverbindung, bankverbindungVollstaendig } from "../../../data/bankve
// die Oberfläche schon fertig aussieht und 1:1 austauschbar ist, sobald die Anbindung steht. // die Oberfläche schon fertig aussieht und 1:1 austauschbar ist, sobald die Anbindung steht.
const klarnaBtn = document.getElementById("klarna-connect"); const klarnaBtn = document.getElementById("klarna-connect");
const klarnaStatus = document.getElementById("klarna-status"); const klarnaStatus = document.getElementById("klarna-status");
if (klarnaBtn) { function connectKlarna() {
klarnaBtn.addEventListener("click", () => { if (!klarnaBtn || klarnaBtn.disabled) return;
klarnaBtn.disabled = true; klarnaBtn.disabled = true;
klarnaBtn.textContent = klarnaConnectingLabel; klarnaBtn.textContent = klarnaConnectingLabel;
setTimeout(() => { setTimeout(() => {
@@ -237,7 +237,13 @@ import { bankverbindung, bankverbindungVollstaendig } from "../../../data/bankve
klarnaBtn.disabled = false; klarnaBtn.disabled = false;
klarnaStatus.textContent = "✅ " + klarnaConnectedLabel; klarnaStatus.textContent = "✅ " + klarnaConnectedLabel;
}, 1100); }, 1100);
}); }
if (klarnaBtn) {
klarnaBtn.addEventListener("click", connectKlarna);
const klarnaRadio = document.querySelector('input[name="pay"][value="klarna"]');
// Verbindet automatisch, sobald die Klarna-Karte ausgewählt wird — kein separater Klick
// auf den Button nötig (der bleibt als "erneut verbinden" erhalten).
klarnaRadio?.addEventListener("change", () => { if (!klarnaStatus.textContent) connectKlarna(); });
} }
// Banküberweisung (Vorkasse): braucht KEINE externe Anbindung — zeigt einfach VanVans echte, // Banküberweisung (Vorkasse): braucht KEINE externe Anbindung — zeigt einfach VanVans echte,
+10 -4
View File
@@ -208,7 +208,7 @@ import { bankverbindung, bankverbindungVollstaendig } from "../../../data/bankve
if (paypalLoaded || !document.getElementById("paypal-button-container")) return; if (paypalLoaded || !document.getElementById("paypal-button-container")) return;
paypalLoaded = true; paypalLoaded = true;
const script = document.createElement("script"); const script = document.createElement("script");
script.src = "https://www.paypal.com/sdk/js?client-id=sb&currency=EUR&intent=capture"; script.src = "https://www.paypal.com/sdk/js?client-id=sb&currency=EUR&intent=capture&disable-funding=card,credit";
script.onload = () => { script.onload = () => {
if (!window.paypal) return; if (!window.paypal) return;
window.paypal.Buttons({ window.paypal.Buttons({
@@ -228,8 +228,8 @@ import { bankverbindung, bankverbindungVollstaendig } from "../../../data/bankve
// die Oberfläche schon fertig aussieht und 1:1 austauschbar ist, sobald die Anbindung steht. // die Oberfläche schon fertig aussieht und 1:1 austauschbar ist, sobald die Anbindung steht.
const klarnaBtn = document.getElementById("klarna-connect"); const klarnaBtn = document.getElementById("klarna-connect");
const klarnaStatus = document.getElementById("klarna-status"); const klarnaStatus = document.getElementById("klarna-status");
if (klarnaBtn) { function connectKlarna() {
klarnaBtn.addEventListener("click", () => { if (!klarnaBtn || klarnaBtn.disabled) return;
klarnaBtn.disabled = true; klarnaBtn.disabled = true;
klarnaBtn.textContent = klarnaConnectingLabel; klarnaBtn.textContent = klarnaConnectingLabel;
setTimeout(() => { setTimeout(() => {
@@ -237,7 +237,13 @@ import { bankverbindung, bankverbindungVollstaendig } from "../../../data/bankve
klarnaBtn.disabled = false; klarnaBtn.disabled = false;
klarnaStatus.textContent = "✅ " + klarnaConnectedLabel; klarnaStatus.textContent = "✅ " + klarnaConnectedLabel;
}, 1100); }, 1100);
}); }
if (klarnaBtn) {
klarnaBtn.addEventListener("click", connectKlarna);
const klarnaRadio = document.querySelector('input[name="pay"][value="klarna"]');
// Verbindet automatisch, sobald die Klarna-Karte ausgewählt wird — kein separater Klick
// auf den Button nötig (der bleibt als "erneut verbinden" erhalten).
klarnaRadio?.addEventListener("change", () => { if (!klarnaStatus.textContent) connectKlarna(); });
} }
// Banküberweisung (Vorkasse): braucht KEINE externe Anbindung — zeigt einfach VanVans echte, // Banküberweisung (Vorkasse): braucht KEINE externe Anbindung — zeigt einfach VanVans echte,
+4 -1
View File
@@ -970,7 +970,10 @@ a:focus-visible, button:focus-visible {
@media (max-width: 800px) { .cart-layout { grid-template-columns: 1fr; } } @media (max-width: 800px) { .cart-layout { grid-template-columns: 1fr; } }
/* Checkout */ /* Checkout */
.checkout-layout { display: grid; grid-template-columns: 1fr 300px; gap: 2rem; align-items: start; } .checkout-layout { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 2rem; align-items: start; }
/* Das Checkout-Formular soll die volle Spaltenbreite ausnutzen — .frm hat sonst sitesweit ein
schmales max-width (passend für Kontakt/Konto), das hier ausdrücklich aufgehoben wird. */
#checkout-form { max-width: none; }
/* "1. Zahlungsart" und "2. Kontakt & Lieferadresse" nebeneinander statt gestapelt, getrennt /* "1. Zahlungsart" und "2. Kontakt & Lieferadresse" nebeneinander statt gestapelt, getrennt
durch eine dezente Verlaufslinie mit kleinem Garnrollen-Symbol in der Mitte — spielt auf durch eine dezente Verlaufslinie mit kleinem Garnrollen-Symbol in der Mitte — spielt auf