{"id":10,"date":"2026-03-27T14:39:02","date_gmt":"2026-03-27T14:39:02","guid":{"rendered":"https:\/\/spiritual-activity.org\/?page_id=10"},"modified":"2026-09-20T10:57:28","modified_gmt":"2026-09-20T10:57:28","slug":"anmeldung-basic-exercises","status":"publish","type":"page","link":"https:\/\/spiritual-activity.org\/it\/anmeldung-basic-exercises\/","title":{"rendered":"Anmeldung Basic Exercises"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"10\" class=\"elementor elementor-10\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a3fafe4 e-flex e-con-boxed e-con e-parent\" data-id=\"a3fafe4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1a38bc9 elementor-widget elementor-widget-shortcode\" data-id=\"1a38bc9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"536\" class=\"elementor elementor-536\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cbf2c00 e-flex e-con-boxed e-con e-parent\" data-id=\"cbf2c00\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-97ba22c elementor-widget elementor-widget-html\" data-id=\"97ba22c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n\/* ============================================================\n   ISA \u2013 HEADER WIDGET\n   ============================================================ *\/\n\n#be-nav {\n  position: fixed;\n  top: 0; left: 0; right: 0;\n  z-index: 9999;\n  padding: 12px 2.5rem;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  background: rgba(255,255,255,0.95);\n  backdrop-filter: blur(12px);\n  -webkit-backdrop-filter: blur(12px);\n  border-bottom: 1px solid rgba(33,117,155,0.15);\n  font-family: 'DM Sans', system-ui, sans-serif;\n  box-sizing: border-box;\n}\n\n#be-nav * { box-sizing: border-box; }\n\n\/* Logo *\/\n#be-nav-logo {\n  display: flex;\n  align-items: center;\n  flex-shrink: 0;\n}\n\n#be-nav-logo img {\n  height: 38px;\n  width: auto;\n  display: block;\n}\n\n\/* Rechte Seite: Nav *\/\n#be-nav-right {\n  display: flex;\n  align-items: center;\n  gap: 1.5rem;\n}\n\n\/* Link-Liste *\/\n#be-nav ul {\n  display: flex;\n  gap: 2rem;\n  list-style: none;\n  align-items: center;\n  margin: 0; padding: 0;\n}\n\n#be-nav ul li a {\n  font-size: 15px;\n  font-weight: 400;\n  letter-spacing: 0.10em;\n  text-transform: uppercase;\n  text-decoration: none;\n  color: #1a4a5e;\n  transition: color 0.2s;\n}\n\n#be-nav ul li a:hover { color: #21759b; }\n\n\/* CTA-Button *\/\n#be-nav ul li a.be-cta {\n  background: #21759b;\n  color: #ffffff !important;\n  padding: 0.65rem 1.5rem;\n  border-radius: 3px;\n  font-size: 15px;\n  letter-spacing: 0.09em;\n  transition: background 0.2s;\n}\n\n#be-nav ul li a.be-cta:hover {\n  background: #1a5d7a;\n  color: #ffffff !important;\n}\n\n\/* Sprachumschalter *\/\n#be-nav .be-lang {\n  display: flex;\n  align-items: center;\n  font-size: 14px;\n}\n\n\/* Hamburger *\/\n#be-hamburger {\n  display: none;\n  flex-direction: column;\n  gap: 5px;\n  cursor: pointer;\n  padding: 4px;\n  background: none;\n  border: none;\n  position: relative;\n  z-index: 99999;\n}\n\n#be-hamburger span {\n  display: block;\n  width: 22px;\n  height: 1.5px;\n  background: #21759b;\n  transition: transform 0.25s, opacity 0.2s;\n}\n\n\/* Mobile Menu *\/\n#be-mobile-menu {\n  display: none;\n  position: fixed;\n  top: 0; left: 0; right: 0; bottom: 0;\n  z-index: 9998;\n  background: rgba(255,255,255,0.98);\n  flex-direction: column;\n  justify-content: flex-start;\n  align-items: center;\n  gap: 1.5rem;\n  padding-top: 5.5rem;\n  padding-bottom: 3rem;\n  overflow-y: auto;\n  -webkit-overflow-scrolling: touch;\n  font-family: 'DM Sans', system-ui, sans-serif;\n}\n\n#be-mobile-menu.be-open { display: flex; }\n\n#be-mobile-menu a {\n  font-size: 1.1rem;\n  font-weight: 400;\n  letter-spacing: 0.12em;\n  text-transform: uppercase;\n  text-decoration: none;\n  color: #1a4a5e;\n}\n\n#be-mobile-menu a.be-cta-mobile {\n  background: #21759b;\n  color: #ffffff !important;\n  padding: 0.8rem 2.2rem;\n  border-radius: 3px;\n  margin-top: 0.5rem;\n}\n\n\/* Sprachumschalter im Mobile-Men\u00fc *\/\n#be-mobile-menu .be-lang-mobile {\n  margin-top: 0.5rem;\n  width: 100%;\n  display: flex;\n  justify-content: center;\n  position: relative;\n  overflow: visible !important;\n  max-height: none !important;\n}\n\n\/* Hamburger bleibt sichtbar wenn Men\u00fc offen \u2013 fungiert als X *\/\n#be-nav.be-menu-open {\n  z-index: 99999;\n  background: transparent;\n  border-bottom: none;\n  backdrop-filter: none;\n  -webkit-backdrop-filter: none;\n}\n\n#be-nav.be-menu-open #be-hamburger {\n  position: fixed;\n  top: 1rem;\n  right: 1.5rem;\n}\n#be-nav.be-menu-open #be-hamburger span:nth-child(1) {\n  transform: translateY(6.5px) rotate(45deg);\n}\n#be-nav.be-menu-open #be-hamburger span:nth-child(2) {\n  opacity: 0;\n}\n#be-nav.be-menu-open #be-hamburger span:nth-child(3) {\n  transform: translateY(-6.5px) rotate(-45deg);\n}\n\n\/* Responsive *\/\n@media (max-width: 768px) {\n  #be-nav { padding: 1rem 1.5rem; }\n  #be-nav ul { display: none; }\n  #be-nav .be-lang { display: none; }\n  #be-hamburger { display: flex; }\n  #be-mobile-menu { padding-top: 4.5rem; gap: 1.1rem; }\n  #be-mobile-menu > a { font-size: 1.8rem !important; }\n  #be-mobile-menu a.be-cta-mobile { font-size: 1.8rem !important; padding: 0.8rem 2.4rem; }\n}\n\n@media (min-width: 769px) {\n  #be-nav { padding: 20px 2.5rem; }\n  #be-nav-logo img { height: 42px; }\n}\n<\/style>\n\n<nav id=\"be-nav\">\n\n  <!-- Logo links -->\n  <a id=\"be-nav-logo\" href=\"https:\/\/spiritual-activity.org\" aria-label=\"ISA \u2013 Startseite\">\n    <img decoding=\"async\" src=\"https:\/\/spiritual-activity.org\/wp-content\/uploads\/2026\/06\/ISA_Logo-scaled.png\"\n         alt=\"ISA Logo\"\n         loading=\"eager\">\n  <\/a>\n\n  <!-- Rechte Seite: Links + Hamburger -->\n  <div id=\"be-nav-right\">\n    <ul>\n      <li><a href=\"https:\/\/spiritual-activity.org\/\">Start<\/a><\/li>\n      <!-- Entwicklung: noch nicht anzeigen -->\n      <!-- <li><a href=\"https:\/\/spiritual-activity.org\/entwicklung\/\">Entwicklung<\/a><\/li> -->\n      <li><a href=\"https:\/\/spiritual-activity.org\/verein\/\"><span dir=\"ltr\" style=\"display:inline-block;\">Leben im Denken e.V.<\/span><\/a><\/li>\n      <li><a href=\"https:\/\/spiritual-activity.org\/ueber-uns\/\">\u00dcber uns<\/a><\/li>\n      <li><a href=\"https:\/\/spiritual-activity.org\/kontakt\/\">Kontakt<\/a><\/li>\n      <!-- Shop: noch nicht anzeigen -->\n      <!-- <li><a href=\"https:\/\/spiritual-activity.org\/store\/\">Shop<\/a><\/li> -->\n      <li class=\"be-lang\"><\/li>\n    <\/ul>\n\n    <button id=\"be-hamburger\" aria-label=\"Men\u00fc \u00f6ffnen\">\n      <span><\/span><span><\/span><span><\/span>\n    <\/button>\n  <\/div>\n\n<\/nav>\n\n<!-- Mobile Vollbild-Men\u00fc -->\n<div id=\"be-mobile-menu\">\n  <a href=\"https:\/\/spiritual-activity.org\/\">Start<\/a>\n  <!-- Entwicklung: noch nicht anzeigen -->\n  <!-- <a href=\"https:\/\/spiritual-activity.org\/entwicklung\/\" onclick=\"beCloseMenu()\">Entwicklung<\/a> -->\n  <a href=\"https:\/\/spiritual-activity.org\/verein\/\" onclick=\"beCloseMenu()\"><span dir=\"ltr\" style=\"display:inline-block;\">Leben im Denken e.V.<\/span><\/a>\n  <a href=\"https:\/\/spiritual-activity.org\/ueber-uns\/\" onclick=\"beCloseMenu()\">\u00dcber uns<\/a>\n  <a href=\"https:\/\/spiritual-activity.org\/kontakt\/\" onclick=\"beCloseMenu()\">Kontakt<\/a>\n  <!-- Shop: noch nicht anzeigen -->\n  <!-- <a href=\"https:\/\/spiritual-activity.org\/store\/\" onclick=\"beCloseMenu()\">Shop<\/a> -->\n  <div class=\"be-lang-mobile\"><\/div>\n<\/div>\n\n\n<script>\nfunction beOpenMenu() {\n  document.getElementById('be-mobile-menu').classList.add('be-open');\n  document.getElementById('be-nav').classList.add('be-menu-open');\n  document.body.style.overflow = 'hidden';\n}\n\nfunction beCloseMenu() {\n  document.getElementById('be-mobile-menu').classList.remove('be-open');\n  document.getElementById('be-nav').classList.remove('be-menu-open');\n  document.body.style.overflow = '';\n}\n\n\/* ============================================================\n   Automatische Sprach-Weiterleitung f\u00fcr Nav-Links\n   ============================================================ *\/\nfunction beLocalizeNavLinks() {\n  \/\/ Sprachcodes, die TranslatePress als Subdirectory-Prefix nutzt\n  \/\/ (Deutsch = Default, daher kein Prefix)\n  var LANGS = ['en', 'es', 'it', 'ru', 'he'];\n\n  var pathMatch = window.location.pathname.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n  var currentLang = (pathMatch && LANGS.indexOf(pathMatch[1]) !== -1) ? pathMatch[1] : null;\n\n  \/\/ Wenn wir auf Deutsch (Default) sind, nichts tun \u2013 Links sind bereits korrekt\n  if (!currentLang) return;\n\n  var navLinks = document.querySelectorAll(\n    '#be-nav a[href^=\"https:\/\/spiritual-activity.org\"], #be-mobile-menu a[href^=\"https:\/\/spiritual-activity.org\"]'\n  );\n\n  navLinks.forEach(function (link) {\n    \/\/ Sprachumschalter-Links (xyz-ips) NICHT anfassen \u2013\n    \/\/ sonst wird der R\u00fcckweg zu Deutsch mit dem aktuellen Sprach-Prefix \u00fcberschrieben\n    \/\/ und man kommt aus der englischen\/etc. Version nicht mehr zur\u00fcck nach Deutsch.\n    if (link.closest('.be-lang') || link.closest('.be-lang-mobile')) return;\n\n    try {\n      var url = new URL(link.getAttribute('href'));\n      var alreadyPrefixed = new RegExp('^\/(' + LANGS.join('|') + ')(\/|$)').test(url.pathname);\n      if (!alreadyPrefixed) {\n        \/\/ z.B. \"\/verein\/\" -> \"\/en\/verein\/\"\n        url.pathname = '\/' + currentLang + url.pathname;\n        link.setAttribute('href', url.toString());\n      }\n    } catch (e) {\n      \/\/ ung\u00fcltige URL \u00fcberspringen\n    }\n  });\n}\n\ndocument.addEventListener('DOMContentLoaded', function() {\n  var burger = document.getElementById('be-hamburger');\n  var menu   = document.getElementById('be-mobile-menu');\n\n  if (burger) burger.addEventListener('click', function() {\n    if (menu.classList.contains('be-open')) {\n      beCloseMenu();\n    } else {\n      beOpenMenu();\n    }\n  });\n\n  if (menu) menu.addEventListener('click', function(e) {\n    if (e.target === menu) beCloseMenu();\n  });\n\n  beLocalizeNavLinks();\n});\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-00a4775 e-flex e-con-boxed e-con e-parent\" data-id=\"00a4775\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-8990b7b e-con-full e-flex e-con e-child\" data-id=\"8990b7b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b77d79f elementor-widget elementor-widget-html\" data-id=\"b77d79f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div style=\"font-size:14px; font-weight:500; letter-spacing:0.22em; text-transform:uppercase; color:#27703F; display:flex; align-items:center; gap:0.8rem;\">\n  <div style=\"width:24px; height:1px; background:#27703F; flex-shrink:0;\"><\/div>\n  Preise & Anmeldung\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cdd5931 elementor-widget elementor-widget-html\" data-id=\"cdd5931\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;1,300;1,400&display=swap');\n<\/style>\n<div style=\"font-family:'Cormorant Garamond',Georgia,serif; font-size:clamp(32px,4vw,52px); font-weight:300; line-height:1.15; color:#0C1E14;\">\n  Wir freuen uns \u00fcber Deine <em style=\"font-style:italic; color:#27703F;\">Anmeldung<\/em>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1bd5448 elementor-widget elementor-widget-text-editor\" data-id=\"1bd5448\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span>Geh mit uns und vielen Menschen weltweit den Weg durch die sechs Seelen\u00fcbungen.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d5a3b43 elementor-widget elementor-widget-html\" data-id=\"d5a3b43\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"facts-de\" style=\"display:flex; gap:2.5rem; flex-wrap:wrap;\">\n  <div>\n    <div style=\"font-size:13px; font-weight:500; letter-spacing:0.15em; text-transform:uppercase; color:#27703F; margin-bottom:4px;\">Start<\/div>\n    <div style=\"font-family:'Cormorant Garamond', Georgia, serif; font-size:18px; color:#0C1E14;\">27. September 2026<\/div>\n  <\/div>\n  <div>\n    <div style=\"font-size:13px; font-weight:500; letter-spacing:0.15em; text-transform:uppercase; color:#27703F; margin-bottom:4px;\">Ende<\/div>\n    <div style=\"font-family:'Cormorant Garamond', Georgia, serif; font-size:18px; color:#0C1E14;\">18. April 2027<\/div>\n  <\/div>\n  <div>\n    <div style=\"font-size:13px; font-weight:500; letter-spacing:0.15em; text-transform:uppercase; color:#27703F; margin-bottom:4px;\">Dauer<\/div>\n    <div style=\"font-family:'Cormorant Garamond', Georgia, serif; font-size:18px; color:#0C1E14;\">29 Wochen<\/div>\n  <\/div>\n  <div>\n    <div style=\"font-size:13px; font-weight:500; letter-spacing:0.15em; text-transform:uppercase; color:#27703F; margin-bottom:4px;\">Format<\/div>\n    <div style=\"font-family:'Cormorant Garamond', Georgia, serif; font-size:18px; color:#0C1E14;\">Meditativer Schulungsweg<\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  var p = location.pathname;\n  var isHe = p === '\/he' || p.indexOf('\/he\/') === 0 || p === '\/he-il' || p.indexOf('\/he-il\/') === 0;\n  if (isHe) {\n    document.querySelectorAll('.facts-de').forEach(function(e){ e.style.display = 'none'; });\n  }\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dd7bc0c elementor-widget elementor-widget-html\" data-id=\"dd7bc0c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Frank+Ruhl+Libre:wght@300;400;500;700&display=swap\" rel=\"stylesheet\">\n\n<style>\n.facts-he { display: none; }\n<\/style>\n\n<div class=\"facts-he\" dir=\"rtl\" data-no-translation translate=\"no\" style=\"gap:2.5rem; flex-wrap:wrap; font-family:'Frank Ruhl Libre', Georgia, serif; font-variant-numeric:lining-nums; font-feature-settings:'lnum' 1;\">\n  <div>\n    <div style=\"font-size:13px; font-weight:500; letter-spacing:0.05em; color:#27703F; margin-bottom:4px;\">\u05d4\u05ea\u05d7\u05dc\u05d4<\/div>\n    <div style=\"font-size:18px; color:#0C1E14;\">27 \u05d1\u05e1\u05e4\u05d8\u05de\u05d1\u05e8 2026<\/div>\n  <\/div>\n  <div>\n    <div style=\"font-size:13px; font-weight:500; letter-spacing:0.05em; color:#27703F; margin-bottom:4px;\">\u05e1\u05d9\u05d5\u05dd<\/div>\n    <div style=\"font-size:18px; color:#0C1E14;\">18 \u05d1\u05d0\u05e4\u05e8\u05d9\u05dc 2027<\/div>\n  <\/div>\n  <div>\n    <div style=\"font-size:13px; font-weight:500; letter-spacing:0.05em; color:#27703F; margin-bottom:4px;\">\u05de\u05e9\u05da<\/div>\n    <div style=\"font-size:18px; color:#0C1E14;\">29 \u05e9\u05d1\u05d5\u05e2\u05d5\u05ea<\/div>\n  <\/div>\n  <div>\n    <div style=\"font-size:13px; font-weight:500; letter-spacing:0.05em; color:#27703F; margin-bottom:4px;\">\u05e4\u05d5\u05e8\u05de\u05d8<\/div>\n    <div style=\"font-size:18px; color:#0C1E14;\">\u05de\u05e1\u05dc\u05d5\u05dc \u05d4\u05db\u05e9\u05e8\u05d4 \u05de\u05d3\u05d9\u05d8\u05d8\u05d9\u05d1\u05d9<\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  var p = location.pathname;\n  var isHe = p === '\/he' || p.indexOf('\/he\/') === 0 || p === '\/he-il' || p.indexOf('\/he-il\/') === 0;\n  if (isHe) {\n    document.querySelectorAll('.facts-he').forEach(function(e){ e.style.display = 'flex'; });\n  }\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7ca8198 e-con-full e-flex e-con e-child\" data-id=\"7ca8198\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-15dbd51 elementor-widget elementor-widget-spacer\" data-id=\"15dbd51\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9f9cdf0 e-flex e-con-boxed e-con e-parent\" data-id=\"9f9cdf0\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-34150e9 e-flex e-con-boxed e-con e-child\" data-id=\"34150e9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2dfbe22 elementor-widget elementor-widget-html\" data-id=\"2dfbe22\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;1,300;1,400&family=DM+Sans:wght@300;400;500&display=swap');\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Frank+Ruhl+Libre:wght@300;400;500;700&display=swap');\n\n.pk-wrap {\n  font-family: 'DM Sans', system-ui, sans-serif;\n  color: #0C1E14;\n  max-width: 1100px;\n  margin: 0 auto;\n}\n.pk-label {\n  font-size: 13px;\n  font-weight: 500;\n  letter-spacing: 0.22em;\n  text-transform: uppercase;\n  color: #27703F;\n  display: flex;\n  align-items: center;\n  gap: 0.8rem;\n  margin-bottom: 1rem;\n}\n.pk-label::before {\n  content: '';\n  display: block;\n  width: 24px;\n  height: 1px;\n  background: #27703F;\n  flex-shrink: 0;\n}\n.pk-title {\n  font-family: 'Cormorant Garamond', Georgia, serif;\n  font-size: clamp(32px, 4vw, 52px);\n  font-weight: 300;\n  line-height: 1.15;\n  color: #0C1E14;\n  margin: 0 0 2rem;\n}\n.pk-title {\n  color: #0C1E14 !important;\n}\n.pk-title em {\n  font-style: italic;\n  color: #27703F;\n}\n.pk-title[dir=\"rtl\"] {\n  direction: rtl;\n}\n.pk-intro {\n  font-size: 16px;\n  font-weight: 300;\n  color: #0C1E14;\n  line-height: 1.8;\n  max-width: 680px;\n}\n\n\/* Hebr\u00e4isch: eigenst\u00e4ndiger Block mit eigener Typografie *\/\n.pk-he {\n  display: none;\n  font-family: 'Frank Ruhl Libre', Georgia, serif;\n  color: #0C1E14;\n  max-width: 1100px;\n  margin: 0 auto;\n  font-variant-numeric: lining-nums;\n  font-feature-settings: 'lnum' 1;\n}\n.pk-he .pk-label-he {\n  font-size: 13px;\n  font-weight: 500;\n  letter-spacing: 0.05em;\n  color: #27703F;\n  display: flex;\n  align-items: center;\n  gap: 0.8rem;\n  margin-bottom: 1rem;\n}\n.pk-he .pk-label-he::before {\n  content: '';\n  display: block;\n  width: 24px;\n  height: 1px;\n  background: #27703F;\n  flex-shrink: 0;\n}\n.pk-he .pk-title-he {\n  font-size: clamp(32px, 4vw, 52px);\n  font-weight: 300;\n  line-height: 1.15;\n  color: #0C1E14;\n  margin: 0 0 2rem;\n}\n.pk-he .pk-title-he em {\n  font-style: normal;\n  color: #27703F;\n}\n.pk-he .pk-intro-he {\n  font-size: 16px;\n  font-weight: 300;\n  color: #0C1E14;\n  line-height: 1.8;\n  max-width: 680px;\n}\n<\/style>\n\n<!-- Lateinische \/ kyrillische \/ CJK \/ arabische Version -->\n<div class=\"pk-wrap pk-de\" id=\"pk-latin\">\n  <div class=\"pk-label\">Teilnahmebeitrag<\/div>\n\n  <h2 class=\"pk-title notranslate\" id=\"pk-title\" translate=\"no\">\n    <span id=\"pk-title-plain\">Preis<\/span><em id=\"pk-title-accent\">transparenz<\/em>\n  <\/h2>\n\n  <div class=\"pk-intro\">\n    Der Kurs wird getragen von dem Institute for Spiritual Activity sowie unserem Verein: Leben im Denken e.V. und unterst\u00fctzt von einem gro\u00dfen ehrenamtlichen Team. <br>\n\nUm den Kurs allen Menschen zu erm\u00f6glichen und gleichzeitig dieses und weitere Projekte gestalten zu k\u00f6nnen, haben wir ein solidarisches Preismodell entwickelt. Je nachdem, in welchem Land Du lebst und wie Deine wirtschaftliche Situation ist, kannst Du Deinen Teilnahmebeitrag f\u00fcr den Kurs innerhalb einer gewissen Bandbreite w\u00e4hlen. Hierf\u00fcr arbeiten wir mit einem transparenten Preismodell, das vier Kategorien umfasst \u2013 orientiert an Lebenshaltungskosten und Einkommensverh\u00e4ltnissen in verschiedenen Teilen der Welt. Mit einem h\u00f6heren Beitrag unterst\u00fctzt Du nicht nur unsere Initiative, sondern erm\u00f6glichst uns auch, das Projekt solidarisch in die Welt zu tragen. <br>\n\nIn Deinem Beitrag sind alle Angebote enthalten, inklusive Kartenset, Konferenzen, Briefe, Organisation und Versand innerhalb der EU. F\u00fcr L\u00e4nder au\u00dferhalb der EU m\u00fcssen wir leider eine Versandkostenpauschale von 15\u20ac aufschlagen. Schreib uns gerne an, wenn der Preis zu hoch f\u00fcr Dich ist, dann finden wir eine individuelle L\u00f6sung.\n  <\/div>\n<\/div>\n\n<!-- Hebr\u00e4ische Version (eigenes Layout\/Font, dein bestehendes Snippet) -->\n<div class=\"pk-he\" dir=\"rtl\" data-no-translation translate=\"no\" id=\"pk-he\">\n  <div class=\"pk-label-he\">\u05d3\u05de\u05d9 \u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea<\/div>\n\n  <div class=\"pk-title-he\">\u05e9\u05e7\u05d9\u05e4\u05d5\u05ea <em>\u05de\u05d7\u05d9\u05e8\u05d9\u05dd<\/em><\/div>\n\n  <div class=\"pk-intro-he\">\n    <p style=\"margin:0 0 1.4rem;\">\u05d4\u05e7\u05d5\u05e8\u05e1 \u05e0\u05d9\u05e9\u05d0 \u05e2\u05dc \u05d9\u05d3\u05d9 <span dir=\"ltr\">Institute for Spiritual Activity<\/span> \u05d5\u05e2\u05dc \u05d9\u05d3\u05d9 \u05d4\u05e2\u05de\u05d5\u05ea\u05d4 \u05e9\u05dc\u05e0\u05d5 <span dir=\"ltr\">Leben im Denken e.V.<\/span> \u05d5\u05e0\u05ea\u05de\u05da \u05e2\u05dc \u05d9\u05d3\u05d9 \u05e6\u05d5\u05d5\u05ea \u05de\u05ea\u05e0\u05d3\u05d1\u05d9\u05dd \u05d2\u05d3\u05d5\u05dc.<\/p>\n\n    <p style=\"margin:0 0 1.4rem;\">\u05db\u05d3\u05d9 \u05dc\u05d0\u05e4\u05e9\u05e8 \u05d0\u05ea \u05d4\u05e7\u05d5\u05e8\u05e1 \u05dc\u05db\u05dc \u05d0\u05d3\u05dd \u05d5\u05d1\u05de\u05e7\u05d1\u05d9\u05dc \u05dc\u05d0\u05e4\u05e9\u05e8 \u05dc\u05e0\u05d5 \u05dc\u05e4\u05ea\u05d7 \u05e4\u05e8\u05d5\u05d9\u05e7\u05d8 \u05d6\u05d4 \u05d5\u05e4\u05e8\u05d5\u05d9\u05e7\u05d8\u05d9\u05dd \u05e0\u05d5\u05e1\u05e4\u05d9\u05dd, \u05e4\u05d9\u05ea\u05d7\u05e0\u05d5 \u05de\u05d5\u05d3\u05dc \u05ea\u05de\u05d7\u05d5\u05e8 \u05e1\u05d5\u05dc\u05d9\u05d3\u05e8\u05d9. \u05d1\u05d4\u05ea\u05d0\u05dd \u05dc\u05de\u05d3\u05d9\u05e0\u05d4 \u05d1\u05d4 \u05d0\u05ea\u05dd \u05d7\u05d9\u05d9\u05dd \u05d5\u05dc\u05de\u05e6\u05d1\u05db\u05dd \u05d4\u05db\u05dc\u05db\u05dc\u05d9, \u05ea\u05d5\u05db\u05dc\u05d5 \u05dc\u05d1\u05d7\u05d5\u05e8 \u05d0\u05ea \u05d3\u05de\u05d9 \u05d4\u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea \u05e9\u05dc\u05db\u05dd \u05d1\u05e7\u05d5\u05e8\u05e1 \u05d1\u05d8\u05d5\u05d5\u05d7 \u05de\u05e1\u05d5\u05d9\u05dd. \u05dc\u05e9\u05dd \u05db\u05da \u05d0\u05e0\u05d5 \u05e4\u05d5\u05e2\u05dc\u05d9\u05dd \u05e2\u05dd \u05de\u05d5\u05d3\u05dc \u05ea\u05de\u05d7\u05d5\u05e8 \u05e9\u05e7\u05d5\u05e3 \u05d4\u05db\u05d5\u05dc\u05dc \u05d0\u05e8\u05d1\u05e2 \u05e7\u05d8\u05d2\u05d5\u05e8\u05d9\u05d5\u05ea \u2013 \u05d4\u05de\u05d1\u05d5\u05e1\u05e1\u05d5\u05ea \u05e2\u05dc \u05e2\u05dc\u05d5\u05ea \u05d4\u05de\u05d7\u05d9\u05d4 \u05d5\u05e8\u05de\u05d5\u05ea \u05d4\u05d4\u05db\u05e0\u05e1\u05d4 \u05d1\u05d0\u05d6\u05d5\u05e8\u05d9\u05dd \u05e9\u05d5\u05e0\u05d9\u05dd \u05d1\u05e2\u05d5\u05dc\u05dd. \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05ea\u05e8\u05d5\u05de\u05d4 \u05d2\u05d1\u05d5\u05d4\u05d4 \u05d9\u05d5\u05ea\u05e8 \u05d0\u05ea\u05dd \u05dc\u05d0 \u05e8\u05e7 \u05ea\u05d5\u05de\u05db\u05d9\u05dd \u05d1\u05d9\u05d5\u05d6\u05de\u05ea\u05e0\u05d5, \u05d0\u05dc\u05d0 \u05d2\u05dd \u05de\u05d0\u05e4\u05e9\u05e8\u05d9\u05dd \u05dc\u05e0\u05d5 \u05dc\u05e9\u05d0\u05ea \u05d0\u05ea \u05d4\u05e4\u05e8\u05d5\u05d9\u05e7\u05d8 \u05dc\u05e2\u05d5\u05dc\u05dd \u05d1\u05d0\u05d5\u05e4\u05df \u05e1\u05d5\u05dc\u05d9\u05d3\u05e8\u05d9.<\/p>\n\n    <p style=\"margin:0;\">\u05d1\u05ea\u05e8\u05d5\u05de\u05ea\u05db\u05dd \u05db\u05dc\u05d5\u05dc\u05d9\u05dd \u05db\u05dc \u05d4\u05e9\u05d9\u05e8\u05d5\u05ea\u05d9\u05dd, \u05dc\u05e8\u05d1\u05d5\u05ea \u05e1\u05d8 \u05d4\u05e7\u05dc\u05e4\u05d9\u05dd, \u05d4\u05db\u05e0\u05e1\u05d9\u05dd, \u05d4\u05de\u05db\u05ea\u05d1\u05d9\u05dd, \u05d4\u05d0\u05e8\u05d2\u05d5\u05df \u05d5\u05d4\u05de\u05e9\u05dc\u05d5\u05d7 \u05d1\u05ea\u05d5\u05da \u05d4\u05d0\u05d9\u05d7\u05d5\u05d3 \u05d4\u05d0\u05d9\u05e8\u05d5\u05e4\u05d9. \u05e2\u05d1\u05d5\u05e8 \u05de\u05d3\u05d9\u05e0\u05d5\u05ea \u05de\u05d7\u05d5\u05e5 \u05dc\u05d0\u05d9\u05d7\u05d5\u05d3 \u05d4\u05d0\u05d9\u05e8\u05d5\u05e4\u05d9, \u05dc\u05e6\u05e2\u05e8\u05e0\u05d5 \u05e2\u05dc\u05d9\u05e0\u05d5 \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05e2\u05dc\u05d5\u05ea \u05de\u05e9\u05dc\u05d5\u05d7 \u05e7\u05d1\u05d5\u05e2\u05d4 \u05e9\u05dc <span dir=\"ltr\">15\u20ac<\/span>. \u05d0\u05ea\u05dd \u05de\u05d5\u05d6\u05de\u05e0\u05d9\u05dd \u05dc\u05db\u05ea\u05d5\u05d1 \u05dc\u05e0\u05d5 \u05d0\u05dd \u05d4\u05de\u05d7\u05d9\u05e8 \u05d2\u05d1\u05d5\u05d4 \u05de\u05d3\u05d9 \u05e2\u05d1\u05d5\u05e8\u05db\u05dd, \u05d5\u05d0\u05d6 \u05e0\u05de\u05e6\u05d0 \u05e4\u05ea\u05e8\u05d5\u05df \u05d0\u05d9\u05e9\u05d9.<\/p>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  var titles = {\n    de: { plain: 'Preis',        accent: 'transparenz' },\n    en: { plain: 'Price ',       accent: 'transparency' },\n    fr: { plain: 'Transparence ',accent: 'des prix' },\n    es: { plain: 'Transparencia ', accent: 'de precios' },\n    it: { plain: 'Trasparenza ', accent: 'dei prezzi' },\n    pt: { plain: 'Transpar\u00eancia ', accent: 'de pre\u00e7os' },\n    ru: { plain: '\u041f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c ', accent: '\u0446\u0435\u043d' },\n    uk: { plain: '\u041f\u0440\u043e\u0437\u043e\u0440\u0456\u0441\u0442\u044c ',  accent: '\u0446\u0456\u043d' },\n    bg: { plain: '\u0426\u0435\u043d\u043e\u0432\u0430 ',      accent: '\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442' },\n    tr: { plain: 'Fiyat ',       accent: '\u015feffafl\u0131\u011f\u0131' },\n    ka: { plain: '\u10e4\u10d0\u10e1\u10d4\u10d1\u10d8\u10e1 ',     accent: '\u10d2\u10d0\u10db\u10ed\u10d5\u10d8\u10e0\u10d5\u10d0\u10da\u10dd\u10d1\u10d0' },\n    nl: { plain: 'Prijs',        accent: 'transparantie' },\n    no: { plain: 'Pris',         accent: 'transparens' },\n    zh: { plain: '\u4ef7\u683c',          accent: '\u900f\u660e\u5ea6' },\n    ja: { plain: '\u4fa1\u683c',          accent: '\u306e\u900f\u660e\u6027' },\n    ko: { plain: '\uac00\uaca9 ',         accent: '\ud22c\uba85\uc131' },\n    ar: { plain: '\u0634\u0641\u0627\u0641\u064a\u0629 ',      accent: '\u0627\u0644\u0623\u0633\u0639\u0627\u0631', rtl: true },\n    fa: { plain: '\u0634\u0641\u0627\u0641\u06cc\u062a ',      accent: '\u0642\u06cc\u0645\u062a', rtl: true }\n    \/\/ he wird separat \u00fcber den eigenen .pk-he Block gerendert\n  };\n\n  var p = location.pathname;\n  var isHe = p === '\/he' || p.indexOf('\/he\/') === 0 || p === '\/he-il' || p.indexOf('\/he-il\/') === 0;\n\n  if (isHe) {\n    document.getElementById('pk-latin').style.display = 'none';\n    document.getElementById('pk-he').style.display = 'block';\n    return;\n  }\n\n  function detectLang() {\n    var pathMatch = p.match(\/^\\\/(en|fr|es|it|pt|ru|uk|bg|tr|ka|nl|no|zh|ja|ko|ar|fa|de)(\\\/|$)\/i);\n    if (pathMatch) return pathMatch[1].toLowerCase();\n    var htmlLang = (document.documentElement.lang || '').toLowerCase().slice(0, 2);\n    if (titles[htmlLang]) return htmlLang;\n    return 'de';\n  }\n\n  var lang = detectLang();\n  var t = titles[lang] || titles.en;\n\n  document.getElementById('pk-title-plain').textContent = t.plain;\n  document.getElementById('pk-title-accent').textContent = t.accent;\n  if (t.rtl) {\n    document.getElementById('pk-title').setAttribute('dir', 'rtl');\n  } else {\n    document.getElementById('pk-title').removeAttribute('dir');\n  }\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-957321e elementor-widget elementor-widget-html\" data-id=\"957321e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Frank+Ruhl+Libre:wght@300;400;500;700&display=swap\" rel=\"stylesheet\">\n\n<style>\n.pk-he {\n  display: none;\n  font-family: 'Frank Ruhl Libre', Georgia, serif;\n  color: #0C1E14;\n  max-width: 1100px;\n  margin: 0 auto;\n  font-variant-numeric: lining-nums;\n  font-feature-settings: 'lnum' 1;\n}\n\n.pk-he .pk-label-he {\n  font-size: 13px;\n  font-weight: 500;\n  letter-spacing: 0.05em;\n  color: #27703F;\n  display: flex;\n  align-items: center;\n  gap: 0.8rem;\n  margin-bottom: 1rem;\n}\n.pk-he .pk-label-he::before {\n  content: '';\n  display: block;\n  width: 24px;\n  height: 1px;\n  background: #27703F;\n  flex-shrink: 0;\n}\n\n.pk-he .pk-title-he {\n  font-size: clamp(32px, 4vw, 52px);\n  font-weight: 300;\n  line-height: 1.15;\n  color: #0C1E14;\n  margin: 0 0 2rem;\n}\n.pk-he .pk-title-he em {\n  font-style: normal;\n  color: #27703F;\n}\n\n.pk-he .pk-intro-he {\n  font-size: 16px;\n  font-weight: 300;\n  color: #0C1E14;\n  line-height: 1.8;\n  max-width: 680px;\n}\n<\/style>\n\n<div class=\"pk-he\" dir=\"rtl\" data-no-translation translate=\"no\">\n  <div class=\"pk-label-he\">\u05d3\u05de\u05d9 \u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea<\/div>\n\n  <div class=\"pk-title-he\">\u05e9\u05e7\u05d9\u05e4\u05d5\u05ea <em>\u05de\u05d7\u05d9\u05e8\u05d9\u05dd<\/em><\/div>\n\n  <div class=\"pk-intro-he\">\n    <p style=\"margin:0 0 1.4rem;\">\u05d4\u05e7\u05d5\u05e8\u05e1 \u05e0\u05d9\u05e9\u05d0 \u05e2\u05dc \u05d9\u05d3\u05d9 <span dir=\"ltr\">Institute for Spiritual Activity<\/span> \u05d5\u05e2\u05dc \u05d9\u05d3\u05d9 \u05d4\u05e2\u05de\u05d5\u05ea\u05d4 \u05e9\u05dc\u05e0\u05d5 <span dir=\"ltr\">Leben im Denken e.V.<\/span> \u05d5\u05e0\u05ea\u05de\u05da \u05e2\u05dc \u05d9\u05d3\u05d9 \u05e6\u05d5\u05d5\u05ea \u05de\u05ea\u05e0\u05d3\u05d1\u05d9\u05dd \u05d2\u05d3\u05d5\u05dc.<\/p>\n\n    <p style=\"margin:0 0 1.4rem;\">\u05db\u05d3\u05d9 \u05dc\u05d0\u05e4\u05e9\u05e8 \u05d0\u05ea \u05d4\u05e7\u05d5\u05e8\u05e1 \u05dc\u05db\u05dc \u05d0\u05d3\u05dd \u05d5\u05d1\u05de\u05e7\u05d1\u05d9\u05dc \u05dc\u05d0\u05e4\u05e9\u05e8 \u05dc\u05e0\u05d5 \u05dc\u05e4\u05ea\u05d7 \u05e4\u05e8\u05d5\u05d9\u05e7\u05d8 \u05d6\u05d4 \u05d5\u05e4\u05e8\u05d5\u05d9\u05e7\u05d8\u05d9\u05dd \u05e0\u05d5\u05e1\u05e4\u05d9\u05dd, \u05e4\u05d9\u05ea\u05d7\u05e0\u05d5 \u05de\u05d5\u05d3\u05dc \u05ea\u05de\u05d7\u05d5\u05e8 \u05e1\u05d5\u05dc\u05d9\u05d3\u05e8\u05d9. \u05d1\u05d4\u05ea\u05d0\u05dd \u05dc\u05de\u05d3\u05d9\u05e0\u05d4 \u05d1\u05d4 \u05d0\u05ea\u05dd \u05d7\u05d9\u05d9\u05dd \u05d5\u05dc\u05de\u05e6\u05d1\u05db\u05dd \u05d4\u05db\u05dc\u05db\u05dc\u05d9, \u05ea\u05d5\u05db\u05dc\u05d5 \u05dc\u05d1\u05d7\u05d5\u05e8 \u05d0\u05ea \u05d3\u05de\u05d9 \u05d4\u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea \u05e9\u05dc\u05db\u05dd \u05d1\u05e7\u05d5\u05e8\u05e1 \u05d1\u05d8\u05d5\u05d5\u05d7 \u05de\u05e1\u05d5\u05d9\u05dd. \u05dc\u05e9\u05dd \u05db\u05da \u05d0\u05e0\u05d5 \u05e4\u05d5\u05e2\u05dc\u05d9\u05dd \u05e2\u05dd \u05de\u05d5\u05d3\u05dc \u05ea\u05de\u05d7\u05d5\u05e8 \u05e9\u05e7\u05d5\u05e3 \u05d4\u05db\u05d5\u05dc\u05dc \u05d0\u05e8\u05d1\u05e2 \u05e7\u05d8\u05d2\u05d5\u05e8\u05d9\u05d5\u05ea \u2013 \u05d4\u05de\u05d1\u05d5\u05e1\u05e1\u05d5\u05ea \u05e2\u05dc \u05e2\u05dc\u05d5\u05ea \u05d4\u05de\u05d7\u05d9\u05d4 \u05d5\u05e8\u05de\u05d5\u05ea \u05d4\u05d4\u05db\u05e0\u05e1\u05d4 \u05d1\u05d0\u05d6\u05d5\u05e8\u05d9\u05dd \u05e9\u05d5\u05e0\u05d9\u05dd \u05d1\u05e2\u05d5\u05dc\u05dd. \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05ea\u05e8\u05d5\u05de\u05d4 \u05d2\u05d1\u05d5\u05d4\u05d4 \u05d9\u05d5\u05ea\u05e8 \u05d0\u05ea\u05dd \u05dc\u05d0 \u05e8\u05e7 \u05ea\u05d5\u05de\u05db\u05d9\u05dd \u05d1\u05d9\u05d5\u05d6\u05de\u05ea\u05e0\u05d5, \u05d0\u05dc\u05d0 \u05d2\u05dd \u05de\u05d0\u05e4\u05e9\u05e8\u05d9\u05dd \u05dc\u05e0\u05d5 \u05dc\u05e9\u05d0\u05ea \u05d0\u05ea \u05d4\u05e4\u05e8\u05d5\u05d9\u05e7\u05d8 \u05dc\u05e2\u05d5\u05dc\u05dd \u05d1\u05d0\u05d5\u05e4\u05df \u05e1\u05d5\u05dc\u05d9\u05d3\u05e8\u05d9.<\/p>\n\n    <p style=\"margin:0;\">\u05d1\u05ea\u05e8\u05d5\u05de\u05ea\u05db\u05dd \u05db\u05dc\u05d5\u05dc\u05d9\u05dd \u05db\u05dc \u05d4\u05e9\u05d9\u05e8\u05d5\u05ea\u05d9\u05dd, \u05dc\u05e8\u05d1\u05d5\u05ea \u05e1\u05d8 \u05d4\u05e7\u05dc\u05e4\u05d9\u05dd, \u05d4\u05db\u05e0\u05e1\u05d9\u05dd, \u05d4\u05de\u05db\u05ea\u05d1\u05d9\u05dd, \u05d4\u05d0\u05e8\u05d2\u05d5\u05df \u05d5\u05d4\u05de\u05e9\u05dc\u05d5\u05d7 \u05d1\u05ea\u05d5\u05da \u05d4\u05d0\u05d9\u05d7\u05d5\u05d3 \u05d4\u05d0\u05d9\u05e8\u05d5\u05e4\u05d9. \u05e2\u05d1\u05d5\u05e8 \u05de\u05d3\u05d9\u05e0\u05d5\u05ea \u05de\u05d7\u05d5\u05e5 \u05dc\u05d0\u05d9\u05d7\u05d5\u05d3 \u05d4\u05d0\u05d9\u05e8\u05d5\u05e4\u05d9, \u05dc\u05e6\u05e2\u05e8\u05e0\u05d5 \u05e2\u05dc\u05d9\u05e0\u05d5 \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05e2\u05dc\u05d5\u05ea \u05de\u05e9\u05dc\u05d5\u05d7 \u05e7\u05d1\u05d5\u05e2\u05d4 \u05e9\u05dc <span dir=\"ltr\">15\u20ac<\/span>. \u05d0\u05ea\u05dd \u05de\u05d5\u05d6\u05de\u05e0\u05d9\u05dd \u05dc\u05db\u05ea\u05d5\u05d1 \u05dc\u05e0\u05d5 \u05d0\u05dd \u05d4\u05de\u05d7\u05d9\u05e8 \u05d2\u05d1\u05d5\u05d4 \u05de\u05d3\u05d9 \u05e2\u05d1\u05d5\u05e8\u05db\u05dd, \u05d5\u05d0\u05d6 \u05e0\u05de\u05e6\u05d0 \u05e4\u05ea\u05e8\u05d5\u05df \u05d0\u05d9\u05e9\u05d9.<\/p>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  var p = location.pathname;\n  var isHe = p === '\/he' || p.indexOf('\/he\/') === 0 || p === '\/he-il' || p.indexOf('\/he-il\/') === 0;\n  if (isHe) {\n    document.querySelectorAll('.pk-he').forEach(function(e){ e.style.display = 'block'; });\n  }\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-52882e6 elementor-hidden-desktop elementor-widget elementor-widget-image\" data-id=\"52882e6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/spiritual-activity.org\/wp-content\/uploads\/2026\/06\/Kartenset_BE-1024x683.jpeg\" class=\"attachment-large size-large wp-image-361\" alt=\"\" srcset=\"https:\/\/spiritual-activity.org\/wp-content\/uploads\/2026\/06\/Kartenset_BE-1024x683.jpeg 1024w, https:\/\/spiritual-activity.org\/wp-content\/uploads\/2026\/06\/Kartenset_BE-300x200.jpeg 300w, https:\/\/spiritual-activity.org\/wp-content\/uploads\/2026\/06\/Kartenset_BE-768x512.jpeg 768w, https:\/\/spiritual-activity.org\/wp-content\/uploads\/2026\/06\/Kartenset_BE-1536x1024.jpeg 1536w, https:\/\/spiritual-activity.org\/wp-content\/uploads\/2026\/06\/Kartenset_BE-18x12.jpeg 18w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-160969c elementor-hidden-tablet elementor-hidden-mobile e-flex e-con-boxed e-con e-child\" data-id=\"160969c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0c8d7b8 elementor-widget elementor-widget-image\" data-id=\"0c8d7b8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/spiritual-activity.org\/wp-content\/uploads\/2026\/06\/Kartenset_BE-1024x683.jpeg\" class=\"attachment-large size-large wp-image-361\" alt=\"\" srcset=\"https:\/\/spiritual-activity.org\/wp-content\/uploads\/2026\/06\/Kartenset_BE-1024x683.jpeg 1024w, https:\/\/spiritual-activity.org\/wp-content\/uploads\/2026\/06\/Kartenset_BE-300x200.jpeg 300w, https:\/\/spiritual-activity.org\/wp-content\/uploads\/2026\/06\/Kartenset_BE-768x512.jpeg 768w, https:\/\/spiritual-activity.org\/wp-content\/uploads\/2026\/06\/Kartenset_BE-1536x1024.jpeg 1536w, https:\/\/spiritual-activity.org\/wp-content\/uploads\/2026\/06\/Kartenset_BE-18x12.jpeg 18w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9604918 e-con-full e-flex e-con e-parent\" data-id=\"9604918\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-08cc56d elementor-widget elementor-widget-html\" data-id=\"08cc56d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Tinos:ital,wght@0,400;0,700;1,400&display=swap\" rel=\"stylesheet\">\n\n<style>\n  .ecwid-ProductBrowser,\n  .ecwid-productbrowser,\n  div[id^=\"my-store\"],\n  .ecwid:not(#sw-host-de) {\n    visibility: hidden !important;\n    height: 0 !important;\n    max-height: 0 !important;\n    overflow: hidden !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    position: absolute !important;\n    pointer-events: none !important;\n  }\n<\/style>\n\n<div id=\"sw-overlay-de\" style=\"display:none; position:fixed; inset:0; background:rgba(245,250,246,0.92); z-index:99999; flex-direction:column; align-items:center; justify-content:center; gap:20px;\">\n  <div style=\"width:52px; height:52px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:sw-spin-de 0.8s linear infinite;\"><\/div>\n  <div style=\"font-family:'Tinos',Georgia,serif; font-size:22px; color:#27703F;\">Checkout wird geladen\u2026<\/div>\n<\/div>\n<style>\n  @keyframes sw-spin-de { to { transform: rotate(360deg); } }\n<\/style>\n\n<div id=\"sw-host-de\"><\/div>\n\n<script>\n(function () {\n\n  \/\/ \u2500\u2500 Sprach-Guard: Skript bricht sofort ab, wenn die URL nicht zu DE passt \u2500\u2500\n  const _pathMatch = window.location.pathname.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n  const _pageLang = _pathMatch ? _pathMatch[1] : \"de\";\n  if (_pageLang !== \"de\") return;\n\n  const OVERLAY_ID    = \"sw-overlay-de\";\n  const SHOP_CART_URL = \"https:\/\/spiritual-activity.org\/store\/cart\";\n  const N8N_WEBHOOK_URL = \"https:\/\/n8n.spiritual-activity.org\/webhook\/registration-be\";\n\n  function getGroupRedirectUrl() {\n    const path = window.location.pathname;\n    \/\/ Erkennt Sprachpraefixe wie \/en\/, \/es\/, \/it\/, \/ru\/ am Anfang des Pfads.\n    \/\/ Deutsch ist die Standardsprache ohne Praefix.\n    const match = path.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n    const langPrefix = (match && match[1] !== \"de\") ? \"\/\" + match[1] : \"\";\n    return \"https:\/\/spiritual-activity.org\" + langPrefix + \"\/gruppen-anmeldung\";\n  }\n\n  const PRODUCTS = {\n    cat1: 864374030,\n    cat2: 844860366,\n    cat3: 844907264,\n    cat4: 844907265\n  };\n\n  \/\/ Versandfreie Digital-Produkte fuer alle Faelle, in denen nichts verschickt\n  \/\/ wird: rein digitale Teilnahme und Wiederholer (kein neues Kartenset).\n  const PRODUCTS_APPONLY = {\n    cat1: 863272251,\n    cat2: 863265753,\n    cat3: 863272252,\n    cat4: 863265754\n  };\n\n  const RANGES = {\n    cat1: { min: 160, max: 800 },\n    cat2: { min: 105, max: 700 },\n    cat3: { min:  75, max: 600 },\n    cat4: { min:  45, max: 500 }\n  };\n\n  const ORIENTIERUNG = {\n    cat1: { reduced: 160, base: 360, support: 580 },\n    cat2: { reduced: 105, base: 240, support: 460 },\n    cat3: { reduced:  75, base: 160, support: 340 },\n    cat4: { reduced:  45, base: 105, support: 220 }\n  };\n\n  const DISCOUNT_WIEDERHOLER = 0.30;\n  const DISCOUNT_SCHUELER    = 0.50;\n  const DISCOUNT_STUDENT     = 0.25;\n  const DISCOUNT_PAAR_P2     = 0.50;\n  const DISCOUNT_APP_FIXED   = 35;\n  \/\/ Versandpauschale ausserhalb EU+CH. Ecwid kassiert sie, der Wizard rechnet sie in die Anzeige-Summe ein.\n  const SHIPPING_COST   = 15;\n\n  const APP_ONLY_LANGS = new Set([\"Arabisch\",\"Farsi\",\"Ukrainisch\",\"Bulgarisch\",\"Franz\u00f6sisch\"]);\n\n  const EU_PLUS_CH = new Set([\n    \"AT\",\"BE\",\"BG\",\"CY\",\"CZ\",\"DE\",\"DK\",\"EE\",\"ES\",\"FI\",\"FR\",\"GR\",\"HR\",\n    \"HU\",\"IE\",\"IT\",\"LT\",\"LU\",\"LV\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SE\",\"SI\",\"SK\",\"CH\"\n  ]);\n  function needsShipping(countryCode) {\n    return countryCode && !EU_PLUS_CH.has(countryCode);\n  }\n\n  const COUNTRY_NAME_OVERRIDES = {\n    \"HK\":\"Hongkong\",\"MO\":\"Macau\",\"TW\":\"Taiwan\",\"AE\":\"Vereinigte Arabische Emirate\",\n    \"US\":\"USA\",\"GB\":\"Vereinigtes K\u00f6nigreich\",\"GB-SCT\":\"Schottland\",\n    \"KR\":\"S\u00fcdkorea\",\"SA\":\"Saudi-Arabien\",\n    \"MD\":\"Moldau\",\"PS\":\"Pal\u00e4stina\",\"CD\":\"Kongo (Kinshasa)\",\"CG\":\"Kongo (Brazzaville)\",\n    \"ST\":\"S\u00e3o Tom\u00e9 und Pr\u00edncipe\",\"CI\":\"C\u00f4te d'Ivoire\",\"TL\":\"Timor-Leste\",\n    \"CV\":\"Cabo Verde\",\"SZ\":\"Eswatini\",\"FM\":\"Mikronesien\",\"MH\":\"Marshallinseln\",\n    \"VC\":\"St. Vincent und Grenadinen\",\"LC\":\"St. Lucia\",\"KN\":\"St. Kitts und Nevis\",\n    \"AG\":\"Antigua und Barbuda\",\"TT\":\"Trinidad und Tobago\",\"BA\":\"Bosnien und Herzegowina\",\n    \"MK\":\"Nordmazedonien\",\"GQ\":\"\u00c4quatorialguinea\",\"GW\":\"Guinea-Bissau\",\n    \"CF\":\"Zentralafrikanische Republik\",\"SB\":\"Salomonen\",\"PG\":\"Papua-Neuguinea\",\n    \"DO\":\"Dominikanische Republik\",\"XK\":\"Kosovo\"\n  };\n\n  \/\/ \u2500\u2500 Zusaetzliche Suchbegriffe (Aliasse) je Land \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Beeinflusst NUR die Suche, nicht den angezeigten Namen. Alles klein schreiben.\n  const COUNTRY_SEARCH_ALIASES = {\n      \"US\": [\"vereinigte staaten\", \"vereinigte staaten von amerika\", \"usa\", \"amerika\", \"united states\", \"united states of america\", \"america\"],\n      \"GB\": [\"vereinigtes k\u00f6nigreich\", \"grossbritannien\", \"gro\u00dfbritannien\", \"england\", \"uk\", \"united kingdom\", \"britannien\", \"great britain\", \"britain\"],\n      \"GB-SCT\": [\"schottland\", \"scotland\"],\n      \"AE\": [\"vereinigte arabische emirate\", \"emirate\", \"uae\", \"vae\", \"united arab emirates\", \"emirates\", \"dubai\"],\n      \"KR\": [\"s\u00fcdkorea\", \"suedkorea\", \"korea\", \"south korea\"],\n      \"NL\": [\"niederlande\", \"holland\", \"netherlands\"],\n      \"CH\": [\"schweiz\", \"switzerland\", \"suisse\"],\n      \"DE\": [\"deutschland\", \"germany\", \"brd\"],\n      \"AT\": [\"\u00f6sterreich\", \"oesterreich\", \"austria\"],\n      \"CZ\": [\"tschechien\", \"tschechische republik\", \"czechia\", \"czech republic\"],\n      \"TR\": [\"t\u00fcrkei\", \"tuerkei\", \"turkey\", \"t\u00fcrkiye\", \"turkiye\"],\n      \"CI\": [\"elfenbeink\u00fcste\", \"elfenbeinkueste\", \"ivory coast\", \"cote d'ivoire\"],\n      \"CV\": [\"kapverden\", \"cabo verde\", \"cape verde\"],\n      \"MM\": [\"myanmar\", \"birma\", \"burma\"],\n      \"TL\": [\"osttimor\", \"timor-leste\", \"east timor\"],\n      \"SZ\": [\"eswatini\", \"swasiland\", \"swaziland\"],\n      \"MK\": [\"nordmazedonien\", \"mazedonien\", \"macedonia\", \"north macedonia\"],\n      \"BY\": [\"belarus\", \"weissrussland\", \"wei\u00dfrussland\"],\n      \"MD\": [\"moldau\", \"moldawien\", \"moldova\"],\n      \"MA\": [\"marokko\", \"morocco\"],\n      \"EG\": [\"\u00e4gypten\", \"aegypten\", \"egypt\"],\n      \"GR\": [\"griechenland\", \"greece\"],\n      \"IT\": [\"italien\", \"italy\"],\n      \"ES\": [\"spanien\", \"spain\"],\n      \"FR\": [\"frankreich\", \"france\"],\n      \"PL\": [\"polen\", \"poland\"],\n      \"RU\": [\"russland\", \"russia\", \"russische f\u00f6deration\", \"russian federation\"],\n      \"CN\": [\"china\", \"volksrepublik china\"],\n      \"JP\": [\"japan\"],\n      \"IN\": [\"indien\", \"india\"],\n      \"BR\": [\"brasilien\", \"brazil\"],\n      \"MX\": [\"mexiko\", \"mexico\"],\n      \"CA\": [\"kanada\", \"canada\"],\n      \"AU\": [\"australien\", \"australia\"],\n      \"NZ\": [\"neuseeland\", \"new zealand\"],\n      \"ZA\": [\"s\u00fcdafrika\", \"suedafrika\", \"south africa\"],\n      \"KP\": [\"north korea\"],\n      \"CD\": [\"dr congo\", \"drc\", \"congo kinshasa\"],\n      \"CG\": [\"congo brazzaville\"],\n      \"VA\": [\"vatican\", \"holy see\"],\n      \"LA\": [\"laos\"],\n      \"VN\": [\"vietnam\", \"viet nam\"],\n      \"IR\": [\"iran\", \"persia\"],\n      \"MO\": [\"macau\", \"macao\"],\n      \"HK\": [\"hong kong\"],\n      \"TW\": [\"taiwan\"],\n      \"GE\": [\"georgia\"]\n  };\n\n  const COUNTRIES = {\n    cat1: [\"CY\",\"CA\",\"FR\",\"FI\",\"BH\",\"AU\",\"AD\",\"SE\",\"DE\",\"SA\",\"AT\",\"BE\",\"HK\",\"MT\",\"IS\",\"SM\",\"NL\",\"DK\",\"TW\",\"AE\",\"US\",\"BN\",\"CH\",\"NO\",\"GY\",\"QA\",\"MO\",\"IE\",\"LU\",\"SG\",\"LI\",\"GB\",\"GB-SCT\"],\n    cat2: [\"KR\",\"ME\",\"CL\",\"TT\",\"MV\",\"UY\",\"BS\",\"OM\",\"SC\",\"MY\",\"PA\",\"TR\",\"LV\",\"GR\",\"KZ\",\"SK\",\"HU\",\"RU\",\"RO\",\"EE\",\"AW\",\"PT\",\"PR\",\"HR\",\"KW\",\"JP\",\"NZ\",\"PL\",\"IL\",\"ES\",\"LT\",\"SI\",\"CZ\",\"IT\"],\n    cat3: [\"BZ\",\"TN\",\"GT\",\"IQ\",\"ZA\",\"FJ\",\"EC\",\"LY\",\"ID\",\"VN\",\"BT\",\"DZ\",\"PE\",\"PW\",\"BW\",\"DM\",\"PY\",\"MD\",\"GQ\",\"MN\",\"VC\",\"IR\",\"GD\",\"EG\",\"CO\",\"SR\",\"TM\",\"BA\",\"BB\",\"BR\",\"AL\",\"AM\",\"GA\",\"MX\",\"AZ\",\"TH\",\"LC\",\"CN\",\"MK\",\"DO\",\"AG\",\"AR\",\"GE\",\"CR\",\"MU\",\"RS\",\"BY\",\"KN\",\"XK\",\"BG\"],\n    cat4: [\"UA\",\"BI\",\"SS\",\"CF\",\"YE\",\"MZ\",\"MW\",\"SO\",\"CD\",\"LR\",\"MG\",\"NE\",\"AF\",\"SD\",\"SB\",\"ML\",\"HT\",\"VU\",\"BF\",\"LS\",\"TD\",\"GW\",\"TG\",\"GM\",\"KI\",\"SL\",\"PG\",\"UG\",\"KM\",\"PS\",\"RW\",\"TZ\",\"ET\",\"ZM\",\"FM\",\"BJ\",\"GN\",\"TL\",\"MM\",\"SN\",\"CM\",\"TJ\",\"TV\",\"NP\",\"CG\",\"ST\",\"PK\",\"KE\",\"ZW\",\"MH\",\"HN\",\"TO\",\"CI\",\"WS\",\"GH\",\"VE\",\"KH\",\"MR\",\"KG\",\"NI\",\"NG\",\"DJ\",\"AO\",\"LA\",\"BD\",\"BO\",\"MA\",\"JO\",\"LB\",\"NR\",\"IN\",\"NA\",\"CV\",\"UZ\",\"PH\",\"SZ\",\"JM\",\"SV\",\"LK\"]\n  };\n\n  const OPT_COMM_LANG = \"In welcher Sprache nimmst Du teil?\";\n  const OPT_STATUS    = \"Trifft etwas davon auf Dich zu?\";\n\n  \/\/ \u2500\u2500 Ecwid-Option-Werte (exakt wie im Shop-Screenshot) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const STATUS_LABEL = {\n    paar:        \"Zu zweit (gleicher Haushalt)\",\n    schueler:    \"Sch\u00fcler:innen\",     \/\/ Ecwid-Wert exakt: \"Sch\u00fcler:innen\"\n    student:     \"Student\",\n    wiederholer: \"Wiederholer\",\n    apponly:     \"Digitale Teilnahme (App)\"\n  };\n\n  \/\/ \u2500\u2500 Shadow DOM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const host = document.getElementById(\"sw-host-de\");\n  const shadow = host.attachShadow({ mode: \"open\" });\n\n\n  const styleEl = document.createElement(\"style\");\n  styleEl.textContent = `\n    :host {\n      display: block;\n      --bg:           #F5FAF6;\n      --card:         #FFFFFF;\n      --ink:          #0C1E14;\n      --ink-muted:    #27703F;\n      --accent:       #0C1E14;\n      --accent-light: #E6F2E8;\n      --border:       #C8E0CE;\n      --radius:       16px;\n      --radius-sm:    10px;\n    }\n    @keyframes wiz-spin { to { transform: rotate(360deg); } }\n\n    .sw-root {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 20px; font-weight: 400; color: var(--ink);\n      background: var(--bg); padding: 32px 20px;\n      display: flex; align-items: flex-start; justify-content: center;\n    }\n    .sw-card {\n      background: var(--card); border: 1px solid var(--border);\n      border-radius: 24px; padding: 36px 32px;\n      width: 100%; max-width: 780px;\n      box-shadow: 0 4px 24px rgba(12,30,20,0.08); box-sizing: border-box;\n    }\n    @media (max-width: 480px) {\n      .sw-root { padding: 16px 10px; }\n      .sw-card { padding: 24px 16px; border-radius: 16px; }\n    }\n\n    .sw-progress { display: flex; gap: 8px; margin-bottom: 32px; }\n    .sw-progress-step { flex: 1; height: 4px; background: var(--border); border-radius: 999px; transition: background 0.35s; }\n    .sw-progress-step.active { background: var(--accent); }\n    .sw-progress-step.done   { background: var(--accent); opacity: 0.4; }\n\n    .sw-step-label { font-size: 12px; font-weight: 400; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: 10px; }\n    .sw-heading { font-size: 26px; font-weight: 500; line-height: 1.2; margin: 0 0 6px; color: var(--accent); letter-spacing: 0.01em; }\n    .sw-subtext { font-size: 18px; font-weight: 400; color: var(--ink-muted); margin: 0 0 28px; line-height: 1.6; }\n    .sw-label { display: block; font-size: 18px; font-weight: 700; margin-bottom: 6px; color: var(--ink); }\n\n    .sw-select, .sw-text-input {\n      width: 100%; padding: 13px 15px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg);\n      font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-select {\n      appearance: none;\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2327703F' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: right 15px center;\n      cursor: pointer;\n    }\n    .sw-select:focus, .sw-text-input:focus {\n      outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1);\n    }\n    .sw-text-input { margin-bottom: 14px; }\n\n    .sw-redirect { display: none; margin-top: 12px; padding: 18px 20px; border-radius: var(--radius-sm); background: #FFF8F0; border: 1px solid rgba(180,80,0,0.2); font-size: 17px; line-height: 1.8; color: var(--ink); }\n    .sw-redirect strong { display: block; margin-bottom: 8px; font-size: 17px; color: #7A3500; }\n    .sw-redirect a { color: #27703F; text-decoration: underline; }\n    .sw-infobox {\n      margin-top: 12px; padding: 15px 17px; border-radius: var(--radius-sm);\n      background: var(--accent-light); border: 1px solid rgba(12,30,20,0.15);\n      font-size: 18px; font-weight: 400; line-height: 1.5;\n    }\n    .sw-infobox-title {\n      font-weight: 700; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase;\n      color: var(--accent); margin-bottom: 3px;\n    }\n\n    .sw-divider { border: 0; border-top: 1px solid var(--border); margin: 30px 0 24px; }\n\n    .sw-choice-row { display: flex; gap: 10px; flex-wrap: wrap; }\n.sw-choice-card {\n  flex: 1; min-width: 150px; padding: 16px 14px;\n  border: 1px solid var(--border); border-radius: var(--radius-sm);\n  text-align: center; cursor: pointer; font-size: 17px; line-height: 1.3;\n  transition: all 0.15s; background: var(--bg);\n  box-sizing: border-box;\n}\n    .sw-choice-card:hover { border-color: var(--accent); }\n    .sw-choice-card.active { background: var(--accent-light); border-color: var(--accent); font-weight: 700; color: var(--accent); }\n    @media (max-width: 480px) { .sw-choice-card { min-width: 100%; } }\n\n    .sw-person-block { margin-bottom: 8px; }\n    .sw-person-title { font-weight: 700; font-size: 21px; color: var(--accent); margin-bottom: 16px; }\n    .sw-field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 0; }\n    @media (max-width: 480px) { .sw-field-grid { grid-template-columns: 1fr; } }\n\n    .sw-range-header { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 22px; }\n    .sw-range-header-label { font-weight: 700; font-size: 18px; }\n    .sw-amount-display { display: flex; align-items: baseline; gap: 3px; }\n    .sw-amount-display span { font-size: 18px; font-weight: 400; }\n    .sw-amount-input {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 36px; font-weight: 700; color: var(--ink);\n      border: 2px solid var(--border); background: var(--bg);\n      text-align: right; width: 132px; padding: 4px 12px;\n      outline: none; border-radius: var(--radius-sm);\n      transition: background 0.15s, color 0.15s, border-color 0.15s, box-shadow 0.15s;\n    }\n    .sw-amount-input:hover { border-color: var(--accent); background: var(--accent-light); }\n    .sw-amount-input:focus { border-color: var(--accent); background: var(--accent-light); color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n\n    input[type=range].sw-range {\n      -webkit-appearance: none; width: 100%; height: 6px;\n      border-radius: 999px; background: var(--border); outline: none; cursor: pointer;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb {\n      -webkit-appearance: none; width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35);\n      cursor: pointer; transition: transform 0.15s, box-shadow 0.15s;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb:hover { transform: scale(1.08); box-shadow: 0 0 0 9px rgba(12,30,20,0.18), 0 3px 12px rgba(12,30,20,0.4); }\n    input[type=range].sw-range::-webkit-slider-thumb:active { transform: scale(1.12); }\n    input[type=range].sw-range::-moz-range-thumb {\n      width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      border: none; box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); cursor: pointer;\n    }\n    input[type=range].sw-range.sw-pulse::-webkit-slider-thumb { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    input[type=range].sw-range.sw-pulse::-moz-range-thumb    { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    @keyframes sw-thumb-pulse {\n      0%, 100% { box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); }\n      50%      { box-shadow: 0 0 0 15px rgba(12,30,20,0.05), 0 3px 10px rgba(12,30,20,0.35); }\n    }\n\n    .sw-range-wrap { position: relative; }\n    .sw-markers { position: relative; height: 56px; margin-bottom: 8px; margin-left: 18px; margin-right: 18px; }\n    .sw-marker {\n      position: absolute; transform: translateX(-50%);\n      display: flex; flex-direction: column; align-items: center; gap: 2px;\n      justify-content: flex-end; height: 100%; pointer-events: auto; cursor: pointer;\n    }\n    .sw-marker-tick { width: 1px; height: 10px; background: var(--border); flex-shrink: 0; }\n    .sw-marker.active .sw-marker-tick { background: var(--accent); opacity: 0.5; }\n    .sw-marker-label { font-size: 11px; font-weight: 400; color: var(--ink-muted); white-space: nowrap; line-height: 1.2; text-align: center; order: -2; }\n    .sw-marker-amount { font-size: 13px; font-weight: 700; color: var(--ink-muted); order: -1; }\n    .sw-marker.active .sw-marker-label, .sw-marker.active .sw-marker-amount { color: var(--accent); }\n\n    @media (max-width: 540px) {\n      .sw-markers { display: none; }\n      .sw-markers-mobile { display: flex !important; }\n    }\n    .sw-markers-mobile {\n      display: none; flex-direction: column; gap: 0;\n      margin: 12px 0 4px; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden;\n    }\n    .sw-marker-mobile {\n      display: flex; align-items: center; justify-content: space-between;\n      padding: 10px 14px; cursor: pointer; border-bottom: 1px solid var(--border);\n      transition: background 0.15s; font-family: 'Tinos', Georgia, serif;\n    }\n    .sw-marker-mobile:last-child { border-bottom: 0; }\n    .sw-marker-mobile:hover { background: var(--accent-light); }\n    .sw-marker-mobile.active { background: var(--accent-light); }\n    .sw-marker-mobile-label { font-size: 15px; font-weight: 400; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-label { color: var(--accent); font-weight: 700; }\n    .sw-marker-mobile-amount { font-size: 16px; font-weight: 700; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-amount { color: var(--accent); }\n\n    .sw-summary-box { padding: 18px 20px; background: var(--accent-light); border: 1px solid rgba(12,30,20,0.2); border-radius: var(--radius-sm); margin-top: 20px; }\n    .sw-summary-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; font-size: 16px; color: var(--ink); }\n    .sw-summary-row.sw-summary-discount { color: #8A1F1F; }\n    .sw-summary-row.sw-summary-total { border-top: 1px solid rgba(12,30,20,0.25); margin-top: 8px; padding-top: 12px; font-weight: 700; font-size: 22px; color: var(--accent); }\n    .sw-summary-person-label { font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-muted); margin: 14px 0 2px; }\n    .sw-summary-person-label:first-child { margin-top: 0; }\n\n    .sw-btn-row { display: flex; gap: 10px; margin-top: 24px; flex-wrap: wrap; }\n    .sw-btn { flex: 1; min-width: 140px; padding: 15px 17px; border-radius: var(--radius-sm); font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 700; cursor: pointer; transition: all 0.2s; border: 0; }\n    .sw-btn-primary { background: var(--accent); color: #fff; }\n    .sw-btn-primary:hover { background: #27703F; transform: translateY(-1px); }\n    .sw-btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }\n    .sw-btn-secondary { background: transparent; color: var(--ink); border: 1px solid var(--border); }\n    .sw-btn-secondary:hover { background: var(--bg); }\n\n    .sw-error { display: none; margin-top: 15px; padding: 13px 15px; border-radius: var(--radius-sm); background: #FFF3F3; border: 1px solid rgba(220,30,30,0.2); color: #8A1F1F; font-size: 18px; font-weight: 400; line-height: 1.5; white-space: pre-wrap; }\n    .wiz-spinner { display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.4); border-top-color: #fff; border-radius: 50%; animation: wiz-spin 0.7s linear infinite; vertical-align: middle; margin-right: 8px; }\n\n    .sw-country-search-wrap { position: relative; margin-bottom: 10px; }\n    .sw-country-search-icon { position: absolute; left: 18px; top: 50%; transform: translateY(-50%); color: var(--ink-muted); pointer-events: none; opacity: 0.5; }\n    .sw-country-search {\n      width: 100%; padding: 13px 15px 13px 54px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg); font-family: 'Tinos', Georgia, serif;\n      font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-country-search:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    .sw-country-list { max-height: 240px; overflow-y: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }\n    .sw-country-item { padding: 11px 15px; cursor: pointer; font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; display: flex; justify-content: space-between; align-items: center; transition: background 0.15s; border-bottom: 1px solid var(--border); }\n    .sw-country-item:last-child { border-bottom: 0; }\n    .sw-country-item:hover { background: var(--accent-light); }\n    .sw-country-item.selected { background: var(--accent-light); font-weight: 700; }\n    .sw-country-item-cat { font-size: 12px; color: var(--ink-muted); background: var(--border); padding: 2px 8px; border-radius: 999px; }\n    .sw-country-empty { padding: 15px; font-size: 18px; color: var(--ink-muted); text-align: center; }\n\n    .sw-step { display: none; }\n    .sw-step.active { display: block; }\n  `;\n  shadow.appendChild(styleEl);\n\n  const wrapper = document.createElement(\"div\");\n  wrapper.innerHTML = `\n    <div class=\"sw-root\">\n      <div class=\"sw-card\">\n\n        <div class=\"sw-progress\">\n          <div class=\"sw-progress-step\" id=\"sw-prog-1\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-2\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-3\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-4\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-5\"><\/div>\n        <\/div>\n\n        <!-- STEP 1: WILLKOMMEN -->\n        <div class=\"sw-step active\" id=\"sw-step-welcome\">\n          <div class=\"sw-step-label\">Schritt 1 von 5<\/div>\n          <h2 class=\"sw-heading\">Willkommen<\/h2>\n          <p class=\"sw-subtext\">In wenigen Schritten w\u00e4hlst Du Land, Sprache, Anmeldeart und Beitrag \u2013 und gehst dann direkt zum Checkout.<\/p>\n          <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-welcome-next\" style=\"width:100%;\">Preise & Anmeldung<\/button>\n        <\/div>\n\n        <!-- STEP 2: LAND -->\n        <div class=\"sw-step\" id=\"sw-step-country\">\n          <div class=\"sw-step-label\">Schritt 2 von 5<\/div>\n          <h2 class=\"sw-heading\">Wo wohnst Du?<\/h2>\n          <label class=\"sw-label\">Land<\/label>\n          <div class=\"sw-country-search-wrap\">\n            <svg class=\"sw-country-search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.35-4.35\"\/><\/svg>\n            <input type=\"text\" class=\"sw-country-search\" id=\"sw-country-search\" placeholder=\"Land suchen\u2026\" autocomplete=\"off\">\n          <\/div>\n          <div class=\"sw-country-list\" id=\"sw-country-list\"><\/div>\n          <input type=\"hidden\" id=\"sw-country\">\n          <div class=\"sw-infobox\" id=\"sw-catInfo\">\n            <div class=\"sw-infobox-title\">Preiskategorie<\/div>\n            <div id=\"sw-catText\">Bitte zuerst ein Land w\u00e4hlen.<\/div>\n          <\/div>\n          <div class=\"sw-redirect\" id=\"sw-redirect-russia\">\n            <strong>F\u00fcr Teilnehmende aus Russland gibt es eine eigene Anmeldeseite.<\/strong>\n            Unser Bezahlsystem ist in Russland nicht verf\u00fcgbar. Bitte melde Dich dort an:<br><br>\n            <a href=\"https:\/\/spiritual-activity.org\/ru\/anmeldung-basic-exercises\/\">Zur russischen Anmeldung<\/a>\n          <\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-country-back\">Zur\u00fcck<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-country-next\" disabled>Weiter<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 3: SPRACHE + ANMELDEFORM -->\n        <div class=\"sw-step\" id=\"sw-step-langform\">\n          <div class=\"sw-step-label\">Schritt 3 von 5<\/div>\n          <h2 class=\"sw-heading\">Sprache & Anmeldeart<\/h2>\n\n          <label class=\"sw-label\" for=\"sw-commLang\">In welcher Sprache nimmst Du teil?<\/label>\n          <select class=\"sw-select\" id=\"sw-commLang\">\n            <option value=\"\" selected disabled>Bitte w\u00e4hlen\u2026<\/option>\n            <option>Deutsch<\/option>\n            <option>Englisch<\/option>\n            <option>Spanisch<\/option>\n            <option>Franz\u00f6sisch<\/option>\n            <option>Italienisch<\/option>\n            <option>Portugiesisch<\/option>\n            <option>Arabisch<\/option>\n            <option>Hebr\u00e4isch<\/option>\n            <option>Farsi<\/option>\n            <option>Georgisch<\/option>\n            <option>Ukrainisch<\/option>\n            <option>Niederl\u00e4ndisch<\/option>\n            <option>T\u00fcrkisch<\/option>\n            <option>Bulgarisch<\/option>\n            <option>Russisch<\/option>\n            <option>Chinesisch<\/option>\n            <option>Japanisch<\/option>\n            <option>Koreanisch<\/option>\n          <\/select>\n\n          <div class=\"sw-infobox\" id=\"sw-apponly-note\" style=\"display:none; margin-top:14px;\">\n            <div class=\"sw-infobox-title\">DIGITALE TEILNAHME \u00b7 \u221235\u20ac<\/div>\n            <div id=\"sw-apponly-note-text\">Du nimmst digital teil. Der Rabatt wird automatisch in der Zusammenfassung ber\u00fccksichtigt.<\/div>\n          <\/div>\n\n          <label class=\"sw-label\" style=\"margin-top:26px;\">Wie m\u00f6chtest Du Dich anmelden?<\/label>\n          <div class=\"sw-choice-row\" id=\"sw-form-choices\">\n            <div class=\"sw-choice-card active\" data-form=\"einzeln\">Einzeln<\/div>\n            <div class=\"sw-choice-card\" data-form=\"paar\">Zu zweit<br><span style=\"font-size:13px; font-weight:400;\">(gleicher Haushalt)<\/span><\/div>\n            <div class=\"sw-choice-card\" data-form=\"gruppe\">Gruppe<br><span style=\"font-size:13px; font-weight:400;\">(ab 4 Personen)<\/span><\/div>\n          <\/div>\n\n          <div class=\"sw-infobox\" id=\"sw-gruppe-note\" style=\"display:none; margin-top:18px;\">\n            <div class=\"sw-infobox-title\">Gruppen-Anmeldung<\/div>\n            <div>Wir freuen uns \u00fcber Dein Interesse. Auf der n\u00e4chsten Seite kannst Du die Gruppen-Anmeldung durchf\u00fchren. Bitte beachte: Die Gruppen-Anmeldung ist nur auf Deutsch und Englisch verf\u00fcgbar.<\/div>\n          <\/div>\n\n          <div class=\"sw-error\" id=\"sw-error-langform\"><\/div>\n\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-langform-back\">Zur\u00fcck<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-langform-next\" disabled>Weiter<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-gruppe-redirect\" style=\"display:none;\">Weiter zur Gruppen-Anmeldung<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 4A: ANGABEN \u2013 EINZELN -->\n        <div class=\"sw-step\" id=\"sw-step-details-solo\">\n          <div class=\"sw-step-label\">Schritt 4 von 5<\/div>\n          <h2 class=\"sw-heading\">Ein paar Angaben zu Dir<\/h2>\n          <p class=\"sw-subtext\">Trifft etwas davon auf Dich zu? Das hilft uns, Dir den passenden Beitrag vorzuschlagen.<\/p>\n\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">DIGITALE TEILNAHME \u00b7 \u221235\u20ac<\/div>\n            <div>Du nimmst digital teil. Der Rabatt wird automatisch in der Zusammenfassung ber\u00fccksichtigt.<\/div>\n          <\/div>\n\n          <label class=\"sw-label\">Bitte w\u00e4hlen<\/label>\n          <!-- Reihenfolge: Normal \u2192 Sch\u00fcler \u2192 Ausbildung\/Studium \u2192 Wiederholer -->\n          <select class=\"sw-select\" id=\"sw-solo-status\">\n            <option value=\"\" disabled selected>Bitte w\u00e4hlen\u2026<\/option>\n            <option value=\"normal\">Normale Anmeldung<\/option>\n            <option value=\"schueler\">Sch\u00fcler:innen (\u221250%)<\/option>\n            <option value=\"student\">In Ausbildung\/Studium (\u221225%)<\/option>\n            <option value=\"wiederholer\">Ich wiederhole den Kurs mit den Seelen\u00fcbungen (kein neues Kartenset \u2212 30%)<\/option>\n          <\/select>\n\n          <div class=\"sw-error\" id=\"sw-error-details-solo\"><\/div>\n\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-solo-back\">Zur\u00fcck<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-solo-next\" disabled>Weiter<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 4B: ANGABEN \u2013 PAAR -->\n        <div class=\"sw-step\" id=\"sw-step-details-paar\">\n          <div class=\"sw-step-label\">Schritt 4 von 5<\/div>\n          <h2 class=\"sw-heading\">Angaben zu Euch beiden<\/h2>\n          <p class=\"sw-subtext\">Bitte trage die Daten f\u00fcr beide Personen ein. Die zweite Person erh\u00e4lt automatisch 50% Erm\u00e4\u00dfigung.<\/p>\n\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-paar-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">DIGITALE TEILNAHME \u00b7 \u221235\u20ac<\/div>\n            <div>Ihr nehmt digital teil. Der Rabatt wird automatisch in der Zusammenfassung ber\u00fccksichtigt.<\/div>\n          <\/div>\n\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">Person 1<\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">Vorname<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-vorname\"><\/div>\n              <div><label class=\"sw-label\">Nachname<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">E-Mail<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p1-email\">\n          <\/div>\n\n          <hr class=\"sw-divider\">\n\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">Person 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">Vorname<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-vorname\"><\/div>\n              <div><label class=\"sw-label\">Nachname<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">E-Mail<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p2-email\">\n          <\/div>\n\n          <div class=\"sw-error\" id=\"sw-error-details-paar\"><\/div>\n\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-paar-back\">Zur\u00fcck<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-paar-next\" disabled>Weiter<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 5A: BEITRAG \u2013 EINZELN -->\n        <div class=\"sw-step\" id=\"sw-step-amount-solo\">\n          <div class=\"sw-step-label\">Schritt 5 von 5<\/div>\n          <h2 class=\"sw-heading\">Beitrag w\u00e4hlen<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-solo\">Hier kannst Du den Beitrag w\u00e4hlen, der f\u00fcr Dich angemessen ist.<\/p>\n\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-solo\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">DIGITALE TEILNAHME \u00b7 \u221235\u20ac<\/div>\n            <div>Du nimmst digital teil. Der Rabatt wird automatisch in der Zusammenfassung ber\u00fccksichtigt.<\/div>\n          <\/div>\n\n          <div class=\"sw-range-header\">\n            <div class=\"sw-range-header-label\">Dein Betrag<\/div>\n            <div class=\"sw-amount-display\">\n              <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-solo\" value=\"360\">\n              <span>\u20ac<\/span>\n            <\/div>\n          <\/div>\n          <div class=\"sw-range-wrap\">\n            <div class=\"sw-markers\" id=\"sw-markers-solo\"><\/div>\n            <input type=\"range\" class=\"sw-range\" id=\"sw-amount-solo\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n            <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-solo\"><\/div>\n          <\/div>\n\n          <p style=\"margin-top:18px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            Wenn Du einen weiteren finanziellen Nachlass brauchst, dann schreib uns gerne an:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n\n          <div class=\"sw-summary-box\" id=\"sw-summary-solo\">\n            <div class=\"sw-summary-row\"><span>Gew\u00e4hlter Beitrag<\/span><span id=\"sw-solo-chosen\">360\u20ac<\/span><\/div>\n            <div id=\"sw-solo-discounts\"><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-solo\" style=\"display:none;\"><span>Versand<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>Gesamt<\/span><span><span id=\"sw-solo-total\">360<\/span>\u20ac<\/span><\/div>\n          <\/div>\n\n          <div class=\"sw-error\" id=\"sw-error-amount-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-solo-back\">Zur\u00fcck<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-solo\">Anmelden<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 5B: BEITRAG \u2013 PAAR -->\n        <div class=\"sw-step\" id=\"sw-step-amount-paar\">\n          <div class=\"sw-step-label\">Schritt 5 von 5<\/div>\n          <h2 class=\"sw-heading\">Beitr\u00e4ge w\u00e4hlen<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-paar\">Jede Person w\u00e4hlt ihren eigenen Beitrag. Person 2 erh\u00e4lt automatisch 50% Erm\u00e4\u00dfigung.<\/p>\n\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-paar\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">DIGITALE TEILNAHME \u00b7 \u221235\u20ac<\/div>\n            <div>Ihr nehmt digital teil. Der Rabatt wird automatisch in der Zusammenfassung ber\u00fccksichtigt.<\/div>\n          <\/div>\n\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p1-title\">Person 1<\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">Beitrag<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p1\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p1\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p1\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p1\"><\/div>\n            <\/div>\n          <\/div>\n\n          <hr class=\"sw-divider\">\n\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p2-title\">Person 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">Beitrag<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p2\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p2\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p2\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p2\"><\/div>\n            <\/div>\n          <\/div>\n\n          <p style=\"margin-top:8px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            Wenn Ihr einen weiteren finanziellen Nachlass braucht, dann schreibt uns gerne an:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n\n          <div class=\"sw-summary-box\" id=\"sw-summary-paar\">\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p1-label\">Person 1<\/div>\n            <div class=\"sw-summary-row\"><span>Gew\u00e4hlter Beitrag<\/span><span id=\"sw-p1-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p1-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>Zwischensumme<\/span><span id=\"sw-p1-subtotal\">0\u20ac<\/span><\/div>\n\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p2-label\">Person 2<\/div>\n            <div class=\"sw-summary-row\"><span>Gew\u00e4hlter Beitrag<\/span><span id=\"sw-p2-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p2-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>Zwischensumme<\/span><span id=\"sw-p2-subtotal\">0\u20ac<\/span><\/div>\n\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-paar\" style=\"display:none;\"><span>Versand<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>Gesamt<\/span><span><span id=\"sw-paar-total\">0<\/span>\u20ac<\/span><\/div>\n          <\/div>\n\n          <div class=\"sw-error\" id=\"sw-error-amount-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-paar-back\">Zur\u00fcck<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-paar\">Zum Checkout<\/button>\n          <\/div>\n        <\/div>\n\n      <\/div>\n    <\/div>\n  `;\n  shadow.appendChild(wrapper);\n\n  const $ = (id) => shadow.getElementById(id);\n\n  const COUNTRY_TO_CAT = {};\n  Object.keys(COUNTRIES).forEach(cat => COUNTRIES[cat].forEach(code => COUNTRY_TO_CAT[code] = cat));\n\n  function getCountryName(code) {\n    if (COUNTRY_NAME_OVERRIDES[code]) return COUNTRY_NAME_OVERRIDES[code];\n    try { return new Intl.DisplayNames([\"de\"], { type: \"region\" }).of(code) || code; }\n    catch { return code; }\n  }\n\n  function getCountryAliases(code) {\n    const list = [];\n    \/\/ Offizieller Intl-Name, falls durch ein Override ersetzt (z. B. US -> \"USA\")\n    if (COUNTRY_NAME_OVERRIDES[code]) {\n      try {\n        const intlName = new Intl.DisplayNames([\"de\"], { type: \"region\" }).of(code);\n        if (intlName) list.push(intlName.toLowerCase());\n      } catch {}\n    }\n    (COUNTRY_SEARCH_ALIASES[code] || []).forEach(a => list.push(a.toLowerCase()));\n    return list;\n  }\n\n  function getAllCountriesSorted() {\n    const all = [];\n    [\"cat1\",\"cat2\",\"cat3\",\"cat4\"].forEach(cat => {\n      COUNTRIES[cat]\n        .map(code => ({ code, name: getCountryName(code), cat, aliases: getCountryAliases(code) }))\n        .sort((a, b) => a.name.localeCompare(b.name, \"de\"))\n        .forEach(c => all.push(c));\n    });\n    return all;\n  }\n\n  function emptyPerson() {\n    return { vorname: \"\", nachname: \"\", email: \"\", wiederholer: false, statusType: \"\", amount: 0 };\n  }\n  const state = {\n    country: \"\", category: \"cat1\",\n    commLang: \"\", form: \"einzeln\",\n    persons: { solo: emptyPerson(), p1: emptyPerson(), p2: emptyPerson() }\n  };\n  function getPerson(key) { return state.persons[key] || state.persons.solo; }\n\n  const APP_ONLY_CATEGORY_EXCEPTION_LANG = { CN: \"Chinesisch\" };\n\n  function isAppOnly() {\n    const { category: cat, commLang: lang, country } = state;\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[country];\n      \/\/ Ausnahme (z.B. China) gilt nur, wenn auch die passende Sprache gew\u00e4hlt ist \u2013\n      \/\/ sonst kann kein physisches Kartenset verschickt werden.\n      if (!exceptionLang || lang !== exceptionLang) return true;\n    }\n    if (APP_ONLY_LANGS.has(lang)) return true;\n    if (lang === \"Russisch\" && country && country !== \"RU\") return true;\n    return false;\n  }\n\n  function isWiederholer(person) {\n    return !!person && (person.wiederholer || person.statusType === \"wiederholer\");\n  }\n\n  \/\/ Geht ueberhaupt ein Kartenset raus? Nur wenn die Teilnahme nicht rein digital\n  \/\/ ist UND mindestens eine Person ein neues Set braucht - Wiederholer bekommen\n  \/\/ keins. Steuert sowohl die Versandzeile in der Zusammenfassung als auch die\n  \/\/ Wahl des Ecwid-Produkts, damit beide nicht auseinanderlaufen koennen.\n  function hasPhysicalShipment(isPaar) {\n    if (isAppOnly()) return false;\n    return isPaar\n      ? !(isWiederholer(state.persons.p1) && isWiederholer(state.persons.p2))\n      : !isWiederholer(state.persons.solo);\n  }\n\n  \/\/ Ecwid haengt den Versand am Produkt fest, nicht am Warenkorb. Ohne physischen\n  \/\/ Versand muss deshalb das versandfreie Digital-Produkt in den Warenkorb, sonst\n  \/\/ schlaegt der Shop trotzdem Versandkosten auf.\n  function getParticipationProductId(isPaar) {\n    return hasPhysicalShipment(isPaar) ? PRODUCTS[state.category] : PRODUCTS_APPONLY[state.category];\n  }\n\n  function updateAppOnlyUI() {\n    const appOnly = state.commLang ? isAppOnly() : false;\n    let reason = \"\";\n    if (appOnly) {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[state.country];\n      if ((state.category === \"cat3\" || state.category === \"cat4\") && exceptionLang) {\n        reason = `Versand ist in Deiner Region nur bei der Teilnahmesprache ${exceptionLang} m\u00f6glich. Du nimmst digital teil. Der Rabatt wird automatisch in der Zusammenfassung ber\u00fccksichtigt.`;\n      } else if (state.category === \"cat3\" || state.category === \"cat4\") {\n        reason = \"In Deiner Region ist der Versand nicht m\u00f6glich. Du nimmst digital teil. Der Rabatt wird automatisch in der Zusammenfassung ber\u00fccksichtigt.\";\n      } else if (state.commLang === \"Russisch\") {\n        reason = \"F\u00fcr Russischsprachige au\u00dferhalb Russlands gibt es nur eine digitale Version. Der Rabatt wird automatisch in der Zusammenfassung ber\u00fccksichtigt.\";\n      } else {\n        reason = \"In dieser Sprache gibt es nur eine digitale Version. Der Rabatt wird automatisch in der Zusammenfassung ber\u00fccksichtigt.\";\n      }\n    }\n    const noteIds = [\"sw-apponly-note\",\"sw-apponly-note-step4\",\"sw-apponly-note-paar-step4\",\"sw-apponly-note-step5-solo\",\"sw-apponly-note-step5-paar\"];\n    noteIds.forEach(id => {\n      const el = $(id);\n      if (!el) return;\n      el.style.display = appOnly ? \"block\" : \"none\";\n      const textDiv = el.querySelector(\"div:not(.sw-infobox-title)\");\n      if (textDiv && reason) textDiv.textContent = reason;\n    });\n  }\n\n  const STEP_CONTAINER = {\n    1: () => \"sw-step-welcome\",\n    2: () => \"sw-step-country\",\n    3: () => \"sw-step-langform\",\n    4: () => state.form === \"paar\" ? \"sw-step-details-paar\" : \"sw-step-details-solo\",\n    5: () => state.form === \"paar\" ? \"sw-step-amount-paar\" : \"sw-step-amount-solo\"\n  };\n\n  function showStep(n) {\n    shadow.querySelectorAll(\".sw-step\").forEach(el => el.classList.remove(\"active\"));\n    $(STEP_CONTAINER[n]()).classList.add(\"active\");\n    for (let i = 1; i <= 5; i++) {\n      const prog = $(\"sw-prog-\" + i);\n      if (!prog) continue;\n      if (i < n) prog.className = \"sw-progress-step done\";\n      else if (i === n) prog.className = \"sw-progress-step active\";\n      else prog.className = \"sw-progress-step\";\n    }\n    if (n === 5) {\n      const sliderIds = state.form === \"paar\" ? [\"sw-amount-p1\",\"sw-amount-p2\"] : [\"sw-amount-solo\"];\n      sliderIds.forEach(sid => { const el = $(sid); if (el) el.classList.add(\"sw-pulse\"); });\n      refreshSummary();\n    }\n  }\n\n  function setNextEnabled(id, enabled) {\n    const b = $(id);\n    if (!b) return;\n    b.disabled = !enabled;\n    b.style.opacity = enabled ? \"1\" : \".4\";\n    b.style.cursor  = enabled ? \"pointer\" : \"not-allowed\";\n  }\n\n  function showErrorIn(id, msg) { const el=$(id); el.style.display=\"block\"; el.textContent=msg; }\n  function clearErrorIn(id)     { const el=$(id); el.style.display=\"none\";  el.textContent=\"\"; }\n\n  function setCheckoutLoading(btnId, loading) {\n    const btn = $(btnId);\n    const overlay = document.getElementById(OVERLAY_ID);\n    if (!btn.dataset.defaultLabel) btn.dataset.defaultLabel = btn.textContent;\n    if (loading) {\n      btn.disabled = true;\n      btn.innerHTML = '<span class=\"wiz-spinner\"><\/span> Wird vorbereitet\u2026';\n      btn.style.opacity = \".8\";\n      if (overlay) overlay.style.display = \"flex\";\n    } else {\n      btn.disabled = false;\n      btn.textContent = btn.dataset.defaultLabel;\n      btn.style.opacity = \"1\";\n      if (overlay) overlay.style.display = \"none\";\n    }\n  }\n\n  function showThankYou() {\n    const card = shadow.querySelector(\".sw-card\");\n    if (!card) return;\n    card.innerHTML = `\n      <div style=\"text-align:center; padding:20px 0;\">\n        <div style=\"font-size:56px; margin-bottom:16px; color:#27703F;\">\u2713<\/div>\n        <h2 style=\"font-family:'Tinos',Georgia,serif; font-size:26px; font-weight:500; margin:0 0 12px; color:#0C1E14;\">Vielen Dank!<\/h2>\n        <p style=\"font-family:'Tinos',Georgia,serif; font-size:18px; color:#27703F; line-height:1.6; margin:0 0 24px;\">Checkout wird geladen\u2026<br>Du wirst gleich weitergeleitet\u2026<\/p>\n        <div style=\"display:flex; justify-content:center;\">\n          <div style=\"width:36px; height:36px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:wiz-spin 0.8s linear infinite;\"><\/div>\n        <\/div>\n      <\/div>`;\n  }\n\n  function getAnchors(cat) {\n    const r = RANGES[cat], o = ORIENTIERUNG[cat];\n    return [[0,r.min],[25,o.reduced],[50,o.base],[75,o.support],[100,r.max]];\n  }\n  function normToEuro(norm, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      if (norm <= a[i+1][0]) {\n        const t = (norm - a[i][0]) \/ (a[i+1][0] - a[i][0]);\n        return Math.round(a[i][1] + t * (a[i+1][1] - a[i][1]));\n      }\n    }\n    return a[a.length-1][1];\n  }\n  function euroToNorm(euro, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      const lo = a[i][1], hi = a[i+1][1];\n      if (euro <= hi) {\n        if (hi === lo) return a[i+1][0];\n        return a[i][0] + (euro - lo) \/ (hi - lo) * (a[i+1][0] - a[i][0]);\n      }\n    }\n    return 100;\n  }\n  function getMarkerDefs(cat) {\n    const o = ORIENTIERUNG[cat];\n    return [\n      { value: o.reduced, label: \"Reduzierter Beitrag\", normPct: 25 },\n      { value: o.base,    label: \"Grundbeitrag\",         normPct: 50 },\n      { value: o.support, label: \"F\u00f6rderbeitrag\",        normPct: 75 }\n    ];\n  }\n\n  function renderMarkers(personKey) {\n    const cat = state.category;\n    const person = getPerson(personKey);\n    const markers = getMarkerDefs(cat);\n    const container = $(`sw-markers-${personKey}`);\n    container.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker\" + (person.amount === m.value ? \" active\" : \"\");\n      div.style.left = m.normPct + \"%\";\n      div.innerHTML = `<div class=\"sw-marker-tick\"><\/div><div class=\"sw-marker-amount\">${m.value}\u20ac<\/div><div class=\"sw-marker-label\">${m.label}<\/div>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      container.appendChild(div);\n    });\n    const mobileContainer = $(`sw-markers-mobile-${personKey}`);\n    mobileContainer.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker-mobile\" + (person.amount === m.value ? \" active\" : \"\");\n      div.innerHTML = `<span class=\"sw-marker-mobile-label\">${m.label}<\/span><span class=\"sw-marker-mobile-amount\">${m.value}\u20ac<\/span>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      mobileContainer.appendChild(div);\n    });\n  }\n\n  function selectMarkerValue(personKey, value) {\n    const person = getPerson(personKey);\n    $(`sw-amount-${personKey}`).value = euroToNorm(value, state.category);\n    person.amount = value;\n    $(`sw-amountInput-${personKey}`).value = value;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n\n  function updateAmountFromSlider(personKey) {\n    const person = getPerson(personKey);\n    const norm = Number($(`sw-amount-${personKey}`).value);\n    person.amount = normToEuro(norm, state.category);\n    $(`sw-amountInput-${personKey}`).value = person.amount;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n\n  function updateAmountFromInput(personKey) {\n    const person = getPerson(personKey);\n    const r = RANGES[state.category];\n    let val = Number($(`sw-amountInput-${personKey}`).value);\n    if (isNaN(val)) val = r.min;\n    val = Math.min(r.max, Math.max(r.min, val));\n    person.amount = val;\n    $(`sw-amountInput-${personKey}`).value = val;\n    $(`sw-amount-${personKey}`).value = euroToNorm(val, state.category);\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n\n  function wireAmountControl(personKey) {\n    $(`sw-amount-${personKey}`).addEventListener(\"input\", () => updateAmountFromSlider(personKey));\n    $(`sw-amountInput-${personKey}`).addEventListener(\"input\", () => {\n      const v = Number($(`sw-amountInput-${personKey}`).value);\n      if (!isNaN(v)) { getPerson(personKey).amount = v; refreshSummary(); }\n    });\n    $(`sw-amountInput-${personKey}`).addEventListener(\"change\", () => updateAmountFromInput(personKey));\n  }\n\n  function applyRangeForForm() {\n    const cat = state.category;\n    const ori = ORIENTIERUNG[cat];\n    const hint = \"Hier kannst Du den Beitrag w\u00e4hlen, der f\u00fcr Dich angemessen ist. Mit einem F\u00f6rderbeitrag erm\u00f6glichst Du Menschen die Teilnahme, die nur geringe finanzielle M\u00f6glichkeiten haben, und hilfst uns, das Projekt weiter in die Welt zu tragen.\";\n    if (state.form === \"paar\") {\n      [\"p1\",\"p2\"].forEach(key => {\n        const person = getPerson(key);\n        person.amount = ori.base;\n        $(`sw-amount-${key}`).value = 50;\n        $(`sw-amountInput-${key}`).value = ori.base;\n      });\n      const p1name = state.persons.p1.vorname;\n      const p2name = state.persons.p2.vorname;\n      $(\"sw-amount-p1-title\").innerHTML = p1name ? `Person 1 \u2013 ${p1name}` : \"Person 1\";\n      $(\"sw-amount-p2-title\").innerHTML = (p2name ? `Person 2 \u2013 ${p2name}` : \"Person 2\") +\n        ' <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span>';\n      $(\"sw-summary-p1-label\").textContent = p1name ? `Person 1 \u2013 ${p1name}` : \"Person 1\";\n      $(\"sw-summary-p2-label\").textContent = (p2name ? `Person 2 \u2013 ${p2name}` : \"Person 2\") + \" (\u221250%)\";\n      $(\"sw-rangeHint-paar\").textContent = hint;\n      renderMarkers(\"p1\"); renderMarkers(\"p2\");\n    } else {\n      const person = state.persons.solo;\n      person.amount = ori.base;\n      $(\"sw-amount-solo\").value = 50;\n      $(\"sw-amountInput-solo\").value = ori.base;\n      $(\"sw-rangeHint-solo\").textContent = hint;\n      renderMarkers(\"solo\");\n    }\n    refreshSummary();\n  }\n\n  \/\/ \u2500\u2500 Rabattlogik \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Neue Regel: Wenn mehrere Rabatte greifen, wird zuerst der fixe App-Rabatt vom\n  \/\/ gew\u00e4hlten Betrag abgezogen. Der prozentuale Rabatt (Sch\u00fcler\/Student\/Wiederholer\n  \/\/ bzw. die 50%-Erm\u00e4\u00dfigung f\u00fcr Person 2) wird danach auf den verbleibenden Betrag\n  \/\/ angewendet. Beide Rabatte werden separat ausgewiesen.\n  function getPercentDiscountCandidate(person, isPaarP2) {\n    if (isPaarP2) return { value: DISCOUNT_PAAR_P2, label: \"Erm\u00e4\u00dfigung Person 2\" };\n    const candidates = [];\n    if (isWiederholer(person)) candidates.push({ value: DISCOUNT_WIEDERHOLER, label: \"Wiederholer\" });\n    if (person.statusType === \"schueler\") candidates.push({ value: DISCOUNT_SCHUELER, label: \"Sch\u00fcler:innen\" });\n    if (person.statusType === \"student\")  candidates.push({ value: DISCOUNT_STUDENT,  label: \"Ausbildung\/Studium\" });\n    if (!candidates.length) return null;\n    \/\/ falls theoretisch mehrere Status zutreffen, z\u00e4hlt der h\u00f6chste Prozentsatz\n    return candidates.reduce((best, c) => c.value > best.value ? c : best, candidates[0]);\n  }\n\n  function getDiscounts(person, isPaarP2) {\n    const discounts = [];\n    let remaining = Math.round(person.amount);\n\n    if (isAppOnly()) {\n      const appDisc = Math.min(DISCOUNT_APP_FIXED, remaining);\n      discounts.push({ type: \"fixed\", value: DISCOUNT_APP_FIXED, label: \"Digitale Teilnahme\", amountEuro: appDisc });\n      remaining -= appDisc;\n    }\n\n    const pct = getPercentDiscountCandidate(person, isPaarP2);\n    if (pct) {\n      const pctDisc = Math.round(remaining * pct.value);\n      discounts.push({ type: \"pct\", value: pct.value, label: pct.label, amountEuro: pctDisc });\n      remaining -= pctDisc;\n    }\n\n    return { discounts, finalAmount: Math.max(0, remaining) };\n  }\n\n  function buildStatusOptionValue(person, isPaar) {\n    const vals = [];\n    if (isPaar) vals.push(STATUS_LABEL.paar);\n    if (isAppOnly()) vals.push(STATUS_LABEL.apponly);\n    if (isWiederholer(person)) vals.push(STATUS_LABEL.wiederholer);\n    if (person.statusType === \"schueler\") vals.push(STATUS_LABEL.schueler);\n    if (person.statusType === \"student\")  vals.push(STATUS_LABEL.student);\n    \/\/ Ecwid erwartet f\u00fcr Checkbox-Optionen ein Array, nicht einen kommaseparierten String\n    return vals;\n  }\n\n  \/\/ \u2500\u2500 Zusammenfassung \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  function refreshSummary() {\n    if (state.form === \"paar\") refreshSummaryPaar();\n    else refreshSummarySolo();\n  }\n\n  function renderDiscountRows(containerId, discounts) {\n    const container = $(containerId);\n    container.innerHTML = \"\";\n    discounts.forEach(d => {\n      const row = document.createElement(\"div\");\n      row.className = \"sw-summary-row sw-summary-discount\";\n      const pctStr = d.type === \"fixed\" ? `\u2212${d.amountEuro}\u20ac` : `\u2212${Math.round(d.value * 100)}%`;\n      row.innerHTML = `<span>${d.label} (${pctStr})<\/span><span>\u2212${d.amountEuro}\u20ac<\/span>`;\n      container.appendChild(row);\n    });\n  }\n\n  function refreshSummarySolo() {\n    const p = state.persons.solo;\n    const { discounts, finalAmount } = getDiscounts(p, false);\n\n    $(\"sw-solo-chosen\").textContent = Math.round(p.amount) + \"\u20ac\";\n    renderDiscountRows(\"sw-solo-discounts\", discounts);\n\n    const shipLine = $(\"sw-shipping-line-solo\");\n    const shippingSolo = (hasPhysicalShipment(false) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingSolo ? \"flex\" : \"none\";\n    $(\"sw-solo-total\").textContent = finalAmount + shippingSolo;\n  }\n\n  function refreshSummaryPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n\n    function fill(prefix, person, isPaarP2) {\n      const { discounts, finalAmount } = getDiscounts(person, isPaarP2);\n      $(`sw-${prefix}-chosen`).textContent = Math.round(person.amount) + \"\u20ac\";\n      renderDiscountRows(`sw-${prefix}-discounts`, discounts);\n      $(`sw-${prefix}-subtotal`).textContent = finalAmount + \"\u20ac\";\n      return finalAmount;\n    }\n\n    const f1 = fill(\"p1\", p1, false);\n    const f2 = fill(\"p2\", p2, true);\n\n    const shipLine = $(\"sw-shipping-line-paar\");\n    const shippingPaar = (hasPhysicalShipment(true) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingPaar ? \"flex\" : \"none\";\n    $(\"sw-paar-total\").textContent = f1 + f2 + shippingPaar;\n  }\n\n  function renderCountryList(filter) {\n    const list = $(\"sw-country-list\");\n    const q = (filter || \"\").toLowerCase().trim();\n    const filtered = q\n      ? getAllCountriesSorted().filter(c =>\n          c.name.toLowerCase().includes(q) ||\n          (c.aliases || []).some(a => a.includes(q))\n        )\n      : getAllCountriesSorted();\n    list.innerHTML = \"\";\n    if (!filtered.length) { list.innerHTML = '<div class=\"sw-country-empty\">Kein Land gefunden<\/div>'; return; }\n    filtered.forEach(c => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-country-item\" + (state.country === c.code ? \" selected\" : \"\");\n      div.dataset.code = c.code;\n      div.innerHTML = `<span>${c.name}<\/span><span class=\"sw-country-item-cat\">Kat. ${c.cat.replace(\"cat\",\"\")}<\/span>`;\n      div.addEventListener(\"click\", () => selectCountry(c.code, c.cat, c.name));\n      list.appendChild(div);\n    });\n  }\n\n  function selectCountry(code, cat, name) {\n    state.country  = code;\n    state.category = cat;\n    $(\"sw-country\").value = code;\n    $(\"sw-country-search\").value = name;\n    $(\"sw-country-list\").innerHTML = \"\";\n    const catLabels = {\n      cat1:\"Preiskategorie 1\", cat2:\"Preiskategorie 2\",\n      cat3:\"Preiskategorie 3\", cat4:\"Preiskategorie 4\"\n    };\n    const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[code];\n    let suffix = \"\";\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      suffix = exceptionLang\n        ? ` \u2013 Versand nur bei Teilnahmesprache ${exceptionLang}, sonst nur digitale Teilnahme m\u00f6glich`\n        : \" \u2013 Nur digitale Teilnahme m\u00f6glich\";\n    }\n    $(\"sw-catText\").textContent = (catLabels[cat] || cat) + suffix;\n    \/\/ Ecwid wickelt in Russland keine Zahlungen ab. Wer Russland waehlt, wird\n    \/\/ deshalb auf die russische Anmeldeseite verwiesen - die laeuft ueber n8n\n    \/\/ und Tochka statt ueber den Shop. Der russische Wizard verweist umgekehrt\n    \/\/ zurueck, sobald dort ein anderes Land gewaehlt wird.\n    const nachRussland = (code === \"RU\");\n    $(\"sw-redirect-russia\").style.display = nachRussland ? \"block\" : \"none\";\n    $(\"sw-catInfo\").style.display         = nachRussland ? \"none\"  : \"block\";\n    setNextEnabled(\"sw-btn-country-next\", !nachRussland);\n    updateAppOnlyUI();\n  }\n\n  function ensureEcwidReady(timeoutMs = 12000) {\n    return new Promise((resolve, reject) => {\n      function isReady() {\n        return window.Ecwid && window.Ecwid.Cart &&\n               typeof window.Ecwid.Cart.addProduct === \"function\" &&\n               typeof window.Ecwid.Cart.clear === \"function\";\n      }\n      if (isReady()) return resolve(true);\n      let resolved = false;\n      function done() { if (!resolved) { resolved = true; setTimeout(() => resolve(true), 200); } }\n      if (window.Ecwid) { try { window.Ecwid.OnAPILoaded.add(done); } catch(e) {} }\n      const start = Date.now();\n      const t = setInterval(() => {\n        if (isReady()) { clearInterval(t); done(); }\n        else if (Date.now() - start > timeoutMs) {\n          clearInterval(t);\n          if (!resolved) { resolved = true; reject(new Error(\"Ecwid Cart API nicht verf\u00fcgbar nach \" + (timeoutMs\/1000) + \"s.\")); }\n        }\n      }, 200);\n    });\n  }\n\n  function clearCartAsync() { return new Promise(r => Ecwid.Cart.clear(() => r(true))); }\n\n  function addProductAsync(payload, timeoutMs = 4000) {\n    return new Promise((resolve, reject) => {\n      let done = false;\n      const t = setTimeout(() => { if (!done) { done = true; resolve({ product:null, cart:null, timedOut:true }); } }, timeoutMs);\n      Ecwid.Cart.addProduct(payload, function(success, product, cart, error) {\n        if (done) return;\n        done = true; clearTimeout(t);\n        if (success) resolve({ product, cart, timedOut:false });\n        else reject(new Error((error || \"Produkt konnte nicht hinzugef\u00fcgt werden\") + \" | Payload: \" + JSON.stringify(payload)));\n      });\n    });\n  }\n\n  function goToCart() { window.location.href = SHOP_CART_URL; }\n\n  function buildN8nPayload() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const d1 = getDiscounts(p1, false);\n    const d2 = getDiscounts(p2, true);\n    return {\n      sprache: state.commLang, land: state.country, kategorie: state.category, appOnly: isAppOnly(),\n      person1: { vorname: p1.vorname, nachname: p1.nachname, email: p1.email },\n      person2: { vorname: p2.vorname, nachname: p2.nachname, email: p2.email },\n      betraege: {\n        person1: { gewaehlt: Math.round(p1.amount), rabatte: d1.discounts, endbetrag: d1.finalAmount },\n        person2: { gewaehlt: Math.round(p2.amount), rabatte: d2.discounts, endbetrag: d2.finalAmount },\n        gesamt: d1.finalAmount + d2.finalAmount\n      },\n      timestamp: new Date().toISOString()\n    };\n  }\n\n  async function sendToN8n(payload) {\n    if (!N8N_WEBHOOK_URL || N8N_WEBHOOK_URL.indexOf(\"HIER_\") === 0) {\n      throw new Error(\"Die n8n-Webhook-URL ist im Code noch nicht eingetragen.\");\n    }\n    let res;\n    try {\n      res = await fetch(N8N_WEBHOOK_URL, { method:\"POST\", headers:{\"Content-Type\":\"application\/json\"}, body:JSON.stringify(payload) });\n    } catch (e) {\n      throw new Error(\"Daten konnten nicht \u00fcbermittelt werden. Bitte pr\u00fcfe Deine Internetverbindung.\");\n    }\n    if (!res.ok) throw new Error(\"\u00dcbermittlung fehlgeschlagen (Fehler \" + res.status + \"). Bitte erneut versuchen.\");\n    return true;\n  }\n\n  async function goCheckoutSolo() {\n    clearErrorIn(\"sw-error-amount-solo\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-solo\", \"Bitte zuerst ein Land ausw\u00e4hlen.\");\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-solo\", \"Bitte Teilnahmesprache ausw\u00e4hlen.\");\n    const p = state.persons.solo;\n    const finalAmount = getDiscounts(p, false).finalAmount;\n    const participationProductId = getParticipationProductId(false);\n    setCheckoutLoading(\"sw-btn-checkout-solo\", true);\n    try {\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const statusValue = buildStatusOptionValue(p, false);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue; \/\/ Array f\u00fcr Checkbox-Option\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: finalAmount, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-solo\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-solo\", false);\n    }\n  }\n\n  async function goCheckoutPaar() {\n    clearErrorIn(\"sw-error-amount-paar\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-paar\", \"Bitte zuerst ein Land ausw\u00e4hlen.\");\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-paar\", \"Bitte Teilnahmesprache ausw\u00e4hlen.\");\n    if (!validateDetailsPaar()) return showErrorIn(\"sw-error-amount-paar\", \"Bitte geh zur\u00fcck und f\u00fclle alle Felder f\u00fcr beide Personen aus.\");\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const participationProductId = getParticipationProductId(true);\n    setCheckoutLoading(\"sw-btn-checkout-paar\", true);\n    try {\n      const payload = buildN8nPayload();\n      await sendToN8n(payload);\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const total = getDiscounts(p1, false).finalAmount + getDiscounts(p2, true).finalAmount;\n      const statusValue = buildStatusOptionValue(p1, true);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue; \/\/ Array f\u00fcr Checkbox-Option\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: total, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-paar\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-paar\", false);\n    }\n  }\n\n  function validateLangform() {\n    const ok = !!state.commLang && !!state.form && state.form !== \"gruppe\";\n    setNextEnabled(\"sw-btn-langform-next\", ok);\n  }\n\n  function validateDetailsSolo() {\n    const ok = !!$(\"sw-solo-status\").value;\n    setNextEnabled(\"sw-btn-details-solo-next\", ok);\n    return ok;\n  }\n\n  function validateDetailsPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const emailOk = s => \/\\S+@\\S+\\.\\S+\/.test(s || \"\");\n    const ok = !!(p1.vorname && p1.vorname.trim()) && !!(p1.nachname && p1.nachname.trim()) && emailOk(p1.email) &&\n               !!(p2.vorname && p2.vorname.trim()) && !!(p2.nachname && p2.nachname.trim()) && emailOk(p2.email);\n    setNextEnabled(\"sw-btn-details-paar-next\", ok);\n    return ok;\n  }\n\n  function bindNameFields(key) {\n    [\"vorname\",\"nachname\",\"email\"].forEach(f => {\n      $(`sw-${key}-${f}`).addEventListener(\"input\", e => {\n        getPerson(key)[f] = e.target.value;\n        validateDetailsPaar();\n      });\n    });\n  }\n\n  $(\"sw-btn-welcome-next\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-country-back\").addEventListener(\"click\", () => showStep(1));\n  $(\"sw-btn-country-next\").addEventListener(\"click\", () => showStep(3));\n\n  $(\"sw-country-search\").addEventListener(\"input\",  e => renderCountryList(e.target.value));\n  $(\"sw-country-search\").addEventListener(\"focus\",  () => renderCountryList($(\"sw-country-search\").value));\n  shadow.addEventListener(\"click\", e => {\n    if (!e.target.closest(\"#sw-country-list\") && !e.target.closest(\"#sw-country-search\")) {\n      $(\"sw-country-list\").innerHTML = \"\";\n    }\n  });\n\n  $(\"sw-commLang\").addEventListener(\"change\", e => {\n    state.commLang = e.target.value;\n    validateLangform();\n    updateAppOnlyUI();\n    refreshSummary();\n  });\n\n  shadow.querySelectorAll(\".sw-choice-card\").forEach(card => {\n    card.addEventListener(\"click\", () => {\n      state.form = card.dataset.form;\n      shadow.querySelectorAll(\".sw-choice-card\").forEach(c => c.classList.toggle(\"active\", c === card));\n      const isGruppe = state.form === \"gruppe\";\n      $(\"sw-gruppe-note\").style.display = isGruppe ? \"block\" : \"none\";\n      $(\"sw-btn-langform-next\").style.display   = isGruppe ? \"none\" : \"inline-block\";\n      $(\"sw-btn-gruppe-redirect\").style.display = isGruppe ? \"inline-block\" : \"none\";\n      clearErrorIn(\"sw-error-langform\");\n      validateLangform();\n    });\n  });\n\n  $(\"sw-btn-gruppe-redirect\").addEventListener(\"click\", () => { window.location.href = getGroupRedirectUrl(); });\n  $(\"sw-btn-langform-back\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-langform-next\").addEventListener(\"click\", () => showStep(4));\n\n  $(\"sw-btn-details-solo-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-solo-status\").addEventListener(\"change\", e => {\n    const val = e.target.value;\n    const person = state.persons.solo;\n    person.statusType  = val;\n    person.wiederholer = val === \"wiederholer\";\n    clearErrorIn(\"sw-error-details-solo\");\n    validateDetailsSolo();\n  });\n  $(\"sw-btn-details-solo-next\").addEventListener(\"click\", () => {\n    if (validateDetailsSolo()) { applyRangeForForm(); showStep(5); }\n    else showErrorIn(\"sw-error-details-solo\", \"Bitte triff zuerst eine Auswahl.\");\n  });\n\n  $(\"sw-btn-details-paar-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-btn-details-paar-next\").addEventListener(\"click\", () => {\n    if (validateDetailsPaar()) { applyRangeForForm(); showStep(5); }\n  });\n\n  $(\"sw-btn-amount-solo-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-amount-paar-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-checkout-solo\").addEventListener(\"click\", goCheckoutSolo);\n  $(\"sw-btn-checkout-paar\").addEventListener(\"click\", goCheckoutPaar);\n\n  bindNameFields(\"p1\");\n  bindNameFields(\"p2\");\n  wireAmountControl(\"solo\");\n  wireAmountControl(\"p1\");\n  wireAmountControl(\"p2\");\n\n  showStep(1);\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9fd45cf e-flex e-con-boxed e-con e-parent\" data-id=\"9fd45cf\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\" data-no-translation=\"\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4fc4802 elementor-widget elementor-widget-html\" data-id=\"4fc4802\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n  .ecwid-ProductBrowser,\n  .ecwid-productbrowser,\n  div[id^=\"my-store\"],\n  .ecwid:not(#sw-host-it) {\n    visibility: hidden !important;\n    height: 0 !important;\n    max-height: 0 !important;\n    overflow: hidden !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    position: absolute !important;\n    pointer-events: none !important;\n  }\n<\/style>\n<div id=\"sw-overlay-it\" style=\"display:none; position:fixed; inset:0; background:rgba(245,250,246,0.92); z-index:99999; flex-direction:column; align-items:center; justify-content:center; gap:20px;\">\n  <div style=\"width:52px; height:52px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:sw-spin-it 0.8s linear infinite;\"><\/div>\n  <div style=\"font-family:'Tinos',Georgia,serif; font-size:22px; color:#27703F;\">Caricamento checkout\u2026<\/div>\n<\/div>\n<style>\n  @keyframes sw-spin-it { to { transform: rotate(360deg); } }\n<\/style>\n<div id=\"sw-host-it\"><\/div>\n<script>\n(function () {\n\n  \/\/ \u2500\u2500 Sprach-Guard: Skript bricht sofort ab, wenn die URL nicht zu IT passt \u2500\u2500\n  const _pathMatch = window.location.pathname.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n  const _pageLang = _pathMatch ? _pathMatch[1] : \"de\";\n  if (_pageLang !== \"it\") { \n    document.getElementById(\"sw-host-it\")?.remove();\n    document.getElementById(\"sw-overlay-it\")?.remove();\n    return; \n  }\n\n  const OVERLAY_ID    = \"sw-overlay-it\";\n  const SHOP_CART_URL = \"https:\/\/spiritual-activity.org\/it\/store\/cart\";\n  const N8N_WEBHOOK_URL = \"https:\/\/n8n.spiritual-activity.org\/webhook\/registration-be\";\n  function getGroupRedirectUrl() {\n    const path = window.location.pathname;\n    \/\/ Erkennt Sprachpraefixe wie \/en\/, \/es\/, \/it\/, \/ru\/ am Anfang des Pfads.\n    \/\/ Deutsch ist die Standardsprache ohne Praefix.\n    const match = path.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n    const langPrefix = (match && match[1] !== \"de\") ? \"\/\" + match[1] : \"\";\n    return \"https:\/\/spiritual-activity.org\" + langPrefix + \"\/gruppen-anmeldung\";\n  }\n  const PRODUCTS = {\n    cat1: 864374030,\n    cat2: 844860366,\n    cat3: 844907264,\n    cat4: 844907265\n  };\n\n  \/\/ Versandfreie Digital-Produkte fuer alle Faelle, in denen nichts verschickt\n  \/\/ wird: rein digitale Teilnahme und Wiederholer (kein neues Kartenset).\n  const PRODUCTS_APPONLY = {\n    cat1: 863272251,\n    cat2: 863265753,\n    cat3: 863272252,\n    cat4: 863265754\n  };\n  const RANGES = {\n    cat1: { min: 160, max: 800 },\n    cat2: { min: 105, max: 700 },\n    cat3: { min:  75, max: 600 },\n    cat4: { min:  45, max: 500 }\n  };\n  const ORIENTIERUNG = {\n    cat1: { reduced: 160, base: 360, support: 580 },\n    cat2: { reduced: 105, base: 240, support: 460 },\n    cat3: { reduced:  75, base: 160, support: 340 },\n    cat4: { reduced:  45, base: 105, support: 220 }\n  };\n  const DISCOUNT_WIEDERHOLER = 0.30;\n  const DISCOUNT_SCHUELER    = 0.50;\n  const DISCOUNT_STUDENT     = 0.25;\n  const DISCOUNT_PAAR_P2     = 0.50;\n  const DISCOUNT_APP_FIXED   = 35;\n  \/\/ Versandpauschale ausserhalb EU+CH. Ecwid kassiert sie, der Wizard rechnet sie in die Anzeige-Summe ein.\n  const SHIPPING_COST   = 15;\n  const APP_ONLY_LANGS = new Set([\"Arabisch\",\"Farsi\",\"Ukrainisch\",\"Bulgarisch\",\"Franz\u00f6sisch\"]);\n  const APP_ONLY_CATEGORY_EXCEPTION_LANG = { CN: \"Chinesisch\" };\n  \/\/ \u2500\u2500 Anzeigenamen der Teilnahmesprachen \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Der interne Wert bleibt deutsch (Ecwid\/n8n erwarten ihn so), nur die Anzeige wird uebersetzt.\n  const LANG_DISPLAY = {\n      \"Deutsch\": \"Tedesco\",\n      \"Englisch\": \"Inglese\",\n      \"Spanisch\": \"Spagnolo\",\n      \"Franz\u00f6sisch\": \"Francese\",\n      \"Italienisch\": \"Italiano\",\n      \"Portugiesisch\": \"Portoghese\",\n      \"Arabisch\": \"Arabo\",\n      \"Hebr\u00e4isch\": \"Ebraico\",\n      \"Farsi\": \"Persiano (Farsi)\",\n      \"Georgisch\": \"Georgiano\",\n      \"Ukrainisch\": \"Ucraino\",\n      \"Niederl\u00e4ndisch\": \"Olandese\",\n      \"T\u00fcrkisch\": \"Turco\",\n      \"Russisch\": \"Russo\",\n      \"Chinesisch\": \"Cinese\",\n      \"Japanisch\": \"Giapponese\",\n      \"Koreanisch\": \"Coreano\"\n  };\n  const EU_PLUS_CH = new Set([\n    \"AT\",\"BE\",\"BG\",\"CY\",\"CZ\",\"DE\",\"DK\",\"EE\",\"ES\",\"FI\",\"FR\",\"GR\",\"HR\",\n    \"HU\",\"IE\",\"IT\",\"LT\",\"LU\",\"LV\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SE\",\"SI\",\"SK\",\"CH\"\n  ]);\n  function needsShipping(countryCode) {\n    return countryCode && !EU_PLUS_CH.has(countryCode);\n  }\n  const COUNTRY_NAME_OVERRIDES = {\n    \"HK\":\"Hong Kong\",\"MO\":\"Macao\",\"TW\":\"Taiwan\",\"AE\":\"Emirati Arabi Uniti\",\n    \"US\":\"USA\",\"GB\":\"Regno Unito\",\"GB-SCT\":\"Scozia\",\n    \"KR\":\"Corea del Sud\",\"SA\":\"Arabia Saudita\",\n    \"MD\":\"Moldavia\",\"PS\":\"Palestina\",\"CD\":\"Congo (Kinshasa)\",\"CG\":\"Congo (Brazzaville)\",\n    \"ST\":\"S\u00e3o Tom\u00e9 e Pr\u00edncipe\",\"CI\":\"Costa d'Avorio\",\"TL\":\"Timor Est\",\n    \"CV\":\"Capo Verde\",\"SZ\":\"Eswatini\",\"FM\":\"Micronesia\",\"MH\":\"Isole Marshall\",\n    \"VC\":\"Saint Vincent e Grenadine\",\"LC\":\"Santa Lucia\",\"KN\":\"Saint Kitts e Nevis\",\n    \"AG\":\"Antigua e Barbuda\",\"TT\":\"Trinidad e Tobago\",\"BA\":\"Bosnia ed Erzegovina\",\n    \"MK\":\"Macedonia del Nord\",\"GQ\":\"Guinea Equatoriale\",\"GW\":\"Guinea-Bissau\",\n    \"CF\":\"Repubblica Centrafricana\",\"SB\":\"Isole Salomone\",\"PG\":\"Papua Nuova Guinea\",\n    \"DO\":\"Repubblica Dominicana\",\"XK\":\"Kosovo\"\n  };\n  \/\/ \u2500\u2500 Zusaetzliche Suchbegriffe (Aliasse) je Land \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Beeinflusst NUR die Suche, nicht den angezeigten Namen. Alles klein schreiben.\n  const COUNTRY_SEARCH_ALIASES = {\n      \"US\": [\"stati uniti\", \"stati uniti d'america\", \"usa\", \"america\", \"united states\", \"united states of america\"],\n      \"GB\": [\"regno unito\", \"gran bretagna\", \"inghilterra\", \"uk\", \"united kingdom\", \"england\", \"great britain\", \"britain\"],\n      \"GB-SCT\": [\"scozia\", \"scotland\"],\n      \"AE\": [\"emirati arabi uniti\", \"emirati\", \"uae\", \"united arab emirates\", \"emirates\", \"dubai\"],\n      \"KR\": [\"corea del sud\", \"corea\", \"south korea\", \"korea\"],\n      \"NL\": [\"paesi bassi\", \"olanda\", \"netherlands\", \"holland\"],\n      \"CH\": [\"svizzera\", \"switzerland\"],\n      \"DE\": [\"germania\", \"germany\", \"deutschland\"],\n      \"AT\": [\"austria\"],\n      \"CZ\": [\"cechia\", \"repubblica ceca\", \"czechia\", \"czech republic\"],\n      \"TR\": [\"turchia\", \"turkey\", \"t\u00fcrkiye\", \"turkiye\"],\n      \"CI\": [\"costa d'avorio\", \"ivory coast\", \"cote d'ivoire\"],\n      \"MM\": [\"myanmar\", \"birmania\", \"burma\"],\n      \"TL\": [\"timor est\", \"timor orientale\", \"east timor\", \"timor-leste\"],\n      \"SZ\": [\"eswatini\", \"swaziland\"],\n      \"MK\": [\"macedonia del nord\", \"macedonia\", \"north macedonia\"],\n      \"BY\": [\"bielorussia\", \"belarus\"],\n      \"MD\": [\"moldavia\", \"moldova\"],\n      \"MA\": [\"marocco\", \"morocco\"],\n      \"EG\": [\"egitto\", \"egypt\"],\n      \"GR\": [\"grecia\", \"greece\"],\n      \"IT\": [\"italia\", \"italy\"],\n      \"ES\": [\"spagna\", \"spain\"],\n      \"FR\": [\"francia\", \"france\"],\n      \"PL\": [\"polonia\", \"poland\"],\n      \"RU\": [\"russia\", \"russian federation\"],\n      \"CN\": [\"cina\", \"china\"],\n      \"JP\": [\"giappone\", \"japan\"],\n      \"IN\": [\"india\"],\n      \"BR\": [\"brasile\", \"brazil\"],\n      \"MX\": [\"messico\", \"mexico\"],\n      \"CA\": [\"canada\"],\n      \"AU\": [\"australia\"],\n      \"NZ\": [\"nuova zelanda\", \"new zealand\"],\n      \"ZA\": [\"sudafrica\", \"south africa\"],\n      \"KP\": [\"north korea\"],\n      \"CV\": [\"cabo verde\", \"cape verde\"],\n      \"CD\": [\"dr congo\", \"drc\", \"congo kinshasa\"],\n      \"CG\": [\"congo brazzaville\"],\n      \"VA\": [\"vatican\", \"holy see\"],\n      \"LA\": [\"laos\"],\n      \"VN\": [\"vietnam\", \"viet nam\"],\n      \"IR\": [\"iran\", \"persia\"],\n      \"MO\": [\"macau\", \"macao\"],\n      \"HK\": [\"hong kong\"],\n      \"TW\": [\"taiwan\"],\n      \"GE\": [\"georgia\"]\n  };\n  const COUNTRIES = {\n    cat1: [\"CY\",\"CA\",\"FR\",\"FI\",\"BH\",\"AU\",\"AD\",\"SE\",\"DE\",\"SA\",\"AT\",\"BE\",\"HK\",\"MT\",\"IS\",\"SM\",\"NL\",\"DK\",\"TW\",\"AE\",\"US\",\"BN\",\"CH\",\"NO\",\"GY\",\"QA\",\"MO\",\"IE\",\"LU\",\"SG\",\"LI\",\"GB\",\"GB-SCT\"],\n    cat2: [\"KR\",\"ME\",\"CL\",\"TT\",\"MV\",\"UY\",\"BS\",\"OM\",\"SC\",\"MY\",\"PA\",\"TR\",\"LV\",\"GR\",\"KZ\",\"SK\",\"HU\",\"RU\",\"RO\",\"EE\",\"AW\",\"PT\",\"PR\",\"HR\",\"KW\",\"JP\",\"NZ\",\"PL\",\"IL\",\"ES\",\"LT\",\"SI\",\"CZ\",\"IT\"],\n    cat3: [\"BZ\",\"TN\",\"GT\",\"IQ\",\"ZA\",\"FJ\",\"EC\",\"LY\",\"ID\",\"VN\",\"BT\",\"DZ\",\"PE\",\"PW\",\"BW\",\"DM\",\"PY\",\"MD\",\"GQ\",\"MN\",\"VC\",\"IR\",\"GD\",\"EG\",\"CO\",\"SR\",\"TM\",\"BA\",\"BB\",\"BR\",\"AL\",\"AM\",\"GA\",\"MX\",\"AZ\",\"TH\",\"LC\",\"CN\",\"MK\",\"DO\",\"AG\",\"AR\",\"GE\",\"CR\",\"MU\",\"RS\",\"BY\",\"KN\",\"XK\",\"BG\"],\n    cat4: [\"UA\",\"BI\",\"SS\",\"CF\",\"YE\",\"MZ\",\"MW\",\"SO\",\"CD\",\"LR\",\"MG\",\"NE\",\"AF\",\"SD\",\"SB\",\"ML\",\"HT\",\"VU\",\"BF\",\"LS\",\"TD\",\"GW\",\"TG\",\"GM\",\"KI\",\"SL\",\"PG\",\"UG\",\"KM\",\"PS\",\"RW\",\"TZ\",\"ET\",\"ZM\",\"FM\",\"BJ\",\"GN\",\"TL\",\"MM\",\"SN\",\"CM\",\"TJ\",\"TV\",\"NP\",\"CG\",\"ST\",\"PK\",\"KE\",\"ZW\",\"MH\",\"HN\",\"TO\",\"CI\",\"WS\",\"GH\",\"VE\",\"KH\",\"MR\",\"KG\",\"NI\",\"NG\",\"DJ\",\"AO\",\"LA\",\"BD\",\"BO\",\"MA\",\"JO\",\"LB\",\"NR\",\"IN\",\"NA\",\"CV\",\"UZ\",\"PH\",\"SZ\",\"JM\",\"SV\",\"LK\"]\n  };\n  const OPT_COMM_LANG = \"In welcher Sprache nimmst Du teil?\";\n  const OPT_STATUS    = \"Trifft etwas davon auf Dich zu?\";\n  const STATUS_LABEL = {\n    paar:        \"Zu zweit (gleicher Haushalt)\",\n    schueler:    \"Sch\u00fcler:innen\",\n    student:     \"Student\",\n    wiederholer: \"Wiederholer\",\n    apponly:     \"Digitale Teilnahme (App)\"\n  };\n  \/\/ \u2500\u2500 Shadow DOM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const host = document.getElementById(\"sw-host-it\");\n  const shadow = host.attachShadow({ mode: \"open\" });\n  const styleEl = document.createElement(\"style\");\n  styleEl.textContent = `\n    :host {\n      display: block;\n      --bg:           #F5FAF6;\n      --card:         #FFFFFF;\n      --ink:          #0C1E14;\n      --ink-muted:    #27703F;\n      --accent:       #0C1E14;\n      --accent-light: #E6F2E8;\n      --border:       #C8E0CE;\n      --radius:       16px;\n      --radius-sm:    10px;\n    }\n    @keyframes wiz-spin { to { transform: rotate(360deg); } }\n    .sw-root {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 20px; font-weight: 400; color: var(--ink);\n      background: var(--bg); padding: 32px 20px;\n      display: flex; align-items: flex-start; justify-content: center;\n    }\n    .sw-card {\n      background: var(--card); border: 1px solid var(--border);\n      border-radius: 24px; padding: 36px 32px;\n      width: 100%; max-width: 780px;\n      box-shadow: 0 4px 24px rgba(12,30,20,0.08); box-sizing: border-box;\n    }\n    @media (max-width: 480px) {\n      .sw-root { padding: 16px 10px; }\n      .sw-card { padding: 24px 16px; border-radius: 16px; }\n    }\n    .sw-progress { display: flex; gap: 8px; margin-bottom: 32px; }\n    .sw-progress-step { flex: 1; height: 4px; background: var(--border); border-radius: 999px; transition: background 0.35s; }\n    .sw-progress-step.active { background: var(--accent); }\n    .sw-progress-step.done   { background: var(--accent); opacity: 0.4; }\n    .sw-step-label { font-size: 12px; font-weight: 400; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: 10px; }\n    .sw-heading { font-size: 26px; font-weight: 500; line-height: 1.2; margin: 0 0 6px; color: var(--accent); letter-spacing: 0.01em; }\n    .sw-subtext { font-size: 18px; font-weight: 400; color: var(--ink-muted); margin: 0 0 28px; line-height: 1.6; }\n    .sw-label { display: block; font-size: 18px; font-weight: 700; margin-bottom: 6px; color: var(--ink); }\n    .sw-select, .sw-text-input {\n      width: 100%; padding: 13px 15px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg);\n      font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-select {\n      appearance: none;\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2327703F' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: right 15px center;\n      cursor: pointer;\n    }\n    .sw-select:focus, .sw-text-input:focus {\n      outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1);\n    }\n    .sw-text-input { margin-bottom: 14px; }\n    .sw-redirect { display: none; margin-top: 12px; padding: 18px 20px; border-radius: var(--radius-sm); background: #FFF8F0; border: 1px solid rgba(180,80,0,0.2); font-size: 17px; line-height: 1.8; color: var(--ink); }\n    .sw-redirect strong { display: block; margin-bottom: 8px; font-size: 17px; color: #7A3500; }\n    .sw-redirect a { color: #27703F; text-decoration: underline; }\n    .sw-infobox {\n      margin-top: 12px; padding: 15px 17px; border-radius: var(--radius-sm);\n      background: var(--accent-light); border: 1px solid rgba(12,30,20,0.15);\n      font-size: 18px; font-weight: 400; line-height: 1.5;\n    }\n    .sw-infobox-title {\n      font-weight: 700; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase;\n      color: var(--accent); margin-bottom: 3px;\n    }\n    .sw-divider { border: 0; border-top: 1px solid var(--border); margin: 30px 0 24px; }\n    .sw-choice-row { display: flex; gap: 10px; flex-wrap: wrap; }\n    .sw-choice-card {\n      flex: 1; min-width: 150px; padding: 16px 14px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      text-align: center; cursor: pointer; font-size: 17px; line-height: 1.3;\n      transition: all 0.15s; background: var(--bg); box-sizing: border-box;\n    }\n    .sw-choice-card:hover { border-color: var(--accent); }\n    .sw-choice-card.active { background: var(--accent-light); border-color: var(--accent); font-weight: 700; color: var(--accent); }\n    @media (max-width: 480px) { .sw-choice-card { min-width: 100%; } }\n    .sw-person-block { margin-bottom: 8px; }\n    .sw-person-title { font-weight: 700; font-size: 21px; color: var(--accent); margin-bottom: 16px; }\n    .sw-field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 0; }\n    @media (max-width: 480px) { .sw-field-grid { grid-template-columns: 1fr; } }\n    .sw-range-header { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 22px; }\n    .sw-range-header-label { font-weight: 700; font-size: 18px; }\n    .sw-amount-display { display: flex; align-items: baseline; gap: 3px; }\n    .sw-amount-display span { font-size: 18px; font-weight: 400; }\n    .sw-amount-input {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 36px; font-weight: 700; color: var(--ink);\n      border: 2px solid var(--border); background: var(--bg);\n      text-align: right; width: 132px; padding: 4px 12px;\n      outline: none; border-radius: var(--radius-sm);\n      transition: background 0.15s, color 0.15s, border-color 0.15s, box-shadow 0.15s;\n    }\n    .sw-amount-input:hover { border-color: var(--accent); background: var(--accent-light); }\n    .sw-amount-input:focus { border-color: var(--accent); background: var(--accent-light); color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    input[type=range].sw-range {\n      -webkit-appearance: none; width: 100%; height: 6px;\n      border-radius: 999px; background: var(--border); outline: none; cursor: pointer;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb {\n      -webkit-appearance: none; width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35);\n      cursor: pointer; transition: transform 0.15s, box-shadow 0.15s;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb:hover { transform: scale(1.08); box-shadow: 0 0 0 9px rgba(12,30,20,0.18), 0 3px 12px rgba(12,30,20,0.4); }\n    input[type=range].sw-range::-webkit-slider-thumb:active { transform: scale(1.12); }\n    input[type=range].sw-range::-moz-range-thumb {\n      width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      border: none; box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); cursor: pointer;\n    }\n    input[type=range].sw-range.sw-pulse::-webkit-slider-thumb { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    input[type=range].sw-range.sw-pulse::-moz-range-thumb    { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    @keyframes sw-thumb-pulse {\n      0%, 100% { box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); }\n      50%      { box-shadow: 0 0 0 15px rgba(12,30,20,0.05), 0 3px 10px rgba(12,30,20,0.35); }\n    }\n    .sw-range-wrap { position: relative; }\n    .sw-markers { position: relative; height: 56px; margin-bottom: 8px; margin-left: 18px; margin-right: 18px; }\n    .sw-marker {\n      position: absolute; transform: translateX(-50%);\n      display: flex; flex-direction: column; align-items: center; gap: 2px;\n      justify-content: flex-end; height: 100%; pointer-events: auto; cursor: pointer;\n    }\n    .sw-marker-tick { width: 1px; height: 10px; background: var(--border); flex-shrink: 0; }\n    .sw-marker.active .sw-marker-tick { background: var(--accent); opacity: 0.5; }\n    .sw-marker-label { font-size: 11px; font-weight: 400; color: var(--ink-muted); white-space: nowrap; line-height: 1.2; text-align: center; order: -2; }\n    .sw-marker-amount { font-size: 13px; font-weight: 700; color: var(--ink-muted); order: -1; }\n    .sw-marker.active .sw-marker-label, .sw-marker.active .sw-marker-amount { color: var(--accent); }\n    @media (max-width: 540px) {\n      .sw-markers { display: none; }\n      .sw-markers-mobile { display: flex !important; }\n    }\n    .sw-markers-mobile {\n      display: none; flex-direction: column; gap: 0;\n      margin: 12px 0 4px; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden;\n    }\n    .sw-marker-mobile {\n      display: flex; align-items: center; justify-content: space-between;\n      padding: 10px 14px; cursor: pointer; border-bottom: 1px solid var(--border);\n      transition: background 0.15s; font-family: 'Tinos', Georgia, serif;\n    }\n    .sw-marker-mobile:last-child { border-bottom: 0; }\n    .sw-marker-mobile:hover { background: var(--accent-light); }\n    .sw-marker-mobile.active { background: var(--accent-light); }\n    .sw-marker-mobile-label { font-size: 15px; font-weight: 400; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-label { color: var(--accent); font-weight: 700; }\n    .sw-marker-mobile-amount { font-size: 16px; font-weight: 700; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-amount { color: var(--accent); }\n    .sw-summary-box { padding: 18px 20px; background: var(--accent-light); border: 1px solid rgba(12,30,20,0.2); border-radius: var(--radius-sm); margin-top: 20px; }\n    .sw-summary-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; font-size: 16px; color: var(--ink); }\n    .sw-summary-row.sw-summary-discount { color: #8A1F1F; }\n    .sw-summary-row.sw-summary-total { border-top: 1px solid rgba(12,30,20,0.25); margin-top: 8px; padding-top: 12px; font-weight: 700; font-size: 22px; color: var(--accent); }\n    .sw-summary-person-label { font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-muted); margin: 14px 0 2px; }\n    .sw-summary-person-label:first-child { margin-top: 0; }\n    .sw-btn-row { display: flex; gap: 10px; margin-top: 24px; flex-wrap: wrap; }\n    .sw-btn { flex: 1; min-width: 140px; padding: 15px 17px; border-radius: var(--radius-sm); font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 700; cursor: pointer; transition: all 0.2s; border: 0; }\n    .sw-btn-primary { background: var(--accent); color: #fff; }\n    .sw-btn-primary:hover { background: #27703F; transform: translateY(-1px); }\n    .sw-btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }\n    .sw-btn-secondary { background: transparent; color: var(--ink); border: 1px solid var(--border); }\n    .sw-btn-secondary:hover { background: var(--bg); }\n    .sw-error { display: none; margin-top: 15px; padding: 13px 15px; border-radius: var(--radius-sm); background: #FFF3F3; border: 1px solid rgba(220,30,30,0.2); color: #8A1F1F; font-size: 18px; font-weight: 400; line-height: 1.5; white-space: pre-wrap; }\n    .wiz-spinner { display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.4); border-top-color: #fff; border-radius: 50%; animation: wiz-spin 0.7s linear infinite; vertical-align: middle; margin-right: 8px; }\n    .sw-country-search-wrap { position: relative; margin-bottom: 10px; }\n    .sw-country-search-icon { position: absolute; left: 18px; top: 50%; transform: translateY(-50%); color: var(--ink-muted); pointer-events: none; opacity: 0.5; }\n    .sw-country-search {\n      width: 100%; padding: 13px 15px 13px 54px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg); font-family: 'Tinos', Georgia, serif;\n      font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-country-search:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    .sw-country-list { max-height: 240px; overflow-y: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }\n    .sw-country-item { padding: 11px 15px; cursor: pointer; font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; display: flex; justify-content: space-between; align-items: center; transition: background 0.15s; border-bottom: 1px solid var(--border); }\n    .sw-country-item:last-child { border-bottom: 0; }\n    .sw-country-item:hover { background: var(--accent-light); }\n    .sw-country-item.selected { background: var(--accent-light); font-weight: 700; }\n    .sw-country-item-cat { font-size: 12px; color: var(--ink-muted); background: var(--border); padding: 2px 8px; border-radius: 999px; }\n    .sw-country-empty { padding: 15px; font-size: 18px; color: var(--ink-muted); text-align: center; }\n    .sw-step { display: none; }\n    .sw-step.active { display: block; }\n  `;\n  shadow.appendChild(styleEl);\n  const wrapper = document.createElement(\"div\");\n  wrapper.innerHTML = `\n    <div class=\"sw-root\">\n      <div class=\"sw-card\">\n        <div class=\"sw-progress\">\n          <div class=\"sw-progress-step\" id=\"sw-prog-1\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-2\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-3\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-4\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-5\"><\/div>\n        <\/div>\n        <!-- PASSO 1: BENVENUTO -->\n        <div class=\"sw-step active\" id=\"sw-step-welcome\">\n          <div class=\"sw-step-label\">Passo 1 di 5<\/div>\n          <h2 class=\"sw-heading\">Benvenuto\/a<\/h2>\n          <p class=\"sw-subtext\">In pochi passi selezionerai il tuo paese, la lingua, il tipo di iscrizione e il contributo \u2013 poi passerai direttamente al checkout.<\/p>\n          <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-welcome-next\" style=\"width:100%;\">Prezzi e iscrizione<\/button>\n        <\/div>\n        <!-- PASSO 2: PAESE -->\n        <div class=\"sw-step\" id=\"sw-step-country\">\n          <div class=\"sw-step-label\">Passo 2 di 5<\/div>\n          <h2 class=\"sw-heading\">Dove vivi?<\/h2>\n          <label class=\"sw-label\">Paese<\/label>\n          <div class=\"sw-country-search-wrap\">\n            <svg class=\"sw-country-search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.35-4.35\"\/><\/svg>\n            <input type=\"text\" class=\"sw-country-search\" id=\"sw-country-search\" placeholder=\"Cerca il tuo paese\u2026\" autocomplete=\"off\">\n          <\/div>\n          <div class=\"sw-country-list\" id=\"sw-country-list\"><\/div>\n          <input type=\"hidden\" id=\"sw-country\">\n          <div class=\"sw-infobox\" id=\"sw-catInfo\">\n            <div class=\"sw-infobox-title\">Categoria di prezzo<\/div>\n            <div id=\"sw-catText\">Seleziona prima un paese.<\/div>\n          <\/div>\n          <div class=\"sw-redirect\" id=\"sw-redirect-russia\">\n            <strong>Per i partecipanti dalla Russia esiste una pagina di iscrizione dedicata.<\/strong>\n            Il nostro sistema di pagamento non \u00e8 disponibile in Russia. Iscriviti l\u00ec:<br><br>\n            <a href=\"https:\/\/spiritual-activity.org\/ru\/anmeldung-basic-exercises\/\">Vai all'iscrizione russa<\/a>\n          <\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-country-back\">Indietro<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-country-next\" disabled>Avanti<\/button>\n          <\/div>\n        <\/div>\n        <!-- PASSO 3: LINGUA + TIPO DI ISCRIZIONE -->\n        <div class=\"sw-step\" id=\"sw-step-langform\">\n          <div class=\"sw-step-label\">Passo 3 di 5<\/div>\n          <h2 class=\"sw-heading\">Lingua e tipo di iscrizione<\/h2>\n          <label class=\"sw-label\" for=\"sw-commLang\">In quale lingua partecipi?<\/label>\n          <select class=\"sw-select\" id=\"sw-commLang\">\n            <option value=\"\" selected disabled>Seleziona\u2026<\/option>\n            <option value=\"Deutsch\">Tedesco<\/option>\n            <option value=\"Englisch\">Inglese<\/option>\n            <option value=\"Spanisch\">Spagnolo<\/option>\n            <option value=\"Franz\u00f6sisch\">Francese<\/option>\n            <option value=\"Italienisch\">Italiano<\/option>\n            <option value=\"Portugiesisch\">Portoghese<\/option>\n            <option value=\"Arabisch\">Arabo<\/option>\n            <option value=\"Hebr\u00e4isch\">Ebraico<\/option>\n            <option value=\"Farsi\">Persiano (Farsi)<\/option>\n            <option value=\"Georgisch\">Georgiano<\/option>\n            <option value=\"Ukrainisch\">Ucraino<\/option>\n            <option value=\"Niederl\u00e4ndisch\">Olandese<\/option>\n            <option value=\"T\u00fcrkisch\">Turco<\/option>\n            <option value=\"Bulgarisch\">Bulgaro<\/option>\n            <option value=\"Russisch\">Russo<\/option>\n            <option value=\"Chinesisch\">Cinese<\/option>\n            <option value=\"Japanisch\">Giapponese<\/option>\n            <option value=\"Koreanisch\">Coreano<\/option>\n          <\/select>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note\" style=\"display:none; margin-top:14px;\">\n            <div class=\"sw-infobox-title\">PARTECIPAZIONE DIGITALE \u00b7 \u221235\u20ac<\/div>\n            <div id=\"sw-apponly-note-text\">Partecipi in modalit\u00e0 digitale. Lo sconto verr\u00e0 applicato automaticamente nel riepilogo.<\/div>\n          <\/div>\n          <label class=\"sw-label\" style=\"margin-top:26px;\">Come desideri iscriverti?<\/label>\n          <div class=\"sw-choice-row\" id=\"sw-form-choices\">\n            <div class=\"sw-choice-card active\" data-form=\"einzeln\">Individuale<\/div>\n            <div class=\"sw-choice-card\" data-form=\"paar\">In coppia<br><span style=\"font-size:13px; font-weight:400;\">(stesso nucleo familiare)<\/span><\/div>\n            <div class=\"sw-choice-card\" data-form=\"gruppe\">Gruppo<br><span style=\"font-size:13px; font-weight:400;\">(da 4 persone in su)<\/span><\/div>\n          <\/div>\n          <div class=\"sw-infobox\" id=\"sw-gruppe-note\" style=\"display:none; margin-top:18px;\">\n            <div class=\"sw-infobox-title\">Iscrizione di gruppo<\/div>\n            <div>Ci fa piacere il tuo interesse. Nella pagina successiva puoi effettuare l'iscrizione di gruppo. Attenzione: l'iscrizione di gruppo \u00e8 disponibile solo in tedesco e inglese.<\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-langform\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-langform-back\">Indietro<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-langform-next\" disabled>Avanti<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-gruppe-redirect\" style=\"display:none;\">Vai all'iscrizione di gruppo<\/button>\n          <\/div>\n        <\/div>\n        <!-- PASSO 4A: DATI \u2013 INDIVIDUALE -->\n        <div class=\"sw-step\" id=\"sw-step-details-solo\">\n          <div class=\"sw-step-label\">Passo 4 di 5<\/div>\n          <h2 class=\"sw-heading\">Qualche informazione su di te<\/h2>\n          <p class=\"sw-subtext\">Qualcuna di queste opzioni si applica a te? Questo ci aiuta a suggerirti il contributo pi\u00f9 adatto.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">PARTECIPAZIONE DIGITALE \u00b7 \u221235\u20ac<\/div>\n            <div>Partecipi in modalit\u00e0 digitale. Lo sconto verr\u00e0 applicato automaticamente nel riepilogo.<\/div>\n          <\/div>\n          <label class=\"sw-label\">Seleziona<\/label>\n          <select class=\"sw-select\" id=\"sw-solo-status\">\n            <option value=\"\" disabled selected>Seleziona\u2026<\/option>\n            <option value=\"normal\">Iscrizione standard<\/option>\n            <option value=\"schueler\">Studente di scuola superiore (\u221250%)<\/option>\n            <option value=\"student\">In formazione \/ studente universitario\/a (\u221225%)<\/option>\n            <option value=\"wiederholer\">Ripeto il corso con gli esercizi dell'anima (senza nuovo set di carte \u2212 30%)<\/option>\n          <\/select>\n          <div class=\"sw-error\" id=\"sw-error-details-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-solo-back\">Indietro<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-solo-next\" disabled>Avanti<\/button>\n          <\/div>\n        <\/div>\n        <!-- PASSO 4B: DATI \u2013 COPPIA -->\n        <div class=\"sw-step\" id=\"sw-step-details-paar\">\n          <div class=\"sw-step-label\">Passo 4 di 5<\/div>\n          <h2 class=\"sw-heading\">Dati di entrambi<\/h2>\n          <p class=\"sw-subtext\">Inserisci i dati di entrambe le persone. La seconda persona riceve automaticamente uno sconto del 50%.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-paar-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">PARTECIPAZIONE DIGITALE \u00b7 \u221235\u20ac<\/div>\n            <div>Partecipate in modalit\u00e0 digitale. Lo sconto verr\u00e0 applicato automaticamente nel riepilogo.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">Persona 1<\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">Nome<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-vorname\"><\/div>\n              <div><label class=\"sw-label\">Cognome<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">E-mail<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p1-email\">\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">Persona 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">Nome<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-vorname\"><\/div>\n              <div><label class=\"sw-label\">Cognome<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">E-mail<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p2-email\">\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-details-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-paar-back\">Indietro<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-paar-next\" disabled>Avanti<\/button>\n          <\/div>\n        <\/div>\n        <!-- PASSO 5A: CONTRIBUTO \u2013 INDIVIDUALE -->\n        <div class=\"sw-step\" id=\"sw-step-amount-solo\">\n          <div class=\"sw-step-label\">Passo 5 di 5<\/div>\n          <h2 class=\"sw-heading\">Scegli il contributo<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-solo\">Qui puoi scegliere il contributo che senti giusto per te.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-solo\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">PARTECIPAZIONE DIGITALE \u00b7 \u221235\u20ac<\/div>\n            <div>Partecipi in modalit\u00e0 digitale. Lo sconto verr\u00e0 applicato automaticamente nel riepilogo.<\/div>\n          <\/div>\n          <div class=\"sw-range-header\">\n            <div class=\"sw-range-header-label\">Il tuo importo<\/div>\n            <div class=\"sw-amount-display\">\n              <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-solo\" value=\"360\">\n              <span>\u20ac<\/span>\n            <\/div>\n          <\/div>\n          <div class=\"sw-range-wrap\">\n            <div class=\"sw-markers\" id=\"sw-markers-solo\"><\/div>\n            <input type=\"range\" class=\"sw-range\" id=\"sw-amount-solo\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n            <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-solo\"><\/div>\n          <\/div>\n          <p style=\"margin-top:18px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            Se hai bisogno di un ulteriore sconto, scrivici a:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-solo\">\n            <div class=\"sw-summary-row\"><span>Contributo scelto<\/span><span id=\"sw-solo-chosen\">360\u20ac<\/span><\/div>\n            <div id=\"sw-solo-discounts\"><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-solo\" style=\"display:none;\"><span>Spedizione<\/span><span>\u20ac15<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>Totale<\/span><span><span id=\"sw-solo-total\">360<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-solo-back\">Indietro<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-solo\">Iscriviti<\/button>\n          <\/div>\n        <\/div>\n        <!-- PASSO 5B: CONTRIBUTO \u2013 COPPIA -->\n        <div class=\"sw-step\" id=\"sw-step-amount-paar\">\n          <div class=\"sw-step-label\">Passo 5 di 5<\/div>\n          <h2 class=\"sw-heading\">Scegli i contributi<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-paar\">Ogni persona sceglie il proprio contributo. La persona 2 riceve automaticamente uno sconto del 50%.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-paar\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">PARTECIPAZIONE DIGITALE \u00b7 \u221235\u20ac<\/div>\n            <div>Partecipate in modalit\u00e0 digitale. Lo sconto verr\u00e0 applicato automaticamente nel riepilogo.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p1-title\">Persona 1<\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">Contributo<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p1\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p1\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p1\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p1\"><\/div>\n            <\/div>\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p2-title\">Persona 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">Contributo<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p2\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p2\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p2\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p2\"><\/div>\n            <\/div>\n          <\/div>\n          <p style=\"margin-top:8px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            Se avete bisogno di un ulteriore sconto, scriveteci a:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-paar\">\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p1-label\">Persona 1<\/div>\n            <div class=\"sw-summary-row\"><span>Contributo scelto<\/span><span id=\"sw-p1-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p1-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>Subtotale<\/span><span id=\"sw-p1-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p2-label\">Persona 2<\/div>\n            <div class=\"sw-summary-row\"><span>Contributo scelto<\/span><span id=\"sw-p2-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p2-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>Subtotale<\/span><span id=\"sw-p2-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-paar\" style=\"display:none;\"><span>Spedizione<\/span><span>\u20ac15<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>Totale<\/span><span><span id=\"sw-paar-total\">0<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-paar-back\">Indietro<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-paar\">Vai al checkout<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  `;\n  shadow.appendChild(wrapper);\n  const $ = (id) => shadow.getElementById(id);\n  const COUNTRY_TO_CAT = {};\n  Object.keys(COUNTRIES).forEach(cat => COUNTRIES[cat].forEach(code => COUNTRY_TO_CAT[code] = cat));\n  function getCountryName(code) {\n    if (COUNTRY_NAME_OVERRIDES[code]) return COUNTRY_NAME_OVERRIDES[code];\n    try { return new Intl.DisplayNames([\"it\"], { type: \"region\" }).of(code) || code; }\n    catch { return code; }\n  }\n  function getCountryAliases(code) {\n    const list = [];\n    \/\/ Offizieller Intl-Name, falls durch ein Override ersetzt (z. B. US -> \"USA\")\n    if (COUNTRY_NAME_OVERRIDES[code]) {\n      try {\n        const intlName = new Intl.DisplayNames([\"it\"], { type: \"region\" }).of(code);\n        if (intlName) list.push(intlName.toLowerCase());\n      } catch {}\n    }\n    (COUNTRY_SEARCH_ALIASES[code] || []).forEach(a => list.push(a.toLowerCase()));\n    return list;\n  }\n  function getAllCountriesSorted() {\n    const all = [];\n    [\"cat1\",\"cat2\",\"cat3\",\"cat4\"].forEach(cat => {\n      COUNTRIES[cat]\n        .map(code => ({ code, name: getCountryName(code), cat, aliases: getCountryAliases(code) }))\n        .sort((a, b) => a.name.localeCompare(b.name, \"it\"))\n        .forEach(c => all.push(c));\n    });\n    return all;\n  }\n  function emptyPerson() {\n    return { vorname: \"\", nachname: \"\", email: \"\", wiederholer: false, statusType: \"\", amount: 0 };\n  }\n  const state = {\n    country: \"\", category: \"cat1\",\n    commLang: \"\", form: \"einzeln\",\n    persons: { solo: emptyPerson(), p1: emptyPerson(), p2: emptyPerson() }\n  };\n  function getPerson(key) { return state.persons[key] || state.persons.solo; }\n  function isAppOnly() {\n    const { category: cat, commLang: lang, country } = state;\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[country];\n      if (!exceptionLang || lang !== exceptionLang) return true;\n    }\n    if (APP_ONLY_LANGS.has(lang)) return true;\n    if (lang === \"Russisch\" && country && country !== \"RU\") return true;\n    return false;\n  }\n\n  function isWiederholer(person) {\n    return !!person && (person.wiederholer || person.statusType === \"wiederholer\");\n  }\n\n  \/\/ Geht ueberhaupt ein Kartenset raus? Nur wenn die Teilnahme nicht rein digital\n  \/\/ ist UND mindestens eine Person ein neues Set braucht - Wiederholer bekommen\n  \/\/ keins. Steuert sowohl die Versandzeile in der Zusammenfassung als auch die\n  \/\/ Wahl des Ecwid-Produkts, damit beide nicht auseinanderlaufen koennen.\n  function hasPhysicalShipment(isPaar) {\n    if (isAppOnly()) return false;\n    return isPaar\n      ? !(isWiederholer(state.persons.p1) && isWiederholer(state.persons.p2))\n      : !isWiederholer(state.persons.solo);\n  }\n\n  \/\/ Ecwid haengt den Versand am Produkt fest, nicht am Warenkorb. Ohne physischen\n  \/\/ Versand muss deshalb das versandfreie Digital-Produkt in den Warenkorb, sonst\n  \/\/ schlaegt der Shop trotzdem Versandkosten auf.\n  function getParticipationProductId(isPaar) {\n    return hasPhysicalShipment(isPaar) ? PRODUCTS[state.category] : PRODUCTS_APPONLY[state.category];\n  }\n  function updateAppOnlyUI() {\n    const appOnly = state.commLang ? isAppOnly() : false;\n    let reason = \"\";\n    if (appOnly) {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[state.country];\n      if ((state.category === \"cat3\" || state.category === \"cat4\") && exceptionLang) {\n        reason = `La spedizione nella tua regione \u00e8 disponibile solo con la lingua di partecipazione ${LANG_DISPLAY[exceptionLang] || exceptionLang}. Partecipi in modalit\u00e0 digitale. Lo sconto verr\u00e0 applicato automaticamente nel riepilogo.`;\n      } else if (state.category === \"cat3\" || state.category === \"cat4\") {\n        reason = \"La spedizione non \u00e8 disponibile nella tua regione. Partecipi in modalit\u00e0 digitale. Lo sconto verr\u00e0 applicato automaticamente nel riepilogo.\";\n      } else if (state.commLang === \"Russisch\") {\n        reason = \"Per i parlanti russo al di fuori della Russia \u00e8 disponibile solo una versione digitale. Lo sconto verr\u00e0 applicato automaticamente nel riepilogo.\";\n      } else {\n        reason = \"In questa lingua \u00e8 disponibile solo una versione digitale. Lo sconto verr\u00e0 applicato automaticamente nel riepilogo.\";\n      }\n    }\n    const noteIds = [\"sw-apponly-note\",\"sw-apponly-note-step4\",\"sw-apponly-note-paar-step4\",\"sw-apponly-note-step5-solo\",\"sw-apponly-note-step5-paar\"];\n    noteIds.forEach(id => {\n      const el = $(id);\n      if (!el) return;\n      el.style.display = appOnly ? \"block\" : \"none\";\n      const textDiv = el.querySelector(\"div:not(.sw-infobox-title)\");\n      if (textDiv && reason) textDiv.textContent = reason;\n    });\n  }\n  const STEP_CONTAINER = {\n    1: () => \"sw-step-welcome\",\n    2: () => \"sw-step-country\",\n    3: () => \"sw-step-langform\",\n    4: () => state.form === \"paar\" ? \"sw-step-details-paar\" : \"sw-step-details-solo\",\n    5: () => state.form === \"paar\" ? \"sw-step-amount-paar\" : \"sw-step-amount-solo\"\n  };\n  function showStep(n) {\n    shadow.querySelectorAll(\".sw-step\").forEach(el => el.classList.remove(\"active\"));\n    $(STEP_CONTAINER[n]()).classList.add(\"active\");\n    for (let i = 1; i <= 5; i++) {\n      const prog = $(\"sw-prog-\" + i);\n      if (!prog) continue;\n      if (i < n) prog.className = \"sw-progress-step done\";\n      else if (i === n) prog.className = \"sw-progress-step active\";\n      else prog.className = \"sw-progress-step\";\n    }\n    if (n === 5) {\n      const sliderIds = state.form === \"paar\" ? [\"sw-amount-p1\",\"sw-amount-p2\"] : [\"sw-amount-solo\"];\n      sliderIds.forEach(sid => { const el = $(sid); if (el) el.classList.add(\"sw-pulse\"); });\n      refreshSummary();\n    }\n  }\n  function setNextEnabled(id, enabled) {\n    const b = $(id);\n    if (!b) return;\n    b.disabled = !enabled;\n    b.style.opacity = enabled ? \"1\" : \".4\";\n    b.style.cursor  = enabled ? \"pointer\" : \"not-allowed\";\n  }\n  function showErrorIn(id, msg) { const el=$(id); el.style.display=\"block\"; el.textContent=msg; }\n  function clearErrorIn(id)     { const el=$(id); el.style.display=\"none\";  el.textContent=\"\"; }\n  function setCheckoutLoading(btnId, loading) {\n    const btn = $(btnId);\n    const overlay = document.getElementById(OVERLAY_ID);\n    if (!btn.dataset.defaultLabel) btn.dataset.defaultLabel = btn.textContent;\n    if (loading) {\n      btn.disabled = true;\n      btn.innerHTML = '<span class=\"wiz-spinner\"><\/span> In preparazione\u2026';\n      btn.style.opacity = \".8\";\n      if (overlay) overlay.style.display = \"flex\";\n    } else {\n      btn.disabled = false;\n      btn.textContent = btn.dataset.defaultLabel;\n      btn.style.opacity = \"1\";\n      if (overlay) overlay.style.display = \"none\";\n    }\n  }\n  function showThankYou() {\n    const card = shadow.querySelector(\".sw-card\");\n    if (!card) return;\n    card.innerHTML = `\n      <div style=\"text-align:center; padding:20px 0;\">\n        <div style=\"font-size:56px; margin-bottom:16px; color:#27703F;\">\u2713<\/div>\n        <h2 style=\"font-family:'Tinos',Georgia,serif; font-size:26px; font-weight:500; margin:0 0 12px; color:#0C1E14;\">Grazie!<\/h2>\n        <p style=\"font-family:'Tinos',Georgia,serif; font-size:18px; color:#27703F; line-height:1.6; margin:0 0 24px;\">Il checkout \u00e8 in caricamento\u2026<br>Verrai reindirizzato\/a a breve\u2026<\/p>\n        <div style=\"display:flex; justify-content:center;\">\n          <div style=\"width:36px; height:36px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:wiz-spin 0.8s linear infinite;\"><\/div>\n        <\/div>\n      <\/div>`;\n  }\n  function getAnchors(cat) {\n    const r = RANGES[cat], o = ORIENTIERUNG[cat];\n    return [[0,r.min],[25,o.reduced],[50,o.base],[75,o.support],[100,r.max]];\n  }\n  function normToEuro(norm, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      if (norm <= a[i+1][0]) {\n        const t = (norm - a[i][0]) \/ (a[i+1][0] - a[i][0]);\n        return Math.round(a[i][1] + t * (a[i+1][1] - a[i][1]));\n      }\n    }\n    return a[a.length-1][1];\n  }\n  function euroToNorm(euro, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      const lo = a[i][1], hi = a[i+1][1];\n      if (euro <= hi) {\n        if (hi === lo) return a[i+1][0];\n        return a[i][0] + (euro - lo) \/ (hi - lo) * (a[i+1][0] - a[i][0]);\n      }\n    }\n    return 100;\n  }\n  function getMarkerDefs(cat) {\n    const o = ORIENTIERUNG[cat];\n    return [\n      { value: o.reduced, label: \"Contributo ridotto\",     normPct: 25 },\n      { value: o.base,    label: \"Contributo standard\",    normPct: 50 },\n      { value: o.support, label: \"Contributo di sostegno\", normPct: 75 }\n    ];\n  }\n  function renderMarkers(personKey) {\n    const cat = state.category;\n    const person = getPerson(personKey);\n    const markers = getMarkerDefs(cat);\n    const container = $(`sw-markers-${personKey}`);\n    container.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker\" + (person.amount === m.value ? \" active\" : \"\");\n      div.style.left = m.normPct + \"%\";\n      div.innerHTML = `<div class=\"sw-marker-tick\"><\/div><div class=\"sw-marker-amount\">${m.value}\u20ac<\/div><div class=\"sw-marker-label\">${m.label}<\/div>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      container.appendChild(div);\n    });\n    const mobileContainer = $(`sw-markers-mobile-${personKey}`);\n    mobileContainer.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker-mobile\" + (person.amount === m.value ? \" active\" : \"\");\n      div.innerHTML = `<span class=\"sw-marker-mobile-label\">${m.label}<\/span><span class=\"sw-marker-mobile-amount\">${m.value}\u20ac<\/span>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      mobileContainer.appendChild(div);\n    });\n  }\n  function selectMarkerValue(personKey, value) {\n    const person = getPerson(personKey);\n    $(`sw-amount-${personKey}`).value = euroToNorm(value, state.category);\n    person.amount = value;\n    $(`sw-amountInput-${personKey}`).value = value;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromSlider(personKey) {\n    const person = getPerson(personKey);\n    const norm = Number($(`sw-amount-${personKey}`).value);\n    person.amount = normToEuro(norm, state.category);\n    $(`sw-amountInput-${personKey}`).value = person.amount;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromInput(personKey) {\n    const person = getPerson(personKey);\n    const r = RANGES[state.category];\n    let val = Number($(`sw-amountInput-${personKey}`).value);\n    if (isNaN(val)) val = r.min;\n    val = Math.min(r.max, Math.max(r.min, val));\n    person.amount = val;\n    $(`sw-amountInput-${personKey}`).value = val;\n    $(`sw-amount-${personKey}`).value = euroToNorm(val, state.category);\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function wireAmountControl(personKey) {\n    $(`sw-amount-${personKey}`).addEventListener(\"input\", () => updateAmountFromSlider(personKey));\n    $(`sw-amountInput-${personKey}`).addEventListener(\"input\", () => {\n      const v = Number($(`sw-amountInput-${personKey}`).value);\n      if (!isNaN(v)) { getPerson(personKey).amount = v; refreshSummary(); }\n    });\n    $(`sw-amountInput-${personKey}`).addEventListener(\"change\", () => updateAmountFromInput(personKey));\n  }\n  function applyRangeForForm() {\n    const cat = state.category;\n    const ori = ORIENTIERUNG[cat];\n    const hint = \"Qui puoi scegliere il contributo che senti giusto per te. Con un contributo di sostegno permetti a persone con minori mezzi finanziari di partecipare e ci aiuti a portare questo progetto nel mondo.\";\n    if (state.form === \"paar\") {\n      [\"p1\",\"p2\"].forEach(key => {\n        const person = getPerson(key);\n        person.amount = ori.base;\n        $(`sw-amount-${key}`).value = 50;\n        $(`sw-amountInput-${key}`).value = ori.base;\n      });\n      const p1name = state.persons.p1.vorname;\n      const p2name = state.persons.p2.vorname;\n      $(\"sw-amount-p1-title\").innerHTML = p1name ? `Persona 1 \u2013 ${p1name}` : \"Persona 1\";\n      $(\"sw-amount-p2-title\").innerHTML = (p2name ? `Persona 2 \u2013 ${p2name}` : \"Persona 2\") +\n        ' <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span>';\n      $(\"sw-summary-p1-label\").textContent = p1name ? `Persona 1 \u2013 ${p1name}` : \"Persona 1\";\n      $(\"sw-summary-p2-label\").textContent = (p2name ? `Persona 2 \u2013 ${p2name}` : \"Persona 2\") + \" (\u221250%)\";\n      $(\"sw-rangeHint-paar\").textContent = hint;\n      renderMarkers(\"p1\"); renderMarkers(\"p2\");\n    } else {\n      const person = state.persons.solo;\n      person.amount = ori.base;\n      $(\"sw-amount-solo\").value = 50;\n      $(\"sw-amountInput-solo\").value = ori.base;\n      $(\"sw-rangeHint-solo\").textContent = hint;\n      renderMarkers(\"solo\");\n    }\n    refreshSummary();\n  }\n  \/\/ \u2500\u2500 Logica degli sconti \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  function getPercentDiscountCandidate(person, isPaarP2) {\n    if (isPaarP2) return { value: DISCOUNT_PAAR_P2, label: \"Sconto coppia \u2013 Persona 2\" };\n    const candidates = [];\n    if (isWiederholer(person)) candidates.push({ value: DISCOUNT_WIEDERHOLER, label: \"Ripetente\" });\n    if (person.statusType === \"schueler\") candidates.push({ value: DISCOUNT_SCHUELER, label: \"Studente scuola superiore\" });\n    if (person.statusType === \"student\")  candidates.push({ value: DISCOUNT_STUDENT,  label: \"In formazione \/ universit\u00e0\" });\n    if (!candidates.length) return null;\n    return candidates.reduce((best, c) => c.value > best.value ? c : best, candidates[0]);\n  }\n  function getDiscounts(person, isPaarP2) {\n    const discounts = [];\n    let remaining = Math.round(person.amount);\n    if (isAppOnly()) {\n      const appDisc = Math.min(DISCOUNT_APP_FIXED, remaining);\n      discounts.push({ type: \"fixed\", value: DISCOUNT_APP_FIXED, label: \"Partecipazione digitale\", amountEuro: appDisc });\n      remaining -= appDisc;\n    }\n    const pct = getPercentDiscountCandidate(person, isPaarP2);\n    if (pct) {\n      const pctDisc = Math.round(remaining * pct.value);\n      discounts.push({ type: \"pct\", value: pct.value, label: pct.label, amountEuro: pctDisc });\n      remaining -= pctDisc;\n    }\n    return { discounts, finalAmount: Math.max(0, remaining) };\n  }\n  function buildStatusOptionValue(person, isPaar) {\n    const vals = [];\n    if (isPaar) vals.push(STATUS_LABEL.paar);\n    if (isAppOnly()) vals.push(STATUS_LABEL.apponly);\n    if (isWiederholer(person)) vals.push(STATUS_LABEL.wiederholer);\n    if (person.statusType === \"schueler\") vals.push(STATUS_LABEL.schueler);\n    if (person.statusType === \"student\")  vals.push(STATUS_LABEL.student);\n    return vals;\n  }\n  function refreshSummary() {\n    if (state.form === \"paar\") refreshSummaryPaar();\n    else refreshSummarySolo();\n  }\n  function renderDiscountRows(containerId, discounts) {\n    const container = $(containerId);\n    container.innerHTML = \"\";\n    discounts.forEach(d => {\n      const row = document.createElement(\"div\");\n      row.className = \"sw-summary-row sw-summary-discount\";\n      const pctStr = d.type === \"fixed\" ? `\u2212${d.amountEuro}\u20ac` : `\u2212${Math.round(d.value * 100)}%`;\n      row.innerHTML = `<span>${d.label} (${pctStr})<\/span><span>\u2212${d.amountEuro}\u20ac<\/span>`;\n      container.appendChild(row);\n    });\n  }\n  function refreshSummarySolo() {\n    const p = state.persons.solo;\n    const { discounts, finalAmount } = getDiscounts(p, false);\n    $(\"sw-solo-chosen\").textContent = Math.round(p.amount) + \"\u20ac\";\n    renderDiscountRows(\"sw-solo-discounts\", discounts);\n    const shipLine = $(\"sw-shipping-line-solo\");\n    const shippingSolo = (hasPhysicalShipment(false) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingSolo ? \"flex\" : \"none\";\n    $(\"sw-solo-total\").textContent = finalAmount + shippingSolo;\n  }\n  function refreshSummaryPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    function fill(prefix, person, isPaarP2) {\n      const { discounts, finalAmount } = getDiscounts(person, isPaarP2);\n      $(`sw-${prefix}-chosen`).textContent = Math.round(person.amount) + \"\u20ac\";\n      renderDiscountRows(`sw-${prefix}-discounts`, discounts);\n      $(`sw-${prefix}-subtotal`).textContent = finalAmount + \"\u20ac\";\n      return finalAmount;\n    }\n    const f1 = fill(\"p1\", p1, false);\n    const f2 = fill(\"p2\", p2, true);\n    const shipLine = $(\"sw-shipping-line-paar\");\n    const shippingPaar = (hasPhysicalShipment(true) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingPaar ? \"flex\" : \"none\";\n    $(\"sw-paar-total\").textContent = f1 + f2 + shippingPaar;\n  }\n  function renderCountryList(filter) {\n    const list = $(\"sw-country-list\");\n    const q = (filter || \"\").toLowerCase().trim();\n    const filtered = q\n      ? getAllCountriesSorted().filter(c =>\n          c.name.toLowerCase().includes(q) ||\n          (c.aliases || []).some(a => a.includes(q))\n        )\n      : getAllCountriesSorted();\n    list.innerHTML = \"\";\n    if (!filtered.length) { list.innerHTML = '<div class=\"sw-country-empty\">Nessun paese trovato<\/div>'; return; }\n    filtered.forEach(c => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-country-item\" + (state.country === c.code ? \" selected\" : \"\");\n      div.dataset.code = c.code;\n      div.innerHTML = `<span>${c.name}<\/span><span class=\"sw-country-item-cat\">Cat. ${c.cat.replace(\"cat\",\"\")}<\/span>`;\n      div.addEventListener(\"click\", () => selectCountry(c.code, c.cat, c.name));\n      list.appendChild(div);\n    });\n  }\n  function selectCountry(code, cat, name) {\n    state.country  = code;\n    state.category = cat;\n    $(\"sw-country\").value = code;\n    $(\"sw-country-search\").value = name;\n    $(\"sw-country-list\").innerHTML = \"\";\n    const catLabels = {\n      cat1:\"Categoria di prezzo 1\", cat2:\"Categoria di prezzo 2\",\n      cat3:\"Categoria di prezzo 3\", cat4:\"Categoria di prezzo 4\"\n    };\n    const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[code];\n    let suffix = \"\";\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      suffix = exceptionLang\n        ? ` \u2013 Spedizione disponibile solo con la lingua di partecipazione ${LANG_DISPLAY[exceptionLang] || exceptionLang}, altrimenti solo partecipazione digitale`\n        : \" \u2013 Solo partecipazione digitale\";\n    }\n    $(\"sw-catText\").textContent = (catLabels[cat] || cat) + suffix;\n    \/\/ Ecwid wickelt in Russland keine Zahlungen ab. Wer Russland waehlt, wird\n    \/\/ deshalb auf die russische Anmeldeseite verwiesen - die laeuft ueber n8n\n    \/\/ und Tochka statt ueber den Shop. Der russische Wizard verweist umgekehrt\n    \/\/ zurueck, sobald dort ein anderes Land gewaehlt wird.\n    const nachRussland = (code === \"RU\");\n    $(\"sw-redirect-russia\").style.display = nachRussland ? \"block\" : \"none\";\n    $(\"sw-catInfo\").style.display         = nachRussland ? \"none\"  : \"block\";\n    setNextEnabled(\"sw-btn-country-next\", !nachRussland);\n    updateAppOnlyUI();\n  }\n  function ensureEcwidReady(timeoutMs = 12000) {\n    return new Promise((resolve, reject) => {\n      function isReady() {\n        return window.Ecwid && window.Ecwid.Cart &&\n               typeof window.Ecwid.Cart.addProduct === \"function\" &&\n               typeof window.Ecwid.Cart.clear === \"function\";\n      }\n      if (isReady()) return resolve(true);\n      let resolved = false;\n      function done() { if (!resolved) { resolved = true; setTimeout(() => resolve(true), 200); } }\n      if (window.Ecwid) { try { window.Ecwid.OnAPILoaded.add(done); } catch(e) {} }\n      const start = Date.now();\n      const t = setInterval(() => {\n        if (isReady()) { clearInterval(t); done(); }\n        else if (Date.now() - start > timeoutMs) {\n          clearInterval(t);\n          if (!resolved) { resolved = true; reject(new Error(\"Ecwid Cart API non disponibile dopo \" + (timeoutMs\/1000) + \"s.\")); }\n        }\n      }, 200);\n    });\n  }\n  function clearCartAsync() { return new Promise(r => Ecwid.Cart.clear(() => r(true))); }\n  function addProductAsync(payload, timeoutMs = 4000) {\n    return new Promise((resolve, reject) => {\n      let done = false;\n      const t = setTimeout(() => { if (!done) { done = true; resolve({ product:null, cart:null, timedOut:true }); } }, timeoutMs);\n      Ecwid.Cart.addProduct(payload, function(success, product, cart, error) {\n        if (done) return;\n        done = true; clearTimeout(t);\n        if (success) resolve({ product, cart, timedOut:false });\n        else reject(new Error((error || \"Prodotto non aggiunto\") + \" | Payload: \" + JSON.stringify(payload)));\n      });\n    });\n  }\n  function goToCart() { window.location.href = SHOP_CART_URL; }\n  function buildN8nPayload() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const d1 = getDiscounts(p1, false);\n    const d2 = getDiscounts(p2, true);\n    return {\n      sprache: state.commLang, land: state.country, kategorie: state.category, appOnly: isAppOnly(),\n      person1: { vorname: p1.vorname, nachname: p1.nachname, email: p1.email },\n      person2: { vorname: p2.vorname, nachname: p2.nachname, email: p2.email },\n      betraege: {\n        person1: { gewaehlt: Math.round(p1.amount), rabatte: d1.discounts, endbetrag: d1.finalAmount },\n        person2: { gewaehlt: Math.round(p2.amount), rabatte: d2.discounts, endbetrag: d2.finalAmount },\n        gesamt: d1.finalAmount + d2.finalAmount\n      },\n      timestamp: new Date().toISOString()\n    };\n  }\n  async function sendToN8n(payload) {\n    if (!N8N_WEBHOOK_URL || N8N_WEBHOOK_URL.indexOf(\"HIER_\") === 0) {\n      throw new Error(\"L'URL del webhook n8n non \u00e8 configurata nel codice.\");\n    }\n    let res;\n    try {\n      res = await fetch(N8N_WEBHOOK_URL, { method:\"POST\", headers:{\"Content-Type\":\"application\/json\"}, body:JSON.stringify(payload) });\n    } catch (e) {\n      throw new Error(\"I dati non hanno potuto essere inviati. Verifica la tua connessione internet.\");\n    }\n    if (!res.ok) throw new Error(\"Invio fallito (errore \" + res.status + \"). Riprova.\");\n    return true;\n  }\n  async function goCheckoutSolo() {\n    clearErrorIn(\"sw-error-amount-solo\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-solo\", \"Seleziona prima un paese.\");\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-solo\", \"Seleziona la lingua di partecipazione.\");\n    const p = state.persons.solo;\n    const finalAmount = getDiscounts(p, false).finalAmount;\n    const participationProductId = getParticipationProductId(false);\n    setCheckoutLoading(\"sw-btn-checkout-solo\", true);\n    try {\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const statusValue = buildStatusOptionValue(p, false);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: finalAmount, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-solo\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-solo\", false);\n    }\n  }\n  async function goCheckoutPaar() {\n    clearErrorIn(\"sw-error-amount-paar\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-paar\", \"Seleziona prima un paese.\");\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-paar\", \"Seleziona la lingua di partecipazione.\");\n    if (!validateDetailsPaar()) return showErrorIn(\"sw-error-amount-paar\", \"Torna indietro e compila tutti i campi per entrambe le persone.\");\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const participationProductId = getParticipationProductId(true);\n    setCheckoutLoading(\"sw-btn-checkout-paar\", true);\n    try {\n      const payload = buildN8nPayload();\n      await sendToN8n(payload);\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const total = getDiscounts(p1, false).finalAmount + getDiscounts(p2, true).finalAmount;\n      const statusValue = buildStatusOptionValue(p1, true);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: total, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-paar\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-paar\", false);\n    }\n  }\n  function validateLangform() {\n    const ok = !!state.commLang && !!state.form && state.form !== \"gruppe\";\n    setNextEnabled(\"sw-btn-langform-next\", ok);\n  }\n  function validateDetailsSolo() {\n    const ok = !!$(\"sw-solo-status\").value;\n    setNextEnabled(\"sw-btn-details-solo-next\", ok);\n    return ok;\n  }\n  function validateDetailsPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const emailOk = s => \/\\S+@\\S+\\.\\S+\/.test(s || \"\");\n    const ok = !!(p1.vorname && p1.vorname.trim()) && !!(p1.nachname && p1.nachname.trim()) && emailOk(p1.email) &&\n               !!(p2.vorname && p2.vorname.trim()) && !!(p2.nachname && p2.nachname.trim()) && emailOk(p2.email);\n    setNextEnabled(\"sw-btn-details-paar-next\", ok);\n    return ok;\n  }\n  function bindNameFields(key) {\n    [\"vorname\",\"nachname\",\"email\"].forEach(f => {\n      $(`sw-${key}-${f}`).addEventListener(\"input\", e => {\n        getPerson(key)[f] = e.target.value;\n        validateDetailsPaar();\n      });\n    });\n  }\n  $(\"sw-btn-welcome-next\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-country-back\").addEventListener(\"click\", () => showStep(1));\n  $(\"sw-btn-country-next\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-country-search\").addEventListener(\"input\",  e => renderCountryList(e.target.value));\n  $(\"sw-country-search\").addEventListener(\"focus\",  () => renderCountryList($(\"sw-country-search\").value));\n  shadow.addEventListener(\"click\", e => {\n    if (!e.target.closest(\"#sw-country-list\") && !e.target.closest(\"#sw-country-search\")) {\n      $(\"sw-country-list\").innerHTML = \"\";\n    }\n  });\n  $(\"sw-commLang\").addEventListener(\"change\", e => {\n    state.commLang = e.target.value;\n    validateLangform();\n    updateAppOnlyUI();\n    refreshSummary();\n  });\n  shadow.querySelectorAll(\".sw-choice-card\").forEach(card => {\n    card.addEventListener(\"click\", () => {\n      state.form = card.dataset.form;\n      shadow.querySelectorAll(\".sw-choice-card\").forEach(c => c.classList.toggle(\"active\", c === card));\n      const isGruppe = state.form === \"gruppe\";\n      $(\"sw-gruppe-note\").style.display = isGruppe ? \"block\" : \"none\";\n      $(\"sw-btn-langform-next\").style.display   = isGruppe ? \"none\" : \"inline-block\";\n      $(\"sw-btn-gruppe-redirect\").style.display = isGruppe ? \"inline-block\" : \"none\";\n      clearErrorIn(\"sw-error-langform\");\n      validateLangform();\n    });\n  });\n  $(\"sw-btn-gruppe-redirect\").addEventListener(\"click\", () => { window.location.href = getGroupRedirectUrl(); });\n  $(\"sw-btn-langform-back\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-langform-next\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-details-solo-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-solo-status\").addEventListener(\"change\", e => {\n    const val = e.target.value;\n    const person = state.persons.solo;\n    person.statusType  = val;\n    person.wiederholer = val === \"wiederholer\";\n    clearErrorIn(\"sw-error-details-solo\");\n    validateDetailsSolo();\n  });\n  $(\"sw-btn-details-solo-next\").addEventListener(\"click\", () => {\n    if (validateDetailsSolo()) { applyRangeForForm(); showStep(5); }\n    else showErrorIn(\"sw-error-details-solo\", \"Effettua prima una selezione.\");\n  });\n  $(\"sw-btn-details-paar-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-btn-details-paar-next\").addEventListener(\"click\", () => {\n    if (validateDetailsPaar()) { applyRangeForForm(); showStep(5); }\n  });\n  $(\"sw-btn-amount-solo-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-amount-paar-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-checkout-solo\").addEventListener(\"click\", goCheckoutSolo);\n  $(\"sw-btn-checkout-paar\").addEventListener(\"click\", goCheckoutPaar);\n  bindNameFields(\"p1\");\n  bindNameFields(\"p2\");\n  wireAmountControl(\"solo\");\n  wireAmountControl(\"p1\");\n  wireAmountControl(\"p2\");\n  showStep(1);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f4a3a44 e-flex e-con-boxed e-con e-parent\" data-id=\"f4a3a44\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7b06e23 elementor-widget elementor-widget-html\" data-id=\"7b06e23\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Tinos:ital,wght@0,400;0,700;1,400&display=swap\" rel=\"stylesheet\">\n<style>\n  .ecwid-ProductBrowser,\n  .ecwid-productbrowser,\n  div[id^=\"my-store\"],\n  .ecwid:not(#sw-host-fr) {\n    visibility: hidden !important;\n    height: 0 !important;\n    max-height: 0 !important;\n    overflow: hidden !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    position: absolute !important;\n    pointer-events: none !important;\n  }\n<\/style>\n<div id=\"sw-overlay-fr\" style=\"display:none; position:fixed; inset:0; background:rgba(245,250,246,0.92); z-index:99999; flex-direction:column; align-items:center; justify-content:center; gap:20px;\">\n  <div style=\"width:52px; height:52px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:sw-spin-fr 0.8s linear infinite;\"><\/div>\n  <div style=\"font-family:'Tinos',Georgia,serif; font-size:22px; color:#27703F;\">Chargement du paiement\u2026<\/div>\n<\/div>\n<style>\n  @keyframes sw-spin-fr { to { transform: rotate(360deg); } }\n<\/style>\n<div id=\"sw-host-fr\"><\/div>\n<script>\n(function () {\n\n  \/\/ \u2500\u2500 Sprach-Guard: Skript bricht sofort ab, wenn die URL nicht zu FR passt \u2500\u2500\n  const _pathMatch = window.location.pathname.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\nconst _pageLang = _pathMatch ? _pathMatch[1] : \"de\";\nif (_pageLang !== \"fr\") { \n  document.getElementById(\"sw-host-fr\")?.remove();\n  document.getElementById(\"sw-overlay-fr\")?.remove();\n  return; \n}\n\n  const OVERLAY_ID    = \"sw-overlay-fr\";\n  const SHOP_CART_URL = \"https:\/\/spiritual-activity.org\/fr\/store\/cart\";\n  const N8N_WEBHOOK_URL = \"https:\/\/n8n.spiritual-activity.org\/webhook\/registration-be\";\n  function getGroupRedirectUrl() {\n    const path = window.location.pathname;\n    \/\/ Erkennt Sprachpraefixe wie \/en\/, \/es\/, \/it\/, \/ru\/ am Anfang des Pfads.\n    \/\/ Deutsch ist die Standardsprache ohne Praefix.\n    const match = path.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n    const langPrefix = (match && match[1] !== \"de\") ? \"\/\" + match[1] : \"\";\n    return \"https:\/\/spiritual-activity.org\" + langPrefix + \"\/gruppen-anmeldung\";\n  }\n  const PRODUCTS = {\n    cat1: 864374030,\n    cat2: 844860366,\n    cat3: 844907264,\n    cat4: 844907265\n  };\n\n  \/\/ Versandfreie Digital-Produkte fuer alle Faelle, in denen nichts verschickt\n  \/\/ wird: rein digitale Teilnahme und Wiederholer (kein neues Kartenset).\n  const PRODUCTS_APPONLY = {\n    cat1: 863272251,\n    cat2: 863265753,\n    cat3: 863272252,\n    cat4: 863265754\n  };\n  const RANGES = {\n    cat1: { min: 160, max: 800 },\n    cat2: { min: 105, max: 700 },\n    cat3: { min:  75, max: 600 },\n    cat4: { min:  45, max: 500 }\n  };\n  const ORIENTIERUNG = {\n    cat1: { reduced: 160, base: 360, support: 580 },\n    cat2: { reduced: 105, base: 240, support: 460 },\n    cat3: { reduced:  75, base: 160, support: 340 },\n    cat4: { reduced:  45, base: 105, support: 220 }\n  };\n  const DISCOUNT_WIEDERHOLER = 0.30;\n  const DISCOUNT_SCHUELER    = 0.50;\n  const DISCOUNT_STUDENT     = 0.25;\n  const DISCOUNT_PAAR_P2     = 0.50;\n  const DISCOUNT_APP_FIXED   = 35;\n  \/\/ Versandpauschale ausserhalb EU+CH. Ecwid kassiert sie, der Wizard rechnet sie in die Anzeige-Summe ein.\n  const SHIPPING_COST   = 15;\n  \/\/ Sprachschluessel bleiben deutsch \u2013 sie sind die Werte im Ecwid-Shop.\n  const APP_ONLY_LANGS = new Set([\"Arabisch\",\"Farsi\",\"Ukrainisch\",\"Bulgarisch\",\"Franz\u00f6sisch\"]);\n  const APP_ONLY_CATEGORY_EXCEPTION_LANG = { CN: \"Chinesisch\" };\n  const EU_PLUS_CH = new Set([\n    \"AT\",\"BE\",\"BG\",\"CY\",\"CZ\",\"DE\",\"DK\",\"EE\",\"ES\",\"FI\",\"FR\",\"GR\",\"HR\",\n    \"HU\",\"IE\",\"IT\",\"LT\",\"LU\",\"LV\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SE\",\"SI\",\"SK\",\"CH\"\n  ]);\n  \/\/ Ersetzt den Platzhalter in Klammern (z.B. [Code], [X], [\ucf54\ub4dc]) durch den Wert\n  function fillPlaceholder(text, value) {\n    return String(text).replace(\/[\\[\uff3b][^\\]\uff3d]*[\\]\uff3d]\/, value);\n  }\n  function needsShipping(countryCode) {\n    return countryCode && !EU_PLUS_CH.has(countryCode);\n  }\n  \/\/ \u2500\u2500 Uebersetzte Texte \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const TXT = {\n      \"catBadge\": \"Cat. \",\n      \"catLabels\": {\n          \"cat1\": \"Cat\u00e9gorie de prix 1\",\n          \"cat2\": \"Cat\u00e9gorie de prix 2\",\n          \"cat3\": \"Cat\u00e9gorie de prix 3\",\n          \"cat4\": \"Cat\u00e9gorie de prix 4\"\n      },\n      \"catSuffixDigital\": \"\u2013 Participation num\u00e9rique uniquement\",\n      \"catSuffixException\": \"\u2013 Exp\u00e9dition uniquement avec la langue de participation {X}, sinon participation num\u00e9rique uniquement\",\n      \"noCountry\": \"Aucun pays trouv\u00e9\",\n      \"markerReduced\": \"Contribution r\u00e9duite\",\n      \"markerBase\": \"Contribution de base\",\n      \"markerSupport\": \"Contribution de soutien\",\n      \"hintLong\": \"Ici, vous pouvez choisir la contribution qui vous convient. Avec une contribution de soutien, vous permettez \u00e0 des personnes disposant de faibles moyens financiers de participer, et vous nous aidez \u00e0 faire rayonner davantage le projet dans le monde.\",\n      \"hintPaar\": \"Chaque personne choisit sa propre contribution. La personne 2 b\u00e9n\u00e9ficie automatiquement d'une r\u00e9duction de 50 %.\",\n      \"person1\": \"Personne 1\",\n      \"person2\": \"Personne 2\",\n      \"p2Badge\": \"(\u221250 %)\",\n      \"discWiederholer\": \"Participant(e) r\u00e9p\u00e9tant(e)\",\n      \"discSchueler\": \"\u00c9l\u00e8ves\",\n      \"discStudent\": \"Formation\/\u00e9tudes\",\n      \"discP2\": \"R\u00e9duction personne 2\",\n      \"discApp\": \"Participation num\u00e9rique\",\n      \"reasonRegion\": \"L'exp\u00e9dition n'est pas possible dans votre r\u00e9gion. Vous participez en num\u00e9rique. La r\u00e9duction sera automatiquement prise en compte dans le r\u00e9capitulatif.\",\n      \"reasonRussian\": \"Pour les russophones hors de Russie, seule une version num\u00e9rique est disponible. La r\u00e9duction sera automatiquement prise en compte dans le r\u00e9capitulatif.\",\n      \"reasonLanguage\": \"Seule une version num\u00e9rique est disponible dans cette langue. La r\u00e9duction sera automatiquement prise en compte dans le r\u00e9capitulatif.\",\n      \"reasonException\": \"L'exp\u00e9dition dans votre r\u00e9gion n'est possible qu'avec la langue de participation {X}. Vous participez en num\u00e9rique. La r\u00e9duction sera automatiquement prise en compte dans le r\u00e9capitulatif.\",\n      \"thanksTitle\": \"Merci beaucoup !\",\n      \"thanksLine1\": \"Chargement du paiement\u2026\",\n      \"thanksLine2\": \"Vous allez \u00eatre redirig\u00e9(e) sous peu\u2026\",\n      \"preparing\": \"Pr\u00e9paration en cours\u2026\",\n      \"errSelectFirst\": \"Veuillez d'abord faire un choix.\",\n      \"errPaarFields\": \"Veuillez revenir en arri\u00e8re et remplir tous les champs pour les deux personnes.\",\n      \"errCountry\": \"Veuillez d'abord s\u00e9lectionner un pays.\",\n      \"errLang\": \"Veuillez s\u00e9lectionner la langue de participation.\",\n      \"errNetwork\": \"Les donn\u00e9es n'ont pas pu \u00eatre transmises. Veuillez v\u00e9rifier votre connexion internet.\",\n      \"errSubmit\": \"\u00c9chec de l'envoi (erreur [Code]). Veuillez r\u00e9essayer.\",\n      \"errProduct\": \"Le produit n'a pas pu \u00eatre ajout\u00e9\",\n      \"errEcwid\": \"API du panier Ecwid indisponible apr\u00e8s [X] s.\"\n  };\n  \/\/ Anzeigename der Teilnahmesprache (Schluessel = Ecwid-Wert, deutsch)\n  const LANG_DISPLAY = {\n      \"Deutsch\": \"Allemand\",\n      \"Englisch\": \"Anglais\",\n      \"Spanisch\": \"Espagnol\",\n      \"Franz\u00f6sisch\": \"Fran\u00e7ais\",\n      \"Italienisch\": \"Italien\",\n      \"Portugiesisch\": \"Portugais\",\n      \"Arabisch\": \"Arabe\",\n      \"Hebr\u00e4isch\": \"H\u00e9breu\",\n      \"Farsi\": \"Farsi\",\n      \"Georgisch\": \"G\u00e9orgien\",\n      \"Ukrainisch\": \"Ukrainien\",\n      \"Niederl\u00e4ndisch\": \"N\u00e9erlandais\",\n      \"T\u00fcrkisch\": \"Turc\",\n      \"Russisch\": \"Russe\",\n      \"Chinesisch\": \"Chinois\",\n      \"Japanisch\": \"Japonais\",\n      \"Koreanisch\": \"Cor\u00e9en\"\n  };\n  \/\/ Feste Laendernamen in der Landessprache (aus CLDR), damit die Liste in\n  \/\/ jedem Browser identisch ist \u2013 unabhaengig von der Intl-Datenlage.\n  const COUNTRY_NAMES = {\n      \"AD\": \"Andorre\",\n      \"AE\": \"\u00c9mirats arabes unis\",\n      \"AF\": \"Afghanistan\",\n      \"AG\": \"Antigua-et-Barbuda\",\n      \"AL\": \"Albanie\",\n      \"AM\": \"Arm\u00e9nie\",\n      \"AO\": \"Angola\",\n      \"AR\": \"Argentine\",\n      \"AT\": \"Autriche\",\n      \"AU\": \"Australie\",\n      \"AW\": \"Aruba\",\n      \"AZ\": \"Azerba\u00efdjan\",\n      \"BA\": \"Bosnie-Herz\u00e9govine\",\n      \"BB\": \"Barbade\",\n      \"BD\": \"Bangladesh\",\n      \"BE\": \"Belgique\",\n      \"BF\": \"Burkina Faso\",\n      \"BG\": \"Bulgarie\",\n      \"BH\": \"Bahre\u00efn\",\n      \"BI\": \"Burundi\",\n      \"BJ\": \"B\u00e9nin\",\n      \"BN\": \"Brunei\",\n      \"BO\": \"Bolivie\",\n      \"BR\": \"Br\u00e9sil\",\n      \"BS\": \"Bahamas\",\n      \"BT\": \"Bhoutan\",\n      \"BW\": \"Botswana\",\n      \"BY\": \"Bi\u00e9lorussie\",\n      \"BZ\": \"Belize\",\n      \"CA\": \"Canada\",\n      \"CD\": \"Congo-Kinshasa\",\n      \"CF\": \"R\u00e9publique centrafricaine\",\n      \"CG\": \"Congo-Brazzaville\",\n      \"CH\": \"Suisse\",\n      \"CI\": \"C\u00f4te d\u2019Ivoire\",\n      \"CL\": \"Chili\",\n      \"CM\": \"Cameroun\",\n      \"CN\": \"Chine\",\n      \"CO\": \"Colombie\",\n      \"CR\": \"Costa Rica\",\n      \"CV\": \"Cap-Vert\",\n      \"CY\": \"Chypre\",\n      \"CZ\": \"Tch\u00e9quie\",\n      \"DE\": \"Allemagne\",\n      \"DJ\": \"Djibouti\",\n      \"DK\": \"Danemark\",\n      \"DM\": \"Dominique\",\n      \"DO\": \"R\u00e9publique dominicaine\",\n      \"DZ\": \"Alg\u00e9rie\",\n      \"EC\": \"\u00c9quateur\",\n      \"EE\": \"Estonie\",\n      \"EG\": \"\u00c9gypte\",\n      \"ES\": \"Espagne\",\n      \"ET\": \"\u00c9thiopie\",\n      \"FI\": \"Finlande\",\n      \"FJ\": \"Fidji\",\n      \"FM\": \"Micron\u00e9sie\",\n      \"FR\": \"France\",\n      \"GA\": \"Gabon\",\n      \"GB\": \"Royaume-Uni\",\n      \"GB-SCT\": \"\u00c9cosse\",\n      \"GD\": \"Grenade\",\n      \"GE\": \"G\u00e9orgie\",\n      \"GH\": \"Ghana\",\n      \"GM\": \"Gambie\",\n      \"GN\": \"Guin\u00e9e\",\n      \"GQ\": \"Guin\u00e9e \u00e9quatoriale\",\n      \"GR\": \"Gr\u00e8ce\",\n      \"GT\": \"Guatemala\",\n      \"GW\": \"Guin\u00e9e-Bissau\",\n      \"GY\": \"Guyana\",\n      \"HK\": \"Hong Kong\",\n      \"HN\": \"Honduras\",\n      \"HR\": \"Croatie\",\n      \"HT\": \"Ha\u00efti\",\n      \"HU\": \"Hongrie\",\n      \"ID\": \"Indon\u00e9sie\",\n      \"IE\": \"Irlande\",\n      \"IL\": \"Isra\u00ebl\",\n      \"IN\": \"Inde\",\n      \"IQ\": \"Irak\",\n      \"IR\": \"Iran\",\n      \"IS\": \"Islande\",\n      \"IT\": \"Italie\",\n      \"JM\": \"Jama\u00efque\",\n      \"JO\": \"Jordanie\",\n      \"JP\": \"Japon\",\n      \"KE\": \"Kenya\",\n      \"KG\": \"Kirghizstan\",\n      \"KH\": \"Cambodge\",\n      \"KI\": \"Kiribati\",\n      \"KM\": \"Comores\",\n      \"KN\": \"Saint-Christophe-et-Ni\u00e9v\u00e8s\",\n      \"KR\": \"Cor\u00e9e du Sud\",\n      \"KW\": \"Kowe\u00eft\",\n      \"KZ\": \"Kazakhstan\",\n      \"LA\": \"Laos\",\n      \"LB\": \"Liban\",\n      \"LC\": \"Sainte-Lucie\",\n      \"LI\": \"Liechtenstein\",\n      \"LK\": \"Sri Lanka\",\n      \"LR\": \"Liberia\",\n      \"LS\": \"Lesotho\",\n      \"LT\": \"Lituanie\",\n      \"LU\": \"Luxembourg\",\n      \"LV\": \"Lettonie\",\n      \"LY\": \"Libye\",\n      \"MA\": \"Maroc\",\n      \"MD\": \"Moldavie\",\n      \"ME\": \"Mont\u00e9n\u00e9gro\",\n      \"MG\": \"Madagascar\",\n      \"MH\": \"\u00celes Marshall\",\n      \"MK\": \"Mac\u00e9doine du Nord\",\n      \"ML\": \"Mali\",\n      \"MM\": \"Myanmar (Birmanie)\",\n      \"MN\": \"Mongolie\",\n      \"MO\": \"Macao\",\n      \"MR\": \"Mauritanie\",\n      \"MT\": \"Malte\",\n      \"MU\": \"Maurice\",\n      \"MV\": \"Maldives\",\n      \"MW\": \"Malawi\",\n      \"MX\": \"Mexique\",\n      \"MY\": \"Malaisie\",\n      \"MZ\": \"Mozambique\",\n      \"NA\": \"Namibie\",\n      \"NE\": \"Niger\",\n      \"NG\": \"Nigeria\",\n      \"NI\": \"Nicaragua\",\n      \"NL\": \"Pays-Bas\",\n      \"NO\": \"Norv\u00e8ge\",\n      \"NP\": \"N\u00e9pal\",\n      \"NR\": \"Nauru\",\n      \"NZ\": \"Nouvelle-Z\u00e9lande\",\n      \"OM\": \"Oman\",\n      \"PA\": \"Panama\",\n      \"PE\": \"P\u00e9rou\",\n      \"PG\": \"Papouasie-Nouvelle-Guin\u00e9e\",\n      \"PH\": \"Philippines\",\n      \"PK\": \"Pakistan\",\n      \"PL\": \"Pologne\",\n      \"PR\": \"Porto Rico\",\n      \"PS\": \"Territoires palestiniens\",\n      \"PT\": \"Portugal\",\n      \"PW\": \"Palaos\",\n      \"PY\": \"Paraguay\",\n      \"QA\": \"Qatar\",\n      \"RO\": \"Roumanie\",\n      \"RS\": \"Serbie\",\n      \"RU\": \"Russie\",\n      \"RW\": \"Rwanda\",\n      \"SA\": \"Arabie saoudite\",\n      \"SB\": \"\u00celes Salomon\",\n      \"SC\": \"Seychelles\",\n      \"SD\": \"Soudan\",\n      \"SE\": \"Su\u00e8de\",\n      \"SG\": \"Singapour\",\n      \"SI\": \"Slov\u00e9nie\",\n      \"SK\": \"Slovaquie\",\n      \"SL\": \"Sierra Leone\",\n      \"SM\": \"Saint-Marin\",\n      \"SN\": \"S\u00e9n\u00e9gal\",\n      \"SO\": \"Somalie\",\n      \"SR\": \"Suriname\",\n      \"SS\": \"Soudan du Sud\",\n      \"ST\": \"Sao Tom\u00e9-et-Principe\",\n      \"SV\": \"Salvador\",\n      \"SZ\": \"Eswatini\",\n      \"TD\": \"Tchad\",\n      \"TG\": \"Togo\",\n      \"TH\": \"Tha\u00eflande\",\n      \"TJ\": \"Tadjikistan\",\n      \"TL\": \"Timor oriental\",\n      \"TM\": \"Turkm\u00e9nistan\",\n      \"TN\": \"Tunisie\",\n      \"TO\": \"Tonga\",\n      \"TR\": \"Turquie\",\n      \"TT\": \"Trinit\u00e9-et-Tobago\",\n      \"TV\": \"Tuvalu\",\n      \"TW\": \"Ta\u00efwan\",\n      \"TZ\": \"Tanzanie\",\n      \"UA\": \"Ukraine\",\n      \"UG\": \"Ouganda\",\n      \"US\": \"\u00c9tats-Unis\",\n      \"UY\": \"Uruguay\",\n      \"UZ\": \"Ouzb\u00e9kistan\",\n      \"VC\": \"Saint-Vincent-et-les Grenadines\",\n      \"VE\": \"Venezuela\",\n      \"VN\": \"Vi\u00eat Nam\",\n      \"VU\": \"Vanuatu\",\n      \"WS\": \"Samoa\",\n      \"XK\": \"Kosovo\",\n      \"YE\": \"Y\u00e9men\",\n      \"ZA\": \"Afrique du Sud\",\n      \"ZM\": \"Zambie\",\n      \"ZW\": \"Zimbabwe\"\n  };\n  \/\/ \u2500\u2500 Zusaetzliche Suchbegriffe (Aliasse) je Land \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Beeinflusst NUR die Suche, nicht den angezeigten Namen. Alles klein schreiben.\n  const COUNTRY_SEARCH_ALIASES = {\n      \"US\": [\"\u00e9tats-unis\", \"etats-unis\", \"etats unis\", \"\u00e9tats-unis d'am\u00e9rique\", \"usa\", \"am\u00e9rique\", \"amerique\", \"united states\", \"united states of america\", \"america\"],\n      \"GB\": [\"royaume-uni\", \"royaume uni\", \"grande-bretagne\", \"grande bretagne\", \"angleterre\", \"uk\", \"united kingdom\", \"england\", \"great britain\", \"britain\"],\n      \"GB-SCT\": [\"\u00e9cosse\", \"ecosse\", \"scotland\"],\n      \"AE\": [\"\u00e9mirats arabes unis\", \"emirats arabes unis\", \"\u00e9mirats\", \"emirats\", \"uae\", \"united arab emirates\", \"emirates\", \"dubai\"],\n      \"KR\": [\"cor\u00e9e du sud\", \"coree du sud\", \"cor\u00e9e\", \"coree\", \"south korea\", \"korea\"],\n      \"NL\": [\"pays-bas\", \"pays bas\", \"hollande\", \"netherlands\", \"holland\"],\n      \"CH\": [\"suisse\", \"switzerland\", \"schweiz\"],\n      \"DE\": [\"allemagne\", \"germany\", \"deutschland\"],\n      \"AT\": [\"autriche\", \"austria\"],\n      \"BE\": [\"belgique\", \"belgium\"],\n      \"CZ\": [\"tch\u00e9quie\", \"tchequie\", \"r\u00e9publique tch\u00e8que\", \"republique tcheque\", \"czechia\", \"czech republic\"],\n      \"TR\": [\"turquie\", \"turkey\", \"t\u00fcrkiye\", \"turkiye\"],\n      \"CI\": [\"c\u00f4te d'ivoire\", \"cote d'ivoire\", \"cote divoire\", \"ivory coast\"],\n      \"MM\": [\"myanmar\", \"birmanie\", \"burma\"],\n      \"TL\": [\"timor oriental\", \"timor-leste\", \"east timor\"],\n      \"SZ\": [\"eswatini\", \"swaziland\"],\n      \"MK\": [\"mac\u00e9doine du nord\", \"macedoine du nord\", \"mac\u00e9doine\", \"macedoine\", \"macedonia\", \"north macedonia\"],\n      \"BY\": [\"bi\u00e9lorussie\", \"bielorussie\", \"belarus\"],\n      \"MD\": [\"moldavie\", \"moldova\"],\n      \"MA\": [\"maroc\", \"morocco\"],\n      \"EG\": [\"\u00e9gypte\", \"egypte\", \"egypt\"],\n      \"GR\": [\"gr\u00e8ce\", \"grece\", \"greece\"],\n      \"IT\": [\"italie\", \"italy\", \"italia\"],\n      \"ES\": [\"espagne\", \"spain\"],\n      \"FR\": [\"france\"],\n      \"PL\": [\"pologne\", \"poland\"],\n      \"RU\": [\"russie\", \"russia\", \"russian federation\"],\n      \"CN\": [\"chine\", \"china\"],\n      \"JP\": [\"japon\", \"japan\"],\n      \"IN\": [\"inde\", \"india\"],\n      \"BR\": [\"br\u00e9sil\", \"bresil\", \"brazil\"],\n      \"MX\": [\"mexique\", \"mexico\"],\n      \"CA\": [\"canada\"],\n      \"AU\": [\"australie\", \"australia\"],\n      \"NZ\": [\"nouvelle-z\u00e9lande\", \"nouvelle zelande\", \"new zealand\"],\n      \"ZA\": [\"afrique du sud\", \"south africa\"],\n      \"VN\": [\"vi\u00eat nam\", \"viet nam\", \"vietnam\"],\n      \"LU\": [\"luxembourg\"],\n      \"PT\": [\"portugal\"],\n      \"KP\": [\"north korea\"],\n      \"CV\": [\"cabo verde\", \"cape verde\"],\n      \"CD\": [\"dr congo\", \"drc\", \"congo kinshasa\"],\n      \"CG\": [\"congo brazzaville\"],\n      \"VA\": [\"vatican\", \"holy see\"],\n      \"LA\": [\"laos\"],\n      \"IR\": [\"iran\", \"persia\"],\n      \"MO\": [\"macau\", \"macao\"],\n      \"HK\": [\"hong kong\"],\n      \"TW\": [\"taiwan\"],\n      \"GE\": [\"georgia\"]\n  };\n  const COUNTRIES = {\n    cat1: [\"CY\",\"CA\",\"FR\",\"FI\",\"BH\",\"AU\",\"AD\",\"SE\",\"DE\",\"SA\",\"AT\",\"BE\",\"HK\",\"MT\",\"IS\",\"SM\",\"NL\",\"DK\",\"TW\",\"AE\",\"US\",\"BN\",\"CH\",\"NO\",\"GY\",\"QA\",\"MO\",\"IE\",\"LU\",\"SG\",\"LI\",\"GB\",\"GB-SCT\"],\n    cat2: [\"KR\",\"ME\",\"CL\",\"TT\",\"MV\",\"UY\",\"BS\",\"OM\",\"SC\",\"MY\",\"PA\",\"TR\",\"LV\",\"GR\",\"KZ\",\"SK\",\"HU\",\"RU\",\"RO\",\"EE\",\"AW\",\"PT\",\"PR\",\"HR\",\"KW\",\"JP\",\"NZ\",\"PL\",\"IL\",\"ES\",\"LT\",\"SI\",\"CZ\",\"IT\"],\n    cat3: [\"BZ\",\"TN\",\"GT\",\"IQ\",\"ZA\",\"FJ\",\"EC\",\"LY\",\"ID\",\"VN\",\"BT\",\"DZ\",\"PE\",\"PW\",\"BW\",\"DM\",\"PY\",\"MD\",\"GQ\",\"MN\",\"VC\",\"IR\",\"GD\",\"EG\",\"CO\",\"SR\",\"TM\",\"BA\",\"BB\",\"BR\",\"AL\",\"AM\",\"GA\",\"MX\",\"AZ\",\"TH\",\"LC\",\"CN\",\"MK\",\"DO\",\"AG\",\"AR\",\"GE\",\"CR\",\"MU\",\"RS\",\"BY\",\"KN\",\"XK\",\"BG\"],\n    cat4: [\"UA\",\"BI\",\"SS\",\"CF\",\"YE\",\"MZ\",\"MW\",\"SO\",\"CD\",\"LR\",\"MG\",\"NE\",\"AF\",\"SD\",\"SB\",\"ML\",\"HT\",\"VU\",\"BF\",\"LS\",\"TD\",\"GW\",\"TG\",\"GM\",\"KI\",\"SL\",\"PG\",\"UG\",\"KM\",\"PS\",\"RW\",\"TZ\",\"ET\",\"ZM\",\"FM\",\"BJ\",\"GN\",\"TL\",\"MM\",\"SN\",\"CM\",\"TJ\",\"TV\",\"NP\",\"CG\",\"ST\",\"PK\",\"KE\",\"ZW\",\"MH\",\"HN\",\"TO\",\"CI\",\"WS\",\"GH\",\"VE\",\"KH\",\"MR\",\"KG\",\"NI\",\"NG\",\"DJ\",\"AO\",\"LA\",\"BD\",\"BO\",\"MA\",\"JO\",\"LB\",\"NR\",\"IN\",\"NA\",\"CV\",\"UZ\",\"PH\",\"SZ\",\"JM\",\"SV\",\"LK\"]\n  };\n  \/\/ \u2500\u2500 Ecwid-Optionsnamen und -werte: bleiben exakt deutsch wie im Shop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const OPT_COMM_LANG = \"In welcher Sprache nimmst Du teil?\";\n  const OPT_STATUS    = \"Trifft etwas davon auf Dich zu?\";\n  const STATUS_LABEL = {\n    paar:        \"Zu zweit (gleicher Haushalt)\",\n    schueler:    \"Sch\u00fcler:innen\",\n    student:     \"Student\",\n    wiederholer: \"Wiederholer\",\n    apponly:     \"Digitale Teilnahme (App)\"\n  };\n  \/\/ \u2500\u2500 Shadow DOM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const host = document.getElementById(\"sw-host-fr\");\n  const shadow = host.attachShadow({ mode: \"open\" });\n  const styleEl = document.createElement(\"style\");\n  styleEl.textContent = `\n    :host {\n      display: block;\n      --bg:           #F5FAF6;\n      --card:         #FFFFFF;\n      --ink:          #0C1E14;\n      --ink-muted:    #27703F;\n      --accent:       #0C1E14;\n      --accent-light: #E6F2E8;\n      --border:       #C8E0CE;\n      --radius:       16px;\n      --radius-sm:    10px;\n    }\n    @keyframes wiz-spin { to { transform: rotate(360deg); } }\n    .sw-root {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 20px; font-weight: 400; color: var(--ink);\n      background: var(--bg); padding: 32px 20px;\n      display: flex; align-items: flex-start; justify-content: center;\n    }\n    .sw-card {\n      background: var(--card); border: 1px solid var(--border);\n      border-radius: 24px; padding: 36px 32px;\n      width: 100%; max-width: 780px;\n      box-shadow: 0 4px 24px rgba(12,30,20,0.08); box-sizing: border-box;\n    }\n    @media (max-width: 480px) {\n      .sw-root { padding: 16px 10px; }\n      .sw-card { padding: 24px 16px; border-radius: 16px; }\n    }\n    .sw-progress { display: flex; gap: 8px; margin-bottom: 32px; }\n    .sw-progress-step { flex: 1; height: 4px; background: var(--border); border-radius: 999px; transition: background 0.35s; }\n    .sw-progress-step.active { background: var(--accent); }\n    .sw-progress-step.done   { background: var(--accent); opacity: 0.4; }\n    .sw-step-label { font-size: 12px; font-weight: 400; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: 10px; }\n    .sw-heading { font-size: 26px; font-weight: 500; line-height: 1.2; margin: 0 0 6px; color: var(--accent); letter-spacing: 0.01em; }\n    .sw-subtext { font-size: 18px; font-weight: 400; color: var(--ink-muted); margin: 0 0 28px; line-height: 1.6; }\n    .sw-label { display: block; font-size: 18px; font-weight: 700; margin-bottom: 6px; color: var(--ink); }\n    .sw-select, .sw-text-input {\n      width: 100%; padding: 13px 15px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg);\n      font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-select {\n      appearance: none;\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2327703F' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: right 15px center;\n      cursor: pointer;\n    }\n    .sw-select:focus, .sw-text-input:focus {\n      outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1);\n    }\n    .sw-text-input { margin-bottom: 14px; }\n    .sw-redirect { display: none; margin-top: 12px; padding: 18px 20px; border-radius: var(--radius-sm); background: #FFF8F0; border: 1px solid rgba(180,80,0,0.2); font-size: 17px; line-height: 1.8; color: var(--ink); }\n    .sw-redirect strong { display: block; margin-bottom: 8px; font-size: 17px; color: #7A3500; }\n    .sw-redirect a { color: #27703F; text-decoration: underline; }\n    .sw-infobox {\n      margin-top: 12px; padding: 15px 17px; border-radius: var(--radius-sm);\n      background: var(--accent-light); border: 1px solid rgba(12,30,20,0.15);\n      font-size: 18px; font-weight: 400; line-height: 1.5;\n    }\n    .sw-infobox-title {\n      font-weight: 700; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase;\n      color: var(--accent); margin-bottom: 3px;\n    }\n    .sw-divider { border: 0; border-top: 1px solid var(--border); margin: 30px 0 24px; }\n    .sw-choice-row { display: flex; gap: 10px; flex-wrap: wrap; }\n    .sw-choice-card {\n      flex: 1; min-width: 150px; padding: 16px 14px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      text-align: center; cursor: pointer; font-size: 17px; line-height: 1.3;\n      transition: all 0.15s; background: var(--bg); box-sizing: border-box;\n    }\n    .sw-choice-card:hover { border-color: var(--accent); }\n    .sw-choice-card.active { background: var(--accent-light); border-color: var(--accent); font-weight: 700; color: var(--accent); }\n    @media (max-width: 480px) { .sw-choice-card { min-width: 100%; } }\n    .sw-person-block { margin-bottom: 8px; }\n    .sw-person-title { font-weight: 700; font-size: 21px; color: var(--accent); margin-bottom: 16px; }\n    .sw-field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 0; }\n    @media (max-width: 480px) { .sw-field-grid { grid-template-columns: 1fr; } }\n    .sw-range-header { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 22px; }\n    .sw-range-header-label { font-weight: 700; font-size: 18px; }\n    .sw-amount-display { display: flex; align-items: baseline; gap: 3px; }\n    .sw-amount-display span { font-size: 18px; font-weight: 400; }\n    .sw-amount-input {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 36px; font-weight: 700; color: var(--ink);\n      border: 2px solid var(--border); background: var(--bg);\n      text-align: right; width: 132px; padding: 4px 12px;\n      outline: none; border-radius: var(--radius-sm);\n      transition: background 0.15s, color 0.15s, border-color 0.15s, box-shadow 0.15s;\n    }\n    .sw-amount-input:hover { border-color: var(--accent); background: var(--accent-light); }\n    .sw-amount-input:focus { border-color: var(--accent); background: var(--accent-light); color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    input[type=range].sw-range {\n      -webkit-appearance: none; width: 100%; height: 6px;\n      border-radius: 999px; background: var(--border); outline: none; cursor: pointer;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb {\n      -webkit-appearance: none; width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35);\n      cursor: pointer; transition: transform 0.15s, box-shadow 0.15s;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb:hover { transform: scale(1.08); box-shadow: 0 0 0 9px rgba(12,30,20,0.18), 0 3px 12px rgba(12,30,20,0.4); }\n    input[type=range].sw-range::-webkit-slider-thumb:active { transform: scale(1.12); }\n    input[type=range].sw-range::-moz-range-thumb {\n      width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      border: none; box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); cursor: pointer;\n    }\n    input[type=range].sw-range.sw-pulse::-webkit-slider-thumb { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    input[type=range].sw-range.sw-pulse::-moz-range-thumb    { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    @keyframes sw-thumb-pulse {\n      0%, 100% { box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); }\n      50%      { box-shadow: 0 0 0 15px rgba(12,30,20,0.05), 0 3px 10px rgba(12,30,20,0.35); }\n    }\n    .sw-range-wrap { position: relative; }\n    .sw-markers { position: relative; height: 56px; margin-bottom: 8px; margin-left: 18px; margin-right: 18px; }\n    .sw-marker {\n      position: absolute; transform: translateX(-50%);\n      display: flex; flex-direction: column; align-items: center; gap: 2px;\n      justify-content: flex-end; height: 100%; pointer-events: auto; cursor: pointer;\n    }\n    .sw-marker-tick { width: 1px; height: 10px; background: var(--border); flex-shrink: 0; }\n    .sw-marker.active .sw-marker-tick { background: var(--accent); opacity: 0.5; }\n    .sw-marker-label { font-size: 11px; font-weight: 400; color: var(--ink-muted); white-space: nowrap; line-height: 1.2; text-align: center; order: -2; }\n    .sw-marker-amount { font-size: 13px; font-weight: 700; color: var(--ink-muted); order: -1; }\n    .sw-marker.active .sw-marker-label, .sw-marker.active .sw-marker-amount { color: var(--accent); }\n    @media (max-width: 540px) {\n      .sw-markers { display: none; }\n      .sw-markers-mobile { display: flex !important; }\n    }\n    .sw-markers-mobile {\n      display: none; flex-direction: column; gap: 0;\n      margin: 12px 0 4px; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden;\n    }\n    .sw-marker-mobile {\n      display: flex; align-items: center; justify-content: space-between;\n      padding: 10px 14px; cursor: pointer; border-bottom: 1px solid var(--border);\n      transition: background 0.15s; font-family: 'Tinos', Georgia, serif;\n    }\n    .sw-marker-mobile:last-child { border-bottom: 0; }\n    .sw-marker-mobile:hover { background: var(--accent-light); }\n    .sw-marker-mobile.active { background: var(--accent-light); }\n    .sw-marker-mobile-label { font-size: 15px; font-weight: 400; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-label { color: var(--accent); font-weight: 700; }\n    .sw-marker-mobile-amount { font-size: 16px; font-weight: 700; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-amount { color: var(--accent); }\n    .sw-summary-box { padding: 18px 20px; background: var(--accent-light); border: 1px solid rgba(12,30,20,0.2); border-radius: var(--radius-sm); margin-top: 20px; }\n    .sw-summary-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; font-size: 16px; color: var(--ink); }\n    .sw-summary-row.sw-summary-discount { color: #8A1F1F; }\n    .sw-summary-row.sw-summary-total { border-top: 1px solid rgba(12,30,20,0.25); margin-top: 8px; padding-top: 12px; font-weight: 700; font-size: 22px; color: var(--accent); }\n    .sw-summary-person-label { font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-muted); margin: 14px 0 2px; }\n    .sw-summary-person-label:first-child { margin-top: 0; }\n    .sw-btn-row { display: flex; gap: 10px; margin-top: 24px; flex-wrap: wrap; }\n    .sw-btn { flex: 1; min-width: 140px; padding: 15px 17px; border-radius: var(--radius-sm); font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 700; cursor: pointer; transition: all 0.2s; border: 0; }\n    .sw-btn-primary { background: var(--accent); color: #fff; }\n    .sw-btn-primary:hover { background: #27703F; transform: translateY(-1px); }\n    .sw-btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }\n    .sw-btn-secondary { background: transparent; color: var(--ink); border: 1px solid var(--border); }\n    .sw-btn-secondary:hover { background: var(--bg); }\n    .sw-error { display: none; margin-top: 15px; padding: 13px 15px; border-radius: var(--radius-sm); background: #FFF3F3; border: 1px solid rgba(220,30,30,0.2); color: #8A1F1F; font-size: 18px; font-weight: 400; line-height: 1.5; white-space: pre-wrap; }\n    .wiz-spinner { display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.4); border-top-color: #fff; border-radius: 50%; animation: wiz-spin 0.7s linear infinite; vertical-align: middle; margin-right: 8px; }\n    .sw-country-search-wrap { position: relative; margin-bottom: 10px; }\n    .sw-country-search-icon { position: absolute; left: 18px; top: 50%; transform: translateY(-50%); color: var(--ink-muted); pointer-events: none; opacity: 0.5; }\n    .sw-country-search {\n      width: 100%; padding: 13px 15px 13px 54px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg); font-family: 'Tinos', Georgia, serif;\n      font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-country-search:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    .sw-country-list { max-height: 240px; overflow-y: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }\n    .sw-country-item { padding: 11px 15px; cursor: pointer; font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; display: flex; justify-content: space-between; align-items: center; transition: background 0.15s; border-bottom: 1px solid var(--border); }\n    .sw-country-item:last-child { border-bottom: 0; }\n    .sw-country-item:hover { background: var(--accent-light); }\n    .sw-country-item.selected { background: var(--accent-light); font-weight: 700; }\n    .sw-country-item-cat { font-size: 12px; color: var(--ink-muted); background: var(--border); padding: 2px 8px; border-radius: 999px; }\n    .sw-country-empty { padding: 15px; font-size: 18px; color: var(--ink-muted); text-align: center; }\n    .sw-step { display: none; }\n    .sw-step.active { display: block; }\n  `;\n  shadow.appendChild(styleEl);\n  const wrapper = document.createElement(\"div\");\n  wrapper.innerHTML = `\n    <div class=\"sw-root\">\n      <div class=\"sw-card\">\n        <div class=\"sw-progress\">\n          <div class=\"sw-progress-step\" id=\"sw-prog-1\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-2\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-3\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-4\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-5\"><\/div>\n        <\/div>\n        <!-- STEP 1 -->\n        <div class=\"sw-step active\" id=\"sw-step-welcome\">\n          <div class=\"sw-step-label\">\u00c9tape 1 sur 5<\/div>\n          <h2 class=\"sw-heading\">Bienvenue<\/h2>\n          <p class=\"sw-subtext\">En quelques \u00e9tapes, choisissez votre pays, votre langue, votre type d&#x27;inscription et votre contribution \u2013 puis acc\u00e9dez directement au paiement.<\/p>\n          <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-welcome-next\" style=\"width:100%;\">Tarifs &amp; Inscription<\/button>\n        <\/div>\n        <!-- STEP 2 -->\n        <div class=\"sw-step\" id=\"sw-step-country\">\n          <div class=\"sw-step-label\">\u00c9tape 2 sur 5<\/div>\n          <h2 class=\"sw-heading\">O\u00f9 habitez-vous ?<\/h2>\n          <label class=\"sw-label\">Pays<\/label>\n          <div class=\"sw-country-search-wrap\">\n            <svg class=\"sw-country-search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.35-4.35\"\/><\/svg>\n            <input type=\"text\" class=\"sw-country-search\" id=\"sw-country-search\" placeholder=\"Rechercher un pays\u2026\" autocomplete=\"off\">\n          <\/div>\n          <div class=\"sw-country-list\" id=\"sw-country-list\"><\/div>\n          <input type=\"hidden\" id=\"sw-country\">\n          <div class=\"sw-infobox\" id=\"sw-catInfo\">\n            <div class=\"sw-infobox-title\">Cat\u00e9gorie de prix<\/div>\n            <div id=\"sw-catText\">Veuillez d&#x27;abord s\u00e9lectionner un pays.<\/div>\n          <\/div>\n          <div class=\"sw-redirect\" id=\"sw-redirect-russia\">\n            <strong>Une page d'inscription distincte existe pour les participants depuis la Russie.<\/strong>\n            Notre syst\u00e8me de paiement n'est pas disponible en Russie. Merci de vous inscrire ici :<br><br>\n            <a href=\"https:\/\/spiritual-activity.org\/ru\/anmeldung-basic-exercises\/\">Vers l'inscription russe<\/a>\n          <\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-country-back\">Retour<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-country-next\" disabled>Suivant<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 3 -->\n        <div class=\"sw-step\" id=\"sw-step-langform\">\n          <div class=\"sw-step-label\">\u00c9tape 3 sur 5<\/div>\n          <h2 class=\"sw-heading\">Langue &amp; type d&#x27;inscription<\/h2>\n          <label class=\"sw-label\" for=\"sw-commLang\">Dans quelle langue participez-vous ?<\/label>\n          <select class=\"sw-select\" id=\"sw-commLang\">\n            <option value=\"\" selected disabled>Veuillez s\u00e9lectionner\u2026<\/option>\n            <option value=\"Deutsch\">Allemand<\/option>\n            <option value=\"Englisch\">Anglais<\/option>\n            <option value=\"Spanisch\">Espagnol<\/option>\n            <option value=\"Franz\u00f6sisch\">Fran\u00e7ais<\/option>\n            <option value=\"Italienisch\">Italien<\/option>\n            <option value=\"Portugiesisch\">Portugais<\/option>\n            <option value=\"Arabisch\">Arabe<\/option>\n            <option value=\"Hebr\u00e4isch\">H\u00e9breu<\/option>\n            <option value=\"Farsi\">Farsi<\/option>\n            <option value=\"Georgisch\">G\u00e9orgien<\/option>\n            <option value=\"Ukrainisch\">Ukrainien<\/option>\n            <option value=\"Niederl\u00e4ndisch\">N\u00e9erlandais<\/option>\n            <option value=\"T\u00fcrkisch\">Turc<\/option>\n            <option value=\"Bulgarisch\">Bulgare<\/option>\n            <option value=\"Russisch\">Russe<\/option>\n            <option value=\"Chinesisch\">Chinois<\/option>\n            <option value=\"Japanisch\">Japonais<\/option>\n            <option value=\"Koreanisch\">Cor\u00e9en<\/option>\n          <\/select>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note\" style=\"display:none; margin-top:14px;\">\n            <div class=\"sw-infobox-title\">PARTICIPATION NUM\u00c9RIQUE \u00b7 \u221235\u20ac<\/div>\n            <div id=\"sw-apponly-note-text\">Vous participez en num\u00e9rique. La r\u00e9duction sera automatiquement prise en compte dans le r\u00e9capitulatif.<\/div>\n          <\/div>\n          <label class=\"sw-label\" style=\"margin-top:26px;\">Comment souhaitez-vous vous inscrire ?<\/label>\n          <div class=\"sw-choice-row\" id=\"sw-form-choices\">\n            <div class=\"sw-choice-card active\" data-form=\"einzeln\">Individuel<\/div>\n            <div class=\"sw-choice-card\" data-form=\"paar\">\u00c0 deux<br><span style=\"font-size:13px; font-weight:400;\">(m\u00eame foyer)<\/span><\/div>\n            <div class=\"sw-choice-card\" data-form=\"gruppe\">Groupe<br><span style=\"font-size:13px; font-weight:400;\">(\u00e0 partir de 4 personnes)<\/span><\/div>\n          <\/div>\n          <div class=\"sw-infobox\" id=\"sw-gruppe-note\" style=\"display:none; margin-top:18px;\">\n            <div class=\"sw-infobox-title\">Inscription de groupe<\/div>\n            <div>Nous vous remercions de votre int\u00e9r\u00eat. Sur la page suivante, vous pourrez effectuer l'inscription de groupe. Veuillez noter : l'inscription de groupe n'est disponible qu'en allemand et en anglais.<\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-langform\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-langform-back\">Retour<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-langform-next\" disabled>Suivant<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-gruppe-redirect\" style=\"display:none;\">Continuer vers l&#x27;inscription de groupe<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4A -->\n        <div class=\"sw-step\" id=\"sw-step-details-solo\">\n          <div class=\"sw-step-label\">\u00c9tape 4 sur 5<\/div>\n          <h2 class=\"sw-heading\">Quelques informations sur vous<\/h2>\n          <p class=\"sw-subtext\">L&#x27;un de ces \u00e9l\u00e9ments s&#x27;applique-t-il \u00e0 vous ? Cela nous aide \u00e0 vous proposer la contribution adapt\u00e9e.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">PARTICIPATION NUM\u00c9RIQUE \u00b7 \u221235\u20ac<\/div>\n            <div>Vous participez en num\u00e9rique. La r\u00e9duction sera automatiquement prise en compte dans le r\u00e9capitulatif.<\/div>\n          <\/div>\n          <label class=\"sw-label\">Veuillez s\u00e9lectionner<\/label>\n          <select class=\"sw-select\" id=\"sw-solo-status\">\n            <option value=\"\" disabled selected>Veuillez s\u00e9lectionner\u2026<\/option>\n            <option value=\"normal\">Inscription normale<\/option>\n            <option value=\"schueler\">\u00c9l\u00e8ve (\u221250 %)<\/option>\n            <option value=\"student\">En formation \/ \u00e9tudiant(e) (\u221225 %)<\/option>\n            <option value=\"wiederholer\">Je r\u00e9p\u00e8te le cours avec les exercices de l&#x27;\u00e2me (pas de nouveau jeu de cartes \u2212 30 %)<\/option>\n          <\/select>\n          <div class=\"sw-error\" id=\"sw-error-details-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-solo-back\">Retour<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-solo-next\" disabled>Suivant<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4B -->\n        <div class=\"sw-step\" id=\"sw-step-details-paar\">\n          <div class=\"sw-step-label\">\u00c9tape 4 sur 5<\/div>\n          <h2 class=\"sw-heading\">Informations vous concernant tous les deux<\/h2>\n          <p class=\"sw-subtext\">Veuillez saisir les donn\u00e9es des deux personnes. La deuxi\u00e8me personne b\u00e9n\u00e9ficie automatiquement d&#x27;une r\u00e9duction de 50 %.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-paar-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">PARTICIPATION NUM\u00c9RIQUE \u00b7 \u221235\u20ac<\/div>\n            <div>Vous participez en num\u00e9rique. La r\u00e9duction sera automatiquement prise en compte dans le r\u00e9capitulatif.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">Personne 1<\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">Pr\u00e9nom<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-vorname\"><\/div>\n              <div><label class=\"sw-label\">Nom<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">E-mail<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p1-email\">\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">Personne 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250 %)<\/span><\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">Pr\u00e9nom<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-vorname\"><\/div>\n              <div><label class=\"sw-label\">Nom<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">E-mail<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p2-email\">\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-details-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-paar-back\">Retour<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-paar-next\" disabled>Suivant<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5A -->\n        <div class=\"sw-step\" id=\"sw-step-amount-solo\">\n          <div class=\"sw-step-label\">\u00c9tape 5 sur 5<\/div>\n          <h2 class=\"sw-heading\">Choisir la contribution<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-solo\">Ici, vous pouvez choisir la contribution qui vous convient.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-solo\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">PARTICIPATION NUM\u00c9RIQUE \u00b7 \u221235\u20ac<\/div>\n            <div>Vous participez en num\u00e9rique. La r\u00e9duction sera automatiquement prise en compte dans le r\u00e9capitulatif.<\/div>\n          <\/div>\n          <div class=\"sw-range-header\">\n            <div class=\"sw-range-header-label\">Votre montant<\/div>\n            <div class=\"sw-amount-display\">\n              <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-solo\" value=\"360\">\n              <span>\u20ac<\/span>\n            <\/div>\n          <\/div>\n          <div class=\"sw-range-wrap\">\n            <div class=\"sw-markers\" id=\"sw-markers-solo\"><\/div>\n            <input type=\"range\" class=\"sw-range\" id=\"sw-amount-solo\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n            <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-solo\"><\/div>\n          <\/div>\n          <p style=\"margin-top:18px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            Si vous avez besoin d&#x27;une r\u00e9duction financi\u00e8re suppl\u00e9mentaire, n&#x27;h\u00e9sitez pas \u00e0 nous \u00e9crire :\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-solo\">\n            <div class=\"sw-summary-row\"><span>Contribution choisie<\/span><span id=\"sw-solo-chosen\">360\u20ac<\/span><\/div>\n            <div id=\"sw-solo-discounts\"><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-solo\" style=\"display:none;\"><span>Exp\u00e9dition<\/span><span>15 \u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>Total<\/span><span><span id=\"sw-solo-total\">360<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-solo-back\">Retour<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-solo\">S&#x27;inscrire<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5B -->\n        <div class=\"sw-step\" id=\"sw-step-amount-paar\">\n          <div class=\"sw-step-label\">\u00c9tape 5 sur 5<\/div>\n          <h2 class=\"sw-heading\">Choisir les contributions<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-paar\">Chaque personne choisit sa propre contribution. La personne 2 b\u00e9n\u00e9ficie automatiquement d&#x27;une r\u00e9duction de 50 %.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-paar\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">PARTICIPATION NUM\u00c9RIQUE \u00b7 \u221235\u20ac<\/div>\n            <div>Vous participez en num\u00e9rique. La r\u00e9duction sera automatiquement prise en compte dans le r\u00e9capitulatif.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p1-title\">Personne 1<\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">Contribution<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p1\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p1\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p1\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p1\"><\/div>\n            <\/div>\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p2-title\">Personne 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250 %)<\/span><\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">Contribution<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p2\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p2\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p2\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p2\"><\/div>\n            <\/div>\n          <\/div>\n          <p style=\"margin-top:8px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            Si vous avez besoin d&#x27;une r\u00e9duction financi\u00e8re suppl\u00e9mentaire, n&#x27;h\u00e9sitez pas \u00e0 nous \u00e9crire :\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-paar\">\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p1-label\">Personne 1<\/div>\n            <div class=\"sw-summary-row\"><span>Contribution choisie<\/span><span id=\"sw-p1-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p1-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>Sous-total<\/span><span id=\"sw-p1-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p2-label\">Personne 2<\/div>\n            <div class=\"sw-summary-row\"><span>Contribution choisie<\/span><span id=\"sw-p2-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p2-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>Sous-total<\/span><span id=\"sw-p2-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-paar\" style=\"display:none;\"><span>Exp\u00e9dition<\/span><span>15 \u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>Total<\/span><span><span id=\"sw-paar-total\">0<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-paar-back\">Retour<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-paar\">Vers le paiement<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  `;\n  shadow.appendChild(wrapper);\n  const $ = (id) => shadow.getElementById(id);\n  const COUNTRY_TO_CAT = {};\n  Object.keys(COUNTRIES).forEach(cat => COUNTRIES[cat].forEach(code => COUNTRY_TO_CAT[code] = cat));\n  function getCountryName(code) {\n    if (COUNTRY_NAMES[code]) return COUNTRY_NAMES[code];\n    try { return new Intl.DisplayNames([\"fr\"], { type: \"region\" }).of(code) || code; }\n    catch { return code; }\n  }\n  function getCountryAliases(code) {\n    const list = [];\n    \/\/ Intl-Name als Fallback, falls er vom festen CLDR-Namen abweicht\n    if (COUNTRY_NAMES[code]) {\n      try {\n        const intlName = new Intl.DisplayNames([\"fr\"], { type: \"region\" }).of(code);\n        if (intlName && intlName.toLowerCase() !== COUNTRY_NAMES[code].toLowerCase()) {\n          list.push(intlName.toLowerCase());\n        }\n      } catch {}\n    }\n    (COUNTRY_SEARCH_ALIASES[code] || []).forEach(a => list.push(a.toLowerCase()));\n    return list;\n  }\n  function getAllCountriesSorted() {\n    const all = [];\n    [\"cat1\",\"cat2\",\"cat3\",\"cat4\"].forEach(cat => {\n      COUNTRIES[cat]\n        .map(code => ({ code, name: getCountryName(code), cat, aliases: getCountryAliases(code) }))\n        .sort((a, b) => a.name.localeCompare(b.name, \"fr\"))\n        .forEach(c => all.push(c));\n    });\n    return all;\n  }\n  function emptyPerson() {\n    return { vorname: \"\", nachname: \"\", email: \"\", wiederholer: false, statusType: \"\", amount: 0 };\n  }\n  const state = {\n    country: \"\", category: \"cat1\",\n    commLang: \"\", form: \"einzeln\",\n    persons: { solo: emptyPerson(), p1: emptyPerson(), p2: emptyPerson() }\n  };\n  function getPerson(key) { return state.persons[key] || state.persons.solo; }\n  function isAppOnly() {\n    const { category: cat, commLang: lang, country } = state;\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[country];\n      \/\/ Ausnahme (z.B. China) gilt nur, wenn auch die passende Sprache gewaehlt ist \u2013\n      \/\/ sonst kann kein physisches Kartenset verschickt werden.\n      if (!exceptionLang || lang !== exceptionLang) return true;\n    }\n    if (APP_ONLY_LANGS.has(lang)) return true;\n    if (lang === \"Russisch\" && country && country !== \"RU\") return true;\n    return false;\n  }\n\n  function isWiederholer(person) {\n    return !!person && (person.wiederholer || person.statusType === \"wiederholer\");\n  }\n\n  \/\/ Geht ueberhaupt ein Kartenset raus? Nur wenn die Teilnahme nicht rein digital\n  \/\/ ist UND mindestens eine Person ein neues Set braucht - Wiederholer bekommen\n  \/\/ keins. Steuert sowohl die Versandzeile in der Zusammenfassung als auch die\n  \/\/ Wahl des Ecwid-Produkts, damit beide nicht auseinanderlaufen koennen.\n  function hasPhysicalShipment(isPaar) {\n    if (isAppOnly()) return false;\n    return isPaar\n      ? !(isWiederholer(state.persons.p1) && isWiederholer(state.persons.p2))\n      : !isWiederholer(state.persons.solo);\n  }\n\n  \/\/ Ecwid haengt den Versand am Produkt fest, nicht am Warenkorb. Ohne physischen\n  \/\/ Versand muss deshalb das versandfreie Digital-Produkt in den Warenkorb, sonst\n  \/\/ schlaegt der Shop trotzdem Versandkosten auf.\n  function getParticipationProductId(isPaar) {\n    return hasPhysicalShipment(isPaar) ? PRODUCTS[state.category] : PRODUCTS_APPONLY[state.category];\n  }\n  function updateAppOnlyUI() {\n    const appOnly = state.commLang ? isAppOnly() : false;\n    let reason = \"\";\n    if (appOnly) {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[state.country];\n      if ((state.category === \"cat3\" || state.category === \"cat4\") && exceptionLang) {\n        reason = TXT.reasonException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang);\n      } else if (state.category === \"cat3\" || state.category === \"cat4\") {\n        reason = TXT.reasonRegion;\n      } else if (state.commLang === \"Russisch\") {\n        reason = TXT.reasonRussian;\n      } else {\n        reason = TXT.reasonLanguage;\n      }\n    }\n    const noteIds = [\"sw-apponly-note\",\"sw-apponly-note-step4\",\"sw-apponly-note-paar-step4\",\"sw-apponly-note-step5-solo\",\"sw-apponly-note-step5-paar\"];\n    noteIds.forEach(id => {\n      const el = $(id);\n      if (!el) return;\n      el.style.display = appOnly ? \"block\" : \"none\";\n      const textDiv = el.querySelector(\"div:not(.sw-infobox-title)\");\n      if (textDiv && reason) textDiv.textContent = reason;\n    });\n  }\n  const STEP_CONTAINER = {\n    1: () => \"sw-step-welcome\",\n    2: () => \"sw-step-country\",\n    3: () => \"sw-step-langform\",\n    4: () => state.form === \"paar\" ? \"sw-step-details-paar\" : \"sw-step-details-solo\",\n    5: () => state.form === \"paar\" ? \"sw-step-amount-paar\" : \"sw-step-amount-solo\"\n  };\n  function showStep(n) {\n    shadow.querySelectorAll(\".sw-step\").forEach(el => el.classList.remove(\"active\"));\n    $(STEP_CONTAINER[n]()).classList.add(\"active\");\n    for (let i = 1; i <= 5; i++) {\n      const prog = $(\"sw-prog-\" + i);\n      if (!prog) continue;\n      if (i < n) prog.className = \"sw-progress-step done\";\n      else if (i === n) prog.className = \"sw-progress-step active\";\n      else prog.className = \"sw-progress-step\";\n    }\n    if (n === 5) {\n      const sliderIds = state.form === \"paar\" ? [\"sw-amount-p1\",\"sw-amount-p2\"] : [\"sw-amount-solo\"];\n      sliderIds.forEach(sid => { const el = $(sid); if (el) el.classList.add(\"sw-pulse\"); });\n      refreshSummary();\n    }\n  }\n  function setNextEnabled(id, enabled) {\n    const b = $(id);\n    if (!b) return;\n    b.disabled = !enabled;\n    b.style.opacity = enabled ? \"1\" : \".4\";\n    b.style.cursor  = enabled ? \"pointer\" : \"not-allowed\";\n  }\n  function showErrorIn(id, msg) { const el=$(id); el.style.display=\"block\"; el.textContent=msg; }\n  function clearErrorIn(id)     { const el=$(id); el.style.display=\"none\";  el.textContent=\"\"; }\n  function setCheckoutLoading(btnId, loading) {\n    const btn = $(btnId);\n    \/\/ Nach dem Danke-Bildschirm existiert der Button nicht mehr \u2013 dann nichts tun.\n    if (!btn) return;\n    const overlay = document.getElementById(OVERLAY_ID);\n    if (!btn.dataset.defaultLabel) btn.dataset.defaultLabel = btn.textContent;\n    if (loading) {\n      btn.disabled = true;\n      btn.innerHTML = '<span class=\"wiz-spinner\"><\/span> ' + TXT.preparing;\n      btn.style.opacity = \".8\";\n      if (overlay) overlay.style.display = \"flex\";\n    } else {\n      btn.disabled = false;\n      btn.textContent = btn.dataset.defaultLabel;\n      btn.style.opacity = \"1\";\n      if (overlay) overlay.style.display = \"none\";\n    }\n  }\n  function showThankYou() {\n    const card = shadow.querySelector(\".sw-card\");\n    if (!card) return;\n    card.innerHTML = `\n      <div style=\"text-align:center; padding:20px 0;\">\n        <div style=\"font-size:56px; margin-bottom:16px; color:#27703F;\">\u2713<\/div>\n        <h2 style=\"font-family:'Tinos',Georgia,serif; font-size:26px; font-weight:500; margin:0 0 12px; color:#0C1E14;\">${TXT.thanksTitle}<\/h2>\n        <p style=\"font-family:'Tinos',Georgia,serif; font-size:18px; color:#27703F; line-height:1.6; margin:0 0 24px;\">${TXT.thanksLine1}${TXT.thanksLine2 ? \"<br>\" + TXT.thanksLine2 : \"\"}<\/p>\n        <div style=\"display:flex; justify-content:center;\">\n          <div style=\"width:36px; height:36px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:wiz-spin 0.8s linear infinite;\"><\/div>\n        <\/div>\n      <\/div>`;\n  }\n  function getAnchors(cat) {\n    const r = RANGES[cat], o = ORIENTIERUNG[cat];\n    return [[0,r.min],[25,o.reduced],[50,o.base],[75,o.support],[100,r.max]];\n  }\n  function normToEuro(norm, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      if (norm <= a[i+1][0]) {\n        const t = (norm - a[i][0]) \/ (a[i+1][0] - a[i][0]);\n        return Math.round(a[i][1] + t * (a[i+1][1] - a[i][1]));\n      }\n    }\n    return a[a.length-1][1];\n  }\n  function euroToNorm(euro, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      const lo = a[i][1], hi = a[i+1][1];\n      if (euro <= hi) {\n        if (hi === lo) return a[i+1][0];\n        return a[i][0] + (euro - lo) \/ (hi - lo) * (a[i+1][0] - a[i][0]);\n      }\n    }\n    return 100;\n  }\n  function getMarkerDefs(cat) {\n    const o = ORIENTIERUNG[cat];\n    return [\n      { value: o.reduced, label: TXT.markerReduced, normPct: 25 },\n      { value: o.base,    label: TXT.markerBase,    normPct: 50 },\n      { value: o.support, label: TXT.markerSupport, normPct: 75 }\n    ];\n  }\n  function renderMarkers(personKey) {\n    const cat = state.category;\n    const person = getPerson(personKey);\n    const markers = getMarkerDefs(cat);\n    const container = $(`sw-markers-${personKey}`);\n    container.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker\" + (person.amount === m.value ? \" active\" : \"\");\n      div.style.left = m.normPct + \"%\";\n      div.innerHTML = `<div class=\"sw-marker-tick\"><\/div><div class=\"sw-marker-amount\">${m.value}\u20ac<\/div><div class=\"sw-marker-label\">${m.label}<\/div>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      container.appendChild(div);\n    });\n    const mobileContainer = $(`sw-markers-mobile-${personKey}`);\n    mobileContainer.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker-mobile\" + (person.amount === m.value ? \" active\" : \"\");\n      div.innerHTML = `<span class=\"sw-marker-mobile-label\">${m.label}<\/span><span class=\"sw-marker-mobile-amount\">${m.value}\u20ac<\/span>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      mobileContainer.appendChild(div);\n    });\n  }\n  function selectMarkerValue(personKey, value) {\n    const person = getPerson(personKey);\n    $(`sw-amount-${personKey}`).value = euroToNorm(value, state.category);\n    person.amount = value;\n    $(`sw-amountInput-${personKey}`).value = value;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromSlider(personKey) {\n    const person = getPerson(personKey);\n    const norm = Number($(`sw-amount-${personKey}`).value);\n    person.amount = normToEuro(norm, state.category);\n    $(`sw-amountInput-${personKey}`).value = person.amount;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromInput(personKey) {\n    const person = getPerson(personKey);\n    const r = RANGES[state.category];\n    let val = Number($(`sw-amountInput-${personKey}`).value);\n    if (isNaN(val)) val = r.min;\n    val = Math.min(r.max, Math.max(r.min, val));\n    person.amount = val;\n    $(`sw-amountInput-${personKey}`).value = val;\n    $(`sw-amount-${personKey}`).value = euroToNorm(val, state.category);\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function wireAmountControl(personKey) {\n    $(`sw-amount-${personKey}`).addEventListener(\"input\", () => updateAmountFromSlider(personKey));\n    $(`sw-amountInput-${personKey}`).addEventListener(\"input\", () => {\n      const v = Number($(`sw-amountInput-${personKey}`).value);\n      if (!isNaN(v)) { getPerson(personKey).amount = v; refreshSummary(); }\n    });\n    $(`sw-amountInput-${personKey}`).addEventListener(\"change\", () => updateAmountFromInput(personKey));\n  }\n  function applyRangeForForm() {\n    const cat = state.category;\n    const ori = ORIENTIERUNG[cat];\n    const hint = TXT.hintLong;\n    if (state.form === \"paar\") {\n      [\"p1\",\"p2\"].forEach(key => {\n        const person = getPerson(key);\n        person.amount = ori.base;\n        $(`sw-amount-${key}`).value = 50;\n        $(`sw-amountInput-${key}`).value = ori.base;\n      });\n      const p1name = state.persons.p1.vorname;\n      const p2name = state.persons.p2.vorname;\n      $(\"sw-amount-p1-title\").innerHTML = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-amount-p2-title\").innerHTML = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) +\n        ' <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">' + TXT.p2Badge + '<\/span>';\n      $(\"sw-summary-p1-label\").textContent = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-summary-p2-label\").textContent = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) + \" \" + TXT.p2Badge;\n      $(\"sw-rangeHint-paar\").textContent = hint;\n      renderMarkers(\"p1\"); renderMarkers(\"p2\");\n    } else {\n      const person = state.persons.solo;\n      person.amount = ori.base;\n      $(\"sw-amount-solo\").value = 50;\n      $(\"sw-amountInput-solo\").value = ori.base;\n      $(\"sw-rangeHint-solo\").textContent = hint;\n      renderMarkers(\"solo\");\n    }\n    refreshSummary();\n  }\n  \/\/ \u2500\u2500 Rabattlogik \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Zuerst wird der fixe App-Rabatt vom gewaehlten Betrag abgezogen, danach der\n  \/\/ prozentuale Rabatt auf den verbleibenden Betrag. Beide werden separat gezeigt.\n  function getPercentDiscountCandidate(person, isPaarP2) {\n    if (isPaarP2) return { value: DISCOUNT_PAAR_P2, label: TXT.discP2 };\n    const candidates = [];\n    if (isWiederholer(person)) candidates.push({ value: DISCOUNT_WIEDERHOLER, label: TXT.discWiederholer });\n    if (person.statusType === \"schueler\") candidates.push({ value: DISCOUNT_SCHUELER, label: TXT.discSchueler });\n    if (person.statusType === \"student\")  candidates.push({ value: DISCOUNT_STUDENT,  label: TXT.discStudent });\n    if (!candidates.length) return null;\n    return candidates.reduce((best, c) => c.value > best.value ? c : best, candidates[0]);\n  }\n  function getDiscounts(person, isPaarP2) {\n    const discounts = [];\n    let remaining = Math.round(person.amount);\n    if (isAppOnly()) {\n      const appDisc = Math.min(DISCOUNT_APP_FIXED, remaining);\n      discounts.push({ type: \"fixed\", value: DISCOUNT_APP_FIXED, label: TXT.discApp, amountEuro: appDisc });\n      remaining -= appDisc;\n    }\n    const pct = getPercentDiscountCandidate(person, isPaarP2);\n    if (pct) {\n      const pctDisc = Math.round(remaining * pct.value);\n      discounts.push({ type: \"pct\", value: pct.value, label: pct.label, amountEuro: pctDisc });\n      remaining -= pctDisc;\n    }\n    return { discounts, finalAmount: Math.max(0, remaining) };\n  }\n  function buildStatusOptionValue(person, isPaar) {\n    const vals = [];\n    if (isPaar) vals.push(STATUS_LABEL.paar);\n    if (isAppOnly()) vals.push(STATUS_LABEL.apponly);\n    if (isWiederholer(person)) vals.push(STATUS_LABEL.wiederholer);\n    if (person.statusType === \"schueler\") vals.push(STATUS_LABEL.schueler);\n    if (person.statusType === \"student\")  vals.push(STATUS_LABEL.student);\n    \/\/ Ecwid erwartet fuer Checkbox-Optionen ein Array, nicht einen kommaseparierten String\n    return vals;\n  }\n  function refreshSummary() {\n    if (state.form === \"paar\") refreshSummaryPaar();\n    else refreshSummarySolo();\n  }\n  function renderDiscountRows(containerId, discounts) {\n    const container = $(containerId);\n    container.innerHTML = \"\";\n    discounts.forEach(d => {\n      const row = document.createElement(\"div\");\n      row.className = \"sw-summary-row sw-summary-discount\";\n      const pctStr = d.type === \"fixed\" ? `\u2212${d.amountEuro}\u20ac` : `\u2212${Math.round(d.value * 100)}%`;\n      row.innerHTML = `<span>${d.label} (${pctStr})<\/span><span>\u2212${d.amountEuro}\u20ac<\/span>`;\n      container.appendChild(row);\n    });\n  }\n  function refreshSummarySolo() {\n    const p = state.persons.solo;\n    const { discounts, finalAmount } = getDiscounts(p, false);\n    $(\"sw-solo-chosen\").textContent = Math.round(p.amount) + \"\u20ac\";\n    renderDiscountRows(\"sw-solo-discounts\", discounts);\n    const shipLine = $(\"sw-shipping-line-solo\");\n    const shippingSolo = (hasPhysicalShipment(false) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingSolo ? \"flex\" : \"none\";\n    $(\"sw-solo-total\").textContent = finalAmount + shippingSolo;\n  }\n  function refreshSummaryPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    function fill(prefix, person, isPaarP2) {\n      const { discounts, finalAmount } = getDiscounts(person, isPaarP2);\n      $(`sw-${prefix}-chosen`).textContent = Math.round(person.amount) + \"\u20ac\";\n      renderDiscountRows(`sw-${prefix}-discounts`, discounts);\n      $(`sw-${prefix}-subtotal`).textContent = finalAmount + \"\u20ac\";\n      return finalAmount;\n    }\n    const f1 = fill(\"p1\", p1, false);\n    const f2 = fill(\"p2\", p2, true);\n    const shipLine = $(\"sw-shipping-line-paar\");\n    const shippingPaar = (hasPhysicalShipment(true) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingPaar ? \"flex\" : \"none\";\n    $(\"sw-paar-total\").textContent = f1 + f2 + shippingPaar;\n  }\n  function renderCountryList(filter) {\n    const list = $(\"sw-country-list\");\n    const q = (filter || \"\").toLowerCase().trim();\n    const filtered = q\n      ? getAllCountriesSorted().filter(c =>\n          c.name.toLowerCase().includes(q) ||\n          (c.aliases || []).some(a => a.includes(q))\n        )\n      : getAllCountriesSorted();\n    list.innerHTML = \"\";\n    if (!filtered.length) { list.innerHTML = '<div class=\"sw-country-empty\">' + TXT.noCountry + '<\/div>'; return; }\n    filtered.forEach(c => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-country-item\" + (state.country === c.code ? \" selected\" : \"\");\n      div.dataset.code = c.code;\n      div.innerHTML = `<span>${c.name}<\/span><span class=\"sw-country-item-cat\">${TXT.catBadge}${c.cat.replace(\"cat\",\"\")}<\/span>`;\n      div.addEventListener(\"click\", () => selectCountry(c.code, c.cat, c.name));\n      list.appendChild(div);\n    });\n  }\n  function selectCountry(code, cat, name) {\n    state.country  = code;\n    state.category = cat;\n    $(\"sw-country\").value = code;\n    $(\"sw-country-search\").value = name;\n    $(\"sw-country-list\").innerHTML = \"\";\n    const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[code];\n    let suffix = \"\";\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      suffix = exceptionLang\n        ? \" \" + TXT.catSuffixException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang)\n        : \" \" + TXT.catSuffixDigital;\n    }\n    $(\"sw-catText\").textContent = (TXT.catLabels[cat] || cat) + suffix;\n    \/\/ Ecwid wickelt in Russland keine Zahlungen ab. Wer Russland waehlt, wird\n    \/\/ deshalb auf die russische Anmeldeseite verwiesen - die laeuft ueber n8n\n    \/\/ und Tochka statt ueber den Shop. Der russische Wizard verweist umgekehrt\n    \/\/ zurueck, sobald dort ein anderes Land gewaehlt wird.\n    const nachRussland = (code === \"RU\");\n    $(\"sw-redirect-russia\").style.display = nachRussland ? \"block\" : \"none\";\n    $(\"sw-catInfo\").style.display         = nachRussland ? \"none\"  : \"block\";\n    setNextEnabled(\"sw-btn-country-next\", !nachRussland);\n    updateAppOnlyUI();\n  }\n  function ensureEcwidReady(timeoutMs = 12000) {\n    return new Promise((resolve, reject) => {\n      function isReady() {\n        return window.Ecwid && window.Ecwid.Cart &&\n               typeof window.Ecwid.Cart.addProduct === \"function\" &&\n               typeof window.Ecwid.Cart.clear === \"function\";\n      }\n      if (isReady()) return resolve(true);\n      let resolved = false;\n      function done() { if (!resolved) { resolved = true; setTimeout(() => resolve(true), 200); } }\n      if (window.Ecwid) { try { window.Ecwid.OnAPILoaded.add(done); } catch(e) {} }\n      const start = Date.now();\n      const t = setInterval(() => {\n        if (isReady()) { clearInterval(t); done(); }\n        else if (Date.now() - start > timeoutMs) {\n          clearInterval(t);\n          if (!resolved) { resolved = true; reject(new Error(fillPlaceholder(TXT.errEcwid, timeoutMs\/1000))); }\n        }\n      }, 200);\n    });\n  }\n  function clearCartAsync() { return new Promise(r => Ecwid.Cart.clear(() => r(true))); }\n  function addProductAsync(payload, timeoutMs = 4000) {\n    return new Promise((resolve, reject) => {\n      let done = false;\n      const t = setTimeout(() => { if (!done) { done = true; resolve({ product:null, cart:null, timedOut:true }); } }, timeoutMs);\n      Ecwid.Cart.addProduct(payload, function(success, product, cart, error) {\n        if (done) return;\n        done = true; clearTimeout(t);\n        if (success) resolve({ product, cart, timedOut:false });\n        else reject(new Error((error || TXT.errProduct) + \" | Payload: \" + JSON.stringify(payload)));\n      });\n    });\n  }\n  function goToCart() { window.location.href = SHOP_CART_URL; }\n  function buildN8nPayload() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const d1 = getDiscounts(p1, false);\n    const d2 = getDiscounts(p2, true);\n    return {\n      sprache: state.commLang, land: state.country, kategorie: state.category, appOnly: isAppOnly(),\n      person1: { vorname: p1.vorname, nachname: p1.nachname, email: p1.email },\n      person2: { vorname: p2.vorname, nachname: p2.nachname, email: p2.email },\n      betraege: {\n        person1: { gewaehlt: Math.round(p1.amount), rabatte: d1.discounts, endbetrag: d1.finalAmount },\n        person2: { gewaehlt: Math.round(p2.amount), rabatte: d2.discounts, endbetrag: d2.finalAmount },\n        gesamt: d1.finalAmount + d2.finalAmount\n      },\n      timestamp: new Date().toISOString()\n    };\n  }\n  async function sendToN8n(payload) {\n    if (!N8N_WEBHOOK_URL || N8N_WEBHOOK_URL.indexOf(\"HIER_\") === 0) {\n      throw new Error(\"Die n8n-Webhook-URL ist im Code noch nicht eingetragen.\");\n    }\n    let res;\n    try {\n      res = await fetch(N8N_WEBHOOK_URL, { method:\"POST\", headers:{\"Content-Type\":\"application\/json\"}, body:JSON.stringify(payload) });\n    } catch (e) {\n      throw new Error(TXT.errNetwork);\n    }\n    if (!res.ok) throw new Error(fillPlaceholder(TXT.errSubmit, res.status));\n    return true;\n  }\n  async function goCheckoutSolo() {\n    clearErrorIn(\"sw-error-amount-solo\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-solo\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-solo\", TXT.errLang);\n    const p = state.persons.solo;\n    const finalAmount = getDiscounts(p, false).finalAmount;\n    const participationProductId = getParticipationProductId(false);\n    setCheckoutLoading(\"sw-btn-checkout-solo\", true);\n    try {\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const statusValue = buildStatusOptionValue(p, false);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: finalAmount, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-solo\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-solo\", false);\n    }\n  }\n  async function goCheckoutPaar() {\n    clearErrorIn(\"sw-error-amount-paar\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-paar\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-paar\", TXT.errLang);\n    if (!validateDetailsPaar()) return showErrorIn(\"sw-error-amount-paar\", TXT.errPaarFields);\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const participationProductId = getParticipationProductId(true);\n    setCheckoutLoading(\"sw-btn-checkout-paar\", true);\n    try {\n      const payload = buildN8nPayload();\n      await sendToN8n(payload);\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const total = getDiscounts(p1, false).finalAmount + getDiscounts(p2, true).finalAmount;\n      const statusValue = buildStatusOptionValue(p1, true);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: total, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-paar\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-paar\", false);\n    }\n  }\n  function validateLangform() {\n    const ok = !!state.commLang && !!state.form && state.form !== \"gruppe\";\n    setNextEnabled(\"sw-btn-langform-next\", ok);\n  }\n  function validateDetailsSolo() {\n    const ok = !!$(\"sw-solo-status\").value;\n    setNextEnabled(\"sw-btn-details-solo-next\", ok);\n    return ok;\n  }\n  function validateDetailsPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const emailOk = s => \/\\S+@\\S+\\.\\S+\/.test(s || \"\");\n    const ok = !!(p1.vorname && p1.vorname.trim()) && !!(p1.nachname && p1.nachname.trim()) && emailOk(p1.email) &&\n               !!(p2.vorname && p2.vorname.trim()) && !!(p2.nachname && p2.nachname.trim()) && emailOk(p2.email);\n    setNextEnabled(\"sw-btn-details-paar-next\", ok);\n    return ok;\n  }\n  function bindNameFields(key) {\n    [\"vorname\",\"nachname\",\"email\"].forEach(f => {\n      $(`sw-${key}-${f}`).addEventListener(\"input\", e => {\n        getPerson(key)[f] = e.target.value;\n        validateDetailsPaar();\n      });\n    });\n  }\n  $(\"sw-btn-welcome-next\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-country-back\").addEventListener(\"click\", () => showStep(1));\n  $(\"sw-btn-country-next\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-country-search\").addEventListener(\"input\",  e => renderCountryList(e.target.value));\n  $(\"sw-country-search\").addEventListener(\"focus\",  () => renderCountryList($(\"sw-country-search\").value));\n  shadow.addEventListener(\"click\", e => {\n    if (!e.target.closest(\"#sw-country-list\") && !e.target.closest(\"#sw-country-search\")) {\n      $(\"sw-country-list\").innerHTML = \"\";\n    }\n  });\n  $(\"sw-commLang\").addEventListener(\"change\", e => {\n    state.commLang = e.target.value;\n    validateLangform();\n    updateAppOnlyUI();\n    refreshSummary();\n  });\n  shadow.querySelectorAll(\".sw-choice-card\").forEach(card => {\n    card.addEventListener(\"click\", () => {\n      state.form = card.dataset.form;\n      shadow.querySelectorAll(\".sw-choice-card\").forEach(c => c.classList.toggle(\"active\", c === card));\n      const isGruppe = state.form === \"gruppe\";\n      $(\"sw-gruppe-note\").style.display = isGruppe ? \"block\" : \"none\";\n      $(\"sw-btn-langform-next\").style.display   = isGruppe ? \"none\" : \"inline-block\";\n      $(\"sw-btn-gruppe-redirect\").style.display = isGruppe ? \"inline-block\" : \"none\";\n      clearErrorIn(\"sw-error-langform\");\n      validateLangform();\n    });\n  });\n  $(\"sw-btn-gruppe-redirect\").addEventListener(\"click\", () => { window.location.href = getGroupRedirectUrl(); });\n  $(\"sw-btn-langform-back\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-langform-next\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-details-solo-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-solo-status\").addEventListener(\"change\", e => {\n    const val = e.target.value;\n    const person = state.persons.solo;\n    person.statusType  = val;\n    person.wiederholer = val === \"wiederholer\";\n    clearErrorIn(\"sw-error-details-solo\");\n    validateDetailsSolo();\n  });\n  $(\"sw-btn-details-solo-next\").addEventListener(\"click\", () => {\n    if (validateDetailsSolo()) { applyRangeForForm(); showStep(5); }\n    else showErrorIn(\"sw-error-details-solo\", TXT.errSelectFirst);\n  });\n  $(\"sw-btn-details-paar-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-btn-details-paar-next\").addEventListener(\"click\", () => {\n    if (validateDetailsPaar()) { applyRangeForForm(); showStep(5); }\n  });\n  $(\"sw-btn-amount-solo-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-amount-paar-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-checkout-solo\").addEventListener(\"click\", goCheckoutSolo);\n  $(\"sw-btn-checkout-paar\").addEventListener(\"click\", goCheckoutPaar);\n  bindNameFields(\"p1\");\n  bindNameFields(\"p2\");\n  wireAmountControl(\"solo\");\n  wireAmountControl(\"p1\");\n  wireAmountControl(\"p2\");\n  showStep(1);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c7cde0c e-flex e-con-boxed e-con e-parent\" data-id=\"c7cde0c\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5418988 elementor-widget elementor-widget-html\" data-id=\"5418988\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Tinos:ital,wght@0,400;0,700;1,400&display=swap\" rel=\"stylesheet\">\n<style>\n  .ecwid-ProductBrowser,\n  .ecwid-productbrowser,\n  div[id^=\"my-store\"],\n  .ecwid:not(#sw-host-pt) {\n    visibility: hidden !important;\n    height: 0 !important;\n    max-height: 0 !important;\n    overflow: hidden !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    position: absolute !important;\n    pointer-events: none !important;\n  }\n<\/style>\n<div id=\"sw-overlay-pt\" style=\"display:none; position:fixed; inset:0; background:rgba(245,250,246,0.92); z-index:99999; flex-direction:column; align-items:center; justify-content:center; gap:20px;\">\n  <div style=\"width:52px; height:52px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:sw-spin-pt 0.8s linear infinite;\"><\/div>\n  <div style=\"font-family:'Tinos',Georgia,serif; font-size:22px; color:#27703F;\">Carregando checkout\u2026<\/div>\n<\/div>\n<style>\n  @keyframes sw-spin-pt { to { transform: rotate(360deg); } }\n<\/style>\n<div id=\"sw-host-pt\"><\/div>\n<script>\n(function () {\n\n  \/\/ \u2500\u2500 Sprach-Guard: Skript bricht sofort ab, wenn die URL nicht zu PT passt \u2500\u2500\n  const _pathMatch = window.location.pathname.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n  const _pageLang = _pathMatch ? _pathMatch[1] : \"de\";\n  if (_pageLang !== \"pt\") { \n    document.getElementById(\"sw-host-pt\")?.remove();\n    document.getElementById(\"sw-overlay-pt\")?.remove();\n    return; \n  }\n\n  const OVERLAY_ID    = \"sw-overlay-pt\";\n  const SHOP_CART_URL = \"https:\/\/spiritual-activity.org\/pt\/store\/cart\";\n  const N8N_WEBHOOK_URL = \"https:\/\/n8n.spiritual-activity.org\/webhook\/registration-be\";\n  function getGroupRedirectUrl() {\n    const path = window.location.pathname;\n    \/\/ Erkennt Sprachpraefixe wie \/en\/, \/es\/, \/it\/, \/ru\/ am Anfang des Pfads.\n    \/\/ Deutsch ist die Standardsprache ohne Praefix.\n    const match = path.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n    const langPrefix = (match && match[1] !== \"de\") ? \"\/\" + match[1] : \"\";\n    return \"https:\/\/spiritual-activity.org\" + langPrefix + \"\/gruppen-anmeldung\";\n  }\n  const PRODUCTS = {\n    cat1: 864374030,\n    cat2: 844860366,\n    cat3: 844907264,\n    cat4: 844907265\n  };\n\n  \/\/ Versandfreie Digital-Produkte fuer alle Faelle, in denen nichts verschickt\n  \/\/ wird: rein digitale Teilnahme und Wiederholer (kein neues Kartenset).\n  const PRODUCTS_APPONLY = {\n    cat1: 863272251,\n    cat2: 863265753,\n    cat3: 863272252,\n    cat4: 863265754\n  };\n  const RANGES = {\n    cat1: { min: 160, max: 800 },\n    cat2: { min: 105, max: 700 },\n    cat3: { min:  75, max: 600 },\n    cat4: { min:  45, max: 500 }\n  };\n  const ORIENTIERUNG = {\n    cat1: { reduced: 160, base: 360, support: 580 },\n    cat2: { reduced: 105, base: 240, support: 460 },\n    cat3: { reduced:  75, base: 160, support: 340 },\n    cat4: { reduced:  45, base: 105, support: 220 }\n  };\n  const DISCOUNT_WIEDERHOLER = 0.30;\n  const DISCOUNT_SCHUELER    = 0.50;\n  const DISCOUNT_STUDENT     = 0.25;\n  const DISCOUNT_PAAR_P2     = 0.50;\n  const DISCOUNT_APP_FIXED   = 35;\n  \/\/ Versandpauschale ausserhalb EU+CH. Ecwid kassiert sie, der Wizard rechnet sie in die Anzeige-Summe ein.\n  const SHIPPING_COST   = 15;\n  \/\/ Sprachschluessel bleiben deutsch \u2013 sie sind die Werte im Ecwid-Shop.\n  const APP_ONLY_LANGS = new Set([\"Arabisch\",\"Farsi\",\"Ukrainisch\",\"Bulgarisch\",\"Franz\u00f6sisch\"]);\n  const APP_ONLY_CATEGORY_EXCEPTION_LANG = { CN: \"Chinesisch\" };\n  const EU_PLUS_CH = new Set([\n    \"AT\",\"BE\",\"BG\",\"CY\",\"CZ\",\"DE\",\"DK\",\"EE\",\"ES\",\"FI\",\"FR\",\"GR\",\"HR\",\n    \"HU\",\"IE\",\"IT\",\"LT\",\"LU\",\"LV\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SE\",\"SI\",\"SK\",\"CH\"\n  ]);\n  \/\/ Ersetzt den Platzhalter in Klammern (z.B. [Code], [X], [\ucf54\ub4dc]) durch den Wert\n  function fillPlaceholder(text, value) {\n    return String(text).replace(\/[\\[\uff3b][^\\]\uff3d]*[\\]\uff3d]\/, value);\n  }\n  function needsShipping(countryCode) {\n    return countryCode && !EU_PLUS_CH.has(countryCode);\n  }\n  \/\/ \u2500\u2500 Uebersetzte Texte \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const TXT = {\n      \"catBadge\": \"Cat. \",\n      \"catLabels\": {\n          \"cat1\": \"Categoria de pre\u00e7o 1\",\n          \"cat2\": \"Categoria de pre\u00e7o 2\",\n          \"cat3\": \"Categoria de pre\u00e7o 3\",\n          \"cat4\": \"Categoria de pre\u00e7o 4\"\n      },\n      \"catSuffixDigital\": \"\u2013 Somente participa\u00e7\u00e3o digital poss\u00edvel\",\n      \"catSuffixException\": \"\u2013 Envio somente com o idioma de participa\u00e7\u00e3o {X}, caso contr\u00e1rio somente participa\u00e7\u00e3o digital\",\n      \"noCountry\": \"Nenhum pa\u00eds encontrado\",\n      \"markerReduced\": \"Contribui\u00e7\u00e3o reduzida\",\n      \"markerBase\": \"Contribui\u00e7\u00e3o b\u00e1sica\",\n      \"markerSupport\": \"Contribui\u00e7\u00e3o de apoio\",\n      \"hintLong\": \"Aqui voc\u00ea pode escolher a contribui\u00e7\u00e3o que for adequada para voc\u00ea. Com uma contribui\u00e7\u00e3o de apoio, voc\u00ea possibilita a participa\u00e7\u00e3o de pessoas com poucos recursos financeiros e nos ajuda a levar o projeto ainda mais longe pelo mundo.\",\n      \"hintPaar\": \"Cada pessoa escolhe sua pr\u00f3pria contribui\u00e7\u00e3o. A pessoa 2 recebe automaticamente 50% de desconto.\",\n      \"person1\": \"Pessoa 1\",\n      \"person2\": \"Pessoa 2\",\n      \"p2Badge\": \"(\u221250%)\",\n      \"discWiederholer\": \"Repetente\",\n      \"discSchueler\": \"Estudantes do ensino b\u00e1sico\",\n      \"discStudent\": \"Forma\u00e7\u00e3o\/gradua\u00e7\u00e3o\",\n      \"discP2\": \"Desconto pessoa 2\",\n      \"discApp\": \"Participa\u00e7\u00e3o digital\",\n      \"reasonRegion\": \"O envio n\u00e3o est\u00e1 dispon\u00edvel na sua regi\u00e3o. Voc\u00ea est\u00e1 participando digitalmente. O desconto ser\u00e1 considerado automaticamente no resumo.\",\n      \"reasonRussian\": \"Para falantes de russo fora da R\u00fassia, h\u00e1 apenas uma vers\u00e3o digital. O desconto ser\u00e1 considerado automaticamente no resumo.\",\n      \"reasonLanguage\": \"Nesse idioma, h\u00e1 apenas uma vers\u00e3o digital. O desconto ser\u00e1 considerado automaticamente no resumo.\",\n      \"reasonException\": \"Na sua regi\u00e3o, o envio s\u00f3 \u00e9 poss\u00edvel com o idioma de participa\u00e7\u00e3o {X}. Voc\u00ea est\u00e1 participando digitalmente. O desconto ser\u00e1 considerado automaticamente no resumo.\",\n      \"thanksTitle\": \"Muito obrigado(a)!\",\n      \"thanksLine1\": \"Carregando checkout\u2026\",\n      \"thanksLine2\": \"Voc\u00ea ser\u00e1 redirecionado(a) em instantes\u2026\",\n      \"preparing\": \"Preparando\u2026\",\n      \"errSelectFirst\": \"Por favor, fa\u00e7a uma sele\u00e7\u00e3o primeiro.\",\n      \"errPaarFields\": \"Volte e preencha todos os campos para as duas pessoas.\",\n      \"errCountry\": \"Selecione primeiro um pa\u00eds.\",\n      \"errLang\": \"Selecione o idioma de participa\u00e7\u00e3o.\",\n      \"errNetwork\": \"N\u00e3o foi poss\u00edvel enviar os dados. Verifique sua conex\u00e3o com a internet.\",\n      \"errSubmit\": \"Falha no envio (erro [C\u00f3digo]). Tente novamente.\",\n      \"errProduct\": \"N\u00e3o foi poss\u00edvel adicionar o produto\",\n      \"errEcwid\": \"API do carrinho Ecwid indispon\u00edvel ap\u00f3s [X]s.\"\n  };\n  \/\/ Anzeigename der Teilnahmesprache (Schluessel = Ecwid-Wert, deutsch)\n  const LANG_DISPLAY = {\n      \"Deutsch\": \"Alem\u00e3o\",\n      \"Englisch\": \"Ingl\u00eas\",\n      \"Spanisch\": \"Espanhol\",\n      \"Franz\u00f6sisch\": \"Franc\u00eas\",\n      \"Italienisch\": \"Italiano\",\n      \"Portugiesisch\": \"Portugu\u00eas\",\n      \"Arabisch\": \"\u00c1rabe\",\n      \"Hebr\u00e4isch\": \"Hebraico\",\n      \"Farsi\": \"Farsi\",\n      \"Georgisch\": \"Georgiano\",\n      \"Ukrainisch\": \"Ucraniano\",\n      \"Niederl\u00e4ndisch\": \"Neerland\u00eas\",\n      \"T\u00fcrkisch\": \"Turco\",\n      \"Russisch\": \"Russo\",\n      \"Chinesisch\": \"Chin\u00eas\",\n      \"Japanisch\": \"Japon\u00eas\",\n      \"Koreanisch\": \"Coreano\"\n  };\n  \/\/ Feste Laendernamen in der Landessprache (aus CLDR), damit die Liste in\n  \/\/ jedem Browser identisch ist \u2013 unabhaengig von der Intl-Datenlage.\n  const COUNTRY_NAMES = {\n      \"AD\": \"Andorra\",\n      \"AE\": \"Emirados \u00c1rabes Unidos\",\n      \"AF\": \"Afeganist\u00e3o\",\n      \"AG\": \"Ant\u00edgua e Barbuda\",\n      \"AL\": \"Alb\u00e2nia\",\n      \"AM\": \"Arm\u00eania\",\n      \"AO\": \"Angola\",\n      \"AR\": \"Argentina\",\n      \"AT\": \"\u00c1ustria\",\n      \"AU\": \"Austr\u00e1lia\",\n      \"AW\": \"Aruba\",\n      \"AZ\": \"Azerbaij\u00e3o\",\n      \"BA\": \"B\u00f3snia e Herzegovina\",\n      \"BB\": \"Barbados\",\n      \"BD\": \"Bangladesh\",\n      \"BE\": \"B\u00e9lgica\",\n      \"BF\": \"Burquina Faso\",\n      \"BG\": \"Bulg\u00e1ria\",\n      \"BH\": \"Barein\",\n      \"BI\": \"Burundi\",\n      \"BJ\": \"Benin\",\n      \"BN\": \"Brunei\",\n      \"BO\": \"Bol\u00edvia\",\n      \"BR\": \"Brasil\",\n      \"BS\": \"Bahamas\",\n      \"BT\": \"But\u00e3o\",\n      \"BW\": \"Botsuana\",\n      \"BY\": \"Bielorr\u00fassia\",\n      \"BZ\": \"Belize\",\n      \"CA\": \"Canad\u00e1\",\n      \"CD\": \"Congo - Kinshasa\",\n      \"CF\": \"Rep\u00fablica Centro-Africana\",\n      \"CG\": \"Rep\u00fablica do Congo\",\n      \"CH\": \"Su\u00ed\u00e7a\",\n      \"CI\": \"Costa do Marfim\",\n      \"CL\": \"Chile\",\n      \"CM\": \"Camar\u00f5es\",\n      \"CN\": \"China\",\n      \"CO\": \"Col\u00f4mbia\",\n      \"CR\": \"Costa Rica\",\n      \"CV\": \"Cabo Verde\",\n      \"CY\": \"Chipre\",\n      \"CZ\": \"Tch\u00e9quia\",\n      \"DE\": \"Alemanha\",\n      \"DJ\": \"Djibuti\",\n      \"DK\": \"Dinamarca\",\n      \"DM\": \"Dominica\",\n      \"DO\": \"Rep\u00fablica Dominicana\",\n      \"DZ\": \"Arg\u00e9lia\",\n      \"EC\": \"Equador\",\n      \"EE\": \"Est\u00f4nia\",\n      \"EG\": \"Egito\",\n      \"ES\": \"Espanha\",\n      \"ET\": \"Eti\u00f3pia\",\n      \"FI\": \"Finl\u00e2ndia\",\n      \"FJ\": \"Fiji\",\n      \"FM\": \"Micron\u00e9sia\",\n      \"FR\": \"Fran\u00e7a\",\n      \"GA\": \"Gab\u00e3o\",\n      \"GB\": \"Reino Unido\",\n      \"GB-SCT\": \"Esc\u00f3cia\",\n      \"GD\": \"Granada\",\n      \"GE\": \"Ge\u00f3rgia\",\n      \"GH\": \"Gana\",\n      \"GM\": \"G\u00e2mbia\",\n      \"GN\": \"Guin\u00e9\",\n      \"GQ\": \"Guin\u00e9 Equatorial\",\n      \"GR\": \"Gr\u00e9cia\",\n      \"GT\": \"Guatemala\",\n      \"GW\": \"Guin\u00e9-Bissau\",\n      \"GY\": \"Guiana\",\n      \"HK\": \"Hong Kong\",\n      \"HN\": \"Honduras\",\n      \"HR\": \"Cro\u00e1cia\",\n      \"HT\": \"Haiti\",\n      \"HU\": \"Hungria\",\n      \"ID\": \"Indon\u00e9sia\",\n      \"IE\": \"Irlanda\",\n      \"IL\": \"Israel\",\n      \"IN\": \"\u00cdndia\",\n      \"IQ\": \"Iraque\",\n      \"IR\": \"Ir\u00e3\",\n      \"IS\": \"Isl\u00e2ndia\",\n      \"IT\": \"It\u00e1lia\",\n      \"JM\": \"Jamaica\",\n      \"JO\": \"Jord\u00e2nia\",\n      \"JP\": \"Jap\u00e3o\",\n      \"KE\": \"Qu\u00eania\",\n      \"KG\": \"Quirguist\u00e3o\",\n      \"KH\": \"Camboja\",\n      \"KI\": \"Quiribati\",\n      \"KM\": \"Comores\",\n      \"KN\": \"S\u00e3o Crist\u00f3v\u00e3o e N\u00e9vis\",\n      \"KR\": \"Coreia do Sul\",\n      \"KW\": \"Kuwait\",\n      \"KZ\": \"Cazaquist\u00e3o\",\n      \"LA\": \"Laos\",\n      \"LB\": \"L\u00edbano\",\n      \"LC\": \"Santa L\u00facia\",\n      \"LI\": \"Liechtenstein\",\n      \"LK\": \"Sri Lanka\",\n      \"LR\": \"Lib\u00e9ria\",\n      \"LS\": \"Lesoto\",\n      \"LT\": \"Litu\u00e2nia\",\n      \"LU\": \"Luxemburgo\",\n      \"LV\": \"Let\u00f4nia\",\n      \"LY\": \"L\u00edbia\",\n      \"MA\": \"Marrocos\",\n      \"MD\": \"Mold\u00e1via\",\n      \"ME\": \"Montenegro\",\n      \"MG\": \"Madagascar\",\n      \"MH\": \"Ilhas Marshall\",\n      \"MK\": \"Maced\u00f4nia do Norte\",\n      \"ML\": \"Mali\",\n      \"MM\": \"Mianmar (Birm\u00e2nia)\",\n      \"MN\": \"Mong\u00f3lia\",\n      \"MO\": \"Macau\",\n      \"MR\": \"Maurit\u00e2nia\",\n      \"MT\": \"Malta\",\n      \"MU\": \"Maur\u00edcio\",\n      \"MV\": \"Maldivas\",\n      \"MW\": \"Malaui\",\n      \"MX\": \"M\u00e9xico\",\n      \"MY\": \"Mal\u00e1sia\",\n      \"MZ\": \"Mo\u00e7ambique\",\n      \"NA\": \"Nam\u00edbia\",\n      \"NE\": \"N\u00edger\",\n      \"NG\": \"Nig\u00e9ria\",\n      \"NI\": \"Nicar\u00e1gua\",\n      \"NL\": \"Pa\u00edses Baixos\",\n      \"NO\": \"Noruega\",\n      \"NP\": \"Nepal\",\n      \"NR\": \"Nauru\",\n      \"NZ\": \"Nova Zel\u00e2ndia\",\n      \"OM\": \"Om\u00e3\",\n      \"PA\": \"Panam\u00e1\",\n      \"PE\": \"Peru\",\n      \"PG\": \"Papua-Nova Guin\u00e9\",\n      \"PH\": \"Filipinas\",\n      \"PK\": \"Paquist\u00e3o\",\n      \"PL\": \"Pol\u00f4nia\",\n      \"PR\": \"Porto Rico\",\n      \"PS\": \"Territ\u00f3rios palestinos\",\n      \"PT\": \"Portugal\",\n      \"PW\": \"Palau\",\n      \"PY\": \"Paraguai\",\n      \"QA\": \"Catar\",\n      \"RO\": \"Rom\u00eania\",\n      \"RS\": \"S\u00e9rvia\",\n      \"RU\": \"R\u00fassia\",\n      \"RW\": \"Ruanda\",\n      \"SA\": \"Ar\u00e1bia Saudita\",\n      \"SB\": \"Ilhas Salom\u00e3o\",\n      \"SC\": \"Seicheles\",\n      \"SD\": \"Sud\u00e3o\",\n      \"SE\": \"Su\u00e9cia\",\n      \"SG\": \"Singapura\",\n      \"SI\": \"Eslov\u00eania\",\n      \"SK\": \"Eslov\u00e1quia\",\n      \"SL\": \"Serra Leoa\",\n      \"SM\": \"San Marino\",\n      \"SN\": \"Senegal\",\n      \"SO\": \"Som\u00e1lia\",\n      \"SR\": \"Suriname\",\n      \"SS\": \"Sud\u00e3o do Sul\",\n      \"ST\": \"S\u00e3o Tom\u00e9 e Pr\u00edncipe\",\n      \"SV\": \"El Salvador\",\n      \"SZ\": \"Essuat\u00edni\",\n      \"TD\": \"Chade\",\n      \"TG\": \"Togo\",\n      \"TH\": \"Tail\u00e2ndia\",\n      \"TJ\": \"Tadjiquist\u00e3o\",\n      \"TL\": \"Timor-Leste\",\n      \"TM\": \"Turcomenist\u00e3o\",\n      \"TN\": \"Tun\u00edsia\",\n      \"TO\": \"Tonga\",\n      \"TR\": \"Turquia\",\n      \"TT\": \"Trinidad e Tobago\",\n      \"TV\": \"Tuvalu\",\n      \"TW\": \"Taiwan\",\n      \"TZ\": \"Tanz\u00e2nia\",\n      \"UA\": \"Ucr\u00e2nia\",\n      \"UG\": \"Uganda\",\n      \"US\": \"Estados Unidos\",\n      \"UY\": \"Uruguai\",\n      \"UZ\": \"Uzbequist\u00e3o\",\n      \"VC\": \"S\u00e3o Vicente e Granadinas\",\n      \"VE\": \"Venezuela\",\n      \"VN\": \"Vietn\u00e3\",\n      \"VU\": \"Vanuatu\",\n      \"WS\": \"Samoa\",\n      \"XK\": \"Kosovo\",\n      \"YE\": \"I\u00eamen\",\n      \"ZA\": \"\u00c1frica do Sul\",\n      \"ZM\": \"Z\u00e2mbia\",\n      \"ZW\": \"Zimb\u00e1bue\"\n  };\n  \/\/ \u2500\u2500 Zusaetzliche Suchbegriffe (Aliasse) je Land \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Beeinflusst NUR die Suche, nicht den angezeigten Namen. Alles klein schreiben.\n  const COUNTRY_SEARCH_ALIASES = {\n      \"US\": [\"estados unidos\", \"estados unidos da am\u00e9rica\", \"eua\", \"usa\", \"america\", \"am\u00e9rica\", \"united states\", \"united states of america\"],\n      \"GB\": [\"reino unido\", \"gr\u00e3-bretanha\", \"gra-bretanha\", \"inglaterra\", \"uk\", \"united kingdom\", \"england\", \"great britain\", \"britain\"],\n      \"GB-SCT\": [\"esc\u00f3cia\", \"escocia\", \"scotland\"],\n      \"AE\": [\"emirados \u00e1rabes unidos\", \"emirados\", \"eau\", \"uae\", \"united arab emirates\", \"emirates\", \"dubai\"],\n      \"KR\": [\"coreia do sul\", \"cor\u00e9ia do sul\", \"coreia\", \"south korea\", \"korea\"],\n      \"NL\": [\"pa\u00edses baixos\", \"paises baixos\", \"holanda\", \"netherlands\", \"holland\"],\n      \"CH\": [\"su\u00ed\u00e7a\", \"suica\", \"switzerland\"],\n      \"DE\": [\"alemanha\", \"germany\", \"deutschland\"],\n      \"AT\": [\"\u00e1ustria\", \"austria\"],\n      \"CZ\": [\"tch\u00e9quia\", \"tchequia\", \"rep\u00fablica tcheca\", \"ch\u00e9quia\", \"czechia\", \"czech republic\"],\n      \"TR\": [\"turquia\", \"turkey\", \"t\u00fcrkiye\", \"turkiye\"],\n      \"CI\": [\"costa do marfim\", \"ivory coast\", \"cote d'ivoire\"],\n      \"MM\": [\"mianmar\", \"myanmar\", \"birm\u00e2nia\", \"birmania\", \"burma\"],\n      \"TL\": [\"timor-leste\", \"timor leste\", \"east timor\"],\n      \"SZ\": [\"essuat\u00edni\", \"essuatini\", \"suazil\u00e2ndia\", \"eswatini\", \"swaziland\"],\n      \"MK\": [\"maced\u00f4nia do norte\", \"macedonia do norte\", \"maced\u00f4nia\", \"macedonia\", \"north macedonia\"],\n      \"BY\": [\"bielorr\u00fassia\", \"bielorrussia\", \"belarus\"],\n      \"MD\": [\"mold\u00e1via\", \"moldavia\", \"moldova\"],\n      \"MA\": [\"marrocos\", \"morocco\"],\n      \"EG\": [\"egito\", \"egipto\", \"egypt\"],\n      \"GR\": [\"gr\u00e9cia\", \"grecia\", \"greece\"],\n      \"IT\": [\"it\u00e1lia\", \"italia\", \"italy\"],\n      \"ES\": [\"espanha\", \"spain\"],\n      \"FR\": [\"fran\u00e7a\", \"franca\", \"france\"],\n      \"PL\": [\"pol\u00f4nia\", \"polonia\", \"poland\"],\n      \"RU\": [\"r\u00fassia\", \"russia\", \"russian federation\"],\n      \"CN\": [\"china\"],\n      \"JP\": [\"jap\u00e3o\", \"japao\", \"japan\"],\n      \"IN\": [\"\u00edndia\", \"india\"],\n      \"BR\": [\"brasil\", \"brazil\"],\n      \"MX\": [\"m\u00e9xico\", \"mexico\"],\n      \"CA\": [\"canad\u00e1\", \"canada\"],\n      \"AU\": [\"austr\u00e1lia\", \"australia\"],\n      \"NZ\": [\"nova zel\u00e2ndia\", \"nova zelandia\", \"new zealand\"],\n      \"ZA\": [\"\u00e1frica do sul\", \"africa do sul\", \"south africa\"],\n      \"PT\": [\"portugal\"],\n      \"KP\": [\"north korea\"],\n      \"CV\": [\"cabo verde\", \"cape verde\"],\n      \"CD\": [\"dr congo\", \"drc\", \"congo kinshasa\"],\n      \"CG\": [\"congo brazzaville\"],\n      \"VA\": [\"vatican\", \"holy see\"],\n      \"LA\": [\"laos\"],\n      \"VN\": [\"vietnam\", \"viet nam\"],\n      \"IR\": [\"iran\", \"persia\"],\n      \"MO\": [\"macau\", \"macao\"],\n      \"HK\": [\"hong kong\"],\n      \"TW\": [\"taiwan\"],\n      \"GE\": [\"georgia\"]\n  };\n  const COUNTRIES = {\n    cat1: [\"CY\",\"CA\",\"FR\",\"FI\",\"BH\",\"AU\",\"AD\",\"SE\",\"DE\",\"SA\",\"AT\",\"BE\",\"HK\",\"MT\",\"IS\",\"SM\",\"NL\",\"DK\",\"TW\",\"AE\",\"US\",\"BN\",\"CH\",\"NO\",\"GY\",\"QA\",\"MO\",\"IE\",\"LU\",\"SG\",\"LI\",\"GB\",\"GB-SCT\"],\n    cat2: [\"KR\",\"ME\",\"CL\",\"TT\",\"MV\",\"UY\",\"BS\",\"OM\",\"SC\",\"MY\",\"PA\",\"TR\",\"LV\",\"GR\",\"KZ\",\"SK\",\"HU\",\"RU\",\"RO\",\"EE\",\"AW\",\"PT\",\"PR\",\"HR\",\"KW\",\"JP\",\"NZ\",\"PL\",\"IL\",\"ES\",\"LT\",\"SI\",\"CZ\",\"IT\"],\n    cat3: [\"BZ\",\"TN\",\"GT\",\"IQ\",\"ZA\",\"FJ\",\"EC\",\"LY\",\"ID\",\"VN\",\"BT\",\"DZ\",\"PE\",\"PW\",\"BW\",\"DM\",\"PY\",\"MD\",\"GQ\",\"MN\",\"VC\",\"IR\",\"GD\",\"EG\",\"CO\",\"SR\",\"TM\",\"BA\",\"BB\",\"BR\",\"AL\",\"AM\",\"GA\",\"MX\",\"AZ\",\"TH\",\"LC\",\"CN\",\"MK\",\"DO\",\"AG\",\"AR\",\"GE\",\"CR\",\"MU\",\"RS\",\"BY\",\"KN\",\"XK\",\"BG\"],\n    cat4: [\"UA\",\"BI\",\"SS\",\"CF\",\"YE\",\"MZ\",\"MW\",\"SO\",\"CD\",\"LR\",\"MG\",\"NE\",\"AF\",\"SD\",\"SB\",\"ML\",\"HT\",\"VU\",\"BF\",\"LS\",\"TD\",\"GW\",\"TG\",\"GM\",\"KI\",\"SL\",\"PG\",\"UG\",\"KM\",\"PS\",\"RW\",\"TZ\",\"ET\",\"ZM\",\"FM\",\"BJ\",\"GN\",\"TL\",\"MM\",\"SN\",\"CM\",\"TJ\",\"TV\",\"NP\",\"CG\",\"ST\",\"PK\",\"KE\",\"ZW\",\"MH\",\"HN\",\"TO\",\"CI\",\"WS\",\"GH\",\"VE\",\"KH\",\"MR\",\"KG\",\"NI\",\"NG\",\"DJ\",\"AO\",\"LA\",\"BD\",\"BO\",\"MA\",\"JO\",\"LB\",\"NR\",\"IN\",\"NA\",\"CV\",\"UZ\",\"PH\",\"SZ\",\"JM\",\"SV\",\"LK\"]\n  };\n  \/\/ \u2500\u2500 Ecwid-Optionsnamen und -werte: bleiben exakt deutsch wie im Shop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const OPT_COMM_LANG = \"In welcher Sprache nimmst Du teil?\";\n  const OPT_STATUS    = \"Trifft etwas davon auf Dich zu?\";\n  const STATUS_LABEL = {\n    paar:        \"Zu zweit (gleicher Haushalt)\",\n    schueler:    \"Sch\u00fcler:innen\",\n    student:     \"Student\",\n    wiederholer: \"Wiederholer\",\n    apponly:     \"Digitale Teilnahme (App)\"\n  };\n  \/\/ \u2500\u2500 Shadow DOM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const host = document.getElementById(\"sw-host-pt\");\n  const shadow = host.attachShadow({ mode: \"open\" });\n  const styleEl = document.createElement(\"style\");\n  styleEl.textContent = `\n    :host {\n      display: block;\n      --bg:           #F5FAF6;\n      --card:         #FFFFFF;\n      --ink:          #0C1E14;\n      --ink-muted:    #27703F;\n      --accent:       #0C1E14;\n      --accent-light: #E6F2E8;\n      --border:       #C8E0CE;\n      --radius:       16px;\n      --radius-sm:    10px;\n    }\n    @keyframes wiz-spin { to { transform: rotate(360deg); } }\n    .sw-root {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 20px; font-weight: 400; color: var(--ink);\n      background: var(--bg); padding: 32px 20px;\n      display: flex; align-items: flex-start; justify-content: center;\n    }\n    .sw-card {\n      background: var(--card); border: 1px solid var(--border);\n      border-radius: 24px; padding: 36px 32px;\n      width: 100%; max-width: 780px;\n      box-shadow: 0 4px 24px rgba(12,30,20,0.08); box-sizing: border-box;\n    }\n    @media (max-width: 480px) {\n      .sw-root { padding: 16px 10px; }\n      .sw-card { padding: 24px 16px; border-radius: 16px; }\n    }\n    .sw-progress { display: flex; gap: 8px; margin-bottom: 32px; }\n    .sw-progress-step { flex: 1; height: 4px; background: var(--border); border-radius: 999px; transition: background 0.35s; }\n    .sw-progress-step.active { background: var(--accent); }\n    .sw-progress-step.done   { background: var(--accent); opacity: 0.4; }\n    .sw-step-label { font-size: 12px; font-weight: 400; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: 10px; }\n    .sw-heading { font-size: 26px; font-weight: 500; line-height: 1.2; margin: 0 0 6px; color: var(--accent); letter-spacing: 0.01em; }\n    .sw-subtext { font-size: 18px; font-weight: 400; color: var(--ink-muted); margin: 0 0 28px; line-height: 1.6; }\n    .sw-label { display: block; font-size: 18px; font-weight: 700; margin-bottom: 6px; color: var(--ink); }\n    .sw-select, .sw-text-input {\n      width: 100%; padding: 13px 15px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg);\n      font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-select {\n      appearance: none;\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2327703F' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: right 15px center;\n      cursor: pointer;\n    }\n    .sw-select:focus, .sw-text-input:focus {\n      outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1);\n    }\n    .sw-text-input { margin-bottom: 14px; }\n    .sw-redirect { display: none; margin-top: 12px; padding: 18px 20px; border-radius: var(--radius-sm); background: #FFF8F0; border: 1px solid rgba(180,80,0,0.2); font-size: 17px; line-height: 1.8; color: var(--ink); }\n    .sw-redirect strong { display: block; margin-bottom: 8px; font-size: 17px; color: #7A3500; }\n    .sw-redirect a { color: #27703F; text-decoration: underline; }\n    .sw-infobox {\n      margin-top: 12px; padding: 15px 17px; border-radius: var(--radius-sm);\n      background: var(--accent-light); border: 1px solid rgba(12,30,20,0.15);\n      font-size: 18px; font-weight: 400; line-height: 1.5;\n    }\n    .sw-infobox-title {\n      font-weight: 700; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase;\n      color: var(--accent); margin-bottom: 3px;\n    }\n    .sw-divider { border: 0; border-top: 1px solid var(--border); margin: 30px 0 24px; }\n    .sw-choice-row { display: flex; gap: 10px; flex-wrap: wrap; }\n    .sw-choice-card {\n      flex: 1; min-width: 150px; padding: 16px 14px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      text-align: center; cursor: pointer; font-size: 17px; line-height: 1.3;\n      transition: all 0.15s; background: var(--bg); box-sizing: border-box;\n    }\n    .sw-choice-card:hover { border-color: var(--accent); }\n    .sw-choice-card.active { background: var(--accent-light); border-color: var(--accent); font-weight: 700; color: var(--accent); }\n    @media (max-width: 480px) { .sw-choice-card { min-width: 100%; } }\n    .sw-person-block { margin-bottom: 8px; }\n    .sw-person-title { font-weight: 700; font-size: 21px; color: var(--accent); margin-bottom: 16px; }\n    .sw-field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 0; }\n    @media (max-width: 480px) { .sw-field-grid { grid-template-columns: 1fr; } }\n    .sw-range-header { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 22px; }\n    .sw-range-header-label { font-weight: 700; font-size: 18px; }\n    .sw-amount-display { display: flex; align-items: baseline; gap: 3px; }\n    .sw-amount-display span { font-size: 18px; font-weight: 400; }\n    .sw-amount-input {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 36px; font-weight: 700; color: var(--ink);\n      border: 2px solid var(--border); background: var(--bg);\n      text-align: right; width: 132px; padding: 4px 12px;\n      outline: none; border-radius: var(--radius-sm);\n      transition: background 0.15s, color 0.15s, border-color 0.15s, box-shadow 0.15s;\n    }\n    .sw-amount-input:hover { border-color: var(--accent); background: var(--accent-light); }\n    .sw-amount-input:focus { border-color: var(--accent); background: var(--accent-light); color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    input[type=range].sw-range {\n      -webkit-appearance: none; width: 100%; height: 6px;\n      border-radius: 999px; background: var(--border); outline: none; cursor: pointer;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb {\n      -webkit-appearance: none; width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35);\n      cursor: pointer; transition: transform 0.15s, box-shadow 0.15s;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb:hover { transform: scale(1.08); box-shadow: 0 0 0 9px rgba(12,30,20,0.18), 0 3px 12px rgba(12,30,20,0.4); }\n    input[type=range].sw-range::-webkit-slider-thumb:active { transform: scale(1.12); }\n    input[type=range].sw-range::-moz-range-thumb {\n      width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      border: none; box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); cursor: pointer;\n    }\n    input[type=range].sw-range.sw-pulse::-webkit-slider-thumb { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    input[type=range].sw-range.sw-pulse::-moz-range-thumb    { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    @keyframes sw-thumb-pulse {\n      0%, 100% { box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); }\n      50%      { box-shadow: 0 0 0 15px rgba(12,30,20,0.05), 0 3px 10px rgba(12,30,20,0.35); }\n    }\n    .sw-range-wrap { position: relative; }\n    .sw-markers { position: relative; height: 56px; margin-bottom: 8px; margin-left: 18px; margin-right: 18px; }\n    .sw-marker {\n      position: absolute; transform: translateX(-50%);\n      display: flex; flex-direction: column; align-items: center; gap: 2px;\n      justify-content: flex-end; height: 100%; pointer-events: auto; cursor: pointer;\n    }\n    .sw-marker-tick { width: 1px; height: 10px; background: var(--border); flex-shrink: 0; }\n    .sw-marker.active .sw-marker-tick { background: var(--accent); opacity: 0.5; }\n    .sw-marker-label { font-size: 11px; font-weight: 400; color: var(--ink-muted); white-space: nowrap; line-height: 1.2; text-align: center; order: -2; }\n    .sw-marker-amount { font-size: 13px; font-weight: 700; color: var(--ink-muted); order: -1; }\n    .sw-marker.active .sw-marker-label, .sw-marker.active .sw-marker-amount { color: var(--accent); }\n    @media (max-width: 540px) {\n      .sw-markers { display: none; }\n      .sw-markers-mobile { display: flex !important; }\n    }\n    .sw-markers-mobile {\n      display: none; flex-direction: column; gap: 0;\n      margin: 12px 0 4px; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden;\n    }\n    .sw-marker-mobile {\n      display: flex; align-items: center; justify-content: space-between;\n      padding: 10px 14px; cursor: pointer; border-bottom: 1px solid var(--border);\n      transition: background 0.15s; font-family: 'Tinos', Georgia, serif;\n    }\n    .sw-marker-mobile:last-child { border-bottom: 0; }\n    .sw-marker-mobile:hover { background: var(--accent-light); }\n    .sw-marker-mobile.active { background: var(--accent-light); }\n    .sw-marker-mobile-label { font-size: 15px; font-weight: 400; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-label { color: var(--accent); font-weight: 700; }\n    .sw-marker-mobile-amount { font-size: 16px; font-weight: 700; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-amount { color: var(--accent); }\n    .sw-summary-box { padding: 18px 20px; background: var(--accent-light); border: 1px solid rgba(12,30,20,0.2); border-radius: var(--radius-sm); margin-top: 20px; }\n    .sw-summary-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; font-size: 16px; color: var(--ink); }\n    .sw-summary-row.sw-summary-discount { color: #8A1F1F; }\n    .sw-summary-row.sw-summary-total { border-top: 1px solid rgba(12,30,20,0.25); margin-top: 8px; padding-top: 12px; font-weight: 700; font-size: 22px; color: var(--accent); }\n    .sw-summary-person-label { font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-muted); margin: 14px 0 2px; }\n    .sw-summary-person-label:first-child { margin-top: 0; }\n    .sw-btn-row { display: flex; gap: 10px; margin-top: 24px; flex-wrap: wrap; }\n    .sw-btn { flex: 1; min-width: 140px; padding: 15px 17px; border-radius: var(--radius-sm); font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 700; cursor: pointer; transition: all 0.2s; border: 0; }\n    .sw-btn-primary { background: var(--accent); color: #fff; }\n    .sw-btn-primary:hover { background: #27703F; transform: translateY(-1px); }\n    .sw-btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }\n    .sw-btn-secondary { background: transparent; color: var(--ink); border: 1px solid var(--border); }\n    .sw-btn-secondary:hover { background: var(--bg); }\n    .sw-error { display: none; margin-top: 15px; padding: 13px 15px; border-radius: var(--radius-sm); background: #FFF3F3; border: 1px solid rgba(220,30,30,0.2); color: #8A1F1F; font-size: 18px; font-weight: 400; line-height: 1.5; white-space: pre-wrap; }\n    .wiz-spinner { display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.4); border-top-color: #fff; border-radius: 50%; animation: wiz-spin 0.7s linear infinite; vertical-align: middle; margin-right: 8px; }\n    .sw-country-search-wrap { position: relative; margin-bottom: 10px; }\n    .sw-country-search-icon { position: absolute; left: 18px; top: 50%; transform: translateY(-50%); color: var(--ink-muted); pointer-events: none; opacity: 0.5; }\n    .sw-country-search {\n      width: 100%; padding: 13px 15px 13px 54px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg); font-family: 'Tinos', Georgia, serif;\n      font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-country-search:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    .sw-country-list { max-height: 240px; overflow-y: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }\n    .sw-country-item { padding: 11px 15px; cursor: pointer; font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; display: flex; justify-content: space-between; align-items: center; transition: background 0.15s; border-bottom: 1px solid var(--border); }\n    .sw-country-item:last-child { border-bottom: 0; }\n    .sw-country-item:hover { background: var(--accent-light); }\n    .sw-country-item.selected { background: var(--accent-light); font-weight: 700; }\n    .sw-country-item-cat { font-size: 12px; color: var(--ink-muted); background: var(--border); padding: 2px 8px; border-radius: 999px; }\n    .sw-country-empty { padding: 15px; font-size: 18px; color: var(--ink-muted); text-align: center; }\n    .sw-step { display: none; }\n    .sw-step.active { display: block; }\n  `;\n  shadow.appendChild(styleEl);\n  const wrapper = document.createElement(\"div\");\n  wrapper.innerHTML = `\n    <div class=\"sw-root\">\n      <div class=\"sw-card\">\n        <div class=\"sw-progress\">\n          <div class=\"sw-progress-step\" id=\"sw-prog-1\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-2\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-3\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-4\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-5\"><\/div>\n        <\/div>\n        <!-- STEP 1 -->\n        <div class=\"sw-step active\" id=\"sw-step-welcome\">\n          <div class=\"sw-step-label\">Etapa 1 de 5<\/div>\n          <h2 class=\"sw-heading\">Bem-vindo(a)<\/h2>\n          <p class=\"sw-subtext\">Em poucos passos, voc\u00ea escolhe pa\u00eds, idioma, tipo de inscri\u00e7\u00e3o e contribui\u00e7\u00e3o \u2013 e segue direto para o checkout.<\/p>\n          <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-welcome-next\" style=\"width:100%;\">Pre\u00e7os &amp; Inscri\u00e7\u00e3o<\/button>\n        <\/div>\n        <!-- STEP 2 -->\n        <div class=\"sw-step\" id=\"sw-step-country\">\n          <div class=\"sw-step-label\">Etapa 2 de 5<\/div>\n          <h2 class=\"sw-heading\">Onde voc\u00ea mora?<\/h2>\n          <label class=\"sw-label\">Pa\u00eds<\/label>\n          <div class=\"sw-country-search-wrap\">\n            <svg class=\"sw-country-search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.35-4.35\"\/><\/svg>\n            <input type=\"text\" class=\"sw-country-search\" id=\"sw-country-search\" placeholder=\"Buscar pa\u00eds\u2026\" autocomplete=\"off\">\n          <\/div>\n          <div class=\"sw-country-list\" id=\"sw-country-list\"><\/div>\n          <input type=\"hidden\" id=\"sw-country\">\n          <div class=\"sw-infobox\" id=\"sw-catInfo\">\n            <div class=\"sw-infobox-title\">Categoria de pre\u00e7o<\/div>\n            <div id=\"sw-catText\">Selecione primeiro um pa\u00eds.<\/div>\n          <\/div>\n          <div class=\"sw-redirect\" id=\"sw-redirect-russia\">\n            <strong>Existe uma p\u00e1gina de inscri\u00e7\u00e3o pr\u00f3pria para participantes da R\u00fassia.<\/strong>\n            O nosso sistema de pagamento n\u00e3o est\u00e1 dispon\u00edvel na R\u00fassia. Por favor, inscreva-se ali:<br><br>\n            <a href=\"https:\/\/spiritual-activity.org\/ru\/anmeldung-basic-exercises\/\">Ir para a inscri\u00e7\u00e3o russa<\/a>\n          <\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-country-back\">Voltar<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-country-next\" disabled>Avan\u00e7ar<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 3 -->\n        <div class=\"sw-step\" id=\"sw-step-langform\">\n          <div class=\"sw-step-label\">Etapa 3 de 5<\/div>\n          <h2 class=\"sw-heading\">Idioma &amp; Tipo de Inscri\u00e7\u00e3o<\/h2>\n          <label class=\"sw-label\" for=\"sw-commLang\">Em qual idioma voc\u00ea vai participar?<\/label>\n          <select class=\"sw-select\" id=\"sw-commLang\">\n            <option value=\"\" selected disabled>Selecione\u2026<\/option>\n            <option value=\"Deutsch\">Alem\u00e3o<\/option>\n            <option value=\"Englisch\">Ingl\u00eas<\/option>\n            <option value=\"Spanisch\">Espanhol<\/option>\n            <option value=\"Franz\u00f6sisch\">Franc\u00eas<\/option>\n            <option value=\"Italienisch\">Italiano<\/option>\n            <option value=\"Portugiesisch\">Portugu\u00eas<\/option>\n            <option value=\"Arabisch\">\u00c1rabe<\/option>\n            <option value=\"Hebr\u00e4isch\">Hebraico<\/option>\n            <option value=\"Farsi\">Farsi<\/option>\n            <option value=\"Georgisch\">Georgiano<\/option>\n            <option value=\"Ukrainisch\">Ucraniano<\/option>\n            <option value=\"Niederl\u00e4ndisch\">Neerland\u00eas<\/option>\n            <option value=\"T\u00fcrkisch\">Turco<\/option>\n            <option value=\"Bulgarisch\">B\u00falgaro<\/option>\n            <option value=\"Russisch\">Russo<\/option>\n            <option value=\"Chinesisch\">Chin\u00eas<\/option>\n            <option value=\"Japanisch\">Japon\u00eas<\/option>\n            <option value=\"Koreanisch\">Coreano<\/option>\n          <\/select>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note\" style=\"display:none; margin-top:14px;\">\n            <div class=\"sw-infobox-title\">PARTICIPA\u00c7\u00c3O DIGITAL \u00b7 \u221235\u20ac<\/div>\n            <div id=\"sw-apponly-note-text\">Voc\u00ea est\u00e1 participando digitalmente. O desconto ser\u00e1 considerado automaticamente no resumo.<\/div>\n          <\/div>\n          <label class=\"sw-label\" style=\"margin-top:26px;\">Como voc\u00ea gostaria de se inscrever?<\/label>\n          <div class=\"sw-choice-row\" id=\"sw-form-choices\">\n            <div class=\"sw-choice-card active\" data-form=\"einzeln\">Individual<\/div>\n            <div class=\"sw-choice-card\" data-form=\"paar\">Em dupla<br><span style=\"font-size:13px; font-weight:400;\">(mesma resid\u00eancia)<\/span><\/div>\n            <div class=\"sw-choice-card\" data-form=\"gruppe\">Grupo<br><span style=\"font-size:13px; font-weight:400;\">(a partir de 4 pessoas)<\/span><\/div>\n          <\/div>\n          <div class=\"sw-infobox\" id=\"sw-gruppe-note\" style=\"display:none; margin-top:18px;\">\n            <div class=\"sw-infobox-title\">Inscri\u00e7\u00e3o em grupo<\/div>\n            <div>Ficamos felizes com o seu interesse. Na pr\u00f3xima p\u00e1gina voc\u00ea pode realizar a inscri\u00e7\u00e3o de grupo. Aten\u00e7\u00e3o: a inscri\u00e7\u00e3o de grupo est\u00e1 dispon\u00edvel apenas em alem\u00e3o e ingl\u00eas.<\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-langform\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-langform-back\">Voltar<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-langform-next\" disabled>Avan\u00e7ar<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-gruppe-redirect\" style=\"display:none;\">Continuar para a inscri\u00e7\u00e3o em grupo<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4A -->\n        <div class=\"sw-step\" id=\"sw-step-details-solo\">\n          <div class=\"sw-step-label\">Etapa 4 de 5<\/div>\n          <h2 class=\"sw-heading\">Algumas informa\u00e7\u00f5es sobre voc\u00ea<\/h2>\n          <p class=\"sw-subtext\">Alguma dessas op\u00e7\u00f5es se aplica a voc\u00ea? Isso nos ajuda a sugerir a contribui\u00e7\u00e3o adequada.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">PARTICIPA\u00c7\u00c3O DIGITAL \u00b7 \u221235\u20ac<\/div>\n            <div>Voc\u00ea est\u00e1 participando digitalmente. O desconto ser\u00e1 considerado automaticamente no resumo.<\/div>\n          <\/div>\n          <label class=\"sw-label\">Selecione<\/label>\n          <select class=\"sw-select\" id=\"sw-solo-status\">\n            <option value=\"\" disabled selected>Selecione\u2026<\/option>\n            <option value=\"normal\">Inscri\u00e7\u00e3o normal<\/option>\n            <option value=\"schueler\">Estudantes do ensino b\u00e1sico (\u221250%)<\/option>\n            <option value=\"student\">Em forma\u00e7\u00e3o\/gradua\u00e7\u00e3o (\u221225%)<\/option>\n            <option value=\"wiederholer\">Estou repetindo o curso com os exerc\u00edcios da alma (sem novo conjunto de cartas \u2212 30%)<\/option>\n          <\/select>\n          <div class=\"sw-error\" id=\"sw-error-details-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-solo-back\">Voltar<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-solo-next\" disabled>Avan\u00e7ar<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4B -->\n        <div class=\"sw-step\" id=\"sw-step-details-paar\">\n          <div class=\"sw-step-label\">Etapa 4 de 5<\/div>\n          <h2 class=\"sw-heading\">Dados de voc\u00eas dois<\/h2>\n          <p class=\"sw-subtext\">Insira os dados das duas pessoas. A segunda pessoa recebe automaticamente 50% de desconto.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-paar-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">PARTICIPA\u00c7\u00c3O DIGITAL \u00b7 \u221235\u20ac<\/div>\n            <div>Voc\u00eas est\u00e3o participando digitalmente. O desconto ser\u00e1 considerado automaticamente no resumo.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">Pessoa 1<\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">Nome<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-vorname\"><\/div>\n              <div><label class=\"sw-label\">Sobrenome<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">E-mail<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p1-email\">\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">Pessoa 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">Nome<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-vorname\"><\/div>\n              <div><label class=\"sw-label\">Sobrenome<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">E-mail<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p2-email\">\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-details-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-paar-back\">Voltar<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-paar-next\" disabled>Avan\u00e7ar<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5A -->\n        <div class=\"sw-step\" id=\"sw-step-amount-solo\">\n          <div class=\"sw-step-label\">Etapa 5 de 5<\/div>\n          <h2 class=\"sw-heading\">Escolher contribui\u00e7\u00e3o<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-solo\">Aqui voc\u00ea pode escolher a contribui\u00e7\u00e3o que for adequada para voc\u00ea.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-solo\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">PARTICIPA\u00c7\u00c3O DIGITAL \u00b7 \u221235\u20ac<\/div>\n            <div>Voc\u00ea est\u00e1 participando digitalmente. O desconto ser\u00e1 considerado automaticamente no resumo.<\/div>\n          <\/div>\n          <div class=\"sw-range-header\">\n            <div class=\"sw-range-header-label\">Seu valor<\/div>\n            <div class=\"sw-amount-display\">\n              <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-solo\" value=\"360\">\n              <span>\u20ac<\/span>\n            <\/div>\n          <\/div>\n          <div class=\"sw-range-wrap\">\n            <div class=\"sw-markers\" id=\"sw-markers-solo\"><\/div>\n            <input type=\"range\" class=\"sw-range\" id=\"sw-amount-solo\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n            <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-solo\"><\/div>\n          <\/div>\n          <p style=\"margin-top:18px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            Se voc\u00ea precisar de uma redu\u00e7\u00e3o financeira adicional, entre em contato conosco:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-solo\">\n            <div class=\"sw-summary-row\"><span>Contribui\u00e7\u00e3o selecionada<\/span><span id=\"sw-solo-chosen\">360\u20ac<\/span><\/div>\n            <div id=\"sw-solo-discounts\"><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-solo\" style=\"display:none;\"><span>Envio<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>Total<\/span><span><span id=\"sw-solo-total\">360<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-solo-back\">Voltar<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-solo\">Inscrever-se<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5B -->\n        <div class=\"sw-step\" id=\"sw-step-amount-paar\">\n          <div class=\"sw-step-label\">Etapa 5 de 5<\/div>\n          <h2 class=\"sw-heading\">Escolher contribui\u00e7\u00f5es<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-paar\">Cada pessoa escolhe sua pr\u00f3pria contribui\u00e7\u00e3o. A pessoa 2 recebe automaticamente 50% de desconto.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-paar\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">PARTICIPA\u00c7\u00c3O DIGITAL \u00b7 \u221235\u20ac<\/div>\n            <div>Voc\u00eas est\u00e3o participando digitalmente. O desconto ser\u00e1 considerado automaticamente no resumo.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p1-title\">Pessoa 1<\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">Contribui\u00e7\u00e3o<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p1\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p1\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p1\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p1\"><\/div>\n            <\/div>\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p2-title\">Pessoa 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">Contribui\u00e7\u00e3o<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p2\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p2\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p2\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p2\"><\/div>\n            <\/div>\n          <\/div>\n          <p style=\"margin-top:8px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            Se voc\u00eas precisarem de uma redu\u00e7\u00e3o financeira adicional, entrem em contato conosco:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-paar\">\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p1-label\">Pessoa 1<\/div>\n            <div class=\"sw-summary-row\"><span>Contribui\u00e7\u00e3o selecionada<\/span><span id=\"sw-p1-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p1-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>Subtotal<\/span><span id=\"sw-p1-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p2-label\">Pessoa 2<\/div>\n            <div class=\"sw-summary-row\"><span>Contribui\u00e7\u00e3o selecionada<\/span><span id=\"sw-p2-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p2-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>Subtotal<\/span><span id=\"sw-p2-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-paar\" style=\"display:none;\"><span>Envio<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>Total<\/span><span><span id=\"sw-paar-total\">0<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-paar-back\">Voltar<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-paar\">Ir para o checkout<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  `;\n  shadow.appendChild(wrapper);\n  const $ = (id) => shadow.getElementById(id);\n  const COUNTRY_TO_CAT = {};\n  Object.keys(COUNTRIES).forEach(cat => COUNTRIES[cat].forEach(code => COUNTRY_TO_CAT[code] = cat));\n  function getCountryName(code) {\n    if (COUNTRY_NAMES[code]) return COUNTRY_NAMES[code];\n    try { return new Intl.DisplayNames([\"pt\"], { type: \"region\" }).of(code) || code; }\n    catch { return code; }\n  }\n  function getCountryAliases(code) {\n    const list = [];\n    \/\/ Intl-Name als Fallback, falls er vom festen CLDR-Namen abweicht\n    if (COUNTRY_NAMES[code]) {\n      try {\n        const intlName = new Intl.DisplayNames([\"pt\"], { type: \"region\" }).of(code);\n        if (intlName && intlName.toLowerCase() !== COUNTRY_NAMES[code].toLowerCase()) {\n          list.push(intlName.toLowerCase());\n        }\n      } catch {}\n    }\n    (COUNTRY_SEARCH_ALIASES[code] || []).forEach(a => list.push(a.toLowerCase()));\n    return list;\n  }\n  function getAllCountriesSorted() {\n    const all = [];\n    [\"cat1\",\"cat2\",\"cat3\",\"cat4\"].forEach(cat => {\n      COUNTRIES[cat]\n        .map(code => ({ code, name: getCountryName(code), cat, aliases: getCountryAliases(code) }))\n        .sort((a, b) => a.name.localeCompare(b.name, \"pt\"))\n        .forEach(c => all.push(c));\n    });\n    return all;\n  }\n  function emptyPerson() {\n    return { vorname: \"\", nachname: \"\", email: \"\", wiederholer: false, statusType: \"\", amount: 0 };\n  }\n  const state = {\n    country: \"\", category: \"cat1\",\n    commLang: \"\", form: \"einzeln\",\n    persons: { solo: emptyPerson(), p1: emptyPerson(), p2: emptyPerson() }\n  };\n  function getPerson(key) { return state.persons[key] || state.persons.solo; }\n  function isAppOnly() {\n    const { category: cat, commLang: lang, country } = state;\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[country];\n      \/\/ Ausnahme (z.B. China) gilt nur, wenn auch die passende Sprache gewaehlt ist \u2013\n      \/\/ sonst kann kein physisches Kartenset verschickt werden.\n      if (!exceptionLang || lang !== exceptionLang) return true;\n    }\n    if (APP_ONLY_LANGS.has(lang)) return true;\n    if (lang === \"Russisch\" && country && country !== \"RU\") return true;\n    return false;\n  }\n\n  function isWiederholer(person) {\n    return !!person && (person.wiederholer || person.statusType === \"wiederholer\");\n  }\n\n  \/\/ Geht ueberhaupt ein Kartenset raus? Nur wenn die Teilnahme nicht rein digital\n  \/\/ ist UND mindestens eine Person ein neues Set braucht - Wiederholer bekommen\n  \/\/ keins. Steuert sowohl die Versandzeile in der Zusammenfassung als auch die\n  \/\/ Wahl des Ecwid-Produkts, damit beide nicht auseinanderlaufen koennen.\n  function hasPhysicalShipment(isPaar) {\n    if (isAppOnly()) return false;\n    return isPaar\n      ? !(isWiederholer(state.persons.p1) && isWiederholer(state.persons.p2))\n      : !isWiederholer(state.persons.solo);\n  }\n\n  \/\/ Ecwid haengt den Versand am Produkt fest, nicht am Warenkorb. Ohne physischen\n  \/\/ Versand muss deshalb das versandfreie Digital-Produkt in den Warenkorb, sonst\n  \/\/ schlaegt der Shop trotzdem Versandkosten auf.\n  function getParticipationProductId(isPaar) {\n    return hasPhysicalShipment(isPaar) ? PRODUCTS[state.category] : PRODUCTS_APPONLY[state.category];\n  }\n  function updateAppOnlyUI() {\n    const appOnly = state.commLang ? isAppOnly() : false;\n    let reason = \"\";\n    if (appOnly) {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[state.country];\n      if ((state.category === \"cat3\" || state.category === \"cat4\") && exceptionLang) {\n        reason = TXT.reasonException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang);\n      } else if (state.category === \"cat3\" || state.category === \"cat4\") {\n        reason = TXT.reasonRegion;\n      } else if (state.commLang === \"Russisch\") {\n        reason = TXT.reasonRussian;\n      } else {\n        reason = TXT.reasonLanguage;\n      }\n    }\n    const noteIds = [\"sw-apponly-note\",\"sw-apponly-note-step4\",\"sw-apponly-note-paar-step4\",\"sw-apponly-note-step5-solo\",\"sw-apponly-note-step5-paar\"];\n    noteIds.forEach(id => {\n      const el = $(id);\n      if (!el) return;\n      el.style.display = appOnly ? \"block\" : \"none\";\n      const textDiv = el.querySelector(\"div:not(.sw-infobox-title)\");\n      if (textDiv && reason) textDiv.textContent = reason;\n    });\n  }\n  const STEP_CONTAINER = {\n    1: () => \"sw-step-welcome\",\n    2: () => \"sw-step-country\",\n    3: () => \"sw-step-langform\",\n    4: () => state.form === \"paar\" ? \"sw-step-details-paar\" : \"sw-step-details-solo\",\n    5: () => state.form === \"paar\" ? \"sw-step-amount-paar\" : \"sw-step-amount-solo\"\n  };\n  function showStep(n) {\n    shadow.querySelectorAll(\".sw-step\").forEach(el => el.classList.remove(\"active\"));\n    $(STEP_CONTAINER[n]()).classList.add(\"active\");\n    for (let i = 1; i <= 5; i++) {\n      const prog = $(\"sw-prog-\" + i);\n      if (!prog) continue;\n      if (i < n) prog.className = \"sw-progress-step done\";\n      else if (i === n) prog.className = \"sw-progress-step active\";\n      else prog.className = \"sw-progress-step\";\n    }\n    if (n === 5) {\n      const sliderIds = state.form === \"paar\" ? [\"sw-amount-p1\",\"sw-amount-p2\"] : [\"sw-amount-solo\"];\n      sliderIds.forEach(sid => { const el = $(sid); if (el) el.classList.add(\"sw-pulse\"); });\n      refreshSummary();\n    }\n  }\n  function setNextEnabled(id, enabled) {\n    const b = $(id);\n    if (!b) return;\n    b.disabled = !enabled;\n    b.style.opacity = enabled ? \"1\" : \".4\";\n    b.style.cursor  = enabled ? \"pointer\" : \"not-allowed\";\n  }\n  function showErrorIn(id, msg) { const el=$(id); el.style.display=\"block\"; el.textContent=msg; }\n  function clearErrorIn(id)     { const el=$(id); el.style.display=\"none\";  el.textContent=\"\"; }\n  function setCheckoutLoading(btnId, loading) {\n    const btn = $(btnId);\n    \/\/ Nach dem Danke-Bildschirm existiert der Button nicht mehr \u2013 dann nichts tun.\n    if (!btn) return;\n    const overlay = document.getElementById(OVERLAY_ID);\n    if (!btn.dataset.defaultLabel) btn.dataset.defaultLabel = btn.textContent;\n    if (loading) {\n      btn.disabled = true;\n      btn.innerHTML = '<span class=\"wiz-spinner\"><\/span> ' + TXT.preparing;\n      btn.style.opacity = \".8\";\n      if (overlay) overlay.style.display = \"flex\";\n    } else {\n      btn.disabled = false;\n      btn.textContent = btn.dataset.defaultLabel;\n      btn.style.opacity = \"1\";\n      if (overlay) overlay.style.display = \"none\";\n    }\n  }\n  function showThankYou() {\n    const card = shadow.querySelector(\".sw-card\");\n    if (!card) return;\n    card.innerHTML = `\n      <div style=\"text-align:center; padding:20px 0;\">\n        <div style=\"font-size:56px; margin-bottom:16px; color:#27703F;\">\u2713<\/div>\n        <h2 style=\"font-family:'Tinos',Georgia,serif; font-size:26px; font-weight:500; margin:0 0 12px; color:#0C1E14;\">${TXT.thanksTitle}<\/h2>\n        <p style=\"font-family:'Tinos',Georgia,serif; font-size:18px; color:#27703F; line-height:1.6; margin:0 0 24px;\">${TXT.thanksLine1}${TXT.thanksLine2 ? \"<br>\" + TXT.thanksLine2 : \"\"}<\/p>\n        <div style=\"display:flex; justify-content:center;\">\n          <div style=\"width:36px; height:36px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:wiz-spin 0.8s linear infinite;\"><\/div>\n        <\/div>\n      <\/div>`;\n  }\n  function getAnchors(cat) {\n    const r = RANGES[cat], o = ORIENTIERUNG[cat];\n    return [[0,r.min],[25,o.reduced],[50,o.base],[75,o.support],[100,r.max]];\n  }\n  function normToEuro(norm, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      if (norm <= a[i+1][0]) {\n        const t = (norm - a[i][0]) \/ (a[i+1][0] - a[i][0]);\n        return Math.round(a[i][1] + t * (a[i+1][1] - a[i][1]));\n      }\n    }\n    return a[a.length-1][1];\n  }\n  function euroToNorm(euro, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      const lo = a[i][1], hi = a[i+1][1];\n      if (euro <= hi) {\n        if (hi === lo) return a[i+1][0];\n        return a[i][0] + (euro - lo) \/ (hi - lo) * (a[i+1][0] - a[i][0]);\n      }\n    }\n    return 100;\n  }\n  function getMarkerDefs(cat) {\n    const o = ORIENTIERUNG[cat];\n    return [\n      { value: o.reduced, label: TXT.markerReduced, normPct: 25 },\n      { value: o.base,    label: TXT.markerBase,    normPct: 50 },\n      { value: o.support, label: TXT.markerSupport, normPct: 75 }\n    ];\n  }\n  function renderMarkers(personKey) {\n    const cat = state.category;\n    const person = getPerson(personKey);\n    const markers = getMarkerDefs(cat);\n    const container = $(`sw-markers-${personKey}`);\n    container.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker\" + (person.amount === m.value ? \" active\" : \"\");\n      div.style.left = m.normPct + \"%\";\n      div.innerHTML = `<div class=\"sw-marker-tick\"><\/div><div class=\"sw-marker-amount\">${m.value}\u20ac<\/div><div class=\"sw-marker-label\">${m.label}<\/div>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      container.appendChild(div);\n    });\n    const mobileContainer = $(`sw-markers-mobile-${personKey}`);\n    mobileContainer.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker-mobile\" + (person.amount === m.value ? \" active\" : \"\");\n      div.innerHTML = `<span class=\"sw-marker-mobile-label\">${m.label}<\/span><span class=\"sw-marker-mobile-amount\">${m.value}\u20ac<\/span>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      mobileContainer.appendChild(div);\n    });\n  }\n  function selectMarkerValue(personKey, value) {\n    const person = getPerson(personKey);\n    $(`sw-amount-${personKey}`).value = euroToNorm(value, state.category);\n    person.amount = value;\n    $(`sw-amountInput-${personKey}`).value = value;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromSlider(personKey) {\n    const person = getPerson(personKey);\n    const norm = Number($(`sw-amount-${personKey}`).value);\n    person.amount = normToEuro(norm, state.category);\n    $(`sw-amountInput-${personKey}`).value = person.amount;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromInput(personKey) {\n    const person = getPerson(personKey);\n    const r = RANGES[state.category];\n    let val = Number($(`sw-amountInput-${personKey}`).value);\n    if (isNaN(val)) val = r.min;\n    val = Math.min(r.max, Math.max(r.min, val));\n    person.amount = val;\n    $(`sw-amountInput-${personKey}`).value = val;\n    $(`sw-amount-${personKey}`).value = euroToNorm(val, state.category);\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function wireAmountControl(personKey) {\n    $(`sw-amount-${personKey}`).addEventListener(\"input\", () => updateAmountFromSlider(personKey));\n    $(`sw-amountInput-${personKey}`).addEventListener(\"input\", () => {\n      const v = Number($(`sw-amountInput-${personKey}`).value);\n      if (!isNaN(v)) { getPerson(personKey).amount = v; refreshSummary(); }\n    });\n    $(`sw-amountInput-${personKey}`).addEventListener(\"change\", () => updateAmountFromInput(personKey));\n  }\n  function applyRangeForForm() {\n    const cat = state.category;\n    const ori = ORIENTIERUNG[cat];\n    const hint = TXT.hintLong;\n    if (state.form === \"paar\") {\n      [\"p1\",\"p2\"].forEach(key => {\n        const person = getPerson(key);\n        person.amount = ori.base;\n        $(`sw-amount-${key}`).value = 50;\n        $(`sw-amountInput-${key}`).value = ori.base;\n      });\n      const p1name = state.persons.p1.vorname;\n      const p2name = state.persons.p2.vorname;\n      $(\"sw-amount-p1-title\").innerHTML = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-amount-p2-title\").innerHTML = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) +\n        ' <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">' + TXT.p2Badge + '<\/span>';\n      $(\"sw-summary-p1-label\").textContent = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-summary-p2-label\").textContent = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) + \" \" + TXT.p2Badge;\n      $(\"sw-rangeHint-paar\").textContent = hint;\n      renderMarkers(\"p1\"); renderMarkers(\"p2\");\n    } else {\n      const person = state.persons.solo;\n      person.amount = ori.base;\n      $(\"sw-amount-solo\").value = 50;\n      $(\"sw-amountInput-solo\").value = ori.base;\n      $(\"sw-rangeHint-solo\").textContent = hint;\n      renderMarkers(\"solo\");\n    }\n    refreshSummary();\n  }\n  \/\/ \u2500\u2500 Rabattlogik \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Zuerst wird der fixe App-Rabatt vom gewaehlten Betrag abgezogen, danach der\n  \/\/ prozentuale Rabatt auf den verbleibenden Betrag. Beide werden separat gezeigt.\n  function getPercentDiscountCandidate(person, isPaarP2) {\n    if (isPaarP2) return { value: DISCOUNT_PAAR_P2, label: TXT.discP2 };\n    const candidates = [];\n    if (isWiederholer(person)) candidates.push({ value: DISCOUNT_WIEDERHOLER, label: TXT.discWiederholer });\n    if (person.statusType === \"schueler\") candidates.push({ value: DISCOUNT_SCHUELER, label: TXT.discSchueler });\n    if (person.statusType === \"student\")  candidates.push({ value: DISCOUNT_STUDENT,  label: TXT.discStudent });\n    if (!candidates.length) return null;\n    return candidates.reduce((best, c) => c.value > best.value ? c : best, candidates[0]);\n  }\n  function getDiscounts(person, isPaarP2) {\n    const discounts = [];\n    let remaining = Math.round(person.amount);\n    if (isAppOnly()) {\n      const appDisc = Math.min(DISCOUNT_APP_FIXED, remaining);\n      discounts.push({ type: \"fixed\", value: DISCOUNT_APP_FIXED, label: TXT.discApp, amountEuro: appDisc });\n      remaining -= appDisc;\n    }\n    const pct = getPercentDiscountCandidate(person, isPaarP2);\n    if (pct) {\n      const pctDisc = Math.round(remaining * pct.value);\n      discounts.push({ type: \"pct\", value: pct.value, label: pct.label, amountEuro: pctDisc });\n      remaining -= pctDisc;\n    }\n    return { discounts, finalAmount: Math.max(0, remaining) };\n  }\n  function buildStatusOptionValue(person, isPaar) {\n    const vals = [];\n    if (isPaar) vals.push(STATUS_LABEL.paar);\n    if (isAppOnly()) vals.push(STATUS_LABEL.apponly);\n    if (isWiederholer(person)) vals.push(STATUS_LABEL.wiederholer);\n    if (person.statusType === \"schueler\") vals.push(STATUS_LABEL.schueler);\n    if (person.statusType === \"student\")  vals.push(STATUS_LABEL.student);\n    \/\/ Ecwid erwartet fuer Checkbox-Optionen ein Array, nicht einen kommaseparierten String\n    return vals;\n  }\n  function refreshSummary() {\n    if (state.form === \"paar\") refreshSummaryPaar();\n    else refreshSummarySolo();\n  }\n  function renderDiscountRows(containerId, discounts) {\n    const container = $(containerId);\n    container.innerHTML = \"\";\n    discounts.forEach(d => {\n      const row = document.createElement(\"div\");\n      row.className = \"sw-summary-row sw-summary-discount\";\n      const pctStr = d.type === \"fixed\" ? `\u2212${d.amountEuro}\u20ac` : `\u2212${Math.round(d.value * 100)}%`;\n      row.innerHTML = `<span>${d.label} (${pctStr})<\/span><span>\u2212${d.amountEuro}\u20ac<\/span>`;\n      container.appendChild(row);\n    });\n  }\n  function refreshSummarySolo() {\n    const p = state.persons.solo;\n    const { discounts, finalAmount } = getDiscounts(p, false);\n    $(\"sw-solo-chosen\").textContent = Math.round(p.amount) + \"\u20ac\";\n    renderDiscountRows(\"sw-solo-discounts\", discounts);\n    const shipLine = $(\"sw-shipping-line-solo\");\n    const shippingSolo = (hasPhysicalShipment(false) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingSolo ? \"flex\" : \"none\";\n    $(\"sw-solo-total\").textContent = finalAmount + shippingSolo;\n  }\n  function refreshSummaryPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    function fill(prefix, person, isPaarP2) {\n      const { discounts, finalAmount } = getDiscounts(person, isPaarP2);\n      $(`sw-${prefix}-chosen`).textContent = Math.round(person.amount) + \"\u20ac\";\n      renderDiscountRows(`sw-${prefix}-discounts`, discounts);\n      $(`sw-${prefix}-subtotal`).textContent = finalAmount + \"\u20ac\";\n      return finalAmount;\n    }\n    const f1 = fill(\"p1\", p1, false);\n    const f2 = fill(\"p2\", p2, true);\n    const shipLine = $(\"sw-shipping-line-paar\");\n    const shippingPaar = (hasPhysicalShipment(true) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingPaar ? \"flex\" : \"none\";\n    $(\"sw-paar-total\").textContent = f1 + f2 + shippingPaar;\n  }\n  function renderCountryList(filter) {\n    const list = $(\"sw-country-list\");\n    const q = (filter || \"\").toLowerCase().trim();\n    const filtered = q\n      ? getAllCountriesSorted().filter(c =>\n          c.name.toLowerCase().includes(q) ||\n          (c.aliases || []).some(a => a.includes(q))\n        )\n      : getAllCountriesSorted();\n    list.innerHTML = \"\";\n    if (!filtered.length) { list.innerHTML = '<div class=\"sw-country-empty\">' + TXT.noCountry + '<\/div>'; return; }\n    filtered.forEach(c => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-country-item\" + (state.country === c.code ? \" selected\" : \"\");\n      div.dataset.code = c.code;\n      div.innerHTML = `<span>${c.name}<\/span><span class=\"sw-country-item-cat\">${TXT.catBadge}${c.cat.replace(\"cat\",\"\")}<\/span>`;\n      div.addEventListener(\"click\", () => selectCountry(c.code, c.cat, c.name));\n      list.appendChild(div);\n    });\n  }\n  function selectCountry(code, cat, name) {\n    state.country  = code;\n    state.category = cat;\n    $(\"sw-country\").value = code;\n    $(\"sw-country-search\").value = name;\n    $(\"sw-country-list\").innerHTML = \"\";\n    const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[code];\n    let suffix = \"\";\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      suffix = exceptionLang\n        ? \" \" + TXT.catSuffixException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang)\n        : \" \" + TXT.catSuffixDigital;\n    }\n    $(\"sw-catText\").textContent = (TXT.catLabels[cat] || cat) + suffix;\n    \/\/ Ecwid wickelt in Russland keine Zahlungen ab. Wer Russland waehlt, wird\n    \/\/ deshalb auf die russische Anmeldeseite verwiesen - die laeuft ueber n8n\n    \/\/ und Tochka statt ueber den Shop. Der russische Wizard verweist umgekehrt\n    \/\/ zurueck, sobald dort ein anderes Land gewaehlt wird.\n    const nachRussland = (code === \"RU\");\n    $(\"sw-redirect-russia\").style.display = nachRussland ? \"block\" : \"none\";\n    $(\"sw-catInfo\").style.display         = nachRussland ? \"none\"  : \"block\";\n    setNextEnabled(\"sw-btn-country-next\", !nachRussland);\n    updateAppOnlyUI();\n  }\n  function ensureEcwidReady(timeoutMs = 12000) {\n    return new Promise((resolve, reject) => {\n      function isReady() {\n        return window.Ecwid && window.Ecwid.Cart &&\n               typeof window.Ecwid.Cart.addProduct === \"function\" &&\n               typeof window.Ecwid.Cart.clear === \"function\";\n      }\n      if (isReady()) return resolve(true);\n      let resolved = false;\n      function done() { if (!resolved) { resolved = true; setTimeout(() => resolve(true), 200); } }\n      if (window.Ecwid) { try { window.Ecwid.OnAPILoaded.add(done); } catch(e) {} }\n      const start = Date.now();\n      const t = setInterval(() => {\n        if (isReady()) { clearInterval(t); done(); }\n        else if (Date.now() - start > timeoutMs) {\n          clearInterval(t);\n          if (!resolved) { resolved = true; reject(new Error(fillPlaceholder(TXT.errEcwid, timeoutMs\/1000))); }\n        }\n      }, 200);\n    });\n  }\n  function clearCartAsync() { return new Promise(r => Ecwid.Cart.clear(() => r(true))); }\n  function addProductAsync(payload, timeoutMs = 4000) {\n    return new Promise((resolve, reject) => {\n      let done = false;\n      const t = setTimeout(() => { if (!done) { done = true; resolve({ product:null, cart:null, timedOut:true }); } }, timeoutMs);\n      Ecwid.Cart.addProduct(payload, function(success, product, cart, error) {\n        if (done) return;\n        done = true; clearTimeout(t);\n        if (success) resolve({ product, cart, timedOut:false });\n        else reject(new Error((error || TXT.errProduct) + \" | Payload: \" + JSON.stringify(payload)));\n      });\n    });\n  }\n  function goToCart() { window.location.href = SHOP_CART_URL; }\n  function buildN8nPayload() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const d1 = getDiscounts(p1, false);\n    const d2 = getDiscounts(p2, true);\n    return {\n      sprache: state.commLang, land: state.country, kategorie: state.category, appOnly: isAppOnly(),\n      person1: { vorname: p1.vorname, nachname: p1.nachname, email: p1.email },\n      person2: { vorname: p2.vorname, nachname: p2.nachname, email: p2.email },\n      betraege: {\n        person1: { gewaehlt: Math.round(p1.amount), rabatte: d1.discounts, endbetrag: d1.finalAmount },\n        person2: { gewaehlt: Math.round(p2.amount), rabatte: d2.discounts, endbetrag: d2.finalAmount },\n        gesamt: d1.finalAmount + d2.finalAmount\n      },\n      timestamp: new Date().toISOString()\n    };\n  }\n  async function sendToN8n(payload) {\n    if (!N8N_WEBHOOK_URL || N8N_WEBHOOK_URL.indexOf(\"HIER_\") === 0) {\n      throw new Error(\"Die n8n-Webhook-URL ist im Code noch nicht eingetragen.\");\n    }\n    let res;\n    try {\n      res = await fetch(N8N_WEBHOOK_URL, { method:\"POST\", headers:{\"Content-Type\":\"application\/json\"}, body:JSON.stringify(payload) });\n    } catch (e) {\n      throw new Error(TXT.errNetwork);\n    }\n    if (!res.ok) throw new Error(fillPlaceholder(TXT.errSubmit, res.status));\n    return true;\n  }\n  async function goCheckoutSolo() {\n    clearErrorIn(\"sw-error-amount-solo\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-solo\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-solo\", TXT.errLang);\n    const p = state.persons.solo;\n    const finalAmount = getDiscounts(p, false).finalAmount;\n    const participationProductId = getParticipationProductId(false);\n    setCheckoutLoading(\"sw-btn-checkout-solo\", true);\n    try {\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const statusValue = buildStatusOptionValue(p, false);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: finalAmount, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-solo\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-solo\", false);\n    }\n  }\n  async function goCheckoutPaar() {\n    clearErrorIn(\"sw-error-amount-paar\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-paar\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-paar\", TXT.errLang);\n    if (!validateDetailsPaar()) return showErrorIn(\"sw-error-amount-paar\", TXT.errPaarFields);\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const participationProductId = getParticipationProductId(true);\n    setCheckoutLoading(\"sw-btn-checkout-paar\", true);\n    try {\n      const payload = buildN8nPayload();\n      await sendToN8n(payload);\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const total = getDiscounts(p1, false).finalAmount + getDiscounts(p2, true).finalAmount;\n      const statusValue = buildStatusOptionValue(p1, true);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: total, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-paar\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-paar\", false);\n    }\n  }\n  function validateLangform() {\n    const ok = !!state.commLang && !!state.form && state.form !== \"gruppe\";\n    setNextEnabled(\"sw-btn-langform-next\", ok);\n  }\n  function validateDetailsSolo() {\n    const ok = !!$(\"sw-solo-status\").value;\n    setNextEnabled(\"sw-btn-details-solo-next\", ok);\n    return ok;\n  }\n  function validateDetailsPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const emailOk = s => \/\\S+@\\S+\\.\\S+\/.test(s || \"\");\n    const ok = !!(p1.vorname && p1.vorname.trim()) && !!(p1.nachname && p1.nachname.trim()) && emailOk(p1.email) &&\n               !!(p2.vorname && p2.vorname.trim()) && !!(p2.nachname && p2.nachname.trim()) && emailOk(p2.email);\n    setNextEnabled(\"sw-btn-details-paar-next\", ok);\n    return ok;\n  }\n  function bindNameFields(key) {\n    [\"vorname\",\"nachname\",\"email\"].forEach(f => {\n      $(`sw-${key}-${f}`).addEventListener(\"input\", e => {\n        getPerson(key)[f] = e.target.value;\n        validateDetailsPaar();\n      });\n    });\n  }\n  $(\"sw-btn-welcome-next\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-country-back\").addEventListener(\"click\", () => showStep(1));\n  $(\"sw-btn-country-next\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-country-search\").addEventListener(\"input\",  e => renderCountryList(e.target.value));\n  $(\"sw-country-search\").addEventListener(\"focus\",  () => renderCountryList($(\"sw-country-search\").value));\n  shadow.addEventListener(\"click\", e => {\n    if (!e.target.closest(\"#sw-country-list\") && !e.target.closest(\"#sw-country-search\")) {\n      $(\"sw-country-list\").innerHTML = \"\";\n    }\n  });\n  $(\"sw-commLang\").addEventListener(\"change\", e => {\n    state.commLang = e.target.value;\n    validateLangform();\n    updateAppOnlyUI();\n    refreshSummary();\n  });\n  shadow.querySelectorAll(\".sw-choice-card\").forEach(card => {\n    card.addEventListener(\"click\", () => {\n      state.form = card.dataset.form;\n      shadow.querySelectorAll(\".sw-choice-card\").forEach(c => c.classList.toggle(\"active\", c === card));\n      const isGruppe = state.form === \"gruppe\";\n      $(\"sw-gruppe-note\").style.display = isGruppe ? \"block\" : \"none\";\n      $(\"sw-btn-langform-next\").style.display   = isGruppe ? \"none\" : \"inline-block\";\n      $(\"sw-btn-gruppe-redirect\").style.display = isGruppe ? \"inline-block\" : \"none\";\n      clearErrorIn(\"sw-error-langform\");\n      validateLangform();\n    });\n  });\n  $(\"sw-btn-gruppe-redirect\").addEventListener(\"click\", () => { window.location.href = getGroupRedirectUrl(); });\n  $(\"sw-btn-langform-back\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-langform-next\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-details-solo-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-solo-status\").addEventListener(\"change\", e => {\n    const val = e.target.value;\n    const person = state.persons.solo;\n    person.statusType  = val;\n    person.wiederholer = val === \"wiederholer\";\n    clearErrorIn(\"sw-error-details-solo\");\n    validateDetailsSolo();\n  });\n  $(\"sw-btn-details-solo-next\").addEventListener(\"click\", () => {\n    if (validateDetailsSolo()) { applyRangeForForm(); showStep(5); }\n    else showErrorIn(\"sw-error-details-solo\", TXT.errSelectFirst);\n  });\n  $(\"sw-btn-details-paar-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-btn-details-paar-next\").addEventListener(\"click\", () => {\n    if (validateDetailsPaar()) { applyRangeForForm(); showStep(5); }\n  });\n  $(\"sw-btn-amount-solo-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-amount-paar-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-checkout-solo\").addEventListener(\"click\", goCheckoutSolo);\n  $(\"sw-btn-checkout-paar\").addEventListener(\"click\", goCheckoutPaar);\n  bindNameFields(\"p1\");\n  bindNameFields(\"p2\");\n  wireAmountControl(\"solo\");\n  wireAmountControl(\"p1\");\n  wireAmountControl(\"p2\");\n  showStep(1);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2fa0e57 e-flex e-con-boxed e-con e-parent\" data-id=\"2fa0e57\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f079944 elementor-widget elementor-widget-html\" data-id=\"f079944\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n  .ecwid-ProductBrowser,\n  .ecwid-productbrowser,\n  div[id^=\"my-store\"],\n  .ecwid:not(#sw-host-nl) {\n    visibility: hidden !important;\n    height: 0 !important;\n    max-height: 0 !important;\n    overflow: hidden !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    position: absolute !important;\n    pointer-events: none !important;\n  }\n<\/style>\n<div id=\"sw-overlay-nl\" style=\"display:none; position:fixed; inset:0; background:rgba(245,250,246,0.92); z-index:99999; flex-direction:column; align-items:center; justify-content:center; gap:20px;\">\n  <div style=\"width:52px; height:52px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:sw-spin-nl 0.8s linear infinite;\"><\/div>\n  <div style=\"font-family:'Tinos',Georgia,serif; font-size:22px; color:#27703F;\">Checkout wordt geladen\u2026<\/div>\n<\/div>\n<style>\n  @keyframes sw-spin-nl { to { transform: rotate(360deg); } }\n<\/style>\n<div id=\"sw-host-nl\"><\/div>\n<script>\n(function () {\n\n  \/\/ \u2500\u2500 Sprach-Guard: Skript bricht sofort ab, wenn die URL nicht zu NL passt \u2500\u2500\n  const _pathMatch = window.location.pathname.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n  const _pageLang = _pathMatch ? _pathMatch[1] : \"de\";\n  if (_pageLang !== \"nl\") { \n    document.getElementById(\"sw-host-nl\")?.remove();\n    document.getElementById(\"sw-overlay-nl\")?.remove();\n    return; \n  }\n\n  const OVERLAY_ID    = \"sw-overlay-nl\";\n  const SHOP_CART_URL = \"https:\/\/spiritual-activity.org\/nl\/store\/cart\";\n  const N8N_WEBHOOK_URL = \"https:\/\/n8n.spiritual-activity.org\/webhook\/registration-be\";\n\n  function getGroupRedirectUrl() {\n    const path = window.location.pathname;\n    \/\/ Erkennt Sprachpraefixe wie \/en\/, \/es\/, \/it\/, \/ru\/ am Anfang des Pfads.\n    \/\/ Deutsch ist die Standardsprache ohne Praefix.\n    const match = path.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n    const langPrefix = (match && match[1] !== \"de\") ? \"\/\" + match[1] : \"\";\n    return \"https:\/\/spiritual-activity.org\" + langPrefix + \"\/gruppen-anmeldung\";\n  }\n\n  const PRODUCTS = {\n    cat1: 864374030,\n    cat2: 844860366,\n    cat3: 844907264,\n    cat4: 844907265\n  };\n\n  \/\/ Versandfreie Digital-Produkte fuer alle Faelle, in denen nichts verschickt\n  \/\/ wird: rein digitale Teilnahme und Wiederholer (kein neues Kartenset).\n  const PRODUCTS_APPONLY = {\n    cat1: 863272251,\n    cat2: 863265753,\n    cat3: 863272252,\n    cat4: 863265754\n  };\n\n  const RANGES = {\n    cat1: { min: 160, max: 800 },\n    cat2: { min: 105, max: 700 },\n    cat3: { min:  75, max: 600 },\n    cat4: { min:  45, max: 500 }\n  };\n\n  const ORIENTIERUNG = {\n    cat1: { reduced: 160, base: 360, support: 580 },\n    cat2: { reduced: 105, base: 240, support: 460 },\n    cat3: { reduced:  75, base: 160, support: 340 },\n    cat4: { reduced:  45, base: 105, support: 220 }\n  };\n\n  const DISCOUNT_WIEDERHOLER = 0.30;\n  const DISCOUNT_SCHUELER    = 0.50;\n  const DISCOUNT_STUDENT     = 0.25;\n  const DISCOUNT_PAAR_P2     = 0.50;\n  const DISCOUNT_APP_FIXED   = 35;\n  \/\/ Versandpauschale ausserhalb EU+CH. Ecwid kassiert sie, der Wizard rechnet sie in die Anzeige-Summe ein.\n  const SHIPPING_COST   = 15;\n\n  const APP_ONLY_LANGS = new Set([\"Arabisch\",\"Farsi\",\"Ukrainisch\",\"Bulgarisch\",\"Franz\u00f6sisch\"]);\n\n  const EU_PLUS_CH = new Set([\n    \"AT\",\"BE\",\"BG\",\"CY\",\"CZ\",\"DE\",\"DK\",\"EE\",\"ES\",\"FI\",\"FR\",\"GR\",\"HR\",\n    \"HU\",\"IE\",\"IT\",\"LT\",\"LU\",\"LV\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SE\",\"SI\",\"SK\",\"CH\"\n  ]);\n  function needsShipping(countryCode) {\n    return countryCode && !EU_PLUS_CH.has(countryCode);\n  }\n\n  const COUNTRY_NAME_OVERRIDES = {\n    \"HK\":\"Hongkong\",\"MO\":\"Macau\",\"TW\":\"Taiwan\",\"AE\":\"Verenigde Arabische Emiraten\",\n    \"US\":\"Verenigde Staten\",\"GB\":\"Verenigd Koninkrijk\",\"GB-SCT\":\"Schotland\",\n    \"KR\":\"Zuid-Korea\",\"SA\":\"Saoedi-Arabi\u00eb\",\n    \"MD\":\"Moldavi\u00eb\",\"PS\":\"Palestijnse gebieden\",\"CD\":\"Congo-Kinshasa\",\"CG\":\"Congo-Brazzaville\",\n    \"ST\":\"Sao Tom\u00e9 en Principe\",\"CI\":\"Ivoorkust\",\"TL\":\"Oost-Timor\",\n    \"CV\":\"Kaapverdi\u00eb\",\"SZ\":\"Eswatini\",\"FM\":\"Micronesia\",\"MH\":\"Marshalleilanden\",\n    \"VC\":\"Saint Vincent en de Grenadines\",\"LC\":\"Saint Lucia\",\"KN\":\"Saint Kitts en Nevis\",\n    \"AG\":\"Antigua en Barbuda\",\"TT\":\"Trinidad en Tobago\",\"BA\":\"Bosni\u00eb en Herzegovina\",\n    \"MK\":\"Noord-Macedoni\u00eb\",\"GQ\":\"Equatoriaal-Guinea\",\"GW\":\"Guinee-Bissau\",\n    \"CF\":\"Centraal-Afrikaanse Republiek\",\"SB\":\"Salomonseilanden\",\"PG\":\"Papoea-Nieuw-Guinea\",\n    \"DO\":\"Dominicaanse Republiek\",\"XK\":\"Kosovo\"\n  };\n\n  \/\/ \u2500\u2500 Zusaetzliche Suchbegriffe (Aliasse) je Land \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Beeinflusst NUR die Suche, nicht den angezeigten Namen. Alles klein schreiben.\n  const COUNTRY_SEARCH_ALIASES = {\n      \"US\": [\"verenigde staten\", \"verenigde staten van amerika\", \"vs\", \"usa\", \"amerika\", \"united states\", \"united states of america\", \"america\"],\n      \"GB\": [\"verenigd koninkrijk\", \"groot-brittanni\u00eb\", \"groot brittannie\", \"engeland\", \"uk\", \"united kingdom\", \"england\", \"great britain\", \"britain\"],\n      \"GB-SCT\": [\"schotland\", \"scotland\"],\n      \"AE\": [\"verenigde arabische emiraten\", \"emiraten\", \"vae\", \"uae\", \"united arab emirates\", \"emirates\", \"dubai\"],\n      \"KR\": [\"zuid-korea\", \"zuid korea\", \"korea\", \"south korea\"],\n      \"NL\": [\"nederland\", \"holland\", \"netherlands\"],\n      \"CH\": [\"zwitserland\", \"switzerland\", \"schweiz\"],\n      \"DE\": [\"duitsland\", \"germany\", \"deutschland\"],\n      \"AT\": [\"oostenrijk\", \"austria\"],\n      \"BE\": [\"belgi\u00eb\", \"belgie\", \"belgium\"],\n      \"CZ\": [\"tsjechi\u00eb\", \"tsjechie\", \"tsjechische republiek\", \"czechia\", \"czech republic\"],\n      \"TR\": [\"turkije\", \"turkey\", \"t\u00fcrkiye\", \"turkiye\"],\n      \"CI\": [\"ivoorkust\", \"ivory coast\", \"cote d'ivoire\"],\n      \"MM\": [\"myanmar\", \"birma\", \"burma\"],\n      \"TL\": [\"oost-timor\", \"oost timor\", \"timor-leste\", \"east timor\"],\n      \"SZ\": [\"eswatini\", \"swaziland\"],\n      \"MK\": [\"noord-macedoni\u00eb\", \"noord macedonie\", \"macedoni\u00eb\", \"macedonie\", \"macedonia\", \"north macedonia\"],\n      \"BY\": [\"belarus\", \"wit-rusland\", \"wit rusland\"],\n      \"MD\": [\"moldavi\u00eb\", \"moldavie\", \"moldova\"],\n      \"MA\": [\"marokko\", \"morocco\"],\n      \"EG\": [\"egypte\", \"egypt\"],\n      \"GR\": [\"griekenland\", \"greece\"],\n      \"IT\": [\"itali\u00eb\", \"italie\", \"italy\"],\n      \"ES\": [\"spanje\", \"spain\"],\n      \"FR\": [\"frankrijk\", \"france\"],\n      \"PL\": [\"polen\", \"poland\"],\n      \"RU\": [\"rusland\", \"russia\", \"russian federation\"],\n      \"CN\": [\"china\"],\n      \"JP\": [\"japan\"],\n      \"IN\": [\"india\"],\n      \"BR\": [\"brazili\u00eb\", \"brazilie\", \"brazil\"],\n      \"MX\": [\"mexico\"],\n      \"CA\": [\"canada\"],\n      \"AU\": [\"australi\u00eb\", \"australie\", \"australia\"],\n      \"NZ\": [\"nieuw-zeeland\", \"nieuw zeeland\", \"new zealand\"],\n      \"ZA\": [\"zuid-afrika\", \"zuid afrika\", \"south africa\"],\n      \"SE\": [\"zweden\", \"sweden\"],\n      \"NO\": [\"noorwegen\", \"norway\"],\n      \"DK\": [\"denemarken\", \"denmark\"],\n      \"PT\": [\"portugal\"],\n      \"KP\": [\"north korea\"],\n      \"CV\": [\"cabo verde\", \"cape verde\"],\n      \"CD\": [\"dr congo\", \"drc\", \"congo kinshasa\"],\n      \"CG\": [\"congo brazzaville\"],\n      \"VA\": [\"vatican\", \"holy see\"],\n      \"LA\": [\"laos\"],\n      \"VN\": [\"vietnam\", \"viet nam\"],\n      \"IR\": [\"iran\", \"persia\"],\n      \"MO\": [\"macau\", \"macao\"],\n      \"HK\": [\"hong kong\"],\n      \"TW\": [\"taiwan\"],\n      \"GE\": [\"georgia\"]\n  };\n\n  const COUNTRIES = {\n    cat1: [\"CY\",\"CA\",\"FR\",\"FI\",\"BH\",\"AU\",\"AD\",\"SE\",\"DE\",\"SA\",\"AT\",\"BE\",\"HK\",\"MT\",\"IS\",\"SM\",\"NL\",\"DK\",\"TW\",\"AE\",\"US\",\"BN\",\"CH\",\"NO\",\"GY\",\"QA\",\"MO\",\"IE\",\"LU\",\"SG\",\"LI\",\"GB\",\"GB-SCT\"],\n    cat2: [\"KR\",\"ME\",\"CL\",\"TT\",\"MV\",\"UY\",\"BS\",\"OM\",\"SC\",\"MY\",\"PA\",\"TR\",\"LV\",\"GR\",\"KZ\",\"SK\",\"HU\",\"RU\",\"RO\",\"EE\",\"AW\",\"PT\",\"PR\",\"HR\",\"KW\",\"JP\",\"NZ\",\"PL\",\"IL\",\"ES\",\"LT\",\"SI\",\"CZ\",\"IT\"],\n    cat3: [\"BZ\",\"TN\",\"GT\",\"IQ\",\"ZA\",\"FJ\",\"EC\",\"LY\",\"ID\",\"VN\",\"BT\",\"DZ\",\"PE\",\"PW\",\"BW\",\"DM\",\"PY\",\"MD\",\"GQ\",\"MN\",\"VC\",\"IR\",\"GD\",\"EG\",\"CO\",\"SR\",\"TM\",\"BA\",\"BB\",\"BR\",\"AL\",\"AM\",\"GA\",\"MX\",\"AZ\",\"TH\",\"LC\",\"CN\",\"MK\",\"DO\",\"AG\",\"AR\",\"GE\",\"CR\",\"MU\",\"RS\",\"BY\",\"KN\",\"XK\",\"BG\"],\n    cat4: [\"UA\",\"BI\",\"SS\",\"CF\",\"YE\",\"MZ\",\"MW\",\"SO\",\"CD\",\"LR\",\"MG\",\"NE\",\"AF\",\"SD\",\"SB\",\"ML\",\"HT\",\"VU\",\"BF\",\"LS\",\"TD\",\"GW\",\"TG\",\"GM\",\"KI\",\"SL\",\"PG\",\"UG\",\"KM\",\"PS\",\"RW\",\"TZ\",\"ET\",\"ZM\",\"FM\",\"BJ\",\"GN\",\"TL\",\"MM\",\"SN\",\"CM\",\"TJ\",\"TV\",\"NP\",\"CG\",\"ST\",\"PK\",\"KE\",\"ZW\",\"MH\",\"HN\",\"TO\",\"CI\",\"WS\",\"GH\",\"VE\",\"KH\",\"MR\",\"KG\",\"NI\",\"NG\",\"DJ\",\"AO\",\"LA\",\"BD\",\"BO\",\"MA\",\"JO\",\"LB\",\"NR\",\"IN\",\"NA\",\"CV\",\"UZ\",\"PH\",\"SZ\",\"JM\",\"SV\",\"LK\"]\n  };\n\n  const OPT_COMM_LANG = \"In welcher Sprache nimmst Du teil?\";\n  const OPT_STATUS    = \"Trifft etwas davon auf Dich zu?\";\n\n  \/\/ \u2500\u2500 Ecwid-Option-Werte (exakt wie im Shop-Screenshot) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const STATUS_LABEL = {\n    paar:        \"Zu zweit (gleicher Haushalt)\",\n    schueler:    \"Sch\u00fcler:innen\",     \/\/ Ecwid-Wert exakt: \"Sch\u00fcler:innen\"\n    student:     \"Student\",\n    wiederholer: \"Wiederholer\",\n    apponly:     \"Digitale Teilnahme (App)\"\n  };\n\n  \/\/ \u2500\u2500 Shadow DOM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const host = document.getElementById(\"sw-host-nl\");\n  const shadow = host.attachShadow({ mode: \"open\" });\n\n  const styleEl = document.createElement(\"style\");\n  styleEl.textContent = `\n    :host {\n      display: block;\n      --bg:           #F5FAF6;\n      --card:         #FFFFFF;\n      --ink:          #0C1E14;\n      --ink-muted:    #27703F;\n      --accent:       #0C1E14;\n      --accent-light: #E6F2E8;\n      --border:       #C8E0CE;\n      --radius:       16px;\n      --radius-sm:    10px;\n    }\n    @keyframes wiz-spin { to { transform: rotate(360deg); } }\n\n    .sw-root {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 20px; font-weight: 400; color: var(--ink);\n      background: var(--bg); padding: 32px 20px;\n      display: flex; align-items: flex-start; justify-content: center;\n    }\n    .sw-card {\n      background: var(--card); border: 1px solid var(--border);\n      border-radius: 24px; padding: 36px 32px;\n      width: 100%; max-width: 780px;\n      box-shadow: 0 4px 24px rgba(12,30,20,0.08); box-sizing: border-box;\n    }\n    @media (max-width: 480px) {\n      .sw-root { padding: 16px 10px; }\n      .sw-card { padding: 24px 16px; border-radius: 16px; }\n    }\n\n    .sw-progress { display: flex; gap: 8px; margin-bottom: 32px; }\n    .sw-progress-step { flex: 1; height: 4px; background: var(--border); border-radius: 999px; transition: background 0.35s; }\n    .sw-progress-step.active { background: var(--accent); }\n    .sw-progress-step.done   { background: var(--accent); opacity: 0.4; }\n\n    .sw-step-label { font-size: 12px; font-weight: 400; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: 10px; }\n    .sw-heading { font-size: 26px; font-weight: 500; line-height: 1.2; margin: 0 0 6px; color: var(--accent); letter-spacing: 0.01em; }\n    .sw-subtext { font-size: 18px; font-weight: 400; color: var(--ink-muted); margin: 0 0 28px; line-height: 1.6; }\n    .sw-label { display: block; font-size: 18px; font-weight: 700; margin-bottom: 6px; color: var(--ink); }\n\n    .sw-select, .sw-text-input {\n      width: 100%; padding: 13px 15px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg);\n      font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-select {\n      appearance: none;\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2327703F' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: right 15px center;\n      cursor: pointer;\n    }\n    .sw-select:focus, .sw-text-input:focus {\n      outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1);\n    }\n    .sw-text-input { margin-bottom: 14px; }\n\n    .sw-redirect { display: none; margin-top: 12px; padding: 18px 20px; border-radius: var(--radius-sm); background: #FFF8F0; border: 1px solid rgba(180,80,0,0.2); font-size: 17px; line-height: 1.8; color: var(--ink); }\n    .sw-redirect strong { display: block; margin-bottom: 8px; font-size: 17px; color: #7A3500; }\n    .sw-redirect a { color: #27703F; text-decoration: underline; }\n    .sw-infobox {\n      margin-top: 12px; padding: 15px 17px; border-radius: var(--radius-sm);\n      background: var(--accent-light); border: 1px solid rgba(12,30,20,0.15);\n      font-size: 18px; font-weight: 400; line-height: 1.5;\n    }\n    .sw-infobox-title {\n      font-weight: 700; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase;\n      color: var(--accent); margin-bottom: 3px;\n    }\n\n    .sw-divider { border: 0; border-top: 1px solid var(--border); margin: 30px 0 24px; }\n\n    .sw-choice-row { display: flex; gap: 10px; flex-wrap: wrap; }\n.sw-choice-card {\n  flex: 1; min-width: 150px; padding: 16px 14px;\n  border: 1px solid var(--border); border-radius: var(--radius-sm);\n  text-align: center; cursor: pointer; font-size: 17px; line-height: 1.3;\n  transition: all 0.15s; background: var(--bg);\n  box-sizing: border-box;\n}\n    .sw-choice-card:hover { border-color: var(--accent); }\n    .sw-choice-card.active { background: var(--accent-light); border-color: var(--accent); font-weight: 700; color: var(--accent); }\n    @media (max-width: 480px) { .sw-choice-card { min-width: 100%; } }\n\n    .sw-person-block { margin-bottom: 8px; }\n    .sw-person-title { font-weight: 700; font-size: 21px; color: var(--accent); margin-bottom: 16px; }\n    .sw-field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 0; }\n    @media (max-width: 480px) { .sw-field-grid { grid-template-columns: 1fr; } }\n\n    .sw-range-header { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 22px; }\n    .sw-range-header-label { font-weight: 700; font-size: 18px; }\n    .sw-amount-display { display: flex; align-items: baseline; gap: 3px; }\n    .sw-amount-display span { font-size: 18px; font-weight: 400; }\n    .sw-amount-input {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 36px; font-weight: 700; color: var(--ink);\n      border: 2px solid var(--border); background: var(--bg);\n      text-align: right; width: 132px; padding: 4px 12px;\n      outline: none; border-radius: var(--radius-sm);\n      transition: background 0.15s, color 0.15s, border-color 0.15s, box-shadow 0.15s;\n    }\n    .sw-amount-input:hover { border-color: var(--accent); background: var(--accent-light); }\n    .sw-amount-input:focus { border-color: var(--accent); background: var(--accent-light); color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n\n    input[type=range].sw-range {\n      -webkit-appearance: none; width: 100%; height: 6px;\n      border-radius: 999px; background: var(--border); outline: none; cursor: pointer;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb {\n      -webkit-appearance: none; width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35);\n      cursor: pointer; transition: transform 0.15s, box-shadow 0.15s;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb:hover { transform: scale(1.08); box-shadow: 0 0 0 9px rgba(12,30,20,0.18), 0 3px 12px rgba(12,30,20,0.4); }\n    input[type=range].sw-range::-webkit-slider-thumb:active { transform: scale(1.12); }\n    input[type=range].sw-range::-moz-range-thumb {\n      width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      border: none; box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); cursor: pointer;\n    }\n    input[type=range].sw-range.sw-pulse::-webkit-slider-thumb { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    input[type=range].sw-range.sw-pulse::-moz-range-thumb    { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    @keyframes sw-thumb-pulse {\n      0%, 100% { box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); }\n      50%      { box-shadow: 0 0 0 15px rgba(12,30,20,0.05), 0 3px 10px rgba(12,30,20,0.35); }\n    }\n\n    .sw-range-wrap { position: relative; }\n    .sw-markers { position: relative; height: 56px; margin-bottom: 8px; margin-left: 18px; margin-right: 18px; }\n    .sw-marker {\n      position: absolute; transform: translateX(-50%);\n      display: flex; flex-direction: column; align-items: center; gap: 2px;\n      justify-content: flex-end; height: 100%; pointer-events: auto; cursor: pointer;\n    }\n    .sw-marker-tick { width: 1px; height: 10px; background: var(--border); flex-shrink: 0; }\n    .sw-marker.active .sw-marker-tick { background: var(--accent); opacity: 0.5; }\n    .sw-marker-label { font-size: 11px; font-weight: 400; color: var(--ink-muted); white-space: nowrap; line-height: 1.2; text-align: center; order: -2; }\n    .sw-marker-amount { font-size: 13px; font-weight: 700; color: var(--ink-muted); order: -1; }\n    .sw-marker.active .sw-marker-label, .sw-marker.active .sw-marker-amount { color: var(--accent); }\n\n    @media (max-width: 540px) {\n      .sw-markers { display: none; }\n      .sw-markers-mobile { display: flex !important; }\n    }\n    .sw-markers-mobile {\n      display: none; flex-direction: column; gap: 0;\n      margin: 12px 0 4px; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden;\n    }\n    .sw-marker-mobile {\n      display: flex; align-items: center; justify-content: space-between;\n      padding: 10px 14px; cursor: pointer; border-bottom: 1px solid var(--border);\n      transition: background 0.15s; font-family: 'Tinos', Georgia, serif;\n    }\n    .sw-marker-mobile:last-child { border-bottom: 0; }\n    .sw-marker-mobile:hover { background: var(--accent-light); }\n    .sw-marker-mobile.active { background: var(--accent-light); }\n    .sw-marker-mobile-label { font-size: 15px; font-weight: 400; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-label { color: var(--accent); font-weight: 700; }\n    .sw-marker-mobile-amount { font-size: 16px; font-weight: 700; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-amount { color: var(--accent); }\n\n    .sw-summary-box { padding: 18px 20px; background: var(--accent-light); border: 1px solid rgba(12,30,20,0.2); border-radius: var(--radius-sm); margin-top: 20px; }\n    .sw-summary-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; font-size: 16px; color: var(--ink); }\n    .sw-summary-row.sw-summary-discount { color: #8A1F1F; }\n    .sw-summary-row.sw-summary-total { border-top: 1px solid rgba(12,30,20,0.25); margin-top: 8px; padding-top: 12px; font-weight: 700; font-size: 22px; color: var(--accent); }\n    .sw-summary-person-label { font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-muted); margin: 14px 0 2px; }\n    .sw-summary-person-label:first-child { margin-top: 0; }\n\n    .sw-btn-row { display: flex; gap: 10px; margin-top: 24px; flex-wrap: wrap; }\n    .sw-btn { flex: 1; min-width: 140px; padding: 15px 17px; border-radius: var(--radius-sm); font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 700; cursor: pointer; transition: all 0.2s; border: 0; }\n    .sw-btn-primary { background: var(--accent); color: #fff; }\n    .sw-btn-primary:hover { background: #27703F; transform: translateY(-1px); }\n    .sw-btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }\n    .sw-btn-secondary { background: transparent; color: var(--ink); border: 1px solid var(--border); }\n    .sw-btn-secondary:hover { background: var(--bg); }\n\n    .sw-error { display: none; margin-top: 15px; padding: 13px 15px; border-radius: var(--radius-sm); background: #FFF3F3; border: 1px solid rgba(220,30,30,0.2); color: #8A1F1F; font-size: 18px; font-weight: 400; line-height: 1.5; white-space: pre-wrap; }\n    .wiz-spinner { display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.4); border-top-color: #fff; border-radius: 50%; animation: wiz-spin 0.7s linear infinite; vertical-align: middle; margin-right: 8px; }\n\n    .sw-country-search-wrap { position: relative; margin-bottom: 10px; }\n    .sw-country-search-icon { position: absolute; left: 18px; top: 50%; transform: translateY(-50%); color: var(--ink-muted); pointer-events: none; opacity: 0.5; }\n    .sw-country-search {\n      width: 100%; padding: 13px 15px 13px 54px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg); font-family: 'Tinos', Georgia, serif;\n      font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-country-search:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    .sw-country-list { max-height: 240px; overflow-y: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }\n    .sw-country-item { padding: 11px 15px; cursor: pointer; font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; display: flex; justify-content: space-between; align-items: center; transition: background 0.15s; border-bottom: 1px solid var(--border); }\n    .sw-country-item:last-child { border-bottom: 0; }\n    .sw-country-item:hover { background: var(--accent-light); }\n    .sw-country-item.selected { background: var(--accent-light); font-weight: 700; }\n    .sw-country-item-cat { font-size: 12px; color: var(--ink-muted); background: var(--border); padding: 2px 8px; border-radius: 999px; }\n    .sw-country-empty { padding: 15px; font-size: 18px; color: var(--ink-muted); text-align: center; }\n\n    .sw-step { display: none; }\n    .sw-step.active { display: block; }\n  `;\n  shadow.appendChild(styleEl);\n\n  const wrapper = document.createElement(\"div\");\n  wrapper.innerHTML = `\n    <div class=\"sw-root\">\n      <div class=\"sw-card\">\n\n        <div class=\"sw-progress\">\n          <div class=\"sw-progress-step\" id=\"sw-prog-1\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-2\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-3\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-4\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-5\"><\/div>\n        <\/div>\n\n        <!-- STEP 1: WELKOM -->\n        <div class=\"sw-step active\" id=\"sw-step-welcome\">\n          <div class=\"sw-step-label\">Stap 1 van 5<\/div>\n          <h2 class=\"sw-heading\">Welkom<\/h2>\n          <p class=\"sw-subtext\">In een paar stappen kies je land, taal, aanmeldtype en bijdrage \u2013 en ga je daarna direct naar de checkout.<\/p>\n          <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-welcome-next\" style=\"width:100%;\">Prijzen & Aanmelding<\/button>\n        <\/div>\n\n        <!-- STEP 2: LAND -->\n        <div class=\"sw-step\" id=\"sw-step-country\">\n          <div class=\"sw-step-label\">Stap 2 van 5<\/div>\n          <h2 class=\"sw-heading\">Waar woon je?<\/h2>\n          <label class=\"sw-label\">Land<\/label>\n          <div class=\"sw-country-search-wrap\">\n            <svg class=\"sw-country-search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.35-4.35\"\/><\/svg>\n            <input type=\"text\" class=\"sw-country-search\" id=\"sw-country-search\" placeholder=\"Land zoeken\u2026\" autocomplete=\"off\">\n          <\/div>\n          <div class=\"sw-country-list\" id=\"sw-country-list\"><\/div>\n          <input type=\"hidden\" id=\"sw-country\">\n          <div class=\"sw-infobox\" id=\"sw-catInfo\">\n            <div class=\"sw-infobox-title\">Prijscategorie<\/div>\n            <div id=\"sw-catText\">Kies eerst een land.<\/div>\n          <\/div>\n          <div class=\"sw-redirect\" id=\"sw-redirect-russia\">\n            <strong>Voor deelnemers uit Rusland is er een aparte aanmeldpagina.<\/strong>\n            Ons betaalsysteem is niet beschikbaar in Rusland. Meld je daar aan:<br><br>\n            <a href=\"https:\/\/spiritual-activity.org\/ru\/anmeldung-basic-exercises\/\">Naar de Russische aanmelding<\/a>\n          <\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-country-back\">Terug<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-country-next\" disabled>Verder<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 3: TAAL + AANMELDVORM -->\n        <div class=\"sw-step\" id=\"sw-step-langform\">\n          <div class=\"sw-step-label\">Stap 3 van 5<\/div>\n          <h2 class=\"sw-heading\">Taal & Aanmeldtype<\/h2>\n\n          <label class=\"sw-label\" for=\"sw-commLang\">In welke taal neem je deel?<\/label>\n          <select class=\"sw-select\" id=\"sw-commLang\">\n            <option value=\"\" selected disabled>Kies\u2026<\/option>\n            <option value=\"Deutsch\">Duits<\/option>\n            <option value=\"Englisch\">Engels<\/option>\n            <option value=\"Spanisch\">Spaans<\/option>\n            <option value=\"Franz\u00f6sisch\">Frans<\/option>\n            <option value=\"Italienisch\">Italiaans<\/option>\n            <option value=\"Portugiesisch\">Portugees<\/option>\n            <option value=\"Arabisch\">Arabisch<\/option>\n            <option value=\"Hebr\u00e4isch\">Hebreeuws<\/option>\n            <option value=\"Farsi\">Perzisch<\/option>\n            <option value=\"Georgisch\">Georgisch<\/option>\n            <option value=\"Ukrainisch\">Oekra\u00efens<\/option>\n            <option value=\"Niederl\u00e4ndisch\">Nederlands<\/option>\n            <option value=\"T\u00fcrkisch\">Turks<\/option>\n            <option value=\"Bulgarisch\">Bulgaars<\/option>\n            <option value=\"Russisch\">Russisch<\/option>\n            <option value=\"Chinesisch\">Chinees<\/option>\n            <option value=\"Japanisch\">Japans<\/option>\n            <option value=\"Koreanisch\">Koreaans<\/option>\n          <\/select>\n\n          <div class=\"sw-infobox\" id=\"sw-apponly-note\" style=\"display:none; margin-top:14px;\">\n            <div class=\"sw-infobox-title\">DIGITALE DEELNAME \u00b7 \u221235\u20ac<\/div>\n            <div id=\"sw-apponly-note-text\">Je neemt digitaal deel. De korting wordt automatisch in de samenvatting verrekend.<\/div>\n          <\/div>\n\n          <label class=\"sw-label\" style=\"margin-top:26px;\">Hoe wil je je aanmelden?<\/label>\n          <div class=\"sw-choice-row\" id=\"sw-form-choices\">\n            <div class=\"sw-choice-card active\" data-form=\"einzeln\">Individueel<\/div>\n            <div class=\"sw-choice-card\" data-form=\"paar\">Met z'n twee\u00ebn<br><span style=\"font-size:13px; font-weight:400;\">(zelfde huishouden)<\/span><\/div>\n            <div class=\"sw-choice-card\" data-form=\"gruppe\">Groep<br><span style=\"font-size:13px; font-weight:400;\">(vanaf 4 personen)<\/span><\/div>\n          <\/div>\n\n          <div class=\"sw-infobox\" id=\"sw-gruppe-note\" style=\"display:none; margin-top:18px;\">\n            <div class=\"sw-infobox-title\">Groepsaanmelding<\/div>\n            <div>We zijn blij met je interesse. Op de volgende pagina kun je de groepsaanmelding voltooien. Let op: de groepsaanmelding is alleen in het Duits en Engels beschikbaar.<\/div>\n          <\/div>\n\n          <div class=\"sw-error\" id=\"sw-error-langform\"><\/div>\n\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-langform-back\">Terug<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-langform-next\" disabled>Verder<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-gruppe-redirect\" style=\"display:none;\">Verder naar groepsaanmelding<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 4A: GEGEVENS \u2013 INDIVIDUEEL -->\n        <div class=\"sw-step\" id=\"sw-step-details-solo\">\n          <div class=\"sw-step-label\">Stap 4 van 5<\/div>\n          <h2 class=\"sw-heading\">Een paar gegevens over jou<\/h2>\n          <p class=\"sw-subtext\">Is iets hiervan op jou van toepassing? Dit helpt ons om je de juiste bijdrage voor te stellen.<\/p>\n\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">DIGITALE DEELNAME \u00b7 \u221235\u20ac<\/div>\n            <div>Je neemt digitaal deel. De korting wordt automatisch in de samenvatting verrekend.<\/div>\n          <\/div>\n\n          <label class=\"sw-label\">Kies alsjeblieft<\/label>\n          <!-- Reihenfolge: Normal \u2192 Sch\u00fcler \u2192 Ausbildung\/Studium \u2192 Wiederholer -->\n          <select class=\"sw-select\" id=\"sw-solo-status\">\n            <option value=\"\" disabled selected>Kies\u2026<\/option>\n            <option value=\"normal\">Normale aanmelding<\/option>\n            <option value=\"schueler\">Scholier (\u221250%)<\/option>\n            <option value=\"student\">In opleiding\/studie (\u221225%)<\/option>\n            <option value=\"wiederholer\">Ik herhaal de cursus met de zielenoefeningen (geen nieuwe kaartenset \u2212 30%)<\/option>\n          <\/select>\n\n          <div class=\"sw-error\" id=\"sw-error-details-solo\"><\/div>\n\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-solo-back\">Terug<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-solo-next\" disabled>Verder<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 4B: GEGEVENS \u2013 PAAR -->\n        <div class=\"sw-step\" id=\"sw-step-details-paar\">\n          <div class=\"sw-step-label\">Stap 4 van 5<\/div>\n          <h2 class=\"sw-heading\">Gegevens over jullie beiden<\/h2>\n          <p class=\"sw-subtext\">Vul de gegevens voor beide personen in. De tweede persoon krijgt automatisch 50% korting.<\/p>\n\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-paar-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">DIGITALE DEELNAME \u00b7 \u221235\u20ac<\/div>\n            <div>Jullie nemen digitaal deel. De korting wordt automatisch in de samenvatting verrekend.<\/div>\n          <\/div>\n\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">Persoon 1<\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">Voornaam<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-vorname\"><\/div>\n              <div><label class=\"sw-label\">Achternaam<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">E-mail<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p1-email\">\n          <\/div>\n\n          <hr class=\"sw-divider\">\n\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">Persoon 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">Voornaam<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-vorname\"><\/div>\n              <div><label class=\"sw-label\">Achternaam<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">E-mail<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p2-email\">\n          <\/div>\n\n          <div class=\"sw-error\" id=\"sw-error-details-paar\"><\/div>\n\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-paar-back\">Terug<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-paar-next\" disabled>Verder<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 5A: BIJDRAGE \u2013 INDIVIDUEEL -->\n        <div class=\"sw-step\" id=\"sw-step-amount-solo\">\n          <div class=\"sw-step-label\">Stap 5 van 5<\/div>\n          <h2 class=\"sw-heading\">Bijdrage kiezen<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-solo\">Hier kun je de bijdrage kiezen die voor jou passend is.<\/p>\n\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-solo\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">DIGITALE DEELNAME \u00b7 \u221235\u20ac<\/div>\n            <div>Je neemt digitaal deel. De korting wordt automatisch in de samenvatting verrekend.<\/div>\n          <\/div>\n\n          <div class=\"sw-range-header\">\n            <div class=\"sw-range-header-label\">Jouw bedrag<\/div>\n            <div class=\"sw-amount-display\">\n              <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-solo\" value=\"360\">\n              <span>\u20ac<\/span>\n            <\/div>\n          <\/div>\n          <div class=\"sw-range-wrap\">\n            <div class=\"sw-markers\" id=\"sw-markers-solo\"><\/div>\n            <input type=\"range\" class=\"sw-range\" id=\"sw-amount-solo\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n            <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-solo\"><\/div>\n          <\/div>\n\n          <p style=\"margin-top:18px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            Als je een verdere financi\u00eble korting nodig hebt, schrijf ons dan gerust naar:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n\n          <div class=\"sw-summary-box\" id=\"sw-summary-solo\">\n            <div class=\"sw-summary-row\"><span>Gekozen bijdrage<\/span><span id=\"sw-solo-chosen\">360\u20ac<\/span><\/div>\n            <div id=\"sw-solo-discounts\"><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-solo\" style=\"display:none;\"><span>Verzending<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>Totaal<\/span><span><span id=\"sw-solo-total\">360<\/span>\u20ac<\/span><\/div>\n          <\/div>\n\n          <div class=\"sw-error\" id=\"sw-error-amount-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-solo-back\">Terug<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-solo\">Aanmelden<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 5B: BIJDRAGE \u2013 PAAR -->\n        <div class=\"sw-step\" id=\"sw-step-amount-paar\">\n          <div class=\"sw-step-label\">Stap 5 van 5<\/div>\n          <h2 class=\"sw-heading\">Bijdragen kiezen<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-paar\">Elke persoon kiest zijn eigen bijdrage. Persoon 2 krijgt automatisch 50% korting.<\/p>\n\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-paar\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">DIGITALE DEELNAME \u00b7 \u221235\u20ac<\/div>\n            <div>Jullie nemen digitaal deel. De korting wordt automatisch in de samenvatting verrekend.<\/div>\n          <\/div>\n\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p1-title\">Persoon 1<\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">Bijdrage<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p1\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p1\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p1\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p1\"><\/div>\n            <\/div>\n          <\/div>\n\n          <hr class=\"sw-divider\">\n\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p2-title\">Persoon 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">Bijdrage<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p2\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p2\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p2\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p2\"><\/div>\n            <\/div>\n          <\/div>\n\n          <p style=\"margin-top:8px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            Als jullie een verdere financi\u00eble korting nodig hebben, schrijf ons dan gerust naar:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n\n          <div class=\"sw-summary-box\" id=\"sw-summary-paar\">\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p1-label\">Persoon 1<\/div>\n            <div class=\"sw-summary-row\"><span>Gekozen bijdrage<\/span><span id=\"sw-p1-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p1-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>Subtotaal<\/span><span id=\"sw-p1-subtotal\">0\u20ac<\/span><\/div>\n\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p2-label\">Persoon 2<\/div>\n            <div class=\"sw-summary-row\"><span>Gekozen bijdrage<\/span><span id=\"sw-p2-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p2-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>Subtotaal<\/span><span id=\"sw-p2-subtotal\">0\u20ac<\/span><\/div>\n\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-paar\" style=\"display:none;\"><span>Verzending<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>Totaal<\/span><span><span id=\"sw-paar-total\">0<\/span>\u20ac<\/span><\/div>\n          <\/div>\n\n          <div class=\"sw-error\" id=\"sw-error-amount-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-paar-back\">Terug<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-paar\">Naar checkout<\/button>\n          <\/div>\n        <\/div>\n\n      <\/div>\n    <\/div>\n  `;\n  shadow.appendChild(wrapper);\n\n  const $ = (id) => shadow.getElementById(id);\n\n  const COUNTRY_TO_CAT = {};\n  Object.keys(COUNTRIES).forEach(cat => COUNTRIES[cat].forEach(code => COUNTRY_TO_CAT[code] = cat));\n\n  function getCountryName(code) {\n    if (COUNTRY_NAME_OVERRIDES[code]) return COUNTRY_NAME_OVERRIDES[code];\n    try { return new Intl.DisplayNames([\"nl\"], { type: \"region\" }).of(code) || code; }\n    catch { return code; }\n  }\n\n  function getCountryAliases(code) {\n    const list = [];\n    \/\/ Offizieller Intl-Name, falls durch ein Override ersetzt\n    if (COUNTRY_NAME_OVERRIDES[code]) {\n      try {\n        const intlName = new Intl.DisplayNames([\"nl\"], { type: \"region\" }).of(code);\n        if (intlName && intlName.toLowerCase() !== COUNTRY_NAME_OVERRIDES[code].toLowerCase()) {\n          list.push(intlName.toLowerCase());\n        }\n      } catch {}\n    }\n    (COUNTRY_SEARCH_ALIASES[code] || []).forEach(a => list.push(a.toLowerCase()));\n    return list;\n  }\n\n  function getAllCountriesSorted() {\n    const all = [];\n    [\"cat1\",\"cat2\",\"cat3\",\"cat4\"].forEach(cat => {\n      COUNTRIES[cat]\n        .map(code => ({ code, name: getCountryName(code), cat, aliases: getCountryAliases(code) }))\n        .sort((a, b) => a.name.localeCompare(b.name, \"nl\"))\n        .forEach(c => all.push(c));\n    });\n    return all;\n  }\n\n  function emptyPerson() {\n    return { vorname: \"\", nachname: \"\", email: \"\", wiederholer: false, statusType: \"\", amount: 0 };\n  }\n  const state = {\n    country: \"\", category: \"cat1\",\n    commLang: \"\", form: \"einzeln\",\n    persons: { solo: emptyPerson(), p1: emptyPerson(), p2: emptyPerson() }\n  };\n  function getPerson(key) { return state.persons[key] || state.persons.solo; }\n\n  const APP_ONLY_CATEGORY_EXCEPTION_LANG = { CN: \"Chinesisch\" };\n  \/\/ \u2500\u2500 Anzeigenamen der Teilnahmesprachen \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Der interne Wert bleibt deutsch (Ecwid\/n8n erwarten ihn so), nur die Anzeige wird uebersetzt.\n  const LANG_DISPLAY = {\n      \"Deutsch\": \"Duits\",\n      \"Englisch\": \"Engels\",\n      \"Spanisch\": \"Spaans\",\n      \"Franz\u00f6sisch\": \"Frans\",\n      \"Italienisch\": \"Italiaans\",\n      \"Portugiesisch\": \"Portugees\",\n      \"Arabisch\": \"Arabisch\",\n      \"Hebr\u00e4isch\": \"Hebreeuws\",\n      \"Farsi\": \"Perzisch\",\n      \"Georgisch\": \"Georgisch\",\n      \"Ukrainisch\": \"Oekra\u00efens\",\n      \"Niederl\u00e4ndisch\": \"Nederlands\",\n      \"T\u00fcrkisch\": \"Turks\",\n      \"Russisch\": \"Russisch\",\n      \"Chinesisch\": \"Chinees\",\n      \"Japanisch\": \"Japans\",\n      \"Koreanisch\": \"Koreaans\"\n  };\n\n  function isAppOnly() {\n    const { category: cat, commLang: lang, country } = state;\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[country];\n      \/\/ Ausnahme (z.B. China) gilt nur, wenn auch die passende Sprache gew\u00e4hlt ist \u2013\n      \/\/ sonst kann kein physisches Kartenset verschickt werden.\n      if (!exceptionLang || lang !== exceptionLang) return true;\n    }\n    if (APP_ONLY_LANGS.has(lang)) return true;\n    if (lang === \"Russisch\" && country && country !== \"RU\") return true;\n    return false;\n  }\n\n  function isWiederholer(person) {\n    return !!person && (person.wiederholer || person.statusType === \"wiederholer\");\n  }\n\n  \/\/ Geht ueberhaupt ein Kartenset raus? Nur wenn die Teilnahme nicht rein digital\n  \/\/ ist UND mindestens eine Person ein neues Set braucht - Wiederholer bekommen\n  \/\/ keins. Steuert sowohl die Versandzeile in der Zusammenfassung als auch die\n  \/\/ Wahl des Ecwid-Produkts, damit beide nicht auseinanderlaufen koennen.\n  function hasPhysicalShipment(isPaar) {\n    if (isAppOnly()) return false;\n    return isPaar\n      ? !(isWiederholer(state.persons.p1) && isWiederholer(state.persons.p2))\n      : !isWiederholer(state.persons.solo);\n  }\n\n  \/\/ Ecwid haengt den Versand am Produkt fest, nicht am Warenkorb. Ohne physischen\n  \/\/ Versand muss deshalb das versandfreie Digital-Produkt in den Warenkorb, sonst\n  \/\/ schlaegt der Shop trotzdem Versandkosten auf.\n  function getParticipationProductId(isPaar) {\n    return hasPhysicalShipment(isPaar) ? PRODUCTS[state.category] : PRODUCTS_APPONLY[state.category];\n  }\n\n  function updateAppOnlyUI() {\n    const appOnly = state.commLang ? isAppOnly() : false;\n    let reason = \"\";\n    if (appOnly) {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[state.country];\n      if ((state.category === \"cat3\" || state.category === \"cat4\") && exceptionLang) {\n        reason = `Verzending is in jouw regio alleen mogelijk bij deelnametaal ${LANG_DISPLAY[exceptionLang] || exceptionLang}. Je neemt digitaal deel. De korting wordt automatisch in de samenvatting verrekend.`;\n      } else if (state.category === \"cat3\" || state.category === \"cat4\") {\n        reason = \"Verzending is niet mogelijk in jouw regio. Je neemt digitaal deel. De korting wordt automatisch in de samenvatting verrekend.\";\n      } else if (state.commLang === \"Russisch\") {\n        reason = \"Voor Russischtaligen buiten Rusland is er alleen een digitale versie. De korting wordt automatisch in de samenvatting verrekend.\";\n      } else {\n        reason = \"In deze taal is er alleen een digitale versie. De korting wordt automatisch in de samenvatting verrekend.\";\n      }\n    }\n    const noteIds = [\"sw-apponly-note\",\"sw-apponly-note-step4\",\"sw-apponly-note-paar-step4\",\"sw-apponly-note-step5-solo\",\"sw-apponly-note-step5-paar\"];\n    noteIds.forEach(id => {\n      const el = $(id);\n      if (!el) return;\n      el.style.display = appOnly ? \"block\" : \"none\";\n      const textDiv = el.querySelector(\"div:not(.sw-infobox-title)\");\n      if (textDiv && reason) textDiv.textContent = reason;\n    });\n  }\n\n  const STEP_CONTAINER = {\n    1: () => \"sw-step-welcome\",\n    2: () => \"sw-step-country\",\n    3: () => \"sw-step-langform\",\n    4: () => state.form === \"paar\" ? \"sw-step-details-paar\" : \"sw-step-details-solo\",\n    5: () => state.form === \"paar\" ? \"sw-step-amount-paar\" : \"sw-step-amount-solo\"\n  };\n\n  function showStep(n) {\n    shadow.querySelectorAll(\".sw-step\").forEach(el => el.classList.remove(\"active\"));\n    $(STEP_CONTAINER[n]()).classList.add(\"active\");\n    for (let i = 1; i <= 5; i++) {\n      const prog = $(\"sw-prog-\" + i);\n      if (!prog) continue;\n      if (i < n) prog.className = \"sw-progress-step done\";\n      else if (i === n) prog.className = \"sw-progress-step active\";\n      else prog.className = \"sw-progress-step\";\n    }\n    if (n === 5) {\n      const sliderIds = state.form === \"paar\" ? [\"sw-amount-p1\",\"sw-amount-p2\"] : [\"sw-amount-solo\"];\n      sliderIds.forEach(sid => { const el = $(sid); if (el) el.classList.add(\"sw-pulse\"); });\n      refreshSummary();\n    }\n  }\n\n  function setNextEnabled(id, enabled) {\n    const b = $(id);\n    if (!b) return;\n    b.disabled = !enabled;\n    b.style.opacity = enabled ? \"1\" : \".4\";\n    b.style.cursor  = enabled ? \"pointer\" : \"not-allowed\";\n  }\n\n  function showErrorIn(id, msg) { const el=$(id); el.style.display=\"block\"; el.textContent=msg; }\n  function clearErrorIn(id)     { const el=$(id); el.style.display=\"none\";  el.textContent=\"\"; }\n\n  function setCheckoutLoading(btnId, loading) {\n    const btn = $(btnId);\n    const overlay = document.getElementById(OVERLAY_ID);\n    if (!btn.dataset.defaultLabel) btn.dataset.defaultLabel = btn.textContent;\n    if (loading) {\n      btn.disabled = true;\n      btn.innerHTML = '<span class=\"wiz-spinner\"><\/span> Wordt voorbereid\u2026';\n      btn.style.opacity = \".8\";\n      if (overlay) overlay.style.display = \"flex\";\n    } else {\n      btn.disabled = false;\n      btn.textContent = btn.dataset.defaultLabel;\n      btn.style.opacity = \"1\";\n      if (overlay) overlay.style.display = \"none\";\n    }\n  }\n\n  function showThankYou() {\n    const card = shadow.querySelector(\".sw-card\");\n    if (!card) return;\n    card.innerHTML = `\n      <div style=\"text-align:center; padding:20px 0;\">\n        <div style=\"font-size:56px; margin-bottom:16px; color:#27703F;\">\u2713<\/div>\n        <h2 style=\"font-family:'Tinos',Georgia,serif; font-size:26px; font-weight:500; margin:0 0 12px; color:#0C1E14;\">Hartelijk dank!<\/h2>\n        <p style=\"font-family:'Tinos',Georgia,serif; font-size:18px; color:#27703F; line-height:1.6; margin:0 0 24px;\">Checkout wordt geladen\u2026<br>Je wordt zo doorgestuurd\u2026<\/p>\n        <div style=\"display:flex; justify-content:center;\">\n          <div style=\"width:36px; height:36px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:wiz-spin 0.8s linear infinite;\"><\/div>\n        <\/div>\n      <\/div>`;\n  }\n\n  function getAnchors(cat) {\n    const r = RANGES[cat], o = ORIENTIERUNG[cat];\n    return [[0,r.min],[25,o.reduced],[50,o.base],[75,o.support],[100,r.max]];\n  }\n  function normToEuro(norm, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      if (norm <= a[i+1][0]) {\n        const t = (norm - a[i][0]) \/ (a[i+1][0] - a[i][0]);\n        return Math.round(a[i][1] + t * (a[i+1][1] - a[i][1]));\n      }\n    }\n    return a[a.length-1][1];\n  }\n  function euroToNorm(euro, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      const lo = a[i][1], hi = a[i+1][1];\n      if (euro <= hi) {\n        if (hi === lo) return a[i+1][0];\n        return a[i][0] + (euro - lo) \/ (hi - lo) * (a[i+1][0] - a[i][0]);\n      }\n    }\n    return 100;\n  }\n  function getMarkerDefs(cat) {\n    const o = ORIENTIERUNG[cat];\n    return [\n      { value: o.reduced, label: \"Verlaagde bijdrage\", normPct: 25 },\n      { value: o.base,    label: \"Basisbijdrage\",       normPct: 50 },\n      { value: o.support, label: \"Steunbijdrage\",       normPct: 75 }\n    ];\n  }\n\n  function renderMarkers(personKey) {\n    const cat = state.category;\n    const person = getPerson(personKey);\n    const markers = getMarkerDefs(cat);\n    const container = $(`sw-markers-${personKey}`);\n    container.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker\" + (person.amount === m.value ? \" active\" : \"\");\n      div.style.left = m.normPct + \"%\";\n      div.innerHTML = `<div class=\"sw-marker-tick\"><\/div><div class=\"sw-marker-amount\">${m.value}\u20ac<\/div><div class=\"sw-marker-label\">${m.label}<\/div>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      container.appendChild(div);\n    });\n    const mobileContainer = $(`sw-markers-mobile-${personKey}`);\n    mobileContainer.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker-mobile\" + (person.amount === m.value ? \" active\" : \"\");\n      div.innerHTML = `<span class=\"sw-marker-mobile-label\">${m.label}<\/span><span class=\"sw-marker-mobile-amount\">${m.value}\u20ac<\/span>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      mobileContainer.appendChild(div);\n    });\n  }\n\n  function selectMarkerValue(personKey, value) {\n    const person = getPerson(personKey);\n    $(`sw-amount-${personKey}`).value = euroToNorm(value, state.category);\n    person.amount = value;\n    $(`sw-amountInput-${personKey}`).value = value;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n\n  function updateAmountFromSlider(personKey) {\n    const person = getPerson(personKey);\n    const norm = Number($(`sw-amount-${personKey}`).value);\n    person.amount = normToEuro(norm, state.category);\n    $(`sw-amountInput-${personKey}`).value = person.amount;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n\n  function updateAmountFromInput(personKey) {\n    const person = getPerson(personKey);\n    const r = RANGES[state.category];\n    let val = Number($(`sw-amountInput-${personKey}`).value);\n    if (isNaN(val)) val = r.min;\n    val = Math.min(r.max, Math.max(r.min, val));\n    person.amount = val;\n    $(`sw-amountInput-${personKey}`).value = val;\n    $(`sw-amount-${personKey}`).value = euroToNorm(val, state.category);\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n\n  function wireAmountControl(personKey) {\n    $(`sw-amount-${personKey}`).addEventListener(\"input\", () => updateAmountFromSlider(personKey));\n    $(`sw-amountInput-${personKey}`).addEventListener(\"input\", () => {\n      const v = Number($(`sw-amountInput-${personKey}`).value);\n      if (!isNaN(v)) { getPerson(personKey).amount = v; refreshSummary(); }\n    });\n    $(`sw-amountInput-${personKey}`).addEventListener(\"change\", () => updateAmountFromInput(personKey));\n  }\n\n  function applyRangeForForm() {\n    const cat = state.category;\n    const ori = ORIENTIERUNG[cat];\n    const hint = \"Hier kun je de bijdrage kiezen die voor jou passend is. Met een steunbijdrage maak je het voor mensen met beperkte financi\u00eble mogelijkheden mogelijk om deel te nemen, en help je ons het project verder de wereld in te dragen.\";\n    if (state.form === \"paar\") {\n      [\"p1\",\"p2\"].forEach(key => {\n        const person = getPerson(key);\n        person.amount = ori.base;\n        $(`sw-amount-${key}`).value = 50;\n        $(`sw-amountInput-${key}`).value = ori.base;\n      });\n      const p1name = state.persons.p1.vorname;\n      const p2name = state.persons.p2.vorname;\n      $(\"sw-amount-p1-title\").innerHTML = p1name ? `Persoon 1 \u2013 ${p1name}` : \"Persoon 1\";\n      $(\"sw-amount-p2-title\").innerHTML = (p2name ? `Persoon 2 \u2013 ${p2name}` : \"Persoon 2\") +\n        ' <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span>';\n      $(\"sw-summary-p1-label\").textContent = p1name ? `Persoon 1 \u2013 ${p1name}` : \"Persoon 1\";\n      $(\"sw-summary-p2-label\").textContent = (p2name ? `Persoon 2 \u2013 ${p2name}` : \"Persoon 2\") + \" (\u221250%)\";\n      $(\"sw-rangeHint-paar\").textContent = hint;\n      renderMarkers(\"p1\"); renderMarkers(\"p2\");\n    } else {\n      const person = state.persons.solo;\n      person.amount = ori.base;\n      $(\"sw-amount-solo\").value = 50;\n      $(\"sw-amountInput-solo\").value = ori.base;\n      $(\"sw-rangeHint-solo\").textContent = hint;\n      renderMarkers(\"solo\");\n    }\n    refreshSummary();\n  }\n\n  \/\/ \u2500\u2500 Rabattlogik \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Neue Regel: Wenn mehrere Rabatte greifen, wird zuerst der fixe App-Rabatt vom\n  \/\/ gew\u00e4hlten Betrag abgezogen. Der prozentuale Rabatt (Sch\u00fcler\/Student\/Wiederholer\n  \/\/ bzw. die 50%-Erm\u00e4\u00dfigung f\u00fcr Person 2) wird danach auf den verbleibenden Betrag\n  \/\/ angewendet. Beide Rabatte werden separat ausgewiesen.\n  function getPercentDiscountCandidate(person, isPaarP2) {\n    if (isPaarP2) return { value: DISCOUNT_PAAR_P2, label: \"Korting persoon 2\" };\n    const candidates = [];\n    if (isWiederholer(person)) candidates.push({ value: DISCOUNT_WIEDERHOLER, label: \"Herhaler\" });\n    if (person.statusType === \"schueler\") candidates.push({ value: DISCOUNT_SCHUELER, label: \"Scholier\" });\n    if (person.statusType === \"student\")  candidates.push({ value: DISCOUNT_STUDENT,  label: \"Opleiding\/studie\" });\n    if (!candidates.length) return null;\n    \/\/ falls theoretisch mehrere Status zutreffen, z\u00e4hlt der h\u00f6chste Prozentsatz\n    return candidates.reduce((best, c) => c.value > best.value ? c : best, candidates[0]);\n  }\n\n  function getDiscounts(person, isPaarP2) {\n    const discounts = [];\n    let remaining = Math.round(person.amount);\n\n    if (isAppOnly()) {\n      const appDisc = Math.min(DISCOUNT_APP_FIXED, remaining);\n      discounts.push({ type: \"fixed\", value: DISCOUNT_APP_FIXED, label: \"Digitale deelname\", amountEuro: appDisc });\n      remaining -= appDisc;\n    }\n\n    const pct = getPercentDiscountCandidate(person, isPaarP2);\n    if (pct) {\n      const pctDisc = Math.round(remaining * pct.value);\n      discounts.push({ type: \"pct\", value: pct.value, label: pct.label, amountEuro: pctDisc });\n      remaining -= pctDisc;\n    }\n\n    return { discounts, finalAmount: Math.max(0, remaining) };\n  }\n\n  function buildStatusOptionValue(person, isPaar) {\n    const vals = [];\n    if (isPaar) vals.push(STATUS_LABEL.paar);\n    if (isAppOnly()) vals.push(STATUS_LABEL.apponly);\n    if (isWiederholer(person)) vals.push(STATUS_LABEL.wiederholer);\n    if (person.statusType === \"schueler\") vals.push(STATUS_LABEL.schueler);\n    if (person.statusType === \"student\")  vals.push(STATUS_LABEL.student);\n    \/\/ Ecwid erwartet f\u00fcr Checkbox-Optionen ein Array, nicht einen kommaseparierten String\n    return vals;\n  }\n\n  \/\/ \u2500\u2500 Zusammenfassung \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  function refreshSummary() {\n    if (state.form === \"paar\") refreshSummaryPaar();\n    else refreshSummarySolo();\n  }\n\n  function renderDiscountRows(containerId, discounts) {\n    const container = $(containerId);\n    container.innerHTML = \"\";\n    discounts.forEach(d => {\n      const row = document.createElement(\"div\");\n      row.className = \"sw-summary-row sw-summary-discount\";\n      const pctStr = d.type === \"fixed\" ? `\u2212${d.amountEuro}\u20ac` : `\u2212${Math.round(d.value * 100)}%`;\n      row.innerHTML = `<span>${d.label} (${pctStr})<\/span><span>\u2212${d.amountEuro}\u20ac<\/span>`;\n      container.appendChild(row);\n    });\n  }\n\n  function refreshSummarySolo() {\n    const p = state.persons.solo;\n    const { discounts, finalAmount } = getDiscounts(p, false);\n\n    $(\"sw-solo-chosen\").textContent = Math.round(p.amount) + \"\u20ac\";\n    renderDiscountRows(\"sw-solo-discounts\", discounts);\n\n    const shipLine = $(\"sw-shipping-line-solo\");\n    const shippingSolo = (hasPhysicalShipment(false) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingSolo ? \"flex\" : \"none\";\n    $(\"sw-solo-total\").textContent = finalAmount + shippingSolo;\n  }\n\n  function refreshSummaryPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n\n    function fill(prefix, person, isPaarP2) {\n      const { discounts, finalAmount } = getDiscounts(person, isPaarP2);\n      $(`sw-${prefix}-chosen`).textContent = Math.round(person.amount) + \"\u20ac\";\n      renderDiscountRows(`sw-${prefix}-discounts`, discounts);\n      $(`sw-${prefix}-subtotal`).textContent = finalAmount + \"\u20ac\";\n      return finalAmount;\n    }\n\n    const f1 = fill(\"p1\", p1, false);\n    const f2 = fill(\"p2\", p2, true);\n\n    const shipLine = $(\"sw-shipping-line-paar\");\n    const shippingPaar = (hasPhysicalShipment(true) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingPaar ? \"flex\" : \"none\";\n    $(\"sw-paar-total\").textContent = f1 + f2 + shippingPaar;\n  }\n\n  function renderCountryList(filter) {\n    const list = $(\"sw-country-list\");\n    const q = (filter || \"\").toLowerCase().trim();\n    const filtered = q\n      ? getAllCountriesSorted().filter(c =>\n          c.name.toLowerCase().includes(q) ||\n          (c.aliases || []).some(a => a.includes(q))\n        )\n      : getAllCountriesSorted();\n    list.innerHTML = \"\";\n    if (!filtered.length) { list.innerHTML = '<div class=\"sw-country-empty\">Geen land gevonden<\/div>'; return; }\n    filtered.forEach(c => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-country-item\" + (state.country === c.code ? \" selected\" : \"\");\n      div.dataset.code = c.code;\n      div.innerHTML = `<span>${c.name}<\/span><span class=\"sw-country-item-cat\">Cat. ${c.cat.replace(\"cat\",\"\")}<\/span>`;\n      div.addEventListener(\"click\", () => selectCountry(c.code, c.cat, c.name));\n      list.appendChild(div);\n    });\n  }\n\n  function selectCountry(code, cat, name) {\n    state.country  = code;\n    state.category = cat;\n    $(\"sw-country\").value = code;\n    $(\"sw-country-search\").value = name;\n    $(\"sw-country-list\").innerHTML = \"\";\n    const catLabels = {\n      cat1:\"Prijscategorie 1\", cat2:\"Prijscategorie 2\",\n      cat3:\"Prijscategorie 3\", cat4:\"Prijscategorie 4\"\n    };\n    const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[code];\n    let suffix = \"\";\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      suffix = exceptionLang\n        ? ` \u2013 Verzending alleen bij deelnametaal ${LANG_DISPLAY[exceptionLang] || exceptionLang}, anders alleen digitale deelname mogelijk`\n        : \" \u2013 Alleen digitale deelname mogelijk\";\n    }\n    $(\"sw-catText\").textContent = (catLabels[cat] || cat) + suffix;\n    \/\/ Ecwid wickelt in Russland keine Zahlungen ab. Wer Russland waehlt, wird\n    \/\/ deshalb auf die russische Anmeldeseite verwiesen - die laeuft ueber n8n\n    \/\/ und Tochka statt ueber den Shop. Der russische Wizard verweist umgekehrt\n    \/\/ zurueck, sobald dort ein anderes Land gewaehlt wird.\n    const nachRussland = (code === \"RU\");\n    $(\"sw-redirect-russia\").style.display = nachRussland ? \"block\" : \"none\";\n    $(\"sw-catInfo\").style.display         = nachRussland ? \"none\"  : \"block\";\n    setNextEnabled(\"sw-btn-country-next\", !nachRussland);\n    updateAppOnlyUI();\n  }\n\n  function ensureEcwidReady(timeoutMs = 12000) {\n    return new Promise((resolve, reject) => {\n      function isReady() {\n        return window.Ecwid && window.Ecwid.Cart &&\n               typeof window.Ecwid.Cart.addProduct === \"function\" &&\n               typeof window.Ecwid.Cart.clear === \"function\";\n      }\n      if (isReady()) return resolve(true);\n      let resolved = false;\n      function done() { if (!resolved) { resolved = true; setTimeout(() => resolve(true), 200); } }\n      if (window.Ecwid) { try { window.Ecwid.OnAPILoaded.add(done); } catch(e) {} }\n      const start = Date.now();\n      const t = setInterval(() => {\n        if (isReady()) { clearInterval(t); done(); }\n        else if (Date.now() - start > timeoutMs) {\n          clearInterval(t);\n          if (!resolved) { resolved = true; reject(new Error(\"Ecwid Cart API niet beschikbaar na \" + (timeoutMs\/1000) + \"s.\")); }\n        }\n      }, 200);\n    });\n  }\n\n  function clearCartAsync() { return new Promise(r => Ecwid.Cart.clear(() => r(true))); }\n\n  function addProductAsync(payload, timeoutMs = 4000) {\n    return new Promise((resolve, reject) => {\n      let done = false;\n      const t = setTimeout(() => { if (!done) { done = true; resolve({ product:null, cart:null, timedOut:true }); } }, timeoutMs);\n      Ecwid.Cart.addProduct(payload, function(success, product, cart, error) {\n        if (done) return;\n        done = true; clearTimeout(t);\n        if (success) resolve({ product, cart, timedOut:false });\n        else reject(new Error((error || \"Product kon niet worden toegevoegd\") + \" | Payload: \" + JSON.stringify(payload)));\n      });\n    });\n  }\n\n  function goToCart() { window.location.href = SHOP_CART_URL; }\n\n  function buildN8nPayload() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const d1 = getDiscounts(p1, false);\n    const d2 = getDiscounts(p2, true);\n    return {\n      sprache: state.commLang, land: state.country, kategorie: state.category, appOnly: isAppOnly(),\n      person1: { vorname: p1.vorname, nachname: p1.nachname, email: p1.email },\n      person2: { vorname: p2.vorname, nachname: p2.nachname, email: p2.email },\n      betraege: {\n        person1: { gewaehlt: Math.round(p1.amount), rabatte: d1.discounts, endbetrag: d1.finalAmount },\n        person2: { gewaehlt: Math.round(p2.amount), rabatte: d2.discounts, endbetrag: d2.finalAmount },\n        gesamt: d1.finalAmount + d2.finalAmount\n      },\n      timestamp: new Date().toISOString()\n    };\n  }\n\n  async function sendToN8n(payload) {\n    if (!N8N_WEBHOOK_URL || N8N_WEBHOOK_URL.indexOf(\"HIER_\") === 0) {\n      throw new Error(\"Die n8n-Webhook-URL ist im Code noch nicht eingetragen.\");\n    }\n    let res;\n    try {\n      res = await fetch(N8N_WEBHOOK_URL, { method:\"POST\", headers:{\"Content-Type\":\"application\/json\"}, body:JSON.stringify(payload) });\n    } catch (e) {\n      throw new Error(\"Gegevens konden niet worden verzonden. Controleer je internetverbinding.\");\n    }\n    if (!res.ok) throw new Error(\"Verzenden mislukt (fout \" + res.status + \"). Probeer het opnieuw.\");\n    return true;\n  }\n\n  async function goCheckoutSolo() {\n    clearErrorIn(\"sw-error-amount-solo\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-solo\", \"Kies eerst een land.\");\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-solo\", \"Kies een deelnametaal.\");\n    const p = state.persons.solo;\n    const finalAmount = getDiscounts(p, false).finalAmount;\n    const participationProductId = getParticipationProductId(false);\n    setCheckoutLoading(\"sw-btn-checkout-solo\", true);\n    try {\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const statusValue = buildStatusOptionValue(p, false);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue; \/\/ Array f\u00fcr Checkbox-Option\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: finalAmount, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-solo\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-solo\", false);\n    }\n  }\n\n  async function goCheckoutPaar() {\n    clearErrorIn(\"sw-error-amount-paar\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-paar\", \"Kies eerst een land.\");\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-paar\", \"Kies een deelnametaal.\");\n    if (!validateDetailsPaar()) return showErrorIn(\"sw-error-amount-paar\", \"Ga terug en vul alle velden voor beide personen in.\");\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const participationProductId = getParticipationProductId(true);\n    setCheckoutLoading(\"sw-btn-checkout-paar\", true);\n    try {\n      const payload = buildN8nPayload();\n      await sendToN8n(payload);\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const total = getDiscounts(p1, false).finalAmount + getDiscounts(p2, true).finalAmount;\n      const statusValue = buildStatusOptionValue(p1, true);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue; \/\/ Array f\u00fcr Checkbox-Option\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: total, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-paar\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-paar\", false);\n    }\n  }\n\n  function validateLangform() {\n    const ok = !!state.commLang && !!state.form && state.form !== \"gruppe\";\n    setNextEnabled(\"sw-btn-langform-next\", ok);\n  }\n\n  function validateDetailsSolo() {\n    const ok = !!$(\"sw-solo-status\").value;\n    setNextEnabled(\"sw-btn-details-solo-next\", ok);\n    return ok;\n  }\n\n  function validateDetailsPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const emailOk = s => \/\\S+@\\S+\\.\\S+\/.test(s || \"\");\n    const ok = !!(p1.vorname && p1.vorname.trim()) && !!(p1.nachname && p1.nachname.trim()) && emailOk(p1.email) &&\n               !!(p2.vorname && p2.vorname.trim()) && !!(p2.nachname && p2.nachname.trim()) && emailOk(p2.email);\n    setNextEnabled(\"sw-btn-details-paar-next\", ok);\n    return ok;\n  }\n\n  function bindNameFields(key) {\n    [\"vorname\",\"nachname\",\"email\"].forEach(f => {\n      $(`sw-${key}-${f}`).addEventListener(\"input\", e => {\n        getPerson(key)[f] = e.target.value;\n        validateDetailsPaar();\n      });\n    });\n  }\n\n  $(\"sw-btn-welcome-next\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-country-back\").addEventListener(\"click\", () => showStep(1));\n  $(\"sw-btn-country-next\").addEventListener(\"click\", () => showStep(3));\n\n  $(\"sw-country-search\").addEventListener(\"input\",  e => renderCountryList(e.target.value));\n  $(\"sw-country-search\").addEventListener(\"focus\",  () => renderCountryList($(\"sw-country-search\").value));\n  shadow.addEventListener(\"click\", e => {\n    if (!e.target.closest(\"#sw-country-list\") && !e.target.closest(\"#sw-country-search\")) {\n      $(\"sw-country-list\").innerHTML = \"\";\n    }\n  });\n\n  $(\"sw-commLang\").addEventListener(\"change\", e => {\n    state.commLang = e.target.value;\n    validateLangform();\n    updateAppOnlyUI();\n    refreshSummary();\n  });\n\n  shadow.querySelectorAll(\".sw-choice-card\").forEach(card => {\n    card.addEventListener(\"click\", () => {\n      state.form = card.dataset.form;\n      shadow.querySelectorAll(\".sw-choice-card\").forEach(c => c.classList.toggle(\"active\", c === card));\n      const isGruppe = state.form === \"gruppe\";\n      $(\"sw-gruppe-note\").style.display = isGruppe ? \"block\" : \"none\";\n      $(\"sw-btn-langform-next\").style.display   = isGruppe ? \"none\" : \"inline-block\";\n      $(\"sw-btn-gruppe-redirect\").style.display = isGruppe ? \"inline-block\" : \"none\";\n      clearErrorIn(\"sw-error-langform\");\n      validateLangform();\n    });\n  });\n\n  $(\"sw-btn-gruppe-redirect\").addEventListener(\"click\", () => { window.location.href = getGroupRedirectUrl(); });\n  $(\"sw-btn-langform-back\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-langform-next\").addEventListener(\"click\", () => showStep(4));\n\n  $(\"sw-btn-details-solo-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-solo-status\").addEventListener(\"change\", e => {\n    const val = e.target.value;\n    const person = state.persons.solo;\n    person.statusType  = val;\n    person.wiederholer = val === \"wiederholer\";\n    clearErrorIn(\"sw-error-details-solo\");\n    validateDetailsSolo();\n  });\n  $(\"sw-btn-details-solo-next\").addEventListener(\"click\", () => {\n    if (validateDetailsSolo()) { applyRangeForForm(); showStep(5); }\n    else showErrorIn(\"sw-error-details-solo\", \"Maak eerst een keuze.\");\n  });\n\n  $(\"sw-btn-details-paar-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-btn-details-paar-next\").addEventListener(\"click\", () => {\n    if (validateDetailsPaar()) { applyRangeForForm(); showStep(5); }\n  });\n\n  $(\"sw-btn-amount-solo-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-amount-paar-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-checkout-solo\").addEventListener(\"click\", goCheckoutSolo);\n  $(\"sw-btn-checkout-paar\").addEventListener(\"click\", goCheckoutPaar);\n\n  bindNameFields(\"p1\");\n  bindNameFields(\"p2\");\n  wireAmountControl(\"solo\");\n  wireAmountControl(\"p1\");\n  wireAmountControl(\"p2\");\n\n  showStep(1);\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9de6d76 e-flex e-con-boxed e-con e-parent\" data-id=\"9de6d76\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b1be230 elementor-widget elementor-widget-html\" data-id=\"b1be230\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Tinos:ital,wght@0,400;0,700;1,400&display=swap\" rel=\"stylesheet\">\n<style>\n  .ecwid-ProductBrowser,\n  .ecwid-productbrowser,\n  div[id^=\"my-store\"],\n  .ecwid:not(#sw-host-uk) {\n    visibility: hidden !important;\n    height: 0 !important;\n    max-height: 0 !important;\n    overflow: hidden !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    position: absolute !important;\n    pointer-events: none !important;\n  }\n<\/style>\n<div id=\"sw-overlay-uk\" style=\"display:none; position:fixed; inset:0; background:rgba(245,250,246,0.92); z-index:99999; flex-direction:column; align-items:center; justify-content:center; gap:20px;\">\n  <div style=\"width:52px; height:52px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:sw-spin-uk 0.8s linear infinite;\"><\/div>\n  <div style=\"font-family:'Tinos',Georgia,serif; font-size:22px; color:#27703F;\">\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f\u2026<\/div>\n<\/div>\n<style>\n  @keyframes sw-spin-uk { to { transform: rotate(360deg); } }\n<\/style>\n<div id=\"sw-host-uk\"><\/div>\n<script>\n(function () {\n  \/\/ \u2500\u2500 Sprach-Guard: Skript bricht sofort ab, wenn die URL nicht zu UK passt \u2500\u2500\n  const _pathMatch = window.location.pathname.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n  const _pageLang = _pathMatch ? _pathMatch[1] : \"de\";\n  if (_pageLang !== \"uk\") { \n    document.getElementById(\"sw-host-uk\")?.remove();\n    document.getElementById(\"sw-overlay-uk\")?.remove();\n    return; \n  }\n  const OVERLAY_ID    = \"sw-overlay-uk\";\n  const SHOP_CART_URL = \"https:\/\/spiritual-activity.org\/uk\/store\/cart\";\n  const N8N_WEBHOOK_URL = \"https:\/\/n8n.spiritual-activity.org\/webhook\/registration-be\";\n  function getGroupRedirectUrl() {\n    const path = window.location.pathname;\n    \/\/ Erkennt Sprachpraefixe wie \/en\/, \/es\/, \/it\/, \/ru\/ am Anfang des Pfads.\n    \/\/ Deutsch ist die Standardsprache ohne Praefix.\n    const match = path.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n    const langPrefix = (match && match[1] !== \"de\") ? \"\/\" + match[1] : \"\";\n    return \"https:\/\/spiritual-activity.org\" + langPrefix + \"\/gruppen-anmeldung\";\n  }\n  const PRODUCTS = {\n    cat1: 864374030,\n    cat2: 844860366,\n    cat3: 844907264,\n    cat4: 844907265\n  };\n\n  \/\/ Versandfreie Digital-Produkte fuer alle Faelle, in denen nichts verschickt\n  \/\/ wird: rein digitale Teilnahme und Wiederholer (kein neues Kartenset).\n  const PRODUCTS_APPONLY = {\n    cat1: 863272251,\n    cat2: 863265753,\n    cat3: 863272252,\n    cat4: 863265754\n  };\n  const RANGES = {\n    cat1: { min: 160, max: 800 },\n    cat2: { min: 105, max: 700 },\n    cat3: { min:  75, max: 600 },\n    cat4: { min:  45, max: 500 }\n  };\n  const ORIENTIERUNG = {\n    cat1: { reduced: 160, base: 360, support: 580 },\n    cat2: { reduced: 105, base: 240, support: 460 },\n    cat3: { reduced:  75, base: 160, support: 340 },\n    cat4: { reduced:  45, base: 105, support: 220 }\n  };\n  const DISCOUNT_WIEDERHOLER = 0.30;\n  const DISCOUNT_SCHUELER    = 0.50;\n  const DISCOUNT_STUDENT     = 0.25;\n  const DISCOUNT_PAAR_P2     = 0.50;\n  const DISCOUNT_APP_FIXED   = 35;\n  \/\/ Versandpauschale ausserhalb EU+CH. Ecwid kassiert sie, der Wizard rechnet sie in die Anzeige-Summe ein.\n  const SHIPPING_COST   = 15;\n  \/\/ Sprachschluessel bleiben deutsch \u2013 sie sind die Werte im Ecwid-Shop.\n  const APP_ONLY_LANGS = new Set([\"Arabisch\",\"Farsi\",\"Ukrainisch\",\"Bulgarisch\",\"Franz\u00f6sisch\"]);\n  const APP_ONLY_CATEGORY_EXCEPTION_LANG = { CN: \"Chinesisch\" };\n  const EU_PLUS_CH = new Set([\n    \"AT\",\"BE\",\"BG\",\"CY\",\"CZ\",\"DE\",\"DK\",\"EE\",\"ES\",\"FI\",\"FR\",\"GR\",\"HR\",\n    \"HU\",\"IE\",\"IT\",\"LT\",\"LU\",\"LV\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SE\",\"SI\",\"SK\",\"CH\"\n  ]);\n  \/\/ Ersetzt den Platzhalter in Klammern (z.B. [Code], [X], [\ucf54\ub4dc]) durch den Wert\n  function fillPlaceholder(text, value) {\n    return String(text).replace(\/[\\[\uff3b][^\\]\uff3d]*[\\]\uff3d]\/, value);\n  }\n  function needsShipping(countryCode) {\n    return countryCode && !EU_PLUS_CH.has(countryCode);\n  }\n  \/\/ \u2500\u2500 Uebersetzte Texte \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const TXT = {\n      \"catBadge\": \"\u041a\u0430\u0442. \",\n      \"catLabels\": {\n          \"cat1\": \"\u0426\u0456\u043d\u043e\u0432\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u044f 1\",\n          \"cat2\": \"\u0426\u0456\u043d\u043e\u0432\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u044f 2\",\n          \"cat3\": \"\u0426\u0456\u043d\u043e\u0432\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u044f 3\",\n          \"cat4\": \"\u0426\u0456\u043d\u043e\u0432\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u044f 4\"\n      },\n      \"catSuffixDigital\": \"\u2013 \u043c\u043e\u0436\u043b\u0438\u0432\u0430 \u043b\u0438\u0448\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u0430 \u0443\u0447\u0430\u0441\u0442\u044c\",\n      \"catSuffixException\": \"\u2013 \u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u043c\u043e\u0436\u043b\u0438\u0432\u0430 \u043b\u0438\u0448\u0435 \u0437\u0430 \u043c\u043e\u0432\u0438 \u0443\u0447\u0430\u0441\u0442\u0456 {X}, \u0456\u043d\u0430\u043a\u0448\u0435 \u043c\u043e\u0436\u043b\u0438\u0432\u0430 \u043b\u0438\u0448\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u0430 \u0443\u0447\u0430\u0441\u0442\u044c\",\n      \"noCountry\": \"\u041a\u0440\u0430\u0457\u043d\u0443 \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e\",\n      \"markerReduced\": \"\u0417\u043d\u0438\u0436\u0435\u043d\u0438\u0439 \u0432\u043d\u0435\u0441\u043e\u043a\",\n      \"markerBase\": \"\u0411\u0430\u0437\u043e\u0432\u0438\u0439 \u0432\u043d\u0435\u0441\u043e\u043a\",\n      \"markerSupport\": \"\u0412\u043d\u0435\u0441\u043e\u043a \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0438\",\n      \"hintLong\": \"\u0422\u0443\u0442 \u0432\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u0440\u0430\u0442\u0438 \u0432\u043d\u0435\u0441\u043e\u043a, \u044f\u043a\u0438\u0439 \u0454 \u043f\u0440\u0438\u0439\u043d\u044f\u0442\u043d\u0438\u043c \u0434\u043b\u044f \u0432\u0430\u0441. \u0420\u043e\u0431\u043b\u044f\u0447\u0438 \u0432\u043d\u0435\u0441\u043e\u043a \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0438, \u0432\u0438 \u0434\u0430\u0454\u0442\u0435 \u0437\u043c\u043e\u0433\u0443 \u0431\u0440\u0430\u0442\u0438 \u0443\u0447\u0430\u0441\u0442\u044c \u043b\u044e\u0434\u044f\u043c \u0437 \u043e\u0431\u043c\u0435\u0436\u0435\u043d\u0438\u043c\u0438 \u0444\u0456\u043d\u0430\u043d\u0441\u043e\u0432\u0438\u043c\u0438 \u043c\u043e\u0436\u043b\u0438\u0432\u043e\u0441\u0442\u044f\u043c\u0438 \u0456 \u0434\u043e\u043f\u043e\u043c\u0430\u0433\u0430\u0454\u0442\u0435 \u043d\u0430\u043c \u0434\u0430\u043b\u0456 \u043d\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0454\u043a\u0442 \u0443 \u0441\u0432\u0456\u0442.\",\n      \"hintPaar\": \"\u041a\u043e\u0436\u043d\u0430 \u043e\u0441\u043e\u0431\u0430 \u043e\u0431\u0438\u0440\u0430\u0454 \u0441\u0432\u0456\u0439 \u0432\u043b\u0430\u0441\u043d\u0438\u0439 \u0432\u043d\u0435\u0441\u043e\u043a. \u041e\u0441\u043e\u0431\u0430 2 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u043e\u0442\u0440\u0438\u043c\u0443\u0454 \u0437\u043d\u0438\u0436\u043a\u0443 50%.\",\n      \"person1\": \"\u041e\u0441\u043e\u0431\u0430 1\",\n      \"person2\": \"\u041e\u0441\u043e\u0431\u0430 2\",\n      \"p2Badge\": \"(\u221250%)\",\n      \"discWiederholer\": \"\u0423\u0447\u0430\u0441\u043d\u0438\u043a \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\",\n      \"discSchueler\": \"\u0428\u043a\u043e\u043b\u044f\u0440\u0456\",\n      \"discStudent\": \"\u041d\u0430\u0432\u0447\u0430\u043d\u043d\u044f\/\u0417\u0412\u041e\",\n      \"discP2\": \"\u0417\u043d\u0438\u0436\u043a\u0430 \u043e\u0441\u043e\u0431\u0430 2\",\n      \"discApp\": \"\u0426\u0438\u0444\u0440\u043e\u0432\u0430 \u0443\u0447\u0430\u0441\u0442\u044c\",\n      \"reasonRegion\": \"\u0423 \u0432\u0430\u0448\u043e\u043c\u0443 \u0440\u0435\u0433\u0456\u043e\u043d\u0456 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u043d\u0435\u043c\u043e\u0436\u043b\u0438\u0432\u0430. \u0412\u0438 \u0431\u0435\u0440\u0435\u0442\u0435 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u043c\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0456. \u0417\u043d\u0438\u0436\u043a\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432\u0440\u0430\u0445\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u0432 \u043f\u0456\u0434\u0441\u0443\u043c\u043a\u0443.\",\n      \"reasonRussian\": \"\u0414\u043b\u044f \u0440\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u043e\u043c\u043e\u0432\u043d\u0438\u0445 \u0437\u0430 \u043c\u0435\u0436\u0430\u043c\u0438 \u0420\u043e\u0441\u0456\u0457 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043b\u0438\u0448\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u0430 \u0432\u0435\u0440\u0441\u0456\u044f. \u0417\u043d\u0438\u0436\u043a\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432\u0440\u0430\u0445\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u0432 \u043f\u0456\u0434\u0441\u0443\u043c\u043a\u0443.\",\n      \"reasonLanguage\": \"\u0426\u0456\u0454\u044e \u043c\u043e\u0432\u043e\u044e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043b\u0438\u0448\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u0430 \u0432\u0435\u0440\u0441\u0456\u044f. \u0417\u043d\u0438\u0436\u043a\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432\u0440\u0430\u0445\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u0432 \u043f\u0456\u0434\u0441\u0443\u043c\u043a\u0443.\",\n      \"reasonException\": \"\u0423 \u0432\u0430\u0448\u043e\u043c\u0443 \u0440\u0435\u0433\u0456\u043e\u043d\u0456 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u043c\u043e\u0436\u043b\u0438\u0432\u0430 \u043b\u0438\u0448\u0435 \u0437\u0430 \u043c\u043e\u0432\u0438 \u0443\u0447\u0430\u0441\u0442\u0456 {X}. \u0412\u0438 \u0431\u0435\u0440\u0435\u0442\u0435 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u043c\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0456. \u0417\u043d\u0438\u0436\u043a\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432\u0440\u0430\u0445\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u0432 \u043f\u0456\u0434\u0441\u0443\u043c\u043a\u0443.\",\n      \"thanksTitle\": \"\u0414\u0443\u0436\u0435 \u0434\u044f\u043a\u0443\u0454\u043c\u043e!\",\n      \"thanksLine1\": \"\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f\u2026\",\n      \"thanksLine2\": \"\u0412\u0430\u0441 \u0437\u0430\u0440\u0430\u0437 \u0431\u0443\u0434\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e\u2026\",\n      \"preparing\": \"\u041f\u0456\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430\u2026\",\n      \"errSelectFirst\": \"\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0441\u043f\u043e\u0447\u0430\u0442\u043a\u0443 \u0437\u0440\u043e\u0431\u0456\u0442\u044c \u0432\u0438\u0431\u0456\u0440.\",\n      \"errPaarFields\": \"\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043f\u043e\u0432\u0435\u0440\u043d\u0456\u0442\u044c\u0441\u044f \u0456 \u0437\u0430\u043f\u043e\u0432\u043d\u0456\u0442\u044c \u0443\u0441\u0456 \u043f\u043e\u043b\u044f \u0434\u043b\u044f \u043e\u0431\u043e\u0445 \u043e\u0441\u0456\u0431.\",\n      \"errCountry\": \"\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0441\u043f\u043e\u0447\u0430\u0442\u043a\u0443 \u043e\u0431\u0435\u0440\u0456\u0442\u044c \u043a\u0440\u0430\u0457\u043d\u0443.\",\n      \"errLang\": \"\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043e\u0431\u0435\u0440\u0456\u0442\u044c \u043c\u043e\u0432\u0443 \u0443\u0447\u0430\u0441\u0442\u0456.\",\n      \"errNetwork\": \"\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0438 \u0434\u0430\u043d\u0456. \u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u0441\u0432\u043e\u0454 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0437'\u0454\u0434\u043d\u0430\u043d\u043d\u044f.\",\n      \"errSubmit\": \"\u041f\u043e\u043c\u0438\u043b\u043a\u0430 \u043d\u0430\u0434\u0441\u0438\u043b\u0430\u043d\u043d\u044f (\u043a\u043e\u0434 \u043f\u043e\u043c\u0438\u043b\u043a\u0438 [Code]). \u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0441\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0449\u0435 \u0440\u0430\u0437.\",\n      \"errProduct\": \"\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0434\u043e\u0434\u0430\u0442\u0438 \u0442\u043e\u0432\u0430\u0440\",\n      \"errEcwid\": \"API \u043a\u043e\u0448\u0438\u043a\u0430 Ecwid \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u0439 \u043f\u0456\u0441\u043b\u044f [X] \u0441.\"\n  };\n  \/\/ Anzeigename der Teilnahmesprache (Schluessel = Ecwid-Wert, deutsch)\n  const LANG_DISPLAY = {\n      \"Deutsch\": \"\u041d\u0456\u043c\u0435\u0446\u044c\u043a\u0430\",\n      \"Englisch\": \"\u0410\u043d\u0433\u043b\u0456\u0439\u0441\u044c\u043a\u0430\",\n      \"Spanisch\": \"\u0406\u0441\u043f\u0430\u043d\u0441\u044c\u043a\u0430\",\n      \"Franz\u00f6sisch\": \"\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0430\",\n      \"Italienisch\": \"\u0406\u0442\u0430\u043b\u0456\u0439\u0441\u044c\u043a\u0430\",\n      \"Portugiesisch\": \"\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u044c\u043a\u0430\",\n      \"Arabisch\": \"\u0410\u0440\u0430\u0431\u0441\u044c\u043a\u0430\",\n      \"Hebr\u00e4isch\": \"\u0406\u0432\u0440\u0438\u0442\",\n      \"Farsi\": \"\u0424\u0430\u0440\u0441\u0456\",\n      \"Georgisch\": \"\u0413\u0440\u0443\u0437\u0438\u043d\u0441\u044c\u043a\u0430\",\n      \"Ukrainisch\": \"\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430\",\n      \"Niederl\u00e4ndisch\": \"\u041d\u0456\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0430\",\n      \"T\u00fcrkisch\": \"\u0422\u0443\u0440\u0435\u0446\u044c\u043a\u0430\",\n      \"Russisch\": \"\u0420\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u0430\",\n      \"Chinesisch\": \"\u041a\u0438\u0442\u0430\u0439\u0441\u044c\u043a\u0430\",\n      \"Japanisch\": \"\u042f\u043f\u043e\u043d\u0441\u044c\u043a\u0430\",\n      \"Koreanisch\": \"\u041a\u043e\u0440\u0435\u0439\u0441\u044c\u043a\u0430\"\n  };\n  \/\/ Feste Laendernamen in der Landessprache (aus CLDR), damit die Liste in\n  \/\/ jedem Browser identisch ist \u2013 unabhaengig von der Intl-Datenlage.\n  const COUNTRY_NAMES = {\n      \"AD\": \"\u0410\u043d\u0434\u043e\u0440\u0440\u0430\",\n      \"AE\": \"\u041e\u0431\u02bc\u0454\u0434\u043d\u0430\u043d\u0456 \u0410\u0440\u0430\u0431\u0441\u044c\u043a\u0456 \u0415\u043c\u0456\u0440\u0430\u0442\u0438\",\n      \"AF\": \"\u0410\u0444\u0433\u0430\u043d\u0456\u0441\u0442\u0430\u043d\",\n      \"AG\": \"\u0410\u043d\u0442\u0438\u0433\u0443\u0430 \u0456 \u0411\u0430\u0440\u0431\u0443\u0434\u0430\",\n      \"AL\": \"\u0410\u043b\u0431\u0430\u043d\u0456\u044f\",\n      \"AM\": \"\u0412\u0456\u0440\u043c\u0435\u043d\u0456\u044f\",\n      \"AO\": \"\u0410\u043d\u0433\u043e\u043b\u0430\",\n      \"AR\": \"\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0430\",\n      \"AT\": \"\u0410\u0432\u0441\u0442\u0440\u0456\u044f\",\n      \"AU\": \"\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0456\u044f\",\n      \"AW\": \"\u0410\u0440\u0443\u0431\u0430\",\n      \"AZ\": \"\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d\",\n      \"BA\": \"\u0411\u043e\u0441\u043d\u0456\u044f \u0456 \u0413\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0438\u043d\u0430\",\n      \"BB\": \"\u0411\u0430\u0440\u0431\u0430\u0434\u043e\u0441\",\n      \"BD\": \"\u0411\u0430\u043d\u0433\u043b\u0430\u0434\u0435\u0448\",\n      \"BE\": \"\u0411\u0435\u043b\u044c\u0433\u0456\u044f\",\n      \"BF\": \"\u0411\u0443\u0440\u043a\u0456\u043d\u0430-\u0424\u0430\u0441\u043e\",\n      \"BG\": \"\u0411\u043e\u043b\u0433\u0430\u0440\u0456\u044f\",\n      \"BH\": \"\u0411\u0430\u0445\u0440\u0435\u0439\u043d\",\n      \"BI\": \"\u0411\u0443\u0440\u0443\u043d\u0434\u0456\",\n      \"BJ\": \"\u0411\u0435\u043d\u0456\u043d\",\n      \"BN\": \"\u0411\u0440\u0443\u043d\u0435\u0439\",\n      \"BO\": \"\u0411\u043e\u043b\u0456\u0432\u0456\u044f\",\n      \"BR\": \"\u0411\u0440\u0430\u0437\u0438\u043b\u0456\u044f\",\n      \"BS\": \"\u0411\u0430\u0433\u0430\u043c\u0441\u044c\u043a\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438\",\n      \"BT\": \"\u0411\u0443\u0442\u0430\u043d\",\n      \"BW\": \"\u0411\u043e\u0442\u0441\u0432\u0430\u043d\u0430\",\n      \"BY\": \"\u0411\u0456\u043b\u043e\u0440\u0443\u0441\u044c\",\n      \"BZ\": \"\u0411\u0435\u043b\u0456\u0437\",\n      \"CA\": \"\u041a\u0430\u043d\u0430\u0434\u0430\",\n      \"CD\": \"\u041a\u043e\u043d\u0433\u043e \u2013 \u041a\u0456\u043d\u0448\u0430\u0441\u0430\",\n      \"CF\": \"\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430\",\n      \"CG\": \"\u041a\u043e\u043d\u0433\u043e \u2013 \u0411\u0440\u0430\u0437\u0437\u0430\u0432\u0456\u043b\u044c\",\n      \"CH\": \"\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0456\u044f\",\n      \"CI\": \"\u041a\u043e\u0442-\u0434\u02bc\u0406\u0432\u0443\u0430\u0440\",\n      \"CL\": \"\u0427\u0438\u043b\u0456\",\n      \"CM\": \"\u041a\u0430\u043c\u0435\u0440\u0443\u043d\",\n      \"CN\": \"\u041a\u0438\u0442\u0430\u0439\",\n      \"CO\": \"\u041a\u043e\u043b\u0443\u043c\u0431\u0456\u044f\",\n      \"CR\": \"\u041a\u043e\u0441\u0442\u0430-\u0420\u0438\u043a\u0430\",\n      \"CV\": \"\u041a\u0430\u0431\u043e-\u0412\u0435\u0440\u0434\u0435\",\n      \"CY\": \"\u041a\u0456\u043f\u0440\",\n      \"CZ\": \"\u0427\u0435\u0445\u0456\u044f\",\n      \"DE\": \"\u041d\u0456\u043c\u0435\u0447\u0447\u0438\u043d\u0430\",\n      \"DJ\": \"\u0414\u0436\u0438\u0431\u0443\u0442\u0456\",\n      \"DK\": \"\u0414\u0430\u043d\u0456\u044f\",\n      \"DM\": \"\u0414\u043e\u043c\u0456\u043d\u0456\u043a\u0430\",\n      \"DO\": \"\u0414\u043e\u043c\u0456\u043d\u0456\u043a\u0430\u043d\u0441\u044c\u043a\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430\",\n      \"DZ\": \"\u0410\u043b\u0436\u0438\u0440\",\n      \"EC\": \"\u0415\u043a\u0432\u0430\u0434\u043e\u0440\",\n      \"EE\": \"\u0415\u0441\u0442\u043e\u043d\u0456\u044f\",\n      \"EG\": \"\u0404\u0433\u0438\u043f\u0435\u0442\",\n      \"ES\": \"\u0406\u0441\u043f\u0430\u043d\u0456\u044f\",\n      \"ET\": \"\u0415\u0444\u0456\u043e\u043f\u0456\u044f\",\n      \"FI\": \"\u0424\u0456\u043d\u043b\u044f\u043d\u0434\u0456\u044f\",\n      \"FJ\": \"\u0424\u0456\u0434\u0436\u0456\",\n      \"FM\": \"\u041c\u0456\u043a\u0440\u043e\u043d\u0435\u0437\u0456\u044f\",\n      \"FR\": \"\u0424\u0440\u0430\u043d\u0446\u0456\u044f\",\n      \"GA\": \"\u0413\u0430\u0431\u043e\u043d\",\n      \"GB\": \"\u0412\u0435\u043b\u0438\u043a\u0430 \u0411\u0440\u0438\u0442\u0430\u043d\u0456\u044f\",\n      \"GB-SCT\": \"\u0428\u043e\u0442\u043b\u0430\u043d\u0434\u0456\u044f\",\n      \"GD\": \"\u0413\u0440\u0435\u043d\u0430\u0434\u0430\",\n      \"GE\": \"\u0413\u0440\u0443\u0437\u0456\u044f\",\n      \"GH\": \"\u0413\u0430\u043d\u0430\",\n      \"GM\": \"\u0413\u0430\u043c\u0431\u0456\u044f\",\n      \"GN\": \"\u0413\u0432\u0456\u043d\u0435\u044f\",\n      \"GQ\": \"\u0415\u043a\u0432\u0430\u0442\u043e\u0440\u0456\u0430\u043b\u044c\u043d\u0430 \u0413\u0432\u0456\u043d\u0435\u044f\",\n      \"GR\": \"\u0413\u0440\u0435\u0446\u0456\u044f\",\n      \"GT\": \"\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0430\",\n      \"GW\": \"\u0413\u0432\u0456\u043d\u0435\u044f-\u0411\u0456\u0441\u0430\u0443\",\n      \"GY\": \"\u0413\u0430\u044f\u043d\u0430\",\n      \"HK\": \"\u0413\u043e\u043d\u043a\u043e\u043d\u0433\",\n      \"HN\": \"\u0413\u043e\u043d\u0434\u0443\u0440\u0430\u0441\",\n      \"HR\": \"\u0425\u043e\u0440\u0432\u0430\u0442\u0456\u044f\",\n      \"HT\": \"\u0413\u0430\u0457\u0442\u0456\",\n      \"HU\": \"\u0423\u0433\u043e\u0440\u0449\u0438\u043d\u0430\",\n      \"ID\": \"\u0406\u043d\u0434\u043e\u043d\u0435\u0437\u0456\u044f\",\n      \"IE\": \"\u0406\u0440\u043b\u0430\u043d\u0434\u0456\u044f\",\n      \"IL\": \"\u0406\u0437\u0440\u0430\u0457\u043b\u044c\",\n      \"IN\": \"\u0406\u043d\u0434\u0456\u044f\",\n      \"IQ\": \"\u0406\u0440\u0430\u043a\",\n      \"IR\": \"\u0406\u0440\u0430\u043d\",\n      \"IS\": \"\u0406\u0441\u043b\u0430\u043d\u0434\u0456\u044f\",\n      \"IT\": \"\u0406\u0442\u0430\u043b\u0456\u044f\",\n      \"JM\": \"\u042f\u043c\u0430\u0439\u043a\u0430\",\n      \"JO\": \"\u0419\u043e\u0440\u0434\u0430\u043d\u0456\u044f\",\n      \"JP\": \"\u042f\u043f\u043e\u043d\u0456\u044f\",\n      \"KE\": \"\u041a\u0435\u043d\u0456\u044f\",\n      \"KG\": \"\u041a\u0438\u0440\u0433\u0438\u0437\u0441\u0442\u0430\u043d\",\n      \"KH\": \"\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0430\",\n      \"KI\": \"\u041a\u0456\u0440\u0438\u0431\u0430\u0442\u0456\",\n      \"KM\": \"\u041a\u043e\u043c\u043e\u0440\u0438\",\n      \"KN\": \"\u0421\u0435\u043d\u0442-\u041a\u0456\u0442\u0441 \u0456 \u041d\u0435\u0432\u0456\u0441\",\n      \"KR\": \"\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u0430 \u041a\u043e\u0440\u0435\u044f\",\n      \"KW\": \"\u041a\u0443\u0432\u0435\u0439\u0442\",\n      \"KZ\": \"\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d\",\n      \"LA\": \"\u041b\u0430\u043e\u0441\",\n      \"LB\": \"\u041b\u0456\u0432\u0430\u043d\",\n      \"LC\": \"\u0421\u0435\u043d\u0442-\u041b\u044e\u0441\u0456\u044f\",\n      \"LI\": \"\u041b\u0456\u0445\u0442\u0435\u043d\u0448\u0442\u0435\u0439\u043d\",\n      \"LK\": \"\u0428\u0440\u0456-\u041b\u0430\u043d\u043a\u0430\",\n      \"LR\": \"\u041b\u0456\u0431\u0435\u0440\u0456\u044f\",\n      \"LS\": \"\u041b\u0435\u0441\u043e\u0442\u043e\",\n      \"LT\": \"\u041b\u0438\u0442\u0432\u0430\",\n      \"LU\": \"\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0433\",\n      \"LV\": \"\u041b\u0430\u0442\u0432\u0456\u044f\",\n      \"LY\": \"\u041b\u0456\u0432\u0456\u044f\",\n      \"MA\": \"\u041c\u0430\u0440\u043e\u043a\u043a\u043e\",\n      \"MD\": \"\u041c\u043e\u043b\u0434\u043e\u0432\u0430\",\n      \"ME\": \"\u0427\u043e\u0440\u043d\u043e\u0433\u043e\u0440\u0456\u044f\",\n      \"MG\": \"\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440\",\n      \"MH\": \"\u041c\u0430\u0440\u0448\u0430\u043b\u043b\u043e\u0432\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438\",\n      \"MK\": \"\u041f\u0456\u0432\u043d\u0456\u0447\u043d\u0430 \u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0456\u044f\",\n      \"ML\": \"\u041c\u0430\u043b\u0456\",\n      \"MM\": \"\u041c\u02bc\u044f\u043d\u043c\u0430 (\u0411\u0456\u0440\u043c\u0430)\",\n      \"MN\": \"\u041c\u043e\u043d\u0433\u043e\u043b\u0456\u044f\",\n      \"MO\": \"\u041c\u0430\u043a\u0430\u043e\",\n      \"MR\": \"\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0456\u044f\",\n      \"MT\": \"\u041c\u0430\u043b\u044c\u0442\u0430\",\n      \"MU\": \"\u041c\u0430\u0432\u0440\u0438\u043a\u0456\u0439\",\n      \"MV\": \"\u041c\u0430\u043b\u044c\u0434\u0456\u0432\u0438\",\n      \"MW\": \"\u041c\u0430\u043b\u0430\u0432\u0456\",\n      \"MX\": \"\u041c\u0435\u043a\u0441\u0438\u043a\u0430\",\n      \"MY\": \"\u041c\u0430\u043b\u0430\u0439\u0437\u0456\u044f\",\n      \"MZ\": \"\u041c\u043e\u0437\u0430\u043c\u0431\u0456\u043a\",\n      \"NA\": \"\u041d\u0430\u043c\u0456\u0431\u0456\u044f\",\n      \"NE\": \"\u041d\u0456\u0433\u0435\u0440\",\n      \"NG\": \"\u041d\u0456\u0433\u0435\u0440\u0456\u044f\",\n      \"NI\": \"\u041d\u0456\u043a\u0430\u0440\u0430\u0433\u0443\u0430\",\n      \"NL\": \"\u041d\u0456\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0438\",\n      \"NO\": \"\u041d\u043e\u0440\u0432\u0435\u0433\u0456\u044f\",\n      \"NP\": \"\u041d\u0435\u043f\u0430\u043b\",\n      \"NR\": \"\u041d\u0430\u0443\u0440\u0443\",\n      \"NZ\": \"\u041d\u043e\u0432\u0430 \u0417\u0435\u043b\u0430\u043d\u0434\u0456\u044f\",\n      \"OM\": \"\u041e\u043c\u0430\u043d\",\n      \"PA\": \"\u041f\u0430\u043d\u0430\u043c\u0430\",\n      \"PE\": \"\u041f\u0435\u0440\u0443\",\n      \"PG\": \"\u041f\u0430\u043f\u0443\u0430-\u041d\u043e\u0432\u0430 \u0413\u0432\u0456\u043d\u0435\u044f\",\n      \"PH\": \"\u0424\u0456\u043b\u0456\u043f\u043f\u0456\u043d\u0438\",\n      \"PK\": \"\u041f\u0430\u043a\u0438\u0441\u0442\u0430\u043d\",\n      \"PL\": \"\u041f\u043e\u043b\u044c\u0449\u0430\",\n      \"PR\": \"\u041f\u0443\u0435\u0440\u0442\u043e-\u0420\u0438\u043a\u043e\",\n      \"PS\": \"\u041f\u0430\u043b\u0435\u0441\u0442\u0438\u043d\u0441\u044c\u043a\u0456 \u0442\u0435\u0440\u0438\u0442\u043e\u0440\u0456\u0457\",\n      \"PT\": \"\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0456\u044f\",\n      \"PW\": \"\u041f\u0430\u043b\u0430\u0443\",\n      \"PY\": \"\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439\",\n      \"QA\": \"\u041a\u0430\u0442\u0430\u0440\",\n      \"RO\": \"\u0420\u0443\u043c\u0443\u043d\u0456\u044f\",\n      \"RS\": \"\u0421\u0435\u0440\u0431\u0456\u044f\",\n      \"RU\": \"\u0420\u043e\u0441\u0456\u044f\",\n      \"RW\": \"\u0420\u0443\u0430\u043d\u0434\u0430\",\n      \"SA\": \"\u0421\u0430\u0443\u0434\u0456\u0432\u0441\u044c\u043a\u0430 \u0410\u0440\u0430\u0432\u0456\u044f\",\n      \"SB\": \"\u0421\u043e\u043b\u043e\u043c\u043e\u043d\u043e\u0432\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438\",\n      \"SC\": \"\u0421\u0435\u0439\u0448\u0435\u043b\u044c\u0441\u044c\u043a\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438\",\n      \"SD\": \"\u0421\u0443\u0434\u0430\u043d\",\n      \"SE\": \"\u0428\u0432\u0435\u0446\u0456\u044f\",\n      \"SG\": \"\u0421\u0456\u043d\u0433\u0430\u043f\u0443\u0440\",\n      \"SI\": \"\u0421\u043b\u043e\u0432\u0435\u043d\u0456\u044f\",\n      \"SK\": \"\u0421\u043b\u043e\u0432\u0430\u0447\u0447\u0438\u043d\u0430\",\n      \"SL\": \"\u0421\u044c\u0454\u0440\u0440\u0430-\u041b\u0435\u043e\u043d\u0435\",\n      \"SM\": \"\u0421\u0430\u043d-\u041c\u0430\u0440\u0438\u043d\u043e\",\n      \"SN\": \"\u0421\u0435\u043d\u0435\u0433\u0430\u043b\",\n      \"SO\": \"\u0421\u043e\u043c\u0430\u043b\u0456\",\n      \"SR\": \"\u0421\u0443\u0440\u0438\u043d\u0430\u043c\",\n      \"SS\": \"\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u0438\u0439 \u0421\u0443\u0434\u0430\u043d\",\n      \"ST\": \"\u0421\u0430\u043d-\u0422\u043e\u043c\u0435 \u0456 \u041f\u0440\u0438\u043d\u0441\u0456\u043f\u0456\",\n      \"SV\": \"\u0421\u0430\u043b\u044c\u0432\u0430\u0434\u043e\u0440\",\n      \"SZ\": \"\u0415\u0441\u0432\u0430\u0442\u0456\u043d\u0456\",\n      \"TD\": \"\u0427\u0430\u0434\",\n      \"TG\": \"\u0422\u043e\u0433\u043e\",\n      \"TH\": \"\u0422\u0430\u0457\u043b\u0430\u043d\u0434\",\n      \"TJ\": \"\u0422\u0430\u0434\u0436\u0438\u043a\u0438\u0441\u0442\u0430\u043d\",\n      \"TL\": \"\u0422\u0438\u043c\u043e\u0440-\u041b\u0435\u0448\u0442\u0456\",\n      \"TM\": \"\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0456\u0441\u0442\u0430\u043d\",\n      \"TN\": \"\u0422\u0443\u043d\u0456\u0441\",\n      \"TO\": \"\u0422\u043e\u043d\u0433\u0430\",\n      \"TR\": \"\u0422\u0443\u0440\u0435\u0447\u0447\u0438\u043d\u0430\",\n      \"TT\": \"\u0422\u0440\u0438\u043d\u0456\u0434\u0430\u0434 \u0456 \u0422\u043e\u0431\u0430\u0433\u043e\",\n      \"TV\": \"\u0422\u0443\u0432\u0430\u043b\u0443\",\n      \"TW\": \"\u0422\u0430\u0439\u0432\u0430\u043d\u044c\",\n      \"TZ\": \"\u0422\u0430\u043d\u0437\u0430\u043d\u0456\u044f\",\n      \"UA\": \"\u0423\u043a\u0440\u0430\u0457\u043d\u0430\",\n      \"UG\": \"\u0423\u0433\u0430\u043d\u0434\u0430\",\n      \"US\": \"\u0421\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0456 \u0428\u0442\u0430\u0442\u0438\",\n      \"UY\": \"\u0423\u0440\u0443\u0433\u0432\u0430\u0439\",\n      \"UZ\": \"\u0423\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d\",\n      \"VC\": \"\u0421\u0435\u043d\u0442-\u0412\u0456\u043d\u0441\u0435\u043d\u0442 \u0456 \u0413\u0440\u0435\u043d\u0430\u0434\u0456\u043d\u0438\",\n      \"VE\": \"\u0412\u0435\u043d\u0435\u0441\u0443\u0435\u043b\u0430\",\n      \"VN\": \"\u0412\u02bc\u0454\u0442\u043d\u0430\u043c\",\n      \"VU\": \"\u0412\u0430\u043d\u0443\u0430\u0442\u0443\",\n      \"WS\": \"\u0421\u0430\u043c\u043e\u0430\",\n      \"XK\": \"\u041a\u043e\u0441\u043e\u0432\u043e\",\n      \"YE\": \"\u0404\u043c\u0435\u043d\",\n      \"ZA\": \"\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u043e-\u0410\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430\",\n      \"ZM\": \"\u0417\u0430\u043c\u0431\u0456\u044f\",\n      \"ZW\": \"\u0417\u0456\u043c\u0431\u0430\u0431\u0432\u0435\"\n  };\n  \/\/ \u2500\u2500 Zusaetzliche Suchbegriffe (Aliasse) je Land \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Beeinflusst NUR die Suche, nicht den angezeigten Namen. Alles klein schreiben.\n  \/\/ Wichtig fuer UK: lateinische Schreibweisen, damit die Suche auch mit\n  \/\/ umgeschalteter Tastatur funktioniert.\n  const COUNTRY_SEARCH_ALIASES = {\n      \"US\": [\"\u0441\u0448\u0430\", \"\u0430\u043c\u0435\u0440\u0438\u043a\u0430\", \"\u0441\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0456 \u0448\u0442\u0430\u0442\u0438 \u0430\u043c\u0435\u0440\u0438\u043a\u0438\", \"usa\", \"united states\", \"america\", \"united states of america\"],\n      \"GB\": [\"\u0432\u0435\u043b\u0438\u043a\u0430 \u0431\u0440\u0438\u0442\u0430\u043d\u0456\u044f\", \"\u0432\u0435\u043b\u0438\u043a\u043e\u0431\u0440\u0438\u0442\u0430\u043d\u0456\u044f\", \"\u0430\u043d\u0433\u043b\u0456\u044f\", \"\u0431\u0440\u0438\u0442\u0430\u043d\u0456\u044f\", \"uk\", \"united kingdom\", \"england\", \"great britain\", \"britain\"],\n      \"GB-SCT\": [\"\u0448\u043e\u0442\u043b\u0430\u043d\u0434\u0456\u044f\", \"scotland\"],\n      \"AE\": [\"\u043e\u0430\u0435\", \"\u0435\u043c\u0456\u0440\u0430\u0442\u0438\", \"\u043e\u0431\u0454\u0434\u043d\u0430\u043d\u0456 \u0430\u0440\u0430\u0431\u0441\u044c\u043a\u0456 \u0435\u043c\u0456\u0440\u0430\u0442\u0438\", \"uae\", \"emirates\", \"united arab emirates\", \"dubai\"],\n      \"KR\": [\"\u043f\u0456\u0432\u0434\u0435\u043d\u043d\u0430 \u043a\u043e\u0440\u0435\u044f\", \"\u043a\u043e\u0440\u0435\u044f\", \"korea\", \"south korea\"],\n      \"NL\": [\"\u043d\u0456\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0438\", \"\u0433\u043e\u043b\u043b\u0430\u043d\u0434\u0456\u044f\", \"netherlands\", \"holland\"],\n      \"CH\": [\"\u0448\u0432\u0435\u0439\u0446\u0430\u0440\u0456\u044f\", \"switzerland\", \"schweiz\"],\n      \"DE\": [\"\u043d\u0456\u043c\u0435\u0447\u0447\u0438\u043d\u0430\", \"germany\", \"deutschland\"],\n      \"AT\": [\"\u0430\u0432\u0441\u0442\u0440\u0456\u044f\", \"austria\"],\n      \"CZ\": [\"\u0447\u0435\u0445\u0456\u044f\", \"\u0447\u0435\u0441\u044c\u043a\u0430 \u0440\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430\", \"czechia\", \"czech republic\"],\n      \"TR\": [\"\u0442\u0443\u0440\u0435\u0447\u0447\u0438\u043d\u0430\", \"turkey\", \"t\u00fcrkiye\", \"turkiye\"],\n      \"CI\": [\"\u043a\u043e\u0442-\u0434\u0456\u0432\u0443\u0430\u0440\", \"\u043a\u043e\u0442 \u0434\u0456\u0432\u0443\u0430\u0440\", \"ivory coast\", \"cote d'ivoire\"],\n      \"MM\": [\"\u043c\u02bc\u044f\u043d\u043c\u0430\", \"\u043c\u044f\u043d\u043c\u0430\", \"\u0431\u0456\u0440\u043c\u0430\", \"myanmar\", \"burma\"],\n      \"TL\": [\"\u0442\u0438\u043c\u043e\u0440-\u043b\u0435\u0448\u0442\u0456\", \"\u0441\u0445\u0456\u0434\u043d\u0438\u0439 \u0442\u0438\u043c\u043e\u0440\", \"timor-leste\", \"east timor\"],\n      \"SZ\": [\"\u0435\u0441\u0432\u0430\u0442\u0456\u043d\u0456\", \"\u0441\u0432\u0430\u0437\u0456\u043b\u0435\u043d\u0434\", \"eswatini\", \"swaziland\"],\n      \"MK\": [\"\u043f\u0456\u0432\u043d\u0456\u0447\u043d\u0430 \u043c\u0430\u043a\u0435\u0434\u043e\u043d\u0456\u044f\", \"\u043c\u0430\u043a\u0435\u0434\u043e\u043d\u0456\u044f\", \"macedonia\", \"north macedonia\"],\n      \"BY\": [\"\u0431\u0456\u043b\u043e\u0440\u0443\u0441\u044c\", \"belarus\"],\n      \"MD\": [\"\u043c\u043e\u043b\u0434\u043e\u0432\u0430\", \"\u043c\u043e\u043b\u0434\u0430\u0432\u0456\u044f\", \"moldova\"],\n      \"MA\": [\"\u043c\u0430\u0440\u043e\u043a\u043a\u043e\", \"morocco\"],\n      \"EG\": [\"\u0454\u0433\u0438\u043f\u0435\u0442\", \"egypt\"],\n      \"GR\": [\"\u0433\u0440\u0435\u0446\u0456\u044f\", \"greece\"],\n      \"IT\": [\"\u0456\u0442\u0430\u043b\u0456\u044f\", \"italy\"],\n      \"ES\": [\"\u0456\u0441\u043f\u0430\u043d\u0456\u044f\", \"spain\"],\n      \"FR\": [\"\u0444\u0440\u0430\u043d\u0446\u0456\u044f\", \"france\"],\n      \"PL\": [\"\u043f\u043e\u043b\u044c\u0449\u0430\", \"poland\"],\n      \"RU\": [\"\u0440\u043e\u0441\u0456\u044f\", \"russia\", \"russian federation\"],\n      \"CN\": [\"\u043a\u0438\u0442\u0430\u0439\", \"china\"],\n      \"JP\": [\"\u044f\u043f\u043e\u043d\u0456\u044f\", \"japan\"],\n      \"IN\": [\"\u0456\u043d\u0434\u0456\u044f\", \"india\"],\n      \"BR\": [\"\u0431\u0440\u0430\u0437\u0438\u043b\u0456\u044f\", \"brazil\"],\n      \"MX\": [\"\u043c\u0435\u043a\u0441\u0438\u043a\u0430\", \"mexico\"],\n      \"CA\": [\"\u043a\u0430\u043d\u0430\u0434\u0430\", \"canada\"],\n      \"AU\": [\"\u0430\u0432\u0441\u0442\u0440\u0430\u043b\u0456\u044f\", \"australia\"],\n      \"NZ\": [\"\u043d\u043e\u0432\u0430 \u0437\u0435\u043b\u0430\u043d\u0434\u0456\u044f\", \"new zealand\"],\n      \"ZA\": [\"\u043f\u0456\u0432\u0434\u0435\u043d\u043d\u043e-\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0430 \u0440\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430\", \"\u043f\u0430\u0440\", \"\u043f\u0456\u0432\u0434\u0435\u043d\u043d\u0430 \u0430\u0444\u0440\u0438\u043a\u0430\", \"south africa\"],\n      \"UA\": [\"\u0443\u043a\u0440\u0430\u0457\u043d\u0430\", \"ukraine\"],\n      \"SE\": [\"\u0448\u0432\u0435\u0446\u0456\u044f\", \"sweden\"],\n      \"NO\": [\"\u043d\u043e\u0440\u0432\u0435\u0433\u0456\u044f\", \"norway\"],\n      \"DK\": [\"\u0434\u0430\u043d\u0456\u044f\", \"denmark\"],\n      \"FI\": [\"\u0444\u0456\u043d\u043b\u044f\u043d\u0434\u0456\u044f\", \"finland\"],\n      \"PT\": [\"\u043f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0456\u044f\", \"portugal\"],\n      \"IL\": [\"\u0456\u0437\u0440\u0430\u0457\u043b\u044c\", \"israel\"],\n      \"GE\": [\"\u0433\u0440\u0443\u0437\u0456\u044f\", \"georgia\"],\n      \"KZ\": [\"\u043a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d\", \"kazakhstan\"],\n      \"RO\": [\"\u0440\u0443\u043c\u0443\u043d\u0456\u044f\", \"romania\"],\n      \"BG\": [\"\u0431\u043e\u043b\u0433\u0430\u0440\u0456\u044f\", \"bulgaria\"],\n      \"HU\": [\"\u0443\u0433\u043e\u0440\u0449\u0438\u043d\u0430\", \"hungary\"],\n      \"SK\": [\"\u0441\u043b\u043e\u0432\u0430\u0447\u0447\u0438\u043d\u0430\", \"slovakia\"],\n      \"LT\": [\"\u043b\u0438\u0442\u0432\u0430\", \"lithuania\"],\n      \"LV\": [\"\u043b\u0430\u0442\u0432\u0456\u044f\", \"latvia\"],\n      \"EE\": [\"\u0435\u0441\u0442\u043e\u043d\u0456\u044f\", \"estonia\"],\n      \"IE\": [\"\u0456\u0440\u043b\u0430\u043d\u0434\u0456\u044f\", \"ireland\"],\n      \"BE\": [\"\u0431\u0435\u043b\u044c\u0433\u0456\u044f\", \"belgium\"],\n      \"KP\": [\"north korea\"],\n      \"CV\": [\"cabo verde\", \"cape verde\"],\n      \"CD\": [\"dr congo\", \"drc\", \"congo kinshasa\"],\n      \"CG\": [\"congo brazzaville\"],\n      \"VA\": [\"vatican\", \"holy see\"],\n      \"LA\": [\"laos\"],\n      \"VN\": [\"vietnam\", \"viet nam\"],\n      \"IR\": [\"iran\", \"persia\"],\n      \"MO\": [\"macau\", \"macao\"],\n      \"HK\": [\"hong kong\"],\n      \"TW\": [\"taiwan\"]\n  };\n  const COUNTRIES = {\n    cat1: [\"CY\",\"CA\",\"FR\",\"FI\",\"BH\",\"AU\",\"AD\",\"SE\",\"DE\",\"SA\",\"AT\",\"BE\",\"HK\",\"MT\",\"IS\",\"SM\",\"NL\",\"DK\",\"TW\",\"AE\",\"US\",\"BN\",\"CH\",\"NO\",\"GY\",\"QA\",\"MO\",\"IE\",\"LU\",\"SG\",\"LI\",\"GB\",\"GB-SCT\"],\n    cat2: [\"KR\",\"ME\",\"CL\",\"TT\",\"MV\",\"UY\",\"BS\",\"OM\",\"SC\",\"MY\",\"PA\",\"TR\",\"LV\",\"GR\",\"KZ\",\"SK\",\"HU\",\"RU\",\"RO\",\"EE\",\"AW\",\"PT\",\"PR\",\"HR\",\"KW\",\"JP\",\"NZ\",\"PL\",\"IL\",\"ES\",\"LT\",\"SI\",\"CZ\",\"IT\"],\n    cat3: [\"BZ\",\"TN\",\"GT\",\"IQ\",\"ZA\",\"FJ\",\"EC\",\"LY\",\"ID\",\"VN\",\"BT\",\"DZ\",\"PE\",\"PW\",\"BW\",\"DM\",\"PY\",\"MD\",\"GQ\",\"MN\",\"VC\",\"IR\",\"GD\",\"EG\",\"CO\",\"SR\",\"TM\",\"BA\",\"BB\",\"BR\",\"AL\",\"AM\",\"GA\",\"MX\",\"AZ\",\"TH\",\"LC\",\"CN\",\"MK\",\"DO\",\"AG\",\"AR\",\"GE\",\"CR\",\"MU\",\"RS\",\"BY\",\"KN\",\"XK\",\"BG\"],\n    cat4: [\"UA\",\"BI\",\"SS\",\"CF\",\"YE\",\"MZ\",\"MW\",\"SO\",\"CD\",\"LR\",\"MG\",\"NE\",\"AF\",\"SD\",\"SB\",\"ML\",\"HT\",\"VU\",\"BF\",\"LS\",\"TD\",\"GW\",\"TG\",\"GM\",\"KI\",\"SL\",\"PG\",\"UG\",\"KM\",\"PS\",\"RW\",\"TZ\",\"ET\",\"ZM\",\"FM\",\"BJ\",\"GN\",\"TL\",\"MM\",\"SN\",\"CM\",\"TJ\",\"TV\",\"NP\",\"CG\",\"ST\",\"PK\",\"KE\",\"ZW\",\"MH\",\"HN\",\"TO\",\"CI\",\"WS\",\"GH\",\"VE\",\"KH\",\"MR\",\"KG\",\"NI\",\"NG\",\"DJ\",\"AO\",\"LA\",\"BD\",\"BO\",\"MA\",\"JO\",\"LB\",\"NR\",\"IN\",\"NA\",\"CV\",\"UZ\",\"PH\",\"SZ\",\"JM\",\"SV\",\"LK\"]\n  };\n  \/\/ \u2500\u2500 Ecwid-Optionsnamen und -werte: bleiben exakt deutsch wie im Shop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const OPT_COMM_LANG = \"In welcher Sprache nimmst Du teil?\";\n  const OPT_STATUS    = \"Trifft etwas davon auf Dich zu?\";\n  const STATUS_LABEL = {\n    paar:        \"Zu zweit (gleicher Haushalt)\",\n    schueler:    \"Sch\u00fcler:innen\",\n    student:     \"Student\",\n    wiederholer: \"Wiederholer\",\n    apponly:     \"Digitale Teilnahme (App)\"\n  };\n  \/\/ \u2500\u2500 Shadow DOM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const host = document.getElementById(\"sw-host-uk\");\n  const shadow = host.attachShadow({ mode: \"open\" });\n  const styleEl = document.createElement(\"style\");\n  styleEl.textContent = `\n    :host {\n      display: block;\n      --bg:           #F5FAF6;\n      --card:         #FFFFFF;\n      --ink:          #0C1E14;\n      --ink-muted:    #27703F;\n      --accent:       #0C1E14;\n      --accent-light: #E6F2E8;\n      --border:       #C8E0CE;\n      --radius:       16px;\n      --radius-sm:    10px;\n    }\n    @keyframes wiz-spin { to { transform: rotate(360deg); } }\n    .sw-root {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 20px; font-weight: 400; color: var(--ink);\n      background: var(--bg); padding: 32px 20px;\n      display: flex; align-items: flex-start; justify-content: center;\n    }\n    .sw-card {\n      background: var(--card); border: 1px solid var(--border);\n      border-radius: 24px; padding: 36px 32px;\n      width: 100%; max-width: 780px;\n      box-shadow: 0 4px 24px rgba(12,30,20,0.08); box-sizing: border-box;\n    }\n    @media (max-width: 480px) {\n      .sw-root { padding: 16px 10px; }\n      .sw-card { padding: 24px 16px; border-radius: 16px; }\n    }\n    .sw-progress { display: flex; gap: 8px; margin-bottom: 32px; }\n    .sw-progress-step { flex: 1; height: 4px; background: var(--border); border-radius: 999px; transition: background 0.35s; }\n    .sw-progress-step.active { background: var(--accent); }\n    .sw-progress-step.done   { background: var(--accent); opacity: 0.4; }\n    .sw-step-label { font-size: 12px; font-weight: 400; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: 10px; }\n    .sw-heading { font-size: 26px; font-weight: 500; line-height: 1.2; margin: 0 0 6px; color: var(--accent); letter-spacing: 0.01em; }\n    .sw-subtext { font-size: 18px; font-weight: 400; color: var(--ink-muted); margin: 0 0 28px; line-height: 1.6; }\n    .sw-label { display: block; font-size: 18px; font-weight: 700; margin-bottom: 6px; color: var(--ink); }\n    .sw-select, .sw-text-input {\n      width: 100%; padding: 13px 15px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg);\n      font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-select {\n      appearance: none;\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2327703F' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: right 15px center;\n      cursor: pointer;\n    }\n    .sw-select:focus, .sw-text-input:focus {\n      outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1);\n    }\n    .sw-text-input { margin-bottom: 14px; }\n    .sw-redirect { display: none; margin-top: 12px; padding: 18px 20px; border-radius: var(--radius-sm); background: #FFF8F0; border: 1px solid rgba(180,80,0,0.2); font-size: 17px; line-height: 1.8; color: var(--ink); }\n    .sw-redirect strong { display: block; margin-bottom: 8px; font-size: 17px; color: #7A3500; }\n    .sw-redirect a { color: #27703F; text-decoration: underline; }\n    .sw-infobox {\n      margin-top: 12px; padding: 15px 17px; border-radius: var(--radius-sm);\n      background: var(--accent-light); border: 1px solid rgba(12,30,20,0.15);\n      font-size: 18px; font-weight: 400; line-height: 1.5;\n    }\n    .sw-infobox-title {\n      font-weight: 700; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase;\n      color: var(--accent); margin-bottom: 3px;\n    }\n    .sw-divider { border: 0; border-top: 1px solid var(--border); margin: 30px 0 24px; }\n    .sw-choice-row { display: flex; gap: 10px; flex-wrap: wrap; }\n    .sw-choice-card {\n      flex: 1; min-width: 150px; padding: 16px 14px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      text-align: center; cursor: pointer; font-size: 17px; line-height: 1.3;\n      transition: all 0.15s; background: var(--bg); box-sizing: border-box;\n    }\n    .sw-choice-card:hover { border-color: var(--accent); }\n    .sw-choice-card.active { background: var(--accent-light); border-color: var(--accent); font-weight: 700; color: var(--accent); }\n    @media (max-width: 480px) { .sw-choice-card { min-width: 100%; } }\n    .sw-person-block { margin-bottom: 8px; }\n    .sw-person-title { font-weight: 700; font-size: 21px; color: var(--accent); margin-bottom: 16px; }\n    .sw-field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 0; }\n    @media (max-width: 480px) { .sw-field-grid { grid-template-columns: 1fr; } }\n    .sw-range-header { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 22px; }\n    .sw-range-header-label { font-weight: 700; font-size: 18px; }\n    .sw-amount-display { display: flex; align-items: baseline; gap: 3px; }\n    .sw-amount-display span { font-size: 18px; font-weight: 400; }\n    .sw-amount-input {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 36px; font-weight: 700; color: var(--ink);\n      border: 2px solid var(--border); background: var(--bg);\n      text-align: right; width: 132px; padding: 4px 12px;\n      outline: none; border-radius: var(--radius-sm);\n      transition: background 0.15s, color 0.15s, border-color 0.15s, box-shadow 0.15s;\n    }\n    .sw-amount-input:hover { border-color: var(--accent); background: var(--accent-light); }\n    .sw-amount-input:focus { border-color: var(--accent); background: var(--accent-light); color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    input[type=range].sw-range {\n      -webkit-appearance: none; width: 100%; height: 6px;\n      border-radius: 999px; background: var(--border); outline: none; cursor: pointer;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb {\n      -webkit-appearance: none; width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35);\n      cursor: pointer; transition: transform 0.15s, box-shadow 0.15s;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb:hover { transform: scale(1.08); box-shadow: 0 0 0 9px rgba(12,30,20,0.18), 0 3px 12px rgba(12,30,20,0.4); }\n    input[type=range].sw-range::-webkit-slider-thumb:active { transform: scale(1.12); }\n    input[type=range].sw-range::-moz-range-thumb {\n      width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      border: none; box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); cursor: pointer;\n    }\n    input[type=range].sw-range.sw-pulse::-webkit-slider-thumb { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    input[type=range].sw-range.sw-pulse::-moz-range-thumb    { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    @keyframes sw-thumb-pulse {\n      0%, 100% { box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); }\n      50%      { box-shadow: 0 0 0 15px rgba(12,30,20,0.05), 0 3px 10px rgba(12,30,20,0.35); }\n    }\n    .sw-range-wrap { position: relative; }\n    .sw-markers { position: relative; height: 56px; margin-bottom: 8px; margin-left: 18px; margin-right: 18px; }\n    .sw-marker {\n      position: absolute; transform: translateX(-50%);\n      display: flex; flex-direction: column; align-items: center; gap: 2px;\n      justify-content: flex-end; height: 100%; pointer-events: auto; cursor: pointer;\n    }\n    .sw-marker-tick { width: 1px; height: 10px; background: var(--border); flex-shrink: 0; }\n    .sw-marker.active .sw-marker-tick { background: var(--accent); opacity: 0.5; }\n    .sw-marker-label { font-size: 11px; font-weight: 400; color: var(--ink-muted); white-space: nowrap; line-height: 1.2; text-align: center; order: -2; }\n    .sw-marker-amount { font-size: 13px; font-weight: 700; color: var(--ink-muted); order: -1; }\n    .sw-marker.active .sw-marker-label, .sw-marker.active .sw-marker-amount { color: var(--accent); }\n    @media (max-width: 540px) {\n      .sw-markers { display: none; }\n      .sw-markers-mobile { display: flex !important; }\n    }\n    .sw-markers-mobile {\n      display: none; flex-direction: column; gap: 0;\n      margin: 12px 0 4px; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden;\n    }\n    .sw-marker-mobile {\n      display: flex; align-items: center; justify-content: space-between;\n      padding: 10px 14px; cursor: pointer; border-bottom: 1px solid var(--border);\n      transition: background 0.15s; font-family: 'Tinos', Georgia, serif;\n    }\n    .sw-marker-mobile:last-child { border-bottom: 0; }\n    .sw-marker-mobile:hover { background: var(--accent-light); }\n    .sw-marker-mobile.active { background: var(--accent-light); }\n    .sw-marker-mobile-label { font-size: 15px; font-weight: 400; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-label { color: var(--accent); font-weight: 700; }\n    .sw-marker-mobile-amount { font-size: 16px; font-weight: 700; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-amount { color: var(--accent); }\n    .sw-summary-box { padding: 18px 20px; background: var(--accent-light); border: 1px solid rgba(12,30,20,0.2); border-radius: var(--radius-sm); margin-top: 20px; }\n    .sw-summary-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; font-size: 16px; color: var(--ink); }\n    .sw-summary-row.sw-summary-discount { color: #8A1F1F; }\n    .sw-summary-row.sw-summary-total { border-top: 1px solid rgba(12,30,20,0.25); margin-top: 8px; padding-top: 12px; font-weight: 700; font-size: 22px; color: var(--accent); }\n    .sw-summary-person-label { font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-muted); margin: 14px 0 2px; }\n    .sw-summary-person-label:first-child { margin-top: 0; }\n    .sw-btn-row { display: flex; gap: 10px; margin-top: 24px; flex-wrap: wrap; }\n    .sw-btn { flex: 1; min-width: 140px; padding: 15px 17px; border-radius: var(--radius-sm); font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 700; cursor: pointer; transition: all 0.2s; border: 0; }\n    .sw-btn-primary { background: var(--accent); color: #fff; }\n    .sw-btn-primary:hover { background: #27703F; transform: translateY(-1px); }\n    .sw-btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }\n    .sw-btn-secondary { background: transparent; color: var(--ink); border: 1px solid var(--border); }\n    .sw-btn-secondary:hover { background: var(--bg); }\n    .sw-error { display: none; margin-top: 15px; padding: 13px 15px; border-radius: var(--radius-sm); background: #FFF3F3; border: 1px solid rgba(220,30,30,0.2); color: #8A1F1F; font-size: 18px; font-weight: 400; line-height: 1.5; white-space: pre-wrap; }\n    .wiz-spinner { display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.4); border-top-color: #fff; border-radius: 50%; animation: wiz-spin 0.7s linear infinite; vertical-align: middle; margin-right: 8px; }\n    .sw-country-search-wrap { position: relative; margin-bottom: 10px; }\n    .sw-country-search-icon { position: absolute; left: 18px; top: 50%; transform: translateY(-50%); color: var(--ink-muted); pointer-events: none; opacity: 0.5; }\n    .sw-country-search {\n      width: 100%; padding: 13px 15px 13px 54px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg); font-family: 'Tinos', Georgia, serif;\n      font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-country-search:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    .sw-country-list { max-height: 240px; overflow-y: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }\n    .sw-country-item { padding: 11px 15px; cursor: pointer; font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; display: flex; justify-content: space-between; align-items: center; transition: background 0.15s; border-bottom: 1px solid var(--border); }\n    .sw-country-item:last-child { border-bottom: 0; }\n    .sw-country-item:hover { background: var(--accent-light); }\n    .sw-country-item.selected { background: var(--accent-light); font-weight: 700; }\n    .sw-country-item-cat { font-size: 12px; color: var(--ink-muted); background: var(--border); padding: 2px 8px; border-radius: 999px; }\n    .sw-country-empty { padding: 15px; font-size: 18px; color: var(--ink-muted); text-align: center; }\n    .sw-step { display: none; }\n    .sw-step.active { display: block; }\n  `;\n  shadow.appendChild(styleEl);\n  const wrapper = document.createElement(\"div\");\n  wrapper.innerHTML = `\n    <div class=\"sw-root\">\n      <div class=\"sw-card\">\n        <div class=\"sw-progress\">\n          <div class=\"sw-progress-step\" id=\"sw-prog-1\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-2\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-3\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-4\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-5\"><\/div>\n        <\/div>\n        <!-- STEP 1 -->\n        <div class=\"sw-step active\" id=\"sw-step-welcome\">\n          <div class=\"sw-step-label\">\u041a\u0440\u043e\u043a 1 \u0437 5<\/div>\n          <h2 class=\"sw-heading\">\u041b\u0430\u0441\u043a\u0430\u0432\u043e \u043f\u0440\u043e\u0441\u0438\u043c\u043e<\/h2>\n          <p class=\"sw-subtext\">\u0417\u0430 \u043a\u0456\u043b\u044c\u043a\u0430 \u043a\u0440\u043e\u043a\u0456\u0432 \u0432\u0438 \u043e\u0431\u0435\u0440\u0435\u0442\u0435 \u043a\u0440\u0430\u0457\u043d\u0443, \u043c\u043e\u0432\u0443, \u0442\u0438\u043f \u0440\u0435\u0454\u0441\u0442\u0440\u0430\u0446\u0456\u0457 \u0442\u0430 \u0432\u043d\u0435\u0441\u043e\u043a \u2013 \u0430 \u043f\u043e\u0442\u0456\u043c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442\u0435 \u0431\u0435\u0437\u043f\u043e\u0441\u0435\u0440\u0435\u0434\u043d\u044c\u043e \u0434\u043e \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f.<\/p>\n          <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-welcome-next\" style=\"width:100%;\">\u0426\u0456\u043d\u0438 \u0442\u0430 \u0440\u0435\u0454\u0441\u0442\u0440\u0430\u0446\u0456\u044f<\/button>\n        <\/div>\n        <!-- STEP 2 -->\n        <div class=\"sw-step\" id=\"sw-step-country\">\n          <div class=\"sw-step-label\">\u041a\u0440\u043e\u043a 2 \u0437 5<\/div>\n          <h2 class=\"sw-heading\">\u0414\u0435 \u0432\u0438 \u0436\u0438\u0432\u0435\u0442\u0435?<\/h2>\n          <label class=\"sw-label\">\u041a\u0440\u0430\u0457\u043d\u0430<\/label>\n          <div class=\"sw-country-search-wrap\">\n            <svg class=\"sw-country-search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.35-4.35\"\/><\/svg>\n            <input type=\"text\" class=\"sw-country-search\" id=\"sw-country-search\" placeholder=\"\u041f\u043e\u0448\u0443\u043a \u043a\u0440\u0430\u0457\u043d\u0438\u2026\" autocomplete=\"off\">\n          <\/div>\n          <div class=\"sw-country-list\" id=\"sw-country-list\"><\/div>\n          <input type=\"hidden\" id=\"sw-country\">\n          <div class=\"sw-infobox\" id=\"sw-catInfo\">\n            <div class=\"sw-infobox-title\">\u0426\u0456\u043d\u043e\u0432\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u044f<\/div>\n            <div id=\"sw-catText\">\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0441\u043f\u043e\u0447\u0430\u0442\u043a\u0443 \u043e\u0431\u0435\u0440\u0456\u0442\u044c \u043a\u0440\u0430\u0457\u043d\u0443.<\/div>\n          <\/div>\n          <div class=\"sw-redirect\" id=\"sw-redirect-russia\">\n            <strong>\u0414\u043b\u044f \u0443\u0447\u0430\u0441\u043d\u0438\u043a\u0456\u0432 \u0456\u0437 \u0420\u043e\u0441\u0456\u0457 \u0454 \u043e\u043a\u0440\u0435\u043c\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0430 \u0440\u0435\u0454\u0441\u0442\u0440\u0430\u0446\u0456\u0457.<\/strong>\n            \u041d\u0430\u0448\u0430 \u043f\u043b\u0430\u0442\u0456\u0436\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 \u0420\u043e\u0441\u0456\u0457. \u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0437\u0430\u0440\u0435\u0454\u0441\u0442\u0440\u0443\u0439\u0442\u0435\u0441\u044f \u0442\u0430\u043c:<br><br>\n            <a href=\"https:\/\/spiritual-activity.org\/ru\/anmeldung-basic-exercises\/\">\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u0440\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u043e\u0457 \u0440\u0435\u0454\u0441\u0442\u0440\u0430\u0446\u0456\u0457<\/a>\n          <\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-country-back\">\u041d\u0430\u0437\u0430\u0434<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-country-next\" disabled>\u0414\u0430\u043b\u0456<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 3 -->\n        <div class=\"sw-step\" id=\"sw-step-langform\">\n          <div class=\"sw-step-label\">\u041a\u0440\u043e\u043a 3 \u0437 5<\/div>\n          <h2 class=\"sw-heading\">\u041c\u043e\u0432\u0430 \u0442\u0430 \u0442\u0438\u043f \u0440\u0435\u0454\u0441\u0442\u0440\u0430\u0446\u0456\u0457<\/h2>\n          <label class=\"sw-label\" for=\"sw-commLang\">\u042f\u043a\u043e\u044e \u043c\u043e\u0432\u043e\u044e \u0432\u0438 \u0431\u0435\u0440\u0435\u0442\u0435 \u0443\u0447\u0430\u0441\u0442\u044c?<\/label>\n          <select class=\"sw-select\" id=\"sw-commLang\">\n            <option value=\"\" selected disabled>\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043e\u0431\u0435\u0440\u0456\u0442\u044c\u2026<\/option>\n            <option value=\"Deutsch\">\u041d\u0456\u043c\u0435\u0446\u044c\u043a\u0430<\/option>\n            <option value=\"Englisch\">\u0410\u043d\u0433\u043b\u0456\u0439\u0441\u044c\u043a\u0430<\/option>\n            <option value=\"Spanisch\">\u0406\u0441\u043f\u0430\u043d\u0441\u044c\u043a\u0430<\/option>\n            <option value=\"Franz\u00f6sisch\">\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0430<\/option>\n            <option value=\"Italienisch\">\u0406\u0442\u0430\u043b\u0456\u0439\u0441\u044c\u043a\u0430<\/option>\n            <option value=\"Portugiesisch\">\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u044c\u043a\u0430<\/option>\n            <option value=\"Arabisch\">\u0410\u0440\u0430\u0431\u0441\u044c\u043a\u0430<\/option>\n            <option value=\"Hebr\u00e4isch\">\u0406\u0432\u0440\u0438\u0442<\/option>\n            <option value=\"Farsi\">\u0424\u0430\u0440\u0441\u0456<\/option>\n            <option value=\"Georgisch\">\u0413\u0440\u0443\u0437\u0438\u043d\u0441\u044c\u043a\u0430<\/option>\n            <option value=\"Ukrainisch\">\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430<\/option>\n            <option value=\"Niederl\u00e4ndisch\">\u041d\u0456\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0430<\/option>\n            <option value=\"T\u00fcrkisch\">\u0422\u0443\u0440\u0435\u0446\u044c\u043a\u0430<\/option>\n            <option value=\"Bulgarisch\">\u0411\u043e\u043b\u0433\u0430\u0440\u0441\u044c\u043a\u0430<\/option>\n            <option value=\"Russisch\">\u0420\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u0430<\/option>\n            <option value=\"Chinesisch\">\u041a\u0438\u0442\u0430\u0439\u0441\u044c\u043a\u0430<\/option>\n            <option value=\"Japanisch\">\u042f\u043f\u043e\u043d\u0441\u044c\u043a\u0430<\/option>\n            <option value=\"Koreanisch\">\u041a\u043e\u0440\u0435\u0439\u0441\u044c\u043a\u0430<\/option>\n          <\/select>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note\" style=\"display:none; margin-top:14px;\">\n            <div class=\"sw-infobox-title\">\u0426\u0418\u0424\u0420\u041e\u0412\u0410 \u0423\u0427\u0410\u0421\u0422\u042c \u00b7 \u221235\u20ac<\/div>\n            <div id=\"sw-apponly-note-text\">\u0412\u0438 \u0431\u0435\u0440\u0435\u0442\u0435 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u043c\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0456. \u0417\u043d\u0438\u0436\u043a\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432\u0440\u0430\u0445\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u0432 \u043f\u0456\u0434\u0441\u0443\u043c\u043a\u0443.<\/div>\n          <\/div>\n          <label class=\"sw-label\" style=\"margin-top:26px;\">\u042f\u043a \u0432\u0438 \u0445\u043e\u0447\u0435\u0442\u0435 \u0437\u0430\u0440\u0435\u0454\u0441\u0442\u0440\u0443\u0432\u0430\u0442\u0438\u0441\u044f?<\/label>\n          <div class=\"sw-choice-row\" id=\"sw-form-choices\">\n            <div class=\"sw-choice-card active\" data-form=\"einzeln\">\u0406\u043d\u0434\u0438\u0432\u0456\u0434\u0443\u0430\u043b\u044c\u043d\u043e<\/div>\n            <div class=\"sw-choice-card\" data-form=\"paar\">\u0412\u0434\u0432\u043e\u0445<br><span style=\"font-size:13px; font-weight:400;\">(\u0441\u043f\u0456\u043b\u044c\u043d\u0435 \u0434\u043e\u043c\u043e\u0433\u043e\u0441\u043f\u043e\u0434\u0430\u0440\u0441\u0442\u0432\u043e)<\/span><\/div>\n            <div class=\"sw-choice-card\" data-form=\"gruppe\">\u0413\u0440\u0443\u043f\u0430<br><span style=\"font-size:13px; font-weight:400;\">(\u0432\u0456\u0434 4 \u043e\u0441\u0456\u0431)<\/span><\/div>\n          <\/div>\n          <div class=\"sw-infobox\" id=\"sw-gruppe-note\" style=\"display:none; margin-top:18px;\">\n            <div class=\"sw-infobox-title\">\u0413\u0440\u0443\u043f\u043e\u0432\u0430 \u0440\u0435\u0454\u0441\u0442\u0440\u0430\u0446\u0456\u044f<\/div>\n            <div>\u0414\u044f\u043a\u0443\u0454\u043c\u043e \u0437\u0430 \u0432\u0430\u0448 \u0456\u043d\u0442\u0435\u0440\u0435\u0441. \u041d\u0430 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0456\u0439 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456 \u0432\u0438 \u0437\u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0444\u043e\u0440\u043c\u0438\u0442\u0438 \u0433\u0440\u0443\u043f\u043e\u0432\u0443 \u0440\u0435\u0454\u0441\u0442\u0440\u0430\u0446\u0456\u044e. \u0417\u0432\u0435\u0440\u043d\u0456\u0442\u044c \u0443\u0432\u0430\u0433\u0443: \u0433\u0440\u0443\u043f\u043e\u0432\u0430 \u0440\u0435\u0454\u0441\u0442\u0440\u0430\u0446\u0456\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043b\u0438\u0448\u0435 \u043d\u0456\u043c\u0435\u0446\u044c\u043a\u043e\u044e \u0442\u0430 \u0430\u043d\u0433\u043b\u0456\u0439\u0441\u044c\u043a\u043e\u044e \u043c\u043e\u0432\u0430\u043c\u0438.<\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-langform\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-langform-back\">\u041d\u0430\u0437\u0430\u0434<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-langform-next\" disabled>\u0414\u0430\u043b\u0456<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-gruppe-redirect\" style=\"display:none;\">\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u0433\u0440\u0443\u043f\u043e\u0432\u043e\u0457 \u0440\u0435\u0454\u0441\u0442\u0440\u0430\u0446\u0456\u0457<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4A -->\n        <div class=\"sw-step\" id=\"sw-step-details-solo\">\n          <div class=\"sw-step-label\">\u041a\u0440\u043e\u043a 4 \u0437 5<\/div>\n          <h2 class=\"sw-heading\">\u041a\u0456\u043b\u044c\u043a\u0430 \u0432\u0456\u0434\u043e\u043c\u043e\u0441\u0442\u0435\u0439 \u043f\u0440\u043e \u0432\u0430\u0441<\/h2>\n          <p class=\"sw-subtext\">\u0427\u0438 \u0441\u0442\u043e\u0441\u0443\u0454\u0442\u044c\u0441\u044f \u0449\u043e\u0441\u044c \u0456\u0437 \u0446\u044c\u043e\u0433\u043e \u0432\u0430\u0441? \u0426\u0435 \u0434\u043e\u043f\u043e\u043c\u043e\u0436\u0435 \u043d\u0430\u043c \u0437\u0430\u043f\u0440\u043e\u043f\u043e\u043d\u0443\u0432\u0430\u0442\u0438 \u0432\u0430\u043c \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u043d\u0438\u0439 \u0432\u043d\u0435\u0441\u043e\u043a.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u0426\u0418\u0424\u0420\u041e\u0412\u0410 \u0423\u0427\u0410\u0421\u0422\u042c \u00b7 \u221235\u20ac<\/div>\n            <div>\u0412\u0438 \u0431\u0435\u0440\u0435\u0442\u0435 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u043c\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0456. \u0417\u043d\u0438\u0436\u043a\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432\u0440\u0430\u0445\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u0432 \u043f\u0456\u0434\u0441\u0443\u043c\u043a\u0443.<\/div>\n          <\/div>\n          <label class=\"sw-label\">\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043e\u0431\u0435\u0440\u0456\u0442\u044c<\/label>\n          <select class=\"sw-select\" id=\"sw-solo-status\">\n            <option value=\"\" disabled selected>\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043e\u0431\u0435\u0440\u0456\u0442\u044c\u2026<\/option>\n            <option value=\"normal\">\u0417\u0432\u0438\u0447\u0430\u0439\u043d\u0430 \u0440\u0435\u0454\u0441\u0442\u0440\u0430\u0446\u0456\u044f<\/option>\n            <option value=\"schueler\">\u0428\u043a\u043e\u043b\u044f\u0440\u0456 (\u221250%)<\/option>\n            <option value=\"student\">\u0423 \u043d\u0430\u0432\u0447\u0430\u043d\u043d\u0456\/\u043d\u0430 \u043d\u0430\u0432\u0447\u0430\u043d\u043d\u0456 \u0443 \u0417\u0412\u041e (\u221225%)<\/option>\n            <option value=\"wiederholer\">\u042f \u043f\u043e\u0432\u0442\u043e\u0440\u044e\u044e \u043a\u0443\u0440\u0441 \u0456\u0437 \u0432\u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u0434\u043b\u044f \u0434\u0443\u0448\u0456 (\u0431\u0435\u0437 \u043d\u043e\u0432\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0443 \u043a\u0430\u0440\u0442\u043e\u043a \u2212 30%)<\/option>\n          <\/select>\n          <div class=\"sw-error\" id=\"sw-error-details-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-solo-back\">\u041d\u0430\u0437\u0430\u0434<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-solo-next\" disabled>\u0414\u0430\u043b\u0456<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4B -->\n        <div class=\"sw-step\" id=\"sw-step-details-paar\">\n          <div class=\"sw-step-label\">\u041a\u0440\u043e\u043a 4 \u0437 5<\/div>\n          <h2 class=\"sw-heading\">\u0412\u0456\u0434\u043e\u043c\u043e\u0441\u0442\u0456 \u043f\u0440\u043e \u0432\u0430\u0441 \u043e\u0431\u043e\u0445<\/h2>\n          <p class=\"sw-subtext\">\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0432\u0432\u0435\u0434\u0456\u0442\u044c \u0434\u0430\u043d\u0456 \u0434\u043b\u044f \u043e\u0431\u043e\u0445 \u043e\u0441\u0456\u0431. \u0414\u0440\u0443\u0433\u0430 \u043e\u0441\u043e\u0431\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u043e\u0442\u0440\u0438\u043c\u0443\u0454 \u0437\u043d\u0438\u0436\u043a\u0443 50%.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-paar-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u0426\u0418\u0424\u0420\u041e\u0412\u0410 \u0423\u0427\u0410\u0421\u0422\u042c \u00b7 \u221235\u20ac<\/div>\n            <div>\u0412\u0438 \u0431\u0435\u0440\u0435\u0442\u0435 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u043c\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0456. \u0417\u043d\u0438\u0436\u043a\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432\u0440\u0430\u0445\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u0432 \u043f\u0456\u0434\u0441\u0443\u043c\u043a\u0443.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\u041e\u0441\u043e\u0431\u0430 1<\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\u0406\u043c&#x27;\u044f<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-vorname\"><\/div>\n              <div><label class=\"sw-label\">\u041f\u0440\u0456\u0437\u0432\u0438\u0449\u0435<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\u0415\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430 \u043f\u043e\u0448\u0442\u0430<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p1-email\">\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\u041e\u0441\u043e\u0431\u0430 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\u0406\u043c&#x27;\u044f<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-vorname\"><\/div>\n              <div><label class=\"sw-label\">\u041f\u0440\u0456\u0437\u0432\u0438\u0449\u0435<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\u0415\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430 \u043f\u043e\u0448\u0442\u0430<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p2-email\">\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-details-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-paar-back\">\u041d\u0430\u0437\u0430\u0434<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-paar-next\" disabled>\u0414\u0430\u043b\u0456<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5A -->\n        <div class=\"sw-step\" id=\"sw-step-amount-solo\">\n          <div class=\"sw-step-label\">\u041a\u0440\u043e\u043a 5 \u0437 5<\/div>\n          <h2 class=\"sw-heading\">\u041e\u0431\u0440\u0430\u0442\u0438 \u0432\u043d\u0435\u0441\u043e\u043a<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-solo\">\u0422\u0443\u0442 \u0432\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u0440\u0430\u0442\u0438 \u0432\u043d\u0435\u0441\u043e\u043a, \u044f\u043a\u0438\u0439 \u0454 \u043f\u0440\u0438\u0439\u043d\u044f\u0442\u043d\u0438\u043c \u0434\u043b\u044f \u0432\u0430\u0441.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-solo\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u0426\u0418\u0424\u0420\u041e\u0412\u0410 \u0423\u0427\u0410\u0421\u0422\u042c \u00b7 \u221235\u20ac<\/div>\n            <div>\u0412\u0438 \u0431\u0435\u0440\u0435\u0442\u0435 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u043c\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0456. \u0417\u043d\u0438\u0436\u043a\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432\u0440\u0430\u0445\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u0432 \u043f\u0456\u0434\u0441\u0443\u043c\u043a\u0443.<\/div>\n          <\/div>\n          <div class=\"sw-range-header\">\n            <div class=\"sw-range-header-label\">\u0412\u0430\u0448\u0430 \u0441\u0443\u043c\u0430<\/div>\n            <div class=\"sw-amount-display\">\n              <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-solo\" value=\"360\">\n              <span>\u20ac<\/span>\n            <\/div>\n          <\/div>\n          <div class=\"sw-range-wrap\">\n            <div class=\"sw-markers\" id=\"sw-markers-solo\"><\/div>\n            <input type=\"range\" class=\"sw-range\" id=\"sw-amount-solo\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n            <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-solo\"><\/div>\n          <\/div>\n          <p style=\"margin-top:18px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \u042f\u043a\u0449\u043e \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0430 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0430 \u0444\u0456\u043d\u0430\u043d\u0441\u043e\u0432\u0430 \u0437\u043d\u0438\u0436\u043a\u0430, \u0431\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043d\u0430\u043f\u0438\u0448\u0456\u0442\u044c \u043d\u0430\u043c:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-solo\">\n            <div class=\"sw-summary-row\"><span>\u041e\u0431\u0440\u0430\u043d\u0438\u0439 \u0432\u043d\u0435\u0441\u043e\u043a<\/span><span id=\"sw-solo-chosen\">360\u20ac<\/span><\/div>\n            <div id=\"sw-solo-discounts\"><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-solo\" style=\"display:none;\"><span>\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\u0420\u0430\u0437\u043e\u043c<\/span><span><span id=\"sw-solo-total\">360<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-solo-back\">\u041d\u0430\u0437\u0430\u0434<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-solo\">\u0417\u0430\u0440\u0435\u0454\u0441\u0442\u0440\u0443\u0432\u0430\u0442\u0438\u0441\u044f<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5B -->\n        <div class=\"sw-step\" id=\"sw-step-amount-paar\">\n          <div class=\"sw-step-label\">\u041a\u0440\u043e\u043a 5 \u0437 5<\/div>\n          <h2 class=\"sw-heading\">\u041e\u0431\u0440\u0430\u0442\u0438 \u0432\u043d\u0435\u0441\u043a\u0438<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-paar\">\u041a\u043e\u0436\u043d\u0430 \u043e\u0441\u043e\u0431\u0430 \u043e\u0431\u0438\u0440\u0430\u0454 \u0441\u0432\u0456\u0439 \u0432\u043b\u0430\u0441\u043d\u0438\u0439 \u0432\u043d\u0435\u0441\u043e\u043a. \u041e\u0441\u043e\u0431\u0430 2 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u043e\u0442\u0440\u0438\u043c\u0443\u0454 \u0437\u043d\u0438\u0436\u043a\u0443 50%.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-paar\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u0426\u0418\u0424\u0420\u041e\u0412\u0410 \u0423\u0427\u0410\u0421\u0422\u042c \u00b7 \u221235\u20ac<\/div>\n            <div>\u0412\u0438 \u0431\u0435\u0440\u0435\u0442\u0435 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u043c\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0456. \u0417\u043d\u0438\u0436\u043a\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432\u0440\u0430\u0445\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u0432 \u043f\u0456\u0434\u0441\u0443\u043c\u043a\u0443.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p1-title\">\u041e\u0441\u043e\u0431\u0430 1<\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\u0412\u043d\u0435\u0441\u043e\u043a<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p1\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p1\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p1\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p1\"><\/div>\n            <\/div>\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p2-title\">\u041e\u0441\u043e\u0431\u0430 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\u0412\u043d\u0435\u0441\u043e\u043a<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p2\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p2\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p2\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p2\"><\/div>\n            <\/div>\n          <\/div>\n          <p style=\"margin-top:8px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \u042f\u043a\u0449\u043e \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0430 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0430 \u0444\u0456\u043d\u0430\u043d\u0441\u043e\u0432\u0430 \u0437\u043d\u0438\u0436\u043a\u0430, \u0431\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043d\u0430\u043f\u0438\u0448\u0456\u0442\u044c \u043d\u0430\u043c:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-paar\">\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p1-label\">\u041e\u0441\u043e\u0431\u0430 1<\/div>\n            <div class=\"sw-summary-row\"><span>\u041e\u0431\u0440\u0430\u043d\u0438\u0439 \u0432\u043d\u0435\u0441\u043e\u043a<\/span><span id=\"sw-p1-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p1-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\u041f\u0440\u043e\u043c\u0456\u0436\u043d\u0430 \u0441\u0443\u043c\u0430<\/span><span id=\"sw-p1-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p2-label\">\u041e\u0441\u043e\u0431\u0430 2<\/div>\n            <div class=\"sw-summary-row\"><span>\u041e\u0431\u0440\u0430\u043d\u0438\u0439 \u0432\u043d\u0435\u0441\u043e\u043a<\/span><span id=\"sw-p2-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p2-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\u041f\u0440\u043e\u043c\u0456\u0436\u043d\u0430 \u0441\u0443\u043c\u0430<\/span><span id=\"sw-p2-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-paar\" style=\"display:none;\"><span>\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\u0420\u0430\u0437\u043e\u043c<\/span><span><span id=\"sw-paar-total\">0<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-paar-back\">\u041d\u0430\u0437\u0430\u0434<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-paar\">\u0414\u043e \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  `;\n  shadow.appendChild(wrapper);\n  const $ = (id) => shadow.getElementById(id);\n  const COUNTRY_TO_CAT = {};\n  Object.keys(COUNTRIES).forEach(cat => COUNTRIES[cat].forEach(code => COUNTRY_TO_CAT[code] = cat));\n  function getCountryName(code) {\n    if (COUNTRY_NAMES[code]) return COUNTRY_NAMES[code];\n    try { return new Intl.DisplayNames([\"uk\"], { type: \"region\" }).of(code) || code; }\n    catch { return code; }\n  }\n  function getCountryAliases(code) {\n    const list = [];\n    \/\/ Intl-Name als Fallback, falls er vom festen CLDR-Namen abweicht\n    if (COUNTRY_NAMES[code]) {\n      try {\n        const intlName = new Intl.DisplayNames([\"uk\"], { type: \"region\" }).of(code);\n        if (intlName && intlName.toLowerCase() !== COUNTRY_NAMES[code].toLowerCase()) {\n          list.push(intlName.toLowerCase());\n        }\n      } catch {}\n    }\n    \/\/ Englischer Name als lateinische Fallback-Schreibweise fuer alle Laender\n    try {\n      const enName = new Intl.DisplayNames([\"en\"], { type: \"region\" }).of(code);\n      if (enName) list.push(enName.toLowerCase());\n    } catch {}\n    (COUNTRY_SEARCH_ALIASES[code] || []).forEach(a => list.push(a.toLowerCase()));\n    return list;\n  }\n  function getAllCountriesSorted() {\n    const all = [];\n    [\"cat1\",\"cat2\",\"cat3\",\"cat4\"].forEach(cat => {\n      COUNTRIES[cat]\n        .map(code => ({ code, name: getCountryName(code), cat, aliases: getCountryAliases(code) }))\n        .sort((a, b) => a.name.localeCompare(b.name, \"uk\"))\n        .forEach(c => all.push(c));\n    });\n    return all;\n  }\n  function emptyPerson() {\n    return { vorname: \"\", nachname: \"\", email: \"\", wiederholer: false, statusType: \"\", amount: 0 };\n  }\n  const state = {\n    country: \"\", category: \"cat1\",\n    commLang: \"\", form: \"einzeln\",\n    persons: { solo: emptyPerson(), p1: emptyPerson(), p2: emptyPerson() }\n  };\n  function getPerson(key) { return state.persons[key] || state.persons.solo; }\n  function isAppOnly() {\n    const { category: cat, commLang: lang, country } = state;\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[country];\n      \/\/ Ausnahme (z.B. China) gilt nur, wenn auch die passende Sprache gewaehlt ist \u2013\n      \/\/ sonst kann kein physisches Kartenset verschickt werden.\n      if (!exceptionLang || lang !== exceptionLang) return true;\n    }\n    if (APP_ONLY_LANGS.has(lang)) return true;\n    if (lang === \"Russisch\" && country && country !== \"RU\") return true;\n    return false;\n  }\n\n  function isWiederholer(person) {\n    return !!person && (person.wiederholer || person.statusType === \"wiederholer\");\n  }\n\n  \/\/ Geht ueberhaupt ein Kartenset raus? Nur wenn die Teilnahme nicht rein digital\n  \/\/ ist UND mindestens eine Person ein neues Set braucht - Wiederholer bekommen\n  \/\/ keins. Steuert sowohl die Versandzeile in der Zusammenfassung als auch die\n  \/\/ Wahl des Ecwid-Produkts, damit beide nicht auseinanderlaufen koennen.\n  function hasPhysicalShipment(isPaar) {\n    if (isAppOnly()) return false;\n    return isPaar\n      ? !(isWiederholer(state.persons.p1) && isWiederholer(state.persons.p2))\n      : !isWiederholer(state.persons.solo);\n  }\n\n  \/\/ Ecwid haengt den Versand am Produkt fest, nicht am Warenkorb. Ohne physischen\n  \/\/ Versand muss deshalb das versandfreie Digital-Produkt in den Warenkorb, sonst\n  \/\/ schlaegt der Shop trotzdem Versandkosten auf.\n  function getParticipationProductId(isPaar) {\n    return hasPhysicalShipment(isPaar) ? PRODUCTS[state.category] : PRODUCTS_APPONLY[state.category];\n  }\n  function updateAppOnlyUI() {\n    const appOnly = state.commLang ? isAppOnly() : false;\n    let reason = \"\";\n    if (appOnly) {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[state.country];\n      if ((state.category === \"cat3\" || state.category === \"cat4\") && exceptionLang) {\n        reason = TXT.reasonException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang);\n      } else if (state.category === \"cat3\" || state.category === \"cat4\") {\n        reason = TXT.reasonRegion;\n      } else if (state.commLang === \"Russisch\") {\n        reason = TXT.reasonRussian;\n      } else {\n        reason = TXT.reasonLanguage;\n      }\n    }\n    const noteIds = [\"sw-apponly-note\",\"sw-apponly-note-step4\",\"sw-apponly-note-paar-step4\",\"sw-apponly-note-step5-solo\",\"sw-apponly-note-step5-paar\"];\n    noteIds.forEach(id => {\n      const el = $(id);\n      if (!el) return;\n      el.style.display = appOnly ? \"block\" : \"none\";\n      const textDiv = el.querySelector(\"div:not(.sw-infobox-title)\");\n      if (textDiv && reason) textDiv.textContent = reason;\n    });\n  }\n  const STEP_CONTAINER = {\n    1: () => \"sw-step-welcome\",\n    2: () => \"sw-step-country\",\n    3: () => \"sw-step-langform\",\n    4: () => state.form === \"paar\" ? \"sw-step-details-paar\" : \"sw-step-details-solo\",\n    5: () => state.form === \"paar\" ? \"sw-step-amount-paar\" : \"sw-step-amount-solo\"\n  };\n  function showStep(n) {\n    shadow.querySelectorAll(\".sw-step\").forEach(el => el.classList.remove(\"active\"));\n    $(STEP_CONTAINER[n]()).classList.add(\"active\");\n    for (let i = 1; i <= 5; i++) {\n      const prog = $(\"sw-prog-\" + i);\n      if (!prog) continue;\n      if (i < n) prog.className = \"sw-progress-step done\";\n      else if (i === n) prog.className = \"sw-progress-step active\";\n      else prog.className = \"sw-progress-step\";\n    }\n    if (n === 5) {\n      const sliderIds = state.form === \"paar\" ? [\"sw-amount-p1\",\"sw-amount-p2\"] : [\"sw-amount-solo\"];\n      sliderIds.forEach(sid => { const el = $(sid); if (el) el.classList.add(\"sw-pulse\"); });\n      refreshSummary();\n    }\n  }\n  function setNextEnabled(id, enabled) {\n    const b = $(id);\n    if (!b) return;\n    b.disabled = !enabled;\n    b.style.opacity = enabled ? \"1\" : \".4\";\n    b.style.cursor  = enabled ? \"pointer\" : \"not-allowed\";\n  }\n  function showErrorIn(id, msg) { const el=$(id); el.style.display=\"block\"; el.textContent=msg; }\n  function clearErrorIn(id)     { const el=$(id); el.style.display=\"none\";  el.textContent=\"\"; }\n  function setCheckoutLoading(btnId, loading) {\n    const btn = $(btnId);\n    \/\/ Nach dem Danke-Bildschirm existiert der Button nicht mehr \u2013 dann nichts tun.\n    if (!btn) return;\n    const overlay = document.getElementById(OVERLAY_ID);\n    if (!btn.dataset.defaultLabel) btn.dataset.defaultLabel = btn.textContent;\n    if (loading) {\n      btn.disabled = true;\n      btn.innerHTML = '<span class=\"wiz-spinner\"><\/span> ' + TXT.preparing;\n      btn.style.opacity = \".8\";\n      if (overlay) overlay.style.display = \"flex\";\n    } else {\n      btn.disabled = false;\n      btn.textContent = btn.dataset.defaultLabel;\n      btn.style.opacity = \"1\";\n      if (overlay) overlay.style.display = \"none\";\n    }\n  }\n  function showThankYou() {\n    const card = shadow.querySelector(\".sw-card\");\n    if (!card) return;\n    card.innerHTML = `\n      <div style=\"text-align:center; padding:20px 0;\">\n        <div style=\"font-size:56px; margin-bottom:16px; color:#27703F;\">\u2713<\/div>\n        <h2 style=\"font-family:'Tinos',Georgia,serif; font-size:26px; font-weight:500; margin:0 0 12px; color:#0C1E14;\">${TXT.thanksTitle}<\/h2>\n        <p style=\"font-family:'Tinos',Georgia,serif; font-size:18px; color:#27703F; line-height:1.6; margin:0 0 24px;\">${TXT.thanksLine1}${TXT.thanksLine2 ? \"<br>\" + TXT.thanksLine2 : \"\"}<\/p>\n        <div style=\"display:flex; justify-content:center;\">\n          <div style=\"width:36px; height:36px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:wiz-spin 0.8s linear infinite;\"><\/div>\n        <\/div>\n      <\/div>`;\n  }\n  function getAnchors(cat) {\n    const r = RANGES[cat], o = ORIENTIERUNG[cat];\n    return [[0,r.min],[25,o.reduced],[50,o.base],[75,o.support],[100,r.max]];\n  }\n  function normToEuro(norm, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      if (norm <= a[i+1][0]) {\n        const t = (norm - a[i][0]) \/ (a[i+1][0] - a[i][0]);\n        return Math.round(a[i][1] + t * (a[i+1][1] - a[i][1]));\n      }\n    }\n    return a[a.length-1][1];\n  }\n  function euroToNorm(euro, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      const lo = a[i][1], hi = a[i+1][1];\n      if (euro <= hi) {\n        if (hi === lo) return a[i+1][0];\n        return a[i][0] + (euro - lo) \/ (hi - lo) * (a[i+1][0] - a[i][0]);\n      }\n    }\n    return 100;\n  }\n  function getMarkerDefs(cat) {\n    const o = ORIENTIERUNG[cat];\n    return [\n      { value: o.reduced, label: TXT.markerReduced, normPct: 25 },\n      { value: o.base,    label: TXT.markerBase,    normPct: 50 },\n      { value: o.support, label: TXT.markerSupport, normPct: 75 }\n    ];\n  }\n  function renderMarkers(personKey) {\n    const cat = state.category;\n    const person = getPerson(personKey);\n    const markers = getMarkerDefs(cat);\n    const container = $(`sw-markers-${personKey}`);\n    container.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker\" + (person.amount === m.value ? \" active\" : \"\");\n      div.style.left = m.normPct + \"%\";\n      div.innerHTML = `<div class=\"sw-marker-tick\"><\/div><div class=\"sw-marker-amount\">${m.value}\u20ac<\/div><div class=\"sw-marker-label\">${m.label}<\/div>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      container.appendChild(div);\n    });\n    const mobileContainer = $(`sw-markers-mobile-${personKey}`);\n    mobileContainer.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker-mobile\" + (person.amount === m.value ? \" active\" : \"\");\n      div.innerHTML = `<span class=\"sw-marker-mobile-label\">${m.label}<\/span><span class=\"sw-marker-mobile-amount\">${m.value}\u20ac<\/span>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      mobileContainer.appendChild(div);\n    });\n  }\n  function selectMarkerValue(personKey, value) {\n    const person = getPerson(personKey);\n    $(`sw-amount-${personKey}`).value = euroToNorm(value, state.category);\n    person.amount = value;\n    $(`sw-amountInput-${personKey}`).value = value;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromSlider(personKey) {\n    const person = getPerson(personKey);\n    const norm = Number($(`sw-amount-${personKey}`).value);\n    person.amount = normToEuro(norm, state.category);\n    $(`sw-amountInput-${personKey}`).value = person.amount;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromInput(personKey) {\n    const person = getPerson(personKey);\n    const r = RANGES[state.category];\n    let val = Number($(`sw-amountInput-${personKey}`).value);\n    if (isNaN(val)) val = r.min;\n    val = Math.min(r.max, Math.max(r.min, val));\n    person.amount = val;\n    $(`sw-amountInput-${personKey}`).value = val;\n    $(`sw-amount-${personKey}`).value = euroToNorm(val, state.category);\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function wireAmountControl(personKey) {\n    $(`sw-amount-${personKey}`).addEventListener(\"input\", () => updateAmountFromSlider(personKey));\n    $(`sw-amountInput-${personKey}`).addEventListener(\"input\", () => {\n      const v = Number($(`sw-amountInput-${personKey}`).value);\n      if (!isNaN(v)) { getPerson(personKey).amount = v; refreshSummary(); }\n    });\n    $(`sw-amountInput-${personKey}`).addEventListener(\"change\", () => updateAmountFromInput(personKey));\n  }\n  function applyRangeForForm() {\n    const cat = state.category;\n    const ori = ORIENTIERUNG[cat];\n    const hint = TXT.hintLong;\n    if (state.form === \"paar\") {\n      [\"p1\",\"p2\"].forEach(key => {\n        const person = getPerson(key);\n        person.amount = ori.base;\n        $(`sw-amount-${key}`).value = 50;\n        $(`sw-amountInput-${key}`).value = ori.base;\n      });\n      const p1name = state.persons.p1.vorname;\n      const p2name = state.persons.p2.vorname;\n      $(\"sw-amount-p1-title\").innerHTML = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-amount-p2-title\").innerHTML = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) +\n        ' <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">' + TXT.p2Badge + '<\/span>';\n      $(\"sw-summary-p1-label\").textContent = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-summary-p2-label\").textContent = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) + \" \" + TXT.p2Badge;\n      $(\"sw-rangeHint-paar\").textContent = hint;\n      renderMarkers(\"p1\"); renderMarkers(\"p2\");\n    } else {\n      const person = state.persons.solo;\n      person.amount = ori.base;\n      $(\"sw-amount-solo\").value = 50;\n      $(\"sw-amountInput-solo\").value = ori.base;\n      $(\"sw-rangeHint-solo\").textContent = hint;\n      renderMarkers(\"solo\");\n    }\n    refreshSummary();\n  }\n  \/\/ \u2500\u2500 Rabattlogik \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Zuerst wird der fixe App-Rabatt vom gewaehlten Betrag abgezogen, danach der\n  \/\/ prozentuale Rabatt auf den verbleibenden Betrag. Beide werden separat gezeigt.\n  function getPercentDiscountCandidate(person, isPaarP2) {\n    if (isPaarP2) return { value: DISCOUNT_PAAR_P2, label: TXT.discP2 };\n    const candidates = [];\n    if (isWiederholer(person)) candidates.push({ value: DISCOUNT_WIEDERHOLER, label: TXT.discWiederholer });\n    if (person.statusType === \"schueler\") candidates.push({ value: DISCOUNT_SCHUELER, label: TXT.discSchueler });\n    if (person.statusType === \"student\")  candidates.push({ value: DISCOUNT_STUDENT,  label: TXT.discStudent });\n    if (!candidates.length) return null;\n    return candidates.reduce((best, c) => c.value > best.value ? c : best, candidates[0]);\n  }\n  function getDiscounts(person, isPaarP2) {\n    const discounts = [];\n    let remaining = Math.round(person.amount);\n    if (isAppOnly()) {\n      const appDisc = Math.min(DISCOUNT_APP_FIXED, remaining);\n      discounts.push({ type: \"fixed\", value: DISCOUNT_APP_FIXED, label: TXT.discApp, amountEuro: appDisc });\n      remaining -= appDisc;\n    }\n    const pct = getPercentDiscountCandidate(person, isPaarP2);\n    if (pct) {\n      const pctDisc = Math.round(remaining * pct.value);\n      discounts.push({ type: \"pct\", value: pct.value, label: pct.label, amountEuro: pctDisc });\n      remaining -= pctDisc;\n    }\n    return { discounts, finalAmount: Math.max(0, remaining) };\n  }\n  function buildStatusOptionValue(person, isPaar) {\n    const vals = [];\n    if (isPaar) vals.push(STATUS_LABEL.paar);\n    if (isAppOnly()) vals.push(STATUS_LABEL.apponly);\n    if (isWiederholer(person)) vals.push(STATUS_LABEL.wiederholer);\n    if (person.statusType === \"schueler\") vals.push(STATUS_LABEL.schueler);\n    if (person.statusType === \"student\")  vals.push(STATUS_LABEL.student);\n    \/\/ Ecwid erwartet fuer Checkbox-Optionen ein Array, nicht einen kommaseparierten String\n    return vals;\n  }\n  function refreshSummary() {\n    if (state.form === \"paar\") refreshSummaryPaar();\n    else refreshSummarySolo();\n  }\n  function renderDiscountRows(containerId, discounts) {\n    const container = $(containerId);\n    container.innerHTML = \"\";\n    discounts.forEach(d => {\n      const row = document.createElement(\"div\");\n      row.className = \"sw-summary-row sw-summary-discount\";\n      const pctStr = d.type === \"fixed\" ? `\u2212${d.amountEuro}\u20ac` : `\u2212${Math.round(d.value * 100)}%`;\n      row.innerHTML = `<span>${d.label} (${pctStr})<\/span><span>\u2212${d.amountEuro}\u20ac<\/span>`;\n      container.appendChild(row);\n    });\n  }\n  function refreshSummarySolo() {\n    const p = state.persons.solo;\n    const { discounts, finalAmount } = getDiscounts(p, false);\n    $(\"sw-solo-chosen\").textContent = Math.round(p.amount) + \"\u20ac\";\n    renderDiscountRows(\"sw-solo-discounts\", discounts);\n    const shipLine = $(\"sw-shipping-line-solo\");\n    const shippingSolo = (hasPhysicalShipment(false) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingSolo ? \"flex\" : \"none\";\n    $(\"sw-solo-total\").textContent = finalAmount + shippingSolo;\n  }\n  function refreshSummaryPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    function fill(prefix, person, isPaarP2) {\n      const { discounts, finalAmount } = getDiscounts(person, isPaarP2);\n      $(`sw-${prefix}-chosen`).textContent = Math.round(person.amount) + \"\u20ac\";\n      renderDiscountRows(`sw-${prefix}-discounts`, discounts);\n      $(`sw-${prefix}-subtotal`).textContent = finalAmount + \"\u20ac\";\n      return finalAmount;\n    }\n    const f1 = fill(\"p1\", p1, false);\n    const f2 = fill(\"p2\", p2, true);\n    const shipLine = $(\"sw-shipping-line-paar\");\n    const shippingPaar = (hasPhysicalShipment(true) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingPaar ? \"flex\" : \"none\";\n    $(\"sw-paar-total\").textContent = f1 + f2 + shippingPaar;\n  }\n  function renderCountryList(filter) {\n    const list = $(\"sw-country-list\");\n    const q = (filter || \"\").toLowerCase().trim();\n    const filtered = q\n      ? getAllCountriesSorted().filter(c =>\n          c.name.toLowerCase().includes(q) ||\n          (c.aliases || []).some(a => a.includes(q))\n        )\n      : getAllCountriesSorted();\n    list.innerHTML = \"\";\n    if (!filtered.length) { list.innerHTML = '<div class=\"sw-country-empty\">' + TXT.noCountry + '<\/div>'; return; }\n    filtered.forEach(c => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-country-item\" + (state.country === c.code ? \" selected\" : \"\");\n      div.dataset.code = c.code;\n      div.innerHTML = `<span>${c.name}<\/span><span class=\"sw-country-item-cat\">${TXT.catBadge}${c.cat.replace(\"cat\",\"\")}<\/span>`;\n      div.addEventListener(\"click\", () => selectCountry(c.code, c.cat, c.name));\n      list.appendChild(div);\n    });\n  }\n  function selectCountry(code, cat, name) {\n    state.country  = code;\n    state.category = cat;\n    $(\"sw-country\").value = code;\n    $(\"sw-country-search\").value = name;\n    $(\"sw-country-list\").innerHTML = \"\";\n    const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[code];\n    let suffix = \"\";\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      suffix = exceptionLang\n        ? \" \" + TXT.catSuffixException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang)\n        : \" \" + TXT.catSuffixDigital;\n    }\n    $(\"sw-catText\").textContent = (TXT.catLabels[cat] || cat) + suffix;\n    \/\/ Ecwid wickelt in Russland keine Zahlungen ab. Wer Russland waehlt, wird\n    \/\/ deshalb auf die russische Anmeldeseite verwiesen - die laeuft ueber n8n\n    \/\/ und Tochka statt ueber den Shop. Der russische Wizard verweist umgekehrt\n    \/\/ zurueck, sobald dort ein anderes Land gewaehlt wird.\n    const nachRussland = (code === \"RU\");\n    $(\"sw-redirect-russia\").style.display = nachRussland ? \"block\" : \"none\";\n    $(\"sw-catInfo\").style.display         = nachRussland ? \"none\"  : \"block\";\n    setNextEnabled(\"sw-btn-country-next\", !nachRussland);\n    updateAppOnlyUI();\n  }\n  function ensureEcwidReady(timeoutMs = 12000) {\n    return new Promise((resolve, reject) => {\n      function isReady() {\n        return window.Ecwid && window.Ecwid.Cart &&\n               typeof window.Ecwid.Cart.addProduct === \"function\" &&\n               typeof window.Ecwid.Cart.clear === \"function\";\n      }\n      if (isReady()) return resolve(true);\n      let resolved = false;\n      function done() { if (!resolved) { resolved = true; setTimeout(() => resolve(true), 200); } }\n      if (window.Ecwid) { try { window.Ecwid.OnAPILoaded.add(done); } catch(e) {} }\n      const start = Date.now();\n      const t = setInterval(() => {\n        if (isReady()) { clearInterval(t); done(); }\n        else if (Date.now() - start > timeoutMs) {\n          clearInterval(t);\n          if (!resolved) { resolved = true; reject(new Error(fillPlaceholder(TXT.errEcwid, timeoutMs\/1000))); }\n        }\n      }, 200);\n    });\n  }\n  function clearCartAsync() { return new Promise(r => Ecwid.Cart.clear(() => r(true))); }\n  function addProductAsync(payload, timeoutMs = 4000) {\n    return new Promise((resolve, reject) => {\n      let done = false;\n      const t = setTimeout(() => { if (!done) { done = true; resolve({ product:null, cart:null, timedOut:true }); } }, timeoutMs);\n      Ecwid.Cart.addProduct(payload, function(success, product, cart, error) {\n        if (done) return;\n        done = true; clearTimeout(t);\n        if (success) resolve({ product, cart, timedOut:false });\n        else reject(new Error((error || TXT.errProduct) + \" | Payload: \" + JSON.stringify(payload)));\n      });\n    });\n  }\n  function goToCart() { window.location.href = SHOP_CART_URL; }\n  function buildN8nPayload() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const d1 = getDiscounts(p1, false);\n    const d2 = getDiscounts(p2, true);\n    return {\n      sprache: state.commLang, land: state.country, kategorie: state.category, appOnly: isAppOnly(),\n      person1: { vorname: p1.vorname, nachname: p1.nachname, email: p1.email },\n      person2: { vorname: p2.vorname, nachname: p2.nachname, email: p2.email },\n      betraege: {\n        person1: { gewaehlt: Math.round(p1.amount), rabatte: d1.discounts, endbetrag: d1.finalAmount },\n        person2: { gewaehlt: Math.round(p2.amount), rabatte: d2.discounts, endbetrag: d2.finalAmount },\n        gesamt: d1.finalAmount + d2.finalAmount\n      },\n      timestamp: new Date().toISOString()\n    };\n  }\n  async function sendToN8n(payload) {\n    if (!N8N_WEBHOOK_URL || N8N_WEBHOOK_URL.indexOf(\"HIER_\") === 0) {\n      throw new Error(\"Die n8n-Webhook-URL ist im Code noch nicht eingetragen.\");\n    }\n    let res;\n    try {\n      res = await fetch(N8N_WEBHOOK_URL, { method:\"POST\", headers:{\"Content-Type\":\"application\/json\"}, body:JSON.stringify(payload) });\n    } catch (e) {\n      throw new Error(TXT.errNetwork);\n    }\n    if (!res.ok) throw new Error(fillPlaceholder(TXT.errSubmit, res.status));\n    return true;\n  }\n  async function goCheckoutSolo() {\n    clearErrorIn(\"sw-error-amount-solo\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-solo\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-solo\", TXT.errLang);\n    const p = state.persons.solo;\n    const finalAmount = getDiscounts(p, false).finalAmount;\n    const participationProductId = getParticipationProductId(false);\n    setCheckoutLoading(\"sw-btn-checkout-solo\", true);\n    try {\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const statusValue = buildStatusOptionValue(p, false);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: finalAmount, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-solo\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-solo\", false);\n    }\n  }\n  async function goCheckoutPaar() {\n    clearErrorIn(\"sw-error-amount-paar\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-paar\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-paar\", TXT.errLang);\n    if (!validateDetailsPaar()) return showErrorIn(\"sw-error-amount-paar\", TXT.errPaarFields);\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const participationProductId = getParticipationProductId(true);\n    setCheckoutLoading(\"sw-btn-checkout-paar\", true);\n    try {\n      const payload = buildN8nPayload();\n      await sendToN8n(payload);\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const total = getDiscounts(p1, false).finalAmount + getDiscounts(p2, true).finalAmount;\n      const statusValue = buildStatusOptionValue(p1, true);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: total, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-paar\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-paar\", false);\n    }\n  }\n  function validateLangform() {\n    const ok = !!state.commLang && !!state.form && state.form !== \"gruppe\";\n    setNextEnabled(\"sw-btn-langform-next\", ok);\n  }\n  function validateDetailsSolo() {\n    const ok = !!$(\"sw-solo-status\").value;\n    setNextEnabled(\"sw-btn-details-solo-next\", ok);\n    return ok;\n  }\n  function validateDetailsPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const emailOk = s => \/\\S+@\\S+\\.\\S+\/.test(s || \"\");\n    const ok = !!(p1.vorname && p1.vorname.trim()) && !!(p1.nachname && p1.nachname.trim()) && emailOk(p1.email) &&\n               !!(p2.vorname && p2.vorname.trim()) && !!(p2.nachname && p2.nachname.trim()) && emailOk(p2.email);\n    setNextEnabled(\"sw-btn-details-paar-next\", ok);\n    return ok;\n  }\n  function bindNameFields(key) {\n    [\"vorname\",\"nachname\",\"email\"].forEach(f => {\n      $(`sw-${key}-${f}`).addEventListener(\"input\", e => {\n        getPerson(key)[f] = e.target.value;\n        validateDetailsPaar();\n      });\n    });\n  }\n  $(\"sw-btn-welcome-next\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-country-back\").addEventListener(\"click\", () => showStep(1));\n  $(\"sw-btn-country-next\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-country-search\").addEventListener(\"input\",  e => renderCountryList(e.target.value));\n  $(\"sw-country-search\").addEventListener(\"focus\",  () => renderCountryList($(\"sw-country-search\").value));\n  shadow.addEventListener(\"click\", e => {\n    if (!e.target.closest(\"#sw-country-list\") && !e.target.closest(\"#sw-country-search\")) {\n      $(\"sw-country-list\").innerHTML = \"\";\n    }\n  });\n  $(\"sw-commLang\").addEventListener(\"change\", e => {\n    state.commLang = e.target.value;\n    validateLangform();\n    updateAppOnlyUI();\n    refreshSummary();\n  });\n  shadow.querySelectorAll(\".sw-choice-card\").forEach(card => {\n    card.addEventListener(\"click\", () => {\n      state.form = card.dataset.form;\n      shadow.querySelectorAll(\".sw-choice-card\").forEach(c => c.classList.toggle(\"active\", c === card));\n      const isGruppe = state.form === \"gruppe\";\n      $(\"sw-gruppe-note\").style.display = isGruppe ? \"block\" : \"none\";\n      $(\"sw-btn-langform-next\").style.display   = isGruppe ? \"none\" : \"inline-block\";\n      $(\"sw-btn-gruppe-redirect\").style.display = isGruppe ? \"inline-block\" : \"none\";\n      clearErrorIn(\"sw-error-langform\");\n      validateLangform();\n    });\n  });\n  $(\"sw-btn-gruppe-redirect\").addEventListener(\"click\", () => { window.location.href = getGroupRedirectUrl(); });\n  $(\"sw-btn-langform-back\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-langform-next\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-details-solo-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-solo-status\").addEventListener(\"change\", e => {\n    const val = e.target.value;\n    const person = state.persons.solo;\n    person.statusType  = val;\n    person.wiederholer = val === \"wiederholer\";\n    clearErrorIn(\"sw-error-details-solo\");\n    validateDetailsSolo();\n  });\n  $(\"sw-btn-details-solo-next\").addEventListener(\"click\", () => {\n    if (validateDetailsSolo()) { applyRangeForForm(); showStep(5); }\n    else showErrorIn(\"sw-error-details-solo\", TXT.errSelectFirst);\n  });\n  $(\"sw-btn-details-paar-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-btn-details-paar-next\").addEventListener(\"click\", () => {\n    if (validateDetailsPaar()) { applyRangeForForm(); showStep(5); }\n  });\n  $(\"sw-btn-amount-solo-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-amount-paar-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-checkout-solo\").addEventListener(\"click\", goCheckoutSolo);\n  $(\"sw-btn-checkout-paar\").addEventListener(\"click\", goCheckoutPaar);\n  bindNameFields(\"p1\");\n  bindNameFields(\"p2\");\n  wireAmountControl(\"solo\");\n  wireAmountControl(\"p1\");\n  wireAmountControl(\"p2\");\n  showStep(1);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e3b1824 e-flex e-con-boxed e-con e-parent\" data-id=\"e3b1824\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a9b18ff elementor-widget elementor-widget-html\" data-id=\"a9b18ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Tinos:ital,wght@0,400;0,700;1,400&display=swap\" rel=\"stylesheet\">\n<style>\n  .ecwid-ProductBrowser,\n  .ecwid-productbrowser,\n  div[id^=\"my-store\"],\n  .ecwid:not(#sw-host-ar) {\n    visibility: hidden !important;\n    height: 0 !important;\n    max-height: 0 !important;\n    overflow: hidden !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    position: absolute !important;\n    pointer-events: none !important;\n  }\n<\/style>\n<div id=\"sw-overlay-ar\" style=\"display:none; position:fixed; inset:0; background:rgba(245,250,246,0.92); z-index:99999; flex-direction:column; align-items:center; justify-content:center; gap:20px;\">\n  <div style=\"width:52px; height:52px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:sw-spin-ar 0.8s linear infinite;\"><\/div>\n  <div style=\"font-family:'Tinos',Georgia,serif; font-size:22px; color:#27703F;\">\u062c\u0627\u0631\u064d \u062a\u062d\u0645\u064a\u0644 \u0635\u0641\u062d\u0629 \u0627\u0644\u062f\u0641\u0639\u2026<\/div>\n<\/div>\n<style>\n  @keyframes sw-spin-ar { to { transform: rotate(360deg); } }\n<\/style>\n<div id=\"sw-host-ar\"><\/div>\n<script>\n(function () {\n\n  \/\/ \u2500\u2500 Sprach-Guard: Skript bricht sofort ab, wenn die URL nicht zu AR passt \u2500\u2500\n  const _pathMatch = window.location.pathname.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n  const _pageLang = _pathMatch ? _pathMatch[1] : \"de\";\n  if (_pageLang !== \"ar\") { \n    document.getElementById(\"sw-host-ar\")?.remove();\n    document.getElementById(\"sw-overlay-ar\")?.remove();\n    return; \n  }\n\n  const OVERLAY_ID    = \"sw-overlay-ar\";\n  \/\/ Bewusst die englische Shop-Seite statt \/ar\/: Der Ecwid-Checkout stellt sich\n  \/\/ in der RTL-Fassung nicht brauchbar dar. Die Anmeldung selbst bleibt in der\n  \/\/ Landessprache, nur der Bezahlvorgang laeuft auf Englisch.\n  const SHOP_CART_URL = \"https:\/\/spiritual-activity.org\/en\/store\/cart\";\n  const N8N_WEBHOOK_URL = \"https:\/\/n8n.spiritual-activity.org\/webhook\/registration-be\";\n  function getGroupRedirectUrl() {\n    const path = window.location.pathname;\n    const match = path.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n    const langPrefix = (match && match[1] !== \"de\") ? \"\/\" + match[1] : \"\";\n    return \"https:\/\/spiritual-activity.org\" + langPrefix + \"\/gruppen-anmeldung\";\n  }\n  const PRODUCTS = {\n    cat1: 864374030,\n    cat2: 844860366,\n    cat3: 844907264,\n    cat4: 844907265\n  };\n\n  \/\/ Versandfreie Digital-Produkte fuer alle Faelle, in denen nichts verschickt\n  \/\/ wird: rein digitale Teilnahme und Wiederholer (kein neues Kartenset).\n  const PRODUCTS_APPONLY = {\n    cat1: 863272251,\n    cat2: 863265753,\n    cat3: 863272252,\n    cat4: 863265754\n  };\n  const RANGES = {\n    cat1: { min: 160, max: 800 },\n    cat2: { min: 105, max: 700 },\n    cat3: { min:  75, max: 600 },\n    cat4: { min:  45, max: 500 }\n  };\n  const ORIENTIERUNG = {\n    cat1: { reduced: 160, base: 360, support: 580 },\n    cat2: { reduced: 105, base: 240, support: 460 },\n    cat3: { reduced:  75, base: 160, support: 340 },\n    cat4: { reduced:  45, base: 105, support: 220 }\n  };\n  const DISCOUNT_WIEDERHOLER = 0.30;\n  const DISCOUNT_SCHUELER    = 0.50;\n  const DISCOUNT_STUDENT     = 0.25;\n  const DISCOUNT_PAAR_P2     = 0.50;\n  const DISCOUNT_APP_FIXED   = 35;\n  \/\/ Versandpauschale ausserhalb EU+CH. Ecwid kassiert sie, der Wizard rechnet sie in die Anzeige-Summe ein.\n  const SHIPPING_COST   = 15;\n  const APP_ONLY_LANGS = new Set([\"Arabisch\",\"Farsi\",\"Ukrainisch\",\"Bulgarisch\",\"Franz\u00f6sisch\"]);\n  const APP_ONLY_CATEGORY_EXCEPTION_LANG = { CN: \"Chinesisch\" };\n  const EU_PLUS_CH = new Set([\n    \"AT\",\"BE\",\"BG\",\"CY\",\"CZ\",\"DE\",\"DK\",\"EE\",\"ES\",\"FI\",\"FR\",\"GR\",\"HR\",\n    \"HU\",\"IE\",\"IT\",\"LT\",\"LU\",\"LV\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SE\",\"SI\",\"SK\",\"CH\"\n  ]);\n  function fillPlaceholder(text, value) {\n    return String(text).replace(\/[\\[\uff3b][^\\]\uff3d]*[\\]\uff3d]\/, value);\n  }\n  function needsShipping(countryCode) {\n    return countryCode && !EU_PLUS_CH.has(countryCode);\n  }\n  const TXT = {\n      \"catBadge\": \"\u0641\u0626\u0629 \",\n      \"catLabels\": {\n          \"cat1\": \"\u0641\u0626\u0629 \u0627\u0644\u0633\u0639\u0631 1\",\n          \"cat2\": \"\u0641\u0626\u0629 \u0627\u0644\u0633\u0639\u0631 2\",\n          \"cat3\": \"\u0641\u0626\u0629 \u0627\u0644\u0633\u0639\u0631 3\",\n          \"cat4\": \"\u0641\u0626\u0629 \u0627\u0644\u0633\u0639\u0631 4\"\n      },\n      \"catSuffixDigital\": \"\u2013 \u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0629 \u0627\u0644\u0631\u0642\u0645\u064a\u0629 \u0641\u0642\u0637 \u0645\u0645\u0643\u0646\u0629\",\n      \"catSuffixException\": \"\u2013 \u0627\u0644\u0634\u062d\u0646 \u0645\u062a\u0627\u062d \u0641\u0642\u0637 \u0645\u0639 \u0644\u063a\u0629 \u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0629 {X}\u060c \u0648\u0625\u0644\u0627 \u0641\u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0629 \u0627\u0644\u0631\u0642\u0645\u064a\u0629 \u0641\u0642\u0637\",\n      \"noCountry\": \"\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0628\u0644\u062f\",\n      \"markerReduced\": \"\u0645\u0633\u0627\u0647\u0645\u0629 \u0645\u062e\u0641\u0636\u0629\",\n      \"markerBase\": \"\u0645\u0633\u0627\u0647\u0645\u0629 \u0623\u0633\u0627\u0633\u064a\u0629\",\n      \"markerSupport\": \"\u0645\u0633\u0627\u0647\u0645\u0629 \u062f\u0627\u0639\u0645\u0629\",\n      \"hintLong\": \"\u0647\u0646\u0627 \u064a\u0645\u0643\u0646\u0643 \u0627\u062e\u062a\u064a\u0627\u0631 \u0627\u0644\u0645\u0633\u0627\u0647\u0645\u0629 \u0627\u0644\u0645\u0646\u0627\u0633\u0628\u0629 \u0644\u0643. \u0645\u0646 \u062e\u0644\u0627\u0644 \u0645\u0633\u0627\u0647\u0645\u0629 \u062f\u0627\u0639\u0645\u0629\u060c \u062a\u062a\u064a\u062d \u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0629 \u0644\u0623\u0634\u062e\u0627\u0635 \u0630\u0648\u064a \u0625\u0645\u0643\u0627\u0646\u064a\u0627\u062a \u0645\u0627\u0644\u064a\u0629 \u0645\u062d\u062f\u0648\u062f\u0629\u060c \u0648\u062a\u0633\u0627\u0639\u062f\u0646\u0627 \u0639\u0644\u0649 \u0646\u0642\u0644 \u0627\u0644\u0645\u0634\u0631\u0648\u0639 \u0623\u0643\u062b\u0631 \u0625\u0644\u0649 \u0627\u0644\u0639\u0627\u0644\u0645.\",\n      \"hintPaar\": \"\u064a\u062e\u062a\u0627\u0631 \u0643\u0644 \u0634\u062e\u0635 \u0645\u0633\u0627\u0647\u0645\u062a\u0647 \u0627\u0644\u062e\u0627\u0635\u0629. \u0633\u064a\u062d\u0635\u0644 \u0627\u0644\u0634\u062e\u0635 2 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0639\u0644\u0649 \u062e\u0635\u0645 50\u066a.\",\n      \"person1\": \"\u0627\u0644\u0634\u062e\u0635 1\",\n      \"person2\": \"\u0627\u0644\u0634\u062e\u0635 2\",\n      \"p2Badge\": \"(\u221250\u066a)\",\n      \"discWiederholer\": \"\u0645\u0639\u064a\u062f\",\n      \"discSchueler\": \"\u0637\u0644\u0627\u0628 \u0627\u0644\u0645\u062f\u0627\u0631\u0633\",\n      \"discStudent\": \"\u062a\u062f\u0631\u064a\u0628\/\u062f\u0631\u0627\u0633\u0629\",\n      \"discP2\": \"\u062e\u0635\u0645 \u0627\u0644\u0634\u062e\u0635 2\",\n      \"discApp\": \"\u0645\u0634\u0627\u0631\u0643\u0629 \u0631\u0642\u0645\u064a\u0629\",\n      \"reasonRegion\": \"\u0627\u0644\u0634\u062d\u0646 \u063a\u064a\u0631 \u0645\u062a\u0627\u062d \u0641\u064a \u0645\u0646\u0637\u0642\u062a\u0643. \u0623\u0646\u062a \u062a\u0634\u0627\u0631\u0643 \u0631\u0642\u0645\u064a\u064b\u0627. \u0633\u064a\u064f\u062d\u062a\u0633\u0628 \u0627\u0644\u062e\u0635\u0645 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0641\u064a \u0627\u0644\u0645\u0644\u062e\u0635.\",\n      \"reasonRussian\": \"\u0628\u0627\u0644\u0646\u0633\u0628\u0629 \u0644\u0644\u0646\u0627\u0637\u0642\u064a\u0646 \u0628\u0627\u0644\u0631\u0648\u0633\u064a\u0629 \u062e\u0627\u0631\u062c \u0631\u0648\u0633\u064a\u0627\u060c \u0644\u0627 \u062a\u062a\u0648\u0641\u0631 \u0633\u0648\u0649 \u0646\u0633\u062e\u0629 \u0631\u0642\u0645\u064a\u0629. \u0633\u064a\u064f\u062d\u062a\u0633\u0628 \u0627\u0644\u062e\u0635\u0645 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0641\u064a \u0627\u0644\u0645\u0644\u062e\u0635.\",\n      \"reasonLanguage\": \"\u0644\u0627 \u062a\u062a\u0648\u0641\u0631 \u0628\u0647\u0630\u0647 \u0627\u0644\u0644\u063a\u0629 \u0633\u0648\u0649 \u0646\u0633\u062e\u0629 \u0631\u0642\u0645\u064a\u0629. \u0633\u064a\u064f\u062d\u062a\u0633\u0628 \u0627\u0644\u062e\u0635\u0645 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0641\u064a \u0627\u0644\u0645\u0644\u062e\u0635.\",\n      \"reasonException\": \"\u0627\u0644\u0634\u062d\u0646 \u0641\u064a \u0645\u0646\u0637\u0642\u062a\u0643 \u0645\u062a\u0627\u062d \u0641\u0642\u0637 \u0645\u0639 \u0644\u063a\u0629 \u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0629 {X}. \u0623\u0646\u062a \u062a\u0634\u0627\u0631\u0643 \u0631\u0642\u0645\u064a\u064b\u0627. \u0633\u064a\u064f\u062d\u062a\u0633\u0628 \u0627\u0644\u062e\u0635\u0645 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0641\u064a \u0627\u0644\u0645\u0644\u062e\u0635.\",\n      \"thanksTitle\": \"\u0634\u0643\u0631\u064b\u0627 \u062c\u0632\u064a\u0644\u064b\u0627!\",\n      \"thanksLine1\": \"\u062c\u0627\u0631\u064d \u062a\u062d\u0645\u064a\u0644 \u0635\u0641\u062d\u0629 \u0627\u0644\u062f\u0641\u0639\u2026\",\n      \"thanksLine2\": \"\u0633\u064a\u062a\u0645 \u062a\u0648\u062c\u064a\u0647\u0643 \u0642\u0631\u064a\u0628\u064b\u0627\u2026\",\n      \"preparing\": \"\u062c\u0627\u0631\u064d \u0627\u0644\u062a\u062d\u0636\u064a\u0631\u2026\",\n      \"errSelectFirst\": \"\u064a\u0631\u062c\u0649 \u0625\u062c\u0631\u0627\u0621 \u0627\u062e\u062a\u064a\u0627\u0631 \u0623\u0648\u0644\u064b\u0627.\",\n      \"errPaarFields\": \"\u064a\u0631\u062c\u0649 \u0627\u0644\u0631\u062c\u0648\u0639 \u0648\u062a\u0639\u0628\u0626\u0629 \u062c\u0645\u064a\u0639 \u0627\u0644\u062d\u0642\u0648\u0644 \u0644\u0643\u0644\u0627 \u0627\u0644\u0634\u062e\u0635\u064a\u0646.\",\n      \"errCountry\": \"\u064a\u0631\u062c\u0649 \u0627\u062e\u062a\u064a\u0627\u0631 \u0628\u0644\u062f \u0623\u0648\u0644\u064b\u0627.\",\n      \"errLang\": \"\u064a\u0631\u062c\u0649 \u0627\u062e\u062a\u064a\u0627\u0631 \u0644\u063a\u0629 \u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0629.\",\n      \"errNetwork\": \"\u062a\u0639\u0630\u0631 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a. \u064a\u0631\u062c\u0649 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0627\u062a\u0635\u0627\u0644\u0643 \u0628\u0627\u0644\u0625\u0646\u062a\u0631\u0646\u062a.\",\n      \"errSubmit\": \"\u0641\u0634\u0644 \u0627\u0644\u0625\u0631\u0633\u0627\u0644 (\u062e\u0637\u0623 [\u0631\u0645\u0632]). \u064a\u0631\u062c\u0649 \u0627\u0644\u0645\u062d\u0627\u0648\u0644\u0629 \u0645\u0631\u0629 \u0623\u062e\u0631\u0649.\",\n      \"errProduct\": \"\u062a\u0639\u0630\u0631\u062a \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0645\u0646\u062a\u062c\",\n      \"errEcwid\": \"\u0648\u0627\u062c\u0647\u0629 \u0628\u0631\u0645\u062c\u0629 \u062a\u0637\u0628\u064a\u0642\u0627\u062a \u0633\u0644\u0629 Ecwid \u063a\u064a\u0631 \u0645\u062a\u0627\u062d\u0629 \u0628\u0639\u062f [X] \u062b\u0627\u0646\u064a\u0629.\"\n  };\n  const LANG_DISPLAY = {\n      \"Deutsch\": \"\u0627\u0644\u0623\u0644\u0645\u0627\u0646\u064a\u0629\",\n      \"Englisch\": \"\u0627\u0644\u0625\u0646\u062c\u0644\u064a\u0632\u064a\u0629\",\n      \"Spanisch\": \"\u0627\u0644\u0625\u0633\u0628\u0627\u0646\u064a\u0629\",\n      \"Franz\u00f6sisch\": \"\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629\",\n      \"Italienisch\": \"\u0627\u0644\u0625\u064a\u0637\u0627\u0644\u064a\u0629\",\n      \"Portugiesisch\": \"\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\u064a\u0629\",\n      \"Arabisch\": \"\u0627\u0644\u0639\u0631\u0628\u064a\u0629\",\n      \"Hebr\u00e4isch\": \"\u0627\u0644\u0639\u0628\u0631\u064a\u0629\",\n      \"Farsi\": \"\u0627\u0644\u0641\u0627\u0631\u0633\u064a\u0629\",\n      \"Georgisch\": \"\u0627\u0644\u062c\u0648\u0631\u062c\u064a\u0629\",\n      \"Ukrainisch\": \"\u0627\u0644\u0623\u0648\u0643\u0631\u0627\u0646\u064a\u0629\",\n      \"Niederl\u00e4ndisch\": \"\u0627\u0644\u0647\u0648\u0644\u0646\u062f\u064a\u0629\",\n      \"T\u00fcrkisch\": \"\u0627\u0644\u062a\u0631\u0643\u064a\u0629\",\n      \"Russisch\": \"\u0627\u0644\u0631\u0648\u0633\u064a\u0629\",\n      \"Chinesisch\": \"\u0627\u0644\u0635\u064a\u0646\u064a\u0629\",\n      \"Japanisch\": \"\u0627\u0644\u064a\u0627\u0628\u0627\u0646\u064a\u0629\",\n      \"Koreanisch\": \"\u0627\u0644\u0643\u0648\u0631\u064a\u0629\"\n  };\n  const COUNTRY_NAMES = {\n      \"AD\": \"\u0623\u0646\u062f\u0648\u0631\u0627\",\"AE\": \"\u0627\u0644\u0625\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629\",\"AF\": \"\u0623\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646\",\"AG\": \"\u0623\u0646\u062a\u064a\u063a\u0648\u0627 \u0648\u0628\u0631\u0628\u0648\u062f\u0627\",\"AL\": \"\u0623\u0644\u0628\u0627\u0646\u064a\u0627\",\"AM\": \"\u0623\u0631\u0645\u064a\u0646\u064a\u0627\",\"AO\": \"\u0623\u0646\u063a\u0648\u0644\u0627\",\"AR\": \"\u0627\u0644\u0623\u0631\u062c\u0646\u062a\u064a\u0646\",\"AT\": \"\u0627\u0644\u0646\u0645\u0633\u0627\",\"AU\": \"\u0623\u0633\u062a\u0631\u0627\u0644\u064a\u0627\",\"AW\": \"\u0623\u0631\u0648\u0628\u0627\",\"AZ\": \"\u0623\u0630\u0631\u0628\u064a\u062c\u0627\u0646\",\"BA\": \"\u0627\u0644\u0628\u0648\u0633\u0646\u0629 \u0648\u0627\u0644\u0647\u0631\u0633\u0643\",\"BB\": \"\u0628\u0631\u0628\u0627\u062f\u0648\u0633\",\"BD\": \"\u0628\u0646\u063a\u0644\u0627\u062f\u064a\u0634\",\"BE\": \"\u0628\u0644\u062c\u064a\u0643\u0627\",\"BF\": \"\u0628\u0648\u0631\u0643\u064a\u0646\u0627 \u0641\u0627\u0633\u0648\",\"BG\": \"\u0628\u0644\u063a\u0627\u0631\u064a\u0627\",\"BH\": \"\u0627\u0644\u0628\u062d\u0631\u064a\u0646\",\"BI\": \"\u0628\u0648\u0631\u0648\u0646\u062f\u064a\",\"BJ\": \"\u0628\u0646\u064a\u0646\",\"BN\": \"\u0628\u0631\u0648\u0646\u0627\u064a\",\"BO\": \"\u0628\u0648\u0644\u064a\u0641\u064a\u0627\",\"BR\": \"\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644\",\"BS\": \"\u062c\u0632\u0631 \u0627\u0644\u0628\u0647\u0627\u0645\u0627\",\"BT\": \"\u0628\u0648\u062a\u0627\u0646\",\"BW\": \"\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627\",\"BY\": \"\u0628\u064a\u0644\u0627\u0631\u0648\u0633\",\"BZ\": \"\u0628\u0644\u064a\u0632\",\"CA\": \"\u0643\u0646\u062f\u0627\",\"CD\": \"\u0627\u0644\u0643\u0648\u0646\u063a\u0648 - \u0643\u064a\u0646\u0634\u0627\u0633\u0627\",\"CF\": \"\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0623\u0641\u0631\u064a\u0642\u064a\u0627 \u0627\u0644\u0648\u0633\u0637\u0649\",\"CG\": \"\u0627\u0644\u0643\u0648\u0646\u063a\u0648 - \u0628\u0631\u0627\u0632\u0627\u0641\u064a\u0644\",\"CH\": \"\u0633\u0648\u064a\u0633\u0631\u0627\",\"CI\": \"\u0633\u0627\u062d\u0644 \u0627\u0644\u0639\u0627\u062c\",\"CL\": \"\u062a\u0634\u064a\u0644\u064a\",\"CM\": \"\u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0648\u0646\",\"CN\": \"\u0627\u0644\u0635\u064a\u0646\",\"CO\": \"\u0643\u0648\u0644\u0648\u0645\u0628\u064a\u0627\",\"CR\": \"\u0643\u0648\u0633\u062a\u0627\u0631\u064a\u0643\u0627\",\"CV\": \"\u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0623\u062e\u0636\u0631\",\"CY\": \"\u0642\u0628\u0631\u0635\",\"CZ\": \"\u0627\u0644\u062a\u0634\u064a\u0643\",\"DE\": \"\u0623\u0644\u0645\u0627\u0646\u064a\u0627\",\"DJ\": \"\u062c\u064a\u0628\u0648\u062a\u064a\",\"DK\": \"\u0627\u0644\u062f\u0627\u0646\u0645\u0631\u0643\",\"DM\": \"\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627\",\"DO\": \"\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627\u0646\",\"DZ\": \"\u0627\u0644\u062c\u0632\u0627\u0626\u0631\",\"EC\": \"\u0627\u0644\u0625\u0643\u0648\u0627\u062f\u0648\u0631\",\"EE\": \"\u0625\u0633\u062a\u0648\u0646\u064a\u0627\",\"EG\": \"\u0645\u0635\u0631\",\"ES\": \"\u0625\u0633\u0628\u0627\u0646\u064a\u0627\",\"ET\": \"\u0625\u062b\u064a\u0648\u0628\u064a\u0627\",\"FI\": \"\u0641\u0646\u0644\u0646\u062f\u0627\",\"FJ\": \"\u0641\u064a\u062c\u064a\",\"FM\": \"\u0645\u064a\u0643\u0631\u0648\u0646\u064a\u0632\u064a\u0627\",\"FR\": \"\u0641\u0631\u0646\u0633\u0627\",\"GA\": \"\u0627\u0644\u063a\u0627\u0628\u0648\u0646\",\"GB\": \"\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629\",\"GB-SCT\": \"\u0627\u0633\u0643\u062a\u0644\u0646\u062f\u0627\",\"GD\": \"\u063a\u0631\u064a\u0646\u0627\u062f\u0627\",\"GE\": \"\u062c\u0648\u0631\u062c\u064a\u0627\",\"GH\": \"\u063a\u0627\u0646\u0627\",\"GM\": \"\u063a\u0627\u0645\u0628\u064a\u0627\",\"GN\": \"\u063a\u064a\u0646\u064a\u0627\",\"GQ\": \"\u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u0627\u0633\u062a\u0648\u0627\u0626\u064a\u0629\",\"GR\": \"\u0627\u0644\u064a\u0648\u0646\u0627\u0646\",\"GT\": \"\u063a\u0648\u0627\u062a\u064a\u0645\u0627\u0644\u0627\",\"GW\": \"\u063a\u064a\u0646\u064a\u0627 \u0628\u064a\u0633\u0627\u0648\",\"GY\": \"\u063a\u064a\u0627\u0646\u0627\",\"HK\": \"\u0647\u0648\u0646\u063a \u0643\u0648\u0646\u063a\",\"HN\": \"\u0647\u0646\u062f\u0648\u0631\u0627\u0633\",\"HR\": \"\u0643\u0631\u0648\u0627\u062a\u064a\u0627\",\"HT\": \"\u0647\u0627\u064a\u062a\u064a\",\"HU\": \"\u0647\u0646\u063a\u0627\u0631\u064a\u0627\",\"ID\": \"\u0625\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0627\",\"IE\": \"\u0623\u064a\u0631\u0644\u0646\u062f\u0627\",\"IL\": \"\u0625\u0633\u0631\u0627\u0626\u064a\u0644\",\"IN\": \"\u0627\u0644\u0647\u0646\u062f\",\"IQ\": \"\u0627\u0644\u0639\u0631\u0627\u0642\",\"IR\": \"\u0625\u064a\u0631\u0627\u0646\",\"IS\": \"\u0622\u064a\u0633\u0644\u0646\u062f\u0627\",\"IT\": \"\u0625\u064a\u0637\u0627\u0644\u064a\u0627\",\"JM\": \"\u062c\u0627\u0645\u0627\u064a\u0643\u0627\",\"JO\": \"\u0627\u0644\u0623\u0631\u062f\u0646\",\"JP\": \"\u0627\u0644\u064a\u0627\u0628\u0627\u0646\",\"KE\": \"\u0643\u064a\u0646\u064a\u0627\",\"KG\": \"\u0642\u064a\u0631\u063a\u064a\u0632\u0633\u062a\u0627\u0646\",\"KH\": \"\u0643\u0645\u0628\u0648\u062f\u064a\u0627\",\"KI\": \"\u0643\u064a\u0631\u064a\u0628\u0627\u062a\u064a\",\"KM\": \"\u062c\u0632\u0631 \u0627\u0644\u0642\u0645\u0631\",\"KN\": \"\u0633\u0627\u0646\u062a \u0643\u064a\u062a\u0633 \u0648\u0646\u064a\u0641\u064a\u0633\",\"KR\": \"\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629\",\"KW\": \"\u0627\u0644\u0643\u0648\u064a\u062a\",\"KZ\": \"\u0643\u0627\u0632\u0627\u062e\u0633\u062a\u0627\u0646\",\"LA\": \"\u0644\u0627\u0648\u0633\",\"LB\": \"\u0644\u0628\u0646\u0627\u0646\",\"LC\": \"\u0633\u0627\u0646\u062a \u0644\u0648\u0633\u064a\u0627\",\"LI\": \"\u0644\u064a\u062e\u062a\u0646\u0634\u062a\u0627\u064a\u0646\",\"LK\": \"\u0633\u0631\u064a\u0644\u0627\u0646\u0643\u0627\",\"LR\": \"\u0644\u064a\u0628\u064a\u0631\u064a\u0627\",\"LS\": \"\u0644\u064a\u0633\u0648\u062a\u0648\",\"LT\": \"\u0644\u064a\u062a\u0648\u0627\u0646\u064a\u0627\",\"LU\": \"\u0644\u0648\u0643\u0633\u0645\u0628\u0648\u0631\u063a\",\"LV\": \"\u0644\u0627\u062a\u0641\u064a\u0627\",\"LY\": \"\u0644\u064a\u0628\u064a\u0627\",\"MA\": \"\u0627\u0644\u0645\u063a\u0631\u0628\",\"MD\": \"\u0645\u0648\u0644\u062f\u0648\u0641\u0627\",\"ME\": \"\u0627\u0644\u062c\u0628\u0644 \u0627\u0644\u0623\u0633\u0648\u062f\",\"MG\": \"\u0645\u062f\u063a\u0634\u0642\u0631\",\"MH\": \"\u062c\u0632\u0631 \u0645\u0627\u0631\u0634\u0627\u0644\",\"MK\": \"\u0645\u0642\u062f\u0648\u0646\u064a\u0627 \u0627\u0644\u0634\u0645\u0627\u0644\u064a\u0629\",\"ML\": \"\u0645\u0627\u0644\u064a\",\"MM\": \"\u0645\u064a\u0627\u0646\u0645\u0627\u0631 (\u0628\u0648\u0631\u0645\u0627)\",\"MN\": \"\u0645\u0646\u063a\u0648\u0644\u064a\u0627\",\"MO\": \"\u0645\u0627\u0643\u0627\u0648\",\"MR\": \"\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627\",\"MT\": \"\u0645\u0627\u0644\u0637\u0627\",\"MU\": \"\u0645\u0648\u0631\u064a\u0634\u064a\u0648\u0633\",\"MV\": \"\u062c\u0632\u0631 \u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641\",\"MW\": \"\u0645\u0644\u0627\u0648\u064a\",\"MX\": \"\u0627\u0644\u0645\u0643\u0633\u064a\u0643\",\"MY\": \"\u0645\u0627\u0644\u064a\u0632\u064a\u0627\",\"MZ\": \"\u0645\u0648\u0632\u0645\u0628\u064a\u0642\",\"NA\": \"\u0646\u0627\u0645\u064a\u0628\u064a\u0627\",\"NE\": \"\u0627\u0644\u0646\u064a\u062c\u0631\",\"NG\": \"\u0646\u064a\u062c\u064a\u0631\u064a\u0627\",\"NI\": \"\u0646\u064a\u0643\u0627\u0631\u0627\u063a\u0648\u0627\",\"NL\": \"\u0647\u0648\u0644\u0646\u062f\u0627\",\"NO\": \"\u0627\u0644\u0646\u0631\u0648\u064a\u062c\",\"NP\": \"\u0646\u064a\u0628\u0627\u0644\",\"NR\": \"\u0646\u0627\u0648\u0631\u0648\",\"NZ\": \"\u0646\u064a\u0648\u0632\u064a\u0644\u0646\u062f\u0627\",\"OM\": \"\u0639\u064f\u0645\u0627\u0646\",\"PA\": \"\u0628\u0646\u0645\u0627\",\"PE\": \"\u0628\u064a\u0631\u0648\",\"PG\": \"\u0628\u0627\u0628\u0648\u0627 \u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629\",\"PH\": \"\u0627\u0644\u0641\u0644\u0628\u064a\u0646\",\"PK\": \"\u0628\u0627\u0643\u0633\u062a\u0627\u0646\",\"PL\": \"\u0628\u0648\u0644\u0646\u062f\u0627\",\"PR\": \"\u0628\u0648\u0631\u062a\u0648\u0631\u064a\u0643\u0648\",\"PS\": \"\u0627\u0644\u0623\u0631\u0627\u0636\u064a \u0627\u0644\u0641\u0644\u0633\u0637\u064a\u0646\u064a\u0629\",\"PT\": \"\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\",\"PW\": \"\u0628\u0627\u0644\u0627\u0648\",\"PY\": \"\u0628\u0627\u0631\u0627\u063a\u0648\u0627\u064a\",\"QA\": \"\u0642\u0637\u0631\",\"RO\": \"\u0631\u0648\u0645\u0627\u0646\u064a\u0627\",\"RS\": \"\u0635\u0631\u0628\u064a\u0627\",\"RU\": \"\u0631\u0648\u0633\u064a\u0627\",\"RW\": \"\u0631\u0648\u0627\u0646\u062f\u0627\",\"SA\": \"\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629\",\"SB\": \"\u062c\u0632\u0631 \u0633\u0644\u064a\u0645\u0627\u0646\",\"SC\": \"\u0633\u064a\u0634\u0644\",\"SD\": \"\u0627\u0644\u0633\u0648\u062f\u0627\u0646\",\"SE\": \"\u0627\u0644\u0633\u0648\u064a\u062f\",\"SG\": \"\u0633\u0646\u063a\u0627\u0641\u0648\u0631\u0629\",\"SI\": \"\u0633\u0644\u0648\u0641\u064a\u0646\u064a\u0627\",\"SK\": \"\u0633\u0644\u0648\u0641\u0627\u0643\u064a\u0627\",\"SL\": \"\u0633\u064a\u0631\u0627\u0644\u064a\u0648\u0646\",\"SM\": \"\u0633\u0627\u0646 \u0645\u0627\u0631\u064a\u0646\u0648\",\"SN\": \"\u0627\u0644\u0633\u0646\u063a\u0627\u0644\",\"SO\": \"\u0627\u0644\u0635\u0648\u0645\u0627\u0644\",\"SR\": \"\u0633\u0648\u0631\u064a\u0646\u0627\u0645\",\"SS\": \"\u062c\u0646\u0648\u0628 \u0627\u0644\u0633\u0648\u062f\u0627\u0646\",\"ST\": \"\u0633\u0627\u0648 \u062a\u0648\u0645\u064a \u0648\u0628\u0631\u064a\u0646\u0633\u064a\u0628\u064a\",\"SV\": \"\u0627\u0644\u0633\u0644\u0641\u0627\u062f\u0648\u0631\",\"SZ\": \"\u0625\u0633\u0648\u0627\u062a\u064a\u0646\u064a\",\"TD\": \"\u062a\u0634\u0627\u062f\",\"TG\": \"\u062a\u0648\u063a\u0648\",\"TH\": \"\u062a\u0627\u064a\u0644\u0627\u0646\u062f\",\"TJ\": \"\u0637\u0627\u062c\u064a\u0643\u0633\u062a\u0627\u0646\",\"TL\": \"\u062a\u064a\u0645\u0648\u0631 - \u0644\u064a\u0634\u062a\u064a\",\"TM\": \"\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646\",\"TN\": \"\u062a\u0648\u0646\u0633\",\"TO\": \"\u062a\u0648\u0646\u063a\u0627\",\"TR\": \"\u062a\u0631\u0643\u064a\u0627\",\"TT\": \"\u062a\u0631\u064a\u0646\u064a\u062f\u0627\u062f \u0648\u062a\u0648\u0628\u0627\u063a\u0648\",\"TV\": \"\u062a\u0648\u0641\u0627\u0644\u0648\",\"TW\": \"\u062a\u0627\u064a\u0648\u0627\u0646\",\"TZ\": \"\u062a\u0646\u0632\u0627\u0646\u064a\u0627\",\"UA\": \"\u0623\u0648\u0643\u0631\u0627\u0646\u064a\u0627\",\"UG\": \"\u0623\u0648\u063a\u0646\u062f\u0627\",\"US\": \"\u0627\u0644\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629\",\"UY\": \"\u0623\u0648\u0631\u063a\u0648\u0627\u064a\",\"UZ\": \"\u0623\u0648\u0632\u0628\u0643\u0633\u062a\u0627\u0646\",\"VC\": \"\u0633\u0627\u0646\u062a \u0641\u0646\u0633\u0646\u062a \u0648\u062c\u0632\u0631 \u063a\u0631\u064a\u0646\u0627\u062f\u064a\u0646\",\"VE\": \"\u0641\u0646\u0632\u0648\u064a\u0644\u0627\",\"VN\": \"\u0641\u064a\u062a\u0646\u0627\u0645\",\"VU\": \"\u0641\u0627\u0646\u0648\u0627\u062a\u0648\",\"WS\": \"\u0633\u0627\u0645\u0648\u0627\",\"XK\": \"\u0643\u0648\u0633\u0648\u0641\u0648\",\"YE\": \"\u0627\u0644\u064a\u0645\u0646\",\"ZA\": \"\u062c\u0646\u0648\u0628 \u0623\u0641\u0631\u064a\u0642\u064a\u0627\",\"ZM\": \"\u0632\u0627\u0645\u0628\u064a\u0627\",\"ZW\": \"\u0632\u064a\u0645\u0628\u0627\u0628\u0648\u064a\"\n  };\n  \/\/ \u2500\u2500 Zusaetzliche Suchbegriffe (Aliasse) je Land \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Beeinflusst NUR die Suche, nicht den angezeigten Namen. Alles klein schreiben.\n  \/\/ Wichtig fuer AR: lateinische Schreibweisen, damit die Suche auch mit\n  \/\/ umgeschalteter Tastatur funktioniert.\n  const COUNTRY_SEARCH_ALIASES = {\n      \"US\": [\"\u0627\u0645\u0631\u064a\u0643\u0627\", \"\u0627\u0644\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629 \u0627\u0644\u0627\u0645\u0631\u064a\u0643\u064a\u0629\", \"usa\", \"united states\", \"america\", \"united states of america\"],\n      \"GB\": [\"\u0628\u0631\u064a\u0637\u0627\u0646\u064a\u0627\", \"\u0627\u0646\u062c\u0644\u062a\u0631\u0627\", \"\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629\", \"uk\", \"united kingdom\", \"england\", \"great britain\", \"britain\"],\n      \"GB-SCT\": [\"\u0627\u0633\u0643\u062a\u0644\u0646\u062f\u0627\", \"scotland\"],\n      \"AE\": [\"\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062a\", \"\u0627\u0644\u0625\u0645\u0627\u0631\u0627\u062a\", \"\u062f\u0628\u064a\", \"uae\", \"emirates\", \"united arab emirates\", \"dubai\"],\n      \"KR\": [\"\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629\", \"\u0643\u0648\u0631\u064a\u0627\", \"korea\", \"south korea\"],\n      \"NL\": [\"\u0647\u0648\u0644\u0646\u062f\u0627\", \"netherlands\", \"holland\"],\n      \"CH\": [\"\u0633\u0648\u064a\u0633\u0631\u0627\", \"switzerland\"],\n      \"DE\": [\"\u0627\u0644\u0645\u0627\u0646\u064a\u0627\", \"\u0623\u0644\u0645\u0627\u0646\u064a\u0627\", \"germany\", \"deutschland\"],\n      \"AT\": [\"\u0627\u0644\u0646\u0645\u0633\u0627\", \"austria\"],\n      \"CZ\": [\"\u0627\u0644\u062a\u0634\u064a\u0643\", \"czechia\", \"czech republic\"],\n      \"TR\": [\"\u062a\u0631\u0643\u064a\u0627\", \"turkey\", \"t\u00fcrkiye\", \"turkiye\"],\n      \"CI\": [\"\u0633\u0627\u062d\u0644 \u0627\u0644\u0639\u0627\u062c\", \"ivory coast\", \"cote d'ivoire\"],\n      \"MM\": [\"\u0645\u064a\u0627\u0646\u0645\u0627\u0631\", \"\u0628\u0648\u0631\u0645\u0627\", \"myanmar\", \"burma\"],\n      \"TL\": [\"\u062a\u064a\u0645\u0648\u0631 \u0627\u0644\u0634\u0631\u0642\u064a\u0629\", \"timor-leste\", \"east timor\"],\n      \"SZ\": [\"\u0627\u0633\u0648\u0627\u062a\u064a\u0646\u064a\", \"\u0625\u0633\u0648\u0627\u062a\u064a\u0646\u064a\", \"eswatini\", \"swaziland\"],\n      \"MK\": [\"\u0645\u0642\u062f\u0648\u0646\u064a\u0627\", \"macedonia\", \"north macedonia\"],\n      \"BY\": [\"\u0628\u064a\u0644\u0627\u0631\u0648\u0633\u064a\u0627\", \"\u0628\u064a\u0644\u0627\u0631\u0648\u0633\", \"belarus\"],\n      \"MD\": [\"\u0645\u0648\u0644\u062f\u0648\u0641\u0627\", \"moldova\"],\n      \"MA\": [\"\u0627\u0644\u0645\u063a\u0631\u0628\", \"morocco\"],\n      \"EG\": [\"\u0645\u0635\u0631\", \"egypt\"],\n      \"GR\": [\"\u0627\u0644\u064a\u0648\u0646\u0627\u0646\", \"greece\"],\n      \"IT\": [\"\u0627\u064a\u0637\u0627\u0644\u064a\u0627\", \"\u0625\u064a\u0637\u0627\u0644\u064a\u0627\", \"italy\"],\n      \"ES\": [\"\u0627\u0633\u0628\u0627\u0646\u064a\u0627\", \"\u0625\u0633\u0628\u0627\u0646\u064a\u0627\", \"spain\"],\n      \"FR\": [\"\u0641\u0631\u0646\u0633\u0627\", \"france\"],\n      \"PL\": [\"\u0628\u0648\u0644\u0646\u062f\u0627\", \"poland\"],\n      \"RU\": [\"\u0631\u0648\u0633\u064a\u0627\", \"russia\", \"russian federation\"],\n      \"CN\": [\"\u0627\u0644\u0635\u064a\u0646\", \"china\"],\n      \"JP\": [\"\u0627\u0644\u064a\u0627\u0628\u0627\u0646\", \"japan\"],\n      \"IN\": [\"\u0627\u0644\u0647\u0646\u062f\", \"india\"],\n      \"BR\": [\"\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644\", \"brazil\"],\n      \"MX\": [\"\u0627\u0644\u0645\u0643\u0633\u064a\u0643\", \"mexico\"],\n      \"CA\": [\"\u0643\u0646\u062f\u0627\", \"canada\"],\n      \"AU\": [\"\u0627\u0633\u062a\u0631\u0627\u0644\u064a\u0627\", \"\u0623\u0633\u062a\u0631\u0627\u0644\u064a\u0627\", \"australia\"],\n      \"NZ\": [\"\u0646\u064a\u0648\u0632\u064a\u0644\u0646\u062f\u0627\", \"new zealand\"],\n      \"ZA\": [\"\u062c\u0646\u0648\u0628 \u0627\u0641\u0631\u064a\u0642\u064a\u0627\", \"\u062c\u0646\u0648\u0628 \u0623\u0641\u0631\u064a\u0642\u064a\u0627\", \"south africa\"],\n      \"SA\": [\"\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629\", \"\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629\", \"saudi arabia\"],\n      \"JO\": [\"\u0627\u0644\u0627\u0631\u062f\u0646\", \"\u0627\u0644\u0623\u0631\u062f\u0646\", \"jordan\"],\n      \"LB\": [\"\u0644\u0628\u0646\u0627\u0646\", \"lebanon\"],\n      \"SY\": [\"\u0633\u0648\u0631\u064a\u0627\", \"syria\"],\n      \"IQ\": [\"\u0627\u0644\u0639\u0631\u0627\u0642\", \"iraq\"],\n      \"KW\": [\"\u0627\u0644\u0643\u0648\u064a\u062a\", \"kuwait\"],\n      \"QA\": [\"\u0642\u0637\u0631\", \"qatar\"],\n      \"BH\": [\"\u0627\u0644\u0628\u062d\u0631\u064a\u0646\", \"bahrain\"],\n      \"OM\": [\"\u0639\u0645\u0627\u0646\", \"\u0639\u064f\u0645\u0627\u0646\", \"oman\"],\n      \"YE\": [\"\u0627\u0644\u064a\u0645\u0646\", \"yemen\"],\n      \"DZ\": [\"\u0627\u0644\u062c\u0632\u0627\u0626\u0631\", \"algeria\"],\n      \"TN\": [\"\u062a\u0648\u0646\u0633\", \"tunisia\"],\n      \"LY\": [\"\u0644\u064a\u0628\u064a\u0627\", \"libya\"],\n      \"SD\": [\"\u0627\u0644\u0633\u0648\u062f\u0627\u0646\", \"sudan\"],\n      \"PS\": [\"\u0641\u0644\u0633\u0637\u064a\u0646\", \"\u0627\u0644\u0623\u0631\u0627\u0636\u064a \u0627\u0644\u0641\u0644\u0633\u0637\u064a\u0646\u064a\u0629\", \"palestine\"],\n      \"KP\": [\"north korea\"],\n      \"CV\": [\"cabo verde\", \"cape verde\"],\n      \"CD\": [\"dr congo\", \"drc\", \"congo kinshasa\"],\n      \"CG\": [\"congo brazzaville\"],\n      \"VA\": [\"vatican\", \"holy see\"],\n      \"LA\": [\"laos\"],\n      \"VN\": [\"vietnam\", \"viet nam\"],\n      \"IR\": [\"iran\", \"persia\"],\n      \"MO\": [\"macau\", \"macao\"],\n      \"HK\": [\"hong kong\"],\n      \"TW\": [\"taiwan\"],\n      \"GE\": [\"georgia\"]\n  };\n  const COUNTRIES = {\n    cat1: [\"CY\",\"CA\",\"FR\",\"FI\",\"BH\",\"AU\",\"AD\",\"SE\",\"DE\",\"SA\",\"AT\",\"BE\",\"HK\",\"MT\",\"IS\",\"SM\",\"NL\",\"DK\",\"TW\",\"AE\",\"US\",\"BN\",\"CH\",\"NO\",\"GY\",\"QA\",\"MO\",\"IE\",\"LU\",\"SG\",\"LI\",\"GB\",\"GB-SCT\"],\n    cat2: [\"KR\",\"ME\",\"CL\",\"TT\",\"MV\",\"UY\",\"BS\",\"OM\",\"SC\",\"MY\",\"PA\",\"TR\",\"LV\",\"GR\",\"KZ\",\"SK\",\"HU\",\"RU\",\"RO\",\"EE\",\"AW\",\"PT\",\"PR\",\"HR\",\"KW\",\"JP\",\"NZ\",\"PL\",\"IL\",\"ES\",\"LT\",\"SI\",\"CZ\",\"IT\"],\n    cat3: [\"BZ\",\"TN\",\"GT\",\"IQ\",\"ZA\",\"FJ\",\"EC\",\"LY\",\"ID\",\"VN\",\"BT\",\"DZ\",\"PE\",\"PW\",\"BW\",\"DM\",\"PY\",\"MD\",\"GQ\",\"MN\",\"VC\",\"IR\",\"GD\",\"EG\",\"CO\",\"SR\",\"TM\",\"BA\",\"BB\",\"BR\",\"AL\",\"AM\",\"GA\",\"MX\",\"AZ\",\"TH\",\"LC\",\"CN\",\"MK\",\"DO\",\"AG\",\"AR\",\"GE\",\"CR\",\"MU\",\"RS\",\"BY\",\"KN\",\"XK\",\"BG\"],\n    cat4: [\"UA\",\"BI\",\"SS\",\"CF\",\"YE\",\"MZ\",\"MW\",\"SO\",\"CD\",\"LR\",\"MG\",\"NE\",\"AF\",\"SD\",\"SB\",\"ML\",\"HT\",\"VU\",\"BF\",\"LS\",\"TD\",\"GW\",\"TG\",\"GM\",\"KI\",\"SL\",\"PG\",\"UG\",\"KM\",\"PS\",\"RW\",\"TZ\",\"ET\",\"ZM\",\"FM\",\"BJ\",\"GN\",\"TL\",\"MM\",\"SN\",\"CM\",\"TJ\",\"TV\",\"NP\",\"CG\",\"ST\",\"PK\",\"KE\",\"ZW\",\"MH\",\"HN\",\"TO\",\"CI\",\"WS\",\"GH\",\"VE\",\"KH\",\"MR\",\"KG\",\"NI\",\"NG\",\"DJ\",\"AO\",\"LA\",\"BD\",\"BO\",\"MA\",\"JO\",\"LB\",\"NR\",\"IN\",\"NA\",\"CV\",\"UZ\",\"PH\",\"SZ\",\"JM\",\"SV\",\"LK\"]\n  };\n  const OPT_COMM_LANG = \"In welcher Sprache nimmst Du teil?\";\n  const OPT_STATUS    = \"Trifft etwas davon auf Dich zu?\";\n  const STATUS_LABEL = {\n    paar:        \"Zu zweit (gleicher Haushalt)\",\n    schueler:    \"Sch\u00fcler:innen\",\n    student:     \"Student\",\n    wiederholer: \"Wiederholer\",\n    apponly:     \"Digitale Teilnahme (App)\"\n  };\n  const host = document.getElementById(\"sw-host-ar\");\n  const shadow = host.attachShadow({ mode: \"open\" });\n  const styleEl = document.createElement(\"style\");\n  styleEl.textContent = `\n    :host {\n      display: block;\n      --bg:           #F5FAF6;\n      --card:         #FFFFFF;\n      --ink:          #0C1E14;\n      --ink-muted:    #27703F;\n      --accent:       #0C1E14;\n      --accent-light: #E6F2E8;\n      --border:       #C8E0CE;\n      --radius:       16px;\n      --radius-sm:    10px;\n    }\n    @keyframes wiz-spin { to { transform: rotate(360deg); } }\n    .sw-root {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 20px; font-weight: 400; color: var(--ink);\n      background: var(--bg); padding: 32px 20px;\n      display: flex; align-items: flex-start; justify-content: center;\n    }\n    .sw-card {\n      background: var(--card); border: 1px solid var(--border);\n      border-radius: 24px; padding: 36px 32px;\n      width: 100%; max-width: 780px;\n      box-shadow: 0 4px 24px rgba(12,30,20,0.08); box-sizing: border-box;\n    }\n    @media (max-width: 480px) {\n      .sw-root { padding: 16px 10px; }\n      .sw-card { padding: 24px 16px; border-radius: 16px; }\n    }\n    .sw-progress { display: flex; gap: 8px; margin-bottom: 32px; }\n    .sw-progress-step { flex: 1; height: 4px; background: var(--border); border-radius: 999px; transition: background 0.35s; }\n    .sw-progress-step.active { background: var(--accent); }\n    .sw-progress-step.done   { background: var(--accent); opacity: 0.4; }\n    .sw-step-label { font-size: 12px; font-weight: 400; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: 10px; }\n    .sw-heading { font-size: 26px; font-weight: 500; line-height: 1.2; margin: 0 0 6px; color: var(--accent); letter-spacing: 0.01em; }\n    .sw-subtext { font-size: 18px; font-weight: 400; color: var(--ink-muted); margin: 0 0 28px; line-height: 1.6; }\n    .sw-label { display: block; font-size: 18px; font-weight: 700; margin-bottom: 6px; color: var(--ink); }\n    .sw-select, .sw-text-input {\n      width: 100%; padding: 13px 15px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg);\n      font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-select {\n      appearance: none;\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2327703F' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: right 15px center;\n      cursor: pointer;\n    }\n    .sw-select:focus, .sw-text-input:focus {\n      outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1);\n    }\n    .sw-text-input { margin-bottom: 14px; }\n    .sw-redirect { display: none; margin-top: 12px; padding: 18px 20px; border-radius: var(--radius-sm); background: #FFF8F0; border: 1px solid rgba(180,80,0,0.2); font-size: 17px; line-height: 1.8; color: var(--ink); }\n    .sw-redirect strong { display: block; margin-bottom: 8px; font-size: 17px; color: #7A3500; }\n    .sw-redirect a { color: #27703F; text-decoration: underline; }\n    .sw-infobox {\n      margin-top: 12px; padding: 15px 17px; border-radius: var(--radius-sm);\n      background: var(--accent-light); border: 1px solid rgba(12,30,20,0.15);\n      font-size: 18px; font-weight: 400; line-height: 1.5;\n    }\n    .sw-infobox-title {\n      font-weight: 700; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase;\n      color: var(--accent); margin-bottom: 3px;\n    }\n    .sw-divider { border: 0; border-top: 1px solid var(--border); margin: 30px 0 24px; }\n    .sw-choice-row { display: flex; gap: 10px; flex-wrap: wrap; }\n    .sw-choice-card {\n      flex: 1; min-width: 150px; padding: 16px 14px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      text-align: center; cursor: pointer; font-size: 17px; line-height: 1.3;\n      transition: all 0.15s; background: var(--bg); box-sizing: border-box;\n    }\n    .sw-choice-card:hover { border-color: var(--accent); }\n    .sw-choice-card.active { background: var(--accent-light); border-color: var(--accent); font-weight: 700; color: var(--accent); }\n    @media (max-width: 480px) { .sw-choice-card { min-width: 100%; } }\n    .sw-person-block { margin-bottom: 8px; }\n    .sw-person-title { font-weight: 700; font-size: 21px; color: var(--accent); margin-bottom: 16px; }\n    .sw-field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 0; }\n    @media (max-width: 480px) { .sw-field-grid { grid-template-columns: 1fr; } }\n    .sw-range-header { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 22px; }\n    .sw-range-header-label { font-weight: 700; font-size: 18px; }\n    .sw-amount-display { display: flex; align-items: baseline; gap: 3px; }\n    .sw-amount-display span { font-size: 18px; font-weight: 400; }\n    .sw-amount-input {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 36px; font-weight: 700; color: var(--ink);\n      border: 2px solid var(--border); background: var(--bg);\n      text-align: right; width: 132px; padding: 4px 12px;\n      outline: none; border-radius: var(--radius-sm);\n      transition: background 0.15s, color 0.15s, border-color 0.15s, box-shadow 0.15s;\n    }\n    .sw-amount-input:hover { border-color: var(--accent); background: var(--accent-light); }\n    .sw-amount-input:focus { border-color: var(--accent); background: var(--accent-light); color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    input[type=range].sw-range {\n      -webkit-appearance: none; width: 100%; height: 6px;\n      border-radius: 999px; background: var(--border); outline: none; cursor: pointer;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb {\n      -webkit-appearance: none; width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35);\n      cursor: pointer; transition: transform 0.15s, box-shadow 0.15s;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb:hover { transform: scale(1.08); box-shadow: 0 0 0 9px rgba(12,30,20,0.18), 0 3px 12px rgba(12,30,20,0.4); }\n    input[type=range].sw-range::-webkit-slider-thumb:active { transform: scale(1.12); }\n    input[type=range].sw-range::-moz-range-thumb {\n      width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      border: none; box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); cursor: pointer;\n    }\n    input[type=range].sw-range.sw-pulse::-webkit-slider-thumb { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    input[type=range].sw-range.sw-pulse::-moz-range-thumb    { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    @keyframes sw-thumb-pulse {\n      0%, 100% { box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); }\n      50%      { box-shadow: 0 0 0 15px rgba(12,30,20,0.05), 0 3px 10px rgba(12,30,20,0.35); }\n    }\n    .sw-range-wrap { position: relative; }\n    .sw-markers { position: relative; height: 56px; margin-bottom: 8px; margin-left: 18px; margin-right: 18px; }\n    .sw-marker {\n      position: absolute; transform: translateX(-50%);\n      display: flex; flex-direction: column; align-items: center; gap: 2px;\n      justify-content: flex-end; height: 100%; pointer-events: auto; cursor: pointer;\n    }\n    .sw-marker-tick { width: 1px; height: 10px; background: var(--border); flex-shrink: 0; }\n    .sw-marker.active .sw-marker-tick { background: var(--accent); opacity: 0.5; }\n    .sw-marker-label { font-size: 11px; font-weight: 400; color: var(--ink-muted); white-space: nowrap; line-height: 1.2; text-align: center; order: -2; }\n    .sw-marker-amount { font-size: 13px; font-weight: 700; color: var(--ink-muted); order: -1; }\n    .sw-marker.active .sw-marker-label, .sw-marker.active .sw-marker-amount { color: var(--accent); }\n    @media (max-width: 540px) {\n      .sw-markers { display: none; }\n      .sw-markers-mobile { display: flex !important; }\n    }\n    .sw-markers-mobile {\n      display: none; flex-direction: column; gap: 0;\n      margin: 12px 0 4px; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden;\n    }\n    .sw-marker-mobile {\n      display: flex; align-items: center; justify-content: space-between;\n      padding: 10px 14px; cursor: pointer; border-bottom: 1px solid var(--border);\n      transition: background 0.15s; font-family: 'Tinos', Georgia, serif;\n    }\n    .sw-marker-mobile:last-child { border-bottom: 0; }\n    .sw-marker-mobile:hover { background: var(--accent-light); }\n    .sw-marker-mobile.active { background: var(--accent-light); }\n    .sw-marker-mobile-label { font-size: 15px; font-weight: 400; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-label { color: var(--accent); font-weight: 700; }\n    .sw-marker-mobile-amount { font-size: 16px; font-weight: 700; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-amount { color: var(--accent); }\n    .sw-summary-box { padding: 18px 20px; background: var(--accent-light); border: 1px solid rgba(12,30,20,0.2); border-radius: var(--radius-sm); margin-top: 20px; }\n    .sw-summary-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; font-size: 16px; color: var(--ink); }\n    .sw-summary-row.sw-summary-discount { color: #8A1F1F; }\n    .sw-summary-row.sw-summary-total { border-top: 1px solid rgba(12,30,20,0.25); margin-top: 8px; padding-top: 12px; font-weight: 700; font-size: 22px; color: var(--accent); }\n    .sw-summary-person-label { font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-muted); margin: 14px 0 2px; }\n    .sw-summary-person-label:first-child { margin-top: 0; }\n    .sw-btn-row { display: flex; gap: 10px; margin-top: 24px; flex-wrap: wrap; }\n    .sw-btn { flex: 1; min-width: 140px; padding: 15px 17px; border-radius: var(--radius-sm); font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 700; cursor: pointer; transition: all 0.2s; border: 0; }\n    .sw-btn-primary { background: var(--accent); color: #fff; }\n    .sw-btn-primary:hover { background: #27703F; transform: translateY(-1px); }\n    .sw-btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }\n    .sw-btn-secondary { background: transparent; color: var(--ink); border: 1px solid var(--border); }\n    .sw-btn-secondary:hover { background: var(--bg); }\n    .sw-error { display: none; margin-top: 15px; padding: 13px 15px; border-radius: var(--radius-sm); background: #FFF3F3; border: 1px solid rgba(220,30,30,0.2); color: #8A1F1F; font-size: 18px; font-weight: 400; line-height: 1.5; white-space: pre-wrap; }\n    .wiz-spinner { display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.4); border-top-color: #fff; border-radius: 50%; animation: wiz-spin 0.7s linear infinite; vertical-align: middle; margin-right: 8px; }\n    .sw-country-search-wrap { position: relative; margin-bottom: 10px; }\n    .sw-country-search-icon { position: absolute; left: 18px; top: 50%; transform: translateY(-50%); color: var(--ink-muted); pointer-events: none; opacity: 0.5; }\n    .sw-country-search {\n      width: 100%; padding: 13px 15px 13px 54px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg); font-family: 'Tinos', Georgia, serif;\n      font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-country-search:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    .sw-country-list { max-height: 240px; overflow-y: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }\n    .sw-country-item { padding: 11px 15px; cursor: pointer; font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; display: flex; justify-content: space-between; align-items: center; transition: background 0.15s; border-bottom: 1px solid var(--border); }\n    .sw-country-item:last-child { border-bottom: 0; }\n    .sw-country-item:hover { background: var(--accent-light); }\n    .sw-country-item.selected { background: var(--accent-light); font-weight: 700; }\n    .sw-country-item-cat { font-size: 12px; color: var(--ink-muted); background: var(--border); padding: 2px 8px; border-radius: 999px; }\n    .sw-country-empty { padding: 15px; font-size: 18px; color: var(--ink-muted); text-align: center; }\n    .sw-step { display: none; }\n    .sw-step.active { display: block; }\n    \/* \u2500\u2500 RTL-Anpassungen \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    .sw-root { direction: rtl; text-align: right; }\n    .sw-country-search { padding: 13px 54px 13px 15px; }\n    .sw-country-search-icon { left: auto; right: 18px; }\n    .sw-select { background-position: left 15px center; }\n    .sw-amount-display { direction: ltr; }\n    .sw-range-wrap { direction: ltr; }\n    .sw-marker-label, .sw-marker-mobile-label { direction: rtl; }\n    .sw-marker-amount, .sw-marker-mobile-amount { direction: ltr; unicode-bidi: isolate; }\n    .sw-summary-row > span:last-child { direction: ltr; unicode-bidi: isolate; }\n    .sw-country-item, .sw-marker-mobile { direction: rtl; }\n    .wiz-spinner { margin-right: 0; margin-left: 8px; }\n    .sw-step-label, .sw-summary-person-label { text-align: right; }\n  `;\n  shadow.appendChild(styleEl);\n  const wrapper = document.createElement(\"div\");\n  wrapper.innerHTML = `\n    <div class=\"sw-root\" dir=\"rtl\">\n      <div class=\"sw-card\">\n        <div class=\"sw-progress\">\n          <div class=\"sw-progress-step\" id=\"sw-prog-1\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-2\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-3\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-4\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-5\"><\/div>\n        <\/div>\n        <!-- STEP 1 -->\n        <div class=\"sw-step active\" id=\"sw-step-welcome\">\n          <div class=\"sw-step-label\">\u0627\u0644\u062e\u0637\u0648\u0629 1 \u0645\u0646 5<\/div>\n          <h2 class=\"sw-heading\">\u0645\u0631\u062d\u0628\u064b\u0627 \u0628\u0643<\/h2>\n          <p class=\"sw-subtext\">\u0641\u064a \u062e\u0637\u0648\u0627\u062a \u0642\u0644\u064a\u0644\u0629\u060c \u062a\u062e\u062a\u0627\u0631 \u0627\u0644\u0628\u0644\u062f \u0648\u0627\u0644\u0644\u063a\u0629 \u0648\u0646\u0648\u0639 \u0627\u0644\u062a\u0633\u062c\u064a\u0644 \u0648\u0627\u0644\u0645\u0633\u0627\u0647\u0645\u0629 \u2013 \u062b\u0645 \u062a\u0646\u062a\u0642\u0644 \u0645\u0628\u0627\u0634\u0631\u0629 \u0625\u0644\u0649 \u0627\u0644\u062f\u0641\u0639.<\/p>\n          <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-welcome-next\" style=\"width:100%;\">\u0627\u0644\u0623\u0633\u0639\u0627\u0631 \u0648\u0627\u0644\u062a\u0633\u062c\u064a\u0644<\/button>\n        <\/div>\n        <!-- STEP 2 -->\n        <div class=\"sw-step\" id=\"sw-step-country\">\n          <div class=\"sw-step-label\">\u0627\u0644\u062e\u0637\u0648\u0629 2 \u0645\u0646 5<\/div>\n          <h2 class=\"sw-heading\">\u0623\u064a\u0646 \u062a\u0639\u064a\u0634\u061f<\/h2>\n          <label class=\"sw-label\">\u0627\u0644\u0628\u0644\u062f<\/label>\n          <div class=\"sw-country-search-wrap\">\n            <svg class=\"sw-country-search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.35-4.35\"\/><\/svg>\n            <input type=\"text\" class=\"sw-country-search\" id=\"sw-country-search\" placeholder=\"\u0627\u0644\u0628\u062d\u062b \u0639\u0646 \u0628\u0644\u062f\u2026\" autocomplete=\"off\">\n          <\/div>\n          <div class=\"sw-country-list\" id=\"sw-country-list\"><\/div>\n          <input type=\"hidden\" id=\"sw-country\">\n          <div class=\"sw-infobox\" id=\"sw-catInfo\">\n            <div class=\"sw-infobox-title\">\u0641\u0626\u0629 \u0627\u0644\u0633\u0639\u0631<\/div>\n            <div id=\"sw-catText\">\u064a\u0631\u062c\u0649 \u0627\u062e\u062a\u064a\u0627\u0631 \u0628\u0644\u062f \u0623\u0648\u0644\u064b\u0627.<\/div>\n          <\/div>\n          <div class=\"sw-redirect\" id=\"sw-redirect-russia\">\n            <strong>\u062a\u0648\u062c\u062f \u0635\u0641\u062d\u0629 \u062a\u0633\u062c\u064a\u0644 \u062e\u0627\u0635\u0629 \u0628\u0627\u0644\u0645\u0634\u0627\u0631\u0643\u064a\u0646 \u0645\u0646 \u0631\u0648\u0633\u064a\u0627.<\/strong>\n            \u0646\u0638\u0627\u0645 \u0627\u0644\u062f\u0641\u0639 \u0644\u062f\u064a\u0646\u0627 \u063a\u064a\u0631 \u0645\u062a\u0627\u062d \u0641\u064a \u0631\u0648\u0633\u064a\u0627. \u064a\u0631\u062c\u0649 \u0627\u0644\u062a\u0633\u062c\u064a\u0644 \u0647\u0646\u0627\u0643:<br><br>\n            <a href=\"https:\/\/spiritual-activity.org\/ru\/anmeldung-basic-exercises\/\">\u0627\u0644\u0627\u0646\u062a\u0642\u0627\u0644 \u0625\u0644\u0649 \u0635\u0641\u062d\u0629 \u0627\u0644\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u0631\u0648\u0633\u064a\u0629<\/a>\n          <\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-country-back\">\u0631\u062c\u0648\u0639<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-country-next\" disabled>\u0627\u0644\u062a\u0627\u0644\u064a<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 3 -->\n        <div class=\"sw-step\" id=\"sw-step-langform\">\n          <div class=\"sw-step-label\">\u0627\u0644\u062e\u0637\u0648\u0629 3 \u0645\u0646 5<\/div>\n          <h2 class=\"sw-heading\">\u0627\u0644\u0644\u063a\u0629 \u0648\u0646\u0648\u0639 \u0627\u0644\u062a\u0633\u062c\u064a\u0644<\/h2>\n          <label class=\"sw-label\" for=\"sw-commLang\">\u0628\u0623\u064a \u0644\u063a\u0629 \u0633\u062a\u0634\u0627\u0631\u0643\u061f<\/label>\n          <select class=\"sw-select\" id=\"sw-commLang\">\n            <option value=\"\" selected disabled>\u064a\u0631\u062c\u0649 \u0627\u0644\u0627\u062e\u062a\u064a\u0627\u0631\u2026<\/option>\n            <option value=\"Deutsch\">\u0627\u0644\u0623\u0644\u0645\u0627\u0646\u064a\u0629<\/option>\n            <option value=\"Englisch\">\u0627\u0644\u0625\u0646\u062c\u0644\u064a\u0632\u064a\u0629<\/option>\n            <option value=\"Spanisch\">\u0627\u0644\u0625\u0633\u0628\u0627\u0646\u064a\u0629<\/option>\n            <option value=\"Franz\u00f6sisch\">\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629<\/option>\n            <option value=\"Italienisch\">\u0627\u0644\u0625\u064a\u0637\u0627\u0644\u064a\u0629<\/option>\n            <option value=\"Portugiesisch\">\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\u064a\u0629<\/option>\n            <option value=\"Arabisch\">\u0627\u0644\u0639\u0631\u0628\u064a\u0629<\/option>\n            <option value=\"Hebr\u00e4isch\">\u0627\u0644\u0639\u0628\u0631\u064a\u0629<\/option>\n            <option value=\"Farsi\">\u0627\u0644\u0641\u0627\u0631\u0633\u064a\u0629<\/option>\n            <option value=\"Georgisch\">\u0627\u0644\u062c\u0648\u0631\u062c\u064a\u0629<\/option>\n            <option value=\"Ukrainisch\">\u0627\u0644\u0623\u0648\u0643\u0631\u0627\u0646\u064a\u0629<\/option>\n            <option value=\"Niederl\u00e4ndisch\">\u0627\u0644\u0647\u0648\u0644\u0646\u062f\u064a\u0629<\/option>\n            <option value=\"T\u00fcrkisch\">\u0627\u0644\u062a\u0631\u0643\u064a\u0629<\/option>\n            <option value=\"Bulgarisch\">\u0627\u0644\u0628\u0644\u063a\u0627\u0631\u064a\u0629<\/option>\n            <option value=\"Russisch\">\u0627\u0644\u0631\u0648\u0633\u064a\u0629<\/option>\n            <option value=\"Chinesisch\">\u0627\u0644\u0635\u064a\u0646\u064a\u0629<\/option>\n            <option value=\"Japanisch\">\u0627\u0644\u064a\u0627\u0628\u0627\u0646\u064a\u0629<\/option>\n            <option value=\"Koreanisch\">\u0627\u0644\u0643\u0648\u0631\u064a\u0629<\/option>\n          <\/select>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note\" style=\"display:none; margin-top:14px;\">\n            <div class=\"sw-infobox-title\">\u0645\u0634\u0627\u0631\u0643\u0629 \u0631\u0642\u0645\u064a\u0629 \u00b7 \u221235\u20ac<\/div>\n            <div id=\"sw-apponly-note-text\">\u0623\u0646\u062a \u062a\u0634\u0627\u0631\u0643 \u0631\u0642\u0645\u064a\u064b\u0627. \u0633\u064a\u064f\u062d\u062a\u0633\u0628 \u0627\u0644\u062e\u0635\u0645 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0641\u064a \u0627\u0644\u0645\u0644\u062e\u0635.<\/div>\n          <\/div>\n          <label class=\"sw-label\" style=\"margin-top:26px;\">\u0643\u064a\u0641 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u062a\u0633\u062c\u064a\u0644\u061f<\/label>\n          <div class=\"sw-choice-row\" id=\"sw-form-choices\">\n            <div class=\"sw-choice-card active\" data-form=\"einzeln\">\u0641\u0631\u062f\u064a<\/div>\n            <div class=\"sw-choice-card\" data-form=\"paar\">\u062b\u0646\u0627\u0626\u064a<br><span style=\"font-size:13px; font-weight:400;\">(\u0646\u0641\u0633 \u0627\u0644\u0623\u0633\u0631\u0629)<\/span><\/div>\n            <div class=\"sw-choice-card\" data-form=\"gruppe\">\u0645\u062c\u0645\u0648\u0639\u0629<br><span style=\"font-size:13px; font-weight:400;\">(4 \u0623\u0634\u062e\u0627\u0635 \u0641\u0623\u0643\u062b\u0631)<\/span><\/div>\n          <\/div>\n          <div class=\"sw-infobox\" id=\"sw-gruppe-note\" style=\"display:none; margin-top:18px;\">\n            <div class=\"sw-infobox-title\">\u062a\u0633\u062c\u064a\u0644 \u062c\u0645\u0627\u0639\u064a<\/div>\n            <div>\u064a\u0633\u0639\u062f\u0646\u0627 \u0627\u0647\u062a\u0645\u0627\u0645\u0643. \u064a\u0645\u0643\u0646\u0643 \u0625\u062a\u0645\u0627\u0645 \u0627\u0644\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062c\u0645\u0627\u0639\u064a \u0641\u064a \u0627\u0644\u0635\u0641\u062d\u0629 \u0627\u0644\u062a\u0627\u0644\u064a\u0629. \u064a\u0631\u062c\u0649 \u0627\u0644\u0645\u0644\u0627\u062d\u0638\u0629: \u0627\u0644\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062c\u0645\u0627\u0639\u064a \u0645\u062a\u0627\u062d \u0628\u0627\u0644\u0644\u063a\u062a\u064a\u0646 \u0627\u0644\u0623\u0644\u0645\u0627\u0646\u064a\u0629 \u0648\u0627\u0644\u0625\u0646\u062c\u0644\u064a\u0632\u064a\u0629 \u0641\u0642\u0637.<\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-langform\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-langform-back\">\u0631\u062c\u0648\u0639<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-langform-next\" disabled>\u0627\u0644\u062a\u0627\u0644\u064a<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-gruppe-redirect\" style=\"display:none;\">\u0645\u062a\u0627\u0628\u0639\u0629 \u0625\u0644\u0649 \u0627\u0644\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062c\u0645\u0627\u0639\u064a<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4A -->\n        <div class=\"sw-step\" id=\"sw-step-details-solo\">\n          <div class=\"sw-step-label\">\u0627\u0644\u062e\u0637\u0648\u0629 4 \u0645\u0646 5<\/div>\n          <h2 class=\"sw-heading\">\u0628\u0639\u0636 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0639\u0646\u0643<\/h2>\n          <p class=\"sw-subtext\">\u0647\u0644 \u064a\u0646\u0637\u0628\u0642 \u0639\u0644\u064a\u0643 \u0623\u064a \u0645\u0645\u0627 \u064a\u0644\u064a\u061f \u0647\u0630\u0627 \u064a\u0633\u0627\u0639\u062f\u0646\u0627 \u0639\u0644\u0649 \u0627\u0642\u062a\u0631\u0627\u062d \u0627\u0644\u0645\u0633\u0627\u0647\u0645\u0629 \u0627\u0644\u0645\u0646\u0627\u0633\u0628\u0629 \u0644\u0643.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u0645\u0634\u0627\u0631\u0643\u0629 \u0631\u0642\u0645\u064a\u0629 \u00b7 \u221235\u20ac<\/div>\n            <div>\u0623\u0646\u062a \u062a\u0634\u0627\u0631\u0643 \u0631\u0642\u0645\u064a\u064b\u0627. \u0633\u064a\u064f\u062d\u062a\u0633\u0628 \u0627\u0644\u062e\u0635\u0645 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0641\u064a \u0627\u0644\u0645\u0644\u062e\u0635.<\/div>\n          <\/div>\n          <label class=\"sw-label\">\u064a\u0631\u062c\u0649 \u0627\u0644\u0627\u062e\u062a\u064a\u0627\u0631<\/label>\n          <select class=\"sw-select\" id=\"sw-solo-status\">\n            <option value=\"\" disabled selected>\u064a\u0631\u062c\u0649 \u0627\u0644\u0627\u062e\u062a\u064a\u0627\u0631\u2026<\/option>\n            <option value=\"normal\">\u062a\u0633\u062c\u064a\u0644 \u0639\u0627\u062f\u064a<\/option>\n            <option value=\"schueler\">\u0637\u0644\u0627\u0628 \u0627\u0644\u0645\u062f\u0627\u0631\u0633 (\u221250\u066a)<\/option>\n            <option value=\"student\">\u0641\u064a \u062a\u062f\u0631\u064a\u0628\/\u062f\u0631\u0627\u0633\u0629 (\u221225\u066a)<\/option>\n            <option value=\"wiederholer\">\u0623\u064f\u0639\u064a\u062f \u0627\u0644\u062f\u0648\u0631\u0629 \u0645\u0639 \u062a\u0645\u0627\u0631\u064a\u0646 \u0627\u0644\u0631\u0648\u062d (\u0628\u062f\u0648\u0646 \u0645\u062c\u0645\u0648\u0639\u0629 \u0628\u0637\u0627\u0642\u0627\u062a \u062c\u062f\u064a\u062f\u0629 \u2212 30\u066a)<\/option>\n          <\/select>\n          <div class=\"sw-error\" id=\"sw-error-details-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-solo-back\">\u0631\u062c\u0648\u0639<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-solo-next\" disabled>\u0627\u0644\u062a\u0627\u0644\u064a<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4B -->\n        <div class=\"sw-step\" id=\"sw-step-details-paar\">\n          <div class=\"sw-step-label\">\u0627\u0644\u062e\u0637\u0648\u0629 4 \u0645\u0646 5<\/div>\n          <h2 class=\"sw-heading\">\u0628\u064a\u0627\u0646\u0627\u062a \u0643\u0644\u0627\u0643\u0645\u0627<\/h2>\n          <p class=\"sw-subtext\">\u064a\u0631\u062c\u0649 \u0625\u062f\u062e\u0627\u0644 \u0628\u064a\u0627\u0646\u0627\u062a \u0643\u0644\u0627 \u0627\u0644\u0634\u062e\u0635\u064a\u0646. \u0633\u064a\u062d\u0635\u0644 \u0627\u0644\u0634\u062e\u0635 \u0627\u0644\u062b\u0627\u0646\u064a \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0639\u0644\u0649 \u062e\u0635\u0645 50\u066a.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-paar-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u0645\u0634\u0627\u0631\u0643\u0629 \u0631\u0642\u0645\u064a\u0629 \u00b7 \u221235\u20ac<\/div>\n            <div>\u0623\u0646\u062a\u0645\u0627 \u062a\u0634\u0627\u0631\u0643\u0627\u0646 \u0631\u0642\u0645\u064a\u064b\u0627. \u0633\u064a\u064f\u062d\u062a\u0633\u0628 \u0627\u0644\u062e\u0635\u0645 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0641\u064a \u0627\u0644\u0645\u0644\u062e\u0635.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\u0627\u0644\u0634\u062e\u0635 1<\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u0648\u0644<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-vorname\"><\/div>\n              <div><label class=\"sw-label\">\u0627\u0633\u0645 \u0627\u0644\u0639\u0627\u0626\u0644\u0629<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p1-email\">\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\u0627\u0644\u0634\u062e\u0635 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250\u066a)<\/span><\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u0648\u0644<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-vorname\"><\/div>\n              <div><label class=\"sw-label\">\u0627\u0633\u0645 \u0627\u0644\u0639\u0627\u0626\u0644\u0629<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p2-email\">\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-details-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-paar-back\">\u0631\u062c\u0648\u0639<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-paar-next\" disabled>\u0627\u0644\u062a\u0627\u0644\u064a<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5A -->\n        <div class=\"sw-step\" id=\"sw-step-amount-solo\">\n          <div class=\"sw-step-label\">\u0627\u0644\u062e\u0637\u0648\u0629 5 \u0645\u0646 5<\/div>\n          <h2 class=\"sw-heading\">\u0627\u062e\u062a\u064a\u0627\u0631 \u0627\u0644\u0645\u0633\u0627\u0647\u0645\u0629<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-solo\">\u0647\u0646\u0627 \u064a\u0645\u0643\u0646\u0643 \u0627\u062e\u062a\u064a\u0627\u0631 \u0627\u0644\u0645\u0633\u0627\u0647\u0645\u0629 \u0627\u0644\u0645\u0646\u0627\u0633\u0628\u0629 \u0644\u0643.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-solo\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u0645\u0634\u0627\u0631\u0643\u0629 \u0631\u0642\u0645\u064a\u0629 \u00b7 \u221235\u20ac<\/div>\n            <div>\u0623\u0646\u062a \u062a\u0634\u0627\u0631\u0643 \u0631\u0642\u0645\u064a\u064b\u0627. \u0633\u064a\u064f\u062d\u062a\u0633\u0628 \u0627\u0644\u062e\u0635\u0645 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0641\u064a \u0627\u0644\u0645\u0644\u062e\u0635.<\/div>\n          <\/div>\n          <div class=\"sw-range-header\">\n            <div class=\"sw-range-header-label\">\u0645\u0628\u0644\u063a\u0643<\/div>\n            <div class=\"sw-amount-display\">\n              <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-solo\" value=\"360\">\n              <span>\u20ac<\/span>\n            <\/div>\n          <\/div>\n          <div class=\"sw-range-wrap\">\n            <div class=\"sw-markers\" id=\"sw-markers-solo\"><\/div>\n            <input type=\"range\" class=\"sw-range\" id=\"sw-amount-solo\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n            <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-solo\"><\/div>\n          <\/div>\n          <p style=\"margin-top:18px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \u0625\u0630\u0627 \u0643\u0646\u062a \u0628\u062d\u0627\u062c\u0629 \u0625\u0644\u0649 \u062a\u062e\u0641\u064a\u0636 \u0645\u0627\u0644\u064a \u0625\u0636\u0627\u0641\u064a\u060c \u0641\u0644\u0627 \u062a\u062a\u0631\u062f\u062f \u0641\u064a \u0645\u0631\u0627\u0633\u0644\u062a\u0646\u0627:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-solo\">\n            <div class=\"sw-summary-row\"><span>\u0627\u0644\u0645\u0633\u0627\u0647\u0645\u0629 \u0627\u0644\u0645\u062e\u062a\u0627\u0631\u0629<\/span><span id=\"sw-solo-chosen\">360\u20ac<\/span><\/div>\n            <div id=\"sw-solo-discounts\"><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-solo\" style=\"display:none;\"><span>\u0627\u0644\u0634\u062d\u0646<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\u0627\u0644\u0625\u062c\u0645\u0627\u0644\u064a<\/span><span><span id=\"sw-solo-total\">360<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-solo-back\">\u0631\u062c\u0648\u0639<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-solo\" style=\"line-height:1.35;\">\u062a\u0633\u062c\u064a\u0644<br><span style=\"font-size:13px; font-weight:400;\">\u0633\u064a\u062a\u0645 \u0625\u062a\u0645\u0627\u0645 \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u062f\u0641\u0639 \u0628\u0627\u0644\u0644\u063a\u0629 \u0627\u0644\u0625\u0646\u062c\u0644\u064a\u0632\u064a\u0629<\/span><\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5B -->\n        <div class=\"sw-step\" id=\"sw-step-amount-paar\">\n          <div class=\"sw-step-label\">\u0627\u0644\u062e\u0637\u0648\u0629 5 \u0645\u0646 5<\/div>\n          <h2 class=\"sw-heading\">\u0627\u062e\u062a\u064a\u0627\u0631 \u0627\u0644\u0645\u0633\u0627\u0647\u0645\u0627\u062a<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-paar\">\u064a\u062e\u062a\u0627\u0631 \u0643\u0644 \u0634\u062e\u0635 \u0645\u0633\u0627\u0647\u0645\u062a\u0647 \u0627\u0644\u062e\u0627\u0635\u0629. \u0633\u064a\u062d\u0635\u0644 \u0627\u0644\u0634\u062e\u0635 2 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0639\u0644\u0649 \u062e\u0635\u0645 50\u066a.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-paar\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u0645\u0634\u0627\u0631\u0643\u0629 \u0631\u0642\u0645\u064a\u0629 \u00b7 \u221235\u20ac<\/div>\n            <div>\u0623\u0646\u062a\u0645\u0627 \u062a\u0634\u0627\u0631\u0643\u0627\u0646 \u0631\u0642\u0645\u064a\u064b\u0627. \u0633\u064a\u064f\u062d\u062a\u0633\u0628 \u0627\u0644\u062e\u0635\u0645 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0641\u064a \u0627\u0644\u0645\u0644\u062e\u0635.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p1-title\">\u0627\u0644\u0634\u062e\u0635 1<\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\u0627\u0644\u0645\u0633\u0627\u0647\u0645\u0629<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p1\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p1\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p1\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p1\"><\/div>\n            <\/div>\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p2-title\">\u0627\u0644\u0634\u062e\u0635 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250\u066a)<\/span><\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\u0627\u0644\u0645\u0633\u0627\u0647\u0645\u0629<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p2\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p2\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p2\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p2\"><\/div>\n            <\/div>\n          <\/div>\n          <p style=\"margin-top:8px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \u0625\u0630\u0627 \u0643\u0646\u062a\u0645\u0627 \u0628\u062d\u0627\u062c\u0629 \u0625\u0644\u0649 \u062a\u062e\u0641\u064a\u0636 \u0645\u0627\u0644\u064a \u0625\u0636\u0627\u0641\u064a\u060c \u0641\u0644\u0627 \u062a\u062a\u0631\u062f\u062f\u0627 \u0641\u064a \u0645\u0631\u0627\u0633\u0644\u062a\u0646\u0627:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-paar\">\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p1-label\">\u0627\u0644\u0634\u062e\u0635 1<\/div>\n            <div class=\"sw-summary-row\"><span>\u0627\u0644\u0645\u0633\u0627\u0647\u0645\u0629 \u0627\u0644\u0645\u062e\u062a\u0627\u0631\u0629<\/span><span id=\"sw-p1-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p1-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\u0627\u0644\u0645\u062c\u0645\u0648\u0639 \u0627\u0644\u0641\u0631\u0639\u064a<\/span><span id=\"sw-p1-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p2-label\">\u0627\u0644\u0634\u062e\u0635 2<\/div>\n            <div class=\"sw-summary-row\"><span>\u0627\u0644\u0645\u0633\u0627\u0647\u0645\u0629 \u0627\u0644\u0645\u062e\u062a\u0627\u0631\u0629<\/span><span id=\"sw-p2-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p2-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\u0627\u0644\u0645\u062c\u0645\u0648\u0639 \u0627\u0644\u0641\u0631\u0639\u064a<\/span><span id=\"sw-p2-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-paar\" style=\"display:none;\"><span>\u0627\u0644\u0634\u062d\u0646<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\u0627\u0644\u0625\u062c\u0645\u0627\u0644\u064a<\/span><span><span id=\"sw-paar-total\">0<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-paar-back\">\u0631\u062c\u0648\u0639<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-paar\" style=\"line-height:1.35;\">\u0627\u0644\u0627\u0646\u062a\u0642\u0627\u0644 \u0625\u0644\u0649 \u0627\u0644\u062f\u0641\u0639<br><span style=\"font-size:13px; font-weight:400;\">\u0633\u064a\u062a\u0645 \u0625\u062a\u0645\u0627\u0645 \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u062f\u0641\u0639 \u0628\u0627\u0644\u0644\u063a\u0629 \u0627\u0644\u0625\u0646\u062c\u0644\u064a\u0632\u064a\u0629<\/span><\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  `;\n  shadow.appendChild(wrapper);\n  const $ = (id) => shadow.getElementById(id);\n  const COUNTRY_TO_CAT = {};\n  Object.keys(COUNTRIES).forEach(cat => COUNTRIES[cat].forEach(code => COUNTRY_TO_CAT[code] = cat));\n  function getCountryName(code) {\n    if (COUNTRY_NAMES[code]) return COUNTRY_NAMES[code];\n    try { return new Intl.DisplayNames([\"ar\"], { type: \"region\" }).of(code) || code; }\n    catch { return code; }\n  }\n  function getCountryAliases(code) {\n    const list = [];\n    \/\/ Intl-Name als Fallback, falls er vom festen CLDR-Namen abweicht\n    if (COUNTRY_NAMES[code]) {\n      try {\n        const intlName = new Intl.DisplayNames([\"ar\"], { type: \"region\" }).of(code);\n        if (intlName && intlName !== COUNTRY_NAMES[code]) list.push(intlName.toLowerCase());\n      } catch {}\n    }\n    \/\/ Englischer Name als lateinische Fallback-Schreibweise fuer alle Laender\n    try {\n      const enName = new Intl.DisplayNames([\"en\"], { type: \"region\" }).of(code);\n      if (enName) list.push(enName.toLowerCase());\n    } catch {}\n    (COUNTRY_SEARCH_ALIASES[code] || []).forEach(a => list.push(a.toLowerCase()));\n    return list;\n  }\n  function getAllCountriesSorted() {\n    const all = [];\n    [\"cat1\",\"cat2\",\"cat3\",\"cat4\"].forEach(cat => {\n      COUNTRIES[cat]\n        .map(code => ({ code, name: getCountryName(code), cat, aliases: getCountryAliases(code) }))\n        .sort((a, b) => a.name.localeCompare(b.name, \"ar\"))\n        .forEach(c => all.push(c));\n    });\n    return all;\n  }\n  function emptyPerson() {\n    return { vorname: \"\", nachname: \"\", email: \"\", wiederholer: false, statusType: \"\", amount: 0 };\n  }\n  const state = {\n    country: \"\", category: \"cat1\",\n    commLang: \"\", form: \"einzeln\",\n    persons: { solo: emptyPerson(), p1: emptyPerson(), p2: emptyPerson() }\n  };\n  function getPerson(key) { return state.persons[key] || state.persons.solo; }\n  function isAppOnly() {\n    const { category: cat, commLang: lang, country } = state;\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[country];\n      if (!exceptionLang || lang !== exceptionLang) return true;\n    }\n    if (APP_ONLY_LANGS.has(lang)) return true;\n    if (lang === \"Russisch\" && country && country !== \"RU\") return true;\n    return false;\n  }\n\n  function isWiederholer(person) {\n    return !!person && (person.wiederholer || person.statusType === \"wiederholer\");\n  }\n\n  \/\/ Geht ueberhaupt ein Kartenset raus? Nur wenn die Teilnahme nicht rein digital\n  \/\/ ist UND mindestens eine Person ein neues Set braucht - Wiederholer bekommen\n  \/\/ keins. Steuert sowohl die Versandzeile in der Zusammenfassung als auch die\n  \/\/ Wahl des Ecwid-Produkts, damit beide nicht auseinanderlaufen koennen.\n  function hasPhysicalShipment(isPaar) {\n    if (isAppOnly()) return false;\n    return isPaar\n      ? !(isWiederholer(state.persons.p1) && isWiederholer(state.persons.p2))\n      : !isWiederholer(state.persons.solo);\n  }\n\n  \/\/ Ecwid haengt den Versand am Produkt fest, nicht am Warenkorb. Ohne physischen\n  \/\/ Versand muss deshalb das versandfreie Digital-Produkt in den Warenkorb, sonst\n  \/\/ schlaegt der Shop trotzdem Versandkosten auf.\n  function getParticipationProductId(isPaar) {\n    return hasPhysicalShipment(isPaar) ? PRODUCTS[state.category] : PRODUCTS_APPONLY[state.category];\n  }\n  function updateAppOnlyUI() {\n    const appOnly = state.commLang ? isAppOnly() : false;\n    let reason = \"\";\n    if (appOnly) {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[state.country];\n      if ((state.category === \"cat3\" || state.category === \"cat4\") && exceptionLang) {\n        reason = TXT.reasonException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang);\n      } else if (state.category === \"cat3\" || state.category === \"cat4\") {\n        reason = TXT.reasonRegion;\n      } else if (state.commLang === \"Russisch\") {\n        reason = TXT.reasonRussian;\n      } else {\n        reason = TXT.reasonLanguage;\n      }\n    }\n    const noteIds = [\"sw-apponly-note\",\"sw-apponly-note-step4\",\"sw-apponly-note-paar-step4\",\"sw-apponly-note-step5-solo\",\"sw-apponly-note-step5-paar\"];\n    noteIds.forEach(id => {\n      const el = $(id);\n      if (!el) return;\n      el.style.display = appOnly ? \"block\" : \"none\";\n      const textDiv = el.querySelector(\"div:not(.sw-infobox-title)\");\n      if (textDiv && reason) textDiv.textContent = reason;\n    });\n  }\n  const STEP_CONTAINER = {\n    1: () => \"sw-step-welcome\",\n    2: () => \"sw-step-country\",\n    3: () => \"sw-step-langform\",\n    4: () => state.form === \"paar\" ? \"sw-step-details-paar\" : \"sw-step-details-solo\",\n    5: () => state.form === \"paar\" ? \"sw-step-amount-paar\" : \"sw-step-amount-solo\"\n  };\n  function showStep(n) {\n    shadow.querySelectorAll(\".sw-step\").forEach(el => el.classList.remove(\"active\"));\n    $(STEP_CONTAINER[n]()).classList.add(\"active\");\n    for (let i = 1; i <= 5; i++) {\n      const prog = $(\"sw-prog-\" + i);\n      if (!prog) continue;\n      if (i < n) prog.className = \"sw-progress-step done\";\n      else if (i === n) prog.className = \"sw-progress-step active\";\n      else prog.className = \"sw-progress-step\";\n    }\n    if (n === 5) {\n      const sliderIds = state.form === \"paar\" ? [\"sw-amount-p1\",\"sw-amount-p2\"] : [\"sw-amount-solo\"];\n      sliderIds.forEach(sid => { const el = $(sid); if (el) el.classList.add(\"sw-pulse\"); });\n      refreshSummary();\n    }\n  }\n  function setNextEnabled(id, enabled) {\n    const b = $(id);\n    if (!b) return;\n    b.disabled = !enabled;\n    b.style.opacity = enabled ? \"1\" : \".4\";\n    b.style.cursor  = enabled ? \"pointer\" : \"not-allowed\";\n  }\n  function showErrorIn(id, msg) { const el=$(id); el.style.display=\"block\"; el.textContent=msg; }\n  function clearErrorIn(id)     { const el=$(id); el.style.display=\"none\";  el.textContent=\"\"; }\n  function setCheckoutLoading(btnId, loading) {\n    const btn = $(btnId);\n    if (!btn) return;\n    const overlay = document.getElementById(OVERLAY_ID);\n    \/\/ innerHTML statt textContent: Der Checkout-Button ist zweizeilig (Hinweis auf den\n    \/\/ englischen Bezahlvorgang). Mit textContent ginge die zweite Zeile beim Zuruecksetzen\n    \/\/ nach einem Fehlversuch verloren.\n    if (!btn.dataset.defaultLabel) btn.dataset.defaultLabel = btn.innerHTML;\n    if (loading) {\n      btn.disabled = true;\n      btn.innerHTML = '<span class=\"wiz-spinner\"><\/span> ' + TXT.preparing;\n      btn.style.opacity = \".8\";\n      if (overlay) overlay.style.display = \"flex\";\n    } else {\n      btn.disabled = false;\n      btn.innerHTML = btn.dataset.defaultLabel;\n      btn.style.opacity = \"1\";\n      if (overlay) overlay.style.display = \"none\";\n    }\n  }\n  function showThankYou() {\n    const card = shadow.querySelector(\".sw-card\");\n    if (!card) return;\n    card.innerHTML = `\n      <div style=\"text-align:center; padding:20px 0;\">\n        <div style=\"font-size:56px; margin-bottom:16px; color:#27703F;\">\u2713<\/div>\n        <h2 style=\"font-family:'Tinos',Georgia,serif; font-size:26px; font-weight:500; margin:0 0 12px; color:#0C1E14;\">${TXT.thanksTitle}<\/h2>\n        <p style=\"font-family:'Tinos',Georgia,serif; font-size:18px; color:#27703F; line-height:1.6; margin:0 0 24px;\">${TXT.thanksLine1}${TXT.thanksLine2 ? \"<br>\" + TXT.thanksLine2 : \"\"}<\/p>\n        <div style=\"display:flex; justify-content:center;\">\n          <div style=\"width:36px; height:36px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:wiz-spin 0.8s linear infinite;\"><\/div>\n        <\/div>\n      <\/div>`;\n  }\n  function getAnchors(cat) {\n    const r = RANGES[cat], o = ORIENTIERUNG[cat];\n    return [[0,r.min],[25,o.reduced],[50,o.base],[75,o.support],[100,r.max]];\n  }\n  function normToEuro(norm, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      if (norm <= a[i+1][0]) {\n        const t = (norm - a[i][0]) \/ (a[i+1][0] - a[i][0]);\n        return Math.round(a[i][1] + t * (a[i+1][1] - a[i][1]));\n      }\n    }\n    return a[a.length-1][1];\n  }\n  function euroToNorm(euro, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      const lo = a[i][1], hi = a[i+1][1];\n      if (euro <= hi) {\n        if (hi === lo) return a[i+1][0];\n        return a[i][0] + (euro - lo) \/ (hi - lo) * (a[i+1][0] - a[i][0]);\n      }\n    }\n    return 100;\n  }\n  function getMarkerDefs(cat) {\n    const o = ORIENTIERUNG[cat];\n    return [\n      { value: o.reduced, label: TXT.markerReduced, normPct: 25 },\n      { value: o.base,    label: TXT.markerBase,    normPct: 50 },\n      { value: o.support, label: TXT.markerSupport, normPct: 75 }\n    ];\n  }\n  function renderMarkers(personKey) {\n    const cat = state.category;\n    const person = getPerson(personKey);\n    const markers = getMarkerDefs(cat);\n    const container = $(`sw-markers-${personKey}`);\n    container.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker\" + (person.amount === m.value ? \" active\" : \"\");\n      div.style.left = m.normPct + \"%\";\n      div.innerHTML = `<div class=\"sw-marker-tick\"><\/div><div class=\"sw-marker-amount\">${m.value}\u20ac<\/div><div class=\"sw-marker-label\">${m.label}<\/div>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      container.appendChild(div);\n    });\n    const mobileContainer = $(`sw-markers-mobile-${personKey}`);\n    mobileContainer.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker-mobile\" + (person.amount === m.value ? \" active\" : \"\");\n      div.innerHTML = `<span class=\"sw-marker-mobile-label\">${m.label}<\/span><span class=\"sw-marker-mobile-amount\">${m.value}\u20ac<\/span>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      mobileContainer.appendChild(div);\n    });\n  }\n  function selectMarkerValue(personKey, value) {\n    const person = getPerson(personKey);\n    $(`sw-amount-${personKey}`).value = euroToNorm(value, state.category);\n    person.amount = value;\n    $(`sw-amountInput-${personKey}`).value = value;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromSlider(personKey) {\n    const person = getPerson(personKey);\n    const norm = Number($(`sw-amount-${personKey}`).value);\n    person.amount = normToEuro(norm, state.category);\n    $(`sw-amountInput-${personKey}`).value = person.amount;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromInput(personKey) {\n    const person = getPerson(personKey);\n    const r = RANGES[state.category];\n    let val = Number($(`sw-amountInput-${personKey}`).value);\n    if (isNaN(val)) val = r.min;\n    val = Math.min(r.max, Math.max(r.min, val));\n    person.amount = val;\n    $(`sw-amountInput-${personKey}`).value = val;\n    $(`sw-amount-${personKey}`).value = euroToNorm(val, state.category);\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function wireAmountControl(personKey) {\n    $(`sw-amount-${personKey}`).addEventListener(\"input\", () => updateAmountFromSlider(personKey));\n    $(`sw-amountInput-${personKey}`).addEventListener(\"input\", () => {\n      const v = Number($(`sw-amountInput-${personKey}`).value);\n      if (!isNaN(v)) { getPerson(personKey).amount = v; refreshSummary(); }\n    });\n    $(`sw-amountInput-${personKey}`).addEventListener(\"change\", () => updateAmountFromInput(personKey));\n  }\n  function applyRangeForForm() {\n    const cat = state.category;\n    const ori = ORIENTIERUNG[cat];\n    const hint = TXT.hintLong;\n    if (state.form === \"paar\") {\n      [\"p1\",\"p2\"].forEach(key => {\n        const person = getPerson(key);\n        person.amount = ori.base;\n        $(`sw-amount-${key}`).value = 50;\n        $(`sw-amountInput-${key}`).value = ori.base;\n      });\n      const p1name = state.persons.p1.vorname;\n      const p2name = state.persons.p2.vorname;\n      $(\"sw-amount-p1-title\").innerHTML = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-amount-p2-title\").innerHTML = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) +\n        ' <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">' + TXT.p2Badge + '<\/span>';\n      $(\"sw-summary-p1-label\").textContent = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-summary-p2-label\").textContent = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) + \" \" + TXT.p2Badge;\n      $(\"sw-rangeHint-paar\").textContent = hint;\n      renderMarkers(\"p1\"); renderMarkers(\"p2\");\n    } else {\n      const person = state.persons.solo;\n      person.amount = ori.base;\n      $(\"sw-amount-solo\").value = 50;\n      $(\"sw-amountInput-solo\").value = ori.base;\n      $(\"sw-rangeHint-solo\").textContent = hint;\n      renderMarkers(\"solo\");\n    }\n    refreshSummary();\n  }\n  function getPercentDiscountCandidate(person, isPaarP2) {\n    if (isPaarP2) return { value: DISCOUNT_PAAR_P2, label: TXT.discP2 };\n    const candidates = [];\n    if (isWiederholer(person)) candidates.push({ value: DISCOUNT_WIEDERHOLER, label: TXT.discWiederholer });\n    if (person.statusType === \"schueler\") candidates.push({ value: DISCOUNT_SCHUELER, label: TXT.discSchueler });\n    if (person.statusType === \"student\")  candidates.push({ value: DISCOUNT_STUDENT,  label: TXT.discStudent });\n    if (!candidates.length) return null;\n    return candidates.reduce((best, c) => c.value > best.value ? c : best, candidates[0]);\n  }\n  function getDiscounts(person, isPaarP2) {\n    const discounts = [];\n    let remaining = Math.round(person.amount);\n    if (isAppOnly()) {\n      const appDisc = Math.min(DISCOUNT_APP_FIXED, remaining);\n      discounts.push({ type: \"fixed\", value: DISCOUNT_APP_FIXED, label: TXT.discApp, amountEuro: appDisc });\n      remaining -= appDisc;\n    }\n    const pct = getPercentDiscountCandidate(person, isPaarP2);\n    if (pct) {\n      const pctDisc = Math.round(remaining * pct.value);\n      discounts.push({ type: \"pct\", value: pct.value, label: pct.label, amountEuro: pctDisc });\n      remaining -= pctDisc;\n    }\n    return { discounts, finalAmount: Math.max(0, remaining) };\n  }\n  function buildStatusOptionValue(person, isPaar) {\n    const vals = [];\n    if (isPaar) vals.push(STATUS_LABEL.paar);\n    if (isAppOnly()) vals.push(STATUS_LABEL.apponly);\n    if (isWiederholer(person)) vals.push(STATUS_LABEL.wiederholer);\n    if (person.statusType === \"schueler\") vals.push(STATUS_LABEL.schueler);\n    if (person.statusType === \"student\")  vals.push(STATUS_LABEL.student);\n    return vals;\n  }\n  function refreshSummary() {\n    if (state.form === \"paar\") refreshSummaryPaar();\n    else refreshSummarySolo();\n  }\n  function renderDiscountRows(containerId, discounts) {\n    const container = $(containerId);\n    container.innerHTML = \"\";\n    discounts.forEach(d => {\n      const row = document.createElement(\"div\");\n      row.className = \"sw-summary-row sw-summary-discount\";\n      const pctStr = d.type === \"fixed\" ? `\u2212${d.amountEuro}\u20ac` : `\u2212${Math.round(d.value * 100)}%`;\n      row.innerHTML = `<span>${d.label} (${pctStr})<\/span><span>\u2212${d.amountEuro}\u20ac<\/span>`;\n      container.appendChild(row);\n    });\n  }\n  function refreshSummarySolo() {\n    const p = state.persons.solo;\n    const { discounts, finalAmount } = getDiscounts(p, false);\n    $(\"sw-solo-chosen\").textContent = Math.round(p.amount) + \"\u20ac\";\n    renderDiscountRows(\"sw-solo-discounts\", discounts);\n    const shipLine = $(\"sw-shipping-line-solo\");\n    const shippingSolo = (hasPhysicalShipment(false) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingSolo ? \"flex\" : \"none\";\n    $(\"sw-solo-total\").textContent = finalAmount + shippingSolo;\n  }\n  function refreshSummaryPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    function fill(prefix, person, isPaarP2) {\n      const { discounts, finalAmount } = getDiscounts(person, isPaarP2);\n      $(`sw-${prefix}-chosen`).textContent = Math.round(person.amount) + \"\u20ac\";\n      renderDiscountRows(`sw-${prefix}-discounts`, discounts);\n      $(`sw-${prefix}-subtotal`).textContent = finalAmount + \"\u20ac\";\n      return finalAmount;\n    }\n    const f1 = fill(\"p1\", p1, false);\n    const f2 = fill(\"p2\", p2, true);\n    const shipLine = $(\"sw-shipping-line-paar\");\n    const shippingPaar = (hasPhysicalShipment(true) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingPaar ? \"flex\" : \"none\";\n    $(\"sw-paar-total\").textContent = f1 + f2 + shippingPaar;\n  }\n  function renderCountryList(filter) {\n    const list = $(\"sw-country-list\");\n    const q = (filter || \"\").toLowerCase().trim();\n    const filtered = q\n      ? getAllCountriesSorted().filter(c =>\n          c.name.toLowerCase().includes(q) ||\n          (c.aliases || []).some(a => a.includes(q))\n        )\n      : getAllCountriesSorted();\n    list.innerHTML = \"\";\n    if (!filtered.length) { list.innerHTML = '<div class=\"sw-country-empty\">' + TXT.noCountry + '<\/div>'; return; }\n    filtered.forEach(c => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-country-item\" + (state.country === c.code ? \" selected\" : \"\");\n      div.dataset.code = c.code;\n      div.innerHTML = `<span>${c.name}<\/span><span class=\"sw-country-item-cat\">${TXT.catBadge}${c.cat.replace(\"cat\",\"\")}<\/span>`;\n      div.addEventListener(\"click\", () => selectCountry(c.code, c.cat, c.name));\n      list.appendChild(div);\n    });\n  }\n  function selectCountry(code, cat, name) {\n    state.country  = code;\n    state.category = cat;\n    $(\"sw-country\").value = code;\n    $(\"sw-country-search\").value = name;\n    $(\"sw-country-list\").innerHTML = \"\";\n    const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[code];\n    let suffix = \"\";\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      suffix = exceptionLang\n        ? \" \" + TXT.catSuffixException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang)\n        : \" \" + TXT.catSuffixDigital;\n    }\n    $(\"sw-catText\").textContent = (TXT.catLabels[cat] || cat) + suffix;\n    \/\/ Ecwid wickelt in Russland keine Zahlungen ab. Wer Russland waehlt, wird\n    \/\/ deshalb auf die russische Anmeldeseite verwiesen - die laeuft ueber n8n\n    \/\/ und Tochka statt ueber den Shop. Der russische Wizard verweist umgekehrt\n    \/\/ zurueck, sobald dort ein anderes Land gewaehlt wird.\n    const nachRussland = (code === \"RU\");\n    $(\"sw-redirect-russia\").style.display = nachRussland ? \"block\" : \"none\";\n    $(\"sw-catInfo\").style.display         = nachRussland ? \"none\"  : \"block\";\n    setNextEnabled(\"sw-btn-country-next\", !nachRussland);\n    updateAppOnlyUI();\n  }\n  function ensureEcwidReady(timeoutMs = 12000) {\n    return new Promise((resolve, reject) => {\n      function isReady() {\n        return window.Ecwid && window.Ecwid.Cart &&\n               typeof window.Ecwid.Cart.addProduct === \"function\" &&\n               typeof window.Ecwid.Cart.clear === \"function\";\n      }\n      if (isReady()) return resolve(true);\n      let resolved = false;\n      function done() { if (!resolved) { resolved = true; setTimeout(() => resolve(true), 200); } }\n      if (window.Ecwid) { try { window.Ecwid.OnAPILoaded.add(done); } catch(e) {} }\n      const start = Date.now();\n      const t = setInterval(() => {\n        if (isReady()) { clearInterval(t); done(); }\n        else if (Date.now() - start > timeoutMs) {\n          clearInterval(t);\n          if (!resolved) { resolved = true; reject(new Error(fillPlaceholder(TXT.errEcwid, timeoutMs\/1000))); }\n        }\n      }, 200);\n    });\n  }\n  function clearCartAsync() { return new Promise(r => Ecwid.Cart.clear(() => r(true))); }\n  function addProductAsync(payload, timeoutMs = 4000) {\n    return new Promise((resolve, reject) => {\n      let done = false;\n      const t = setTimeout(() => { if (!done) { done = true; resolve({ product:null, cart:null, timedOut:true }); } }, timeoutMs);\n      Ecwid.Cart.addProduct(payload, function(success, product, cart, error) {\n        if (done) return;\n        done = true; clearTimeout(t);\n        if (success) resolve({ product, cart, timedOut:false });\n        else reject(new Error((error || TXT.errProduct) + \" | Payload: \" + JSON.stringify(payload)));\n      });\n    });\n  }\n  function goToCart() { window.location.href = SHOP_CART_URL; }\n  function buildN8nPayload() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const d1 = getDiscounts(p1, false);\n    const d2 = getDiscounts(p2, true);\n    return {\n      sprache: state.commLang, land: state.country, kategorie: state.category, appOnly: isAppOnly(),\n      person1: { vorname: p1.vorname, nachname: p1.nachname, email: p1.email },\n      person2: { vorname: p2.vorname, nachname: p2.nachname, email: p2.email },\n      betraege: {\n        person1: { gewaehlt: Math.round(p1.amount), rabatte: d1.discounts, endbetrag: d1.finalAmount },\n        person2: { gewaehlt: Math.round(p2.amount), rabatte: d2.discounts, endbetrag: d2.finalAmount },\n        gesamt: d1.finalAmount + d2.finalAmount\n      },\n      timestamp: new Date().toISOString()\n    };\n  }\n  async function sendToN8n(payload) {\n    if (!N8N_WEBHOOK_URL || N8N_WEBHOOK_URL.indexOf(\"HIER_\") === 0) {\n      throw new Error(\"Die n8n-Webhook-URL ist im Code noch nicht eingetragen.\");\n    }\n    let res;\n    try {\n      res = await fetch(N8N_WEBHOOK_URL, { method:\"POST\", headers:{\"Content-Type\":\"application\/json\"}, body:JSON.stringify(payload) });\n    } catch (e) {\n      throw new Error(TXT.errNetwork);\n    }\n    if (!res.ok) throw new Error(fillPlaceholder(TXT.errSubmit, res.status));\n    return true;\n  }\n  async function goCheckoutSolo() {\n    clearErrorIn(\"sw-error-amount-solo\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-solo\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-solo\", TXT.errLang);\n    const p = state.persons.solo;\n    const finalAmount = getDiscounts(p, false).finalAmount;\n    const participationProductId = getParticipationProductId(false);\n    setCheckoutLoading(\"sw-btn-checkout-solo\", true);\n    try {\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const statusValue = buildStatusOptionValue(p, false);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: finalAmount, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-solo\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-solo\", false);\n    }\n  }\n  async function goCheckoutPaar() {\n    clearErrorIn(\"sw-error-amount-paar\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-paar\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-paar\", TXT.errLang);\n    if (!validateDetailsPaar()) return showErrorIn(\"sw-error-amount-paar\", TXT.errPaarFields);\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const participationProductId = getParticipationProductId(true);\n    setCheckoutLoading(\"sw-btn-checkout-paar\", true);\n    try {\n      const payload = buildN8nPayload();\n      await sendToN8n(payload);\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const total = getDiscounts(p1, false).finalAmount + getDiscounts(p2, true).finalAmount;\n      const statusValue = buildStatusOptionValue(p1, true);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: total, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-paar\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-paar\", false);\n    }\n  }\n  function validateLangform() {\n    const ok = !!state.commLang && !!state.form && state.form !== \"gruppe\";\n    setNextEnabled(\"sw-btn-langform-next\", ok);\n  }\n  function validateDetailsSolo() {\n    const ok = !!$(\"sw-solo-status\").value;\n    setNextEnabled(\"sw-btn-details-solo-next\", ok);\n    return ok;\n  }\n  function validateDetailsPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const emailOk = s => \/\\S+@\\S+\\.\\S+\/.test(s || \"\");\n    const ok = !!(p1.vorname && p1.vorname.trim()) && !!(p1.nachname && p1.nachname.trim()) && emailOk(p1.email) &&\n               !!(p2.vorname && p2.vorname.trim()) && !!(p2.nachname && p2.nachname.trim()) && emailOk(p2.email);\n    setNextEnabled(\"sw-btn-details-paar-next\", ok);\n    return ok;\n  }\n  function bindNameFields(key) {\n    [\"vorname\",\"nachname\",\"email\"].forEach(f => {\n      $(`sw-${key}-${f}`).addEventListener(\"input\", e => {\n        getPerson(key)[f] = e.target.value;\n        validateDetailsPaar();\n      });\n    });\n  }\n  $(\"sw-btn-welcome-next\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-country-back\").addEventListener(\"click\", () => showStep(1));\n  $(\"sw-btn-country-next\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-country-search\").addEventListener(\"input\",  e => renderCountryList(e.target.value));\n  $(\"sw-country-search\").addEventListener(\"focus\",  () => renderCountryList($(\"sw-country-search\").value));\n  shadow.addEventListener(\"click\", e => {\n    if (!e.target.closest(\"#sw-country-list\") && !e.target.closest(\"#sw-country-search\")) {\n      $(\"sw-country-list\").innerHTML = \"\";\n    }\n  });\n  $(\"sw-commLang\").addEventListener(\"change\", e => {\n    state.commLang = e.target.value;\n    validateLangform();\n    updateAppOnlyUI();\n    refreshSummary();\n  });\n  shadow.querySelectorAll(\".sw-choice-card\").forEach(card => {\n    card.addEventListener(\"click\", () => {\n      state.form = card.dataset.form;\n      shadow.querySelectorAll(\".sw-choice-card\").forEach(c => c.classList.toggle(\"active\", c === card));\n      const isGruppe = state.form === \"gruppe\";\n      $(\"sw-gruppe-note\").style.display = isGruppe ? \"block\" : \"none\";\n      $(\"sw-btn-langform-next\").style.display   = isGruppe ? \"none\" : \"inline-block\";\n      $(\"sw-btn-gruppe-redirect\").style.display = isGruppe ? \"inline-block\" : \"none\";\n      clearErrorIn(\"sw-error-langform\");\n      validateLangform();\n    });\n  });\n  $(\"sw-btn-gruppe-redirect\").addEventListener(\"click\", () => { window.location.href = getGroupRedirectUrl(); });\n  $(\"sw-btn-langform-back\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-langform-next\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-details-solo-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-solo-status\").addEventListener(\"change\", e => {\n    const val = e.target.value;\n    const person = state.persons.solo;\n    person.statusType  = val;\n    person.wiederholer = val === \"wiederholer\";\n    clearErrorIn(\"sw-error-details-solo\");\n    validateDetailsSolo();\n  });\n  $(\"sw-btn-details-solo-next\").addEventListener(\"click\", () => {\n    if (validateDetailsSolo()) { applyRangeForForm(); showStep(5); }\n    else showErrorIn(\"sw-error-details-solo\", TXT.errSelectFirst);\n  });\n  $(\"sw-btn-details-paar-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-btn-details-paar-next\").addEventListener(\"click\", () => {\n    if (validateDetailsPaar()) { applyRangeForForm(); showStep(5); }\n  });\n  $(\"sw-btn-amount-solo-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-amount-paar-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-checkout-solo\").addEventListener(\"click\", goCheckoutSolo);\n  $(\"sw-btn-checkout-paar\").addEventListener(\"click\", goCheckoutPaar);\n  bindNameFields(\"p1\");\n  bindNameFields(\"p2\");\n  wireAmountControl(\"solo\");\n  wireAmountControl(\"p1\");\n  wireAmountControl(\"p2\");\n  showStep(1);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3f05b5b e-flex e-con-boxed e-con e-parent\" data-id=\"3f05b5b\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-731f815 elementor-widget elementor-widget-html\" data-id=\"731f815\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Tinos:ital,wght@0,400;0,700;1,400&display=swap\" rel=\"stylesheet\">\n<style>\n  .ecwid-ProductBrowser,\n  .ecwid-productbrowser,\n  div[id^=\"my-store\"],\n  .ecwid:not(#sw-host-tr) {\n    visibility: hidden !important;\n    height: 0 !important;\n    max-height: 0 !important;\n    overflow: hidden !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    position: absolute !important;\n    pointer-events: none !important;\n  }\n<\/style>\n<div id=\"sw-overlay-tr\" style=\"display:none; position:fixed; inset:0; background:rgba(245,250,246,0.92); z-index:99999; flex-direction:column; align-items:center; justify-content:center; gap:20px;\">\n  <div style=\"width:52px; height:52px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:sw-spin-tr 0.8s linear infinite;\"><\/div>\n  <div style=\"font-family:'Tinos',Georgia,serif; font-size:22px; color:#27703F;\">\u00d6deme y\u00fckleniyor\u2026<\/div>\n<\/div>\n<style>\n  @keyframes sw-spin-tr { to { transform: rotate(360deg); } }\n<\/style>\n<div id=\"sw-host-tr\"><\/div>\n<script>\n(function () {\n  \/\/ \u2500\u2500 Sprach-Guard: Skript bricht sofort ab, wenn die URL nicht zu TR passt \u2500\u2500\n  const _pathMatch = window.location.pathname.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n  const _pageLang = _pathMatch ? _pathMatch[1] : \"de\";\n  if (_pageLang !== \"tr\") { \n    document.getElementById(\"sw-host-tr\")?.remove();\n    document.getElementById(\"sw-overlay-tr\")?.remove();\n    return; \n  }\n  const OVERLAY_ID    = \"sw-overlay-tr\";\n  const SHOP_CART_URL = \"https:\/\/spiritual-activity.org\/tr\/store\/cart\";\n  const N8N_WEBHOOK_URL = \"https:\/\/n8n.spiritual-activity.org\/webhook\/registration-be\";\n  function getGroupRedirectUrl() {\n    const path = window.location.pathname;\n    \/\/ Erkennt Sprachpraefixe wie \/en\/, \/es\/, \/it\/, \/ru\/ am Anfang des Pfads.\n    \/\/ Deutsch ist die Standardsprache ohne Praefix.\n    const match = path.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n    const langPrefix = (match && match[1] !== \"de\") ? \"\/\" + match[1] : \"\";\n    return \"https:\/\/spiritual-activity.org\" + langPrefix + \"\/gruppen-anmeldung\";\n  }\n  const PRODUCTS = {\n    cat1: 864374030,\n    cat2: 844860366,\n    cat3: 844907264,\n    cat4: 844907265\n  };\n\n  \/\/ Versandfreie Digital-Produkte fuer alle Faelle, in denen nichts verschickt\n  \/\/ wird: rein digitale Teilnahme und Wiederholer (kein neues Kartenset).\n  const PRODUCTS_APPONLY = {\n    cat1: 863272251,\n    cat2: 863265753,\n    cat3: 863272252,\n    cat4: 863265754\n  };\n  const RANGES = {\n    cat1: { min: 160, max: 800 },\n    cat2: { min: 105, max: 700 },\n    cat3: { min:  75, max: 600 },\n    cat4: { min:  45, max: 500 }\n  };\n  const ORIENTIERUNG = {\n    cat1: { reduced: 160, base: 360, support: 580 },\n    cat2: { reduced: 105, base: 240, support: 460 },\n    cat3: { reduced:  75, base: 160, support: 340 },\n    cat4: { reduced:  45, base: 105, support: 220 }\n  };\n  const DISCOUNT_WIEDERHOLER = 0.30;\n  const DISCOUNT_SCHUELER    = 0.50;\n  const DISCOUNT_STUDENT     = 0.25;\n  const DISCOUNT_PAAR_P2     = 0.50;\n  const DISCOUNT_APP_FIXED   = 35;\n  \/\/ Versandpauschale ausserhalb EU+CH. Ecwid kassiert sie, der Wizard rechnet sie in die Anzeige-Summe ein.\n  const SHIPPING_COST   = 15;\n  \/\/ Sprachschluessel bleiben deutsch \u2013 sie sind die Werte im Ecwid-Shop.\n  const APP_ONLY_LANGS = new Set([\"Arabisch\",\"Farsi\",\"Ukrainisch\",\"Bulgarisch\",\"Franz\u00f6sisch\"]);\n  const APP_ONLY_CATEGORY_EXCEPTION_LANG = { CN: \"Chinesisch\" };\n  const EU_PLUS_CH = new Set([\n    \"AT\",\"BE\",\"BG\",\"CY\",\"CZ\",\"DE\",\"DK\",\"EE\",\"ES\",\"FI\",\"FR\",\"GR\",\"HR\",\n    \"HU\",\"IE\",\"IT\",\"LT\",\"LU\",\"LV\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SE\",\"SI\",\"SK\",\"CH\"\n  ]);\n  \/\/ Ersetzt den Platzhalter in Klammern (z.B. [Code], [X], [\ucf54\ub4dc]) durch den Wert\n  function fillPlaceholder(text, value) {\n    return String(text).replace(\/[\\[\uff3b][^\\]\uff3d]*[\\]\uff3d]\/, value);\n  }\n  function needsShipping(countryCode) {\n    return countryCode && !EU_PLUS_CH.has(countryCode);\n  }\n  \/\/ \u2500\u2500 Uebersetzte Texte \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const TXT = {\n      \"catBadge\": \"Kat. \",\n      \"catLabels\": {\n          \"cat1\": \"Fiyat kategorisi 1\",\n          \"cat2\": \"Fiyat kategorisi 2\",\n          \"cat3\": \"Fiyat kategorisi 3\",\n          \"cat4\": \"Fiyat kategorisi 4\"\n      },\n      \"catSuffixDigital\": \"\u2013 Sadece dijital kat\u0131l\u0131m m\u00fcmk\u00fcn\",\n      \"catSuffixException\": \"\u2013 Kargo yaln\u0131zca {X} kat\u0131l\u0131m dilinde m\u00fcmk\u00fcnd\u00fcr, aksi h\u00e2lde sadece dijital kat\u0131l\u0131m\",\n      \"noCountry\": \"\u00dclke bulunamad\u0131\",\n      \"markerReduced\": \"\u0130ndirimli katk\u0131 pay\u0131\",\n      \"markerBase\": \"Standart katk\u0131 pay\u0131\",\n      \"markerSupport\": \"Destek katk\u0131s\u0131\",\n      \"hintLong\": \"Burada sizin i\u00e7in uygun olan katk\u0131 pay\u0131n\u0131 se\u00e7ebilirsiniz. Bir destek katk\u0131s\u0131yla, s\u0131n\u0131rl\u0131 mali imkanlara sahip insanlar\u0131n kat\u0131lmas\u0131n\u0131 sa\u011flar ve projeyi d\u00fcnyaya ta\u015f\u0131mam\u0131za yard\u0131mc\u0131 olursunuz.\",\n      \"hintPaar\": \"Her ki\u015fi kendi katk\u0131 pay\u0131n\u0131 se\u00e7er. 2. Ki\u015fi otomatik olarak %50 indirim al\u0131r.\",\n      \"person1\": \"Ki\u015fi 1\",\n      \"person2\": \"Ki\u015fi 2\",\n      \"p2Badge\": \"(\u2212%50)\",\n      \"discWiederholer\": \"Tekrarlayan kat\u0131l\u0131mc\u0131\",\n      \"discSchueler\": \"\u00d6\u011frenci\",\n      \"discStudent\": \"E\u011fitim\/\u00fcniversite\",\n      \"discP2\": \"2. Ki\u015fi indirimi\",\n      \"discApp\": \"Dijital kat\u0131l\u0131m\",\n      \"reasonRegion\": \"Kargo hizmeti b\u00f6lgenizde m\u00fcmk\u00fcn de\u011fil. Dijital olarak kat\u0131l\u0131yorsunuz. \u0130ndirim otomatik olarak \u00f6zette dikkate al\u0131nacakt\u0131r.\",\n      \"reasonRussian\": \"Rusya d\u0131\u015f\u0131ndaki Rus\u00e7a konu\u015fanlar i\u00e7in sadece dijital bir s\u00fcr\u00fcm mevcuttur. \u0130ndirim otomatik olarak \u00f6zette dikkate al\u0131nacakt\u0131r.\",\n      \"reasonLanguage\": \"Bu dilde sadece dijital bir s\u00fcr\u00fcm mevcuttur. \u0130ndirim otomatik olarak \u00f6zette dikkate al\u0131nacakt\u0131r.\",\n      \"reasonException\": \"B\u00f6lgenizde kargo yaln\u0131zca {X} kat\u0131l\u0131m dilinde m\u00fcmk\u00fcnd\u00fcr. Dijital olarak kat\u0131l\u0131yorsunuz. \u0130ndirim otomatik olarak \u00f6zette dikkate al\u0131nacakt\u0131r.\",\n      \"thanksTitle\": \"\u00c7ok te\u015fekk\u00fcr ederiz!\",\n      \"thanksLine1\": \"\u00d6deme y\u00fckleniyor\u2026\",\n      \"thanksLine2\": \"Birazdan y\u00f6nlendirileceksiniz\u2026\",\n      \"preparing\": \"Haz\u0131rlan\u0131yor\u2026\",\n      \"errSelectFirst\": \"L\u00fctfen \u00f6nce bir se\u00e7im yap\u0131n.\",\n      \"errPaarFields\": \"L\u00fctfen geri d\u00f6n\u00fcn ve her iki ki\u015fi i\u00e7in t\u00fcm alanlar\u0131 doldurun.\",\n      \"errCountry\": \"L\u00fctfen \u00f6nce bir \u00fclke se\u00e7in.\",\n      \"errLang\": \"L\u00fctfen bir kat\u0131l\u0131m dili se\u00e7in.\",\n      \"errNetwork\": \"Veriler g\u00f6nderilemedi. L\u00fctfen internet ba\u011flant\u0131n\u0131z\u0131 kontrol edin.\",\n      \"errSubmit\": \"G\u00f6nderim ba\u015far\u0131s\u0131z oldu (hata [Kod]). L\u00fctfen tekrar deneyin.\",\n      \"errProduct\": \"\u00dcr\u00fcn eklenemedi\",\n      \"errEcwid\": \"Ecwid Cart API [X] saniye sonra kullan\u0131lam\u0131yor.\"\n  };\n  \/\/ Anzeigename der Teilnahmesprache (Schluessel = Ecwid-Wert, deutsch)\n  const LANG_DISPLAY = {\n      \"Deutsch\": \"Almanca\",\n      \"Englisch\": \"\u0130ngilizce\",\n      \"Spanisch\": \"\u0130spanyolca\",\n      \"Franz\u00f6sisch\": \"Frans\u0131zca\",\n      \"Italienisch\": \"\u0130talyanca\",\n      \"Portugiesisch\": \"Portekizce\",\n      \"Arabisch\": \"Arap\u00e7a\",\n      \"Hebr\u00e4isch\": \"\u0130branice\",\n      \"Farsi\": \"Fars\u00e7a\",\n      \"Georgisch\": \"G\u00fcrc\u00fcce\",\n      \"Ukrainisch\": \"Ukraynaca\",\n      \"Niederl\u00e4ndisch\": \"Felemenk\u00e7e\",\n      \"T\u00fcrkisch\": \"T\u00fcrk\u00e7e\",\n      \"Russisch\": \"Rus\u00e7a\",\n      \"Chinesisch\": \"\u00c7ince\",\n      \"Japanisch\": \"Japonca\",\n      \"Koreanisch\": \"Korece\"\n  };\n  \/\/ Feste Laendernamen in der Landessprache (aus CLDR), damit die Liste in\n  \/\/ jedem Browser identisch ist \u2013 unabhaengig von der Intl-Datenlage.\n  const COUNTRY_NAMES = {\n      \"AD\": \"Andorra\",\n      \"AE\": \"Birle\u015fik Arap Emirlikleri\",\n      \"AF\": \"Afganistan\",\n      \"AG\": \"Antigua ve Barbuda\",\n      \"AL\": \"Arnavutluk\",\n      \"AM\": \"Ermenistan\",\n      \"AO\": \"Angola\",\n      \"AR\": \"Arjantin\",\n      \"AT\": \"Avusturya\",\n      \"AU\": \"Avustralya\",\n      \"AW\": \"Aruba\",\n      \"AZ\": \"Azerbaycan\",\n      \"BA\": \"Bosna-Hersek\",\n      \"BB\": \"Barbados\",\n      \"BD\": \"Banglade\u015f\",\n      \"BE\": \"Bel\u00e7ika\",\n      \"BF\": \"Burkina Faso\",\n      \"BG\": \"Bulgaristan\",\n      \"BH\": \"Bahreyn\",\n      \"BI\": \"Burundi\",\n      \"BJ\": \"Benin\",\n      \"BN\": \"Brunei\",\n      \"BO\": \"Bolivya\",\n      \"BR\": \"Brezilya\",\n      \"BS\": \"Bahamalar\",\n      \"BT\": \"Butan\",\n      \"BW\": \"Botsvana\",\n      \"BY\": \"Belarus\",\n      \"BZ\": \"Belize\",\n      \"CA\": \"Kanada\",\n      \"CD\": \"Kongo - Kin\u015fasa\",\n      \"CF\": \"Orta Afrika Cumhuriyeti\",\n      \"CG\": \"Kongo - Brazavil\",\n      \"CH\": \"\u0130svi\u00e7re\",\n      \"CI\": \"C\u00f4te d\u2019Ivoire\",\n      \"CL\": \"\u015eili\",\n      \"CM\": \"Kamerun\",\n      \"CN\": \"\u00c7in\",\n      \"CO\": \"Kolombiya\",\n      \"CR\": \"Kosta Rika\",\n      \"CV\": \"Cabo Verde\",\n      \"CY\": \"K\u0131br\u0131s\",\n      \"CZ\": \"\u00c7ekya\",\n      \"DE\": \"Almanya\",\n      \"DJ\": \"Cibuti\",\n      \"DK\": \"Danimarka\",\n      \"DM\": \"Dominika\",\n      \"DO\": \"Dominik Cumhuriyeti\",\n      \"DZ\": \"Cezayir\",\n      \"EC\": \"Ekvador\",\n      \"EE\": \"Estonya\",\n      \"EG\": \"M\u0131s\u0131r\",\n      \"ES\": \"\u0130spanya\",\n      \"ET\": \"Etiyopya\",\n      \"FI\": \"Finlandiya\",\n      \"FJ\": \"Fiji\",\n      \"FM\": \"Mikronezya\",\n      \"FR\": \"Fransa\",\n      \"GA\": \"Gabon\",\n      \"GB\": \"Birle\u015fik Krall\u0131k\",\n      \"GB-SCT\": \"\u0130sko\u00e7ya\",\n      \"GD\": \"Grenada\",\n      \"GE\": \"G\u00fcrcistan\",\n      \"GH\": \"Gana\",\n      \"GM\": \"Gambiya\",\n      \"GN\": \"Gine\",\n      \"GQ\": \"Ekvator Ginesi\",\n      \"GR\": \"Yunanistan\",\n      \"GT\": \"Guatemala\",\n      \"GW\": \"Gine-Bissau\",\n      \"GY\": \"Guyana\",\n      \"HK\": \"Hong Kong\",\n      \"HN\": \"Honduras\",\n      \"HR\": \"H\u0131rvatistan\",\n      \"HT\": \"Haiti\",\n      \"HU\": \"Macaristan\",\n      \"ID\": \"Endonezya\",\n      \"IE\": \"\u0130rlanda\",\n      \"IL\": \"\u0130srail\",\n      \"IN\": \"Hindistan\",\n      \"IQ\": \"Irak\",\n      \"IR\": \"\u0130ran\",\n      \"IS\": \"\u0130zlanda\",\n      \"IT\": \"\u0130talya\",\n      \"JM\": \"Jamaika\",\n      \"JO\": \"\u00dcrd\u00fcn\",\n      \"JP\": \"Japonya\",\n      \"KE\": \"Kenya\",\n      \"KG\": \"K\u0131rg\u0131zistan\",\n      \"KH\": \"Kambo\u00e7ya\",\n      \"KI\": \"Kiribati\",\n      \"KM\": \"Komorlar\",\n      \"KN\": \"Saint Kitts ve Nevis\",\n      \"KR\": \"G\u00fcney Kore\",\n      \"KW\": \"Kuveyt\",\n      \"KZ\": \"Kazakistan\",\n      \"LA\": \"Laos\",\n      \"LB\": \"L\u00fcbnan\",\n      \"LC\": \"Saint Lucia\",\n      \"LI\": \"Liechtenstein\",\n      \"LK\": \"Sri Lanka\",\n      \"LR\": \"Liberya\",\n      \"LS\": \"Lesotho\",\n      \"LT\": \"Litvanya\",\n      \"LU\": \"L\u00fcksemburg\",\n      \"LV\": \"Letonya\",\n      \"LY\": \"Libya\",\n      \"MA\": \"Fas\",\n      \"MD\": \"Moldova\",\n      \"ME\": \"Karada\u011f\",\n      \"MG\": \"Madagaskar\",\n      \"MH\": \"Marshall Adalar\u0131\",\n      \"MK\": \"Kuzey Makedonya\",\n      \"ML\": \"Mali\",\n      \"MM\": \"Myanmar (Burma)\",\n      \"MN\": \"Mo\u011folistan\",\n      \"MO\": \"Makao\",\n      \"MR\": \"Moritanya\",\n      \"MT\": \"Malta\",\n      \"MU\": \"Mauritius\",\n      \"MV\": \"Maldivler\",\n      \"MW\": \"Malavi\",\n      \"MX\": \"Meksika\",\n      \"MY\": \"Malezya\",\n      \"MZ\": \"Mozambik\",\n      \"NA\": \"Namibya\",\n      \"NE\": \"Nijer\",\n      \"NG\": \"Nijerya\",\n      \"NI\": \"Nikaragua\",\n      \"NL\": \"Hollanda\",\n      \"NO\": \"Norve\u00e7\",\n      \"NP\": \"Nepal\",\n      \"NR\": \"Nauru\",\n      \"NZ\": \"Yeni Zelanda\",\n      \"OM\": \"Umman\",\n      \"PA\": \"Panama\",\n      \"PE\": \"Peru\",\n      \"PG\": \"Papua Yeni Gine\",\n      \"PH\": \"Filipinler\",\n      \"PK\": \"Pakistan\",\n      \"PL\": \"Polonya\",\n      \"PR\": \"Porto Riko\",\n      \"PS\": \"Filistin B\u00f6lgeleri\",\n      \"PT\": \"Portekiz\",\n      \"PW\": \"Palau\",\n      \"PY\": \"Paraguay\",\n      \"QA\": \"Katar\",\n      \"RO\": \"Romanya\",\n      \"RS\": \"S\u0131rbistan\",\n      \"RU\": \"Rusya\",\n      \"RW\": \"Ruanda\",\n      \"SA\": \"Suudi Arabistan\",\n      \"SB\": \"Solomon Adalar\u0131\",\n      \"SC\": \"Sey\u015feller\",\n      \"SD\": \"Sudan\",\n      \"SE\": \"\u0130sve\u00e7\",\n      \"SG\": \"Singapur\",\n      \"SI\": \"Slovenya\",\n      \"SK\": \"Slovakya\",\n      \"SL\": \"Sierra Leone\",\n      \"SM\": \"San Marino\",\n      \"SN\": \"Senegal\",\n      \"SO\": \"Somali\",\n      \"SR\": \"Surinam\",\n      \"SS\": \"G\u00fcney Sudan\",\n      \"ST\": \"Sao Tome ve Principe\",\n      \"SV\": \"El Salvador\",\n      \"SZ\": \"Esvatini\",\n      \"TD\": \"\u00c7ad\",\n      \"TG\": \"Togo\",\n      \"TH\": \"Tayland\",\n      \"TJ\": \"Tacikistan\",\n      \"TL\": \"Timor-Leste\",\n      \"TM\": \"T\u00fcrkmenistan\",\n      \"TN\": \"Tunus\",\n      \"TO\": \"Tonga\",\n      \"TR\": \"T\u00fcrkiye\",\n      \"TT\": \"Trinidad ve Tobago\",\n      \"TV\": \"Tuvalu\",\n      \"TW\": \"Tayvan\",\n      \"TZ\": \"Tanzanya\",\n      \"UA\": \"Ukrayna\",\n      \"UG\": \"Uganda\",\n      \"US\": \"Amerika Birle\u015fik Devletleri\",\n      \"UY\": \"Uruguay\",\n      \"UZ\": \"\u00d6zbekistan\",\n      \"VC\": \"Saint Vincent ve Grenadinler\",\n      \"VE\": \"Venezuela\",\n      \"VN\": \"Vietnam\",\n      \"VU\": \"Vanuatu\",\n      \"WS\": \"Samoa\",\n      \"XK\": \"Kosova\",\n      \"YE\": \"Yemen\",\n      \"ZA\": \"G\u00fcney Afrika\",\n      \"ZM\": \"Zambiya\",\n      \"ZW\": \"Zimbabve\"\n  };\n  \/\/ \u2500\u2500 Zusaetzliche Suchbegriffe (Aliasse) je Land \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Beeinflusst NUR die Suche, nicht den angezeigten Namen. Alles klein schreiben.\n  const COUNTRY_SEARCH_ALIASES = {\n      \"US\": [\"amerika birlesik devletleri\", \"amerika\", \"abd\", \"usa\", \"united states\", \"united states of america\", \"america\"],\n      \"GB\": [\"birlesik krallik\", \"ingiltere\", \"buyuk britanya\", \"uk\", \"united kingdom\", \"england\", \"great britain\", \"britain\"],\n      \"GB-SCT\": [\"iskocya\", \"scotland\"],\n      \"AE\": [\"birlesik arap emirlikleri\", \"emirlikler\", \"bae\", \"dubai\", \"uae\", \"united arab emirates\", \"emirates\"],\n      \"KR\": [\"guney kore\", \"kore\", \"korea\", \"south korea\"],\n      \"NL\": [\"hollanda\", \"netherlands\", \"holland\"],\n      \"CH\": [\"isvicre\", \"switzerland\", \"schweiz\"],\n      \"DE\": [\"almanya\", \"germany\", \"deutschland\"],\n      \"AT\": [\"avusturya\", \"austria\"],\n      \"CZ\": [\"cekya\", \"cek cumhuriyeti\", \"czechia\", \"czech republic\"],\n      \"TR\": [\"turkiye\", \"turkey\", \"t\u00fcrkiye\"],\n      \"CI\": [\"fildisi sahili\", \"cote d'ivoire\", \"ivory coast\"],\n      \"MM\": [\"myanmar\", \"burma\", \"birmanya\"],\n      \"TL\": [\"dogu timor\", \"timor-leste\", \"east timor\"],\n      \"SZ\": [\"esvatini\", \"svaziland\", \"eswatini\", \"swaziland\"],\n      \"MK\": [\"kuzey makedonya\", \"makedonya\", \"macedonia\", \"north macedonia\"],\n      \"BY\": [\"belarus\", \"beyaz rusya\"],\n      \"MD\": [\"moldova\"],\n      \"MA\": [\"fas\", \"morocco\"],\n      \"EG\": [\"misir\", \"egypt\"],\n      \"GR\": [\"yunanistan\", \"greece\"],\n      \"IT\": [\"italya\", \"italy\"],\n      \"ES\": [\"ispanya\", \"spain\"],\n      \"FR\": [\"fransa\", \"france\"],\n      \"PL\": [\"polonya\", \"poland\"],\n      \"RU\": [\"rusya\", \"russia\", \"russian federation\"],\n      \"CN\": [\"cin\", \"china\"],\n      \"JP\": [\"japonya\", \"japan\"],\n      \"IN\": [\"hindistan\", \"india\"],\n      \"BR\": [\"brezilya\", \"brazil\"],\n      \"MX\": [\"meksika\", \"mexico\"],\n      \"CA\": [\"kanada\", \"canada\"],\n      \"AU\": [\"avustralya\", \"australia\"],\n      \"NZ\": [\"yeni zelanda\", \"new zealand\"],\n      \"ZA\": [\"guney afrika\", \"south africa\"],\n      \"SE\": [\"isvec\", \"sweden\"],\n      \"NO\": [\"norvec\", \"norway\"],\n      \"DK\": [\"danimarka\", \"denmark\"],\n      \"CY\": [\"kibris\", \"cyprus\"],\n      \"AZ\": [\"azerbaycan\", \"azerbaijan\"],\n      \"BG\": [\"bulgaristan\", \"bulgaria\"],\n      \"GE\": [\"gurcistan\", \"georgia\"],\n      \"IR\": [\"iran\", \"persia\"],\n      \"IQ\": [\"irak\", \"iraq\"],\n      \"SA\": [\"suudi arabistan\", \"saudi arabia\"],\n      \"KP\": [\"north korea\"],\n      \"CV\": [\"cabo verde\", \"cape verde\"],\n      \"CD\": [\"dr congo\", \"drc\", \"congo kinshasa\"],\n      \"CG\": [\"congo brazzaville\"],\n      \"VA\": [\"vatican\", \"holy see\"],\n      \"LA\": [\"laos\"],\n      \"VN\": [\"vietnam\", \"viet nam\"],\n      \"MO\": [\"macau\", \"macao\"],\n      \"HK\": [\"hong kong\"],\n      \"TW\": [\"taiwan\"]\n  };\n  const COUNTRIES = {\n    cat1: [\"CY\",\"CA\",\"FR\",\"FI\",\"BH\",\"AU\",\"AD\",\"SE\",\"DE\",\"SA\",\"AT\",\"BE\",\"HK\",\"MT\",\"IS\",\"SM\",\"NL\",\"DK\",\"TW\",\"AE\",\"US\",\"BN\",\"CH\",\"NO\",\"GY\",\"QA\",\"MO\",\"IE\",\"LU\",\"SG\",\"LI\",\"GB\",\"GB-SCT\"],\n    cat2: [\"KR\",\"ME\",\"CL\",\"TT\",\"MV\",\"UY\",\"BS\",\"OM\",\"SC\",\"MY\",\"PA\",\"TR\",\"LV\",\"GR\",\"KZ\",\"SK\",\"HU\",\"RU\",\"RO\",\"EE\",\"AW\",\"PT\",\"PR\",\"HR\",\"KW\",\"JP\",\"NZ\",\"PL\",\"IL\",\"ES\",\"LT\",\"SI\",\"CZ\",\"IT\"],\n    cat3: [\"BZ\",\"TN\",\"GT\",\"IQ\",\"ZA\",\"FJ\",\"EC\",\"LY\",\"ID\",\"VN\",\"BT\",\"DZ\",\"PE\",\"PW\",\"BW\",\"DM\",\"PY\",\"MD\",\"GQ\",\"MN\",\"VC\",\"IR\",\"GD\",\"EG\",\"CO\",\"SR\",\"TM\",\"BA\",\"BB\",\"BR\",\"AL\",\"AM\",\"GA\",\"MX\",\"AZ\",\"TH\",\"LC\",\"CN\",\"MK\",\"DO\",\"AG\",\"AR\",\"GE\",\"CR\",\"MU\",\"RS\",\"BY\",\"KN\",\"XK\",\"BG\"],\n    cat4: [\"UA\",\"BI\",\"SS\",\"CF\",\"YE\",\"MZ\",\"MW\",\"SO\",\"CD\",\"LR\",\"MG\",\"NE\",\"AF\",\"SD\",\"SB\",\"ML\",\"HT\",\"VU\",\"BF\",\"LS\",\"TD\",\"GW\",\"TG\",\"GM\",\"KI\",\"SL\",\"PG\",\"UG\",\"KM\",\"PS\",\"RW\",\"TZ\",\"ET\",\"ZM\",\"FM\",\"BJ\",\"GN\",\"TL\",\"MM\",\"SN\",\"CM\",\"TJ\",\"TV\",\"NP\",\"CG\",\"ST\",\"PK\",\"KE\",\"ZW\",\"MH\",\"HN\",\"TO\",\"CI\",\"WS\",\"GH\",\"VE\",\"KH\",\"MR\",\"KG\",\"NI\",\"NG\",\"DJ\",\"AO\",\"LA\",\"BD\",\"BO\",\"MA\",\"JO\",\"LB\",\"NR\",\"IN\",\"NA\",\"CV\",\"UZ\",\"PH\",\"SZ\",\"JM\",\"SV\",\"LK\"]\n  };\n  \/\/ \u2500\u2500 Ecwid-Optionsnamen und -werte: bleiben exakt deutsch wie im Shop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const OPT_COMM_LANG = \"In welcher Sprache nimmst Du teil?\";\n  const OPT_STATUS    = \"Trifft etwas davon auf Dich zu?\";\n  const STATUS_LABEL = {\n    paar:        \"Zu zweit (gleicher Haushalt)\",\n    schueler:    \"Sch\u00fcler:innen\",\n    student:     \"Student\",\n    wiederholer: \"Wiederholer\",\n    apponly:     \"Digitale Teilnahme (App)\"\n  };\n  \/\/ \u2500\u2500 Shadow DOM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const host = document.getElementById(\"sw-host-tr\");\n  const shadow = host.attachShadow({ mode: \"open\" });\n  const styleEl = document.createElement(\"style\");\n  styleEl.textContent = `\n    :host {\n      display: block;\n      --bg:           #F5FAF6;\n      --card:         #FFFFFF;\n      --ink:          #0C1E14;\n      --ink-muted:    #27703F;\n      --accent:       #0C1E14;\n      --accent-light: #E6F2E8;\n      --border:       #C8E0CE;\n      --radius:       16px;\n      --radius-sm:    10px;\n    }\n    @keyframes wiz-spin { to { transform: rotate(360deg); } }\n    .sw-root {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 20px; font-weight: 400; color: var(--ink);\n      background: var(--bg); padding: 32px 20px;\n      display: flex; align-items: flex-start; justify-content: center;\n    }\n    .sw-card {\n      background: var(--card); border: 1px solid var(--border);\n      border-radius: 24px; padding: 36px 32px;\n      width: 100%; max-width: 780px;\n      box-shadow: 0 4px 24px rgba(12,30,20,0.08); box-sizing: border-box;\n    }\n    @media (max-width: 480px) {\n      .sw-root { padding: 16px 10px; }\n      .sw-card { padding: 24px 16px; border-radius: 16px; }\n    }\n    .sw-progress { display: flex; gap: 8px; margin-bottom: 32px; }\n    .sw-progress-step { flex: 1; height: 4px; background: var(--border); border-radius: 999px; transition: background 0.35s; }\n    .sw-progress-step.active { background: var(--accent); }\n    .sw-progress-step.done   { background: var(--accent); opacity: 0.4; }\n    .sw-step-label { font-size: 12px; font-weight: 400; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: 10px; }\n    .sw-heading { font-size: 26px; font-weight: 500; line-height: 1.2; margin: 0 0 6px; color: var(--accent); letter-spacing: 0.01em; }\n    .sw-subtext { font-size: 18px; font-weight: 400; color: var(--ink-muted); margin: 0 0 28px; line-height: 1.6; }\n    .sw-label { display: block; font-size: 18px; font-weight: 700; margin-bottom: 6px; color: var(--ink); }\n    .sw-select, .sw-text-input {\n      width: 100%; padding: 13px 15px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg);\n      font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-select {\n      appearance: none;\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2327703F' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: right 15px center;\n      cursor: pointer;\n    }\n    .sw-select:focus, .sw-text-input:focus {\n      outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1);\n    }\n    .sw-text-input { margin-bottom: 14px; }\n    .sw-redirect { display: none; margin-top: 12px; padding: 18px 20px; border-radius: var(--radius-sm); background: #FFF8F0; border: 1px solid rgba(180,80,0,0.2); font-size: 17px; line-height: 1.8; color: var(--ink); }\n    .sw-redirect strong { display: block; margin-bottom: 8px; font-size: 17px; color: #7A3500; }\n    .sw-redirect a { color: #27703F; text-decoration: underline; }\n    .sw-infobox {\n      margin-top: 12px; padding: 15px 17px; border-radius: var(--radius-sm);\n      background: var(--accent-light); border: 1px solid rgba(12,30,20,0.15);\n      font-size: 18px; font-weight: 400; line-height: 1.5;\n    }\n    .sw-infobox-title {\n      font-weight: 700; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase;\n      color: var(--accent); margin-bottom: 3px;\n    }\n    .sw-divider { border: 0; border-top: 1px solid var(--border); margin: 30px 0 24px; }\n    .sw-choice-row { display: flex; gap: 10px; flex-wrap: wrap; }\n    .sw-choice-card {\n      flex: 1; min-width: 150px; padding: 16px 14px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      text-align: center; cursor: pointer; font-size: 17px; line-height: 1.3;\n      transition: all 0.15s; background: var(--bg); box-sizing: border-box;\n    }\n    .sw-choice-card:hover { border-color: var(--accent); }\n    .sw-choice-card.active { background: var(--accent-light); border-color: var(--accent); font-weight: 700; color: var(--accent); }\n    @media (max-width: 480px) { .sw-choice-card { min-width: 100%; } }\n    .sw-person-block { margin-bottom: 8px; }\n    .sw-person-title { font-weight: 700; font-size: 21px; color: var(--accent); margin-bottom: 16px; }\n    .sw-field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 0; }\n    @media (max-width: 480px) { .sw-field-grid { grid-template-columns: 1fr; } }\n    .sw-range-header { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 22px; }\n    .sw-range-header-label { font-weight: 700; font-size: 18px; }\n    .sw-amount-display { display: flex; align-items: baseline; gap: 3px; }\n    .sw-amount-display span { font-size: 18px; font-weight: 400; }\n    .sw-amount-input {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 36px; font-weight: 700; color: var(--ink);\n      border: 2px solid var(--border); background: var(--bg);\n      text-align: right; width: 132px; padding: 4px 12px;\n      outline: none; border-radius: var(--radius-sm);\n      transition: background 0.15s, color 0.15s, border-color 0.15s, box-shadow 0.15s;\n    }\n    .sw-amount-input:hover { border-color: var(--accent); background: var(--accent-light); }\n    .sw-amount-input:focus { border-color: var(--accent); background: var(--accent-light); color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    input[type=range].sw-range {\n      -webkit-appearance: none; width: 100%; height: 6px;\n      border-radius: 999px; background: var(--border); outline: none; cursor: pointer;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb {\n      -webkit-appearance: none; width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35);\n      cursor: pointer; transition: transform 0.15s, box-shadow 0.15s;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb:hover { transform: scale(1.08); box-shadow: 0 0 0 9px rgba(12,30,20,0.18), 0 3px 12px rgba(12,30,20,0.4); }\n    input[type=range].sw-range::-webkit-slider-thumb:active { transform: scale(1.12); }\n    input[type=range].sw-range::-moz-range-thumb {\n      width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      border: none; box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); cursor: pointer;\n    }\n    input[type=range].sw-range.sw-pulse::-webkit-slider-thumb { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    input[type=range].sw-range.sw-pulse::-moz-range-thumb    { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    @keyframes sw-thumb-pulse {\n      0%, 100% { box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); }\n      50%      { box-shadow: 0 0 0 15px rgba(12,30,20,0.05), 0 3px 10px rgba(12,30,20,0.35); }\n    }\n    .sw-range-wrap { position: relative; }\n    .sw-markers { position: relative; height: 56px; margin-bottom: 8px; margin-left: 18px; margin-right: 18px; }\n    .sw-marker {\n      position: absolute; transform: translateX(-50%);\n      display: flex; flex-direction: column; align-items: center; gap: 2px;\n      justify-content: flex-end; height: 100%; pointer-events: auto; cursor: pointer;\n    }\n    .sw-marker-tick { width: 1px; height: 10px; background: var(--border); flex-shrink: 0; }\n    .sw-marker.active .sw-marker-tick { background: var(--accent); opacity: 0.5; }\n    .sw-marker-label { font-size: 11px; font-weight: 400; color: var(--ink-muted); white-space: nowrap; line-height: 1.2; text-align: center; order: -2; }\n    .sw-marker-amount { font-size: 13px; font-weight: 700; color: var(--ink-muted); order: -1; }\n    .sw-marker.active .sw-marker-label, .sw-marker.active .sw-marker-amount { color: var(--accent); }\n    @media (max-width: 540px) {\n      .sw-markers { display: none; }\n      .sw-markers-mobile { display: flex !important; }\n    }\n    .sw-markers-mobile {\n      display: none; flex-direction: column; gap: 0;\n      margin: 12px 0 4px; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden;\n    }\n    .sw-marker-mobile {\n      display: flex; align-items: center; justify-content: space-between;\n      padding: 10px 14px; cursor: pointer; border-bottom: 1px solid var(--border);\n      transition: background 0.15s; font-family: 'Tinos', Georgia, serif;\n    }\n    .sw-marker-mobile:last-child { border-bottom: 0; }\n    .sw-marker-mobile:hover { background: var(--accent-light); }\n    .sw-marker-mobile.active { background: var(--accent-light); }\n    .sw-marker-mobile-label { font-size: 15px; font-weight: 400; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-label { color: var(--accent); font-weight: 700; }\n    .sw-marker-mobile-amount { font-size: 16px; font-weight: 700; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-amount { color: var(--accent); }\n    .sw-summary-box { padding: 18px 20px; background: var(--accent-light); border: 1px solid rgba(12,30,20,0.2); border-radius: var(--radius-sm); margin-top: 20px; }\n    .sw-summary-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; font-size: 16px; color: var(--ink); }\n    .sw-summary-row.sw-summary-discount { color: #8A1F1F; }\n    .sw-summary-row.sw-summary-total { border-top: 1px solid rgba(12,30,20,0.25); margin-top: 8px; padding-top: 12px; font-weight: 700; font-size: 22px; color: var(--accent); }\n    .sw-summary-person-label { font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-muted); margin: 14px 0 2px; }\n    .sw-summary-person-label:first-child { margin-top: 0; }\n    .sw-btn-row { display: flex; gap: 10px; margin-top: 24px; flex-wrap: wrap; }\n    .sw-btn { flex: 1; min-width: 140px; padding: 15px 17px; border-radius: var(--radius-sm); font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 700; cursor: pointer; transition: all 0.2s; border: 0; }\n    .sw-btn-primary { background: var(--accent); color: #fff; }\n    .sw-btn-primary:hover { background: #27703F; transform: translateY(-1px); }\n    .sw-btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }\n    .sw-btn-secondary { background: transparent; color: var(--ink); border: 1px solid var(--border); }\n    .sw-btn-secondary:hover { background: var(--bg); }\n    .sw-error { display: none; margin-top: 15px; padding: 13px 15px; border-radius: var(--radius-sm); background: #FFF3F3; border: 1px solid rgba(220,30,30,0.2); color: #8A1F1F; font-size: 18px; font-weight: 400; line-height: 1.5; white-space: pre-wrap; }\n    .wiz-spinner { display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.4); border-top-color: #fff; border-radius: 50%; animation: wiz-spin 0.7s linear infinite; vertical-align: middle; margin-right: 8px; }\n    .sw-country-search-wrap { position: relative; margin-bottom: 10px; }\n    .sw-country-search-icon { position: absolute; left: 18px; top: 50%; transform: translateY(-50%); color: var(--ink-muted); pointer-events: none; opacity: 0.5; }\n    .sw-country-search {\n      width: 100%; padding: 13px 15px 13px 54px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg); font-family: 'Tinos', Georgia, serif;\n      font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-country-search:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    .sw-country-list { max-height: 240px; overflow-y: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }\n    .sw-country-item { padding: 11px 15px; cursor: pointer; font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; display: flex; justify-content: space-between; align-items: center; transition: background 0.15s; border-bottom: 1px solid var(--border); }\n    .sw-country-item:last-child { border-bottom: 0; }\n    .sw-country-item:hover { background: var(--accent-light); }\n    .sw-country-item.selected { background: var(--accent-light); font-weight: 700; }\n    .sw-country-item-cat { font-size: 12px; color: var(--ink-muted); background: var(--border); padding: 2px 8px; border-radius: 999px; }\n    .sw-country-empty { padding: 15px; font-size: 18px; color: var(--ink-muted); text-align: center; }\n    .sw-step { display: none; }\n    .sw-step.active { display: block; }\n  `;\n  shadow.appendChild(styleEl);\n  const wrapper = document.createElement(\"div\");\n  wrapper.innerHTML = `\n    <div class=\"sw-root\">\n      <div class=\"sw-card\">\n        <div class=\"sw-progress\">\n          <div class=\"sw-progress-step\" id=\"sw-prog-1\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-2\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-3\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-4\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-5\"><\/div>\n        <\/div>\n        <!-- STEP 1 -->\n        <div class=\"sw-step active\" id=\"sw-step-welcome\">\n          <div class=\"sw-step-label\">Ad\u0131m 1\/5<\/div>\n          <h2 class=\"sw-heading\">Ho\u015f geldiniz<\/h2>\n          <p class=\"sw-subtext\">Birka\u00e7 ad\u0131mda \u00fclke, dil, kay\u0131t t\u00fcr\u00fc ve katk\u0131 pay\u0131n\u0131 se\u00e7ersiniz \u2013 ard\u0131ndan do\u011frudan \u00f6demeye ge\u00e7ersiniz.<\/p>\n          <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-welcome-next\" style=\"width:100%;\">Fiyatlar &amp; Kay\u0131t<\/button>\n        <\/div>\n        <!-- STEP 2 -->\n        <div class=\"sw-step\" id=\"sw-step-country\">\n          <div class=\"sw-step-label\">Ad\u0131m 2\/5<\/div>\n          <h2 class=\"sw-heading\">Nerede ya\u015f\u0131yorsunuz?<\/h2>\n          <label class=\"sw-label\">\u00dclke<\/label>\n          <div class=\"sw-country-search-wrap\">\n            <svg class=\"sw-country-search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.35-4.35\"\/><\/svg>\n            <input type=\"text\" class=\"sw-country-search\" id=\"sw-country-search\" placeholder=\"\u00dclke ara\u2026\" autocomplete=\"off\">\n          <\/div>\n          <div class=\"sw-country-list\" id=\"sw-country-list\"><\/div>\n          <input type=\"hidden\" id=\"sw-country\">\n          <div class=\"sw-infobox\" id=\"sw-catInfo\">\n            <div class=\"sw-infobox-title\">Fiyat Kategorisi<\/div>\n            <div id=\"sw-catText\">L\u00fctfen \u00f6nce bir \u00fclke se\u00e7in.<\/div>\n          <\/div>\n          <div class=\"sw-redirect\" id=\"sw-redirect-russia\">\n            <strong>Rusya'dan kat\u0131lanlar i\u00e7in ayr\u0131 bir kay\u0131t sayfas\u0131 bulunmaktad\u0131r.<\/strong>\n            \u00d6deme sistemimiz Rusya'da kullan\u0131lam\u0131yor. L\u00fctfen oradan kay\u0131t olun:<br><br>\n            <a href=\"https:\/\/spiritual-activity.org\/ru\/anmeldung-basic-exercises\/\">Rus\u00e7a kay\u0131t sayfas\u0131na git<\/a>\n          <\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-country-back\">Geri<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-country-next\" disabled>\u0130leri<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 3 -->\n        <div class=\"sw-step\" id=\"sw-step-langform\">\n          <div class=\"sw-step-label\">Ad\u0131m 3\/5<\/div>\n          <h2 class=\"sw-heading\">Dil &amp; Kay\u0131t T\u00fcr\u00fc<\/h2>\n          <label class=\"sw-label\" for=\"sw-commLang\">Hangi dilde kat\u0131l\u0131yorsunuz?<\/label>\n          <select class=\"sw-select\" id=\"sw-commLang\">\n            <option value=\"\" selected disabled>L\u00fctfen se\u00e7in\u2026<\/option>\n            <option value=\"Deutsch\">Almanca<\/option>\n            <option value=\"Englisch\">\u0130ngilizce<\/option>\n            <option value=\"Spanisch\">\u0130spanyolca<\/option>\n            <option value=\"Franz\u00f6sisch\">Frans\u0131zca<\/option>\n            <option value=\"Italienisch\">\u0130talyanca<\/option>\n            <option value=\"Portugiesisch\">Portekizce<\/option>\n            <option value=\"Arabisch\">Arap\u00e7a<\/option>\n            <option value=\"Hebr\u00e4isch\">\u0130branice<\/option>\n            <option value=\"Farsi\">Fars\u00e7a<\/option>\n            <option value=\"Georgisch\">G\u00fcrc\u00fcce<\/option>\n            <option value=\"Ukrainisch\">Ukraynaca<\/option>\n            <option value=\"Niederl\u00e4ndisch\">Felemenk\u00e7e<\/option>\n            <option value=\"T\u00fcrkisch\">T\u00fcrk\u00e7e<\/option>\n            <option value=\"Bulgarisch\">Bulgarca<\/option>\n            <option value=\"Russisch\">Rus\u00e7a<\/option>\n            <option value=\"Chinesisch\">\u00c7ince<\/option>\n            <option value=\"Japanisch\">Japonca<\/option>\n            <option value=\"Koreanisch\">Korece<\/option>\n          <\/select>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note\" style=\"display:none; margin-top:14px;\">\n            <div class=\"sw-infobox-title\">D\u0130J\u0130TAL KATILIM \u00b7 \u221235\u20ac<\/div>\n            <div id=\"sw-apponly-note-text\">Dijital olarak kat\u0131l\u0131yorsunuz. \u0130ndirim otomatik olarak \u00f6zette dikkate al\u0131nacakt\u0131r.<\/div>\n          <\/div>\n          <label class=\"sw-label\" style=\"margin-top:26px;\">Nas\u0131l kay\u0131t olmak istersiniz?<\/label>\n          <div class=\"sw-choice-row\" id=\"sw-form-choices\">\n            <div class=\"sw-choice-card active\" data-form=\"einzeln\">Bireysel<\/div>\n            <div class=\"sw-choice-card\" data-form=\"paar\">\u0130kili<br><span style=\"font-size:13px; font-weight:400;\">(ayn\u0131 hanehalk\u0131)<\/span><\/div>\n            <div class=\"sw-choice-card\" data-form=\"gruppe\">Grup<br><span style=\"font-size:13px; font-weight:400;\">(4 veya daha fazla ki\u015fi)<\/span><\/div>\n          <\/div>\n          <div class=\"sw-infobox\" id=\"sw-gruppe-note\" style=\"display:none; margin-top:18px;\">\n            <div class=\"sw-infobox-title\">Grup Kayd\u0131<\/div>\n            <div>\u0130lginiz i\u00e7in te\u015fekk\u00fcr ederiz. Grup kayd\u0131n\u0131 bir sonraki sayfada yapabilirsiniz. L\u00fctfen dikkat: Grup kayd\u0131 yaln\u0131zca Almanca ve \u0130ngilizce olarak mevcuttur.<\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-langform\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-langform-back\">Geri<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-langform-next\" disabled>\u0130leri<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-gruppe-redirect\" style=\"display:none;\">Grup Kayd\u0131na Devam Et<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4A -->\n        <div class=\"sw-step\" id=\"sw-step-details-solo\">\n          <div class=\"sw-step-label\">Ad\u0131m 4\/5<\/div>\n          <h2 class=\"sw-heading\">Sizin hakk\u0131n\u0131zda birka\u00e7 bilgi<\/h2>\n          <p class=\"sw-subtext\">Bunlardan biri sizin i\u00e7in ge\u00e7erli mi? Bu, size uygun katk\u0131 pay\u0131n\u0131 \u00f6nermemize yard\u0131mc\u0131 olur.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">D\u0130J\u0130TAL KATILIM \u00b7 \u221235\u20ac<\/div>\n            <div>Dijital olarak kat\u0131l\u0131yorsunuz. \u0130ndirim otomatik olarak \u00f6zette dikkate al\u0131nacakt\u0131r.<\/div>\n          <\/div>\n          <label class=\"sw-label\">L\u00fctfen se\u00e7in<\/label>\n          <select class=\"sw-select\" id=\"sw-solo-status\">\n            <option value=\"\" disabled selected>L\u00fctfen se\u00e7in\u2026<\/option>\n            <option value=\"normal\">Normal kay\u0131t<\/option>\n            <option value=\"schueler\">\u00d6\u011frenci (\u2212%50)<\/option>\n            <option value=\"student\">E\u011fitim\/\u00fcniversite \u00f6\u011frencisi (\u2212%25)<\/option>\n            <option value=\"wiederholer\">Ruh al\u0131\u015ft\u0131rmalar\u0131yla kursu tekrarl\u0131yorum (yeni kart seti yok \u2212 %30)<\/option>\n          <\/select>\n          <div class=\"sw-error\" id=\"sw-error-details-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-solo-back\">Geri<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-solo-next\" disabled>\u0130leri<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4B -->\n        <div class=\"sw-step\" id=\"sw-step-details-paar\">\n          <div class=\"sw-step-label\">Ad\u0131m 4\/5<\/div>\n          <h2 class=\"sw-heading\">\u0130kinizle ilgili bilgiler<\/h2>\n          <p class=\"sw-subtext\">L\u00fctfen her iki ki\u015finin bilgilerini girin. \u0130kinci ki\u015fi otomatik olarak %50 indirim al\u0131r.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-paar-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">D\u0130J\u0130TAL KATILIM \u00b7 \u221235\u20ac<\/div>\n            <div>Dijital olarak kat\u0131l\u0131yorsunuz. \u0130ndirim otomatik olarak \u00f6zette dikkate al\u0131nacakt\u0131r.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">Ki\u015fi 1<\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">Ad<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-vorname\"><\/div>\n              <div><label class=\"sw-label\">Soyad<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">E-posta<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p1-email\">\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">Ki\u015fi 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u2212%50)<\/span><\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">Ad<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-vorname\"><\/div>\n              <div><label class=\"sw-label\">Soyad<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">E-posta<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p2-email\">\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-details-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-paar-back\">Geri<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-paar-next\" disabled>\u0130leri<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5A -->\n        <div class=\"sw-step\" id=\"sw-step-amount-solo\">\n          <div class=\"sw-step-label\">Ad\u0131m 5\/5<\/div>\n          <h2 class=\"sw-heading\">Katk\u0131 pay\u0131 se\u00e7in<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-solo\">Burada sizin i\u00e7in uygun olan katk\u0131 pay\u0131n\u0131 se\u00e7ebilirsiniz.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-solo\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">D\u0130J\u0130TAL KATILIM \u00b7 \u221235\u20ac<\/div>\n            <div>Dijital olarak kat\u0131l\u0131yorsunuz. \u0130ndirim otomatik olarak \u00f6zette dikkate al\u0131nacakt\u0131r.<\/div>\n          <\/div>\n          <div class=\"sw-range-header\">\n            <div class=\"sw-range-header-label\">Tutar\u0131n\u0131z<\/div>\n            <div class=\"sw-amount-display\">\n              <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-solo\" value=\"360\">\n              <span>\u20ac<\/span>\n            <\/div>\n          <\/div>\n          <div class=\"sw-range-wrap\">\n            <div class=\"sw-markers\" id=\"sw-markers-solo\"><\/div>\n            <input type=\"range\" class=\"sw-range\" id=\"sw-amount-solo\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n            <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-solo\"><\/div>\n          <\/div>\n          <p style=\"margin-top:18px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            Ek bir mali indirime ihtiyac\u0131n\u0131z varsa, bize \u015fu adresten yazabilirsiniz:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-solo\">\n            <div class=\"sw-summary-row\"><span>Se\u00e7ilen katk\u0131 pay\u0131<\/span><span id=\"sw-solo-chosen\">360\u20ac<\/span><\/div>\n            <div id=\"sw-solo-discounts\"><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-solo\" style=\"display:none;\"><span>Kargo<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>Toplam<\/span><span><span id=\"sw-solo-total\">360<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-solo-back\">Geri<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-solo\">Kay\u0131t Ol<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5B -->\n        <div class=\"sw-step\" id=\"sw-step-amount-paar\">\n          <div class=\"sw-step-label\">Ad\u0131m 5\/5<\/div>\n          <h2 class=\"sw-heading\">Katk\u0131 paylar\u0131 se\u00e7in<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-paar\">Her ki\u015fi kendi katk\u0131 pay\u0131n\u0131 se\u00e7er. 2. Ki\u015fi otomatik olarak %50 indirim al\u0131r.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-paar\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">D\u0130J\u0130TAL KATILIM \u00b7 \u221235\u20ac<\/div>\n            <div>Dijital olarak kat\u0131l\u0131yorsunuz. \u0130ndirim otomatik olarak \u00f6zette dikkate al\u0131nacakt\u0131r.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p1-title\">Ki\u015fi 1<\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">Katk\u0131 pay\u0131<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p1\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p1\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p1\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p1\"><\/div>\n            <\/div>\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p2-title\">Ki\u015fi 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u2212%50)<\/span><\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">Katk\u0131 pay\u0131<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p2\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p2\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p2\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p2\"><\/div>\n            <\/div>\n          <\/div>\n          <p style=\"margin-top:8px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            Ek bir mali indirime ihtiyac\u0131n\u0131z varsa, bize \u015fu adresten yazabilirsiniz:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-paar\">\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p1-label\">Ki\u015fi 1<\/div>\n            <div class=\"sw-summary-row\"><span>Se\u00e7ilen katk\u0131 pay\u0131<\/span><span id=\"sw-p1-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p1-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>Ara toplam<\/span><span id=\"sw-p1-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p2-label\">Ki\u015fi 2<\/div>\n            <div class=\"sw-summary-row\"><span>Se\u00e7ilen katk\u0131 pay\u0131<\/span><span id=\"sw-p2-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p2-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>Ara toplam<\/span><span id=\"sw-p2-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-paar\" style=\"display:none;\"><span>Kargo<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>Toplam<\/span><span><span id=\"sw-paar-total\">0<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-paar-back\">Geri<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-paar\">\u00d6demeye Ge\u00e7<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  `;\n  shadow.appendChild(wrapper);\n  const $ = (id) => shadow.getElementById(id);\n  const COUNTRY_TO_CAT = {};\n  Object.keys(COUNTRIES).forEach(cat => COUNTRIES[cat].forEach(code => COUNTRY_TO_CAT[code] = cat));\n  function getCountryName(code) {\n    if (COUNTRY_NAMES[code]) return COUNTRY_NAMES[code];\n    try { return new Intl.DisplayNames([\"tr\"], { type: \"region\" }).of(code) || code; }\n    catch { return code; }\n  }\n  \/\/ Vereinheitlicht Suchtext: klein, ohne Diakritika (\u0130\/\u0131\/\u015f\/\u011f\/\u00e7\/\u00f6\/\u00fc -> i\/i\/s\/g\/c\/o\/u)\n  function normalizeSearch(s) {\n    return String(s || \"\")\n      .replace(\/\u0130\/g, \"I\").replace(\/\u0131\/g, \"i\")\n      .toLowerCase()\n      .normalize(\"NFD\").replace(\/[\\u0300-\\u036f]\/g, \"\")\n      .replace(\/\u015f\/g, \"s\").replace(\/\u011f\/g, \"g\");\n  }\n  function getCountryAliases(code) {\n    const list = [];\n    \/\/ Intl-Name als Fallback, falls er vom festen CLDR-Namen abweicht\n    if (COUNTRY_NAMES[code]) {\n      try {\n        const intlName = new Intl.DisplayNames([\"tr\"], { type: \"region\" }).of(code);\n        if (intlName && intlName !== COUNTRY_NAMES[code]) list.push(normalizeSearch(intlName));\n      } catch {}\n    }\n    \/\/ Englischer Name als zusaetzliche Schreibweise\n    try {\n      const enName = new Intl.DisplayNames([\"en\"], { type: \"region\" }).of(code);\n      if (enName) list.push(normalizeSearch(enName));\n    } catch {}\n    (COUNTRY_SEARCH_ALIASES[code] || []).forEach(a => list.push(normalizeSearch(a)));\n    return list;\n  }\n  function getAllCountriesSorted() {\n    const all = [];\n    [\"cat1\",\"cat2\",\"cat3\",\"cat4\"].forEach(cat => {\n      COUNTRIES[cat]\n        .map(code => ({ code, name: getCountryName(code), cat, aliases: getCountryAliases(code) }))\n        .sort((a, b) => a.name.localeCompare(b.name, \"tr\"))\n        .forEach(c => all.push(c));\n    });\n    return all;\n  }\n  function emptyPerson() {\n    return { vorname: \"\", nachname: \"\", email: \"\", wiederholer: false, statusType: \"\", amount: 0 };\n  }\n  const state = {\n    country: \"\", category: \"cat1\",\n    commLang: \"\", form: \"einzeln\",\n    persons: { solo: emptyPerson(), p1: emptyPerson(), p2: emptyPerson() }\n  };\n  function getPerson(key) { return state.persons[key] || state.persons.solo; }\n  function isAppOnly() {\n    const { category: cat, commLang: lang, country } = state;\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[country];\n      \/\/ Ausnahme (z.B. China) gilt nur, wenn auch die passende Sprache gewaehlt ist \u2013\n      \/\/ sonst kann kein physisches Kartenset verschickt werden.\n      if (!exceptionLang || lang !== exceptionLang) return true;\n    }\n    if (APP_ONLY_LANGS.has(lang)) return true;\n    if (lang === \"Russisch\" && country && country !== \"RU\") return true;\n    return false;\n  }\n\n  function isWiederholer(person) {\n    return !!person && (person.wiederholer || person.statusType === \"wiederholer\");\n  }\n\n  \/\/ Geht ueberhaupt ein Kartenset raus? Nur wenn die Teilnahme nicht rein digital\n  \/\/ ist UND mindestens eine Person ein neues Set braucht - Wiederholer bekommen\n  \/\/ keins. Steuert sowohl die Versandzeile in der Zusammenfassung als auch die\n  \/\/ Wahl des Ecwid-Produkts, damit beide nicht auseinanderlaufen koennen.\n  function hasPhysicalShipment(isPaar) {\n    if (isAppOnly()) return false;\n    return isPaar\n      ? !(isWiederholer(state.persons.p1) && isWiederholer(state.persons.p2))\n      : !isWiederholer(state.persons.solo);\n  }\n\n  \/\/ Ecwid haengt den Versand am Produkt fest, nicht am Warenkorb. Ohne physischen\n  \/\/ Versand muss deshalb das versandfreie Digital-Produkt in den Warenkorb, sonst\n  \/\/ schlaegt der Shop trotzdem Versandkosten auf.\n  function getParticipationProductId(isPaar) {\n    return hasPhysicalShipment(isPaar) ? PRODUCTS[state.category] : PRODUCTS_APPONLY[state.category];\n  }\n  function updateAppOnlyUI() {\n    const appOnly = state.commLang ? isAppOnly() : false;\n    let reason = \"\";\n    if (appOnly) {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[state.country];\n      if ((state.category === \"cat3\" || state.category === \"cat4\") && exceptionLang) {\n        reason = TXT.reasonException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang);\n      } else if (state.category === \"cat3\" || state.category === \"cat4\") {\n        reason = TXT.reasonRegion;\n      } else if (state.commLang === \"Russisch\") {\n        reason = TXT.reasonRussian;\n      } else {\n        reason = TXT.reasonLanguage;\n      }\n    }\n    const noteIds = [\"sw-apponly-note\",\"sw-apponly-note-step4\",\"sw-apponly-note-paar-step4\",\"sw-apponly-note-step5-solo\",\"sw-apponly-note-step5-paar\"];\n    noteIds.forEach(id => {\n      const el = $(id);\n      if (!el) return;\n      el.style.display = appOnly ? \"block\" : \"none\";\n      const textDiv = el.querySelector(\"div:not(.sw-infobox-title)\");\n      if (textDiv && reason) textDiv.textContent = reason;\n    });\n  }\n  const STEP_CONTAINER = {\n    1: () => \"sw-step-welcome\",\n    2: () => \"sw-step-country\",\n    3: () => \"sw-step-langform\",\n    4: () => state.form === \"paar\" ? \"sw-step-details-paar\" : \"sw-step-details-solo\",\n    5: () => state.form === \"paar\" ? \"sw-step-amount-paar\" : \"sw-step-amount-solo\"\n  };\n  function showStep(n) {\n    shadow.querySelectorAll(\".sw-step\").forEach(el => el.classList.remove(\"active\"));\n    $(STEP_CONTAINER[n]()).classList.add(\"active\");\n    for (let i = 1; i <= 5; i++) {\n      const prog = $(\"sw-prog-\" + i);\n      if (!prog) continue;\n      if (i < n) prog.className = \"sw-progress-step done\";\n      else if (i === n) prog.className = \"sw-progress-step active\";\n      else prog.className = \"sw-progress-step\";\n    }\n    if (n === 5) {\n      const sliderIds = state.form === \"paar\" ? [\"sw-amount-p1\",\"sw-amount-p2\"] : [\"sw-amount-solo\"];\n      sliderIds.forEach(sid => { const el = $(sid); if (el) el.classList.add(\"sw-pulse\"); });\n      refreshSummary();\n    }\n  }\n  function setNextEnabled(id, enabled) {\n    const b = $(id);\n    if (!b) return;\n    b.disabled = !enabled;\n    b.style.opacity = enabled ? \"1\" : \".4\";\n    b.style.cursor  = enabled ? \"pointer\" : \"not-allowed\";\n  }\n  function showErrorIn(id, msg) { const el=$(id); el.style.display=\"block\"; el.textContent=msg; }\n  function clearErrorIn(id)     { const el=$(id); el.style.display=\"none\";  el.textContent=\"\"; }\n  function setCheckoutLoading(btnId, loading) {\n    const btn = $(btnId);\n    \/\/ Nach dem Danke-Bildschirm existiert der Button nicht mehr \u2013 dann nichts tun.\n    if (!btn) return;\n    const overlay = document.getElementById(OVERLAY_ID);\n    if (!btn.dataset.defaultLabel) btn.dataset.defaultLabel = btn.textContent;\n    if (loading) {\n      btn.disabled = true;\n      btn.innerHTML = '<span class=\"wiz-spinner\"><\/span> ' + TXT.preparing;\n      btn.style.opacity = \".8\";\n      if (overlay) overlay.style.display = \"flex\";\n    } else {\n      btn.disabled = false;\n      btn.textContent = btn.dataset.defaultLabel;\n      btn.style.opacity = \"1\";\n      if (overlay) overlay.style.display = \"none\";\n    }\n  }\n  function showThankYou() {\n    const card = shadow.querySelector(\".sw-card\");\n    if (!card) return;\n    card.innerHTML = `\n      <div style=\"text-align:center; padding:20px 0;\">\n        <div style=\"font-size:56px; margin-bottom:16px; color:#27703F;\">\u2713<\/div>\n        <h2 style=\"font-family:'Tinos',Georgia,serif; font-size:26px; font-weight:500; margin:0 0 12px; color:#0C1E14;\">${TXT.thanksTitle}<\/h2>\n        <p style=\"font-family:'Tinos',Georgia,serif; font-size:18px; color:#27703F; line-height:1.6; margin:0 0 24px;\">${TXT.thanksLine1}${TXT.thanksLine2 ? \"<br>\" + TXT.thanksLine2 : \"\"}<\/p>\n        <div style=\"display:flex; justify-content:center;\">\n          <div style=\"width:36px; height:36px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:wiz-spin 0.8s linear infinite;\"><\/div>\n        <\/div>\n      <\/div>`;\n  }\n  function getAnchors(cat) {\n    const r = RANGES[cat], o = ORIENTIERUNG[cat];\n    return [[0,r.min],[25,o.reduced],[50,o.base],[75,o.support],[100,r.max]];\n  }\n  function normToEuro(norm, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      if (norm <= a[i+1][0]) {\n        const t = (norm - a[i][0]) \/ (a[i+1][0] - a[i][0]);\n        return Math.round(a[i][1] + t * (a[i+1][1] - a[i][1]));\n      }\n    }\n    return a[a.length-1][1];\n  }\n  function euroToNorm(euro, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      const lo = a[i][1], hi = a[i+1][1];\n      if (euro <= hi) {\n        if (hi === lo) return a[i+1][0];\n        return a[i][0] + (euro - lo) \/ (hi - lo) * (a[i+1][0] - a[i][0]);\n      }\n    }\n    return 100;\n  }\n  function getMarkerDefs(cat) {\n    const o = ORIENTIERUNG[cat];\n    return [\n      { value: o.reduced, label: TXT.markerReduced, normPct: 25 },\n      { value: o.base,    label: TXT.markerBase,    normPct: 50 },\n      { value: o.support, label: TXT.markerSupport, normPct: 75 }\n    ];\n  }\n  function renderMarkers(personKey) {\n    const cat = state.category;\n    const person = getPerson(personKey);\n    const markers = getMarkerDefs(cat);\n    const container = $(`sw-markers-${personKey}`);\n    container.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker\" + (person.amount === m.value ? \" active\" : \"\");\n      div.style.left = m.normPct + \"%\";\n      div.innerHTML = `<div class=\"sw-marker-tick\"><\/div><div class=\"sw-marker-amount\">${m.value}\u20ac<\/div><div class=\"sw-marker-label\">${m.label}<\/div>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      container.appendChild(div);\n    });\n    const mobileContainer = $(`sw-markers-mobile-${personKey}`);\n    mobileContainer.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker-mobile\" + (person.amount === m.value ? \" active\" : \"\");\n      div.innerHTML = `<span class=\"sw-marker-mobile-label\">${m.label}<\/span><span class=\"sw-marker-mobile-amount\">${m.value}\u20ac<\/span>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      mobileContainer.appendChild(div);\n    });\n  }\n  function selectMarkerValue(personKey, value) {\n    const person = getPerson(personKey);\n    $(`sw-amount-${personKey}`).value = euroToNorm(value, state.category);\n    person.amount = value;\n    $(`sw-amountInput-${personKey}`).value = value;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromSlider(personKey) {\n    const person = getPerson(personKey);\n    const norm = Number($(`sw-amount-${personKey}`).value);\n    person.amount = normToEuro(norm, state.category);\n    $(`sw-amountInput-${personKey}`).value = person.amount;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromInput(personKey) {\n    const person = getPerson(personKey);\n    const r = RANGES[state.category];\n    let val = Number($(`sw-amountInput-${personKey}`).value);\n    if (isNaN(val)) val = r.min;\n    val = Math.min(r.max, Math.max(r.min, val));\n    person.amount = val;\n    $(`sw-amountInput-${personKey}`).value = val;\n    $(`sw-amount-${personKey}`).value = euroToNorm(val, state.category);\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function wireAmountControl(personKey) {\n    $(`sw-amount-${personKey}`).addEventListener(\"input\", () => updateAmountFromSlider(personKey));\n    $(`sw-amountInput-${personKey}`).addEventListener(\"input\", () => {\n      const v = Number($(`sw-amountInput-${personKey}`).value);\n      if (!isNaN(v)) { getPerson(personKey).amount = v; refreshSummary(); }\n    });\n    $(`sw-amountInput-${personKey}`).addEventListener(\"change\", () => updateAmountFromInput(personKey));\n  }\n  function applyRangeForForm() {\n    const cat = state.category;\n    const ori = ORIENTIERUNG[cat];\n    const hint = TXT.hintLong;\n    if (state.form === \"paar\") {\n      [\"p1\",\"p2\"].forEach(key => {\n        const person = getPerson(key);\n        person.amount = ori.base;\n        $(`sw-amount-${key}`).value = 50;\n        $(`sw-amountInput-${key}`).value = ori.base;\n      });\n      const p1name = state.persons.p1.vorname;\n      const p2name = state.persons.p2.vorname;\n      $(\"sw-amount-p1-title\").innerHTML = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-amount-p2-title\").innerHTML = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) +\n        ' <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">' + TXT.p2Badge + '<\/span>';\n      $(\"sw-summary-p1-label\").textContent = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-summary-p2-label\").textContent = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) + \" \" + TXT.p2Badge;\n      $(\"sw-rangeHint-paar\").textContent = hint;\n      renderMarkers(\"p1\"); renderMarkers(\"p2\");\n    } else {\n      const person = state.persons.solo;\n      person.amount = ori.base;\n      $(\"sw-amount-solo\").value = 50;\n      $(\"sw-amountInput-solo\").value = ori.base;\n      $(\"sw-rangeHint-solo\").textContent = hint;\n      renderMarkers(\"solo\");\n    }\n    refreshSummary();\n  }\n  \/\/ \u2500\u2500 Rabattlogik \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Zuerst wird der fixe App-Rabatt vom gewaehlten Betrag abgezogen, danach der\n  \/\/ prozentuale Rabatt auf den verbleibenden Betrag. Beide werden separat gezeigt.\n  function getPercentDiscountCandidate(person, isPaarP2) {\n    if (isPaarP2) return { value: DISCOUNT_PAAR_P2, label: TXT.discP2 };\n    const candidates = [];\n    if (isWiederholer(person)) candidates.push({ value: DISCOUNT_WIEDERHOLER, label: TXT.discWiederholer });\n    if (person.statusType === \"schueler\") candidates.push({ value: DISCOUNT_SCHUELER, label: TXT.discSchueler });\n    if (person.statusType === \"student\")  candidates.push({ value: DISCOUNT_STUDENT,  label: TXT.discStudent });\n    if (!candidates.length) return null;\n    return candidates.reduce((best, c) => c.value > best.value ? c : best, candidates[0]);\n  }\n  function getDiscounts(person, isPaarP2) {\n    const discounts = [];\n    let remaining = Math.round(person.amount);\n    if (isAppOnly()) {\n      const appDisc = Math.min(DISCOUNT_APP_FIXED, remaining);\n      discounts.push({ type: \"fixed\", value: DISCOUNT_APP_FIXED, label: TXT.discApp, amountEuro: appDisc });\n      remaining -= appDisc;\n    }\n    const pct = getPercentDiscountCandidate(person, isPaarP2);\n    if (pct) {\n      const pctDisc = Math.round(remaining * pct.value);\n      discounts.push({ type: \"pct\", value: pct.value, label: pct.label, amountEuro: pctDisc });\n      remaining -= pctDisc;\n    }\n    return { discounts, finalAmount: Math.max(0, remaining) };\n  }\n  function buildStatusOptionValue(person, isPaar) {\n    const vals = [];\n    if (isPaar) vals.push(STATUS_LABEL.paar);\n    if (isAppOnly()) vals.push(STATUS_LABEL.apponly);\n    if (isWiederholer(person)) vals.push(STATUS_LABEL.wiederholer);\n    if (person.statusType === \"schueler\") vals.push(STATUS_LABEL.schueler);\n    if (person.statusType === \"student\")  vals.push(STATUS_LABEL.student);\n    \/\/ Ecwid erwartet fuer Checkbox-Optionen ein Array, nicht einen kommaseparierten String\n    return vals;\n  }\n  function refreshSummary() {\n    if (state.form === \"paar\") refreshSummaryPaar();\n    else refreshSummarySolo();\n  }\n  function renderDiscountRows(containerId, discounts) {\n    const container = $(containerId);\n    container.innerHTML = \"\";\n    discounts.forEach(d => {\n      const row = document.createElement(\"div\");\n      row.className = \"sw-summary-row sw-summary-discount\";\n      const pctStr = d.type === \"fixed\" ? `\u2212${d.amountEuro}\u20ac` : `\u2212${Math.round(d.value * 100)}%`;\n      row.innerHTML = `<span>${d.label} (${pctStr})<\/span><span>\u2212${d.amountEuro}\u20ac<\/span>`;\n      container.appendChild(row);\n    });\n  }\n  function refreshSummarySolo() {\n    const p = state.persons.solo;\n    const { discounts, finalAmount } = getDiscounts(p, false);\n    $(\"sw-solo-chosen\").textContent = Math.round(p.amount) + \"\u20ac\";\n    renderDiscountRows(\"sw-solo-discounts\", discounts);\n    const shipLine = $(\"sw-shipping-line-solo\");\n    const shippingSolo = (hasPhysicalShipment(false) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingSolo ? \"flex\" : \"none\";\n    $(\"sw-solo-total\").textContent = finalAmount + shippingSolo;\n  }\n  function refreshSummaryPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    function fill(prefix, person, isPaarP2) {\n      const { discounts, finalAmount } = getDiscounts(person, isPaarP2);\n      $(`sw-${prefix}-chosen`).textContent = Math.round(person.amount) + \"\u20ac\";\n      renderDiscountRows(`sw-${prefix}-discounts`, discounts);\n      $(`sw-${prefix}-subtotal`).textContent = finalAmount + \"\u20ac\";\n      return finalAmount;\n    }\n    const f1 = fill(\"p1\", p1, false);\n    const f2 = fill(\"p2\", p2, true);\n    const shipLine = $(\"sw-shipping-line-paar\");\n    const shippingPaar = (hasPhysicalShipment(true) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingPaar ? \"flex\" : \"none\";\n    $(\"sw-paar-total\").textContent = f1 + f2 + shippingPaar;\n  }\n  function renderCountryList(filter) {\n    const list = $(\"sw-country-list\");\n    const q = normalizeSearch(filter).trim();\n    const filtered = q\n      ? getAllCountriesSorted().filter(c =>\n          normalizeSearch(c.name).includes(q) ||\n          (c.aliases || []).some(a => a.includes(q))\n        )\n      : getAllCountriesSorted();\n    list.innerHTML = \"\";\n    if (!filtered.length) { list.innerHTML = '<div class=\"sw-country-empty\">' + TXT.noCountry + '<\/div>'; return; }\n    filtered.forEach(c => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-country-item\" + (state.country === c.code ? \" selected\" : \"\");\n      div.dataset.code = c.code;\n      div.innerHTML = `<span>${c.name}<\/span><span class=\"sw-country-item-cat\">${TXT.catBadge}${c.cat.replace(\"cat\",\"\")}<\/span>`;\n      div.addEventListener(\"click\", () => selectCountry(c.code, c.cat, c.name));\n      list.appendChild(div);\n    });\n  }\n  function selectCountry(code, cat, name) {\n    state.country  = code;\n    state.category = cat;\n    $(\"sw-country\").value = code;\n    $(\"sw-country-search\").value = name;\n    $(\"sw-country-list\").innerHTML = \"\";\n    const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[code];\n    let suffix = \"\";\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      suffix = exceptionLang\n        ? \" \" + TXT.catSuffixException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang)\n        : \" \" + TXT.catSuffixDigital;\n    }\n    $(\"sw-catText\").textContent = (TXT.catLabels[cat] || cat) + suffix;\n    \/\/ Ecwid wickelt in Russland keine Zahlungen ab. Wer Russland waehlt, wird\n    \/\/ deshalb auf die russische Anmeldeseite verwiesen - die laeuft ueber n8n\n    \/\/ und Tochka statt ueber den Shop. Der russische Wizard verweist umgekehrt\n    \/\/ zurueck, sobald dort ein anderes Land gewaehlt wird.\n    const nachRussland = (code === \"RU\");\n    $(\"sw-redirect-russia\").style.display = nachRussland ? \"block\" : \"none\";\n    $(\"sw-catInfo\").style.display         = nachRussland ? \"none\"  : \"block\";\n    setNextEnabled(\"sw-btn-country-next\", !nachRussland);\n    updateAppOnlyUI();\n  }\n  function ensureEcwidReady(timeoutMs = 12000) {\n    return new Promise((resolve, reject) => {\n      function isReady() {\n        return window.Ecwid && window.Ecwid.Cart &&\n               typeof window.Ecwid.Cart.addProduct === \"function\" &&\n               typeof window.Ecwid.Cart.clear === \"function\";\n      }\n      if (isReady()) return resolve(true);\n      let resolved = false;\n      function done() { if (!resolved) { resolved = true; setTimeout(() => resolve(true), 200); } }\n      if (window.Ecwid) { try { window.Ecwid.OnAPILoaded.add(done); } catch(e) {} }\n      const start = Date.now();\n      const t = setInterval(() => {\n        if (isReady()) { clearInterval(t); done(); }\n        else if (Date.now() - start > timeoutMs) {\n          clearInterval(t);\n          if (!resolved) { resolved = true; reject(new Error(fillPlaceholder(TXT.errEcwid, timeoutMs\/1000))); }\n        }\n      }, 200);\n    });\n  }\n  function clearCartAsync() { return new Promise(r => Ecwid.Cart.clear(() => r(true))); }\n  function addProductAsync(payload, timeoutMs = 4000) {\n    return new Promise((resolve, reject) => {\n      let done = false;\n      const t = setTimeout(() => { if (!done) { done = true; resolve({ product:null, cart:null, timedOut:true }); } }, timeoutMs);\n      Ecwid.Cart.addProduct(payload, function(success, product, cart, error) {\n        if (done) return;\n        done = true; clearTimeout(t);\n        if (success) resolve({ product, cart, timedOut:false });\n        else reject(new Error((error || TXT.errProduct) + \" | Payload: \" + JSON.stringify(payload)));\n      });\n    });\n  }\n  function goToCart() { window.location.href = SHOP_CART_URL; }\n  function buildN8nPayload() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const d1 = getDiscounts(p1, false);\n    const d2 = getDiscounts(p2, true);\n    return {\n      sprache: state.commLang, land: state.country, kategorie: state.category, appOnly: isAppOnly(),\n      person1: { vorname: p1.vorname, nachname: p1.nachname, email: p1.email },\n      person2: { vorname: p2.vorname, nachname: p2.nachname, email: p2.email },\n      betraege: {\n        person1: { gewaehlt: Math.round(p1.amount), rabatte: d1.discounts, endbetrag: d1.finalAmount },\n        person2: { gewaehlt: Math.round(p2.amount), rabatte: d2.discounts, endbetrag: d2.finalAmount },\n        gesamt: d1.finalAmount + d2.finalAmount\n      },\n      timestamp: new Date().toISOString()\n    };\n  }\n  async function sendToN8n(payload) {\n    if (!N8N_WEBHOOK_URL || N8N_WEBHOOK_URL.indexOf(\"HIER_\") === 0) {\n      throw new Error(\"Die n8n-Webhook-URL ist im Code noch nicht eingetragen.\");\n    }\n    let res;\n    try {\n      res = await fetch(N8N_WEBHOOK_URL, { method:\"POST\", headers:{\"Content-Type\":\"application\/json\"}, body:JSON.stringify(payload) });\n    } catch (e) {\n      throw new Error(TXT.errNetwork);\n    }\n    if (!res.ok) throw new Error(fillPlaceholder(TXT.errSubmit, res.status));\n    return true;\n  }\n  async function goCheckoutSolo() {\n    clearErrorIn(\"sw-error-amount-solo\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-solo\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-solo\", TXT.errLang);\n    const p = state.persons.solo;\n    const finalAmount = getDiscounts(p, false).finalAmount;\n    const participationProductId = getParticipationProductId(false);\n    setCheckoutLoading(\"sw-btn-checkout-solo\", true);\n    try {\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const statusValue = buildStatusOptionValue(p, false);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: finalAmount, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-solo\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-solo\", false);\n    }\n  }\n  async function goCheckoutPaar() {\n    clearErrorIn(\"sw-error-amount-paar\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-paar\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-paar\", TXT.errLang);\n    if (!validateDetailsPaar()) return showErrorIn(\"sw-error-amount-paar\", TXT.errPaarFields);\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const participationProductId = getParticipationProductId(true);\n    setCheckoutLoading(\"sw-btn-checkout-paar\", true);\n    try {\n      const payload = buildN8nPayload();\n      await sendToN8n(payload);\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const total = getDiscounts(p1, false).finalAmount + getDiscounts(p2, true).finalAmount;\n      const statusValue = buildStatusOptionValue(p1, true);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: total, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-paar\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-paar\", false);\n    }\n  }\n  function validateLangform() {\n    const ok = !!state.commLang && !!state.form && state.form !== \"gruppe\";\n    setNextEnabled(\"sw-btn-langform-next\", ok);\n  }\n  function validateDetailsSolo() {\n    const ok = !!$(\"sw-solo-status\").value;\n    setNextEnabled(\"sw-btn-details-solo-next\", ok);\n    return ok;\n  }\n  function validateDetailsPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const emailOk = s => \/\\S+@\\S+\\.\\S+\/.test(s || \"\");\n    const ok = !!(p1.vorname && p1.vorname.trim()) && !!(p1.nachname && p1.nachname.trim()) && emailOk(p1.email) &&\n               !!(p2.vorname && p2.vorname.trim()) && !!(p2.nachname && p2.nachname.trim()) && emailOk(p2.email);\n    setNextEnabled(\"sw-btn-details-paar-next\", ok);\n    return ok;\n  }\n  function bindNameFields(key) {\n    [\"vorname\",\"nachname\",\"email\"].forEach(f => {\n      $(`sw-${key}-${f}`).addEventListener(\"input\", e => {\n        getPerson(key)[f] = e.target.value;\n        validateDetailsPaar();\n      });\n    });\n  }\n  $(\"sw-btn-welcome-next\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-country-back\").addEventListener(\"click\", () => showStep(1));\n  $(\"sw-btn-country-next\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-country-search\").addEventListener(\"input\",  e => renderCountryList(e.target.value));\n  $(\"sw-country-search\").addEventListener(\"focus\",  () => renderCountryList($(\"sw-country-search\").value));\n  shadow.addEventListener(\"click\", e => {\n    if (!e.target.closest(\"#sw-country-list\") && !e.target.closest(\"#sw-country-search\")) {\n      $(\"sw-country-list\").innerHTML = \"\";\n    }\n  });\n  $(\"sw-commLang\").addEventListener(\"change\", e => {\n    state.commLang = e.target.value;\n    validateLangform();\n    updateAppOnlyUI();\n    refreshSummary();\n  });\n  shadow.querySelectorAll(\".sw-choice-card\").forEach(card => {\n    card.addEventListener(\"click\", () => {\n      state.form = card.dataset.form;\n      shadow.querySelectorAll(\".sw-choice-card\").forEach(c => c.classList.toggle(\"active\", c === card));\n      const isGruppe = state.form === \"gruppe\";\n      $(\"sw-gruppe-note\").style.display = isGruppe ? \"block\" : \"none\";\n      $(\"sw-btn-langform-next\").style.display   = isGruppe ? \"none\" : \"inline-block\";\n      $(\"sw-btn-gruppe-redirect\").style.display = isGruppe ? \"inline-block\" : \"none\";\n      clearErrorIn(\"sw-error-langform\");\n      validateLangform();\n    });\n  });\n  $(\"sw-btn-gruppe-redirect\").addEventListener(\"click\", () => { window.location.href = getGroupRedirectUrl(); });\n  $(\"sw-btn-langform-back\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-langform-next\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-details-solo-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-solo-status\").addEventListener(\"change\", e => {\n    const val = e.target.value;\n    const person = state.persons.solo;\n    person.statusType  = val;\n    person.wiederholer = val === \"wiederholer\";\n    clearErrorIn(\"sw-error-details-solo\");\n    validateDetailsSolo();\n  });\n  $(\"sw-btn-details-solo-next\").addEventListener(\"click\", () => {\n    if (validateDetailsSolo()) { applyRangeForForm(); showStep(5); }\n    else showErrorIn(\"sw-error-details-solo\", TXT.errSelectFirst);\n  });\n  $(\"sw-btn-details-paar-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-btn-details-paar-next\").addEventListener(\"click\", () => {\n    if (validateDetailsPaar()) { applyRangeForForm(); showStep(5); }\n  });\n  $(\"sw-btn-amount-solo-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-amount-paar-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-checkout-solo\").addEventListener(\"click\", goCheckoutSolo);\n  $(\"sw-btn-checkout-paar\").addEventListener(\"click\", goCheckoutPaar);\n  bindNameFields(\"p1\");\n  bindNameFields(\"p2\");\n  wireAmountControl(\"solo\");\n  wireAmountControl(\"p1\");\n  wireAmountControl(\"p2\");\n  showStep(1);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-895997c e-flex e-con-boxed e-con e-parent\" data-id=\"895997c\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b455611 elementor-widget elementor-widget-html\" data-id=\"b455611\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Tinos:ital,wght@0,400;0,700;1,400&display=swap\" rel=\"stylesheet\">\n<style>\n  .ecwid-ProductBrowser,\n  .ecwid-productbrowser,\n  div[id^=\"my-store\"],\n  .ecwid:not(#sw-host-ka) {\n    visibility: hidden !important;\n    height: 0 !important;\n    max-height: 0 !important;\n    overflow: hidden !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    position: absolute !important;\n    pointer-events: none !important;\n  }\n<\/style>\n<div id=\"sw-overlay-ka\" style=\"display:none; position:fixed; inset:0; background:rgba(245,250,246,0.92); z-index:99999; flex-direction:column; align-items:center; justify-content:center; gap:20px;\">\n  <div style=\"width:52px; height:52px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:sw-spin-ka 0.8s linear infinite;\"><\/div>\n  <div style=\"font-family:'Tinos',Georgia,serif; font-size:22px; color:#27703F;\">\u10d8\u10e2\u10d5\u10d8\u10e0\u10d7\u10d4\u10d1\u10d0 \u10d2\u10d0\u10d3\u10d0\u10ee\u10d3\u10d8\u10e1 \u10d2\u10d5\u10d4\u10e0\u10d3\u10d8\u2026<\/div>\n<\/div>\n<style>\n  @keyframes sw-spin-ka { to { transform: rotate(360deg); } }\n<\/style>\n<div id=\"sw-host-ka\"><\/div>\n<script>\n(function () {\n\n  \/\/ \u2500\u2500 Sprach-Guard: Skript bricht sofort ab, wenn die URL nicht zu KA passt \u2500\u2500\n  const _pathMatch = window.location.pathname.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n  const _pageLang = _pathMatch ? _pathMatch[1] : \"de\";\n  if (_pageLang !== \"ka\") { \n    document.getElementById(\"sw-host-ka\")?.remove();\n    document.getElementById(\"sw-overlay-ka\")?.remove();\n    return; \n  }\n\n  const OVERLAY_ID    = \"sw-overlay-ka\";\n  const SHOP_CART_URL = \"https:\/\/spiritual-activity.org\/ka\/store\/cart\";\n  const N8N_WEBHOOK_URL = \"https:\/\/n8n.spiritual-activity.org\/webhook\/registration-be\";\n  function getGroupRedirectUrl() {\n    const path = window.location.pathname;\n    \/\/ Erkennt Sprachpraefixe wie \/en\/, \/es\/, \/it\/, \/ru\/ am Anfang des Pfads.\n    \/\/ Deutsch ist die Standardsprache ohne Praefix.\n    const match = path.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n    const langPrefix = (match && match[1] !== \"de\") ? \"\/\" + match[1] : \"\";\n    return \"https:\/\/spiritual-activity.org\" + langPrefix + \"\/gruppen-anmeldung\";\n  }\n  const PRODUCTS = {\n    cat1: 864374030,\n    cat2: 844860366,\n    cat3: 844907264,\n    cat4: 844907265\n  };\n\n  \/\/ Versandfreie Digital-Produkte fuer alle Faelle, in denen nichts verschickt\n  \/\/ wird: rein digitale Teilnahme und Wiederholer (kein neues Kartenset).\n  const PRODUCTS_APPONLY = {\n    cat1: 863272251,\n    cat2: 863265753,\n    cat3: 863272252,\n    cat4: 863265754\n  };\n  const RANGES = {\n    cat1: { min: 160, max: 800 },\n    cat2: { min: 105, max: 700 },\n    cat3: { min:  75, max: 600 },\n    cat4: { min:  45, max: 500 }\n  };\n  const ORIENTIERUNG = {\n    cat1: { reduced: 160, base: 360, support: 580 },\n    cat2: { reduced: 105, base: 240, support: 460 },\n    cat3: { reduced:  75, base: 160, support: 340 },\n    cat4: { reduced:  45, base: 105, support: 220 }\n  };\n  const DISCOUNT_WIEDERHOLER = 0.30;\n  const DISCOUNT_SCHUELER    = 0.50;\n  const DISCOUNT_STUDENT     = 0.25;\n  const DISCOUNT_PAAR_P2     = 0.50;\n  const DISCOUNT_APP_FIXED   = 35;\n  \/\/ Versandpauschale ausserhalb EU+CH. Ecwid kassiert sie, der Wizard rechnet sie in die Anzeige-Summe ein.\n  const SHIPPING_COST   = 15;\n  \/\/ Sprachschluessel bleiben deutsch \u2013 sie sind die Werte im Ecwid-Shop.\n  const APP_ONLY_LANGS = new Set([\"Arabisch\",\"Farsi\",\"Ukrainisch\",\"Bulgarisch\",\"Franz\u00f6sisch\"]);\n  const APP_ONLY_CATEGORY_EXCEPTION_LANG = { CN: \"Chinesisch\" };\n  const EU_PLUS_CH = new Set([\n    \"AT\",\"BE\",\"BG\",\"CY\",\"CZ\",\"DE\",\"DK\",\"EE\",\"ES\",\"FI\",\"FR\",\"GR\",\"HR\",\n    \"HU\",\"IE\",\"IT\",\"LT\",\"LU\",\"LV\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SE\",\"SI\",\"SK\",\"CH\"\n  ]);\n  \/\/ Ersetzt den Platzhalter in Klammern (z.B. [Code], [X], [\ucf54\ub4dc]) durch den Wert\n  function fillPlaceholder(text, value) {\n    return String(text).replace(\/[\\[\uff3b][^\\]\uff3d]*[\\]\uff3d]\/, value);\n  }\n  function needsShipping(countryCode) {\n    return countryCode && !EU_PLUS_CH.has(countryCode);\n  }\n  \/\/ \u2500\u2500 Uebersetzte Texte \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const TXT = {\n      \"catBadge\": \"\u10d9\u10d0\u10e2. \",\n      \"catLabels\": {\n          \"cat1\": \"\u10e4\u10d0\u10e1\u10d8\u10e1 \u10d9\u10d0\u10e2\u10d4\u10d2\u10dd\u10e0\u10d8\u10d0 1\",\n          \"cat2\": \"\u10e4\u10d0\u10e1\u10d8\u10e1 \u10d9\u10d0\u10e2\u10d4\u10d2\u10dd\u10e0\u10d8\u10d0 2\",\n          \"cat3\": \"\u10e4\u10d0\u10e1\u10d8\u10e1 \u10d9\u10d0\u10e2\u10d4\u10d2\u10dd\u10e0\u10d8\u10d0 3\",\n          \"cat4\": \"\u10e4\u10d0\u10e1\u10d8\u10e1 \u10d9\u10d0\u10e2\u10d4\u10d2\u10dd\u10e0\u10d8\u10d0 4\"\n      },\n      \"catSuffixDigital\": \"\u2013 \u10db\u10ee\u10dd\u10da\u10dd\u10d3 \u10ea\u10d8\u10e4\u10e0\u10e3\u10da\u10d8 \u10db\u10dd\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10dd\u10d1\u10d0\u10d0 \u10e8\u10d4\u10e1\u10d0\u10eb\u10da\u10d4\u10d1\u10d4\u10da\u10d8\",\n      \"catSuffixException\": \"\u2013 \u10db\u10d8\u10ec\u10dd\u10d3\u10d4\u10d1\u10d0 \u10e8\u10d4\u10e1\u10d0\u10eb\u10da\u10d4\u10d1\u10d4\u10da\u10d8\u10d0 \u10db\u10ee\u10dd\u10da\u10dd\u10d3 \u10db\u10dd\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10dd\u10d1\u10d8\u10e1 \u10d4\u10dc\u10d8\u10d7 {X}, \u10ec\u10d8\u10dc\u10d0\u10d0\u10e6\u10db\u10d3\u10d4\u10d2 \u10e8\u10d4\u10db\u10d7\u10ee\u10d5\u10d4\u10d5\u10d0\u10e8\u10d8 \u10db\u10ee\u10dd\u10da\u10dd\u10d3 \u10ea\u10d8\u10e4\u10e0\u10e3\u10da\u10d8 \u10db\u10dd\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10dd\u10d1\u10d0\",\n      \"noCountry\": \"\u10e5\u10d5\u10d4\u10e7\u10d0\u10dc\u10d0 \u10d5\u10d4\u10e0 \u10db\u10dd\u10d8\u10eb\u10d4\u10d1\u10dc\u10d0\",\n      \"markerReduced\": \"\u10e4\u10d0\u10e1\u10d3\u10d0\u10d9\u10da\u10d4\u10d1\u10e3\u10da\u10d8 \u10e8\u10d4\u10dc\u10d0\u10e2\u10d0\u10dc\u10d8\",\n      \"markerBase\": \"\u10e1\u10e2\u10d0\u10dc\u10d3\u10d0\u10e0\u10e2\u10e3\u10da\u10d8 \u10e8\u10d4\u10dc\u10d0\u10e2\u10d0\u10dc\u10d8\",\n      \"markerSupport\": \"\u10db\u10ee\u10d0\u10e0\u10d3\u10d0\u10db\u10ed\u10d4\u10e0\u10d8 \u10e8\u10d4\u10dc\u10d0\u10e2\u10d0\u10dc\u10d8\",\n      \"hintLong\": \"\u10d0\u10e5 \u10e8\u10d4\u10d2\u10d8\u10eb\u10da\u10d8\u10d0\u10d7 \u10d0\u10d8\u10e0\u10e9\u10d8\u10dd\u10d7 \u10e8\u10d4\u10dc\u10d0\u10e2\u10d0\u10dc\u10d8, \u10e0\u10dd\u10db\u10d4\u10da\u10d8\u10ea \u10d7\u10e5\u10d5\u10d4\u10dc\u10d7\u10d5\u10d8\u10e1 \u10e8\u10d4\u10e1\u10d0\u10e4\u10d4\u10e0\u10d8\u10e1\u10d8\u10d0. \u10db\u10ee\u10d0\u10e0\u10d3\u10d0\u10db\u10ed\u10d4\u10e0\u10d8 \u10e8\u10d4\u10dc\u10d0\u10e2\u10d0\u10dc\u10d8\u10d7 \u10d7\u10e5\u10d5\u10d4\u10dc \u10e8\u10d4\u10e1\u10d0\u10eb\u10da\u10d4\u10d1\u10d4\u10da\u10e1 \u10ee\u10d3\u10d8\u10d7 \u10db\u10dd\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10dd\u10d1\u10d0\u10e1 \u10d0\u10d3\u10d0\u10db\u10d8\u10d0\u10dc\u10d4\u10d1\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1, \u10e0\u10dd\u10db\u10da\u10d4\u10d1\u10e1\u10d0\u10ea \u10e8\u10d4\u10d6\u10e6\u10e3\u10d3\u10e3\u10da\u10d8 \u10e4\u10d8\u10dc\u10d0\u10dc\u10e1\u10e3\u10e0\u10d8 \u10e8\u10d4\u10e1\u10d0\u10eb\u10da\u10d4\u10d1\u10da\u10dd\u10d1\u10d4\u10d1\u10d8 \u10d0\u10e5\u10d5\u10d7 \u10d3\u10d0 \u10d2\u10d5\u10d4\u10ee\u10db\u10d0\u10e0\u10d4\u10d1\u10d8\u10d7 \u10de\u10e0\u10dd\u10d4\u10e5\u10e2\u10d8\u10e1 \u10d2\u10d0\u10d5\u10e0\u10ea\u10d4\u10da\u10d4\u10d1\u10d0\u10e8\u10d8 \u10db\u10e1\u10dd\u10e4\u10da\u10d8\u10dd\u10e1 \u10d2\u10d0\u10e0\u10e8\u10d4\u10db\u10dd.\",\n      \"hintPaar\": \"\u10d7\u10d8\u10d7\u10dd\u10d4\u10e3\u10da\u10d8 \u10de\u10d8\u10e0\u10d8 \u10d8\u10e0\u10e9\u10d4\u10d5\u10e1 \u10e1\u10d0\u10d9\u10e3\u10d7\u10d0\u10e0 \u10e8\u10d4\u10dc\u10d0\u10e2\u10d0\u10dc\u10e1. \u10db\u10d4\u10dd\u10e0\u10d4 \u10de\u10d8\u10e0\u10d8 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10db\u10d8\u10d8\u10e6\u10d4\u10d1\u10e1 50%-\u10d8\u10d0\u10dc \u10e4\u10d0\u10e1\u10d3\u10d0\u10d9\u10da\u10d4\u10d1\u10d0\u10e1.\",\n      \"person1\": \"\u10de\u10d8\u10e0\u10d8 1\",\n      \"person2\": \"\u10de\u10d8\u10e0\u10d8 2\",\n      \"p2Badge\": \"(\u221250%)\",\n      \"discWiederholer\": \"\u10d2\u10d0\u10dc\u10db\u10d4\u10dd\u10e0\u10d4\u10d1\u10d8\u10d7\u10d8 \u10db\u10dd\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\",\n      \"discSchueler\": \"\u10e1\u10d9\u10dd\u10da\u10d8\u10e1 \u10db\u10dd\u10e1\u10ec\u10d0\u10d5\u10da\u10d4\",\n      \"discStudent\": \"\u10de\u10e0\u10dd\u10e4\u10d4\u10e1\u10d8\u10e3\u10da\u10d8 \u10e1\u10d0\u10e1\u10ec\u10d0\u10d5\u10da\u10d4\u10d1\u10da\u10d8\u10e1 \/ \u10e3\u10dc\u10d8\u10d5\u10d4\u10e0\u10e1\u10d8\u10e2\u10d4\u10e2\u10d8\u10e1 \u10e1\u10e2\u10e3\u10d3\u10d4\u10dc\u10e2\u10d8\",\n      \"discP2\": \"\u10ec\u10e7\u10d5\u10d8\u10da\u10d8\u10e1 \u10e4\u10d0\u10e1\u10d3\u10d0\u10d9\u10da\u10d4\u10d1\u10d0 - \u10de\u10d8\u10e0\u10d8 2\",\n      \"discApp\": \"\u10ea\u10d8\u10e4\u10e0\u10e3\u10da\u10d8 \u10db\u10dd\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10dd\u10d1\u10d0\",\n      \"reasonRegion\": \"\u10d7\u10e5\u10d5\u10d4\u10dc\u10e1 \u10e0\u10d4\u10d2\u10d8\u10dd\u10dc\u10e8\u10d8 \u10db\u10d8\u10ec\u10dd\u10d3\u10d4\u10d1\u10d0 \u10e8\u10d4\u10e3\u10eb\u10da\u10d4\u10d1\u10d4\u10da\u10d8\u10d0. \u10d7\u10e5\u10d5\u10d4\u10dc \u10d8\u10e6\u10d4\u10d1\u10d7 \u10db\u10dd\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10dd\u10d1\u10d0\u10e1 \u10ea\u10d8\u10e4\u10e0\u10e3\u10da\u10d0\u10d3. \u10e4\u10d0\u10e1\u10d3\u10d0\u10d9\u10da\u10d4\u10d1\u10d0 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10d0\u10d8\u10e1\u10d0\u10ee\u10d4\u10d1\u10d0 \u10e8\u10d4\u10ef\u10d0\u10db\u10d4\u10d1\u10d0\u10e8\u10d8.\",\n      \"reasonRussian\": \"\u10e0\u10e3\u10e1\u10e3\u10da\u10d4\u10dc\u10dd\u10d5\u10d0\u10dc\u10d7\u10d0\u10d7\u10d5\u10d8\u10e1 \u10e0\u10e3\u10e1\u10d4\u10d7\u10d8\u10e1 \u10e4\u10d0\u10e0\u10d2\u10da\u10d4\u10d1\u10e1 \u10d2\u10d0\u10e0\u10d4\u10d7 \u10ee\u10d4\u10da\u10db\u10d8\u10e1\u10d0\u10ec\u10d5\u10d3\u10dd\u10db\u10d8\u10d0 \u10db\u10ee\u10dd\u10da\u10dd\u10d3 \u10ea\u10d8\u10e4\u10e0\u10e3\u10da\u10d8 \u10d5\u10d4\u10e0\u10e1\u10d8\u10d0. \u10e4\u10d0\u10e1\u10d3\u10d0\u10d9\u10da\u10d4\u10d1\u10d0 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10d0\u10d8\u10e1\u10d0\u10ee\u10d4\u10d1\u10d0 \u10e8\u10d4\u10ef\u10d0\u10db\u10d4\u10d1\u10d0\u10e8\u10d8.\",\n      \"reasonLanguage\": \"\u10d0\u10db \u10d4\u10dc\u10d0\u10d6\u10d4 \u10ee\u10d4\u10da\u10db\u10d8\u10e1\u10d0\u10ec\u10d5\u10d3\u10dd\u10db\u10d8\u10d0 \u10db\u10ee\u10dd\u10da\u10dd\u10d3 \u10ea\u10d8\u10e4\u10e0\u10e3\u10da\u10d8 \u10d5\u10d4\u10e0\u10e1\u10d8\u10d0. \u10e4\u10d0\u10e1\u10d3\u10d0\u10d9\u10da\u10d4\u10d1\u10d0 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10d0\u10d8\u10e1\u10d0\u10ee\u10d4\u10d1\u10d0 \u10e8\u10d4\u10ef\u10d0\u10db\u10d4\u10d1\u10d0\u10e8\u10d8.\",\n      \"reasonException\": \"\u10d7\u10e5\u10d5\u10d4\u10dc\u10e1 \u10e0\u10d4\u10d2\u10d8\u10dd\u10dc\u10e8\u10d8 \u10db\u10d8\u10ec\u10dd\u10d3\u10d4\u10d1\u10d0 \u10e8\u10d4\u10e1\u10d0\u10eb\u10da\u10d4\u10d1\u10d4\u10da\u10d8\u10d0 \u10db\u10ee\u10dd\u10da\u10dd\u10d3 \u10db\u10dd\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10dd\u10d1\u10d8\u10e1 \u10d4\u10dc\u10d8\u10d7 {X}. \u10d7\u10e5\u10d5\u10d4\u10dc \u10d8\u10e6\u10d4\u10d1\u10d7 \u10db\u10dd\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10dd\u10d1\u10d0\u10e1 \u10ea\u10d8\u10e4\u10e0\u10e3\u10da\u10d0\u10d3. \u10e4\u10d0\u10e1\u10d3\u10d0\u10d9\u10da\u10d4\u10d1\u10d0 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10d0\u10d8\u10e1\u10d0\u10ee\u10d4\u10d1\u10d0 \u10e8\u10d4\u10ef\u10d0\u10db\u10d4\u10d1\u10d0\u10e8\u10d8.\",\n      \"thanksTitle\": \"\u10d3\u10d8\u10d3\u10d8 \u10db\u10d0\u10d3\u10da\u10dd\u10d1\u10d0!\",\n      \"thanksLine1\": \"\u10d8\u10e2\u10d5\u10d8\u10e0\u10d7\u10d4\u10d1\u10d0 \u10d2\u10d0\u10d3\u10d0\u10ee\u10d3\u10d8\u10e1 \u10d2\u10d5\u10d4\u10e0\u10d3\u10d8\u2026\",\n      \"thanksLine2\": \"\u10db\u10d0\u10da\u10d4 \u10d2\u10d0\u10d3\u10d0\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d3\u10d4\u10d1\u10d8\u10d7\u2026\",\n      \"preparing\": \"\u10db\u10d6\u10d0\u10d3\u10d3\u10d4\u10d1\u10d0\u2026\",\n      \"errSelectFirst\": \"\u10d2\u10d7\u10ee\u10dd\u10d5\u10d7, \u10ef\u10d4\u10e0 \u10d2\u10d0\u10d0\u10d9\u10d4\u10d7\u10dd\u10d7 \u10d0\u10e0\u10e9\u10d4\u10d5\u10d0\u10dc\u10d8.\",\n      \"errPaarFields\": \"\u10d2\u10d7\u10ee\u10dd\u10d5\u10d7, \u10d3\u10d0\u10d1\u10e0\u10e3\u10dc\u10d3\u10d4\u10d7 \u10d3\u10d0 \u10e8\u10d4\u10d0\u10d5\u10e1\u10dd\u10d7 \u10e7\u10d5\u10d4\u10da\u10d0 \u10d5\u10d4\u10da\u10d8 \u10dd\u10e0\u10d8\u10d5\u10d4 \u10de\u10d8\u10e0\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1.\",\n      \"errCountry\": \"\u10d2\u10d7\u10ee\u10dd\u10d5\u10d7, \u10ef\u10d4\u10e0 \u10d0\u10d8\u10e0\u10e9\u10d8\u10dd\u10d7 \u10e5\u10d5\u10d4\u10e7\u10d0\u10dc\u10d0.\",\n      \"errLang\": \"\u10d2\u10d7\u10ee\u10dd\u10d5\u10d7, \u10d0\u10d8\u10e0\u10e9\u10d8\u10dd\u10d7 \u10db\u10dd\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10dd\u10d1\u10d8\u10e1 \u10d4\u10dc\u10d0.\",\n      \"errNetwork\": \"\u10db\u10dd\u10dc\u10d0\u10ea\u10d4\u10db\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10d2\u10d6\u10d0\u10d5\u10dc\u10d0 \u10d5\u10d4\u10e0 \u10db\u10dd\u10ee\u10d4\u10e0\u10ee\u10d3\u10d0. \u10d2\u10d7\u10ee\u10dd\u10d5\u10d7, \u10e8\u10d4\u10d0\u10db\u10dd\u10ec\u10db\u10dd\u10d7 \u10d8\u10dc\u10e2\u10d4\u10e0\u10dc\u10d4\u10e2\u10d9\u10d0\u10d5\u10e8\u10d8\u10e0\u10d8.\",\n      \"errSubmit\": \"\u10d2\u10d0\u10d2\u10d6\u10d0\u10d5\u10dc\u10d0 \u10d5\u10d4\u10e0 \u10db\u10dd\u10ee\u10d4\u10e0\u10ee\u10d3\u10d0 (\u10e8\u10d4\u10ea\u10d3\u10dd\u10db\u10d0 [\u10d9\u10dd\u10d3\u10d8]). \u10d2\u10d7\u10ee\u10dd\u10d5\u10d7, \u10e1\u10ea\u10d0\u10d3\u10dd\u10d7 \u10ee\u10d4\u10da\u10d0\u10ee\u10da\u10d0.\",\n      \"errProduct\": \"\u10de\u10e0\u10dd\u10d3\u10e3\u10e5\u10e2\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0 \u10d5\u10d4\u10e0 \u10db\u10dd\u10ee\u10d4\u10e0\u10ee\u10d3\u10d0\",\n      \"errEcwid\": \"Ecwid-\u10d8\u10e1 \u10d9\u10d0\u10da\u10d0\u10d7\u10d8\u10e1 API \u10db\u10d8\u10e3\u10ec\u10d5\u10d3\u10dd\u10db\u10d4\u10da\u10d8\u10d0 [X] \u10ec\u10d0\u10db\u10d8\u10e1 \u10e8\u10d4\u10db\u10d3\u10d4\u10d2.\"\n  };\n  \/\/ Anzeigename der Teilnahmesprache (Schluessel = Ecwid-Wert, deutsch)\n  const LANG_DISPLAY = {\n      \"Deutsch\": \"\u10d2\u10d4\u10e0\u10db\u10d0\u10dc\u10e3\u10da\u10d8\",\n      \"Englisch\": \"\u10d8\u10dc\u10d2\u10da\u10d8\u10e1\u10e3\u10e0\u10d8\",\n      \"Spanisch\": \"\u10d4\u10e1\u10de\u10d0\u10dc\u10e3\u10e0\u10d8\",\n      \"Franz\u00f6sisch\": \"\u10e4\u10e0\u10d0\u10dc\u10d2\u10e3\u10da\u10d8\",\n      \"Italienisch\": \"\u10d8\u10e2\u10d0\u10da\u10d8\u10e3\u10e0\u10d8\",\n      \"Portugiesisch\": \"\u10de\u10dd\u10e0\u10e2\u10e3\u10d2\u10d0\u10da\u10d8\u10e3\u10e0\u10d8\",\n      \"Arabisch\": \"\u10d0\u10e0\u10d0\u10d1\u10e3\u10da\u10d8\",\n      \"Hebr\u00e4isch\": \"\u10d4\u10d1\u10e0\u10d0\u10e3\u10da\u10d8\",\n      \"Farsi\": \"\u10e1\u10de\u10d0\u10e0\u10e1\u10e3\u10da\u10d8\",\n      \"Georgisch\": \"\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8\",\n      \"Ukrainisch\": \"\u10e3\u10d9\u10e0\u10d0\u10d8\u10dc\u10e3\u10da\u10d8\",\n      \"Niederl\u00e4ndisch\": \"\u10f0\u10dd\u10da\u10d0\u10dc\u10d3\u10d8\u10e3\u10e0\u10d8\",\n      \"T\u00fcrkisch\": \"\u10d7\u10e3\u10e0\u10e5\u10e3\u10da\u10d8\",\n      \"Russisch\": \"\u10e0\u10e3\u10e1\u10e3\u10da\u10d8\",\n      \"Chinesisch\": \"\u10e9\u10d8\u10dc\u10e3\u10e0\u10d8\",\n      \"Japanisch\": \"\u10d8\u10d0\u10de\u10dd\u10dc\u10e3\u10e0\u10d8\",\n      \"Koreanisch\": \"\u10d9\u10dd\u10e0\u10d4\u10e3\u10da\u10d8\"\n  };\n  \/\/ Feste Laendernamen in der Landessprache (aus CLDR), damit die Liste in\n  \/\/ jedem Browser identisch ist \u2013 unabhaengig von der Intl-Datenlage.\n  const COUNTRY_NAMES = {\n      \"AD\": \"\u10d0\u10dc\u10d3\u10dd\u10e0\u10d0\",\n      \"AE\": \"\u10d0\u10e0\u10d0\u10d1\u10d7\u10d0 \u10d2\u10d0\u10d4\u10e0\u10d7\u10d8\u10d0\u10dc\u10d4\u10d1\u10e3\u10da\u10d8 \u10e1\u10d0\u10d0\u10db\u10d8\u10e0\u10dd\u10d4\u10d1\u10d8\",\n      \"AF\": \"\u10d0\u10d5\u10e6\u10d0\u10dc\u10d4\u10d7\u10d8\",\n      \"AG\": \"\u10d0\u10dc\u10e2\u10d8\u10d2\u10e3\u10d0 \u10d3\u10d0 \u10d1\u10d0\u10e0\u10d1\u10e3\u10d3\u10d0\",\n      \"AL\": \"\u10d0\u10da\u10d1\u10d0\u10dc\u10d4\u10d7\u10d8\",\n      \"AM\": \"\u10e1\u10dd\u10db\u10ee\u10d4\u10d7\u10d8\",\n      \"AO\": \"\u10d0\u10dc\u10d2\u10dd\u10da\u10d0\",\n      \"AR\": \"\u10d0\u10e0\u10d2\u10d4\u10dc\u10e2\u10d8\u10dc\u10d0\",\n      \"AT\": \"\u10d0\u10d5\u10e1\u10e2\u10e0\u10d8\u10d0\",\n      \"AU\": \"\u10d0\u10d5\u10e1\u10e2\u10e0\u10d0\u10da\u10d8\u10d0\",\n      \"AW\": \"\u10d0\u10e0\u10e3\u10d1\u10d0\",\n      \"AZ\": \"\u10d0\u10d6\u10d4\u10e0\u10d1\u10d0\u10d8\u10ef\u10d0\u10dc\u10d8\",\n      \"BA\": \"\u10d1\u10dd\u10e1\u10dc\u10d8\u10d0 \u10d3\u10d0 \u10f0\u10d4\u10e0\u10ea\u10d4\u10d2\u10dd\u10d5\u10d8\u10dc\u10d0\",\n      \"BB\": \"\u10d1\u10d0\u10e0\u10d1\u10d0\u10d3\u10dd\u10e1\u10d8\",\n      \"BD\": \"\u10d1\u10d0\u10dc\u10d2\u10da\u10d0\u10d3\u10d4\u10e8\u10d8\",\n      \"BE\": \"\u10d1\u10d4\u10da\u10d2\u10d8\u10d0\",\n      \"BF\": \"\u10d1\u10e3\u10e0\u10d9\u10d8\u10dc\u10d0-\u10e4\u10d0\u10e1\u10dd\",\n      \"BG\": \"\u10d1\u10e3\u10da\u10d2\u10d0\u10e0\u10d4\u10d7\u10d8\",\n      \"BH\": \"\u10d1\u10d0\u10f0\u10e0\u10d4\u10d8\u10dc\u10d8\",\n      \"BI\": \"\u10d1\u10e3\u10e0\u10e3\u10dc\u10d3\u10d8\",\n      \"BJ\": \"\u10d1\u10d4\u10dc\u10d8\u10dc\u10d8\",\n      \"BN\": \"\u10d1\u10e0\u10e3\u10dc\u10d4\u10d8\",\n      \"BO\": \"\u10d1\u10dd\u10da\u10d8\u10d5\u10d8\u10d0\",\n      \"BR\": \"\u10d1\u10e0\u10d0\u10d6\u10d8\u10da\u10d8\u10d0\",\n      \"BS\": \"\u10d1\u10d0\u10f0\u10d0\u10db\u10d8\u10e1 \u10d9\u10e3\u10dc\u10eb\u10e3\u10da\u10d4\u10d1\u10d8\",\n      \"BT\": \"\u10d1\u10e3\u10e2\u10d0\u10dc\u10d8\",\n      \"BW\": \"\u10d1\u10dd\u10e2\u10e1\u10d5\u10d0\u10dc\u10d0\",\n      \"BY\": \"\u10d1\u10d4\u10da\u10d0\u10e0\u10e3\u10e1\u10d8\",\n      \"BZ\": \"\u10d1\u10d4\u10da\u10d8\u10d6\u10d8\",\n      \"CA\": \"\u10d9\u10d0\u10dc\u10d0\u10d3\u10d0\",\n      \"CD\": \"\u10d9\u10dd\u10dc\u10d2\u10dd - \u10d9\u10d8\u10dc\u10e8\u10d0\u10e1\u10d0\",\n      \"CF\": \"\u10ea\u10d4\u10dc\u10e2\u10e0\u10d0\u10da\u10e3\u10e0\u10d8 \u10d0\u10e4\u10e0\u10d8\u10d9\u10d8\u10e1 \u10e0\u10d4\u10e1\u10de\u10e3\u10d1\u10da\u10d8\u10d9\u10d0\",\n      \"CG\": \"\u10d9\u10dd\u10dc\u10d2\u10dd - \u10d1\u10e0\u10d0\u10d6\u10d0\u10d5\u10d8\u10da\u10d8\",\n      \"CH\": \"\u10e8\u10d5\u10d4\u10d8\u10ea\u10d0\u10e0\u10d8\u10d0\",\n      \"CI\": \"\u10d9\u10dd\u10e2-\u10d3\u10d8\u10d5\u10e3\u10d0\u10e0\u10d8\",\n      \"CL\": \"\u10e9\u10d8\u10da\u10d4\",\n      \"CM\": \"\u10d9\u10d0\u10db\u10d4\u10e0\u10e3\u10dc\u10d8\",\n      \"CN\": \"\u10e9\u10d8\u10dc\u10d4\u10d7\u10d8\",\n      \"CO\": \"\u10d9\u10dd\u10da\u10e3\u10db\u10d1\u10d8\u10d0\",\n      \"CR\": \"\u10d9\u10dd\u10e1\u10e2\u10d0-\u10e0\u10d8\u10d9\u10d0\",\n      \"CV\": \"\u10d9\u10d0\u10d1\u10dd-\u10d5\u10d4\u10e0\u10d3\u10d4\",\n      \"CY\": \"\u10d9\u10d5\u10d8\u10de\u10e0\u10dd\u10e1\u10d8\",\n      \"CZ\": \"\u10e9\u10d4\u10ee\u10d4\u10d7\u10d8\",\n      \"DE\": \"\u10d2\u10d4\u10e0\u10db\u10d0\u10dc\u10d8\u10d0\",\n      \"DJ\": \"\u10ef\u10d8\u10d1\u10e3\u10e2\u10d8\",\n      \"DK\": \"\u10d3\u10d0\u10dc\u10d8\u10d0\",\n      \"DM\": \"\u10d3\u10dd\u10db\u10d8\u10dc\u10d8\u10d9\u10d0\",\n      \"DO\": \"\u10d3\u10dd\u10db\u10d8\u10dc\u10d8\u10d9\u10d4\u10da\u10d7\u10d0 \u10e0\u10d4\u10e1\u10de\u10e3\u10d1\u10da\u10d8\u10d9\u10d0\",\n      \"DZ\": \"\u10d0\u10da\u10df\u10d8\u10e0\u10d8\",\n      \"EC\": \"\u10d4\u10d9\u10d5\u10d0\u10d3\u10dd\u10e0\u10d8\",\n      \"EE\": \"\u10d4\u10e1\u10e2\u10dd\u10dc\u10d4\u10d7\u10d8\",\n      \"EG\": \"\u10d4\u10d2\u10d5\u10d8\u10de\u10e2\u10d4\",\n      \"ES\": \"\u10d4\u10e1\u10de\u10d0\u10dc\u10d4\u10d7\u10d8\",\n      \"ET\": \"\u10d4\u10d7\u10d8\u10dd\u10de\u10d8\u10d0\",\n      \"FI\": \"\u10e4\u10d8\u10dc\u10d4\u10d7\u10d8\",\n      \"FJ\": \"\u10e4\u10d8\u10ef\u10d8\",\n      \"FM\": \"\u10db\u10d8\u10d9\u10e0\u10dd\u10dc\u10d4\u10d6\u10d8\u10d0\",\n      \"FR\": \"\u10e1\u10d0\u10e4\u10e0\u10d0\u10dc\u10d2\u10d4\u10d7\u10d8\",\n      \"GA\": \"\u10d2\u10d0\u10d1\u10dd\u10dc\u10d8\",\n      \"GB\": \"\u10d2\u10d0\u10d4\u10e0\u10d7\u10d8\u10d0\u10dc\u10d4\u10d1\u10e3\u10da\u10d8 \u10e1\u10d0\u10db\u10d4\u10e4\u10dd\",\n      \"GB-SCT\": \"\u10e8\u10dd\u10e2\u10da\u10d0\u10dc\u10d3\u10d8\u10d0\",\n      \"GD\": \"\u10d2\u10e0\u10d4\u10dc\u10d0\u10d3\u10d0\",\n      \"GE\": \"\u10e1\u10d0\u10e5\u10d0\u10e0\u10d7\u10d5\u10d4\u10da\u10dd\",\n      \"GH\": \"\u10d2\u10d0\u10dc\u10d0\",\n      \"GM\": \"\u10d2\u10d0\u10db\u10d1\u10d8\u10d0\",\n      \"GN\": \"\u10d2\u10d5\u10d8\u10dc\u10d4\u10d0\",\n      \"GQ\": \"\u10d4\u10d9\u10d5\u10d0\u10e2\u10dd\u10e0\u10e3\u10da\u10d8 \u10d2\u10d5\u10d8\u10dc\u10d4\u10d0\",\n      \"GR\": \"\u10e1\u10d0\u10d1\u10d4\u10e0\u10eb\u10dc\u10d4\u10d7\u10d8\",\n      \"GT\": \"\u10d2\u10d5\u10d0\u10e2\u10d4\u10db\u10d0\u10da\u10d0\",\n      \"GW\": \"\u10d2\u10d5\u10d8\u10dc\u10d4\u10d0-\u10d1\u10d8\u10e1\u10d0\u10e3\",\n      \"GY\": \"\u10d2\u10d0\u10d8\u10d0\u10dc\u10d0\",\n      \"HK\": \"\u10f0\u10dd\u10dc\u10d9\u10dd\u10dc\u10d2\u10d8\",\n      \"HN\": \"\u10f0\u10dd\u10dc\u10d3\u10e3\u10e0\u10d0\u10e1\u10d8\",\n      \"HR\": \"\u10ee\u10dd\u10e0\u10d5\u10d0\u10e2\u10d8\u10d0\",\n      \"HT\": \"\u10f0\u10d0\u10d8\u10e2\u10d8\",\n      \"HU\": \"\u10e3\u10dc\u10d2\u10e0\u10d4\u10d7\u10d8\",\n      \"ID\": \"\u10d8\u10dc\u10d3\u10dd\u10dc\u10d4\u10d6\u10d8\u10d0\",\n      \"IE\": \"\u10d8\u10e0\u10da\u10d0\u10dc\u10d3\u10d8\u10d0\",\n      \"IL\": \"\u10d8\u10e1\u10e0\u10d0\u10d4\u10da\u10d8\",\n      \"IN\": \"\u10d8\u10dc\u10d3\u10dd\u10d4\u10d7\u10d8\",\n      \"IQ\": \"\u10d4\u10e0\u10d0\u10e7\u10d8\",\n      \"IR\": \"\u10d8\u10e0\u10d0\u10dc\u10d8\",\n      \"IS\": \"\u10d8\u10e1\u10da\u10d0\u10dc\u10d3\u10d8\u10d0\",\n      \"IT\": \"\u10d8\u10e2\u10d0\u10da\u10d8\u10d0\",\n      \"JM\": \"\u10d8\u10d0\u10db\u10d0\u10d8\u10d9\u10d0\",\n      \"JO\": \"\u10d8\u10dd\u10e0\u10d3\u10d0\u10dc\u10d8\u10d0\",\n      \"JP\": \"\u10d8\u10d0\u10de\u10dd\u10dc\u10d8\u10d0\",\n      \"KE\": \"\u10d9\u10d4\u10dc\u10d8\u10d0\",\n      \"KG\": \"\u10e7\u10d8\u10e0\u10d2\u10d8\u10d6\u10d4\u10d7\u10d8\",\n      \"KH\": \"\u10d9\u10d0\u10db\u10d1\u10dd\u10ef\u10d0\",\n      \"KI\": \"\u10d9\u10d8\u10e0\u10d8\u10d1\u10d0\u10e2\u10d8\",\n      \"KM\": \"\u10d9\u10dd\u10db\u10dd\u10e0\u10d8\u10e1 \u10d9\u10e3\u10dc\u10eb\u10e3\u10da\u10d4\u10d1\u10d8\",\n      \"KN\": \"\u10e1\u10d4\u10dc\u10e2-\u10d9\u10d8\u10e2\u10e1\u10d8 \u10d3\u10d0 \u10dc\u10d4\u10d5\u10d8\u10e1\u10d8\",\n      \"KR\": \"\u10e1\u10d0\u10db\u10ee\u10e0\u10d4\u10d7 \u10d9\u10dd\u10e0\u10d4\u10d0\",\n      \"KW\": \"\u10e5\u10e3\u10d5\u10d4\u10d8\u10d7\u10d8\",\n      \"KZ\": \"\u10e7\u10d0\u10d6\u10d0\u10ee\u10d4\u10d7\u10d8\",\n      \"LA\": \"\u10da\u10d0\u10dd\u10e1\u10d8\",\n      \"LB\": \"\u10da\u10d8\u10d1\u10d0\u10dc\u10d8\",\n      \"LC\": \"\u10e1\u10d4\u10dc\u10e2-\u10da\u10e3\u10e1\u10d8\u10d0\",\n      \"LI\": \"\u10da\u10d8\u10ee\u10e2\u10d4\u10dc\u10e8\u10e2\u10d0\u10d8\u10dc\u10d8\",\n      \"LK\": \"\u10e8\u10e0\u10d8-\u10da\u10d0\u10dc\u10d9\u10d0\",\n      \"LR\": \"\u10da\u10d8\u10d1\u10d4\u10e0\u10d8\u10d0\",\n      \"LS\": \"\u10da\u10d4\u10e1\u10dd\u10d7\u10dd\",\n      \"LT\": \"\u10da\u10d8\u10d4\u10e2\u10e3\u10d5\u10d0\",\n      \"LU\": \"\u10da\u10e3\u10e5\u10e1\u10d4\u10db\u10d1\u10e3\u10e0\u10d2\u10d8\",\n      \"LV\": \"\u10da\u10d0\u10e2\u10d5\u10d8\u10d0\",\n      \"LY\": \"\u10da\u10d8\u10d1\u10d8\u10d0\",\n      \"MA\": \"\u10db\u10d0\u10e0\u10dd\u10d9\u10dd\",\n      \"MD\": \"\u10db\u10dd\u10da\u10d3\u10dd\u10d5\u10d0\",\n      \"ME\": \"\u10db\u10dd\u10dc\u10e2\u10d4\u10dc\u10d4\u10d2\u10e0\u10dd\",\n      \"MG\": \"\u10db\u10d0\u10d3\u10d0\u10d2\u10d0\u10e1\u10d9\u10d0\u10e0\u10d8\",\n      \"MH\": \"\u10db\u10d0\u10e0\u10e8\u10d0\u10da\u10d8\u10e1 \u10d9\u10e3\u10dc\u10eb\u10e3\u10da\u10d4\u10d1\u10d8\",\n      \"MK\": \"\u10e9\u10e0\u10d3\u10d8\u10da\u10dd\u10d4\u10d7 \u10db\u10d0\u10d9\u10d4\u10d3\u10dd\u10dc\u10d8\u10d0\",\n      \"ML\": \"\u10db\u10d0\u10da\u10d8\",\n      \"MM\": \"\u10db\u10d8\u10d0\u10dc\u10db\u10d0\u10e0\u10d8 (\u10d1\u10d8\u10e0\u10db\u10d0)\",\n      \"MN\": \"\u10db\u10dd\u10dc\u10e6\u10dd\u10da\u10d4\u10d7\u10d8\",\n      \"MO\": \"\u10db\u10d0\u10d9\u10d0\u10dd\",\n      \"MR\": \"\u10db\u10d0\u10d5\u10e0\u10d8\u10e2\u10d0\u10dc\u10d8\u10d0\",\n      \"MT\": \"\u10db\u10d0\u10da\u10e2\u10d0\",\n      \"MU\": \"\u10db\u10d0\u10d5\u10e0\u10d8\u10d9\u10d8\",\n      \"MV\": \"\u10db\u10d0\u10da\u10d3\u10d8\u10d5\u10d4\u10d1\u10d8\",\n      \"MW\": \"\u10db\u10d0\u10da\u10d0\u10d5\u10d8\",\n      \"MX\": \"\u10db\u10d4\u10e5\u10e1\u10d8\u10d9\u10d0\",\n      \"MY\": \"\u10db\u10d0\u10da\u10d0\u10d8\u10d6\u10d8\u10d0\",\n      \"MZ\": \"\u10db\u10dd\u10d6\u10d0\u10db\u10d1\u10d8\u10d9\u10d8\",\n      \"NA\": \"\u10dc\u10d0\u10db\u10d8\u10d1\u10d8\u10d0\",\n      \"NE\": \"\u10dc\u10d8\u10d2\u10d4\u10e0\u10d8\",\n      \"NG\": \"\u10dc\u10d8\u10d2\u10d4\u10e0\u10d8\u10d0\",\n      \"NI\": \"\u10dc\u10d8\u10d9\u10d0\u10e0\u10d0\u10d2\u10e3\u10d0\",\n      \"NL\": \"\u10dc\u10d8\u10d3\u10d4\u10e0\u10da\u10d0\u10dc\u10d3\u10d4\u10d1\u10d8\",\n      \"NO\": \"\u10dc\u10dd\u10e0\u10d5\u10d4\u10d2\u10d8\u10d0\",\n      \"NP\": \"\u10dc\u10d4\u10de\u10d0\u10da\u10d8\",\n      \"NR\": \"\u10dc\u10d0\u10e3\u10e0\u10e3\",\n      \"NZ\": \"\u10d0\u10ee\u10d0\u10da\u10d8 \u10d6\u10d4\u10da\u10d0\u10dc\u10d3\u10d8\u10d0\",\n      \"OM\": \"\u10dd\u10db\u10d0\u10dc\u10d8\",\n      \"PA\": \"\u10de\u10d0\u10dc\u10d0\u10db\u10d0\",\n      \"PE\": \"\u10de\u10d4\u10e0\u10e3\",\n      \"PG\": \"\u10de\u10d0\u10de\u10e3\u10d0-\u10d0\u10ee\u10d0\u10da\u10d8 \u10d2\u10d5\u10d8\u10dc\u10d4\u10d0\",\n      \"PH\": \"\u10e4\u10d8\u10da\u10d8\u10de\u10d8\u10dc\u10d4\u10d1\u10d8\",\n      \"PK\": \"\u10de\u10d0\u10d9\u10d8\u10e1\u10e2\u10d0\u10dc\u10d8\",\n      \"PL\": \"\u10de\u10dd\u10da\u10dd\u10dc\u10d4\u10d7\u10d8\",\n      \"PR\": \"\u10de\u10e3\u10d4\u10e0\u10e2\u10dd-\u10e0\u10d8\u10d9\u10dd\",\n      \"PS\": \"\u10de\u10d0\u10da\u10d4\u10e1\u10e2\u10d8\u10dc\u10d8\u10e1 \u10e2\u10d4\u10e0\u10d8\u10e2\u10dd\u10e0\u10d8\u10d4\u10d1\u10d8\",\n      \"PT\": \"\u10de\u10dd\u10e0\u10e2\u10e3\u10d2\u10d0\u10da\u10d8\u10d0\",\n      \"PW\": \"\u10de\u10d0\u10da\u10d0\u10e3\",\n      \"PY\": \"\u10de\u10d0\u10e0\u10d0\u10d2\u10d5\u10d0\u10d8\",\n      \"QA\": \"\u10d9\u10d0\u10e2\u10d0\u10e0\u10d8\",\n      \"RO\": \"\u10e0\u10e3\u10db\u10d8\u10dc\u10d4\u10d7\u10d8\",\n      \"RS\": \"\u10e1\u10d4\u10e0\u10d1\u10d4\u10d7\u10d8\",\n      \"RU\": \"\u10e0\u10e3\u10e1\u10d4\u10d7\u10d8\",\n      \"RW\": \"\u10e0\u10e3\u10d0\u10dc\u10d3\u10d0\",\n      \"SA\": \"\u10e1\u10d0\u10e3\u10d3\u10d8\u10e1 \u10d0\u10e0\u10d0\u10d1\u10d4\u10d7\u10d8\",\n      \"SB\": \"\u10e1\u10dd\u10da\u10dd\u10db\u10dd\u10dc\u10d8\u10e1 \u10d9\u10e3\u10dc\u10eb\u10e3\u10da\u10d4\u10d1\u10d8\",\n      \"SC\": \"\u10e1\u10d4\u10d8\u10e8\u10d4\u10da\u10d8\u10e1 \u10d9\u10e3\u10dc\u10eb\u10e3\u10da\u10d4\u10d1\u10d8\",\n      \"SD\": \"\u10e1\u10e3\u10d3\u10d0\u10dc\u10d8\",\n      \"SE\": \"\u10e8\u10d5\u10d4\u10d3\u10d4\u10d7\u10d8\",\n      \"SG\": \"\u10e1\u10d8\u10dc\u10d2\u10d0\u10de\u10e3\u10e0\u10d8\",\n      \"SI\": \"\u10e1\u10da\u10dd\u10d5\u10d4\u10dc\u10d8\u10d0\",\n      \"SK\": \"\u10e1\u10da\u10dd\u10d5\u10d0\u10d9\u10d4\u10d7\u10d8\",\n      \"SL\": \"\u10e1\u10d8\u10d4\u10e0\u10d0-\u10da\u10d4\u10dd\u10dc\u10d4\",\n      \"SM\": \"\u10e1\u10d0\u10dc-\u10db\u10d0\u10e0\u10d8\u10dc\u10dd\",\n      \"SN\": \"\u10e1\u10d4\u10dc\u10d4\u10d2\u10d0\u10da\u10d8\",\n      \"SO\": \"\u10e1\u10dd\u10db\u10d0\u10da\u10d8\",\n      \"SR\": \"\u10e1\u10e3\u10e0\u10d8\u10dc\u10d0\u10db\u10d8\",\n      \"SS\": \"\u10e1\u10d0\u10db\u10ee\u10e0\u10d4\u10d7 \u10e1\u10e3\u10d3\u10d0\u10dc\u10d8\",\n      \"ST\": \"\u10e1\u10d0\u10dc-\u10e2\u10dd\u10db\u10d4 \u10d3\u10d0 \u10de\u10e0\u10d8\u10dc\u10e1\u10d8\u10de\u10d8\",\n      \"SV\": \"\u10e1\u10d0\u10da\u10d5\u10d0\u10d3\u10dd\u10e0\u10d8\",\n      \"SZ\": \"\u10d4\u10e1\u10d5\u10d0\u10e2\u10d8\u10dc\u10d8\",\n      \"TD\": \"\u10e9\u10d0\u10d3\u10d8\",\n      \"TG\": \"\u10e2\u10dd\u10d2\u10dd\",\n      \"TH\": \"\u10e2\u10d0\u10d8\u10da\u10d0\u10dc\u10d3\u10d8\",\n      \"TJ\": \"\u10e2\u10d0\u10ef\u10d8\u10d9\u10d4\u10d7\u10d8\",\n      \"TL\": \"\u10e2\u10d8\u10db\u10dd\u10e0-\u10da\u10d4\u10e1\u10e2\u10d4\",\n      \"TM\": \"\u10d7\u10e3\u10e0\u10e5\u10db\u10d4\u10dc\u10d4\u10d7\u10d8\",\n      \"TN\": \"\u10e2\u10e3\u10dc\u10d8\u10e1\u10d8\",\n      \"TO\": \"\u10e2\u10dd\u10dc\u10d2\u10d0\",\n      \"TR\": \"\u10d7\u10e3\u10e0\u10e5\u10d4\u10d7\u10d8\",\n      \"TT\": \"\u10e2\u10e0\u10d8\u10dc\u10d8\u10d3\u10d0\u10d3\u10d8 \u10d3\u10d0 \u10e2\u10dd\u10d1\u10d0\u10d2\u10dd\",\n      \"TV\": \"\u10e2\u10e3\u10d5\u10d0\u10da\u10e3\",\n      \"TW\": \"\u10e2\u10d0\u10d8\u10d5\u10d0\u10dc\u10d8\",\n      \"TZ\": \"\u10e2\u10d0\u10dc\u10d6\u10d0\u10dc\u10d8\u10d0\",\n      \"UA\": \"\u10e3\u10d9\u10e0\u10d0\u10d8\u10dc\u10d0\",\n      \"UG\": \"\u10e3\u10d2\u10d0\u10dc\u10d3\u10d0\",\n      \"US\": \"\u10d0\u10db\u10d4\u10e0\u10d8\u10d9\u10d8\u10e1 \u10e8\u10d4\u10d4\u10e0\u10d7\u10d4\u10d1\u10e3\u10da\u10d8 \u10e8\u10e2\u10d0\u10e2\u10d4\u10d1\u10d8\",\n      \"UY\": \"\u10e3\u10e0\u10e3\u10d2\u10d5\u10d0\u10d8\",\n      \"UZ\": \"\u10e3\u10d6\u10d1\u10d4\u10d9\u10d4\u10d7\u10d8\",\n      \"VC\": \"\u10e1\u10d4\u10dc\u10e2-\u10d5\u10d8\u10dc\u10e1\u10d4\u10dc\u10e2\u10d8 \u10d3\u10d0 \u10d2\u10e0\u10d4\u10dc\u10d0\u10d3\u10d8\u10dc\u10d4\u10d1\u10d8\",\n      \"VE\": \"\u10d5\u10d4\u10dc\u10d4\u10e1\u10e3\u10d4\u10da\u10d0\",\n      \"VN\": \"\u10d5\u10d8\u10d4\u10e2\u10dc\u10d0\u10db\u10d8\",\n      \"VU\": \"\u10d5\u10d0\u10dc\u10e3\u10d0\u10e2\u10e3\",\n      \"WS\": \"\u10e1\u10d0\u10db\u10dd\u10d0\",\n      \"XK\": \"\u10d9\u10dd\u10e1\u10dd\u10d5\u10dd\",\n      \"YE\": \"\u10d8\u10d4\u10db\u10d4\u10dc\u10d8\",\n      \"ZA\": \"\u10e1\u10d0\u10db\u10ee\u10e0\u10d4\u10d7 \u10d0\u10e4\u10e0\u10d8\u10d9\u10d8\u10e1 \u10e0\u10d4\u10e1\u10de\u10e3\u10d1\u10da\u10d8\u10d9\u10d0\",\n      \"ZM\": \"\u10d6\u10d0\u10db\u10d1\u10d8\u10d0\",\n      \"ZW\": \"\u10d6\u10d8\u10db\u10d1\u10d0\u10d1\u10d5\u10d4\"\n  };\n\n  \/\/ \u2500\u2500 Zusaetzliche Suchbegriffe (Aliasse) je Land \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Beeinflusst NUR die Suche, nicht den angezeigten Namen. Alles klein schreiben.\n  \/\/ Wichtig fuer KA: lateinische Schreibweisen, damit die Suche auch mit\n  \/\/ umgeschalteter Tastatur funktioniert.\n  const COUNTRY_SEARCH_ALIASES = {\n      \"US\": [\"\u10d0\u10e8\u10e8\", \"\u10d0\u10db\u10d4\u10e0\u10d8\u10d9\u10d0\", \"\u10d0\u10db\u10d4\u10e0\u10d8\u10d9\u10d8\u10e1 \u10e8\u10d4\u10d4\u10e0\u10d7\u10d4\u10d1\u10e3\u10da\u10d8 \u10e8\u10e2\u10d0\u10e2\u10d4\u10d1\u10d8\", \"usa\", \"america\", \"united states of america\", \"united states\"],\n      \"GB\": [\"\u10d8\u10dc\u10d2\u10da\u10d8\u10e1\u10d8\", \"\u10d1\u10e0\u10d8\u10e2\u10d0\u10dc\u10d4\u10d7\u10d8\", \"\u10d3\u10d8\u10d3\u10d8 \u10d1\u10e0\u10d8\u10e2\u10d0\u10dc\u10d4\u10d7\u10d8\", \"uk\", \"england\", \"britain\", \"great britain\", \"united kingdom\"],\n      \"GB-SCT\": [\"\u10e8\u10dd\u10e2\u10da\u10d0\u10dc\u10d3\u10d8\u10d0\", \"scotland\"],\n      \"KR\": [\"\u10e1\u10d0\u10db\u10ee\u10e0\u10d4\u10d7 \u10d9\u10dd\u10e0\u10d4\u10d0\", \"\u10d9\u10dd\u10e0\u10d4\u10d0\", \"korea\", \"south korea\"],\n      \"NL\": [\"\u10dc\u10d8\u10d3\u10d4\u10e0\u10da\u10d0\u10dc\u10d3\u10d4\u10d1\u10d8\", \"\u10f0\u10dd\u10da\u10d0\u10dc\u10d3\u10d8\u10d0\", \"holland\", \"netherlands\"],\n      \"CH\": [\"\u10e8\u10d5\u10d4\u10d8\u10ea\u10d0\u10e0\u10d8\u10d0\", \"switzerland\"],\n      \"DE\": [\"\u10d2\u10d4\u10e0\u10db\u10d0\u10dc\u10d8\u10d0\", \"deutschland\", \"germany\"],\n      \"AT\": [\"\u10d0\u10d5\u10e1\u10e2\u10e0\u10d8\u10d0\", \"austria\"],\n      \"CZ\": [\"\u10e9\u10d4\u10ee\u10d4\u10d7\u10d8\", \"czech republic\", \"czechia\"],\n      \"TR\": [\"\u10d7\u10e3\u10e0\u10e5\u10d4\u10d7\u10d8\", \"turkey\", \"turkiye\", \"t\u00fcrkiye\"],\n      \"RU\": [\"\u10e0\u10e3\u10e1\u10d4\u10d7\u10d8\", \"russia\", \"russian federation\"],\n      \"JP\": [\"\u10d8\u10d0\u10de\u10dd\u10dc\u10d8\u10d0\"],\n      \"CN\": [\"\u10e9\u10d8\u10dc\u10d4\u10d7\u10d8\"],\n      \"GE\": [\"\u10e1\u10d0\u10e5\u10d0\u10e0\u10d7\u10d5\u10d4\u10da\u10dd\", \"grusia\", \"georgia\"],\n      \"AM\": [\"\u10e1\u10dd\u10db\u10ee\u10d4\u10d7\u10d8\"],\n      \"AZ\": [\"\u10d0\u10d6\u10d4\u10e0\u10d1\u10d0\u10d8\u10ef\u10d0\u10dc\u10d8\"],\n      \"IL\": [\"\u10d8\u10e1\u10e0\u10d0\u10d4\u10da\u10d8\"],\n      \"FR\": [\"\u10e1\u10d0\u10e4\u10e0\u10d0\u10dc\u10d2\u10d4\u10d7\u10d8\"],\n      \"IT\": [\"\u10d8\u10e2\u10d0\u10da\u10d8\u10d0\"],\n      \"ES\": [\"\u10d4\u10e1\u10de\u10d0\u10dc\u10d4\u10d7\u10d8\"],\n      \"PT\": [\"\u10de\u10dd\u10e0\u10e2\u10e3\u10d2\u10d0\u10da\u10d8\u10d0\"],\n      \"BR\": [\"\u10d1\u10e0\u10d0\u10d6\u10d8\u10da\u10d8\u10d0\"],\n      \"MX\": [\"\u10db\u10d4\u10e5\u10e1\u10d8\u10d9\u10d0\"],\n      \"CA\": [\"\u10d9\u10d0\u10dc\u10d0\u10d3\u10d0\"],\n      \"AU\": [\"\u10d0\u10d5\u10e1\u10e2\u10e0\u10d0\u10da\u10d8\u10d0\"],\n      \"NZ\": [\"\u10d0\u10ee\u10d0\u10da\u10d8 \u10d6\u10d4\u10da\u10d0\u10dc\u10d3\u10d8\u10d0\"],\n      \"IN\": [\"\u10d8\u10dc\u10d3\u10dd\u10d4\u10d7\u10d8\"],\n      \"ZA\": [\"\u10e1\u10d0\u10db\u10ee\u10e0\u10d4\u10d7 \u10d0\u10e4\u10e0\u10d8\u10d9\u10d0\"],\n      \"EG\": [\"\u10d4\u10d2\u10d5\u10d8\u10de\u10e2\u10d4\"],\n      \"GR\": [\"\u10e1\u10d0\u10d1\u10d4\u10e0\u10eb\u10dc\u10d4\u10d7\u10d8\"],\n      \"PL\": [\"\u10de\u10dd\u10da\u10dd\u10dc\u10d4\u10d7\u10d8\"],\n      \"UA\": [\"\u10e3\u10d9\u10e0\u10d0\u10d8\u10dc\u10d0\"],\n      \"SE\": [\"\u10e8\u10d5\u10d4\u10d3\u10d4\u10d7\u10d8\"],\n      \"NO\": [\"\u10dc\u10dd\u10e0\u10d5\u10d4\u10d2\u10d8\u10d0\"],\n      \"DK\": [\"\u10d3\u10d0\u10dc\u10d8\u10d0\"],\n      \"FI\": [\"\u10e4\u10d8\u10dc\u10d4\u10d7\u10d8\"],\n      \"BE\": [\"\u10d1\u10d4\u10da\u10d2\u10d8\u10d0\"],\n      \"IE\": [\"\u10d8\u10e0\u10da\u10d0\u10dc\u10d3\u10d8\u10d0\"],\n      \"IR\": [\"\u10d8\u10e0\u10d0\u10dc\u10d8\", \"persia\", \"iran\"],\n      \"AE\": [\"\u10d0\u10e0\u10d0\u10d1\u10d7\u10d0 \u10d2\u10d0\u10d4\u10e0\u10d7\u10d8\u10d0\u10dc\u10d4\u10d1\u10e3\u10da\u10d8 \u10e1\u10d0\u10d0\u10db\u10d8\u10e0\u10dd\u10d4\u10d1\u10d8\", \"uae\", \"emirates\", \"dubai\", \"united arab emirates\"],\n      \"SA\": [\"\u10e1\u10d0\u10e3\u10d3\u10d8\u10e1 \u10d0\u10e0\u10d0\u10d1\u10d4\u10d7\u10d8\"],\n      \"BY\": [\"\u10d1\u10d4\u10da\u10d0\u10e0\u10e3\u10e1\u10d8\", \"belarus\"],\n      \"MD\": [\"\u10db\u10dd\u10da\u10d3\u10dd\u10d5\u10d0\", \"moldova\"],\n      \"KZ\": [\"\u10e7\u10d0\u10d6\u10d0\u10ee\u10d4\u10d7\u10d8\"],\n      \"UZ\": [\"\u10e3\u10d6\u10d1\u10d4\u10d9\u10d4\u10d7\u10d8\"],\n      \"MM\": [\"\u10db\u10d8\u10d0\u10dc\u10db\u10d0\u10e0\u10d8\", \"burma\", \"myanmar\"],\n      \"CI\": [\"ivory coast\", \"cote d'ivoire\"],\n      \"TL\": [\"east timor\", \"timor-leste\"],\n      \"SZ\": [\"swaziland\", \"eswatini\"],\n      \"MK\": [\"macedonia\", \"north macedonia\"],\n      \"MO\": [\"macao\", \"macau\"],\n      \"KP\": [\"north korea\"],\n      \"CV\": [\"cabo verde\", \"cape verde\"],\n      \"CD\": [\"dr congo\", \"drc\", \"congo kinshasa\"],\n      \"CG\": [\"congo brazzaville\"],\n      \"VA\": [\"vatican\", \"holy see\"],\n      \"LA\": [\"laos\"],\n      \"VN\": [\"vietnam\", \"viet nam\"],\n      \"HK\": [\"hong kong\"],\n      \"TW\": [\"taiwan\"]\n  };\n  const COUNTRIES = {\n    cat1: [\"CY\",\"CA\",\"FR\",\"FI\",\"BH\",\"AU\",\"AD\",\"SE\",\"DE\",\"SA\",\"AT\",\"BE\",\"HK\",\"MT\",\"IS\",\"SM\",\"NL\",\"DK\",\"TW\",\"AE\",\"US\",\"BN\",\"CH\",\"NO\",\"GY\",\"QA\",\"MO\",\"IE\",\"LU\",\"SG\",\"LI\",\"GB\",\"GB-SCT\"],\n    cat2: [\"KR\",\"ME\",\"CL\",\"TT\",\"MV\",\"UY\",\"BS\",\"OM\",\"SC\",\"MY\",\"PA\",\"TR\",\"LV\",\"GR\",\"KZ\",\"SK\",\"HU\",\"RU\",\"RO\",\"EE\",\"AW\",\"PT\",\"PR\",\"HR\",\"KW\",\"JP\",\"NZ\",\"PL\",\"IL\",\"ES\",\"LT\",\"SI\",\"CZ\",\"IT\"],\n    cat3: [\"BZ\",\"TN\",\"GT\",\"IQ\",\"ZA\",\"FJ\",\"EC\",\"LY\",\"ID\",\"VN\",\"BT\",\"DZ\",\"PE\",\"PW\",\"BW\",\"DM\",\"PY\",\"MD\",\"GQ\",\"MN\",\"VC\",\"IR\",\"GD\",\"EG\",\"CO\",\"SR\",\"TM\",\"BA\",\"BB\",\"BR\",\"AL\",\"AM\",\"GA\",\"MX\",\"AZ\",\"TH\",\"LC\",\"CN\",\"MK\",\"DO\",\"AG\",\"AR\",\"GE\",\"CR\",\"MU\",\"RS\",\"BY\",\"KN\",\"XK\",\"BG\"],\n    cat4: [\"UA\",\"BI\",\"SS\",\"CF\",\"YE\",\"MZ\",\"MW\",\"SO\",\"CD\",\"LR\",\"MG\",\"NE\",\"AF\",\"SD\",\"SB\",\"ML\",\"HT\",\"VU\",\"BF\",\"LS\",\"TD\",\"GW\",\"TG\",\"GM\",\"KI\",\"SL\",\"PG\",\"UG\",\"KM\",\"PS\",\"RW\",\"TZ\",\"ET\",\"ZM\",\"FM\",\"BJ\",\"GN\",\"TL\",\"MM\",\"SN\",\"CM\",\"TJ\",\"TV\",\"NP\",\"CG\",\"ST\",\"PK\",\"KE\",\"ZW\",\"MH\",\"HN\",\"TO\",\"CI\",\"WS\",\"GH\",\"VE\",\"KH\",\"MR\",\"KG\",\"NI\",\"NG\",\"DJ\",\"AO\",\"LA\",\"BD\",\"BO\",\"MA\",\"JO\",\"LB\",\"NR\",\"IN\",\"NA\",\"CV\",\"UZ\",\"PH\",\"SZ\",\"JM\",\"SV\",\"LK\"]\n  };\n  \/\/ \u2500\u2500 Ecwid-Optionsnamen und -werte: bleiben exakt deutsch wie im Shop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const OPT_COMM_LANG = \"In welcher Sprache nimmst Du teil?\";\n  const OPT_STATUS    = \"Trifft etwas davon auf Dich zu?\";\n  const STATUS_LABEL = {\n    paar:        \"Zu zweit (gleicher Haushalt)\",\n    schueler:    \"Sch\u00fcler:innen\",\n    student:     \"Student\",\n    wiederholer: \"Wiederholer\",\n    apponly:     \"Digitale Teilnahme (App)\"\n  };\n  \/\/ \u2500\u2500 Shadow DOM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const host = document.getElementById(\"sw-host-ka\");\n  const shadow = host.attachShadow({ mode: \"open\" });\n  const styleEl = document.createElement(\"style\");\n  styleEl.textContent = `\n    :host {\n      display: block;\n      --bg:           #F5FAF6;\n      --card:         #FFFFFF;\n      --ink:          #0C1E14;\n      --ink-muted:    #27703F;\n      --accent:       #0C1E14;\n      --accent-light: #E6F2E8;\n      --border:       #C8E0CE;\n      --radius:       16px;\n      --radius-sm:    10px;\n    }\n    @keyframes wiz-spin { to { transform: rotate(360deg); } }\n    .sw-root {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 20px; font-weight: 400; color: var(--ink);\n      background: var(--bg); padding: 32px 20px;\n      display: flex; align-items: flex-start; justify-content: center;\n    }\n    .sw-card {\n      background: var(--card); border: 1px solid var(--border);\n      border-radius: 24px; padding: 36px 32px;\n      width: 100%; max-width: 780px;\n      box-shadow: 0 4px 24px rgba(12,30,20,0.08); box-sizing: border-box;\n    }\n    @media (max-width: 480px) {\n      .sw-root { padding: 16px 10px; }\n      .sw-card { padding: 24px 16px; border-radius: 16px; }\n    }\n    .sw-progress { display: flex; gap: 8px; margin-bottom: 32px; }\n    .sw-progress-step { flex: 1; height: 4px; background: var(--border); border-radius: 999px; transition: background 0.35s; }\n    .sw-progress-step.active { background: var(--accent); }\n    .sw-progress-step.done   { background: var(--accent); opacity: 0.4; }\n    .sw-step-label { font-size: 12px; font-weight: 400; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: 10px; }\n    .sw-heading { font-size: 26px; font-weight: 500; line-height: 1.2; margin: 0 0 6px; color: var(--accent); letter-spacing: 0.01em; }\n    .sw-subtext { font-size: 18px; font-weight: 400; color: var(--ink-muted); margin: 0 0 28px; line-height: 1.6; }\n    .sw-label { display: block; font-size: 18px; font-weight: 700; margin-bottom: 6px; color: var(--ink); }\n    .sw-select, .sw-text-input {\n      width: 100%; padding: 13px 15px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg);\n      font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-select {\n      appearance: none;\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2327703F' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: right 15px center;\n      cursor: pointer;\n    }\n    .sw-select:focus, .sw-text-input:focus {\n      outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1);\n    }\n    .sw-text-input { margin-bottom: 14px; }\n    .sw-redirect { display: none; margin-top: 12px; padding: 18px 20px; border-radius: var(--radius-sm); background: #FFF8F0; border: 1px solid rgba(180,80,0,0.2); font-size: 17px; line-height: 1.8; color: var(--ink); }\n    .sw-redirect strong { display: block; margin-bottom: 8px; font-size: 17px; color: #7A3500; }\n    .sw-redirect a { color: #27703F; text-decoration: underline; }\n    .sw-infobox {\n      margin-top: 12px; padding: 15px 17px; border-radius: var(--radius-sm);\n      background: var(--accent-light); border: 1px solid rgba(12,30,20,0.15);\n      font-size: 18px; font-weight: 400; line-height: 1.5;\n    }\n    .sw-infobox-title {\n      font-weight: 700; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase;\n      color: var(--accent); margin-bottom: 3px;\n    }\n    .sw-divider { border: 0; border-top: 1px solid var(--border); margin: 30px 0 24px; }\n    .sw-choice-row { display: flex; gap: 10px; flex-wrap: wrap; }\n    .sw-choice-card {\n      flex: 1; min-width: 150px; padding: 16px 14px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      text-align: center; cursor: pointer; font-size: 17px; line-height: 1.3;\n      transition: all 0.15s; background: var(--bg); box-sizing: border-box;\n    }\n    .sw-choice-card:hover { border-color: var(--accent); }\n    .sw-choice-card.active { background: var(--accent-light); border-color: var(--accent); font-weight: 700; color: var(--accent); }\n    @media (max-width: 480px) { .sw-choice-card { min-width: 100%; } }\n    .sw-person-block { margin-bottom: 8px; }\n    .sw-person-title { font-weight: 700; font-size: 21px; color: var(--accent); margin-bottom: 16px; }\n    .sw-field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 0; }\n    @media (max-width: 480px) { .sw-field-grid { grid-template-columns: 1fr; } }\n    .sw-range-header { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 22px; }\n    .sw-range-header-label { font-weight: 700; font-size: 18px; }\n    .sw-amount-display { display: flex; align-items: baseline; gap: 3px; }\n    .sw-amount-display span { font-size: 18px; font-weight: 400; }\n    .sw-amount-input {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 36px; font-weight: 700; color: var(--ink);\n      border: 2px solid var(--border); background: var(--bg);\n      text-align: right; width: 132px; padding: 4px 12px;\n      outline: none; border-radius: var(--radius-sm);\n      transition: background 0.15s, color 0.15s, border-color 0.15s, box-shadow 0.15s;\n    }\n    .sw-amount-input:hover { border-color: var(--accent); background: var(--accent-light); }\n    .sw-amount-input:focus { border-color: var(--accent); background: var(--accent-light); color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    input[type=range].sw-range {\n      -webkit-appearance: none; width: 100%; height: 6px;\n      border-radius: 999px; background: var(--border); outline: none; cursor: pointer;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb {\n      -webkit-appearance: none; width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35);\n      cursor: pointer; transition: transform 0.15s, box-shadow 0.15s;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb:hover { transform: scale(1.08); box-shadow: 0 0 0 9px rgba(12,30,20,0.18), 0 3px 12px rgba(12,30,20,0.4); }\n    input[type=range].sw-range::-webkit-slider-thumb:active { transform: scale(1.12); }\n    input[type=range].sw-range::-moz-range-thumb {\n      width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      border: none; box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); cursor: pointer;\n    }\n    input[type=range].sw-range.sw-pulse::-webkit-slider-thumb { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    input[type=range].sw-range.sw-pulse::-moz-range-thumb    { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    @keyframes sw-thumb-pulse {\n      0%, 100% { box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); }\n      50%      { box-shadow: 0 0 0 15px rgba(12,30,20,0.05), 0 3px 10px rgba(12,30,20,0.35); }\n    }\n    .sw-range-wrap { position: relative; }\n    .sw-markers { position: relative; height: 56px; margin-bottom: 8px; margin-left: 18px; margin-right: 18px; }\n    .sw-marker {\n      position: absolute; transform: translateX(-50%);\n      display: flex; flex-direction: column; align-items: center; gap: 2px;\n      justify-content: flex-end; height: 100%; pointer-events: auto; cursor: pointer;\n    }\n    .sw-marker-tick { width: 1px; height: 10px; background: var(--border); flex-shrink: 0; }\n    .sw-marker.active .sw-marker-tick { background: var(--accent); opacity: 0.5; }\n    .sw-marker-label { font-size: 11px; font-weight: 400; color: var(--ink-muted); white-space: nowrap; line-height: 1.2; text-align: center; order: -2; }\n    .sw-marker-amount { font-size: 13px; font-weight: 700; color: var(--ink-muted); order: -1; }\n    .sw-marker.active .sw-marker-label, .sw-marker.active .sw-marker-amount { color: var(--accent); }\n    @media (max-width: 540px) {\n      .sw-markers { display: none; }\n      .sw-markers-mobile { display: flex !important; }\n    }\n    .sw-markers-mobile {\n      display: none; flex-direction: column; gap: 0;\n      margin: 12px 0 4px; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden;\n    }\n    .sw-marker-mobile {\n      display: flex; align-items: center; justify-content: space-between;\n      padding: 10px 14px; cursor: pointer; border-bottom: 1px solid var(--border);\n      transition: background 0.15s; font-family: 'Tinos', Georgia, serif;\n    }\n    .sw-marker-mobile:last-child { border-bottom: 0; }\n    .sw-marker-mobile:hover { background: var(--accent-light); }\n    .sw-marker-mobile.active { background: var(--accent-light); }\n    .sw-marker-mobile-label { font-size: 15px; font-weight: 400; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-label { color: var(--accent); font-weight: 700; }\n    .sw-marker-mobile-amount { font-size: 16px; font-weight: 700; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-amount { color: var(--accent); }\n    .sw-summary-box { padding: 18px 20px; background: var(--accent-light); border: 1px solid rgba(12,30,20,0.2); border-radius: var(--radius-sm); margin-top: 20px; }\n    .sw-summary-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; font-size: 16px; color: var(--ink); }\n    .sw-summary-row.sw-summary-discount { color: #8A1F1F; }\n    .sw-summary-row.sw-summary-total { border-top: 1px solid rgba(12,30,20,0.25); margin-top: 8px; padding-top: 12px; font-weight: 700; font-size: 22px; color: var(--accent); }\n    .sw-summary-person-label { font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-muted); margin: 14px 0 2px; }\n    .sw-summary-person-label:first-child { margin-top: 0; }\n    .sw-btn-row { display: flex; gap: 10px; margin-top: 24px; flex-wrap: wrap; }\n    .sw-btn { flex: 1; min-width: 140px; padding: 15px 17px; border-radius: var(--radius-sm); font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 700; cursor: pointer; transition: all 0.2s; border: 0; }\n    .sw-btn-primary { background: var(--accent); color: #fff; }\n    .sw-btn-primary:hover { background: #27703F; transform: translateY(-1px); }\n    .sw-btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }\n    .sw-btn-secondary { background: transparent; color: var(--ink); border: 1px solid var(--border); }\n    .sw-btn-secondary:hover { background: var(--bg); }\n    .sw-error { display: none; margin-top: 15px; padding: 13px 15px; border-radius: var(--radius-sm); background: #FFF3F3; border: 1px solid rgba(220,30,30,0.2); color: #8A1F1F; font-size: 18px; font-weight: 400; line-height: 1.5; white-space: pre-wrap; }\n    .wiz-spinner { display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.4); border-top-color: #fff; border-radius: 50%; animation: wiz-spin 0.7s linear infinite; vertical-align: middle; margin-right: 8px; }\n    .sw-country-search-wrap { position: relative; margin-bottom: 10px; }\n    .sw-country-search-icon { position: absolute; left: 18px; top: 50%; transform: translateY(-50%); color: var(--ink-muted); pointer-events: none; opacity: 0.5; }\n    .sw-country-search {\n      width: 100%; padding: 13px 15px 13px 54px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg); font-family: 'Tinos', Georgia, serif;\n      font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-country-search:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    .sw-country-list { max-height: 240px; overflow-y: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }\n    .sw-country-item { padding: 11px 15px; cursor: pointer; font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; display: flex; justify-content: space-between; align-items: center; transition: background 0.15s; border-bottom: 1px solid var(--border); }\n    .sw-country-item:last-child { border-bottom: 0; }\n    .sw-country-item:hover { background: var(--accent-light); }\n    .sw-country-item.selected { background: var(--accent-light); font-weight: 700; }\n    .sw-country-item-cat { font-size: 12px; color: var(--ink-muted); background: var(--border); padding: 2px 8px; border-radius: 999px; }\n    .sw-country-empty { padding: 15px; font-size: 18px; color: var(--ink-muted); text-align: center; }\n    .sw-step { display: none; }\n    .sw-step.active { display: block; }\n  `;\n  shadow.appendChild(styleEl);\n  const wrapper = document.createElement(\"div\");\n  wrapper.innerHTML = `\n    <div class=\"sw-root\">\n      <div class=\"sw-card\">\n        <div class=\"sw-progress\">\n          <div class=\"sw-progress-step\" id=\"sw-prog-1\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-2\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-3\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-4\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-5\"><\/div>\n        <\/div>\n        <!-- STEP 1 -->\n        <div class=\"sw-step active\" id=\"sw-step-welcome\">\n          <div class=\"sw-step-label\">\u10dc\u10d0\u10d1\u10d8\u10ef\u10d8 1 \/ 5<\/div>\n          <h2 class=\"sw-heading\">\u10db\u10dd\u10d2\u10d4\u10e1\u10d0\u10da\u10db\u10d4\u10d1\u10d8\u10d7<\/h2>\n          <p class=\"sw-subtext\">\u10e0\u10d0\u10db\u10d3\u10d4\u10dc\u10d8\u10db\u10d4 \u10dc\u10d0\u10d1\u10d8\u10ef\u10e8\u10d8 \u10d0\u10d8\u10e0\u10e9\u10d4\u10d5\u10d7 \u10e5\u10d5\u10d4\u10e7\u10d0\u10dc\u10d0\u10e1, \u10d4\u10dc\u10d0\u10e1, \u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d0\u10ea\u10d8\u10d8\u10e1 \u10e2\u10d8\u10de\u10e1\u10d0 \u10d3\u10d0 \u10e8\u10d4\u10dc\u10d0\u10e2\u10d0\u10dc\u10e1 \u2013 \u10e8\u10d4\u10db\u10d3\u10d4\u10d2 \u10de\u10d8\u10e0\u10d3\u10d0\u10de\u10d8\u10e0 \u10d2\u10d0\u10d3\u10d0\u10ee\u10d3\u10d0\u10d6\u10d4 \u10d2\u10d0\u10d3\u10d0\u10ee\u10d5\u10d0\u10da\u10d7.<\/p>\n          <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-welcome-next\" style=\"width:100%;\">\u10e4\u10d0\u10e1\u10d4\u10d1\u10d8 \u10d3\u10d0 \u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d0\u10ea\u10d8\u10d0<\/button>\n        <\/div>\n        <!-- STEP 2 -->\n        <div class=\"sw-step\" id=\"sw-step-country\">\n          <div class=\"sw-step-label\">\u10dc\u10d0\u10d1\u10d8\u10ef\u10d8 2 \/ 5<\/div>\n          <h2 class=\"sw-heading\">\u10e1\u10d0\u10d3 \u10ea\u10ee\u10dd\u10d5\u10e0\u10dd\u10d1\u10d7?<\/h2>\n          <label class=\"sw-label\">\u10e5\u10d5\u10d4\u10e7\u10d0\u10dc\u10d0<\/label>\n          <div class=\"sw-country-search-wrap\">\n            <svg class=\"sw-country-search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.35-4.35\"\/><\/svg>\n            <input type=\"text\" class=\"sw-country-search\" id=\"sw-country-search\" placeholder=\"\u10e5\u10d5\u10d4\u10e7\u10dc\u10d8\u10e1 \u10eb\u10d8\u10d4\u10d1\u10d0\u2026\" autocomplete=\"off\">\n          <\/div>\n          <div class=\"sw-country-list\" id=\"sw-country-list\"><\/div>\n          <input type=\"hidden\" id=\"sw-country\">\n          <div class=\"sw-infobox\" id=\"sw-catInfo\">\n            <div class=\"sw-infobox-title\">\u10e4\u10d0\u10e1\u10d8\u10e1 \u10d9\u10d0\u10e2\u10d4\u10d2\u10dd\u10e0\u10d8\u10d0<\/div>\n            <div id=\"sw-catText\">\u10d2\u10d7\u10ee\u10dd\u10d5\u10d7, \u10ef\u10d4\u10e0 \u10d0\u10d8\u10e0\u10e9\u10d8\u10dd\u10d7 \u10e5\u10d5\u10d4\u10e7\u10d0\u10dc\u10d0.<\/div>\n          <\/div>\n          <div class=\"sw-redirect\" id=\"sw-redirect-russia\">\n            <strong>\u10e0\u10e3\u10e1\u10d4\u10d7\u10d8\u10d3\u10d0\u10dc \u10db\u10dd\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10d4\u10d1\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1 \u10ea\u10d0\u10da\u10d9\u10d4 \u10e1\u10d0\u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d0\u10ea\u10d8\u10dd \u10d2\u10d5\u10d4\u10e0\u10d3\u10d8\u10d0.<\/strong>\n            \u10e9\u10d5\u10d4\u10dc\u10d8 \u10d2\u10d0\u10d3\u10d0\u10ee\u10d3\u10d8\u10e1 \u10e1\u10d8\u10e1\u10e2\u10d4\u10db\u10d0 \u10e0\u10e3\u10e1\u10d4\u10d7\u10e8\u10d8 \u10ee\u10d4\u10da\u10db\u10d8\u10e1\u10d0\u10ec\u10d5\u10d3\u10dd\u10db\u10d8 \u10d0\u10e0 \u10d0\u10e0\u10d8\u10e1. \u10d2\u10d7\u10ee\u10dd\u10d5\u10d7, \u10d3\u10d0\u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d8\u10e0\u10d3\u10d4\u10d7 \u10d8\u10e5:<br><br>\n            <a href=\"https:\/\/spiritual-activity.org\/ru\/anmeldung-basic-exercises\/\">\u10e0\u10e3\u10e1\u10e3\u10da\u10d8 \u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d0\u10ea\u10d8\u10d8\u10e1 \u10d2\u10d5\u10d4\u10e0\u10d3\u10d8<\/a>\n          <\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-country-back\">\u10e3\u10d9\u10d0\u10dc<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-country-next\" disabled>\u10e8\u10d4\u10db\u10d3\u10d4\u10d2\u10d8<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 3 -->\n        <div class=\"sw-step\" id=\"sw-step-langform\">\n          <div class=\"sw-step-label\">\u10dc\u10d0\u10d1\u10d8\u10ef\u10d8 3 \/ 5<\/div>\n          <h2 class=\"sw-heading\">\u10d4\u10dc\u10d0 \u10d3\u10d0 \u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d0\u10ea\u10d8\u10d8\u10e1 \u10e2\u10d8\u10de\u10d8<\/h2>\n          <label class=\"sw-label\" for=\"sw-commLang\">\u10e0\u10dd\u10db\u10d4\u10da \u10d4\u10dc\u10d0\u10d6\u10d4 \u10db\u10d8\u10d8\u10e6\u10d4\u10d1\u10d7 \u10db\u10dd\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10dd\u10d1\u10d0\u10e1?<\/label>\n          <select class=\"sw-select\" id=\"sw-commLang\">\n            <option value=\"\" selected disabled>\u10d2\u10d7\u10ee\u10dd\u10d5\u10d7, \u10d0\u10d8\u10e0\u10e9\u10d8\u10dd\u10d7\u2026<\/option>\n            <option value=\"Deutsch\">\u10d2\u10d4\u10e0\u10db\u10d0\u10dc\u10e3\u10da\u10d8<\/option>\n            <option value=\"Englisch\">\u10d8\u10dc\u10d2\u10da\u10d8\u10e1\u10e3\u10e0\u10d8<\/option>\n            <option value=\"Spanisch\">\u10d4\u10e1\u10de\u10d0\u10dc\u10e3\u10e0\u10d8<\/option>\n            <option value=\"Franz\u00f6sisch\">\u10e4\u10e0\u10d0\u10dc\u10d2\u10e3\u10da\u10d8<\/option>\n            <option value=\"Italienisch\">\u10d8\u10e2\u10d0\u10da\u10d8\u10e3\u10e0\u10d8<\/option>\n            <option value=\"Portugiesisch\">\u10de\u10dd\u10e0\u10e2\u10e3\u10d2\u10d0\u10da\u10d8\u10e3\u10e0\u10d8<\/option>\n            <option value=\"Arabisch\">\u10d0\u10e0\u10d0\u10d1\u10e3\u10da\u10d8<\/option>\n            <option value=\"Hebr\u00e4isch\">\u10d4\u10d1\u10e0\u10d0\u10e3\u10da\u10d8<\/option>\n            <option value=\"Farsi\">\u10e1\u10de\u10d0\u10e0\u10e1\u10e3\u10da\u10d8<\/option>\n            <option value=\"Georgisch\">\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8<\/option>\n            <option value=\"Ukrainisch\">\u10e3\u10d9\u10e0\u10d0\u10d8\u10dc\u10e3\u10da\u10d8<\/option>\n            <option value=\"Niederl\u00e4ndisch\">\u10f0\u10dd\u10da\u10d0\u10dc\u10d3\u10d8\u10e3\u10e0\u10d8<\/option>\n            <option value=\"T\u00fcrkisch\">\u10d7\u10e3\u10e0\u10e5\u10e3\u10da\u10d8<\/option>\n            <option value=\"Bulgarisch\">\u10d1\u10e3\u10da\u10d2\u10d0\u10e0\u10e3\u10da\u10d8<\/option>\n            <option value=\"Russisch\">\u10e0\u10e3\u10e1\u10e3\u10da\u10d8<\/option>\n            <option value=\"Chinesisch\">\u10e9\u10d8\u10dc\u10e3\u10e0\u10d8<\/option>\n            <option value=\"Japanisch\">\u10d8\u10d0\u10de\u10dd\u10dc\u10e3\u10e0\u10d8<\/option>\n            <option value=\"Koreanisch\">\u10d9\u10dd\u10e0\u10d4\u10e3\u10da\u10d8<\/option>\n          <\/select>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note\" style=\"display:none; margin-top:14px;\">\n            <div class=\"sw-infobox-title\">\u1caa\u1c98\u1ca4\u1ca0\u1ca3\u1c9a\u1c98 \u1c9b\u1c9d\u1c9c\u1c90\u1cac\u1c98\u1c9a\u1c94\u1c9d\u1c91\u1c90 \u00b7 \u221235\u20ac<\/div>\n            <div id=\"sw-apponly-note-text\">\u10d7\u10e5\u10d5\u10d4\u10dc \u10d8\u10e6\u10d4\u10d1\u10d7 \u10db\u10dd\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10dd\u10d1\u10d0\u10e1 \u10ea\u10d8\u10e4\u10e0\u10e3\u10da\u10d0\u10d3. \u10e4\u10d0\u10e1\u10d3\u10d0\u10d9\u10da\u10d4\u10d1\u10d0 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10d0\u10d8\u10e1\u10d0\u10ee\u10d4\u10d1\u10d0 \u10e8\u10d4\u10ef\u10d0\u10db\u10d4\u10d1\u10d0\u10e8\u10d8.<\/div>\n          <\/div>\n          <label class=\"sw-label\" style=\"margin-top:26px;\">\u10e0\u10dd\u10d2\u10dd\u10e0 \u10d2\u10e1\u10e3\u10e0\u10d7 \u10d3\u10d0\u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d8\u10e0\u10d3\u10d4\u10d7?<\/label>\n          <div class=\"sw-choice-row\" id=\"sw-form-choices\">\n            <div class=\"sw-choice-card active\" data-form=\"einzeln\">\u10d8\u10dc\u10d3\u10d8\u10d5\u10d8\u10d3\u10e3\u10d0\u10da\u10e3\u10e0\u10d0\u10d3<\/div>\n            <div class=\"sw-choice-card\" data-form=\"paar\">\u10e0\u10dd\u10d2\u10dd\u10e0\u10ea \u10ec\u10e7\u10d5\u10d8\u10da\u10d8<br><span style=\"font-size:13px; font-weight:400;\">(\u10d4\u10e0\u10d7\u10d8 \u10dd\u10ef\u10d0\u10ee\u10d8)<\/span><\/div>\n            <div class=\"sw-choice-card\" data-form=\"gruppe\">\u10e0\u10dd\u10d2\u10dd\u10e0\u10ea \u10ef\u10d2\u10e3\u10e4\u10d8<br><span style=\"font-size:13px; font-weight:400;\">(4 \u10d0\u10dc \u10db\u10d4\u10e2\u10d8 \u10de\u10d8\u10e0\u10d8)<\/span><\/div>\n          <\/div>\n          <div class=\"sw-infobox\" id=\"sw-gruppe-note\" style=\"display:none; margin-top:18px;\">\n            <div class=\"sw-infobox-title\">\u10ef\u10d2\u10e3\u10e4\u10e3\u10e0\u10d8 \u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d0\u10ea\u10d8\u10d0<\/div>\n            <div>\u10db\u10d0\u10d3\u10da\u10dd\u10d1\u10d0\u10e1 \u10d2\u10d8\u10ee\u10d3\u10d8\u10d7 \u10d8\u10dc\u10e2\u10d4\u10e0\u10d4\u10e1\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1. \u10e8\u10d4\u10db\u10d3\u10d4\u10d2 \u10d2\u10d5\u10d4\u10e0\u10d3\u10d6\u10d4 \u10e8\u10d4\u10d2\u10d8\u10eb\u10da\u10d8\u10d0\u10d7 \u10ef\u10d2\u10e3\u10e4\u10e3\u10e0\u10d8 \u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d0\u10ea\u10d8\u10d8\u10e1 \u10d2\u10d0\u10d5\u10da\u10d0. \u10d2\u10d7\u10ee\u10dd\u10d5\u10d7, \u10d2\u10d0\u10d8\u10d7\u10d5\u10d0\u10da\u10d8\u10e1\u10ec\u10d8\u10dc\u10dd\u10d7: \u10ef\u10d2\u10e3\u10e4\u10e3\u10e0\u10d8 \u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d0\u10ea\u10d8\u10d0 \u10ee\u10d4\u10da\u10db\u10d8\u10e1\u10d0\u10ec\u10d5\u10d3\u10dd\u10db\u10d8\u10d0 \u10db\u10ee\u10dd\u10da\u10dd\u10d3 \u10d2\u10d4\u10e0\u10db\u10d0\u10dc\u10e3\u10da \u10d3\u10d0 \u10d8\u10dc\u10d2\u10da\u10d8\u10e1\u10e3\u10e0 \u10d4\u10dc\u10d4\u10d1\u10d6\u10d4.<\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-langform\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-langform-back\">\u10e3\u10d9\u10d0\u10dc<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-langform-next\" disabled>\u10e8\u10d4\u10db\u10d3\u10d4\u10d2\u10d8<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-gruppe-redirect\" style=\"display:none;\">\u10d2\u10d0\u10d2\u10e0\u10eb\u10d4\u10da\u10d4\u10d1\u10d0 \u10ef\u10d2\u10e3\u10e4\u10e3\u10e0 \u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d0\u10ea\u10d8\u10d0\u10d6\u10d4<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4A -->\n        <div class=\"sw-step\" id=\"sw-step-details-solo\">\n          <div class=\"sw-step-label\">\u10dc\u10d0\u10d1\u10d8\u10ef\u10d8 4 \/ 5<\/div>\n          <h2 class=\"sw-heading\">\u10db\u10ea\u10d8\u10e0\u10d4 \u10d3\u10d4\u10e2\u10d0\u10da\u10d4\u10d1\u10d8 \u10d7\u10e5\u10d5\u10d4\u10dc \u10e8\u10d4\u10e1\u10d0\u10ee\u10d4\u10d1<\/h2>\n          <p class=\"sw-subtext\">\u10e8\u10d4\u10d2\u10d4\u10e1\u10d0\u10d1\u10d0\u10db\u10d4\u10d1\u10d0\u10d7 \u10e0\u10dd\u10db\u10d4\u10da\u10d8\u10db\u10d4 \u10e5\u10d5\u10d4\u10db\u10dd\u10d7 \u10e9\u10d0\u10db\u10dd\u10d7\u10d5\u10da\u10d8\u10da\u10d8? \u10d4\u10e1 \u10d3\u10d0\u10d2\u10d5\u10d4\u10ee\u10db\u10d0\u10e0\u10d4\u10d1\u10d0 \u10e8\u10d4\u10db\u10dd\u10d2\u10d7\u10d0\u10d5\u10d0\u10d6\u10dd\u10d7 \u10e8\u10d4\u10e1\u10d0\u10e4\u10d4\u10e0\u10d8\u10e1\u10d8 \u10e8\u10d4\u10dc\u10d0\u10e2\u10d0\u10dc\u10d8.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u1caa\u1c98\u1ca4\u1ca0\u1ca3\u1c9a\u1c98 \u1c9b\u1c9d\u1c9c\u1c90\u1cac\u1c98\u1c9a\u1c94\u1c9d\u1c91\u1c90 \u00b7 \u221235\u20ac<\/div>\n            <div>\u10d7\u10e5\u10d5\u10d4\u10dc \u10d8\u10e6\u10d4\u10d1\u10d7 \u10db\u10dd\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10dd\u10d1\u10d0\u10e1 \u10ea\u10d8\u10e4\u10e0\u10e3\u10da\u10d0\u10d3. \u10e4\u10d0\u10e1\u10d3\u10d0\u10d9\u10da\u10d4\u10d1\u10d0 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10d0\u10d8\u10e1\u10d0\u10ee\u10d4\u10d1\u10d0 \u10e8\u10d4\u10ef\u10d0\u10db\u10d4\u10d1\u10d0\u10e8\u10d8.<\/div>\n          <\/div>\n          <label class=\"sw-label\">\u10d2\u10d7\u10ee\u10dd\u10d5\u10d7, \u10d0\u10d8\u10e0\u10e9\u10d8\u10dd\u10d7<\/label>\n          <select class=\"sw-select\" id=\"sw-solo-status\">\n            <option value=\"\" disabled selected>\u10d2\u10d7\u10ee\u10dd\u10d5\u10d7, \u10d0\u10d8\u10e0\u10e9\u10d8\u10dd\u10d7\u2026<\/option>\n            <option value=\"normal\">\u10e9\u10d5\u10d4\u10e3\u10da\u10d4\u10d1\u10e0\u10d8\u10d5\u10d8 \u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d0\u10ea\u10d8\u10d0<\/option>\n            <option value=\"schueler\">\u10e1\u10d9\u10dd\u10da\u10d8\u10e1 \u10db\u10dd\u10e1\u10ec\u10d0\u10d5\u10da\u10d4 (\u221250%)<\/option>\n            <option value=\"student\">\u10de\u10e0\u10dd\u10e4\u10d4\u10e1\u10d8\u10e3\u10da\u10d8 \u10e1\u10d0\u10e1\u10ec\u10d0\u10d5\u10da\u10d4\u10d1\u10da\u10d8\u10e1 \/ \u10e3\u10dc\u10d8\u10d5\u10d4\u10e0\u10e1\u10d8\u10e2\u10d4\u10e2\u10d8\u10e1 \u10e1\u10e2\u10e3\u10d3\u10d4\u10dc\u10e2\u10d8 (\u221225%)<\/option>\n            <option value=\"wiederholer\">\u10d5\u10d8\u10db\u10d4\u10dd\u10e0\u10d4\u10d1 \u10e1\u10d0\u10db\u10e8\u10d5\u10d8\u10dc\u10d5\u10d4\u10da\u10d8\u10e1 \u10e1\u10d0\u10d5\u10d0\u10e0\u10ef\u10d8\u10e8\u10dd\u10d4\u10d1\u10d8\u10e1 \u10d9\u10e3\u10e0\u10e1\u10e1 (\u10d0\u10ee\u10d0\u10da\u10d8 \u10d1\u10d0\u10e0\u10d0\u10d7\u10d4\u10d1\u10d8\u10e1 \u10dc\u10d0\u10d9\u10e0\u10d4\u10d1\u10d8 \u10d0\u10e0 \u10db\u10ed\u10d8\u10e0\u10d3\u10d4\u10d1\u10d0 \u2212 30%)<\/option>\n          <\/select>\n          <div class=\"sw-error\" id=\"sw-error-details-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-solo-back\">\u10e3\u10d9\u10d0\u10dc<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-solo-next\" disabled>\u10e8\u10d4\u10db\u10d3\u10d4\u10d2\u10d8<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4B -->\n        <div class=\"sw-step\" id=\"sw-step-details-paar\">\n          <div class=\"sw-step-label\">\u10dc\u10d0\u10d1\u10d8\u10ef\u10d8 4 \/ 5<\/div>\n          <h2 class=\"sw-heading\">\u10d8\u10dc\u10e4\u10dd\u10e0\u10db\u10d0\u10ea\u10d8\u10d0 \u10d7\u10e5\u10d5\u10d4\u10dc \u10dd\u10e0\u10d8\u10d5\u10d4\u10e1 \u10e8\u10d4\u10e1\u10d0\u10ee\u10d4\u10d1<\/h2>\n          <p class=\"sw-subtext\">\u10d2\u10d7\u10ee\u10dd\u10d5\u10d7, \u10e8\u10d4\u10d8\u10e7\u10d5\u10d0\u10dc\u10dd\u10d7 \u10db\u10dd\u10dc\u10d0\u10ea\u10d4\u10db\u10d4\u10d1\u10d8 \u10dd\u10e0\u10d8\u10d5\u10d4 \u10de\u10d8\u10e0\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1. \u10db\u10d4\u10dd\u10e0\u10d4 \u10de\u10d8\u10e0\u10d8 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10db\u10d8\u10d8\u10e6\u10d4\u10d1\u10e1 50%-\u10d8\u10d0\u10dc \u10e4\u10d0\u10e1\u10d3\u10d0\u10d9\u10da\u10d4\u10d1\u10d0\u10e1.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-paar-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u1caa\u1c98\u1ca4\u1ca0\u1ca3\u1c9a\u1c98 \u1c9b\u1c9d\u1c9c\u1c90\u1cac\u1c98\u1c9a\u1c94\u1c9d\u1c91\u1c90 \u00b7 \u221235\u20ac<\/div>\n            <div>\u10d7\u10e5\u10d5\u10d4\u10dc \u10d8\u10e6\u10d4\u10d1\u10d7 \u10db\u10dd\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10dd\u10d1\u10d0\u10e1 \u10ea\u10d8\u10e4\u10e0\u10e3\u10da\u10d0\u10d3. \u10e4\u10d0\u10e1\u10d3\u10d0\u10d9\u10da\u10d4\u10d1\u10d0 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10d0\u10d8\u10e1\u10d0\u10ee\u10d4\u10d1\u10d0 \u10e8\u10d4\u10ef\u10d0\u10db\u10d4\u10d1\u10d0\u10e8\u10d8.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\u10de\u10d8\u10e0\u10d8 1<\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\u10e1\u10d0\u10ee\u10d4\u10da\u10d8<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-vorname\"><\/div>\n              <div><label class=\"sw-label\">\u10d2\u10d5\u10d0\u10e0\u10d8<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\u10d4\u10da. \u10e4\u10dd\u10e1\u10e2\u10d0<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p1-email\">\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\u10de\u10d8\u10e0\u10d8 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\u10e1\u10d0\u10ee\u10d4\u10da\u10d8<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-vorname\"><\/div>\n              <div><label class=\"sw-label\">\u10d2\u10d5\u10d0\u10e0\u10d8<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\u10d4\u10da. \u10e4\u10dd\u10e1\u10e2\u10d0<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p2-email\">\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-details-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-paar-back\">\u10e3\u10d9\u10d0\u10dc<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-paar-next\" disabled>\u10e8\u10d4\u10db\u10d3\u10d4\u10d2\u10d8<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5A -->\n        <div class=\"sw-step\" id=\"sw-step-amount-solo\">\n          <div class=\"sw-step-label\">\u10dc\u10d0\u10d1\u10d8\u10ef\u10d8 5 \/ 5<\/div>\n          <h2 class=\"sw-heading\">\u10e8\u10d4\u10dc\u10d0\u10e2\u10d0\u10dc\u10d8\u10e1 \u10d0\u10e0\u10e9\u10d4\u10d5\u10d0<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-solo\">\u10d0\u10e5 \u10e8\u10d4\u10d2\u10d8\u10eb\u10da\u10d8\u10d0\u10d7 \u10d0\u10d8\u10e0\u10e9\u10d8\u10dd\u10d7 \u10e8\u10d4\u10dc\u10d0\u10e2\u10d0\u10dc\u10d8, \u10e0\u10dd\u10db\u10d4\u10da\u10d8\u10ea \u10d7\u10e5\u10d5\u10d4\u10dc\u10d7\u10d5\u10d8\u10e1 \u10e8\u10d4\u10e1\u10d0\u10e4\u10d4\u10e0\u10d8\u10e1\u10d0\u10d3 \u10db\u10d8\u10d2\u10d0\u10e9\u10dc\u10d8\u10d0\u10d7.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-solo\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u1caa\u1c98\u1ca4\u1ca0\u1ca3\u1c9a\u1c98 \u1c9b\u1c9d\u1c9c\u1c90\u1cac\u1c98\u1c9a\u1c94\u1c9d\u1c91\u1c90 \u00b7 \u221235\u20ac<\/div>\n            <div>\u10d7\u10e5\u10d5\u10d4\u10dc \u10d8\u10e6\u10d4\u10d1\u10d7 \u10db\u10dd\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10dd\u10d1\u10d0\u10e1 \u10ea\u10d8\u10e4\u10e0\u10e3\u10da\u10d0\u10d3. \u10e4\u10d0\u10e1\u10d3\u10d0\u10d9\u10da\u10d4\u10d1\u10d0 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10d0\u10d8\u10e1\u10d0\u10ee\u10d4\u10d1\u10d0 \u10e8\u10d4\u10ef\u10d0\u10db\u10d4\u10d1\u10d0\u10e8\u10d8.<\/div>\n          <\/div>\n          <div class=\"sw-range-header\">\n            <div class=\"sw-range-header-label\">\u10d7\u10e5\u10d5\u10d4\u10dc\u10d8 \u10d7\u10d0\u10dc\u10ee\u10d0<\/div>\n            <div class=\"sw-amount-display\">\n              <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-solo\" value=\"360\">\n              <span>\u20ac<\/span>\n            <\/div>\n          <\/div>\n          <div class=\"sw-range-wrap\">\n            <div class=\"sw-markers\" id=\"sw-markers-solo\"><\/div>\n            <input type=\"range\" class=\"sw-range\" id=\"sw-amount-solo\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n            <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-solo\"><\/div>\n          <\/div>\n          <p style=\"margin-top:18px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \u10d7\u10e3 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7\u10d8 \u10e4\u10d8\u10dc\u10d0\u10dc\u10e1\u10e3\u10e0\u10d8 \u10e8\u10d4\u10e6\u10d0\u10d5\u10d0\u10d7\u10d8 \u10d2\u10ed\u10d8\u10e0\u10d3\u10d4\u10d1\u10d0\u10d7, \u10d2\u10d7\u10ee\u10dd\u10d5\u10d7, \u10db\u10dd\u10d2\u10d5\u10ec\u10d4\u10e0\u10dd\u10d7:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-solo\">\n            <div class=\"sw-summary-row\"><span>\u10d0\u10e0\u10e9\u10d4\u10e3\u10da\u10d8 \u10e8\u10d4\u10dc\u10d0\u10e2\u10d0\u10dc\u10d8<\/span><span id=\"sw-solo-chosen\">360\u20ac<\/span><\/div>\n            <div id=\"sw-solo-discounts\"><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-solo\" style=\"display:none;\"><span>\u10db\u10d8\u10ec\u10dd\u10d3\u10d4\u10d1\u10d0<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\u10e1\u10e3\u10da<\/span><span><span id=\"sw-solo-total\">360<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-solo-back\">\u10e3\u10d9\u10d0\u10dc<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-solo\">\u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d0\u10ea\u10d8\u10d0<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5B -->\n        <div class=\"sw-step\" id=\"sw-step-amount-paar\">\n          <div class=\"sw-step-label\">\u10dc\u10d0\u10d1\u10d8\u10ef\u10d8 5 \/ 5<\/div>\n          <h2 class=\"sw-heading\">\u10e8\u10d4\u10dc\u10d0\u10e2\u10d0\u10dc\u10d4\u10d1\u10d8\u10e1 \u10d0\u10e0\u10e9\u10d4\u10d5\u10d0<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-paar\">\u10d7\u10d8\u10d7\u10dd\u10d4\u10e3\u10da\u10d8 \u10de\u10d8\u10e0\u10d8 \u10d8\u10e0\u10e9\u10d4\u10d5\u10e1 \u10e1\u10d0\u10d9\u10e3\u10d7\u10d0\u10e0 \u10e8\u10d4\u10dc\u10d0\u10e2\u10d0\u10dc\u10e1. \u10db\u10d4\u10dd\u10e0\u10d4 \u10de\u10d8\u10e0\u10d8 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10db\u10d8\u10d8\u10e6\u10d4\u10d1\u10e1 50%-\u10d8\u10d0\u10dc \u10e4\u10d0\u10e1\u10d3\u10d0\u10d9\u10da\u10d4\u10d1\u10d0\u10e1.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-paar\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u1caa\u1c98\u1ca4\u1ca0\u1ca3\u1c9a\u1c98 \u1c9b\u1c9d\u1c9c\u1c90\u1cac\u1c98\u1c9a\u1c94\u1c9d\u1c91\u1c90 \u00b7 \u221235\u20ac<\/div>\n            <div>\u10d7\u10e5\u10d5\u10d4\u10dc \u10d8\u10e6\u10d4\u10d1\u10d7 \u10db\u10dd\u10dc\u10d0\u10ec\u10d8\u10da\u10d4\u10dd\u10d1\u10d0\u10e1 \u10ea\u10d8\u10e4\u10e0\u10e3\u10da\u10d0\u10d3. \u10e4\u10d0\u10e1\u10d3\u10d0\u10d9\u10da\u10d4\u10d1\u10d0 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10d0\u10d8\u10e1\u10d0\u10ee\u10d4\u10d1\u10d0 \u10e8\u10d4\u10ef\u10d0\u10db\u10d4\u10d1\u10d0\u10e8\u10d8.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p1-title\">\u10de\u10d8\u10e0\u10d8 1<\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\u10e8\u10d4\u10dc\u10d0\u10e2\u10d0\u10dc\u10d8<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p1\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p1\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p1\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p1\"><\/div>\n            <\/div>\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p2-title\">\u10de\u10d8\u10e0\u10d8 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\u10e8\u10d4\u10dc\u10d0\u10e2\u10d0\u10dc\u10d8<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p2\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p2\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p2\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p2\"><\/div>\n            <\/div>\n          <\/div>\n          <p style=\"margin-top:8px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \u10d7\u10e3 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7\u10d8 \u10e4\u10d8\u10dc\u10d0\u10dc\u10e1\u10e3\u10e0\u10d8 \u10e8\u10d4\u10e6\u10d0\u10d5\u10d0\u10d7\u10d8 \u10d2\u10ed\u10d8\u10e0\u10d3\u10d4\u10d1\u10d0\u10d7, \u10d2\u10d7\u10ee\u10dd\u10d5\u10d7, \u10db\u10dd\u10d2\u10d5\u10ec\u10d4\u10e0\u10dd\u10d7:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-paar\">\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p1-label\">\u10de\u10d8\u10e0\u10d8 1<\/div>\n            <div class=\"sw-summary-row\"><span>\u10d0\u10e0\u10e9\u10d4\u10e3\u10da\u10d8 \u10e8\u10d4\u10dc\u10d0\u10e2\u10d0\u10dc\u10d8<\/span><span id=\"sw-p1-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p1-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\u10e8\u10e3\u10d0\u10da\u10d4\u10d3\u10e3\u10e0\u10d8 \u10ef\u10d0\u10db\u10d8<\/span><span id=\"sw-p1-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p2-label\">\u10de\u10d8\u10e0\u10d8 2<\/div>\n            <div class=\"sw-summary-row\"><span>\u10d0\u10e0\u10e9\u10d4\u10e3\u10da\u10d8 \u10e8\u10d4\u10dc\u10d0\u10e2\u10d0\u10dc\u10d8<\/span><span id=\"sw-p2-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p2-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\u10e8\u10e3\u10d0\u10da\u10d4\u10d3\u10e3\u10e0\u10d8 \u10ef\u10d0\u10db\u10d8<\/span><span id=\"sw-p2-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-paar\" style=\"display:none;\"><span>\u10db\u10d8\u10ec\u10dd\u10d3\u10d4\u10d1\u10d0<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\u10e1\u10e3\u10da<\/span><span><span id=\"sw-paar-total\">0<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-paar-back\">\u10e3\u10d9\u10d0\u10dc<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-paar\">\u10d2\u10d0\u10d3\u10d0\u10ee\u10d3\u10d0\u10d6\u10d4 \u10d2\u10d0\u10d3\u10d0\u10e1\u10d5\u10da\u10d0<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  `;\n  shadow.appendChild(wrapper);\n  const $ = (id) => shadow.getElementById(id);\n  const COUNTRY_TO_CAT = {};\n  Object.keys(COUNTRIES).forEach(cat => COUNTRIES[cat].forEach(code => COUNTRY_TO_CAT[code] = cat));\n  function getCountryName(code) {\n    if (COUNTRY_NAMES[code]) return COUNTRY_NAMES[code];\n    try { return new Intl.DisplayNames([\"ka\"], { type: \"region\" }).of(code) || code; }\n    catch { return code; }\n  }\n\n  function getCountryAliases(code) {\n    const list = [];\n    \/\/ Intl-Name als Fallback, falls er vom festen CLDR-Namen abweicht\n    if (COUNTRY_NAMES[code]) {\n      try {\n        const intlName = new Intl.DisplayNames([\"ka\"], { type: \"region\" }).of(code);\n        if (intlName && intlName !== COUNTRY_NAMES[code]) list.push(intlName.toLowerCase());\n      } catch {}\n    }\n    \/\/ Englischer Name als lateinische Fallback-Schreibweise fuer alle Laender\n    try {\n      const enName = new Intl.DisplayNames([\"en\"], { type: \"region\" }).of(code);\n      if (enName) list.push(enName.toLowerCase());\n    } catch {}\n    (COUNTRY_SEARCH_ALIASES[code] || []).forEach(a => list.push(a.toLowerCase()));\n    return list;\n  }\n  function getAllCountriesSorted() {\n    const all = [];\n    [\"cat1\",\"cat2\",\"cat3\",\"cat4\"].forEach(cat => {\n      COUNTRIES[cat]\n        .map(code => ({ code, name: getCountryName(code), cat, aliases: getCountryAliases(code) }))\n        .sort((a, b) => a.name.localeCompare(b.name, \"ka\"))\n        .forEach(c => all.push(c));\n    });\n    return all;\n  }\n  function emptyPerson() {\n    return { vorname: \"\", nachname: \"\", email: \"\", wiederholer: false, statusType: \"\", amount: 0 };\n  }\n  const state = {\n    country: \"\", category: \"cat1\",\n    commLang: \"\", form: \"einzeln\",\n    persons: { solo: emptyPerson(), p1: emptyPerson(), p2: emptyPerson() }\n  };\n  function getPerson(key) { return state.persons[key] || state.persons.solo; }\n  function isAppOnly() {\n    const { category: cat, commLang: lang, country } = state;\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[country];\n      \/\/ Ausnahme (z.B. China) gilt nur, wenn auch die passende Sprache gewaehlt ist \u2013\n      \/\/ sonst kann kein physisches Kartenset verschickt werden.\n      if (!exceptionLang || lang !== exceptionLang) return true;\n    }\n    if (APP_ONLY_LANGS.has(lang)) return true;\n    if (lang === \"Russisch\" && country && country !== \"RU\") return true;\n    return false;\n  }\n\n  function isWiederholer(person) {\n    return !!person && (person.wiederholer || person.statusType === \"wiederholer\");\n  }\n\n  \/\/ Geht ueberhaupt ein Kartenset raus? Nur wenn die Teilnahme nicht rein digital\n  \/\/ ist UND mindestens eine Person ein neues Set braucht - Wiederholer bekommen\n  \/\/ keins. Steuert sowohl die Versandzeile in der Zusammenfassung als auch die\n  \/\/ Wahl des Ecwid-Produkts, damit beide nicht auseinanderlaufen koennen.\n  function hasPhysicalShipment(isPaar) {\n    if (isAppOnly()) return false;\n    return isPaar\n      ? !(isWiederholer(state.persons.p1) && isWiederholer(state.persons.p2))\n      : !isWiederholer(state.persons.solo);\n  }\n\n  \/\/ Ecwid haengt den Versand am Produkt fest, nicht am Warenkorb. Ohne physischen\n  \/\/ Versand muss deshalb das versandfreie Digital-Produkt in den Warenkorb, sonst\n  \/\/ schlaegt der Shop trotzdem Versandkosten auf.\n  function getParticipationProductId(isPaar) {\n    return hasPhysicalShipment(isPaar) ? PRODUCTS[state.category] : PRODUCTS_APPONLY[state.category];\n  }\n  function updateAppOnlyUI() {\n    const appOnly = state.commLang ? isAppOnly() : false;\n    let reason = \"\";\n    if (appOnly) {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[state.country];\n      if ((state.category === \"cat3\" || state.category === \"cat4\") && exceptionLang) {\n        reason = TXT.reasonException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang);\n      } else if (state.category === \"cat3\" || state.category === \"cat4\") {\n        reason = TXT.reasonRegion;\n      } else if (state.commLang === \"Russisch\") {\n        reason = TXT.reasonRussian;\n      } else {\n        reason = TXT.reasonLanguage;\n      }\n    }\n    const noteIds = [\"sw-apponly-note\",\"sw-apponly-note-step4\",\"sw-apponly-note-paar-step4\",\"sw-apponly-note-step5-solo\",\"sw-apponly-note-step5-paar\"];\n    noteIds.forEach(id => {\n      const el = $(id);\n      if (!el) return;\n      el.style.display = appOnly ? \"block\" : \"none\";\n      const textDiv = el.querySelector(\"div:not(.sw-infobox-title)\");\n      if (textDiv && reason) textDiv.textContent = reason;\n    });\n  }\n  const STEP_CONTAINER = {\n    1: () => \"sw-step-welcome\",\n    2: () => \"sw-step-country\",\n    3: () => \"sw-step-langform\",\n    4: () => state.form === \"paar\" ? \"sw-step-details-paar\" : \"sw-step-details-solo\",\n    5: () => state.form === \"paar\" ? \"sw-step-amount-paar\" : \"sw-step-amount-solo\"\n  };\n  function showStep(n) {\n    shadow.querySelectorAll(\".sw-step\").forEach(el => el.classList.remove(\"active\"));\n    $(STEP_CONTAINER[n]()).classList.add(\"active\");\n    for (let i = 1; i <= 5; i++) {\n      const prog = $(\"sw-prog-\" + i);\n      if (!prog) continue;\n      if (i < n) prog.className = \"sw-progress-step done\";\n      else if (i === n) prog.className = \"sw-progress-step active\";\n      else prog.className = \"sw-progress-step\";\n    }\n    if (n === 5) {\n      const sliderIds = state.form === \"paar\" ? [\"sw-amount-p1\",\"sw-amount-p2\"] : [\"sw-amount-solo\"];\n      sliderIds.forEach(sid => { const el = $(sid); if (el) el.classList.add(\"sw-pulse\"); });\n      refreshSummary();\n    }\n  }\n  function setNextEnabled(id, enabled) {\n    const b = $(id);\n    if (!b) return;\n    b.disabled = !enabled;\n    b.style.opacity = enabled ? \"1\" : \".4\";\n    b.style.cursor  = enabled ? \"pointer\" : \"not-allowed\";\n  }\n  function showErrorIn(id, msg) { const el=$(id); el.style.display=\"block\"; el.textContent=msg; }\n  function clearErrorIn(id)     { const el=$(id); el.style.display=\"none\";  el.textContent=\"\"; }\n  function setCheckoutLoading(btnId, loading) {\n    const btn = $(btnId);\n    \/\/ Nach dem Danke-Bildschirm existiert der Button nicht mehr \u2013 dann nichts tun.\n    if (!btn) return;\n    const overlay = document.getElementById(OVERLAY_ID);\n    if (!btn.dataset.defaultLabel) btn.dataset.defaultLabel = btn.textContent;\n    if (loading) {\n      btn.disabled = true;\n      btn.innerHTML = '<span class=\"wiz-spinner\"><\/span> ' + TXT.preparing;\n      btn.style.opacity = \".8\";\n      if (overlay) overlay.style.display = \"flex\";\n    } else {\n      btn.disabled = false;\n      btn.textContent = btn.dataset.defaultLabel;\n      btn.style.opacity = \"1\";\n      if (overlay) overlay.style.display = \"none\";\n    }\n  }\n  function showThankYou() {\n    const card = shadow.querySelector(\".sw-card\");\n    if (!card) return;\n    card.innerHTML = `\n      <div style=\"text-align:center; padding:20px 0;\">\n        <div style=\"font-size:56px; margin-bottom:16px; color:#27703F;\">\u2713<\/div>\n        <h2 style=\"font-family:'Tinos',Georgia,serif; font-size:26px; font-weight:500; margin:0 0 12px; color:#0C1E14;\">${TXT.thanksTitle}<\/h2>\n        <p style=\"font-family:'Tinos',Georgia,serif; font-size:18px; color:#27703F; line-height:1.6; margin:0 0 24px;\">${TXT.thanksLine1}${TXT.thanksLine2 ? \"<br>\" + TXT.thanksLine2 : \"\"}<\/p>\n        <div style=\"display:flex; justify-content:center;\">\n          <div style=\"width:36px; height:36px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:wiz-spin 0.8s linear infinite;\"><\/div>\n        <\/div>\n      <\/div>`;\n  }\n  function getAnchors(cat) {\n    const r = RANGES[cat], o = ORIENTIERUNG[cat];\n    return [[0,r.min],[25,o.reduced],[50,o.base],[75,o.support],[100,r.max]];\n  }\n  function normToEuro(norm, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      if (norm <= a[i+1][0]) {\n        const t = (norm - a[i][0]) \/ (a[i+1][0] - a[i][0]);\n        return Math.round(a[i][1] + t * (a[i+1][1] - a[i][1]));\n      }\n    }\n    return a[a.length-1][1];\n  }\n  function euroToNorm(euro, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      const lo = a[i][1], hi = a[i+1][1];\n      if (euro <= hi) {\n        if (hi === lo) return a[i+1][0];\n        return a[i][0] + (euro - lo) \/ (hi - lo) * (a[i+1][0] - a[i][0]);\n      }\n    }\n    return 100;\n  }\n  function getMarkerDefs(cat) {\n    const o = ORIENTIERUNG[cat];\n    return [\n      { value: o.reduced, label: TXT.markerReduced, normPct: 25 },\n      { value: o.base,    label: TXT.markerBase,    normPct: 50 },\n      { value: o.support, label: TXT.markerSupport, normPct: 75 }\n    ];\n  }\n  function renderMarkers(personKey) {\n    const cat = state.category;\n    const person = getPerson(personKey);\n    const markers = getMarkerDefs(cat);\n    const container = $(`sw-markers-${personKey}`);\n    container.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker\" + (person.amount === m.value ? \" active\" : \"\");\n      div.style.left = m.normPct + \"%\";\n      div.innerHTML = `<div class=\"sw-marker-tick\"><\/div><div class=\"sw-marker-amount\">${m.value}\u20ac<\/div><div class=\"sw-marker-label\">${m.label}<\/div>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      container.appendChild(div);\n    });\n    const mobileContainer = $(`sw-markers-mobile-${personKey}`);\n    mobileContainer.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker-mobile\" + (person.amount === m.value ? \" active\" : \"\");\n      div.innerHTML = `<span class=\"sw-marker-mobile-label\">${m.label}<\/span><span class=\"sw-marker-mobile-amount\">${m.value}\u20ac<\/span>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      mobileContainer.appendChild(div);\n    });\n  }\n  function selectMarkerValue(personKey, value) {\n    const person = getPerson(personKey);\n    $(`sw-amount-${personKey}`).value = euroToNorm(value, state.category);\n    person.amount = value;\n    $(`sw-amountInput-${personKey}`).value = value;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromSlider(personKey) {\n    const person = getPerson(personKey);\n    const norm = Number($(`sw-amount-${personKey}`).value);\n    person.amount = normToEuro(norm, state.category);\n    $(`sw-amountInput-${personKey}`).value = person.amount;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromInput(personKey) {\n    const person = getPerson(personKey);\n    const r = RANGES[state.category];\n    let val = Number($(`sw-amountInput-${personKey}`).value);\n    if (isNaN(val)) val = r.min;\n    val = Math.min(r.max, Math.max(r.min, val));\n    person.amount = val;\n    $(`sw-amountInput-${personKey}`).value = val;\n    $(`sw-amount-${personKey}`).value = euroToNorm(val, state.category);\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function wireAmountControl(personKey) {\n    $(`sw-amount-${personKey}`).addEventListener(\"input\", () => updateAmountFromSlider(personKey));\n    $(`sw-amountInput-${personKey}`).addEventListener(\"input\", () => {\n      const v = Number($(`sw-amountInput-${personKey}`).value);\n      if (!isNaN(v)) { getPerson(personKey).amount = v; refreshSummary(); }\n    });\n    $(`sw-amountInput-${personKey}`).addEventListener(\"change\", () => updateAmountFromInput(personKey));\n  }\n  function applyRangeForForm() {\n    const cat = state.category;\n    const ori = ORIENTIERUNG[cat];\n    const hint = TXT.hintLong;\n    if (state.form === \"paar\") {\n      [\"p1\",\"p2\"].forEach(key => {\n        const person = getPerson(key);\n        person.amount = ori.base;\n        $(`sw-amount-${key}`).value = 50;\n        $(`sw-amountInput-${key}`).value = ori.base;\n      });\n      const p1name = state.persons.p1.vorname;\n      const p2name = state.persons.p2.vorname;\n      $(\"sw-amount-p1-title\").innerHTML = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-amount-p2-title\").innerHTML = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) +\n        ' <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">' + TXT.p2Badge + '<\/span>';\n      $(\"sw-summary-p1-label\").textContent = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-summary-p2-label\").textContent = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) + \" \" + TXT.p2Badge;\n      $(\"sw-rangeHint-paar\").textContent = hint;\n      renderMarkers(\"p1\"); renderMarkers(\"p2\");\n    } else {\n      const person = state.persons.solo;\n      person.amount = ori.base;\n      $(\"sw-amount-solo\").value = 50;\n      $(\"sw-amountInput-solo\").value = ori.base;\n      $(\"sw-rangeHint-solo\").textContent = hint;\n      renderMarkers(\"solo\");\n    }\n    refreshSummary();\n  }\n  \/\/ \u2500\u2500 Rabattlogik \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Zuerst wird der fixe App-Rabatt vom gewaehlten Betrag abgezogen, danach der\n  \/\/ prozentuale Rabatt auf den verbleibenden Betrag. Beide werden separat gezeigt.\n  function getPercentDiscountCandidate(person, isPaarP2) {\n    if (isPaarP2) return { value: DISCOUNT_PAAR_P2, label: TXT.discP2 };\n    const candidates = [];\n    if (isWiederholer(person)) candidates.push({ value: DISCOUNT_WIEDERHOLER, label: TXT.discWiederholer });\n    if (person.statusType === \"schueler\") candidates.push({ value: DISCOUNT_SCHUELER, label: TXT.discSchueler });\n    if (person.statusType === \"student\")  candidates.push({ value: DISCOUNT_STUDENT,  label: TXT.discStudent });\n    if (!candidates.length) return null;\n    return candidates.reduce((best, c) => c.value > best.value ? c : best, candidates[0]);\n  }\n  function getDiscounts(person, isPaarP2) {\n    const discounts = [];\n    let remaining = Math.round(person.amount);\n    if (isAppOnly()) {\n      const appDisc = Math.min(DISCOUNT_APP_FIXED, remaining);\n      discounts.push({ type: \"fixed\", value: DISCOUNT_APP_FIXED, label: TXT.discApp, amountEuro: appDisc });\n      remaining -= appDisc;\n    }\n    const pct = getPercentDiscountCandidate(person, isPaarP2);\n    if (pct) {\n      const pctDisc = Math.round(remaining * pct.value);\n      discounts.push({ type: \"pct\", value: pct.value, label: pct.label, amountEuro: pctDisc });\n      remaining -= pctDisc;\n    }\n    return { discounts, finalAmount: Math.max(0, remaining) };\n  }\n  function buildStatusOptionValue(person, isPaar) {\n    const vals = [];\n    if (isPaar) vals.push(STATUS_LABEL.paar);\n    if (isAppOnly()) vals.push(STATUS_LABEL.apponly);\n    if (isWiederholer(person)) vals.push(STATUS_LABEL.wiederholer);\n    if (person.statusType === \"schueler\") vals.push(STATUS_LABEL.schueler);\n    if (person.statusType === \"student\")  vals.push(STATUS_LABEL.student);\n    \/\/ Ecwid erwartet fuer Checkbox-Optionen ein Array, nicht einen kommaseparierten String\n    return vals;\n  }\n  function refreshSummary() {\n    if (state.form === \"paar\") refreshSummaryPaar();\n    else refreshSummarySolo();\n  }\n  function renderDiscountRows(containerId, discounts) {\n    const container = $(containerId);\n    container.innerHTML = \"\";\n    discounts.forEach(d => {\n      const row = document.createElement(\"div\");\n      row.className = \"sw-summary-row sw-summary-discount\";\n      const pctStr = d.type === \"fixed\" ? `\u2212${d.amountEuro}\u20ac` : `\u2212${Math.round(d.value * 100)}%`;\n      row.innerHTML = `<span>${d.label} (${pctStr})<\/span><span>\u2212${d.amountEuro}\u20ac<\/span>`;\n      container.appendChild(row);\n    });\n  }\n  function refreshSummarySolo() {\n    const p = state.persons.solo;\n    const { discounts, finalAmount } = getDiscounts(p, false);\n    $(\"sw-solo-chosen\").textContent = Math.round(p.amount) + \"\u20ac\";\n    renderDiscountRows(\"sw-solo-discounts\", discounts);\n    const shipLine = $(\"sw-shipping-line-solo\");\n    const shippingSolo = (hasPhysicalShipment(false) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingSolo ? \"flex\" : \"none\";\n    $(\"sw-solo-total\").textContent = finalAmount + shippingSolo;\n  }\n  function refreshSummaryPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    function fill(prefix, person, isPaarP2) {\n      const { discounts, finalAmount } = getDiscounts(person, isPaarP2);\n      $(`sw-${prefix}-chosen`).textContent = Math.round(person.amount) + \"\u20ac\";\n      renderDiscountRows(`sw-${prefix}-discounts`, discounts);\n      $(`sw-${prefix}-subtotal`).textContent = finalAmount + \"\u20ac\";\n      return finalAmount;\n    }\n    const f1 = fill(\"p1\", p1, false);\n    const f2 = fill(\"p2\", p2, true);\n    const shipLine = $(\"sw-shipping-line-paar\");\n    const shippingPaar = (hasPhysicalShipment(true) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingPaar ? \"flex\" : \"none\";\n    $(\"sw-paar-total\").textContent = f1 + f2 + shippingPaar;\n  }\n  function renderCountryList(filter) {\n    const list = $(\"sw-country-list\");\n    const q = (filter || \"\").toLowerCase().trim();\n    const filtered = q\n      ? getAllCountriesSorted().filter(c =>\n          c.name.toLowerCase().includes(q) ||\n          (c.aliases || []).some(a => a.includes(q))\n        )\n      : getAllCountriesSorted();\n    list.innerHTML = \"\";\n    if (!filtered.length) { list.innerHTML = '<div class=\"sw-country-empty\">' + TXT.noCountry + '<\/div>'; return; }\n    filtered.forEach(c => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-country-item\" + (state.country === c.code ? \" selected\" : \"\");\n      div.dataset.code = c.code;\n      div.innerHTML = `<span>${c.name}<\/span><span class=\"sw-country-item-cat\">${TXT.catBadge}${c.cat.replace(\"cat\",\"\")}<\/span>`;\n      div.addEventListener(\"click\", () => selectCountry(c.code, c.cat, c.name));\n      list.appendChild(div);\n    });\n  }\n  function selectCountry(code, cat, name) {\n    state.country  = code;\n    state.category = cat;\n    $(\"sw-country\").value = code;\n    $(\"sw-country-search\").value = name;\n    $(\"sw-country-list\").innerHTML = \"\";\n    const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[code];\n    let suffix = \"\";\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      suffix = exceptionLang\n        ? \" \" + TXT.catSuffixException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang)\n        : \" \" + TXT.catSuffixDigital;\n    }\n    $(\"sw-catText\").textContent = (TXT.catLabels[cat] || cat) + suffix;\n    \/\/ Ecwid wickelt in Russland keine Zahlungen ab. Wer Russland waehlt, wird\n    \/\/ deshalb auf die russische Anmeldeseite verwiesen - die laeuft ueber n8n\n    \/\/ und Tochka statt ueber den Shop. Der russische Wizard verweist umgekehrt\n    \/\/ zurueck, sobald dort ein anderes Land gewaehlt wird.\n    const nachRussland = (code === \"RU\");\n    $(\"sw-redirect-russia\").style.display = nachRussland ? \"block\" : \"none\";\n    $(\"sw-catInfo\").style.display         = nachRussland ? \"none\"  : \"block\";\n    setNextEnabled(\"sw-btn-country-next\", !nachRussland);\n    updateAppOnlyUI();\n  }\n  function ensureEcwidReady(timeoutMs = 12000) {\n    return new Promise((resolve, reject) => {\n      function isReady() {\n        return window.Ecwid && window.Ecwid.Cart &&\n               typeof window.Ecwid.Cart.addProduct === \"function\" &&\n               typeof window.Ecwid.Cart.clear === \"function\";\n      }\n      if (isReady()) return resolve(true);\n      let resolved = false;\n      function done() { if (!resolved) { resolved = true; setTimeout(() => resolve(true), 200); } }\n      if (window.Ecwid) { try { window.Ecwid.OnAPILoaded.add(done); } catch(e) {} }\n      const start = Date.now();\n      const t = setInterval(() => {\n        if (isReady()) { clearInterval(t); done(); }\n        else if (Date.now() - start > timeoutMs) {\n          clearInterval(t);\n          if (!resolved) { resolved = true; reject(new Error(fillPlaceholder(TXT.errEcwid, timeoutMs\/1000))); }\n        }\n      }, 200);\n    });\n  }\n  function clearCartAsync() { return new Promise(r => Ecwid.Cart.clear(() => r(true))); }\n  function addProductAsync(payload, timeoutMs = 4000) {\n    return new Promise((resolve, reject) => {\n      let done = false;\n      const t = setTimeout(() => { if (!done) { done = true; resolve({ product:null, cart:null, timedOut:true }); } }, timeoutMs);\n      Ecwid.Cart.addProduct(payload, function(success, product, cart, error) {\n        if (done) return;\n        done = true; clearTimeout(t);\n        if (success) resolve({ product, cart, timedOut:false });\n        else reject(new Error((error || TXT.errProduct) + \" | Payload: \" + JSON.stringify(payload)));\n      });\n    });\n  }\n  function goToCart() { window.location.href = SHOP_CART_URL; }\n  function buildN8nPayload() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const d1 = getDiscounts(p1, false);\n    const d2 = getDiscounts(p2, true);\n    return {\n      sprache: state.commLang, land: state.country, kategorie: state.category, appOnly: isAppOnly(),\n      person1: { vorname: p1.vorname, nachname: p1.nachname, email: p1.email },\n      person2: { vorname: p2.vorname, nachname: p2.nachname, email: p2.email },\n      betraege: {\n        person1: { gewaehlt: Math.round(p1.amount), rabatte: d1.discounts, endbetrag: d1.finalAmount },\n        person2: { gewaehlt: Math.round(p2.amount), rabatte: d2.discounts, endbetrag: d2.finalAmount },\n        gesamt: d1.finalAmount + d2.finalAmount\n      },\n      timestamp: new Date().toISOString()\n    };\n  }\n  async function sendToN8n(payload) {\n    if (!N8N_WEBHOOK_URL || N8N_WEBHOOK_URL.indexOf(\"HIER_\") === 0) {\n      throw new Error(\"Die n8n-Webhook-URL ist im Code noch nicht eingetragen.\");\n    }\n    let res;\n    try {\n      res = await fetch(N8N_WEBHOOK_URL, { method:\"POST\", headers:{\"Content-Type\":\"application\/json\"}, body:JSON.stringify(payload) });\n    } catch (e) {\n      throw new Error(TXT.errNetwork);\n    }\n    if (!res.ok) throw new Error(fillPlaceholder(TXT.errSubmit, res.status));\n    return true;\n  }\n  async function goCheckoutSolo() {\n    clearErrorIn(\"sw-error-amount-solo\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-solo\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-solo\", TXT.errLang);\n    const p = state.persons.solo;\n    const finalAmount = getDiscounts(p, false).finalAmount;\n    const participationProductId = getParticipationProductId(false);\n    setCheckoutLoading(\"sw-btn-checkout-solo\", true);\n    try {\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const statusValue = buildStatusOptionValue(p, false);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: finalAmount, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-solo\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-solo\", false);\n    }\n  }\n  async function goCheckoutPaar() {\n    clearErrorIn(\"sw-error-amount-paar\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-paar\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-paar\", TXT.errLang);\n    if (!validateDetailsPaar()) return showErrorIn(\"sw-error-amount-paar\", TXT.errPaarFields);\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const participationProductId = getParticipationProductId(true);\n    setCheckoutLoading(\"sw-btn-checkout-paar\", true);\n    try {\n      const payload = buildN8nPayload();\n      await sendToN8n(payload);\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const total = getDiscounts(p1, false).finalAmount + getDiscounts(p2, true).finalAmount;\n      const statusValue = buildStatusOptionValue(p1, true);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: total, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-paar\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-paar\", false);\n    }\n  }\n  function validateLangform() {\n    const ok = !!state.commLang && !!state.form && state.form !== \"gruppe\";\n    setNextEnabled(\"sw-btn-langform-next\", ok);\n  }\n  function validateDetailsSolo() {\n    const ok = !!$(\"sw-solo-status\").value;\n    setNextEnabled(\"sw-btn-details-solo-next\", ok);\n    return ok;\n  }\n  function validateDetailsPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const emailOk = s => \/\\S+@\\S+\\.\\S+\/.test(s || \"\");\n    const ok = !!(p1.vorname && p1.vorname.trim()) && !!(p1.nachname && p1.nachname.trim()) && emailOk(p1.email) &&\n               !!(p2.vorname && p2.vorname.trim()) && !!(p2.nachname && p2.nachname.trim()) && emailOk(p2.email);\n    setNextEnabled(\"sw-btn-details-paar-next\", ok);\n    return ok;\n  }\n  function bindNameFields(key) {\n    [\"vorname\",\"nachname\",\"email\"].forEach(f => {\n      $(`sw-${key}-${f}`).addEventListener(\"input\", e => {\n        getPerson(key)[f] = e.target.value;\n        validateDetailsPaar();\n      });\n    });\n  }\n  $(\"sw-btn-welcome-next\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-country-back\").addEventListener(\"click\", () => showStep(1));\n  $(\"sw-btn-country-next\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-country-search\").addEventListener(\"input\",  e => renderCountryList(e.target.value));\n  $(\"sw-country-search\").addEventListener(\"focus\",  () => renderCountryList($(\"sw-country-search\").value));\n  shadow.addEventListener(\"click\", e => {\n    if (!e.target.closest(\"#sw-country-list\") && !e.target.closest(\"#sw-country-search\")) {\n      $(\"sw-country-list\").innerHTML = \"\";\n    }\n  });\n  $(\"sw-commLang\").addEventListener(\"change\", e => {\n    state.commLang = e.target.value;\n    validateLangform();\n    updateAppOnlyUI();\n    refreshSummary();\n  });\n  shadow.querySelectorAll(\".sw-choice-card\").forEach(card => {\n    card.addEventListener(\"click\", () => {\n      state.form = card.dataset.form;\n      shadow.querySelectorAll(\".sw-choice-card\").forEach(c => c.classList.toggle(\"active\", c === card));\n      const isGruppe = state.form === \"gruppe\";\n      $(\"sw-gruppe-note\").style.display = isGruppe ? \"block\" : \"none\";\n      $(\"sw-btn-langform-next\").style.display   = isGruppe ? \"none\" : \"inline-block\";\n      $(\"sw-btn-gruppe-redirect\").style.display = isGruppe ? \"inline-block\" : \"none\";\n      clearErrorIn(\"sw-error-langform\");\n      validateLangform();\n    });\n  });\n  $(\"sw-btn-gruppe-redirect\").addEventListener(\"click\", () => { window.location.href = getGroupRedirectUrl(); });\n  $(\"sw-btn-langform-back\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-langform-next\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-details-solo-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-solo-status\").addEventListener(\"change\", e => {\n    const val = e.target.value;\n    const person = state.persons.solo;\n    person.statusType  = val;\n    person.wiederholer = val === \"wiederholer\";\n    clearErrorIn(\"sw-error-details-solo\");\n    validateDetailsSolo();\n  });\n  $(\"sw-btn-details-solo-next\").addEventListener(\"click\", () => {\n    if (validateDetailsSolo()) { applyRangeForForm(); showStep(5); }\n    else showErrorIn(\"sw-error-details-solo\", TXT.errSelectFirst);\n  });\n  $(\"sw-btn-details-paar-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-btn-details-paar-next\").addEventListener(\"click\", () => {\n    if (validateDetailsPaar()) { applyRangeForForm(); showStep(5); }\n  });\n  $(\"sw-btn-amount-solo-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-amount-paar-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-checkout-solo\").addEventListener(\"click\", goCheckoutSolo);\n  $(\"sw-btn-checkout-paar\").addEventListener(\"click\", goCheckoutPaar);\n  bindNameFields(\"p1\");\n  bindNameFields(\"p2\");\n  wireAmountControl(\"solo\");\n  wireAmountControl(\"p1\");\n  wireAmountControl(\"p2\");\n  showStep(1);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e5505f7 e-flex e-con-boxed e-con e-parent\" data-id=\"e5505f7\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bfb1f61 elementor-widget elementor-widget-html\" data-id=\"bfb1f61\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Tinos:ital,wght@0,400;0,700;1,400&display=swap\" rel=\"stylesheet\">\n<style>\n  .ecwid-ProductBrowser,\n  .ecwid-productbrowser,\n  div[id^=\"my-store\"],\n  .ecwid:not(#sw-host-zh) {\n    visibility: hidden !important;\n    height: 0 !important;\n    max-height: 0 !important;\n    overflow: hidden !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    position: absolute !important;\n    pointer-events: none !important;\n  }\n<\/style>\n<div id=\"sw-overlay-zh\" style=\"display:none; position:fixed; inset:0; background:rgba(245,250,246,0.92); z-index:99999; flex-direction:column; align-items:center; justify-content:center; gap:20px;\">\n  <div style=\"width:52px; height:52px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:sw-spin-zh 0.8s linear infinite;\"><\/div>\n  <div style=\"font-family:'Tinos',Georgia,serif; font-size:22px; color:#27703F;\">\u6b63\u5728\u52a0\u8f7d\u7ed3\u8d26\u9875\u9762\u2026<\/div>\n<\/div>\n<style>\n  @keyframes sw-spin-zh { to { transform: rotate(360deg); } }\n<\/style>\n<div id=\"sw-host-zh\"><\/div>\n<script>\n(function () {\n\n  \/\/ \u2500\u2500 Sprach-Guard: Skript bricht sofort ab, wenn die URL nicht zu ZH passt \u2500\u2500\n  const _pathMatch = window.location.pathname.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n  const _pageLang = _pathMatch ? _pathMatch[1] : \"de\";\n  if (_pageLang !== \"zh\") { \n    document.getElementById(\"sw-host-zh\")?.remove();\n    document.getElementById(\"sw-overlay-zh\")?.remove();\n    return; \n  }\n\n  const OVERLAY_ID    = \"sw-overlay-zh\";\n  const SHOP_CART_URL = \"https:\/\/spiritual-activity.org\/zh\/store\/cart\";\n  const N8N_WEBHOOK_URL = \"https:\/\/n8n.spiritual-activity.org\/webhook\/registration-be\";\n  function getGroupRedirectUrl() {\n    const path = window.location.pathname;\n    \/\/ Erkennt Sprachpraefixe wie \/en\/, \/es\/, \/it\/, \/ru\/ am Anfang des Pfads.\n    \/\/ Deutsch ist die Standardsprache ohne Praefix.\n    const match = path.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n    const langPrefix = (match && match[1] !== \"de\") ? \"\/\" + match[1] : \"\";\n    return \"https:\/\/spiritual-activity.org\" + langPrefix + \"\/gruppen-anmeldung\";\n  }\n  const PRODUCTS = {\n    cat1: 864374030,\n    cat2: 844860366,\n    cat3: 844907264,\n    cat4: 844907265\n  };\n\n  \/\/ Versandfreie Digital-Produkte fuer alle Faelle, in denen nichts verschickt\n  \/\/ wird: rein digitale Teilnahme und Wiederholer (kein neues Kartenset).\n  const PRODUCTS_APPONLY = {\n    cat1: 863272251,\n    cat2: 863265753,\n    cat3: 863272252,\n    cat4: 863265754\n  };\n  const RANGES = {\n    cat1: { min: 160, max: 800 },\n    cat2: { min: 105, max: 700 },\n    cat3: { min:  75, max: 600 },\n    cat4: { min:  45, max: 500 }\n  };\n  const ORIENTIERUNG = {\n    cat1: { reduced: 160, base: 360, support: 580 },\n    cat2: { reduced: 105, base: 240, support: 460 },\n    cat3: { reduced:  75, base: 160, support: 340 },\n    cat4: { reduced:  45, base: 105, support: 220 }\n  };\n  const DISCOUNT_WIEDERHOLER = 0.30;\n  const DISCOUNT_SCHUELER    = 0.50;\n  const DISCOUNT_STUDENT     = 0.25;\n  const DISCOUNT_PAAR_P2     = 0.50;\n  const DISCOUNT_APP_FIXED   = 35;\n  \/\/ Versandpauschale ausserhalb EU+CH. Ecwid kassiert sie, der Wizard rechnet sie in die Anzeige-Summe ein.\n  const SHIPPING_COST   = 15;\n  \/\/ Sprachschluessel bleiben deutsch \u2013 sie sind die Werte im Ecwid-Shop.\n  const APP_ONLY_LANGS = new Set([\"Arabisch\",\"Farsi\",\"Ukrainisch\",\"Bulgarisch\",\"Franz\u00f6sisch\"]);\n  const APP_ONLY_CATEGORY_EXCEPTION_LANG = { CN: \"Chinesisch\" };\n  const EU_PLUS_CH = new Set([\n    \"AT\",\"BE\",\"BG\",\"CY\",\"CZ\",\"DE\",\"DK\",\"EE\",\"ES\",\"FI\",\"FR\",\"GR\",\"HR\",\n    \"HU\",\"IE\",\"IT\",\"LT\",\"LU\",\"LV\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SE\",\"SI\",\"SK\",\"CH\"\n  ]);\n  \/\/ Ersetzt den Platzhalter in Klammern (z.B. [Code], [X], [\ucf54\ub4dc]) durch den Wert\n  function fillPlaceholder(text, value) {\n    return String(text).replace(\/[\\[\uff3b][^\\]\uff3d]*[\\]\uff3d]\/, value);\n  }\n  function needsShipping(countryCode) {\n    return countryCode && !EU_PLUS_CH.has(countryCode);\n  }\n  \/\/ \u2500\u2500 Uebersetzte Texte \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const TXT = {\n      \"catBadge\": \"\u7c7b\u522b \",\n      \"catLabels\": {\n          \"cat1\": \"\u4ef7\u683c\u7c7b\u522b 1\",\n          \"cat2\": \"\u4ef7\u683c\u7c7b\u522b 2\",\n          \"cat3\": \"\u4ef7\u683c\u7c7b\u522b 3\",\n          \"cat4\": \"\u4ef7\u683c\u7c7b\u522b 4\"\n      },\n      \"catSuffixDigital\": \"\u2013 \u4ec5\u53ef\u6570\u5b57\u65b9\u5f0f\u53c2\u4e0e\",\n      \"catSuffixException\": \"\u2013 \u4ec5\u5728\u53c2\u4e0e\u8bed\u8a00\u4e3a{X}\u65f6\u53ef\u914d\u9001\uff0c\u5426\u5219\u4ec5\u53ef\u6570\u5b57\u65b9\u5f0f\u53c2\u4e0e\",\n      \"noCountry\": \"\u672a\u627e\u5230\u56fd\u5bb6\",\n      \"markerReduced\": \"\u4f18\u60e0\u8d39\u7528\",\n      \"markerBase\": \"\u57fa\u672c\u8d39\u7528\",\n      \"markerSupport\": \"\u652f\u6301\u6027\u8d39\u7528\",\n      \"hintLong\": \"\u5728\u8fd9\u91cc\uff0c\u60a8\u53ef\u4ee5\u9009\u62e9\u9002\u5408\u60a8\u7684\u53c2\u4e0e\u8d39\u7528\u3002\u901a\u8fc7\u652f\u6301\u6027\u8d39\u7528\uff0c\u60a8\u80fd\u8ba9\u7ecf\u6d4e\u6761\u4ef6\u6709\u9650\u7684\u4eba\u4e5f\u80fd\u53c2\u4e0e\u5176\u4e2d\uff0c\u5e76\u5e2e\u52a9\u6211\u4eec\u5c06\u672c\u9879\u76ee\u8fdb\u4e00\u6b65\u5e26\u5411\u4e16\u754c\u3002\",\n      \"hintPaar\": \"\u6bcf\u4f4d\u53c2\u4e0e\u8005\u9009\u62e9\u81ea\u5df1\u7684\u53c2\u4e0e\u8d39\u7528\u3002\u53c2\u4e0e\u80052\u5c06\u81ea\u52a8\u83b7\u5f9750%\u7684\u6298\u6263\u3002\",\n      \"person1\": \"\u53c2\u4e0e\u80051\",\n      \"person2\": \"\u53c2\u4e0e\u80052\",\n      \"p2Badge\": \"\uff08\u221250%\uff09\",\n      \"discWiederholer\": \"\u91cd\u4fee\u5b66\u5458\",\n      \"discSchueler\": \"\u5728\u6821\u5b66\u751f\",\n      \"discStudent\": \"\u57f9\u8bad\uff0f\u5728\u8bfb\",\n      \"discP2\": \"\u53c2\u4e0e\u80052\u6298\u6263\",\n      \"discApp\": \"\u6570\u5b57\u53c2\u4e0e\",\n      \"reasonRegion\": \"\u60a8\u6240\u5728\u5730\u533a\u65e0\u6cd5\u914d\u9001\u3002\u60a8\u5c06\u4ee5\u6570\u5b57\u65b9\u5f0f\u53c2\u4e0e\u3002\u6298\u6263\u5c06\u81ea\u52a8\u5728\u6458\u8981\u4e2d\u4f53\u73b0\u3002\",\n      \"reasonRussian\": \"\u5bf9\u4e8e\u4fc4\u7f57\u65af\u5883\u5916\u7684\u4fc4\u8bed\u4f7f\u7528\u8005\uff0c\u4ec5\u63d0\u4f9b\u6570\u5b57\u7248\u672c\u3002\u6298\u6263\u5c06\u81ea\u52a8\u5728\u6458\u8981\u4e2d\u4f53\u73b0\u3002\",\n      \"reasonLanguage\": \"\u8be5\u8bed\u8a00\u4ec5\u63d0\u4f9b\u6570\u5b57\u7248\u672c\u3002\u6298\u6263\u5c06\u81ea\u52a8\u5728\u6458\u8981\u4e2d\u4f53\u73b0\u3002\",\n      \"reasonException\": \"\u5728\u60a8\u6240\u5728\u7684\u5730\u533a\uff0c\u4ec5\u5f53\u53c2\u4e0e\u8bed\u8a00\u4e3a{X}\u65f6\u624d\u53ef\u914d\u9001\u3002 \u60a8\u5c06\u4ee5\u6570\u5b57\u65b9\u5f0f\u53c2\u4e0e\u3002\u6298\u6263\u5c06\u81ea\u52a8\u5728\u6458\u8981\u4e2d\u4f53\u73b0\u3002\",\n      \"thanksTitle\": \"\u975e\u5e38\u611f\u8c22\uff01\",\n      \"thanksLine1\": \"\u6b63\u5728\u52a0\u8f7d\u7ed3\u8d26\u9875\u9762\u2026\",\n      \"thanksLine2\": \"\u60a8\u5373\u5c06\u88ab\u8f6c\u81f3\u76f8\u5e94\u9875\u9762\u2026\",\n      \"preparing\": \"\u6b63\u5728\u51c6\u5907\u4e2d\u2026\",\n      \"errSelectFirst\": \"\u8bf7\u5148\u505a\u51fa\u9009\u62e9\u3002\",\n      \"errPaarFields\": \"\u8bf7\u8fd4\u56de\u5e76\u586b\u5199\u4e24\u4f4d\u53c2\u4e0e\u8005\u7684\u6240\u6709\u5b57\u6bb5\u3002\",\n      \"errCountry\": \"\u8bf7\u5148\u9009\u62e9\u4e00\u4e2a\u56fd\u5bb6\u3002\",\n      \"errLang\": \"\u8bf7\u9009\u62e9\u53c2\u4e0e\u8bed\u8a00\u3002\",\n      \"errNetwork\": \"\u65e0\u6cd5\u63d0\u4ea4\u6570\u636e\u3002\u8bf7\u68c0\u67e5\u60a8\u7684\u7f51\u7edc\u8fde\u63a5\u3002\",\n      \"errSubmit\": \"\u63d0\u4ea4\u5931\u8d25\uff08\u9519\u8bef\u4ee3\u7801 [Code]\uff09\u3002\u8bf7\u91cd\u8bd5\u3002\",\n      \"errProduct\": \"\u65e0\u6cd5\u6dfb\u52a0\u4ea7\u54c1\",\n      \"errEcwid\": \"Ecwid \u8d2d\u7269\u8f66 API \u5728 [X] \u79d2\u540e\u4ecd\u4e0d\u53ef\u7528\u3002\"\n  };\n  \/\/ Anzeigename der Teilnahmesprache (Schluessel = Ecwid-Wert, deutsch)\n  const LANG_DISPLAY = {\n      \"Deutsch\": \"\u5fb7\u8bed\",\n      \"Englisch\": \"\u82f1\u8bed\",\n      \"Spanisch\": \"\u897f\u73ed\u7259\u8bed\",\n      \"Franz\u00f6sisch\": \"\u6cd5\u8bed\",\n      \"Italienisch\": \"\u610f\u5927\u5229\u8bed\",\n      \"Portugiesisch\": \"\u8461\u8404\u7259\u8bed\",\n      \"Arabisch\": \"\u963f\u62c9\u4f2f\u8bed\",\n      \"Hebr\u00e4isch\": \"\u5e0c\u4f2f\u6765\u8bed\",\n      \"Farsi\": \"\u6ce2\u65af\u8bed\",\n      \"Georgisch\": \"\u683c\u9c81\u5409\u4e9a\u8bed\",\n      \"Ukrainisch\": \"\u4e4c\u514b\u5170\u8bed\",\n      \"Niederl\u00e4ndisch\": \"\u8377\u5170\u8bed\",\n      \"T\u00fcrkisch\": \"\u571f\u8033\u5176\u8bed\",\n      \"Russisch\": \"\u4fc4\u8bed\",\n      \"Chinesisch\": \"\u4e2d\u6587\",\n      \"Japanisch\": \"\u65e5\u8bed\",\n      \"Koreanisch\": \"\u97e9\u8bed\"\n  };\n  \/\/ Feste Laendernamen in der Landessprache (aus CLDR), damit die Liste in\n  \/\/ jedem Browser identisch ist \u2013 unabhaengig von der Intl-Datenlage.\n  const COUNTRY_NAMES = {\n      \"AD\": \"\u5b89\u9053\u5c14\",\n      \"AE\": \"\u963f\u62c9\u4f2f\u8054\u5408\u914b\u957f\u56fd\",\n      \"AF\": \"\u963f\u5bcc\u6c57\",\n      \"AG\": \"\u5b89\u63d0\u74dc\u548c\u5df4\u5e03\u8fbe\",\n      \"AL\": \"\u963f\u5c14\u5df4\u5c3c\u4e9a\",\n      \"AM\": \"\u4e9a\u7f8e\u5c3c\u4e9a\",\n      \"AO\": \"\u5b89\u54e5\u62c9\",\n      \"AR\": \"\u963f\u6839\u5ef7\",\n      \"AT\": \"\u5965\u5730\u5229\",\n      \"AU\": \"\u6fb3\u5927\u5229\u4e9a\",\n      \"AW\": \"\u963f\u9c81\u5df4\",\n      \"AZ\": \"\u963f\u585e\u62dc\u7586\",\n      \"BA\": \"\u6ce2\u65af\u5c3c\u4e9a\u548c\u9ed1\u585e\u54e5\u7ef4\u90a3\",\n      \"BB\": \"\u5df4\u5df4\u591a\u65af\",\n      \"BD\": \"\u5b5f\u52a0\u62c9\u56fd\",\n      \"BE\": \"\u6bd4\u5229\u65f6\",\n      \"BF\": \"\u5e03\u57fa\u7eb3\u6cd5\u7d22\",\n      \"BG\": \"\u4fdd\u52a0\u5229\u4e9a\",\n      \"BH\": \"\u5df4\u6797\",\n      \"BI\": \"\u5e03\u9686\u8fea\",\n      \"BJ\": \"\u8d1d\u5b81\",\n      \"BN\": \"\u6587\u83b1\",\n      \"BO\": \"\u73bb\u5229\u7ef4\u4e9a\",\n      \"BR\": \"\u5df4\u897f\",\n      \"BS\": \"\u5df4\u54c8\u9a6c\",\n      \"BT\": \"\u4e0d\u4e39\",\n      \"BW\": \"\u535a\u8328\u74e6\u7eb3\",\n      \"BY\": \"\u767d\u4fc4\u7f57\u65af\",\n      \"BZ\": \"\u4f2f\u5229\u5179\",\n      \"CA\": \"\u52a0\u62ff\u5927\",\n      \"CD\": \"\u521a\u679c\uff08\u91d1\uff09\",\n      \"CF\": \"\u4e2d\u975e\u5171\u548c\u56fd\",\n      \"CG\": \"\u521a\u679c\uff08\u5e03\uff09\",\n      \"CH\": \"\u745e\u58eb\",\n      \"CI\": \"\u79d1\u7279\u8fea\u74e6\",\n      \"CL\": \"\u667a\u5229\",\n      \"CM\": \"\u5580\u9ea6\u9686\",\n      \"CN\": \"\u4e2d\u56fd\",\n      \"CO\": \"\u54e5\u4f26\u6bd4\u4e9a\",\n      \"CR\": \"\u54e5\u65af\u8fbe\u9ece\u52a0\",\n      \"CV\": \"\u4f5b\u5f97\u89d2\",\n      \"CY\": \"\u585e\u6d66\u8def\u65af\",\n      \"CZ\": \"\u6377\u514b\",\n      \"DE\": \"\u5fb7\u56fd\",\n      \"DJ\": \"\u5409\u5e03\u63d0\",\n      \"DK\": \"\u4e39\u9ea6\",\n      \"DM\": \"\u591a\u7c73\u5c3c\u514b\",\n      \"DO\": \"\u591a\u7c73\u5c3c\u52a0\u5171\u548c\u56fd\",\n      \"DZ\": \"\u963f\u5c14\u53ca\u5229\u4e9a\",\n      \"EC\": \"\u5384\u74dc\u591a\u5c14\",\n      \"EE\": \"\u7231\u6c99\u5c3c\u4e9a\",\n      \"EG\": \"\u57c3\u53ca\",\n      \"ES\": \"\u897f\u73ed\u7259\",\n      \"ET\": \"\u57c3\u585e\u4fc4\u6bd4\u4e9a\",\n      \"FI\": \"\u82ac\u5170\",\n      \"FJ\": \"\u6590\u6d4e\",\n      \"FM\": \"\u5bc6\u514b\u7f57\u5c3c\u897f\u4e9a\",\n      \"FR\": \"\u6cd5\u56fd\",\n      \"GA\": \"\u52a0\u84ec\",\n      \"GB\": \"\u82f1\u56fd\",\n      \"GB-SCT\": \"\u82cf\u683c\u5170\",\n      \"GD\": \"\u683c\u6797\u7eb3\u8fbe\",\n      \"GE\": \"\u683c\u9c81\u5409\u4e9a\",\n      \"GH\": \"\u52a0\u7eb3\",\n      \"GM\": \"\u5188\u6bd4\u4e9a\",\n      \"GN\": \"\u51e0\u5185\u4e9a\",\n      \"GQ\": \"\u8d64\u9053\u51e0\u5185\u4e9a\",\n      \"GR\": \"\u5e0c\u814a\",\n      \"GT\": \"\u5371\u5730\u9a6c\u62c9\",\n      \"GW\": \"\u51e0\u5185\u4e9a\u6bd4\u7ecd\",\n      \"GY\": \"\u572d\u4e9a\u90a3\",\n      \"HK\": \"\u9999\u6e2f\",\n      \"HN\": \"\u6d2a\u90fd\u62c9\u65af\",\n      \"HR\": \"\u514b\u7f57\u5730\u4e9a\",\n      \"HT\": \"\u6d77\u5730\",\n      \"HU\": \"\u5308\u7259\u5229\",\n      \"ID\": \"\u5370\u5ea6\u5c3c\u897f\u4e9a\",\n      \"IE\": \"\u7231\u5c14\u5170\",\n      \"IL\": \"\u4ee5\u8272\u5217\",\n      \"IN\": \"\u5370\u5ea6\",\n      \"IQ\": \"\u4f0a\u62c9\u514b\",\n      \"IR\": \"\u4f0a\u6717\",\n      \"IS\": \"\u51b0\u5c9b\",\n      \"IT\": \"\u610f\u5927\u5229\",\n      \"JM\": \"\u7259\u4e70\u52a0\",\n      \"JO\": \"\u7ea6\u65e6\",\n      \"JP\": \"\u65e5\u672c\",\n      \"KE\": \"\u80af\u5c3c\u4e9a\",\n      \"KG\": \"\u5409\u5c14\u5409\u65af\u65af\u5766\",\n      \"KH\": \"\u67ec\u57d4\u5be8\",\n      \"KI\": \"\u57fa\u91cc\u5df4\u65af\",\n      \"KM\": \"\u79d1\u6469\u7f57\",\n      \"KN\": \"\u5723\u57fa\u8328\u548c\u5c3c\u7ef4\u65af\",\n      \"KR\": \"\u97e9\u56fd\",\n      \"KW\": \"\u79d1\u5a01\u7279\",\n      \"KZ\": \"\u54c8\u8428\u514b\u65af\u5766\",\n      \"LA\": \"\u8001\u631d\",\n      \"LB\": \"\u9ece\u5df4\u5ae9\",\n      \"LC\": \"\u5723\u5362\u897f\u4e9a\",\n      \"LI\": \"\u5217\u652f\u6566\u58eb\u767b\",\n      \"LK\": \"\u65af\u91cc\u5170\u5361\",\n      \"LR\": \"\u5229\u6bd4\u91cc\u4e9a\",\n      \"LS\": \"\u83b1\u7d22\u6258\",\n      \"LT\": \"\u7acb\u9676\u5b9b\",\n      \"LU\": \"\u5362\u68ee\u5821\",\n      \"LV\": \"\u62c9\u8131\u7ef4\u4e9a\",\n      \"LY\": \"\u5229\u6bd4\u4e9a\",\n      \"MA\": \"\u6469\u6d1b\u54e5\",\n      \"MD\": \"\u6469\u5c14\u591a\u74e6\",\n      \"ME\": \"\u9ed1\u5c71\",\n      \"MG\": \"\u9a6c\u8fbe\u52a0\u65af\u52a0\",\n      \"MH\": \"\u9a6c\u7ecd\u5c14\u7fa4\u5c9b\",\n      \"MK\": \"\u5317\u9a6c\u5176\u987f\",\n      \"ML\": \"\u9a6c\u91cc\",\n      \"MM\": \"\u7f05\u7538\",\n      \"MN\": \"\u8499\u53e4\",\n      \"MO\": \"\u6fb3\u95e8\",\n      \"MR\": \"\u6bdb\u91cc\u5854\u5c3c\u4e9a\",\n      \"MT\": \"\u9a6c\u8033\u4ed6\",\n      \"MU\": \"\u6bdb\u91cc\u6c42\u65af\",\n      \"MV\": \"\u9a6c\u5c14\u4ee3\u592b\",\n      \"MW\": \"\u9a6c\u62c9\u7ef4\",\n      \"MX\": \"\u58a8\u897f\u54e5\",\n      \"MY\": \"\u9a6c\u6765\u897f\u4e9a\",\n      \"MZ\": \"\u83ab\u6851\u6bd4\u514b\",\n      \"NA\": \"\u7eb3\u7c73\u6bd4\u4e9a\",\n      \"NE\": \"\u5c3c\u65e5\u5c14\",\n      \"NG\": \"\u5c3c\u65e5\u5229\u4e9a\",\n      \"NI\": \"\u5c3c\u52a0\u62c9\u74dc\",\n      \"NL\": \"\u8377\u5170\",\n      \"NO\": \"\u632a\u5a01\",\n      \"NP\": \"\u5c3c\u6cca\u5c14\",\n      \"NR\": \"\u7459\u9c81\",\n      \"NZ\": \"\u65b0\u897f\u5170\",\n      \"OM\": \"\u963f\u66fc\",\n      \"PA\": \"\u5df4\u62ff\u9a6c\",\n      \"PE\": \"\u79d8\u9c81\",\n      \"PG\": \"\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a\",\n      \"PH\": \"\u83f2\u5f8b\u5bbe\",\n      \"PK\": \"\u5df4\u57fa\u65af\u5766\",\n      \"PL\": \"\u6ce2\u5170\",\n      \"PR\": \"\u6ce2\u591a\u9ece\u5404\",\n      \"PS\": \"\u5df4\u52d2\u65af\u5766\u9886\u571f\",\n      \"PT\": \"\u8461\u8404\u7259\",\n      \"PW\": \"\u5e15\u52b3\",\n      \"PY\": \"\u5df4\u62c9\u572d\",\n      \"QA\": \"\u5361\u5854\u5c14\",\n      \"RO\": \"\u7f57\u9a6c\u5c3c\u4e9a\",\n      \"RS\": \"\u585e\u5c14\u7ef4\u4e9a\",\n      \"RU\": \"\u4fc4\u7f57\u65af\",\n      \"RW\": \"\u5362\u65fa\u8fbe\",\n      \"SA\": \"\u6c99\u7279\u963f\u62c9\u4f2f\",\n      \"SB\": \"\u6240\u7f57\u95e8\u7fa4\u5c9b\",\n      \"SC\": \"\u585e\u820c\u5c14\",\n      \"SD\": \"\u82cf\u4e39\",\n      \"SE\": \"\u745e\u5178\",\n      \"SG\": \"\u65b0\u52a0\u5761\",\n      \"SI\": \"\u65af\u6d1b\u6587\u5c3c\u4e9a\",\n      \"SK\": \"\u65af\u6d1b\u4f10\u514b\",\n      \"SL\": \"\u585e\u62c9\u5229\u6602\",\n      \"SM\": \"\u5723\u9a6c\u529b\u8bfa\",\n      \"SN\": \"\u585e\u5185\u52a0\u5c14\",\n      \"SO\": \"\u7d22\u9a6c\u91cc\",\n      \"SR\": \"\u82cf\u91cc\u5357\",\n      \"SS\": \"\u5357\u82cf\u4e39\",\n      \"ST\": \"\u5723\u591a\u7f8e\u548c\u666e\u6797\u897f\u6bd4\",\n      \"SV\": \"\u8428\u5c14\u74e6\u591a\",\n      \"SZ\": \"\u65af\u5a01\u58eb\u5170\",\n      \"TD\": \"\u4e4d\u5f97\",\n      \"TG\": \"\u591a\u54e5\",\n      \"TH\": \"\u6cf0\u56fd\",\n      \"TJ\": \"\u5854\u5409\u514b\u65af\u5766\",\n      \"TL\": \"\u4e1c\u5e1d\u6c76\",\n      \"TM\": \"\u571f\u5e93\u66fc\u65af\u5766\",\n      \"TN\": \"\u7a81\u5c3c\u65af\",\n      \"TO\": \"\u6c64\u52a0\",\n      \"TR\": \"\u571f\u8033\u5176\",\n      \"TT\": \"\u7279\u7acb\u5c3c\u8fbe\u548c\u591a\u5df4\u54e5\",\n      \"TV\": \"\u56fe\u74e6\u5362\",\n      \"TW\": \"\u53f0\u6e7e\",\n      \"TZ\": \"\u5766\u6851\u5c3c\u4e9a\",\n      \"UA\": \"\u4e4c\u514b\u5170\",\n      \"UG\": \"\u4e4c\u5e72\u8fbe\",\n      \"US\": \"\u7f8e\u56fd\",\n      \"UY\": \"\u4e4c\u62c9\u572d\",\n      \"UZ\": \"\u4e4c\u5179\u522b\u514b\u65af\u5766\",\n      \"VC\": \"\u5723\u6587\u68ee\u7279\u548c\u683c\u6797\u7eb3\u4e01\u65af\",\n      \"VE\": \"\u59d4\u5185\u745e\u62c9\",\n      \"VN\": \"\u8d8a\u5357\",\n      \"VU\": \"\u74e6\u52aa\u963f\u56fe\",\n      \"WS\": \"\u8428\u6469\u4e9a\",\n      \"XK\": \"\u79d1\u7d22\u6c83\",\n      \"YE\": \"\u4e5f\u95e8\",\n      \"ZA\": \"\u5357\u975e\",\n      \"ZM\": \"\u8d5e\u6bd4\u4e9a\",\n      \"ZW\": \"\u6d25\u5df4\u5e03\u97e6\"\n  };\n\n  \/\/ \u2500\u2500 Zusaetzliche Suchbegriffe (Aliasse) je Land \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Beeinflusst NUR die Suche, nicht den angezeigten Namen. Alles klein schreiben.\n  \/\/ Wichtig fuer ZH: lateinische Schreibweisen, damit die Suche auch mit\n  \/\/ umgeschalteter Tastatur funktioniert.\n  const COUNTRY_SEARCH_ALIASES = {\n      \"US\": [\"\u7f8e\u56fd\", \"\u7f8e\u5229\u575a\u5408\u4f17\u56fd\", \"usa\", \"america\", \"united states of america\", \"united states\"],\n      \"GB\": [\"\u82f1\u56fd\", \"\u82f1\u683c\u5170\", \"\u5927\u4e0d\u5217\u98a0\", \"uk\", \"england\", \"britain\", \"great britain\", \"united kingdom\"],\n      \"GB-SCT\": [\"\u82cf\u683c\u5170\", \"scotland\"],\n      \"KR\": [\"\u97e9\u56fd\", \"\u5357\u97e9\", \"korea\", \"south korea\"],\n      \"NL\": [\"\u8377\u5170\", \"holland\", \"netherlands\"],\n      \"CH\": [\"\u745e\u58eb\", \"switzerland\"],\n      \"DE\": [\"\u5fb7\u56fd\", \"deutschland\", \"germany\"],\n      \"AT\": [\"\u5965\u5730\u5229\", \"austria\"],\n      \"CZ\": [\"\u6377\u514b\", \"czech republic\", \"czechia\"],\n      \"TR\": [\"\u571f\u8033\u5176\", \"turkey\", \"turkiye\", \"t\u00fcrkiye\"],\n      \"RU\": [\"\u4fc4\u7f57\u65af\", \"\u4fc4\u56fd\", \"russia\", \"russian federation\"],\n      \"JP\": [\"\u65e5\u672c\"],\n      \"CN\": [\"\u4e2d\u56fd\"],\n      \"TW\": [\"\u53f0\u6e7e\", \"taiwan\"],\n      \"HK\": [\"\u9999\u6e2f\", \"hong kong\"],\n      \"MO\": [\"\u6fb3\u95e8\", \"macao\", \"macau\"],\n      \"SG\": [\"\u65b0\u52a0\u5761\"],\n      \"MY\": [\"\u9a6c\u6765\u897f\u4e9a\"],\n      \"TH\": [\"\u6cf0\u56fd\"],\n      \"AU\": [\"\u6fb3\u5927\u5229\u4e9a\", \"\u6fb3\u6d32\"],\n      \"NZ\": [\"\u65b0\u897f\u5170\"],\n      \"CA\": [\"\u52a0\u62ff\u5927\"],\n      \"FR\": [\"\u6cd5\u56fd\"],\n      \"IT\": [\"\u610f\u5927\u5229\"],\n      \"ES\": [\"\u897f\u73ed\u7259\"],\n      \"PT\": [\"\u8461\u8404\u7259\"],\n      \"BR\": [\"\u5df4\u897f\"],\n      \"MX\": [\"\u58a8\u897f\u54e5\"],\n      \"IN\": [\"\u5370\u5ea6\"],\n      \"ID\": [\"\u5370\u5ea6\u5c3c\u897f\u4e9a\", \"\u5370\u5c3c\"],\n      \"PH\": [\"\u83f2\u5f8b\u5bbe\"],\n      \"VN\": [\"\u8d8a\u5357\", \"vietnam\", \"viet nam\"],\n      \"ZA\": [\"\u5357\u975e\"],\n      \"EG\": [\"\u57c3\u53ca\"],\n      \"IL\": [\"\u4ee5\u8272\u5217\"],\n      \"SA\": [\"\u6c99\u7279\u963f\u62c9\u4f2f\", \"\u6c99\u7279\"],\n      \"AE\": [\"\u963f\u8054\u914b\", \"uae\", \"emirates\", \"dubai\", \"united arab emirates\"],\n      \"PL\": [\"\u6ce2\u5170\"],\n      \"SE\": [\"\u745e\u5178\"],\n      \"NO\": [\"\u632a\u5a01\"],\n      \"DK\": [\"\u4e39\u9ea6\"],\n      \"FI\": [\"\u82ac\u5170\"],\n      \"GR\": [\"\u5e0c\u814a\"],\n      \"UA\": [\"\u4e4c\u514b\u5170\"],\n      \"BE\": [\"\u6bd4\u5229\u65f6\"],\n      \"IE\": [\"\u7231\u5c14\u5170\"],\n      \"MM\": [\"\u7f05\u7538\", \"burma\", \"myanmar\"],\n      \"MK\": [\"\u5317\u9a6c\u5176\u987f\", \"macedonia\", \"north macedonia\"],\n      \"BY\": [\"\u767d\u4fc4\u7f57\u65af\", \"belarus\"],\n      \"GE\": [\"\u683c\u9c81\u5409\u4e9a\", \"grusia\", \"georgia\"],\n      \"IR\": [\"\u4f0a\u6717\", \"persia\", \"iran\"],\n      \"CI\": [\"ivory coast\", \"cote d'ivoire\"],\n      \"TL\": [\"east timor\", \"timor-leste\"],\n      \"SZ\": [\"swaziland\", \"eswatini\"],\n      \"KP\": [\"north korea\"],\n      \"CV\": [\"cabo verde\", \"cape verde\"],\n      \"CD\": [\"dr congo\", \"drc\", \"congo kinshasa\"],\n      \"CG\": [\"congo brazzaville\"],\n      \"VA\": [\"vatican\", \"holy see\"],\n      \"LA\": [\"laos\"],\n      \"MD\": [\"moldova\"]\n  };\n  const COUNTRIES = {\n    cat1: [\"CY\",\"CA\",\"FR\",\"FI\",\"BH\",\"AU\",\"AD\",\"SE\",\"DE\",\"SA\",\"AT\",\"BE\",\"HK\",\"MT\",\"IS\",\"SM\",\"NL\",\"DK\",\"TW\",\"AE\",\"US\",\"BN\",\"CH\",\"NO\",\"GY\",\"QA\",\"MO\",\"IE\",\"LU\",\"SG\",\"LI\",\"GB\",\"GB-SCT\"],\n    cat2: [\"KR\",\"ME\",\"CL\",\"TT\",\"MV\",\"UY\",\"BS\",\"OM\",\"SC\",\"MY\",\"PA\",\"TR\",\"LV\",\"GR\",\"KZ\",\"SK\",\"HU\",\"RU\",\"RO\",\"EE\",\"AW\",\"PT\",\"PR\",\"HR\",\"KW\",\"JP\",\"NZ\",\"PL\",\"IL\",\"ES\",\"LT\",\"SI\",\"CZ\",\"IT\"],\n    cat3: [\"BZ\",\"TN\",\"GT\",\"IQ\",\"ZA\",\"FJ\",\"EC\",\"LY\",\"ID\",\"VN\",\"BT\",\"DZ\",\"PE\",\"PW\",\"BW\",\"DM\",\"PY\",\"MD\",\"GQ\",\"MN\",\"VC\",\"IR\",\"GD\",\"EG\",\"CO\",\"SR\",\"TM\",\"BA\",\"BB\",\"BR\",\"AL\",\"AM\",\"GA\",\"MX\",\"AZ\",\"TH\",\"LC\",\"CN\",\"MK\",\"DO\",\"AG\",\"AR\",\"GE\",\"CR\",\"MU\",\"RS\",\"BY\",\"KN\",\"XK\",\"BG\"],\n    cat4: [\"UA\",\"BI\",\"SS\",\"CF\",\"YE\",\"MZ\",\"MW\",\"SO\",\"CD\",\"LR\",\"MG\",\"NE\",\"AF\",\"SD\",\"SB\",\"ML\",\"HT\",\"VU\",\"BF\",\"LS\",\"TD\",\"GW\",\"TG\",\"GM\",\"KI\",\"SL\",\"PG\",\"UG\",\"KM\",\"PS\",\"RW\",\"TZ\",\"ET\",\"ZM\",\"FM\",\"BJ\",\"GN\",\"TL\",\"MM\",\"SN\",\"CM\",\"TJ\",\"TV\",\"NP\",\"CG\",\"ST\",\"PK\",\"KE\",\"ZW\",\"MH\",\"HN\",\"TO\",\"CI\",\"WS\",\"GH\",\"VE\",\"KH\",\"MR\",\"KG\",\"NI\",\"NG\",\"DJ\",\"AO\",\"LA\",\"BD\",\"BO\",\"MA\",\"JO\",\"LB\",\"NR\",\"IN\",\"NA\",\"CV\",\"UZ\",\"PH\",\"SZ\",\"JM\",\"SV\",\"LK\"]\n  };\n  \/\/ \u2500\u2500 Ecwid-Optionsnamen und -werte: bleiben exakt deutsch wie im Shop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const OPT_COMM_LANG = \"In welcher Sprache nimmst Du teil?\";\n  const OPT_STATUS    = \"Trifft etwas davon auf Dich zu?\";\n  const STATUS_LABEL = {\n    paar:        \"Zu zweit (gleicher Haushalt)\",\n    schueler:    \"Sch\u00fcler:innen\",\n    student:     \"Student\",\n    wiederholer: \"Wiederholer\",\n    apponly:     \"Digitale Teilnahme (App)\"\n  };\n  \/\/ \u2500\u2500 Shadow DOM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const host = document.getElementById(\"sw-host-zh\");\n  const shadow = host.attachShadow({ mode: \"open\" });\n  const styleEl = document.createElement(\"style\");\n  styleEl.textContent = `\n    :host {\n      display: block;\n      --bg:           #F5FAF6;\n      --card:         #FFFFFF;\n      --ink:          #0C1E14;\n      --ink-muted:    #27703F;\n      --accent:       #0C1E14;\n      --accent-light: #E6F2E8;\n      --border:       #C8E0CE;\n      --radius:       16px;\n      --radius-sm:    10px;\n    }\n    @keyframes wiz-spin { to { transform: rotate(360deg); } }\n    .sw-root {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 20px; font-weight: 400; color: var(--ink);\n      background: var(--bg); padding: 32px 20px;\n      display: flex; align-items: flex-start; justify-content: center;\n    }\n    .sw-card {\n      background: var(--card); border: 1px solid var(--border);\n      border-radius: 24px; padding: 36px 32px;\n      width: 100%; max-width: 780px;\n      box-shadow: 0 4px 24px rgba(12,30,20,0.08); box-sizing: border-box;\n    }\n    @media (max-width: 480px) {\n      .sw-root { padding: 16px 10px; }\n      .sw-card { padding: 24px 16px; border-radius: 16px; }\n    }\n    .sw-progress { display: flex; gap: 8px; margin-bottom: 32px; }\n    .sw-progress-step { flex: 1; height: 4px; background: var(--border); border-radius: 999px; transition: background 0.35s; }\n    .sw-progress-step.active { background: var(--accent); }\n    .sw-progress-step.done   { background: var(--accent); opacity: 0.4; }\n    .sw-step-label { font-size: 12px; font-weight: 400; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: 10px; }\n    .sw-heading { font-size: 26px; font-weight: 500; line-height: 1.2; margin: 0 0 6px; color: var(--accent); letter-spacing: 0.01em; }\n    .sw-subtext { font-size: 18px; font-weight: 400; color: var(--ink-muted); margin: 0 0 28px; line-height: 1.6; }\n    .sw-label { display: block; font-size: 18px; font-weight: 700; margin-bottom: 6px; color: var(--ink); }\n    .sw-select, .sw-text-input {\n      width: 100%; padding: 13px 15px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg);\n      font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-select {\n      appearance: none;\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2327703F' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: right 15px center;\n      cursor: pointer;\n    }\n    .sw-select:focus, .sw-text-input:focus {\n      outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1);\n    }\n    .sw-text-input { margin-bottom: 14px; }\n    .sw-redirect { display: none; margin-top: 12px; padding: 18px 20px; border-radius: var(--radius-sm); background: #FFF8F0; border: 1px solid rgba(180,80,0,0.2); font-size: 17px; line-height: 1.8; color: var(--ink); }\n    .sw-redirect strong { display: block; margin-bottom: 8px; font-size: 17px; color: #7A3500; }\n    .sw-redirect a { color: #27703F; text-decoration: underline; }\n    .sw-infobox {\n      margin-top: 12px; padding: 15px 17px; border-radius: var(--radius-sm);\n      background: var(--accent-light); border: 1px solid rgba(12,30,20,0.15);\n      font-size: 18px; font-weight: 400; line-height: 1.5;\n    }\n    .sw-infobox-title {\n      font-weight: 700; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase;\n      color: var(--accent); margin-bottom: 3px;\n    }\n    .sw-divider { border: 0; border-top: 1px solid var(--border); margin: 30px 0 24px; }\n    .sw-choice-row { display: flex; gap: 10px; flex-wrap: wrap; }\n    .sw-choice-card {\n      flex: 1; min-width: 150px; padding: 16px 14px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      text-align: center; cursor: pointer; font-size: 17px; line-height: 1.3;\n      transition: all 0.15s; background: var(--bg); box-sizing: border-box;\n    }\n    .sw-choice-card:hover { border-color: var(--accent); }\n    .sw-choice-card.active { background: var(--accent-light); border-color: var(--accent); font-weight: 700; color: var(--accent); }\n    @media (max-width: 480px) { .sw-choice-card { min-width: 100%; } }\n    .sw-person-block { margin-bottom: 8px; }\n    .sw-person-title { font-weight: 700; font-size: 21px; color: var(--accent); margin-bottom: 16px; }\n    .sw-field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 0; }\n    @media (max-width: 480px) { .sw-field-grid { grid-template-columns: 1fr; } }\n    .sw-range-header { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 22px; }\n    .sw-range-header-label { font-weight: 700; font-size: 18px; }\n    .sw-amount-display { display: flex; align-items: baseline; gap: 3px; }\n    .sw-amount-display span { font-size: 18px; font-weight: 400; }\n    .sw-amount-input {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 36px; font-weight: 700; color: var(--ink);\n      border: 2px solid var(--border); background: var(--bg);\n      text-align: right; width: 132px; padding: 4px 12px;\n      outline: none; border-radius: var(--radius-sm);\n      transition: background 0.15s, color 0.15s, border-color 0.15s, box-shadow 0.15s;\n    }\n    .sw-amount-input:hover { border-color: var(--accent); background: var(--accent-light); }\n    .sw-amount-input:focus { border-color: var(--accent); background: var(--accent-light); color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    input[type=range].sw-range {\n      -webkit-appearance: none; width: 100%; height: 6px;\n      border-radius: 999px; background: var(--border); outline: none; cursor: pointer;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb {\n      -webkit-appearance: none; width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35);\n      cursor: pointer; transition: transform 0.15s, box-shadow 0.15s;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb:hover { transform: scale(1.08); box-shadow: 0 0 0 9px rgba(12,30,20,0.18), 0 3px 12px rgba(12,30,20,0.4); }\n    input[type=range].sw-range::-webkit-slider-thumb:active { transform: scale(1.12); }\n    input[type=range].sw-range::-moz-range-thumb {\n      width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      border: none; box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); cursor: pointer;\n    }\n    input[type=range].sw-range.sw-pulse::-webkit-slider-thumb { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    input[type=range].sw-range.sw-pulse::-moz-range-thumb    { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    @keyframes sw-thumb-pulse {\n      0%, 100% { box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); }\n      50%      { box-shadow: 0 0 0 15px rgba(12,30,20,0.05), 0 3px 10px rgba(12,30,20,0.35); }\n    }\n    .sw-range-wrap { position: relative; }\n    .sw-markers { position: relative; height: 56px; margin-bottom: 8px; margin-left: 18px; margin-right: 18px; }\n    .sw-marker {\n      position: absolute; transform: translateX(-50%);\n      display: flex; flex-direction: column; align-items: center; gap: 2px;\n      justify-content: flex-end; height: 100%; pointer-events: auto; cursor: pointer;\n    }\n    .sw-marker-tick { width: 1px; height: 10px; background: var(--border); flex-shrink: 0; }\n    .sw-marker.active .sw-marker-tick { background: var(--accent); opacity: 0.5; }\n    .sw-marker-label { font-size: 11px; font-weight: 400; color: var(--ink-muted); white-space: nowrap; line-height: 1.2; text-align: center; order: -2; }\n    .sw-marker-amount { font-size: 13px; font-weight: 700; color: var(--ink-muted); order: -1; }\n    .sw-marker.active .sw-marker-label, .sw-marker.active .sw-marker-amount { color: var(--accent); }\n    @media (max-width: 540px) {\n      .sw-markers { display: none; }\n      .sw-markers-mobile { display: flex !important; }\n    }\n    .sw-markers-mobile {\n      display: none; flex-direction: column; gap: 0;\n      margin: 12px 0 4px; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden;\n    }\n    .sw-marker-mobile {\n      display: flex; align-items: center; justify-content: space-between;\n      padding: 10px 14px; cursor: pointer; border-bottom: 1px solid var(--border);\n      transition: background 0.15s; font-family: 'Tinos', Georgia, serif;\n    }\n    .sw-marker-mobile:last-child { border-bottom: 0; }\n    .sw-marker-mobile:hover { background: var(--accent-light); }\n    .sw-marker-mobile.active { background: var(--accent-light); }\n    .sw-marker-mobile-label { font-size: 15px; font-weight: 400; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-label { color: var(--accent); font-weight: 700; }\n    .sw-marker-mobile-amount { font-size: 16px; font-weight: 700; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-amount { color: var(--accent); }\n    .sw-summary-box { padding: 18px 20px; background: var(--accent-light); border: 1px solid rgba(12,30,20,0.2); border-radius: var(--radius-sm); margin-top: 20px; }\n    .sw-summary-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; font-size: 16px; color: var(--ink); }\n    .sw-summary-row.sw-summary-discount { color: #8A1F1F; }\n    .sw-summary-row.sw-summary-total { border-top: 1px solid rgba(12,30,20,0.25); margin-top: 8px; padding-top: 12px; font-weight: 700; font-size: 22px; color: var(--accent); }\n    .sw-summary-person-label { font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-muted); margin: 14px 0 2px; }\n    .sw-summary-person-label:first-child { margin-top: 0; }\n    .sw-btn-row { display: flex; gap: 10px; margin-top: 24px; flex-wrap: wrap; }\n    .sw-btn { flex: 1; min-width: 140px; padding: 15px 17px; border-radius: var(--radius-sm); font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 700; cursor: pointer; transition: all 0.2s; border: 0; }\n    .sw-btn-primary { background: var(--accent); color: #fff; }\n    .sw-btn-primary:hover { background: #27703F; transform: translateY(-1px); }\n    .sw-btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }\n    .sw-btn-secondary { background: transparent; color: var(--ink); border: 1px solid var(--border); }\n    .sw-btn-secondary:hover { background: var(--bg); }\n    .sw-error { display: none; margin-top: 15px; padding: 13px 15px; border-radius: var(--radius-sm); background: #FFF3F3; border: 1px solid rgba(220,30,30,0.2); color: #8A1F1F; font-size: 18px; font-weight: 400; line-height: 1.5; white-space: pre-wrap; }\n    .wiz-spinner { display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.4); border-top-color: #fff; border-radius: 50%; animation: wiz-spin 0.7s linear infinite; vertical-align: middle; margin-right: 8px; }\n    .sw-country-search-wrap { position: relative; margin-bottom: 10px; }\n    .sw-country-search-icon { position: absolute; left: 18px; top: 50%; transform: translateY(-50%); color: var(--ink-muted); pointer-events: none; opacity: 0.5; }\n    .sw-country-search {\n      width: 100%; padding: 13px 15px 13px 54px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg); font-family: 'Tinos', Georgia, serif;\n      font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-country-search:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    .sw-country-list { max-height: 240px; overflow-y: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }\n    .sw-country-item { padding: 11px 15px; cursor: pointer; font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; display: flex; justify-content: space-between; align-items: center; transition: background 0.15s; border-bottom: 1px solid var(--border); }\n    .sw-country-item:last-child { border-bottom: 0; }\n    .sw-country-item:hover { background: var(--accent-light); }\n    .sw-country-item.selected { background: var(--accent-light); font-weight: 700; }\n    .sw-country-item-cat { font-size: 12px; color: var(--ink-muted); background: var(--border); padding: 2px 8px; border-radius: 999px; }\n    .sw-country-empty { padding: 15px; font-size: 18px; color: var(--ink-muted); text-align: center; }\n    .sw-step { display: none; }\n    .sw-step.active { display: block; }\n  `;\n  shadow.appendChild(styleEl);\n  const wrapper = document.createElement(\"div\");\n  wrapper.innerHTML = `\n    <div class=\"sw-root\">\n      <div class=\"sw-card\">\n        <div class=\"sw-progress\">\n          <div class=\"sw-progress-step\" id=\"sw-prog-1\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-2\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-3\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-4\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-5\"><\/div>\n        <\/div>\n        <!-- STEP 1 -->\n        <div class=\"sw-step active\" id=\"sw-step-welcome\">\n          <div class=\"sw-step-label\">\u7b2c1\u6b65\uff0c\u51715\u6b65<\/div>\n          <h2 class=\"sw-heading\">\u6b22\u8fce<\/h2>\n          <p class=\"sw-subtext\">\u53ea\u9700\u51e0\u4e2a\u6b65\u9aa4\uff0c\u60a8\u5c31\u53ef\u4ee5\u9009\u62e9\u56fd\u5bb6\u3001\u8bed\u8a00\u3001\u62a5\u540d\u65b9\u5f0f\u548c\u53c2\u4e0e\u8d39\u7528\u2014\u2014\u7136\u540e\u76f4\u63a5\u8fdb\u5165\u7ed3\u8d26\u3002<\/p>\n          <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-welcome-next\" style=\"width:100%;\">\u4ef7\u683c\u4e0e\u62a5\u540d<\/button>\n        <\/div>\n        <!-- STEP 2 -->\n        <div class=\"sw-step\" id=\"sw-step-country\">\n          <div class=\"sw-step-label\">\u7b2c2\u6b65\uff0c\u51715\u6b65<\/div>\n          <h2 class=\"sw-heading\">\u60a8\u4f4f\u5728\u54ea\u91cc\uff1f<\/h2>\n          <label class=\"sw-label\">\u56fd\u5bb6<\/label>\n          <div class=\"sw-country-search-wrap\">\n            <svg class=\"sw-country-search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.35-4.35\"\/><\/svg>\n            <input type=\"text\" class=\"sw-country-search\" id=\"sw-country-search\" placeholder=\"\u641c\u7d22\u56fd\u5bb6\u2026\" autocomplete=\"off\">\n          <\/div>\n          <div class=\"sw-country-list\" id=\"sw-country-list\"><\/div>\n          <input type=\"hidden\" id=\"sw-country\">\n          <div class=\"sw-infobox\" id=\"sw-catInfo\">\n            <div class=\"sw-infobox-title\">\u4ef7\u683c\u7c7b\u522b<\/div>\n            <div id=\"sw-catText\">\u8bf7\u5148\u9009\u62e9\u4e00\u4e2a\u56fd\u5bb6\u3002<\/div>\n          <\/div>\n          <div class=\"sw-redirect\" id=\"sw-redirect-russia\">\n            <strong>\u6765\u81ea\u4fc4\u7f57\u65af\u7684\u53c2\u52a0\u8005\u6709\u4e13\u95e8\u7684\u62a5\u540d\u9875\u9762\u3002<\/strong>\n            \u6211\u4eec\u7684\u652f\u4ed8\u7cfb\u7edf\u5728\u4fc4\u7f57\u65af\u65e0\u6cd5\u4f7f\u7528\u3002\u8bf7\u5728\u8be5\u9875\u9762\u62a5\u540d\uff1a<br><br>\n            <a href=\"https:\/\/spiritual-activity.org\/ru\/anmeldung-basic-exercises\/\">\u524d\u5f80\u4fc4\u8bed\u62a5\u540d\u9875\u9762<\/a>\n          <\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-country-back\">\u8fd4\u56de<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-country-next\" disabled>\u4e0b\u4e00\u6b65<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 3 -->\n        <div class=\"sw-step\" id=\"sw-step-langform\">\n          <div class=\"sw-step-label\">\u7b2c3\u6b65\uff0c\u51715\u6b65<\/div>\n          <h2 class=\"sw-heading\">\u8bed\u8a00\u4e0e\u62a5\u540d\u65b9\u5f0f<\/h2>\n          <label class=\"sw-label\" for=\"sw-commLang\">\u60a8\u5c06\u4f7f\u7528\u54ea\u79cd\u8bed\u8a00\u53c2\u4e0e\uff1f<\/label>\n          <select class=\"sw-select\" id=\"sw-commLang\">\n            <option value=\"\" selected disabled>\u8bf7\u9009\u62e9\u2026<\/option>\n            <option value=\"Deutsch\">\u5fb7\u8bed<\/option>\n            <option value=\"Englisch\">\u82f1\u8bed<\/option>\n            <option value=\"Spanisch\">\u897f\u73ed\u7259\u8bed<\/option>\n            <option value=\"Franz\u00f6sisch\">\u6cd5\u8bed<\/option>\n            <option value=\"Italienisch\">\u610f\u5927\u5229\u8bed<\/option>\n            <option value=\"Portugiesisch\">\u8461\u8404\u7259\u8bed<\/option>\n            <option value=\"Arabisch\">\u963f\u62c9\u4f2f\u8bed<\/option>\n            <option value=\"Hebr\u00e4isch\">\u5e0c\u4f2f\u6765\u8bed<\/option>\n            <option value=\"Farsi\">\u6ce2\u65af\u8bed<\/option>\n            <option value=\"Georgisch\">\u683c\u9c81\u5409\u4e9a\u8bed<\/option>\n            <option value=\"Ukrainisch\">\u4e4c\u514b\u5170\u8bed<\/option>\n            <option value=\"Niederl\u00e4ndisch\">\u8377\u5170\u8bed<\/option>\n            <option value=\"T\u00fcrkisch\">\u571f\u8033\u5176\u8bed<\/option>\n            <option value=\"Bulgarisch\">\u4fdd\u52a0\u5229\u4e9a\u8bed<\/option>\n            <option value=\"Russisch\">\u4fc4\u8bed<\/option>\n            <option value=\"Chinesisch\">\u4e2d\u6587<\/option>\n            <option value=\"Japanisch\">\u65e5\u8bed<\/option>\n            <option value=\"Koreanisch\">\u97e9\u8bed<\/option>\n          <\/select>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note\" style=\"display:none; margin-top:14px;\">\n            <div class=\"sw-infobox-title\">\u6570\u5b57\u53c2\u4e0e \u00b7 \u221235\u20ac<\/div>\n            <div id=\"sw-apponly-note-text\">\u60a8\u5c06\u4ee5\u6570\u5b57\u65b9\u5f0f\u53c2\u4e0e\u3002\u6298\u6263\u5c06\u81ea\u52a8\u5728\u6458\u8981\u4e2d\u4f53\u73b0\u3002<\/div>\n          <\/div>\n          <label class=\"sw-label\" style=\"margin-top:26px;\">\u60a8\u5e0c\u671b\u5982\u4f55\u62a5\u540d\uff1f<\/label>\n          <div class=\"sw-choice-row\" id=\"sw-form-choices\">\n            <div class=\"sw-choice-card active\" data-form=\"einzeln\">\u5355\u4eba<\/div>\n            <div class=\"sw-choice-card\" data-form=\"paar\">\u4e24\u4eba<br><span style=\"font-size:13px; font-weight:400;\">\uff08\u540c\u4e00\u5bb6\u5ead\uff09<\/span><\/div>\n            <div class=\"sw-choice-card\" data-form=\"gruppe\">\u56e2\u4f53<br><span style=\"font-size:13px; font-weight:400;\">\uff084\u4eba\u53ca\u4ee5\u4e0a\uff09<\/span><\/div>\n          <\/div>\n          <div class=\"sw-infobox\" id=\"sw-gruppe-note\" style=\"display:none; margin-top:18px;\">\n            <div class=\"sw-infobox-title\">\u56e2\u4f53\u62a5\u540d<\/div>\n            <div>\u611f\u8c22\u60a8\u7684\u5173\u6ce8\u3002\u60a8\u53ef\u4ee5\u5728\u4e0b\u4e00\u9875\u5b8c\u6210\u56e2\u4f53\u62a5\u540d\u3002\u8bf7\u6ce8\u610f\uff1a\u56e2\u4f53\u62a5\u540d\u4ec5\u63d0\u4f9b\u5fb7\u8bed\u548c\u82f1\u8bed\u7248\u672c\u3002<\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-langform\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-langform-back\">\u8fd4\u56de<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-langform-next\" disabled>\u4e0b\u4e00\u6b65<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-gruppe-redirect\" style=\"display:none;\">\u7ee7\u7eed\u524d\u5f80\u56e2\u4f53\u62a5\u540d<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4A -->\n        <div class=\"sw-step\" id=\"sw-step-details-solo\">\n          <div class=\"sw-step-label\">\u7b2c4\u6b65\uff0c\u51715\u6b65<\/div>\n          <h2 class=\"sw-heading\">\u5173\u4e8e\u60a8\u7684\u4e00\u4e9b\u4fe1\u606f<\/h2>\n          <p class=\"sw-subtext\">\u4ee5\u4e0b\u54ea\u4e00\u9879\u7b26\u5408\u60a8\u7684\u60c5\u51b5\uff1f\u8fd9\u5c06\u5e2e\u52a9\u6211\u4eec\u4e3a\u60a8\u63d0\u4f9b\u5408\u9002\u7684\u53c2\u4e0e\u8d39\u7528\u5efa\u8bae\u3002<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u6570\u5b57\u53c2\u4e0e \u00b7 \u221235\u20ac<\/div>\n            <div>\u60a8\u5c06\u4ee5\u6570\u5b57\u65b9\u5f0f\u53c2\u4e0e\u3002\u6298\u6263\u5c06\u81ea\u52a8\u5728\u6458\u8981\u4e2d\u4f53\u73b0\u3002<\/div>\n          <\/div>\n          <label class=\"sw-label\">\u8bf7\u9009\u62e9<\/label>\n          <select class=\"sw-select\" id=\"sw-solo-status\">\n            <option value=\"\" disabled selected>\u8bf7\u9009\u62e9\u2026<\/option>\n            <option value=\"normal\">\u6b63\u5e38\u62a5\u540d<\/option>\n            <option value=\"schueler\">\u5728\u6821\u5b66\u751f\uff08\u221250%\uff09<\/option>\n            <option value=\"student\">\u6b63\u5728\u63a5\u53d7\u57f9\u8bad\uff0f\u5728\u8bfb\u5b66\u751f\uff08\u221225%\uff09<\/option>\n            <option value=\"wiederholer\">\u6211\u6b63\u5728\u91cd\u4fee\u5e26\u6709\u7075\u9b42\u7ec3\u4e60\u7684\u8bfe\u7a0b\uff08\u65e0\u9700\u65b0\u5361\u7247\u5957\u88c5 \u2212 30%\uff09<\/option>\n          <\/select>\n          <div class=\"sw-error\" id=\"sw-error-details-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-solo-back\">\u8fd4\u56de<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-solo-next\" disabled>\u4e0b\u4e00\u6b65<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4B -->\n        <div class=\"sw-step\" id=\"sw-step-details-paar\">\n          <div class=\"sw-step-label\">\u7b2c4\u6b65\uff0c\u51715\u6b65<\/div>\n          <h2 class=\"sw-heading\">\u5173\u4e8e\u4f60\u4eec\u4e8c\u4eba\u7684\u4fe1\u606f<\/h2>\n          <p class=\"sw-subtext\">\u8bf7\u586b\u5199\u4e24\u4eba\u7684\u4fe1\u606f\u3002\u7b2c\u4e8c\u4f4d\u53c2\u4e0e\u8005\u5c06\u81ea\u52a8\u83b7\u5f9750%\u7684\u6298\u6263\u3002<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-paar-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u6570\u5b57\u53c2\u4e0e \u00b7 \u221235\u20ac<\/div>\n            <div>\u4f60\u4eec\u5c06\u4ee5\u6570\u5b57\u65b9\u5f0f\u53c2\u4e0e\u3002\u6298\u6263\u5c06\u81ea\u52a8\u5728\u6458\u8981\u4e2d\u4f53\u73b0\u3002<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\u53c2\u4e0e\u80051<\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\u540d\u5b57<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-vorname\"><\/div>\n              <div><label class=\"sw-label\">\u59d3\u6c0f<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\u7535\u5b50\u90ae\u4ef6<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p1-email\">\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\u53c2\u4e0e\u80052 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">\uff08\u221250%\uff09<\/span><\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\u540d\u5b57<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-vorname\"><\/div>\n              <div><label class=\"sw-label\">\u59d3\u6c0f<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\u7535\u5b50\u90ae\u4ef6<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p2-email\">\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-details-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-paar-back\">\u8fd4\u56de<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-paar-next\" disabled>\u4e0b\u4e00\u6b65<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5A -->\n        <div class=\"sw-step\" id=\"sw-step-amount-solo\">\n          <div class=\"sw-step-label\">\u7b2c5\u6b65\uff0c\u51715\u6b65<\/div>\n          <h2 class=\"sw-heading\">\u9009\u62e9\u53c2\u4e0e\u8d39\u7528<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-solo\">\u5728\u8fd9\u91cc\uff0c\u60a8\u53ef\u4ee5\u9009\u62e9\u9002\u5408\u60a8\u7684\u53c2\u4e0e\u8d39\u7528\u3002<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-solo\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u6570\u5b57\u53c2\u4e0e \u00b7 \u221235\u20ac<\/div>\n            <div>\u60a8\u5c06\u4ee5\u6570\u5b57\u65b9\u5f0f\u53c2\u4e0e\u3002\u6298\u6263\u5c06\u81ea\u52a8\u5728\u6458\u8981\u4e2d\u4f53\u73b0\u3002<\/div>\n          <\/div>\n          <div class=\"sw-range-header\">\n            <div class=\"sw-range-header-label\">\u60a8\u7684\u91d1\u989d<\/div>\n            <div class=\"sw-amount-display\">\n              <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-solo\" value=\"360\">\n              <span>\u20ac<\/span>\n            <\/div>\n          <\/div>\n          <div class=\"sw-range-wrap\">\n            <div class=\"sw-markers\" id=\"sw-markers-solo\"><\/div>\n            <input type=\"range\" class=\"sw-range\" id=\"sw-amount-solo\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n            <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-solo\"><\/div>\n          <\/div>\n          <p style=\"margin-top:18px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \u5982\u679c\u60a8\u9700\u8981\u8fdb\u4e00\u6b65\u7684\u7ecf\u6d4e\u51cf\u514d\uff0c\u6b22\u8fce\u5199\u4fe1\u7ed9\u6211\u4eec\uff1a\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-solo\">\n            <div class=\"sw-summary-row\"><span>\u5df2\u9009\u8d39\u7528<\/span><span id=\"sw-solo-chosen\">360\u20ac<\/span><\/div>\n            <div id=\"sw-solo-discounts\"><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-solo\" style=\"display:none;\"><span>\u8fd0\u8d39<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\u603b\u8ba1<\/span><span><span id=\"sw-solo-total\">360<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-solo-back\">\u8fd4\u56de<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-solo\">\u62a5\u540d<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5B -->\n        <div class=\"sw-step\" id=\"sw-step-amount-paar\">\n          <div class=\"sw-step-label\">\u7b2c5\u6b65\uff0c\u51715\u6b65<\/div>\n          <h2 class=\"sw-heading\">\u9009\u62e9\u53c2\u4e0e\u8d39\u7528<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-paar\">\u6bcf\u4f4d\u53c2\u4e0e\u8005\u9009\u62e9\u81ea\u5df1\u7684\u53c2\u4e0e\u8d39\u7528\u3002\u53c2\u4e0e\u80052\u5c06\u81ea\u52a8\u83b7\u5f9750%\u7684\u6298\u6263\u3002<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-paar\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u6570\u5b57\u53c2\u4e0e \u00b7 \u221235\u20ac<\/div>\n            <div>\u4f60\u4eec\u5c06\u4ee5\u6570\u5b57\u65b9\u5f0f\u53c2\u4e0e\u3002\u6298\u6263\u5c06\u81ea\u52a8\u5728\u6458\u8981\u4e2d\u4f53\u73b0\u3002<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p1-title\">\u53c2\u4e0e\u80051<\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\u53c2\u4e0e\u8d39\u7528<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p1\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p1\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p1\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p1\"><\/div>\n            <\/div>\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p2-title\">\u53c2\u4e0e\u80052 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">\uff08\u221250%\uff09<\/span><\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\u53c2\u4e0e\u8d39\u7528<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p2\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p2\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p2\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p2\"><\/div>\n            <\/div>\n          <\/div>\n          <p style=\"margin-top:8px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \u5982\u679c\u4f60\u4eec\u9700\u8981\u8fdb\u4e00\u6b65\u7684\u7ecf\u6d4e\u51cf\u514d\uff0c\u6b22\u8fce\u5199\u4fe1\u7ed9\u6211\u4eec\uff1a\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-paar\">\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p1-label\">\u53c2\u4e0e\u80051<\/div>\n            <div class=\"sw-summary-row\"><span>\u5df2\u9009\u8d39\u7528<\/span><span id=\"sw-p1-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p1-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\u5c0f\u8ba1<\/span><span id=\"sw-p1-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p2-label\">\u53c2\u4e0e\u80052<\/div>\n            <div class=\"sw-summary-row\"><span>\u5df2\u9009\u8d39\u7528<\/span><span id=\"sw-p2-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p2-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\u5c0f\u8ba1<\/span><span id=\"sw-p2-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-paar\" style=\"display:none;\"><span>\u8fd0\u8d39<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\u603b\u8ba1<\/span><span><span id=\"sw-paar-total\">0<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-paar-back\">\u8fd4\u56de<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-paar\">\u524d\u5f80\u7ed3\u8d26<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  `;\n  shadow.appendChild(wrapper);\n  const $ = (id) => shadow.getElementById(id);\n  const COUNTRY_TO_CAT = {};\n  Object.keys(COUNTRIES).forEach(cat => COUNTRIES[cat].forEach(code => COUNTRY_TO_CAT[code] = cat));\n  function getCountryName(code) {\n    if (COUNTRY_NAMES[code]) return COUNTRY_NAMES[code];\n    try { return new Intl.DisplayNames([\"zh\"], { type: \"region\" }).of(code) || code; }\n    catch { return code; }\n  }\n\n  function getCountryAliases(code) {\n    const list = [];\n    \/\/ Intl-Name als Fallback, falls er vom festen CLDR-Namen abweicht\n    if (COUNTRY_NAMES[code]) {\n      try {\n        const intlName = new Intl.DisplayNames([\"zh\"], { type: \"region\" }).of(code);\n        if (intlName && intlName !== COUNTRY_NAMES[code]) list.push(intlName.toLowerCase());\n      } catch {}\n    }\n    \/\/ Englischer Name als lateinische Fallback-Schreibweise fuer alle Laender\n    try {\n      const enName = new Intl.DisplayNames([\"en\"], { type: \"region\" }).of(code);\n      if (enName) list.push(enName.toLowerCase());\n    } catch {}\n    (COUNTRY_SEARCH_ALIASES[code] || []).forEach(a => list.push(a.toLowerCase()));\n    return list;\n  }\n  function getAllCountriesSorted() {\n    const all = [];\n    [\"cat1\",\"cat2\",\"cat3\",\"cat4\"].forEach(cat => {\n      COUNTRIES[cat]\n        .map(code => ({ code, name: getCountryName(code), cat, aliases: getCountryAliases(code) }))\n        .sort((a, b) => a.name.localeCompare(b.name, \"zh\"))\n        .forEach(c => all.push(c));\n    });\n    return all;\n  }\n  function emptyPerson() {\n    return { vorname: \"\", nachname: \"\", email: \"\", wiederholer: false, statusType: \"\", amount: 0 };\n  }\n  const state = {\n    country: \"\", category: \"cat1\",\n    commLang: \"\", form: \"einzeln\",\n    persons: { solo: emptyPerson(), p1: emptyPerson(), p2: emptyPerson() }\n  };\n  function getPerson(key) { return state.persons[key] || state.persons.solo; }\n  function isAppOnly() {\n    const { category: cat, commLang: lang, country } = state;\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[country];\n      \/\/ Ausnahme (z.B. China) gilt nur, wenn auch die passende Sprache gewaehlt ist \u2013\n      \/\/ sonst kann kein physisches Kartenset verschickt werden.\n      if (!exceptionLang || lang !== exceptionLang) return true;\n    }\n    if (APP_ONLY_LANGS.has(lang)) return true;\n    if (lang === \"Russisch\" && country && country !== \"RU\") return true;\n    return false;\n  }\n\n  function isWiederholer(person) {\n    return !!person && (person.wiederholer || person.statusType === \"wiederholer\");\n  }\n\n  \/\/ Geht ueberhaupt ein Kartenset raus? Nur wenn die Teilnahme nicht rein digital\n  \/\/ ist UND mindestens eine Person ein neues Set braucht - Wiederholer bekommen\n  \/\/ keins. Steuert sowohl die Versandzeile in der Zusammenfassung als auch die\n  \/\/ Wahl des Ecwid-Produkts, damit beide nicht auseinanderlaufen koennen.\n  function hasPhysicalShipment(isPaar) {\n    if (isAppOnly()) return false;\n    return isPaar\n      ? !(isWiederholer(state.persons.p1) && isWiederholer(state.persons.p2))\n      : !isWiederholer(state.persons.solo);\n  }\n\n  \/\/ Ecwid haengt den Versand am Produkt fest, nicht am Warenkorb. Ohne physischen\n  \/\/ Versand muss deshalb das versandfreie Digital-Produkt in den Warenkorb, sonst\n  \/\/ schlaegt der Shop trotzdem Versandkosten auf.\n  function getParticipationProductId(isPaar) {\n    return hasPhysicalShipment(isPaar) ? PRODUCTS[state.category] : PRODUCTS_APPONLY[state.category];\n  }\n  function updateAppOnlyUI() {\n    const appOnly = state.commLang ? isAppOnly() : false;\n    let reason = \"\";\n    if (appOnly) {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[state.country];\n      if ((state.category === \"cat3\" || state.category === \"cat4\") && exceptionLang) {\n        reason = TXT.reasonException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang);\n      } else if (state.category === \"cat3\" || state.category === \"cat4\") {\n        reason = TXT.reasonRegion;\n      } else if (state.commLang === \"Russisch\") {\n        reason = TXT.reasonRussian;\n      } else {\n        reason = TXT.reasonLanguage;\n      }\n    }\n    const noteIds = [\"sw-apponly-note\",\"sw-apponly-note-step4\",\"sw-apponly-note-paar-step4\",\"sw-apponly-note-step5-solo\",\"sw-apponly-note-step5-paar\"];\n    noteIds.forEach(id => {\n      const el = $(id);\n      if (!el) return;\n      el.style.display = appOnly ? \"block\" : \"none\";\n      const textDiv = el.querySelector(\"div:not(.sw-infobox-title)\");\n      if (textDiv && reason) textDiv.textContent = reason;\n    });\n  }\n  const STEP_CONTAINER = {\n    1: () => \"sw-step-welcome\",\n    2: () => \"sw-step-country\",\n    3: () => \"sw-step-langform\",\n    4: () => state.form === \"paar\" ? \"sw-step-details-paar\" : \"sw-step-details-solo\",\n    5: () => state.form === \"paar\" ? \"sw-step-amount-paar\" : \"sw-step-amount-solo\"\n  };\n  function showStep(n) {\n    shadow.querySelectorAll(\".sw-step\").forEach(el => el.classList.remove(\"active\"));\n    $(STEP_CONTAINER[n]()).classList.add(\"active\");\n    for (let i = 1; i <= 5; i++) {\n      const prog = $(\"sw-prog-\" + i);\n      if (!prog) continue;\n      if (i < n) prog.className = \"sw-progress-step done\";\n      else if (i === n) prog.className = \"sw-progress-step active\";\n      else prog.className = \"sw-progress-step\";\n    }\n    if (n === 5) {\n      const sliderIds = state.form === \"paar\" ? [\"sw-amount-p1\",\"sw-amount-p2\"] : [\"sw-amount-solo\"];\n      sliderIds.forEach(sid => { const el = $(sid); if (el) el.classList.add(\"sw-pulse\"); });\n      refreshSummary();\n    }\n  }\n  function setNextEnabled(id, enabled) {\n    const b = $(id);\n    if (!b) return;\n    b.disabled = !enabled;\n    b.style.opacity = enabled ? \"1\" : \".4\";\n    b.style.cursor  = enabled ? \"pointer\" : \"not-allowed\";\n  }\n  function showErrorIn(id, msg) { const el=$(id); el.style.display=\"block\"; el.textContent=msg; }\n  function clearErrorIn(id)     { const el=$(id); el.style.display=\"none\";  el.textContent=\"\"; }\n  function setCheckoutLoading(btnId, loading) {\n    const btn = $(btnId);\n    \/\/ Nach dem Danke-Bildschirm existiert der Button nicht mehr \u2013 dann nichts tun.\n    if (!btn) return;\n    const overlay = document.getElementById(OVERLAY_ID);\n    if (!btn.dataset.defaultLabel) btn.dataset.defaultLabel = btn.textContent;\n    if (loading) {\n      btn.disabled = true;\n      btn.innerHTML = '<span class=\"wiz-spinner\"><\/span> ' + TXT.preparing;\n      btn.style.opacity = \".8\";\n      if (overlay) overlay.style.display = \"flex\";\n    } else {\n      btn.disabled = false;\n      btn.textContent = btn.dataset.defaultLabel;\n      btn.style.opacity = \"1\";\n      if (overlay) overlay.style.display = \"none\";\n    }\n  }\n  function showThankYou() {\n    const card = shadow.querySelector(\".sw-card\");\n    if (!card) return;\n    card.innerHTML = `\n      <div style=\"text-align:center; padding:20px 0;\">\n        <div style=\"font-size:56px; margin-bottom:16px; color:#27703F;\">\u2713<\/div>\n        <h2 style=\"font-family:'Tinos',Georgia,serif; font-size:26px; font-weight:500; margin:0 0 12px; color:#0C1E14;\">${TXT.thanksTitle}<\/h2>\n        <p style=\"font-family:'Tinos',Georgia,serif; font-size:18px; color:#27703F; line-height:1.6; margin:0 0 24px;\">${TXT.thanksLine1}${TXT.thanksLine2 ? \"<br>\" + TXT.thanksLine2 : \"\"}<\/p>\n        <div style=\"display:flex; justify-content:center;\">\n          <div style=\"width:36px; height:36px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:wiz-spin 0.8s linear infinite;\"><\/div>\n        <\/div>\n      <\/div>`;\n  }\n  function getAnchors(cat) {\n    const r = RANGES[cat], o = ORIENTIERUNG[cat];\n    return [[0,r.min],[25,o.reduced],[50,o.base],[75,o.support],[100,r.max]];\n  }\n  function normToEuro(norm, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      if (norm <= a[i+1][0]) {\n        const t = (norm - a[i][0]) \/ (a[i+1][0] - a[i][0]);\n        return Math.round(a[i][1] + t * (a[i+1][1] - a[i][1]));\n      }\n    }\n    return a[a.length-1][1];\n  }\n  function euroToNorm(euro, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      const lo = a[i][1], hi = a[i+1][1];\n      if (euro <= hi) {\n        if (hi === lo) return a[i+1][0];\n        return a[i][0] + (euro - lo) \/ (hi - lo) * (a[i+1][0] - a[i][0]);\n      }\n    }\n    return 100;\n  }\n  function getMarkerDefs(cat) {\n    const o = ORIENTIERUNG[cat];\n    return [\n      { value: o.reduced, label: TXT.markerReduced, normPct: 25 },\n      { value: o.base,    label: TXT.markerBase,    normPct: 50 },\n      { value: o.support, label: TXT.markerSupport, normPct: 75 }\n    ];\n  }\n  function renderMarkers(personKey) {\n    const cat = state.category;\n    const person = getPerson(personKey);\n    const markers = getMarkerDefs(cat);\n    const container = $(`sw-markers-${personKey}`);\n    container.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker\" + (person.amount === m.value ? \" active\" : \"\");\n      div.style.left = m.normPct + \"%\";\n      div.innerHTML = `<div class=\"sw-marker-tick\"><\/div><div class=\"sw-marker-amount\">${m.value}\u20ac<\/div><div class=\"sw-marker-label\">${m.label}<\/div>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      container.appendChild(div);\n    });\n    const mobileContainer = $(`sw-markers-mobile-${personKey}`);\n    mobileContainer.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker-mobile\" + (person.amount === m.value ? \" active\" : \"\");\n      div.innerHTML = `<span class=\"sw-marker-mobile-label\">${m.label}<\/span><span class=\"sw-marker-mobile-amount\">${m.value}\u20ac<\/span>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      mobileContainer.appendChild(div);\n    });\n  }\n  function selectMarkerValue(personKey, value) {\n    const person = getPerson(personKey);\n    $(`sw-amount-${personKey}`).value = euroToNorm(value, state.category);\n    person.amount = value;\n    $(`sw-amountInput-${personKey}`).value = value;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromSlider(personKey) {\n    const person = getPerson(personKey);\n    const norm = Number($(`sw-amount-${personKey}`).value);\n    person.amount = normToEuro(norm, state.category);\n    $(`sw-amountInput-${personKey}`).value = person.amount;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromInput(personKey) {\n    const person = getPerson(personKey);\n    const r = RANGES[state.category];\n    let val = Number($(`sw-amountInput-${personKey}`).value);\n    if (isNaN(val)) val = r.min;\n    val = Math.min(r.max, Math.max(r.min, val));\n    person.amount = val;\n    $(`sw-amountInput-${personKey}`).value = val;\n    $(`sw-amount-${personKey}`).value = euroToNorm(val, state.category);\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function wireAmountControl(personKey) {\n    $(`sw-amount-${personKey}`).addEventListener(\"input\", () => updateAmountFromSlider(personKey));\n    $(`sw-amountInput-${personKey}`).addEventListener(\"input\", () => {\n      const v = Number($(`sw-amountInput-${personKey}`).value);\n      if (!isNaN(v)) { getPerson(personKey).amount = v; refreshSummary(); }\n    });\n    $(`sw-amountInput-${personKey}`).addEventListener(\"change\", () => updateAmountFromInput(personKey));\n  }\n  function applyRangeForForm() {\n    const cat = state.category;\n    const ori = ORIENTIERUNG[cat];\n    const hint = TXT.hintLong;\n    if (state.form === \"paar\") {\n      [\"p1\",\"p2\"].forEach(key => {\n        const person = getPerson(key);\n        person.amount = ori.base;\n        $(`sw-amount-${key}`).value = 50;\n        $(`sw-amountInput-${key}`).value = ori.base;\n      });\n      const p1name = state.persons.p1.vorname;\n      const p2name = state.persons.p2.vorname;\n      $(\"sw-amount-p1-title\").innerHTML = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-amount-p2-title\").innerHTML = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) +\n        ' <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">' + TXT.p2Badge + '<\/span>';\n      $(\"sw-summary-p1-label\").textContent = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-summary-p2-label\").textContent = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) + \" \" + TXT.p2Badge;\n      $(\"sw-rangeHint-paar\").textContent = hint;\n      renderMarkers(\"p1\"); renderMarkers(\"p2\");\n    } else {\n      const person = state.persons.solo;\n      person.amount = ori.base;\n      $(\"sw-amount-solo\").value = 50;\n      $(\"sw-amountInput-solo\").value = ori.base;\n      $(\"sw-rangeHint-solo\").textContent = hint;\n      renderMarkers(\"solo\");\n    }\n    refreshSummary();\n  }\n  \/\/ \u2500\u2500 Rabattlogik \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Zuerst wird der fixe App-Rabatt vom gewaehlten Betrag abgezogen, danach der\n  \/\/ prozentuale Rabatt auf den verbleibenden Betrag. Beide werden separat gezeigt.\n  function getPercentDiscountCandidate(person, isPaarP2) {\n    if (isPaarP2) return { value: DISCOUNT_PAAR_P2, label: TXT.discP2 };\n    const candidates = [];\n    if (isWiederholer(person)) candidates.push({ value: DISCOUNT_WIEDERHOLER, label: TXT.discWiederholer });\n    if (person.statusType === \"schueler\") candidates.push({ value: DISCOUNT_SCHUELER, label: TXT.discSchueler });\n    if (person.statusType === \"student\")  candidates.push({ value: DISCOUNT_STUDENT,  label: TXT.discStudent });\n    if (!candidates.length) return null;\n    return candidates.reduce((best, c) => c.value > best.value ? c : best, candidates[0]);\n  }\n  function getDiscounts(person, isPaarP2) {\n    const discounts = [];\n    let remaining = Math.round(person.amount);\n    if (isAppOnly()) {\n      const appDisc = Math.min(DISCOUNT_APP_FIXED, remaining);\n      discounts.push({ type: \"fixed\", value: DISCOUNT_APP_FIXED, label: TXT.discApp, amountEuro: appDisc });\n      remaining -= appDisc;\n    }\n    const pct = getPercentDiscountCandidate(person, isPaarP2);\n    if (pct) {\n      const pctDisc = Math.round(remaining * pct.value);\n      discounts.push({ type: \"pct\", value: pct.value, label: pct.label, amountEuro: pctDisc });\n      remaining -= pctDisc;\n    }\n    return { discounts, finalAmount: Math.max(0, remaining) };\n  }\n  function buildStatusOptionValue(person, isPaar) {\n    const vals = [];\n    if (isPaar) vals.push(STATUS_LABEL.paar);\n    if (isAppOnly()) vals.push(STATUS_LABEL.apponly);\n    if (isWiederholer(person)) vals.push(STATUS_LABEL.wiederholer);\n    if (person.statusType === \"schueler\") vals.push(STATUS_LABEL.schueler);\n    if (person.statusType === \"student\")  vals.push(STATUS_LABEL.student);\n    \/\/ Ecwid erwartet fuer Checkbox-Optionen ein Array, nicht einen kommaseparierten String\n    return vals;\n  }\n  function refreshSummary() {\n    if (state.form === \"paar\") refreshSummaryPaar();\n    else refreshSummarySolo();\n  }\n  function renderDiscountRows(containerId, discounts) {\n    const container = $(containerId);\n    container.innerHTML = \"\";\n    discounts.forEach(d => {\n      const row = document.createElement(\"div\");\n      row.className = \"sw-summary-row sw-summary-discount\";\n      const pctStr = d.type === \"fixed\" ? `\u2212${d.amountEuro}\u20ac` : `\u2212${Math.round(d.value * 100)}%`;\n      row.innerHTML = `<span>${d.label} (${pctStr})<\/span><span>\u2212${d.amountEuro}\u20ac<\/span>`;\n      container.appendChild(row);\n    });\n  }\n  function refreshSummarySolo() {\n    const p = state.persons.solo;\n    const { discounts, finalAmount } = getDiscounts(p, false);\n    $(\"sw-solo-chosen\").textContent = Math.round(p.amount) + \"\u20ac\";\n    renderDiscountRows(\"sw-solo-discounts\", discounts);\n    const shipLine = $(\"sw-shipping-line-solo\");\n    const shippingSolo = (hasPhysicalShipment(false) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingSolo ? \"flex\" : \"none\";\n    $(\"sw-solo-total\").textContent = finalAmount + shippingSolo;\n  }\n  function refreshSummaryPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    function fill(prefix, person, isPaarP2) {\n      const { discounts, finalAmount } = getDiscounts(person, isPaarP2);\n      $(`sw-${prefix}-chosen`).textContent = Math.round(person.amount) + \"\u20ac\";\n      renderDiscountRows(`sw-${prefix}-discounts`, discounts);\n      $(`sw-${prefix}-subtotal`).textContent = finalAmount + \"\u20ac\";\n      return finalAmount;\n    }\n    const f1 = fill(\"p1\", p1, false);\n    const f2 = fill(\"p2\", p2, true);\n    const shipLine = $(\"sw-shipping-line-paar\");\n    const shippingPaar = (hasPhysicalShipment(true) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingPaar ? \"flex\" : \"none\";\n    $(\"sw-paar-total\").textContent = f1 + f2 + shippingPaar;\n  }\n  function renderCountryList(filter) {\n    const list = $(\"sw-country-list\");\n    const q = (filter || \"\").toLowerCase().trim();\n    const filtered = q\n      ? getAllCountriesSorted().filter(c =>\n          c.name.toLowerCase().includes(q) ||\n          (c.aliases || []).some(a => a.includes(q))\n        )\n      : getAllCountriesSorted();\n    list.innerHTML = \"\";\n    if (!filtered.length) { list.innerHTML = '<div class=\"sw-country-empty\">' + TXT.noCountry + '<\/div>'; return; }\n    filtered.forEach(c => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-country-item\" + (state.country === c.code ? \" selected\" : \"\");\n      div.dataset.code = c.code;\n      div.innerHTML = `<span>${c.name}<\/span><span class=\"sw-country-item-cat\">${TXT.catBadge}${c.cat.replace(\"cat\",\"\")}<\/span>`;\n      div.addEventListener(\"click\", () => selectCountry(c.code, c.cat, c.name));\n      list.appendChild(div);\n    });\n  }\n  function selectCountry(code, cat, name) {\n    state.country  = code;\n    state.category = cat;\n    $(\"sw-country\").value = code;\n    $(\"sw-country-search\").value = name;\n    $(\"sw-country-list\").innerHTML = \"\";\n    const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[code];\n    let suffix = \"\";\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      suffix = exceptionLang\n        ? \" \" + TXT.catSuffixException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang)\n        : \" \" + TXT.catSuffixDigital;\n    }\n    $(\"sw-catText\").textContent = (TXT.catLabels[cat] || cat) + suffix;\n    \/\/ Ecwid wickelt in Russland keine Zahlungen ab. Wer Russland waehlt, wird\n    \/\/ deshalb auf die russische Anmeldeseite verwiesen - die laeuft ueber n8n\n    \/\/ und Tochka statt ueber den Shop. Der russische Wizard verweist umgekehrt\n    \/\/ zurueck, sobald dort ein anderes Land gewaehlt wird.\n    const nachRussland = (code === \"RU\");\n    $(\"sw-redirect-russia\").style.display = nachRussland ? \"block\" : \"none\";\n    $(\"sw-catInfo\").style.display         = nachRussland ? \"none\"  : \"block\";\n    setNextEnabled(\"sw-btn-country-next\", !nachRussland);\n    updateAppOnlyUI();\n  }\n  function ensureEcwidReady(timeoutMs = 12000) {\n    return new Promise((resolve, reject) => {\n      function isReady() {\n        return window.Ecwid && window.Ecwid.Cart &&\n               typeof window.Ecwid.Cart.addProduct === \"function\" &&\n               typeof window.Ecwid.Cart.clear === \"function\";\n      }\n      if (isReady()) return resolve(true);\n      let resolved = false;\n      function done() { if (!resolved) { resolved = true; setTimeout(() => resolve(true), 200); } }\n      if (window.Ecwid) { try { window.Ecwid.OnAPILoaded.add(done); } catch(e) {} }\n      const start = Date.now();\n      const t = setInterval(() => {\n        if (isReady()) { clearInterval(t); done(); }\n        else if (Date.now() - start > timeoutMs) {\n          clearInterval(t);\n          if (!resolved) { resolved = true; reject(new Error(fillPlaceholder(TXT.errEcwid, timeoutMs\/1000))); }\n        }\n      }, 200);\n    });\n  }\n  function clearCartAsync() { return new Promise(r => Ecwid.Cart.clear(() => r(true))); }\n  function addProductAsync(payload, timeoutMs = 4000) {\n    return new Promise((resolve, reject) => {\n      let done = false;\n      const t = setTimeout(() => { if (!done) { done = true; resolve({ product:null, cart:null, timedOut:true }); } }, timeoutMs);\n      Ecwid.Cart.addProduct(payload, function(success, product, cart, error) {\n        if (done) return;\n        done = true; clearTimeout(t);\n        if (success) resolve({ product, cart, timedOut:false });\n        else reject(new Error((error || TXT.errProduct) + \" | Payload: \" + JSON.stringify(payload)));\n      });\n    });\n  }\n  function goToCart() { window.location.href = SHOP_CART_URL; }\n  function buildN8nPayload() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const d1 = getDiscounts(p1, false);\n    const d2 = getDiscounts(p2, true);\n    return {\n      sprache: state.commLang, land: state.country, kategorie: state.category, appOnly: isAppOnly(),\n      person1: { vorname: p1.vorname, nachname: p1.nachname, email: p1.email },\n      person2: { vorname: p2.vorname, nachname: p2.nachname, email: p2.email },\n      betraege: {\n        person1: { gewaehlt: Math.round(p1.amount), rabatte: d1.discounts, endbetrag: d1.finalAmount },\n        person2: { gewaehlt: Math.round(p2.amount), rabatte: d2.discounts, endbetrag: d2.finalAmount },\n        gesamt: d1.finalAmount + d2.finalAmount\n      },\n      timestamp: new Date().toISOString()\n    };\n  }\n  async function sendToN8n(payload) {\n    if (!N8N_WEBHOOK_URL || N8N_WEBHOOK_URL.indexOf(\"HIER_\") === 0) {\n      throw new Error(\"Die n8n-Webhook-URL ist im Code noch nicht eingetragen.\");\n    }\n    let res;\n    try {\n      res = await fetch(N8N_WEBHOOK_URL, { method:\"POST\", headers:{\"Content-Type\":\"application\/json\"}, body:JSON.stringify(payload) });\n    } catch (e) {\n      throw new Error(TXT.errNetwork);\n    }\n    if (!res.ok) throw new Error(fillPlaceholder(TXT.errSubmit, res.status));\n    return true;\n  }\n  async function goCheckoutSolo() {\n    clearErrorIn(\"sw-error-amount-solo\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-solo\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-solo\", TXT.errLang);\n    const p = state.persons.solo;\n    const finalAmount = getDiscounts(p, false).finalAmount;\n    const participationProductId = getParticipationProductId(false);\n    setCheckoutLoading(\"sw-btn-checkout-solo\", true);\n    try {\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const statusValue = buildStatusOptionValue(p, false);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: finalAmount, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-solo\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-solo\", false);\n    }\n  }\n  async function goCheckoutPaar() {\n    clearErrorIn(\"sw-error-amount-paar\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-paar\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-paar\", TXT.errLang);\n    if (!validateDetailsPaar()) return showErrorIn(\"sw-error-amount-paar\", TXT.errPaarFields);\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const participationProductId = getParticipationProductId(true);\n    setCheckoutLoading(\"sw-btn-checkout-paar\", true);\n    try {\n      const payload = buildN8nPayload();\n      await sendToN8n(payload);\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const total = getDiscounts(p1, false).finalAmount + getDiscounts(p2, true).finalAmount;\n      const statusValue = buildStatusOptionValue(p1, true);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: total, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-paar\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-paar\", false);\n    }\n  }\n  function validateLangform() {\n    const ok = !!state.commLang && !!state.form && state.form !== \"gruppe\";\n    setNextEnabled(\"sw-btn-langform-next\", ok);\n  }\n  function validateDetailsSolo() {\n    const ok = !!$(\"sw-solo-status\").value;\n    setNextEnabled(\"sw-btn-details-solo-next\", ok);\n    return ok;\n  }\n  function validateDetailsPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const emailOk = s => \/\\S+@\\S+\\.\\S+\/.test(s || \"\");\n    const ok = !!(p1.vorname && p1.vorname.trim()) && !!(p1.nachname && p1.nachname.trim()) && emailOk(p1.email) &&\n               !!(p2.vorname && p2.vorname.trim()) && !!(p2.nachname && p2.nachname.trim()) && emailOk(p2.email);\n    setNextEnabled(\"sw-btn-details-paar-next\", ok);\n    return ok;\n  }\n  function bindNameFields(key) {\n    [\"vorname\",\"nachname\",\"email\"].forEach(f => {\n      $(`sw-${key}-${f}`).addEventListener(\"input\", e => {\n        getPerson(key)[f] = e.target.value;\n        validateDetailsPaar();\n      });\n    });\n  }\n  $(\"sw-btn-welcome-next\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-country-back\").addEventListener(\"click\", () => showStep(1));\n  $(\"sw-btn-country-next\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-country-search\").addEventListener(\"input\",  e => renderCountryList(e.target.value));\n  $(\"sw-country-search\").addEventListener(\"focus\",  () => renderCountryList($(\"sw-country-search\").value));\n  shadow.addEventListener(\"click\", e => {\n    if (!e.target.closest(\"#sw-country-list\") && !e.target.closest(\"#sw-country-search\")) {\n      $(\"sw-country-list\").innerHTML = \"\";\n    }\n  });\n  $(\"sw-commLang\").addEventListener(\"change\", e => {\n    state.commLang = e.target.value;\n    validateLangform();\n    updateAppOnlyUI();\n    refreshSummary();\n  });\n  shadow.querySelectorAll(\".sw-choice-card\").forEach(card => {\n    card.addEventListener(\"click\", () => {\n      state.form = card.dataset.form;\n      shadow.querySelectorAll(\".sw-choice-card\").forEach(c => c.classList.toggle(\"active\", c === card));\n      const isGruppe = state.form === \"gruppe\";\n      $(\"sw-gruppe-note\").style.display = isGruppe ? \"block\" : \"none\";\n      $(\"sw-btn-langform-next\").style.display   = isGruppe ? \"none\" : \"inline-block\";\n      $(\"sw-btn-gruppe-redirect\").style.display = isGruppe ? \"inline-block\" : \"none\";\n      clearErrorIn(\"sw-error-langform\");\n      validateLangform();\n    });\n  });\n  $(\"sw-btn-gruppe-redirect\").addEventListener(\"click\", () => { window.location.href = getGroupRedirectUrl(); });\n  $(\"sw-btn-langform-back\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-langform-next\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-details-solo-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-solo-status\").addEventListener(\"change\", e => {\n    const val = e.target.value;\n    const person = state.persons.solo;\n    person.statusType  = val;\n    person.wiederholer = val === \"wiederholer\";\n    clearErrorIn(\"sw-error-details-solo\");\n    validateDetailsSolo();\n  });\n  $(\"sw-btn-details-solo-next\").addEventListener(\"click\", () => {\n    if (validateDetailsSolo()) { applyRangeForForm(); showStep(5); }\n    else showErrorIn(\"sw-error-details-solo\", TXT.errSelectFirst);\n  });\n  $(\"sw-btn-details-paar-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-btn-details-paar-next\").addEventListener(\"click\", () => {\n    if (validateDetailsPaar()) { applyRangeForForm(); showStep(5); }\n  });\n  $(\"sw-btn-amount-solo-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-amount-paar-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-checkout-solo\").addEventListener(\"click\", goCheckoutSolo);\n  $(\"sw-btn-checkout-paar\").addEventListener(\"click\", goCheckoutPaar);\n  bindNameFields(\"p1\");\n  bindNameFields(\"p2\");\n  wireAmountControl(\"solo\");\n  wireAmountControl(\"p1\");\n  wireAmountControl(\"p2\");\n  showStep(1);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d636885 e-flex e-con-boxed e-con e-parent\" data-id=\"d636885\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f323642 elementor-widget elementor-widget-html\" data-id=\"f323642\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Tinos:ital,wght@0,400;0,700;1,400&display=swap\" rel=\"stylesheet\">\n<style>\n  .ecwid-ProductBrowser,\n  .ecwid-productbrowser,\n  div[id^=\"my-store\"],\n  .ecwid:not(#sw-host-ja) {\n    visibility: hidden !important;\n    height: 0 !important;\n    max-height: 0 !important;\n    overflow: hidden !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    position: absolute !important;\n    pointer-events: none !important;\n  }\n<\/style>\n<div id=\"sw-overlay-ja\" style=\"display:none; position:fixed; inset:0; background:rgba(245,250,246,0.92); z-index:99999; flex-direction:column; align-items:center; justify-content:center; gap:20px;\">\n  <div style=\"width:52px; height:52px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:sw-spin-ja 0.8s linear infinite;\"><\/div>\n  <div style=\"font-family:'Tinos',Georgia,serif; font-size:22px; color:#27703F;\">\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059\u2026<\/div>\n<\/div>\n<style>\n  @keyframes sw-spin-ja { to { transform: rotate(360deg); } }\n<\/style>\n<div id=\"sw-host-ja\"><\/div>\n<script>\n(function () {\n\n  \/\/ \u2500\u2500 Sprach-Guard: Skript bricht sofort ab, wenn die URL nicht zu JA passt \u2500\u2500\n  const _pathMatch = window.location.pathname.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n  const _pageLang = _pathMatch ? _pathMatch[1] : \"de\";\n  if (_pageLang !== \"ja\") { \n    document.getElementById(\"sw-host-ja\")?.remove();\n    document.getElementById(\"sw-overlay-ja\")?.remove();\n    return; \n  }\n\n  const OVERLAY_ID    = \"sw-overlay-ja\";\n  const SHOP_CART_URL = \"https:\/\/spiritual-activity.org\/ja\/store\/cart\";\n  const N8N_WEBHOOK_URL = \"https:\/\/n8n.spiritual-activity.org\/webhook\/registration-be\";\n  function getGroupRedirectUrl() {\n    const path = window.location.pathname;\n    \/\/ Erkennt Sprachpraefixe wie \/en\/, \/es\/, \/it\/, \/ru\/ am Anfang des Pfads.\n    \/\/ Deutsch ist die Standardsprache ohne Praefix.\n    const match = path.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n    const langPrefix = (match && match[1] !== \"de\") ? \"\/\" + match[1] : \"\";\n    return \"https:\/\/spiritual-activity.org\" + langPrefix + \"\/gruppen-anmeldung\";\n  }\n  const PRODUCTS = {\n    cat1: 864374030,\n    cat2: 844860366,\n    cat3: 844907264,\n    cat4: 844907265\n  };\n\n  \/\/ Versandfreie Digital-Produkte fuer alle Faelle, in denen nichts verschickt\n  \/\/ wird: rein digitale Teilnahme und Wiederholer (kein neues Kartenset).\n  const PRODUCTS_APPONLY = {\n    cat1: 863272251,\n    cat2: 863265753,\n    cat3: 863272252,\n    cat4: 863265754\n  };\n  const RANGES = {\n    cat1: { min: 160, max: 800 },\n    cat2: { min: 105, max: 700 },\n    cat3: { min:  75, max: 600 },\n    cat4: { min:  45, max: 500 }\n  };\n  const ORIENTIERUNG = {\n    cat1: { reduced: 160, base: 360, support: 580 },\n    cat2: { reduced: 105, base: 240, support: 460 },\n    cat3: { reduced:  75, base: 160, support: 340 },\n    cat4: { reduced:  45, base: 105, support: 220 }\n  };\n  const DISCOUNT_WIEDERHOLER = 0.30;\n  const DISCOUNT_SCHUELER    = 0.50;\n  const DISCOUNT_STUDENT     = 0.25;\n  const DISCOUNT_PAAR_P2     = 0.50;\n  const DISCOUNT_APP_FIXED   = 35;\n  \/\/ Versandpauschale ausserhalb EU+CH. Ecwid kassiert sie, der Wizard rechnet sie in die Anzeige-Summe ein.\n  const SHIPPING_COST   = 15;\n  \/\/ Sprachschluessel bleiben deutsch \u2013 sie sind die Werte im Ecwid-Shop.\n  const APP_ONLY_LANGS = new Set([\"Arabisch\",\"Farsi\",\"Ukrainisch\",\"Bulgarisch\",\"Franz\u00f6sisch\"]);\n  const APP_ONLY_CATEGORY_EXCEPTION_LANG = { CN: \"Chinesisch\" };\n  const EU_PLUS_CH = new Set([\n    \"AT\",\"BE\",\"BG\",\"CY\",\"CZ\",\"DE\",\"DK\",\"EE\",\"ES\",\"FI\",\"FR\",\"GR\",\"HR\",\n    \"HU\",\"IE\",\"IT\",\"LT\",\"LU\",\"LV\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SE\",\"SI\",\"SK\",\"CH\"\n  ]);\n  \/\/ Ersetzt den Platzhalter in Klammern (z.B. [Code], [X], [\ucf54\ub4dc]) durch den Wert\n  function fillPlaceholder(text, value) {\n    return String(text).replace(\/[\\[\uff3b][^\\]\uff3d]*[\\]\uff3d]\/, value);\n  }\n  function needsShipping(countryCode) {\n    return countryCode && !EU_PLUS_CH.has(countryCode);\n  }\n  \/\/ \u2500\u2500 Uebersetzte Texte \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const TXT = {\n      \"catBadge\": \"\u30ab\u30c6\u30b4\u30ea\u30fc\",\n      \"catLabels\": {\n          \"cat1\": \"\u6599\u91d1\u30ab\u30c6\u30b4\u30ea\u30fc1\",\n          \"cat2\": \"\u6599\u91d1\u30ab\u30c6\u30b4\u30ea\u30fc2\",\n          \"cat3\": \"\u6599\u91d1\u30ab\u30c6\u30b4\u30ea\u30fc3\",\n          \"cat4\": \"\u6599\u91d1\u30ab\u30c6\u30b4\u30ea\u30fc4\"\n      },\n      \"catSuffixDigital\": \"\u2013 \u30c7\u30b8\u30bf\u30eb\u53c2\u52a0\u306e\u307f\u53ef\u80fd\",\n      \"catSuffixException\": \"\u2013 \u53c2\u52a0\u8a00\u8a9e\u304c{X}\u306e\u5834\u5408\u306e\u307f\u914d\u9001\u53ef\u80fd\u3001\u305d\u308c\u4ee5\u5916\u306f\u30c7\u30b8\u30bf\u30eb\u53c2\u52a0\u306e\u307f\",\n      \"noCountry\": \"\u56fd\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\",\n      \"markerReduced\": \"\u5272\u5f15\u53c2\u52a0\u8cbb\",\n      \"markerBase\": \"\u57fa\u672c\u53c2\u52a0\u8cbb\",\n      \"markerSupport\": \"\u30b5\u30dd\u30fc\u30c8\u53c2\u52a0\u8cbb\",\n      \"hintLong\": \"\u3053\u3053\u3067\u3001\u3054\u81ea\u8eab\u306b\u9069\u3057\u305f\u53c2\u52a0\u8cbb\u3092\u9078\u629e\u3067\u304d\u307e\u3059\u3002\u30b5\u30dd\u30fc\u30c8\u53c2\u52a0\u8cbb\u3092\u9078\u3076\u3053\u3068\u3067\u3001\u7d4c\u6e08\u7684\u306b\u4f59\u88d5\u306e\u306a\u3044\u65b9\u3005\u306e\u53c2\u52a0\u3092\u53ef\u80fd\u306b\u3057\u3001\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u3055\u3089\u306b\u4e16\u754c\u3078\u3068\u5e83\u3081\u308b\u304a\u624b\u4f1d\u3044\u306b\u306a\u308a\u307e\u3059\u3002\",\n      \"hintPaar\": \"\u5404\u81ea\u304c\u81ea\u5206\u306e\u53c2\u52a0\u8cbb\u3092\u9078\u629e\u3057\u307e\u3059\u3002\u53c2\u52a0\u80052\u306b\u306f\u81ea\u52d5\u7684\u306b50%\u306e\u5272\u5f15\u304c\u9069\u7528\u3055\u308c\u307e\u3059\u3002\",\n      \"person1\": \"\u53c2\u52a0\u80051\",\n      \"person2\": \"\u53c2\u52a0\u80052\",\n      \"p2Badge\": \"\uff08\u221250%\uff09\",\n      \"discWiederholer\": \"\u518d\u53d7\u8b1b\u8005\",\n      \"discSchueler\": \"\u5b66\u751f\uff08\u751f\u5f92\uff09\",\n      \"discStudent\": \"\u8077\u696d\u8a13\u7df4\uff0f\u5c31\u5b66\",\n      \"discP2\": \"\u53c2\u52a0\u80052\u306e\u5272\u5f15\",\n      \"discApp\": \"\u30c7\u30b8\u30bf\u30eb\u53c2\u52a0\",\n      \"reasonRegion\": \"\u304a\u4f4f\u307e\u3044\u306e\u5730\u57df\u3067\u306f\u914d\u9001\u3067\u304d\u307e\u305b\u3093\u3002\u30c7\u30b8\u30bf\u30eb\u53c2\u52a0\u3092\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5272\u5f15\u306f\u81ea\u52d5\u7684\u306b\u6982\u8981\u306b\u53cd\u6620\u3055\u308c\u307e\u3059\u3002\",\n      \"reasonRussian\": \"\u30ed\u30b7\u30a2\u56fd\u5916\u306e\u30ed\u30b7\u30a2\u8a9e\u8a71\u8005\u306e\u65b9\u306b\u306f\u3001\u30c7\u30b8\u30bf\u30eb\u7248\u306e\u307f\u3054\u7528\u610f\u304c\u3042\u308a\u307e\u3059\u3002\u5272\u5f15\u306f\u81ea\u52d5\u7684\u306b\u6982\u8981\u306b\u53cd\u6620\u3055\u308c\u307e\u3059\u3002\",\n      \"reasonLanguage\": \"\u3053\u306e\u8a00\u8a9e\u3067\u306f\u3001\u30c7\u30b8\u30bf\u30eb\u7248\u306e\u307f\u3054\u7528\u610f\u304c\u3042\u308a\u307e\u3059\u3002\u5272\u5f15\u306f\u81ea\u52d5\u7684\u306b\u6982\u8981\u306b\u53cd\u6620\u3055\u308c\u307e\u3059\u3002\",\n      \"reasonException\": \"\u304a\u4f4f\u307e\u3044\u306e\u5730\u57df\u3067\u306f\u3001\u53c2\u52a0\u8a00\u8a9e\u304c{X}\u306e\u5834\u5408\u306e\u307f\u914d\u9001\u53ef\u80fd\u3067\u3059\u3002 \u30c7\u30b8\u30bf\u30eb\u53c2\u52a0\u3092\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5272\u5f15\u306f\u81ea\u52d5\u7684\u306b\u6982\u8981\u306b\u53cd\u6620\u3055\u308c\u307e\u3059\u3002\",\n      \"thanksTitle\": \"\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\uff01\",\n      \"thanksLine1\": \"\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059\u2026\",\n      \"thanksLine2\": \"\u307e\u3082\u306a\u304f\u8ee2\u9001\u3055\u308c\u307e\u3059\u2026\",\n      \"preparing\": \"\u6e96\u5099\u4e2d\u2026\",\n      \"errSelectFirst\": \"\u307e\u305a\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\",\n      \"errPaarFields\": \"\u623b\u3063\u3066\u3001\u304a\u4e8c\u4eba\u5206\u3059\u3079\u3066\u306e\u9805\u76ee\u3092\u3054\u5165\u529b\u304f\u3060\u3055\u3044\u3002\",\n      \"errCountry\": \"\u307e\u305a\u56fd\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\",\n      \"errLang\": \"\u53c2\u52a0\u8a00\u8a9e\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\",\n      \"errNetwork\": \"\u30c7\u30fc\u30bf\u3092\u9001\u4fe1\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u63a5\u7d9a\u3092\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\u3002\",\n      \"errSubmit\": \"\u9001\u4fe1\u306b\u5931\u6557\u3057\u307e\u3057\u305f\uff08\u30a8\u30e9\u30fc\uff3bCode\uff3d\uff09\u3002\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002\",\n      \"errProduct\": \"\u5546\u54c1\u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\",\n      \"errEcwid\": \"Ecwid\u30ab\u30fc\u30c8\u306eapi\u304c\uff3bX\uff3d\u79d2\u5f8c\u3082\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002\"\n  };\n  \/\/ Anzeigename der Teilnahmesprache (Schluessel = Ecwid-Wert, deutsch)\n  const LANG_DISPLAY = {\n      \"Deutsch\": \"\u30c9\u30a4\u30c4\u8a9e\",\n      \"Englisch\": \"\u82f1\u8a9e\",\n      \"Spanisch\": \"\u30b9\u30da\u30a4\u30f3\u8a9e\",\n      \"Franz\u00f6sisch\": \"\u30d5\u30e9\u30f3\u30b9\u8a9e\",\n      \"Italienisch\": \"\u30a4\u30bf\u30ea\u30a2\u8a9e\",\n      \"Portugiesisch\": \"\u30dd\u30eb\u30c8\u30ac\u30eb\u8a9e\",\n      \"Arabisch\": \"\u30a2\u30e9\u30d3\u30a2\u8a9e\",\n      \"Hebr\u00e4isch\": \"\u30d8\u30d6\u30e9\u30a4\u8a9e\",\n      \"Farsi\": \"\u30da\u30eb\u30b7\u30a2\u8a9e\",\n      \"Georgisch\": \"\u30b0\u30eb\u30b8\u30a2\u8a9e\",\n      \"Ukrainisch\": \"\u30a6\u30af\u30e9\u30a4\u30ca\u8a9e\",\n      \"Niederl\u00e4ndisch\": \"\u30aa\u30e9\u30f3\u30c0\u8a9e\",\n      \"T\u00fcrkisch\": \"\u30c8\u30eb\u30b3\u8a9e\",\n      \"Russisch\": \"\u30ed\u30b7\u30a2\u8a9e\",\n      \"Chinesisch\": \"\u4e2d\u56fd\u8a9e\",\n      \"Japanisch\": \"\u65e5\u672c\u8a9e\",\n      \"Koreanisch\": \"\u97d3\u56fd\u8a9e\"\n  };\n  \/\/ Feste Laendernamen in der Landessprache (aus CLDR), damit die Liste in\n  \/\/ jedem Browser identisch ist \u2013 unabhaengig von der Intl-Datenlage.\n  const COUNTRY_NAMES = {\n      \"AD\": \"\u30a2\u30f3\u30c9\u30e9\",\n      \"AE\": \"\u30a2\u30e9\u30d6\u9996\u9577\u56fd\u9023\u90a6\",\n      \"AF\": \"\u30a2\u30d5\u30ac\u30cb\u30b9\u30bf\u30f3\",\n      \"AG\": \"\u30a2\u30f3\u30c6\u30a3\u30b0\u30a2\u30fb\u30d0\u30fc\u30d6\u30fc\u30c0\",\n      \"AL\": \"\u30a2\u30eb\u30d0\u30cb\u30a2\",\n      \"AM\": \"\u30a2\u30eb\u30e1\u30cb\u30a2\",\n      \"AO\": \"\u30a2\u30f3\u30b4\u30e9\",\n      \"AR\": \"\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\",\n      \"AT\": \"\u30aa\u30fc\u30b9\u30c8\u30ea\u30a2\",\n      \"AU\": \"\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2\",\n      \"AW\": \"\u30a2\u30eb\u30d0\",\n      \"AZ\": \"\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3\",\n      \"BA\": \"\u30dc\u30b9\u30cb\u30a2\u30fb\u30d8\u30eb\u30c4\u30a7\u30b4\u30d3\u30ca\",\n      \"BB\": \"\u30d0\u30eb\u30d0\u30c9\u30b9\",\n      \"BD\": \"\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5\",\n      \"BE\": \"\u30d9\u30eb\u30ae\u30fc\",\n      \"BF\": \"\u30d6\u30eb\u30ad\u30ca\u30d5\u30a1\u30bd\",\n      \"BG\": \"\u30d6\u30eb\u30ac\u30ea\u30a2\",\n      \"BH\": \"\u30d0\u30fc\u30ec\u30fc\u30f3\",\n      \"BI\": \"\u30d6\u30eb\u30f3\u30b8\",\n      \"BJ\": \"\u30d9\u30ca\u30f3\",\n      \"BN\": \"\u30d6\u30eb\u30cd\u30a4\",\n      \"BO\": \"\u30dc\u30ea\u30d3\u30a2\",\n      \"BR\": \"\u30d6\u30e9\u30b8\u30eb\",\n      \"BS\": \"\u30d0\u30cf\u30de\",\n      \"BT\": \"\u30d6\u30fc\u30bf\u30f3\",\n      \"BW\": \"\u30dc\u30c4\u30ef\u30ca\",\n      \"BY\": \"\u30d9\u30e9\u30eb\u30fc\u30b7\",\n      \"BZ\": \"\u30d9\u30ea\u30fc\u30ba\",\n      \"CA\": \"\u30ab\u30ca\u30c0\",\n      \"CD\": \"\u30b3\u30f3\u30b4\u6c11\u4e3b\u5171\u548c\u56fd(\u30ad\u30f3\u30b7\u30e3\u30b5)\",\n      \"CF\": \"\u4e2d\u592e\u30a2\u30d5\u30ea\u30ab\u5171\u548c\u56fd\",\n      \"CG\": \"\u30b3\u30f3\u30b4\u5171\u548c\u56fd(\u30d6\u30e9\u30b6\u30d3\u30eb)\",\n      \"CH\": \"\u30b9\u30a4\u30b9\",\n      \"CI\": \"\u30b3\u30fc\u30c8\u30b8\u30dc\u30ef\u30fc\u30eb\",\n      \"CL\": \"\u30c1\u30ea\",\n      \"CM\": \"\u30ab\u30e1\u30eb\u30fc\u30f3\",\n      \"CN\": \"\u4e2d\u56fd\",\n      \"CO\": \"\u30b3\u30ed\u30f3\u30d3\u30a2\",\n      \"CR\": \"\u30b3\u30b9\u30bf\u30ea\u30ab\",\n      \"CV\": \"\u30ab\u30fc\u30dc\u30d9\u30eb\u30c7\",\n      \"CY\": \"\u30ad\u30d7\u30ed\u30b9\",\n      \"CZ\": \"\u30c1\u30a7\u30b3\",\n      \"DE\": \"\u30c9\u30a4\u30c4\",\n      \"DJ\": \"\u30b8\u30d6\u30c1\",\n      \"DK\": \"\u30c7\u30f3\u30de\u30fc\u30af\",\n      \"DM\": \"\u30c9\u30df\u30cb\u30ab\u56fd\",\n      \"DO\": \"\u30c9\u30df\u30cb\u30ab\u5171\u548c\u56fd\",\n      \"DZ\": \"\u30a2\u30eb\u30b8\u30a7\u30ea\u30a2\",\n      \"EC\": \"\u30a8\u30af\u30a2\u30c9\u30eb\",\n      \"EE\": \"\u30a8\u30b9\u30c8\u30cb\u30a2\",\n      \"EG\": \"\u30a8\u30b8\u30d7\u30c8\",\n      \"ES\": \"\u30b9\u30da\u30a4\u30f3\",\n      \"ET\": \"\u30a8\u30c1\u30aa\u30d4\u30a2\",\n      \"FI\": \"\u30d5\u30a3\u30f3\u30e9\u30f3\u30c9\",\n      \"FJ\": \"\u30d5\u30a3\u30b8\u30fc\",\n      \"FM\": \"\u30df\u30af\u30ed\u30cd\u30b7\u30a2\u9023\u90a6\",\n      \"FR\": \"\u30d5\u30e9\u30f3\u30b9\",\n      \"GA\": \"\u30ac\u30dc\u30f3\",\n      \"GB\": \"\u30a4\u30ae\u30ea\u30b9\",\n      \"GB-SCT\": \"\u30b9\u30b3\u30c3\u30c8\u30e9\u30f3\u30c9\",\n      \"GD\": \"\u30b0\u30ec\u30ca\u30c0\",\n      \"GE\": \"\u30b8\u30e7\u30fc\u30b8\u30a2\",\n      \"GH\": \"\u30ac\u30fc\u30ca\",\n      \"GM\": \"\u30ac\u30f3\u30d3\u30a2\",\n      \"GN\": \"\u30ae\u30cb\u30a2\",\n      \"GQ\": \"\u8d64\u9053\u30ae\u30cb\u30a2\",\n      \"GR\": \"\u30ae\u30ea\u30b7\u30e3\",\n      \"GT\": \"\u30b0\u30a2\u30c6\u30de\u30e9\",\n      \"GW\": \"\u30ae\u30cb\u30a2\u30d3\u30b5\u30a6\",\n      \"GY\": \"\u30ac\u30a4\u30a2\u30ca\",\n      \"HK\": \"\u9999\u6e2f\",\n      \"HN\": \"\u30db\u30f3\u30b8\u30e5\u30e9\u30b9\",\n      \"HR\": \"\u30af\u30ed\u30a2\u30c1\u30a2\",\n      \"HT\": \"\u30cf\u30a4\u30c1\",\n      \"HU\": \"\u30cf\u30f3\u30ac\u30ea\u30fc\",\n      \"ID\": \"\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\",\n      \"IE\": \"\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9\",\n      \"IL\": \"\u30a4\u30b9\u30e9\u30a8\u30eb\",\n      \"IN\": \"\u30a4\u30f3\u30c9\",\n      \"IQ\": \"\u30a4\u30e9\u30af\",\n      \"IR\": \"\u30a4\u30e9\u30f3\",\n      \"IS\": \"\u30a2\u30a4\u30b9\u30e9\u30f3\u30c9\",\n      \"IT\": \"\u30a4\u30bf\u30ea\u30a2\",\n      \"JM\": \"\u30b8\u30e3\u30de\u30a4\u30ab\",\n      \"JO\": \"\u30e8\u30eb\u30c0\u30f3\",\n      \"JP\": \"\u65e5\u672c\",\n      \"KE\": \"\u30b1\u30cb\u30a2\",\n      \"KG\": \"\u30ad\u30eb\u30ae\u30b9\",\n      \"KH\": \"\u30ab\u30f3\u30dc\u30b8\u30a2\",\n      \"KI\": \"\u30ad\u30ea\u30d0\u30b9\",\n      \"KM\": \"\u30b3\u30e2\u30ed\",\n      \"KN\": \"\u30bb\u30f3\u30c8\u30af\u30ea\u30b9\u30c8\u30d5\u30a1\u30fc\u30fb\u30cd\u30fc\u30f4\u30a3\u30b9\",\n      \"KR\": \"\u97d3\u56fd\",\n      \"KW\": \"\u30af\u30a6\u30a7\u30fc\u30c8\",\n      \"KZ\": \"\u30ab\u30b6\u30d5\u30b9\u30bf\u30f3\",\n      \"LA\": \"\u30e9\u30aa\u30b9\",\n      \"LB\": \"\u30ec\u30d0\u30ce\u30f3\",\n      \"LC\": \"\u30bb\u30f3\u30c8\u30eb\u30b7\u30a2\",\n      \"LI\": \"\u30ea\u30d2\u30c6\u30f3\u30b7\u30e5\u30bf\u30a4\u30f3\",\n      \"LK\": \"\u30b9\u30ea\u30e9\u30f3\u30ab\",\n      \"LR\": \"\u30ea\u30d9\u30ea\u30a2\",\n      \"LS\": \"\u30ec\u30bd\u30c8\",\n      \"LT\": \"\u30ea\u30c8\u30a2\u30cb\u30a2\",\n      \"LU\": \"\u30eb\u30af\u30bb\u30f3\u30d6\u30eb\u30af\",\n      \"LV\": \"\u30e9\u30c8\u30d3\u30a2\",\n      \"LY\": \"\u30ea\u30d3\u30a2\",\n      \"MA\": \"\u30e2\u30ed\u30c3\u30b3\",\n      \"MD\": \"\u30e2\u30eb\u30c9\u30d0\",\n      \"ME\": \"\u30e2\u30f3\u30c6\u30cd\u30b0\u30ed\",\n      \"MG\": \"\u30de\u30c0\u30ac\u30b9\u30ab\u30eb\",\n      \"MH\": \"\u30de\u30fc\u30b7\u30e3\u30eb\u8af8\u5cf6\",\n      \"MK\": \"\u5317\u30de\u30b1\u30c9\u30cb\u30a2\",\n      \"ML\": \"\u30de\u30ea\",\n      \"MM\": \"\u30df\u30e3\u30f3\u30de\u30fc (\u30d3\u30eb\u30de)\",\n      \"MN\": \"\u30e2\u30f3\u30b4\u30eb\",\n      \"MO\": \"\u30de\u30ab\u30aa\",\n      \"MR\": \"\u30e2\u30fc\u30ea\u30bf\u30cb\u30a2\",\n      \"MT\": \"\u30de\u30eb\u30bf\",\n      \"MU\": \"\u30e2\u30fc\u30ea\u30b7\u30e3\u30b9\",\n      \"MV\": \"\u30e2\u30eb\u30c7\u30a3\u30d6\",\n      \"MW\": \"\u30de\u30e9\u30a6\u30a4\",\n      \"MX\": \"\u30e1\u30ad\u30b7\u30b3\",\n      \"MY\": \"\u30de\u30ec\u30fc\u30b7\u30a2\",\n      \"MZ\": \"\u30e2\u30b6\u30f3\u30d3\u30fc\u30af\",\n      \"NA\": \"\u30ca\u30df\u30d3\u30a2\",\n      \"NE\": \"\u30cb\u30b8\u30a7\u30fc\u30eb\",\n      \"NG\": \"\u30ca\u30a4\u30b8\u30a7\u30ea\u30a2\",\n      \"NI\": \"\u30cb\u30ab\u30e9\u30b0\u30a2\",\n      \"NL\": \"\u30aa\u30e9\u30f3\u30c0\",\n      \"NO\": \"\u30ce\u30eb\u30a6\u30a7\u30fc\",\n      \"NP\": \"\u30cd\u30d1\u30fc\u30eb\",\n      \"NR\": \"\u30ca\u30a6\u30eb\",\n      \"NZ\": \"\u30cb\u30e5\u30fc\u30b8\u30fc\u30e9\u30f3\u30c9\",\n      \"OM\": \"\u30aa\u30de\u30fc\u30f3\",\n      \"PA\": \"\u30d1\u30ca\u30de\",\n      \"PE\": \"\u30da\u30eb\u30fc\",\n      \"PG\": \"\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2\",\n      \"PH\": \"\u30d5\u30a3\u30ea\u30d4\u30f3\",\n      \"PK\": \"\u30d1\u30ad\u30b9\u30bf\u30f3\",\n      \"PL\": \"\u30dd\u30fc\u30e9\u30f3\u30c9\",\n      \"PR\": \"\u30d7\u30a8\u30eb\u30c8\u30ea\u30b3\",\n      \"PS\": \"\u30d1\u30ec\u30b9\u30c1\u30ca\u81ea\u6cbb\u533a\",\n      \"PT\": \"\u30dd\u30eb\u30c8\u30ac\u30eb\",\n      \"PW\": \"\u30d1\u30e9\u30aa\",\n      \"PY\": \"\u30d1\u30e9\u30b0\u30a2\u30a4\",\n      \"QA\": \"\u30ab\u30bf\u30fc\u30eb\",\n      \"RO\": \"\u30eb\u30fc\u30de\u30cb\u30a2\",\n      \"RS\": \"\u30bb\u30eb\u30d3\u30a2\",\n      \"RU\": \"\u30ed\u30b7\u30a2\",\n      \"RW\": \"\u30eb\u30ef\u30f3\u30c0\",\n      \"SA\": \"\u30b5\u30a6\u30b8\u30a2\u30e9\u30d3\u30a2\",\n      \"SB\": \"\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6\",\n      \"SC\": \"\u30bb\u30fc\u30b7\u30a7\u30eb\",\n      \"SD\": \"\u30b9\u30fc\u30c0\u30f3\",\n      \"SE\": \"\u30b9\u30a6\u30a7\u30fc\u30c7\u30f3\",\n      \"SG\": \"\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb\",\n      \"SI\": \"\u30b9\u30ed\u30d9\u30cb\u30a2\",\n      \"SK\": \"\u30b9\u30ed\u30d0\u30ad\u30a2\",\n      \"SL\": \"\u30b7\u30a8\u30e9\u30ec\u30aa\u30cd\",\n      \"SM\": \"\u30b5\u30f3\u30de\u30ea\u30ce\",\n      \"SN\": \"\u30bb\u30cd\u30ac\u30eb\",\n      \"SO\": \"\u30bd\u30de\u30ea\u30a2\",\n      \"SR\": \"\u30b9\u30ea\u30ca\u30e0\",\n      \"SS\": \"\u5357\u30b9\u30fc\u30c0\u30f3\",\n      \"ST\": \"\u30b5\u30f3\u30c8\u30e1\u30fb\u30d7\u30ea\u30f3\u30b7\u30da\",\n      \"SV\": \"\u30a8\u30eb\u30b5\u30eb\u30d0\u30c9\u30eb\",\n      \"SZ\": \"\u30a8\u30b9\u30ef\u30c6\u30a3\u30cb\",\n      \"TD\": \"\u30c1\u30e3\u30c9\",\n      \"TG\": \"\u30c8\u30fc\u30b4\",\n      \"TH\": \"\u30bf\u30a4\",\n      \"TJ\": \"\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3\",\n      \"TL\": \"\u6771\u30c6\u30a3\u30e2\u30fc\u30eb\",\n      \"TM\": \"\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\",\n      \"TN\": \"\u30c1\u30e5\u30cb\u30b8\u30a2\",\n      \"TO\": \"\u30c8\u30f3\u30ac\",\n      \"TR\": \"\u30c8\u30eb\u30b3\",\n      \"TT\": \"\u30c8\u30ea\u30cb\u30c0\u30fc\u30c9\u30fb\u30c8\u30d0\u30b4\",\n      \"TV\": \"\u30c4\u30d0\u30eb\",\n      \"TW\": \"\u53f0\u6e7e\",\n      \"TZ\": \"\u30bf\u30f3\u30b6\u30cb\u30a2\",\n      \"UA\": \"\u30a6\u30af\u30e9\u30a4\u30ca\",\n      \"UG\": \"\u30a6\u30ac\u30f3\u30c0\",\n      \"US\": \"\u30a2\u30e1\u30ea\u30ab\u5408\u8846\u56fd\",\n      \"UY\": \"\u30a6\u30eb\u30b0\u30a2\u30a4\",\n      \"UZ\": \"\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\",\n      \"VC\": \"\u30bb\u30f3\u30c8\u30d3\u30f3\u30bb\u30f3\u30c8\u53ca\u3073\u30b0\u30ec\u30ca\u30c7\u30a3\u30fc\u30f3\u8af8\u5cf6\",\n      \"VE\": \"\u30d9\u30cd\u30ba\u30a8\u30e9\",\n      \"VN\": \"\u30d9\u30c8\u30ca\u30e0\",\n      \"VU\": \"\u30d0\u30cc\u30a2\u30c4\",\n      \"WS\": \"\u30b5\u30e2\u30a2\",\n      \"XK\": \"\u30b3\u30bd\u30dc\",\n      \"YE\": \"\u30a4\u30a8\u30e1\u30f3\",\n      \"ZA\": \"\u5357\u30a2\u30d5\u30ea\u30ab\",\n      \"ZM\": \"\u30b6\u30f3\u30d3\u30a2\",\n      \"ZW\": \"\u30b8\u30f3\u30d0\u30d6\u30a8\"\n  };\n\n  \/\/ \u2500\u2500 Zusaetzliche Suchbegriffe (Aliasse) je Land \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Beeinflusst NUR die Suche, nicht den angezeigten Namen. Alles klein schreiben.\n  \/\/ Wichtig fuer JA: lateinische Schreibweisen, damit die Suche auch mit\n  \/\/ umgeschalteter Tastatur funktioniert.\n  const COUNTRY_SEARCH_ALIASES = {\n      \"US\": [\"\u30a2\u30e1\u30ea\u30ab\", \"\u7c73\u56fd\", \"\u30a2\u30e1\u30ea\u30ab\u5408\u8846\u56fd\", \"usa\", \"america\", \"united states of america\", \"united states\"],\n      \"GB\": [\"\u30a4\u30ae\u30ea\u30b9\", \"\u82f1\u56fd\", \"\u30a4\u30f3\u30b0\u30e9\u30f3\u30c9\", \"uk\", \"england\", \"britain\", \"great britain\", \"united kingdom\"],\n      \"GB-SCT\": [\"\u30b9\u30b3\u30c3\u30c8\u30e9\u30f3\u30c9\", \"scotland\"],\n      \"KR\": [\"\u97d3\u56fd\", \"\u5927\u97d3\u6c11\u56fd\", \"korea\", \"south korea\"],\n      \"NL\": [\"\u30aa\u30e9\u30f3\u30c0\", \"holland\", \"netherlands\"],\n      \"CH\": [\"\u30b9\u30a4\u30b9\", \"switzerland\"],\n      \"DE\": [\"\u30c9\u30a4\u30c4\", \"deutschland\", \"germany\"],\n      \"AT\": [\"\u30aa\u30fc\u30b9\u30c8\u30ea\u30a2\", \"austria\"],\n      \"CZ\": [\"\u30c1\u30a7\u30b3\", \"czech republic\", \"czechia\"],\n      \"TR\": [\"\u30c8\u30eb\u30b3\", \"turkey\", \"turkiye\", \"t\u00fcrkiye\"],\n      \"RU\": [\"\u30ed\u30b7\u30a2\", \"russia\", \"russian federation\"],\n      \"JP\": [\"\u65e5\u672c\"],\n      \"CN\": [\"\u4e2d\u56fd\"],\n      \"TW\": [\"\u53f0\u6e7e\", \"taiwan\"],\n      \"HK\": [\"\u9999\u6e2f\", \"hong kong\"],\n      \"SG\": [\"\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb\"],\n      \"AU\": [\"\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2\", \"\u8c6a\u5dde\"],\n      \"NZ\": [\"\u30cb\u30e5\u30fc\u30b8\u30fc\u30e9\u30f3\u30c9\"],\n      \"CA\": [\"\u30ab\u30ca\u30c0\"],\n      \"FR\": [\"\u30d5\u30e9\u30f3\u30b9\"],\n      \"IT\": [\"\u30a4\u30bf\u30ea\u30a2\"],\n      \"ES\": [\"\u30b9\u30da\u30a4\u30f3\"],\n      \"PT\": [\"\u30dd\u30eb\u30c8\u30ac\u30eb\"],\n      \"BR\": [\"\u30d6\u30e9\u30b8\u30eb\"],\n      \"MX\": [\"\u30e1\u30ad\u30b7\u30b3\"],\n      \"IN\": [\"\u30a4\u30f3\u30c9\"],\n      \"ID\": [\"\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\"],\n      \"PH\": [\"\u30d5\u30a3\u30ea\u30d4\u30f3\"],\n      \"VN\": [\"\u30d9\u30c8\u30ca\u30e0\", \"vietnam\", \"viet nam\"],\n      \"TH\": [\"\u30bf\u30a4\"],\n      \"ZA\": [\"\u5357\u30a2\u30d5\u30ea\u30ab\"],\n      \"EG\": [\"\u30a8\u30b8\u30d7\u30c8\"],\n      \"IL\": [\"\u30a4\u30b9\u30e9\u30a8\u30eb\"],\n      \"SA\": [\"\u30b5\u30a6\u30b8\u30a2\u30e9\u30d3\u30a2\"],\n      \"AE\": [\"\u30a2\u30e9\u30d6\u9996\u9577\u56fd\u9023\u90a6\", \"\u30c9\u30d0\u30a4\", \"uae\", \"emirates\", \"dubai\", \"united arab emirates\"],\n      \"PL\": [\"\u30dd\u30fc\u30e9\u30f3\u30c9\"],\n      \"SE\": [\"\u30b9\u30a6\u30a7\u30fc\u30c7\u30f3\"],\n      \"NO\": [\"\u30ce\u30eb\u30a6\u30a7\u30fc\"],\n      \"DK\": [\"\u30c7\u30f3\u30de\u30fc\u30af\"],\n      \"FI\": [\"\u30d5\u30a3\u30f3\u30e9\u30f3\u30c9\"],\n      \"GR\": [\"\u30ae\u30ea\u30b7\u30e3\"],\n      \"UA\": [\"\u30a6\u30af\u30e9\u30a4\u30ca\"],\n      \"BE\": [\"\u30d9\u30eb\u30ae\u30fc\"],\n      \"IE\": [\"\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9\"],\n      \"MM\": [\"\u30df\u30e3\u30f3\u30de\u30fc\", \"\u30d3\u30eb\u30de\", \"burma\", \"myanmar\"],\n      \"GE\": [\"\u30b8\u30e7\u30fc\u30b8\u30a2\", \"\u30b0\u30eb\u30b8\u30a2\", \"grusia\", \"georgia\"],\n      \"IR\": [\"\u30a4\u30e9\u30f3\", \"persia\", \"iran\"],\n      \"MY\": [\"\u30de\u30ec\u30fc\u30b7\u30a2\"],\n      \"CI\": [\"ivory coast\", \"cote d'ivoire\"],\n      \"TL\": [\"east timor\", \"timor-leste\"],\n      \"SZ\": [\"swaziland\", \"eswatini\"],\n      \"MK\": [\"macedonia\", \"north macedonia\"],\n      \"MO\": [\"macao\", \"macau\"],\n      \"KP\": [\"north korea\"],\n      \"CV\": [\"cabo verde\", \"cape verde\"],\n      \"CD\": [\"dr congo\", \"drc\", \"congo kinshasa\"],\n      \"CG\": [\"congo brazzaville\"],\n      \"VA\": [\"vatican\", \"holy see\"],\n      \"LA\": [\"laos\"],\n      \"MD\": [\"moldova\"],\n      \"BY\": [\"belarus\"]\n  };\n  const COUNTRIES = {\n    cat1: [\"CY\",\"CA\",\"FR\",\"FI\",\"BH\",\"AU\",\"AD\",\"SE\",\"DE\",\"SA\",\"AT\",\"BE\",\"HK\",\"MT\",\"IS\",\"SM\",\"NL\",\"DK\",\"TW\",\"AE\",\"US\",\"BN\",\"CH\",\"NO\",\"GY\",\"QA\",\"MO\",\"IE\",\"LU\",\"SG\",\"LI\",\"GB\",\"GB-SCT\"],\n    cat2: [\"KR\",\"ME\",\"CL\",\"TT\",\"MV\",\"UY\",\"BS\",\"OM\",\"SC\",\"MY\",\"PA\",\"TR\",\"LV\",\"GR\",\"KZ\",\"SK\",\"HU\",\"RU\",\"RO\",\"EE\",\"AW\",\"PT\",\"PR\",\"HR\",\"KW\",\"JP\",\"NZ\",\"PL\",\"IL\",\"ES\",\"LT\",\"SI\",\"CZ\",\"IT\"],\n    cat3: [\"BZ\",\"TN\",\"GT\",\"IQ\",\"ZA\",\"FJ\",\"EC\",\"LY\",\"ID\",\"VN\",\"BT\",\"DZ\",\"PE\",\"PW\",\"BW\",\"DM\",\"PY\",\"MD\",\"GQ\",\"MN\",\"VC\",\"IR\",\"GD\",\"EG\",\"CO\",\"SR\",\"TM\",\"BA\",\"BB\",\"BR\",\"AL\",\"AM\",\"GA\",\"MX\",\"AZ\",\"TH\",\"LC\",\"CN\",\"MK\",\"DO\",\"AG\",\"AR\",\"GE\",\"CR\",\"MU\",\"RS\",\"BY\",\"KN\",\"XK\",\"BG\"],\n    cat4: [\"UA\",\"BI\",\"SS\",\"CF\",\"YE\",\"MZ\",\"MW\",\"SO\",\"CD\",\"LR\",\"MG\",\"NE\",\"AF\",\"SD\",\"SB\",\"ML\",\"HT\",\"VU\",\"BF\",\"LS\",\"TD\",\"GW\",\"TG\",\"GM\",\"KI\",\"SL\",\"PG\",\"UG\",\"KM\",\"PS\",\"RW\",\"TZ\",\"ET\",\"ZM\",\"FM\",\"BJ\",\"GN\",\"TL\",\"MM\",\"SN\",\"CM\",\"TJ\",\"TV\",\"NP\",\"CG\",\"ST\",\"PK\",\"KE\",\"ZW\",\"MH\",\"HN\",\"TO\",\"CI\",\"WS\",\"GH\",\"VE\",\"KH\",\"MR\",\"KG\",\"NI\",\"NG\",\"DJ\",\"AO\",\"LA\",\"BD\",\"BO\",\"MA\",\"JO\",\"LB\",\"NR\",\"IN\",\"NA\",\"CV\",\"UZ\",\"PH\",\"SZ\",\"JM\",\"SV\",\"LK\"]\n  };\n  \/\/ \u2500\u2500 Ecwid-Optionsnamen und -werte: bleiben exakt deutsch wie im Shop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const OPT_COMM_LANG = \"In welcher Sprache nimmst Du teil?\";\n  const OPT_STATUS    = \"Trifft etwas davon auf Dich zu?\";\n  const STATUS_LABEL = {\n    paar:        \"Zu zweit (gleicher Haushalt)\",\n    schueler:    \"Sch\u00fcler:innen\",\n    student:     \"Student\",\n    wiederholer: \"Wiederholer\",\n    apponly:     \"Digitale Teilnahme (App)\"\n  };\n  \/\/ \u2500\u2500 Shadow DOM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const host = document.getElementById(\"sw-host-ja\");\n  const shadow = host.attachShadow({ mode: \"open\" });\n  const styleEl = document.createElement(\"style\");\n  styleEl.textContent = `\n    :host {\n      display: block;\n      --bg:           #F5FAF6;\n      --card:         #FFFFFF;\n      --ink:          #0C1E14;\n      --ink-muted:    #27703F;\n      --accent:       #0C1E14;\n      --accent-light: #E6F2E8;\n      --border:       #C8E0CE;\n      --radius:       16px;\n      --radius-sm:    10px;\n    }\n    @keyframes wiz-spin { to { transform: rotate(360deg); } }\n    .sw-root {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 20px; font-weight: 400; color: var(--ink);\n      background: var(--bg); padding: 32px 20px;\n      display: flex; align-items: flex-start; justify-content: center;\n    }\n    .sw-card {\n      background: var(--card); border: 1px solid var(--border);\n      border-radius: 24px; padding: 36px 32px;\n      width: 100%; max-width: 780px;\n      box-shadow: 0 4px 24px rgba(12,30,20,0.08); box-sizing: border-box;\n    }\n    @media (max-width: 480px) {\n      .sw-root { padding: 16px 10px; }\n      .sw-card { padding: 24px 16px; border-radius: 16px; }\n    }\n    .sw-progress { display: flex; gap: 8px; margin-bottom: 32px; }\n    .sw-progress-step { flex: 1; height: 4px; background: var(--border); border-radius: 999px; transition: background 0.35s; }\n    .sw-progress-step.active { background: var(--accent); }\n    .sw-progress-step.done   { background: var(--accent); opacity: 0.4; }\n    .sw-step-label { font-size: 12px; font-weight: 400; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: 10px; }\n    .sw-heading { font-size: 26px; font-weight: 500; line-height: 1.2; margin: 0 0 6px; color: var(--accent); letter-spacing: 0.01em; }\n    .sw-subtext { font-size: 18px; font-weight: 400; color: var(--ink-muted); margin: 0 0 28px; line-height: 1.6; }\n    .sw-label { display: block; font-size: 18px; font-weight: 700; margin-bottom: 6px; color: var(--ink); }\n    .sw-select, .sw-text-input {\n      width: 100%; padding: 13px 15px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg);\n      font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-select {\n      appearance: none;\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2327703F' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: right 15px center;\n      cursor: pointer;\n    }\n    .sw-select:focus, .sw-text-input:focus {\n      outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1);\n    }\n    .sw-text-input { margin-bottom: 14px; }\n    .sw-redirect { display: none; margin-top: 12px; padding: 18px 20px; border-radius: var(--radius-sm); background: #FFF8F0; border: 1px solid rgba(180,80,0,0.2); font-size: 17px; line-height: 1.8; color: var(--ink); }\n    .sw-redirect strong { display: block; margin-bottom: 8px; font-size: 17px; color: #7A3500; }\n    .sw-redirect a { color: #27703F; text-decoration: underline; }\n    .sw-infobox {\n      margin-top: 12px; padding: 15px 17px; border-radius: var(--radius-sm);\n      background: var(--accent-light); border: 1px solid rgba(12,30,20,0.15);\n      font-size: 18px; font-weight: 400; line-height: 1.5;\n    }\n    .sw-infobox-title {\n      font-weight: 700; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase;\n      color: var(--accent); margin-bottom: 3px;\n    }\n    .sw-divider { border: 0; border-top: 1px solid var(--border); margin: 30px 0 24px; }\n    .sw-choice-row { display: flex; gap: 10px; flex-wrap: wrap; }\n    .sw-choice-card {\n      flex: 1; min-width: 150px; padding: 16px 14px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      text-align: center; cursor: pointer; font-size: 17px; line-height: 1.3;\n      transition: all 0.15s; background: var(--bg); box-sizing: border-box;\n    }\n    .sw-choice-card:hover { border-color: var(--accent); }\n    .sw-choice-card.active { background: var(--accent-light); border-color: var(--accent); font-weight: 700; color: var(--accent); }\n    @media (max-width: 480px) { .sw-choice-card { min-width: 100%; } }\n    .sw-person-block { margin-bottom: 8px; }\n    .sw-person-title { font-weight: 700; font-size: 21px; color: var(--accent); margin-bottom: 16px; }\n    .sw-field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 0; }\n    @media (max-width: 480px) { .sw-field-grid { grid-template-columns: 1fr; } }\n    .sw-range-header { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 22px; }\n    .sw-range-header-label { font-weight: 700; font-size: 18px; }\n    .sw-amount-display { display: flex; align-items: baseline; gap: 3px; }\n    .sw-amount-display span { font-size: 18px; font-weight: 400; }\n    .sw-amount-input {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 36px; font-weight: 700; color: var(--ink);\n      border: 2px solid var(--border); background: var(--bg);\n      text-align: right; width: 132px; padding: 4px 12px;\n      outline: none; border-radius: var(--radius-sm);\n      transition: background 0.15s, color 0.15s, border-color 0.15s, box-shadow 0.15s;\n    }\n    .sw-amount-input:hover { border-color: var(--accent); background: var(--accent-light); }\n    .sw-amount-input:focus { border-color: var(--accent); background: var(--accent-light); color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    input[type=range].sw-range {\n      -webkit-appearance: none; width: 100%; height: 6px;\n      border-radius: 999px; background: var(--border); outline: none; cursor: pointer;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb {\n      -webkit-appearance: none; width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35);\n      cursor: pointer; transition: transform 0.15s, box-shadow 0.15s;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb:hover { transform: scale(1.08); box-shadow: 0 0 0 9px rgba(12,30,20,0.18), 0 3px 12px rgba(12,30,20,0.4); }\n    input[type=range].sw-range::-webkit-slider-thumb:active { transform: scale(1.12); }\n    input[type=range].sw-range::-moz-range-thumb {\n      width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      border: none; box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); cursor: pointer;\n    }\n    input[type=range].sw-range.sw-pulse::-webkit-slider-thumb { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    input[type=range].sw-range.sw-pulse::-moz-range-thumb    { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    @keyframes sw-thumb-pulse {\n      0%, 100% { box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); }\n      50%      { box-shadow: 0 0 0 15px rgba(12,30,20,0.05), 0 3px 10px rgba(12,30,20,0.35); }\n    }\n    .sw-range-wrap { position: relative; }\n    .sw-markers { position: relative; height: 56px; margin-bottom: 8px; margin-left: 18px; margin-right: 18px; }\n    .sw-marker {\n      position: absolute; transform: translateX(-50%);\n      display: flex; flex-direction: column; align-items: center; gap: 2px;\n      justify-content: flex-end; height: 100%; pointer-events: auto; cursor: pointer;\n    }\n    .sw-marker-tick { width: 1px; height: 10px; background: var(--border); flex-shrink: 0; }\n    .sw-marker.active .sw-marker-tick { background: var(--accent); opacity: 0.5; }\n    .sw-marker-label { font-size: 11px; font-weight: 400; color: var(--ink-muted); white-space: nowrap; line-height: 1.2; text-align: center; order: -2; }\n    .sw-marker-amount { font-size: 13px; font-weight: 700; color: var(--ink-muted); order: -1; }\n    .sw-marker.active .sw-marker-label, .sw-marker.active .sw-marker-amount { color: var(--accent); }\n    @media (max-width: 540px) {\n      .sw-markers { display: none; }\n      .sw-markers-mobile { display: flex !important; }\n    }\n    .sw-markers-mobile {\n      display: none; flex-direction: column; gap: 0;\n      margin: 12px 0 4px; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden;\n    }\n    .sw-marker-mobile {\n      display: flex; align-items: center; justify-content: space-between;\n      padding: 10px 14px; cursor: pointer; border-bottom: 1px solid var(--border);\n      transition: background 0.15s; font-family: 'Tinos', Georgia, serif;\n    }\n    .sw-marker-mobile:last-child { border-bottom: 0; }\n    .sw-marker-mobile:hover { background: var(--accent-light); }\n    .sw-marker-mobile.active { background: var(--accent-light); }\n    .sw-marker-mobile-label { font-size: 15px; font-weight: 400; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-label { color: var(--accent); font-weight: 700; }\n    .sw-marker-mobile-amount { font-size: 16px; font-weight: 700; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-amount { color: var(--accent); }\n    .sw-summary-box { padding: 18px 20px; background: var(--accent-light); border: 1px solid rgba(12,30,20,0.2); border-radius: var(--radius-sm); margin-top: 20px; }\n    .sw-summary-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; font-size: 16px; color: var(--ink); }\n    .sw-summary-row.sw-summary-discount { color: #8A1F1F; }\n    .sw-summary-row.sw-summary-total { border-top: 1px solid rgba(12,30,20,0.25); margin-top: 8px; padding-top: 12px; font-weight: 700; font-size: 22px; color: var(--accent); }\n    .sw-summary-person-label { font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-muted); margin: 14px 0 2px; }\n    .sw-summary-person-label:first-child { margin-top: 0; }\n    .sw-btn-row { display: flex; gap: 10px; margin-top: 24px; flex-wrap: wrap; }\n    .sw-btn { flex: 1; min-width: 140px; padding: 15px 17px; border-radius: var(--radius-sm); font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 700; cursor: pointer; transition: all 0.2s; border: 0; }\n    .sw-btn-primary { background: var(--accent); color: #fff; }\n    .sw-btn-primary:hover { background: #27703F; transform: translateY(-1px); }\n    .sw-btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }\n    .sw-btn-secondary { background: transparent; color: var(--ink); border: 1px solid var(--border); }\n    .sw-btn-secondary:hover { background: var(--bg); }\n    .sw-error { display: none; margin-top: 15px; padding: 13px 15px; border-radius: var(--radius-sm); background: #FFF3F3; border: 1px solid rgba(220,30,30,0.2); color: #8A1F1F; font-size: 18px; font-weight: 400; line-height: 1.5; white-space: pre-wrap; }\n    .wiz-spinner { display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.4); border-top-color: #fff; border-radius: 50%; animation: wiz-spin 0.7s linear infinite; vertical-align: middle; margin-right: 8px; }\n    .sw-country-search-wrap { position: relative; margin-bottom: 10px; }\n    .sw-country-search-icon { position: absolute; left: 18px; top: 50%; transform: translateY(-50%); color: var(--ink-muted); pointer-events: none; opacity: 0.5; }\n    .sw-country-search {\n      width: 100%; padding: 13px 15px 13px 54px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg); font-family: 'Tinos', Georgia, serif;\n      font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-country-search:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    .sw-country-list { max-height: 240px; overflow-y: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }\n    .sw-country-item { padding: 11px 15px; cursor: pointer; font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; display: flex; justify-content: space-between; align-items: center; transition: background 0.15s; border-bottom: 1px solid var(--border); }\n    .sw-country-item:last-child { border-bottom: 0; }\n    .sw-country-item:hover { background: var(--accent-light); }\n    .sw-country-item.selected { background: var(--accent-light); font-weight: 700; }\n    .sw-country-item-cat { font-size: 12px; color: var(--ink-muted); background: var(--border); padding: 2px 8px; border-radius: 999px; }\n    .sw-country-empty { padding: 15px; font-size: 18px; color: var(--ink-muted); text-align: center; }\n    .sw-step { display: none; }\n    .sw-step.active { display: block; }\n  `;\n  shadow.appendChild(styleEl);\n  const wrapper = document.createElement(\"div\");\n  wrapper.innerHTML = `\n    <div class=\"sw-root\">\n      <div class=\"sw-card\">\n        <div class=\"sw-progress\">\n          <div class=\"sw-progress-step\" id=\"sw-prog-1\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-2\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-3\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-4\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-5\"><\/div>\n        <\/div>\n        <!-- STEP 1 -->\n        <div class=\"sw-step active\" id=\"sw-step-welcome\">\n          <div class=\"sw-step-label\">\u30b9\u30c6\u30c3\u30d71\uff0f5<\/div>\n          <h2 class=\"sw-heading\">\u3088\u3046\u3053\u305d<\/h2>\n          <p class=\"sw-subtext\">\u3044\u304f\u3064\u304b\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u56fd\u3001\u8a00\u8a9e\u3001\u304a\u7533\u3057\u8fbc\u307f\u65b9\u6cd5\u3001\u53c2\u52a0\u8cbb\u3092\u9078\u629e\u3057\u3001\u305d\u306e\u307e\u307e\u76f4\u63a5\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3078\u9032\u307f\u307e\u3059\u3002<\/p>\n          <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-welcome-next\" style=\"width:100%;\">\u6599\u91d1\u3068\u304a\u7533\u3057\u8fbc\u307f<\/button>\n        <\/div>\n        <!-- STEP 2 -->\n        <div class=\"sw-step\" id=\"sw-step-country\">\n          <div class=\"sw-step-label\">\u30b9\u30c6\u30c3\u30d72\uff0f5<\/div>\n          <h2 class=\"sw-heading\">\u304a\u4f4f\u307e\u3044\u306f\u3069\u3061\u3089\u3067\u3059\u304b\uff1f<\/h2>\n          <label class=\"sw-label\">\u56fd<\/label>\n          <div class=\"sw-country-search-wrap\">\n            <svg class=\"sw-country-search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.35-4.35\"\/><\/svg>\n            <input type=\"text\" class=\"sw-country-search\" id=\"sw-country-search\" placeholder=\"\u56fd\u3092\u691c\u7d22\u2026\" autocomplete=\"off\">\n          <\/div>\n          <div class=\"sw-country-list\" id=\"sw-country-list\"><\/div>\n          <input type=\"hidden\" id=\"sw-country\">\n          <div class=\"sw-infobox\" id=\"sw-catInfo\">\n            <div class=\"sw-infobox-title\">\u6599\u91d1\u30ab\u30c6\u30b4\u30ea\u30fc<\/div>\n            <div id=\"sw-catText\">\u307e\u305a\u56fd\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/div>\n          <\/div>\n          <div class=\"sw-redirect\" id=\"sw-redirect-russia\">\n            <strong>\u30ed\u30b7\u30a2\u304b\u3089\u3054\u53c2\u52a0\u306e\u65b9\u306b\u306f\u5c02\u7528\u306e\u7533\u8fbc\u30da\u30fc\u30b8\u304c\u3042\u308a\u307e\u3059\u3002<\/strong>\n            \u5f53\u65b9\u306e\u6c7a\u6e08\u30b7\u30b9\u30c6\u30e0\u306f\u30ed\u30b7\u30a2\u3067\u306f\u3054\u5229\u7528\u3044\u305f\u3060\u3051\u307e\u305b\u3093\u3002\u305d\u3061\u3089\u304b\u3089\u304a\u7533\u3057\u8fbc\u307f\u304f\u3060\u3055\u3044\uff1a<br><br>\n            <a href=\"https:\/\/spiritual-activity.org\/ru\/anmeldung-basic-exercises\/\">\u30ed\u30b7\u30a2\u8a9e\u306e\u7533\u8fbc\u30da\u30fc\u30b8\u3078<\/a>\n          <\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-country-back\">\u623b\u308b<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-country-next\" disabled>\u6b21\u3078<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 3 -->\n        <div class=\"sw-step\" id=\"sw-step-langform\">\n          <div class=\"sw-step-label\">\u30b9\u30c6\u30c3\u30d73\uff0f5<\/div>\n          <h2 class=\"sw-heading\">\u8a00\u8a9e\u3068\u304a\u7533\u3057\u8fbc\u307f\u65b9\u6cd5<\/h2>\n          <label class=\"sw-label\" for=\"sw-commLang\">\u3069\u306e\u8a00\u8a9e\u3067\u53c2\u52a0\u3057\u307e\u3059\u304b\uff1f<\/label>\n          <select class=\"sw-select\" id=\"sw-commLang\">\n            <option value=\"\" selected disabled>\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u2026<\/option>\n            <option value=\"Deutsch\">\u30c9\u30a4\u30c4\u8a9e<\/option>\n            <option value=\"Englisch\">\u82f1\u8a9e<\/option>\n            <option value=\"Spanisch\">\u30b9\u30da\u30a4\u30f3\u8a9e<\/option>\n            <option value=\"Franz\u00f6sisch\">\u30d5\u30e9\u30f3\u30b9\u8a9e<\/option>\n            <option value=\"Italienisch\">\u30a4\u30bf\u30ea\u30a2\u8a9e<\/option>\n            <option value=\"Portugiesisch\">\u30dd\u30eb\u30c8\u30ac\u30eb\u8a9e<\/option>\n            <option value=\"Arabisch\">\u30a2\u30e9\u30d3\u30a2\u8a9e<\/option>\n            <option value=\"Hebr\u00e4isch\">\u30d8\u30d6\u30e9\u30a4\u8a9e<\/option>\n            <option value=\"Farsi\">\u30da\u30eb\u30b7\u30a2\u8a9e<\/option>\n            <option value=\"Georgisch\">\u30b0\u30eb\u30b8\u30a2\u8a9e<\/option>\n            <option value=\"Ukrainisch\">\u30a6\u30af\u30e9\u30a4\u30ca\u8a9e<\/option>\n            <option value=\"Niederl\u00e4ndisch\">\u30aa\u30e9\u30f3\u30c0\u8a9e<\/option>\n            <option value=\"T\u00fcrkisch\">\u30c8\u30eb\u30b3\u8a9e<\/option>\n            <option value=\"Bulgarisch\">\u30d6\u30eb\u30ac\u30ea\u30a2\u8a9e<\/option>\n            <option value=\"Russisch\">\u30ed\u30b7\u30a2\u8a9e<\/option>\n            <option value=\"Chinesisch\">\u4e2d\u56fd\u8a9e<\/option>\n            <option value=\"Japanisch\">\u65e5\u672c\u8a9e<\/option>\n            <option value=\"Koreanisch\">\u97d3\u56fd\u8a9e<\/option>\n          <\/select>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note\" style=\"display:none; margin-top:14px;\">\n            <div class=\"sw-infobox-title\">\u30c7\u30b8\u30bf\u30eb\u53c2\u52a0 \u00b7 \u221235\u20ac<\/div>\n            <div id=\"sw-apponly-note-text\">\u30c7\u30b8\u30bf\u30eb\u53c2\u52a0\u3092\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5272\u5f15\u306f\u81ea\u52d5\u7684\u306b\u6982\u8981\u306b\u53cd\u6620\u3055\u308c\u307e\u3059\u3002<\/div>\n          <\/div>\n          <label class=\"sw-label\" style=\"margin-top:26px;\">\u3069\u306e\u3088\u3046\u306b\u304a\u7533\u3057\u8fbc\u307f\u306b\u306a\u308a\u307e\u3059\u304b\uff1f<\/label>\n          <div class=\"sw-choice-row\" id=\"sw-form-choices\">\n            <div class=\"sw-choice-card active\" data-form=\"einzeln\">\u500b\u4eba<\/div>\n            <div class=\"sw-choice-card\" data-form=\"paar\">\u30da\u30a2<br><span style=\"font-size:13px; font-weight:400;\">\uff08\u540c\u4e00\u4e16\u5e2f\uff09<\/span><\/div>\n            <div class=\"sw-choice-card\" data-form=\"gruppe\">\u30b0\u30eb\u30fc\u30d7<br><span style=\"font-size:13px; font-weight:400;\">\uff084\u540d\u4ee5\u4e0a\uff09<\/span><\/div>\n          <\/div>\n          <div class=\"sw-infobox\" id=\"sw-gruppe-note\" style=\"display:none; margin-top:18px;\">\n            <div class=\"sw-infobox-title\">\u30b0\u30eb\u30fc\u30d7\u7533\u3057\u8fbc\u307f<\/div>\n            <div>\u3054\u95a2\u5fc3\u3092\u304a\u5bc4\u305b\u3044\u305f\u3060\u304d\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3002\u6b21\u306e\u30da\u30fc\u30b8\u3067\u30b0\u30eb\u30fc\u30d7\u7533\u3057\u8fbc\u307f\u3092\u884c\u3063\u3066\u3044\u305f\u3060\u3051\u307e\u3059\u3002\u3054\u6ce8\u610f\u304f\u3060\u3055\u3044\uff1a\u30b0\u30eb\u30fc\u30d7\u7533\u3057\u8fbc\u307f\u306f\u30c9\u30a4\u30c4\u8a9e\u3068\u82f1\u8a9e\u306e\u307f\u3067\u3054\u5229\u7528\u3044\u305f\u3060\u3051\u307e\u3059\u3002<\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-langform\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-langform-back\">\u623b\u308b<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-langform-next\" disabled>\u6b21\u3078<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-gruppe-redirect\" style=\"display:none;\">\u30b0\u30eb\u30fc\u30d7\u7533\u3057\u8fbc\u307f\u3078\u9032\u3080<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4A -->\n        <div class=\"sw-step\" id=\"sw-step-details-solo\">\n          <div class=\"sw-step-label\">\u30b9\u30c6\u30c3\u30d74\uff0f5<\/div>\n          <h2 class=\"sw-heading\">\u3042\u306a\u305f\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30<\/h2>\n          <p class=\"sw-subtext\">\u4ee5\u4e0b\u306e\u3044\u305a\u308c\u304b\u306b\u8a72\u5f53\u3057\u307e\u3059\u304b\uff1f\u3053\u308c\u306b\u3088\u308a\u3001\u9069\u5207\u306a\u53c2\u52a0\u8cbb\u3092\u3054\u63d0\u6848\u3067\u304d\u307e\u3059\u3002<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u30c7\u30b8\u30bf\u30eb\u53c2\u52a0 \u00b7 \u221235\u20ac<\/div>\n            <div>\u30c7\u30b8\u30bf\u30eb\u53c2\u52a0\u3092\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5272\u5f15\u306f\u81ea\u52d5\u7684\u306b\u6982\u8981\u306b\u53cd\u6620\u3055\u308c\u307e\u3059\u3002<\/div>\n          <\/div>\n          <label class=\"sw-label\">\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044<\/label>\n          <select class=\"sw-select\" id=\"sw-solo-status\">\n            <option value=\"\" disabled selected>\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u2026<\/option>\n            <option value=\"normal\">\u901a\u5e38\u306e\u304a\u7533\u3057\u8fbc\u307f<\/option>\n            <option value=\"schueler\">\u5b66\u751f\uff08\u751f\u5f92\uff09\uff08\u221250%\uff09<\/option>\n            <option value=\"student\">\u8077\u696d\u8a13\u7df4\u4e2d\uff0f\u5c31\u5b66\u4e2d\uff08\u221225%\uff09<\/option>\n            <option value=\"wiederholer\">\u9b42\u306e\u30a8\u30af\u30b5\u30b5\u30a4\u30ba\u306e\u30b3\u30fc\u30b9\u3092\u518d\u53d7\u8b1b\u3057\u307e\u3059\uff08\u65b0\u3057\u3044\u30ab\u30fc\u30c9\u30bb\u30c3\u30c8\u306a\u3057 \u2212 30%\uff09<\/option>\n          <\/select>\n          <div class=\"sw-error\" id=\"sw-error-details-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-solo-back\">\u623b\u308b<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-solo-next\" disabled>\u6b21\u3078<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4B -->\n        <div class=\"sw-step\" id=\"sw-step-details-paar\">\n          <div class=\"sw-step-label\">\u30b9\u30c6\u30c3\u30d74\uff0f5<\/div>\n          <h2 class=\"sw-heading\">\u304a\u4e8c\u4eba\u306b\u3064\u3044\u3066\u306e\u60c5\u5831<\/h2>\n          <p class=\"sw-subtext\">\u304a\u4e8c\u4eba\u5206\u306e\u60c5\u5831\u3092\u3054\u5165\u529b\u304f\u3060\u3055\u3044\u30022\u4eba\u76ee\u306e\u65b9\u306b\u306f\u81ea\u52d5\u7684\u306b50%\u306e\u5272\u5f15\u304c\u9069\u7528\u3055\u308c\u307e\u3059\u3002<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-paar-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u30c7\u30b8\u30bf\u30eb\u53c2\u52a0 \u00b7 \u221235\u20ac<\/div>\n            <div>\u30c7\u30b8\u30bf\u30eb\u53c2\u52a0\u3092\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5272\u5f15\u306f\u81ea\u52d5\u7684\u306b\u6982\u8981\u306b\u53cd\u6620\u3055\u308c\u307e\u3059\u3002<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\u53c2\u52a0\u80051<\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\u540d<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-vorname\"><\/div>\n              <div><label class=\"sw-label\">\u59d3<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p1-email\">\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\u53c2\u52a0\u80052 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">\uff08\u221250%\uff09<\/span><\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\u540d<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-vorname\"><\/div>\n              <div><label class=\"sw-label\">\u59d3<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p2-email\">\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-details-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-paar-back\">\u623b\u308b<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-paar-next\" disabled>\u6b21\u3078<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5A -->\n        <div class=\"sw-step\" id=\"sw-step-amount-solo\">\n          <div class=\"sw-step-label\">\u30b9\u30c6\u30c3\u30d75\uff0f5<\/div>\n          <h2 class=\"sw-heading\">\u53c2\u52a0\u8cbb\u3092\u9078\u629e<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-solo\">\u3053\u3053\u3067\u3001\u3054\u81ea\u8eab\u306b\u9069\u3057\u305f\u53c2\u52a0\u8cbb\u3092\u9078\u629e\u3067\u304d\u307e\u3059\u3002<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-solo\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u30c7\u30b8\u30bf\u30eb\u53c2\u52a0 \u00b7 \u221235\u20ac<\/div>\n            <div>\u30c7\u30b8\u30bf\u30eb\u53c2\u52a0\u3092\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5272\u5f15\u306f\u81ea\u52d5\u7684\u306b\u6982\u8981\u306b\u53cd\u6620\u3055\u308c\u307e\u3059\u3002<\/div>\n          <\/div>\n          <div class=\"sw-range-header\">\n            <div class=\"sw-range-header-label\">\u304a\u652f\u6255\u3044\u91d1\u984d<\/div>\n            <div class=\"sw-amount-display\">\n              <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-solo\" value=\"360\">\n              <span>\u20ac<\/span>\n            <\/div>\n          <\/div>\n          <div class=\"sw-range-wrap\">\n            <div class=\"sw-markers\" id=\"sw-markers-solo\"><\/div>\n            <input type=\"range\" class=\"sw-range\" id=\"sw-amount-solo\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n            <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-solo\"><\/div>\n          <\/div>\n          <p style=\"margin-top:18px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \u3055\u3089\u306b\u7d4c\u6e08\u7684\u306a\u6e1b\u984d\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u304a\u6c17\u8efd\u306b\u3054\u9023\u7d61\u304f\u3060\u3055\u3044\uff1a\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-solo\">\n            <div class=\"sw-summary-row\"><span>\u9078\u629e\u3057\u305f\u53c2\u52a0\u8cbb<\/span><span id=\"sw-solo-chosen\">360\u20ac<\/span><\/div>\n            <div id=\"sw-solo-discounts\"><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-solo\" style=\"display:none;\"><span>\u9001\u6599<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\u5408\u8a08<\/span><span><span id=\"sw-solo-total\">360<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-solo-back\">\u623b\u308b<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-solo\">\u7533\u3057\u8fbc\u3080<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5B -->\n        <div class=\"sw-step\" id=\"sw-step-amount-paar\">\n          <div class=\"sw-step-label\">\u30b9\u30c6\u30c3\u30d75\uff0f5<\/div>\n          <h2 class=\"sw-heading\">\u53c2\u52a0\u8cbb\u3092\u9078\u629e<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-paar\">\u5404\u81ea\u304c\u81ea\u5206\u306e\u53c2\u52a0\u8cbb\u3092\u9078\u629e\u3057\u307e\u3059\u3002\u53c2\u52a0\u80052\u306b\u306f\u81ea\u52d5\u7684\u306b50%\u306e\u5272\u5f15\u304c\u9069\u7528\u3055\u308c\u307e\u3059\u3002<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-paar\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u30c7\u30b8\u30bf\u30eb\u53c2\u52a0 \u00b7 \u221235\u20ac<\/div>\n            <div>\u30c7\u30b8\u30bf\u30eb\u53c2\u52a0\u3092\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5272\u5f15\u306f\u81ea\u52d5\u7684\u306b\u6982\u8981\u306b\u53cd\u6620\u3055\u308c\u307e\u3059\u3002<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p1-title\">\u53c2\u52a0\u80051<\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\u53c2\u52a0\u8cbb<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p1\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p1\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p1\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p1\"><\/div>\n            <\/div>\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p2-title\">\u53c2\u52a0\u80052 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">\uff08\u221250%\uff09<\/span><\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\u53c2\u52a0\u8cbb<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p2\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p2\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p2\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p2\"><\/div>\n            <\/div>\n          <\/div>\n          <p style=\"margin-top:8px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \u3055\u3089\u306b\u7d4c\u6e08\u7684\u306a\u6e1b\u984d\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u304a\u6c17\u8efd\u306b\u3054\u9023\u7d61\u304f\u3060\u3055\u3044\uff1a\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-paar\">\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p1-label\">\u53c2\u52a0\u80051<\/div>\n            <div class=\"sw-summary-row\"><span>\u9078\u629e\u3057\u305f\u53c2\u52a0\u8cbb<\/span><span id=\"sw-p1-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p1-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\u5c0f\u8a08<\/span><span id=\"sw-p1-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p2-label\">\u53c2\u52a0\u80052<\/div>\n            <div class=\"sw-summary-row\"><span>\u9078\u629e\u3057\u305f\u53c2\u52a0\u8cbb<\/span><span id=\"sw-p2-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p2-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\u5c0f\u8a08<\/span><span id=\"sw-p2-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-paar\" style=\"display:none;\"><span>\u9001\u6599<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\u5408\u8a08<\/span><span><span id=\"sw-paar-total\">0<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-paar-back\">\u623b\u308b<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-paar\">\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3078<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  `;\n  shadow.appendChild(wrapper);\n  const $ = (id) => shadow.getElementById(id);\n  const COUNTRY_TO_CAT = {};\n  Object.keys(COUNTRIES).forEach(cat => COUNTRIES[cat].forEach(code => COUNTRY_TO_CAT[code] = cat));\n  function getCountryName(code) {\n    if (COUNTRY_NAMES[code]) return COUNTRY_NAMES[code];\n    try { return new Intl.DisplayNames([\"ja\"], { type: \"region\" }).of(code) || code; }\n    catch { return code; }\n  }\n\n  function getCountryAliases(code) {\n    const list = [];\n    \/\/ Intl-Name als Fallback, falls er vom festen CLDR-Namen abweicht\n    if (COUNTRY_NAMES[code]) {\n      try {\n        const intlName = new Intl.DisplayNames([\"ja\"], { type: \"region\" }).of(code);\n        if (intlName && intlName !== COUNTRY_NAMES[code]) list.push(intlName.toLowerCase());\n      } catch {}\n    }\n    \/\/ Englischer Name als lateinische Fallback-Schreibweise fuer alle Laender\n    try {\n      const enName = new Intl.DisplayNames([\"en\"], { type: \"region\" }).of(code);\n      if (enName) list.push(enName.toLowerCase());\n    } catch {}\n    (COUNTRY_SEARCH_ALIASES[code] || []).forEach(a => list.push(a.toLowerCase()));\n    return list;\n  }\n  function getAllCountriesSorted() {\n    const all = [];\n    [\"cat1\",\"cat2\",\"cat3\",\"cat4\"].forEach(cat => {\n      COUNTRIES[cat]\n        .map(code => ({ code, name: getCountryName(code), cat, aliases: getCountryAliases(code) }))\n        .sort((a, b) => a.name.localeCompare(b.name, \"ja\"))\n        .forEach(c => all.push(c));\n    });\n    return all;\n  }\n  function emptyPerson() {\n    return { vorname: \"\", nachname: \"\", email: \"\", wiederholer: false, statusType: \"\", amount: 0 };\n  }\n  const state = {\n    country: \"\", category: \"cat1\",\n    commLang: \"\", form: \"einzeln\",\n    persons: { solo: emptyPerson(), p1: emptyPerson(), p2: emptyPerson() }\n  };\n  function getPerson(key) { return state.persons[key] || state.persons.solo; }\n  function isAppOnly() {\n    const { category: cat, commLang: lang, country } = state;\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[country];\n      \/\/ Ausnahme (z.B. China) gilt nur, wenn auch die passende Sprache gewaehlt ist \u2013\n      \/\/ sonst kann kein physisches Kartenset verschickt werden.\n      if (!exceptionLang || lang !== exceptionLang) return true;\n    }\n    if (APP_ONLY_LANGS.has(lang)) return true;\n    if (lang === \"Russisch\" && country && country !== \"RU\") return true;\n    return false;\n  }\n\n  function isWiederholer(person) {\n    return !!person && (person.wiederholer || person.statusType === \"wiederholer\");\n  }\n\n  \/\/ Geht ueberhaupt ein Kartenset raus? Nur wenn die Teilnahme nicht rein digital\n  \/\/ ist UND mindestens eine Person ein neues Set braucht - Wiederholer bekommen\n  \/\/ keins. Steuert sowohl die Versandzeile in der Zusammenfassung als auch die\n  \/\/ Wahl des Ecwid-Produkts, damit beide nicht auseinanderlaufen koennen.\n  function hasPhysicalShipment(isPaar) {\n    if (isAppOnly()) return false;\n    return isPaar\n      ? !(isWiederholer(state.persons.p1) && isWiederholer(state.persons.p2))\n      : !isWiederholer(state.persons.solo);\n  }\n\n  \/\/ Ecwid haengt den Versand am Produkt fest, nicht am Warenkorb. Ohne physischen\n  \/\/ Versand muss deshalb das versandfreie Digital-Produkt in den Warenkorb, sonst\n  \/\/ schlaegt der Shop trotzdem Versandkosten auf.\n  function getParticipationProductId(isPaar) {\n    return hasPhysicalShipment(isPaar) ? PRODUCTS[state.category] : PRODUCTS_APPONLY[state.category];\n  }\n  function updateAppOnlyUI() {\n    const appOnly = state.commLang ? isAppOnly() : false;\n    let reason = \"\";\n    if (appOnly) {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[state.country];\n      if ((state.category === \"cat3\" || state.category === \"cat4\") && exceptionLang) {\n        reason = TXT.reasonException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang);\n      } else if (state.category === \"cat3\" || state.category === \"cat4\") {\n        reason = TXT.reasonRegion;\n      } else if (state.commLang === \"Russisch\") {\n        reason = TXT.reasonRussian;\n      } else {\n        reason = TXT.reasonLanguage;\n      }\n    }\n    const noteIds = [\"sw-apponly-note\",\"sw-apponly-note-step4\",\"sw-apponly-note-paar-step4\",\"sw-apponly-note-step5-solo\",\"sw-apponly-note-step5-paar\"];\n    noteIds.forEach(id => {\n      const el = $(id);\n      if (!el) return;\n      el.style.display = appOnly ? \"block\" : \"none\";\n      const textDiv = el.querySelector(\"div:not(.sw-infobox-title)\");\n      if (textDiv && reason) textDiv.textContent = reason;\n    });\n  }\n  const STEP_CONTAINER = {\n    1: () => \"sw-step-welcome\",\n    2: () => \"sw-step-country\",\n    3: () => \"sw-step-langform\",\n    4: () => state.form === \"paar\" ? \"sw-step-details-paar\" : \"sw-step-details-solo\",\n    5: () => state.form === \"paar\" ? \"sw-step-amount-paar\" : \"sw-step-amount-solo\"\n  };\n  function showStep(n) {\n    shadow.querySelectorAll(\".sw-step\").forEach(el => el.classList.remove(\"active\"));\n    $(STEP_CONTAINER[n]()).classList.add(\"active\");\n    for (let i = 1; i <= 5; i++) {\n      const prog = $(\"sw-prog-\" + i);\n      if (!prog) continue;\n      if (i < n) prog.className = \"sw-progress-step done\";\n      else if (i === n) prog.className = \"sw-progress-step active\";\n      else prog.className = \"sw-progress-step\";\n    }\n    if (n === 5) {\n      const sliderIds = state.form === \"paar\" ? [\"sw-amount-p1\",\"sw-amount-p2\"] : [\"sw-amount-solo\"];\n      sliderIds.forEach(sid => { const el = $(sid); if (el) el.classList.add(\"sw-pulse\"); });\n      refreshSummary();\n    }\n  }\n  function setNextEnabled(id, enabled) {\n    const b = $(id);\n    if (!b) return;\n    b.disabled = !enabled;\n    b.style.opacity = enabled ? \"1\" : \".4\";\n    b.style.cursor  = enabled ? \"pointer\" : \"not-allowed\";\n  }\n  function showErrorIn(id, msg) { const el=$(id); el.style.display=\"block\"; el.textContent=msg; }\n  function clearErrorIn(id)     { const el=$(id); el.style.display=\"none\";  el.textContent=\"\"; }\n  function setCheckoutLoading(btnId, loading) {\n    const btn = $(btnId);\n    \/\/ Nach dem Danke-Bildschirm existiert der Button nicht mehr \u2013 dann nichts tun.\n    if (!btn) return;\n    const overlay = document.getElementById(OVERLAY_ID);\n    if (!btn.dataset.defaultLabel) btn.dataset.defaultLabel = btn.textContent;\n    if (loading) {\n      btn.disabled = true;\n      btn.innerHTML = '<span class=\"wiz-spinner\"><\/span> ' + TXT.preparing;\n      btn.style.opacity = \".8\";\n      if (overlay) overlay.style.display = \"flex\";\n    } else {\n      btn.disabled = false;\n      btn.textContent = btn.dataset.defaultLabel;\n      btn.style.opacity = \"1\";\n      if (overlay) overlay.style.display = \"none\";\n    }\n  }\n  function showThankYou() {\n    const card = shadow.querySelector(\".sw-card\");\n    if (!card) return;\n    card.innerHTML = `\n      <div style=\"text-align:center; padding:20px 0;\">\n        <div style=\"font-size:56px; margin-bottom:16px; color:#27703F;\">\u2713<\/div>\n        <h2 style=\"font-family:'Tinos',Georgia,serif; font-size:26px; font-weight:500; margin:0 0 12px; color:#0C1E14;\">${TXT.thanksTitle}<\/h2>\n        <p style=\"font-family:'Tinos',Georgia,serif; font-size:18px; color:#27703F; line-height:1.6; margin:0 0 24px;\">${TXT.thanksLine1}${TXT.thanksLine2 ? \"<br>\" + TXT.thanksLine2 : \"\"}<\/p>\n        <div style=\"display:flex; justify-content:center;\">\n          <div style=\"width:36px; height:36px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:wiz-spin 0.8s linear infinite;\"><\/div>\n        <\/div>\n      <\/div>`;\n  }\n  function getAnchors(cat) {\n    const r = RANGES[cat], o = ORIENTIERUNG[cat];\n    return [[0,r.min],[25,o.reduced],[50,o.base],[75,o.support],[100,r.max]];\n  }\n  function normToEuro(norm, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      if (norm <= a[i+1][0]) {\n        const t = (norm - a[i][0]) \/ (a[i+1][0] - a[i][0]);\n        return Math.round(a[i][1] + t * (a[i+1][1] - a[i][1]));\n      }\n    }\n    return a[a.length-1][1];\n  }\n  function euroToNorm(euro, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      const lo = a[i][1], hi = a[i+1][1];\n      if (euro <= hi) {\n        if (hi === lo) return a[i+1][0];\n        return a[i][0] + (euro - lo) \/ (hi - lo) * (a[i+1][0] - a[i][0]);\n      }\n    }\n    return 100;\n  }\n  function getMarkerDefs(cat) {\n    const o = ORIENTIERUNG[cat];\n    return [\n      { value: o.reduced, label: TXT.markerReduced, normPct: 25 },\n      { value: o.base,    label: TXT.markerBase,    normPct: 50 },\n      { value: o.support, label: TXT.markerSupport, normPct: 75 }\n    ];\n  }\n  function renderMarkers(personKey) {\n    const cat = state.category;\n    const person = getPerson(personKey);\n    const markers = getMarkerDefs(cat);\n    const container = $(`sw-markers-${personKey}`);\n    container.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker\" + (person.amount === m.value ? \" active\" : \"\");\n      div.style.left = m.normPct + \"%\";\n      div.innerHTML = `<div class=\"sw-marker-tick\"><\/div><div class=\"sw-marker-amount\">${m.value}\u20ac<\/div><div class=\"sw-marker-label\">${m.label}<\/div>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      container.appendChild(div);\n    });\n    const mobileContainer = $(`sw-markers-mobile-${personKey}`);\n    mobileContainer.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker-mobile\" + (person.amount === m.value ? \" active\" : \"\");\n      div.innerHTML = `<span class=\"sw-marker-mobile-label\">${m.label}<\/span><span class=\"sw-marker-mobile-amount\">${m.value}\u20ac<\/span>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      mobileContainer.appendChild(div);\n    });\n  }\n  function selectMarkerValue(personKey, value) {\n    const person = getPerson(personKey);\n    $(`sw-amount-${personKey}`).value = euroToNorm(value, state.category);\n    person.amount = value;\n    $(`sw-amountInput-${personKey}`).value = value;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromSlider(personKey) {\n    const person = getPerson(personKey);\n    const norm = Number($(`sw-amount-${personKey}`).value);\n    person.amount = normToEuro(norm, state.category);\n    $(`sw-amountInput-${personKey}`).value = person.amount;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromInput(personKey) {\n    const person = getPerson(personKey);\n    const r = RANGES[state.category];\n    let val = Number($(`sw-amountInput-${personKey}`).value);\n    if (isNaN(val)) val = r.min;\n    val = Math.min(r.max, Math.max(r.min, val));\n    person.amount = val;\n    $(`sw-amountInput-${personKey}`).value = val;\n    $(`sw-amount-${personKey}`).value = euroToNorm(val, state.category);\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function wireAmountControl(personKey) {\n    $(`sw-amount-${personKey}`).addEventListener(\"input\", () => updateAmountFromSlider(personKey));\n    $(`sw-amountInput-${personKey}`).addEventListener(\"input\", () => {\n      const v = Number($(`sw-amountInput-${personKey}`).value);\n      if (!isNaN(v)) { getPerson(personKey).amount = v; refreshSummary(); }\n    });\n    $(`sw-amountInput-${personKey}`).addEventListener(\"change\", () => updateAmountFromInput(personKey));\n  }\n  function applyRangeForForm() {\n    const cat = state.category;\n    const ori = ORIENTIERUNG[cat];\n    const hint = TXT.hintLong;\n    if (state.form === \"paar\") {\n      [\"p1\",\"p2\"].forEach(key => {\n        const person = getPerson(key);\n        person.amount = ori.base;\n        $(`sw-amount-${key}`).value = 50;\n        $(`sw-amountInput-${key}`).value = ori.base;\n      });\n      const p1name = state.persons.p1.vorname;\n      const p2name = state.persons.p2.vorname;\n      $(\"sw-amount-p1-title\").innerHTML = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-amount-p2-title\").innerHTML = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) +\n        ' <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">' + TXT.p2Badge + '<\/span>';\n      $(\"sw-summary-p1-label\").textContent = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-summary-p2-label\").textContent = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) + \" \" + TXT.p2Badge;\n      $(\"sw-rangeHint-paar\").textContent = hint;\n      renderMarkers(\"p1\"); renderMarkers(\"p2\");\n    } else {\n      const person = state.persons.solo;\n      person.amount = ori.base;\n      $(\"sw-amount-solo\").value = 50;\n      $(\"sw-amountInput-solo\").value = ori.base;\n      $(\"sw-rangeHint-solo\").textContent = hint;\n      renderMarkers(\"solo\");\n    }\n    refreshSummary();\n  }\n  \/\/ \u2500\u2500 Rabattlogik \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Zuerst wird der fixe App-Rabatt vom gewaehlten Betrag abgezogen, danach der\n  \/\/ prozentuale Rabatt auf den verbleibenden Betrag. Beide werden separat gezeigt.\n  function getPercentDiscountCandidate(person, isPaarP2) {\n    if (isPaarP2) return { value: DISCOUNT_PAAR_P2, label: TXT.discP2 };\n    const candidates = [];\n    if (isWiederholer(person)) candidates.push({ value: DISCOUNT_WIEDERHOLER, label: TXT.discWiederholer });\n    if (person.statusType === \"schueler\") candidates.push({ value: DISCOUNT_SCHUELER, label: TXT.discSchueler });\n    if (person.statusType === \"student\")  candidates.push({ value: DISCOUNT_STUDENT,  label: TXT.discStudent });\n    if (!candidates.length) return null;\n    return candidates.reduce((best, c) => c.value > best.value ? c : best, candidates[0]);\n  }\n  function getDiscounts(person, isPaarP2) {\n    const discounts = [];\n    let remaining = Math.round(person.amount);\n    if (isAppOnly()) {\n      const appDisc = Math.min(DISCOUNT_APP_FIXED, remaining);\n      discounts.push({ type: \"fixed\", value: DISCOUNT_APP_FIXED, label: TXT.discApp, amountEuro: appDisc });\n      remaining -= appDisc;\n    }\n    const pct = getPercentDiscountCandidate(person, isPaarP2);\n    if (pct) {\n      const pctDisc = Math.round(remaining * pct.value);\n      discounts.push({ type: \"pct\", value: pct.value, label: pct.label, amountEuro: pctDisc });\n      remaining -= pctDisc;\n    }\n    return { discounts, finalAmount: Math.max(0, remaining) };\n  }\n  function buildStatusOptionValue(person, isPaar) {\n    const vals = [];\n    if (isPaar) vals.push(STATUS_LABEL.paar);\n    if (isAppOnly()) vals.push(STATUS_LABEL.apponly);\n    if (isWiederholer(person)) vals.push(STATUS_LABEL.wiederholer);\n    if (person.statusType === \"schueler\") vals.push(STATUS_LABEL.schueler);\n    if (person.statusType === \"student\")  vals.push(STATUS_LABEL.student);\n    \/\/ Ecwid erwartet fuer Checkbox-Optionen ein Array, nicht einen kommaseparierten String\n    return vals;\n  }\n  function refreshSummary() {\n    if (state.form === \"paar\") refreshSummaryPaar();\n    else refreshSummarySolo();\n  }\n  function renderDiscountRows(containerId, discounts) {\n    const container = $(containerId);\n    container.innerHTML = \"\";\n    discounts.forEach(d => {\n      const row = document.createElement(\"div\");\n      row.className = \"sw-summary-row sw-summary-discount\";\n      const pctStr = d.type === \"fixed\" ? `\u2212${d.amountEuro}\u20ac` : `\u2212${Math.round(d.value * 100)}%`;\n      row.innerHTML = `<span>${d.label} (${pctStr})<\/span><span>\u2212${d.amountEuro}\u20ac<\/span>`;\n      container.appendChild(row);\n    });\n  }\n  function refreshSummarySolo() {\n    const p = state.persons.solo;\n    const { discounts, finalAmount } = getDiscounts(p, false);\n    $(\"sw-solo-chosen\").textContent = Math.round(p.amount) + \"\u20ac\";\n    renderDiscountRows(\"sw-solo-discounts\", discounts);\n    const shipLine = $(\"sw-shipping-line-solo\");\n    const shippingSolo = (hasPhysicalShipment(false) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingSolo ? \"flex\" : \"none\";\n    $(\"sw-solo-total\").textContent = finalAmount + shippingSolo;\n  }\n  function refreshSummaryPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    function fill(prefix, person, isPaarP2) {\n      const { discounts, finalAmount } = getDiscounts(person, isPaarP2);\n      $(`sw-${prefix}-chosen`).textContent = Math.round(person.amount) + \"\u20ac\";\n      renderDiscountRows(`sw-${prefix}-discounts`, discounts);\n      $(`sw-${prefix}-subtotal`).textContent = finalAmount + \"\u20ac\";\n      return finalAmount;\n    }\n    const f1 = fill(\"p1\", p1, false);\n    const f2 = fill(\"p2\", p2, true);\n    const shipLine = $(\"sw-shipping-line-paar\");\n    const shippingPaar = (hasPhysicalShipment(true) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingPaar ? \"flex\" : \"none\";\n    $(\"sw-paar-total\").textContent = f1 + f2 + shippingPaar;\n  }\n  function renderCountryList(filter) {\n    const list = $(\"sw-country-list\");\n    const q = (filter || \"\").toLowerCase().trim();\n    const filtered = q\n      ? getAllCountriesSorted().filter(c =>\n          c.name.toLowerCase().includes(q) ||\n          (c.aliases || []).some(a => a.includes(q))\n        )\n      : getAllCountriesSorted();\n    list.innerHTML = \"\";\n    if (!filtered.length) { list.innerHTML = '<div class=\"sw-country-empty\">' + TXT.noCountry + '<\/div>'; return; }\n    filtered.forEach(c => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-country-item\" + (state.country === c.code ? \" selected\" : \"\");\n      div.dataset.code = c.code;\n      div.innerHTML = `<span>${c.name}<\/span><span class=\"sw-country-item-cat\">${TXT.catBadge}${c.cat.replace(\"cat\",\"\")}<\/span>`;\n      div.addEventListener(\"click\", () => selectCountry(c.code, c.cat, c.name));\n      list.appendChild(div);\n    });\n  }\n  function selectCountry(code, cat, name) {\n    state.country  = code;\n    state.category = cat;\n    $(\"sw-country\").value = code;\n    $(\"sw-country-search\").value = name;\n    $(\"sw-country-list\").innerHTML = \"\";\n    const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[code];\n    let suffix = \"\";\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      suffix = exceptionLang\n        ? \" \" + TXT.catSuffixException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang)\n        : \" \" + TXT.catSuffixDigital;\n    }\n    $(\"sw-catText\").textContent = (TXT.catLabels[cat] || cat) + suffix;\n    \/\/ Ecwid wickelt in Russland keine Zahlungen ab. Wer Russland waehlt, wird\n    \/\/ deshalb auf die russische Anmeldeseite verwiesen - die laeuft ueber n8n\n    \/\/ und Tochka statt ueber den Shop. Der russische Wizard verweist umgekehrt\n    \/\/ zurueck, sobald dort ein anderes Land gewaehlt wird.\n    const nachRussland = (code === \"RU\");\n    $(\"sw-redirect-russia\").style.display = nachRussland ? \"block\" : \"none\";\n    $(\"sw-catInfo\").style.display         = nachRussland ? \"none\"  : \"block\";\n    setNextEnabled(\"sw-btn-country-next\", !nachRussland);\n    updateAppOnlyUI();\n  }\n  function ensureEcwidReady(timeoutMs = 12000) {\n    return new Promise((resolve, reject) => {\n      function isReady() {\n        return window.Ecwid && window.Ecwid.Cart &&\n               typeof window.Ecwid.Cart.addProduct === \"function\" &&\n               typeof window.Ecwid.Cart.clear === \"function\";\n      }\n      if (isReady()) return resolve(true);\n      let resolved = false;\n      function done() { if (!resolved) { resolved = true; setTimeout(() => resolve(true), 200); } }\n      if (window.Ecwid) { try { window.Ecwid.OnAPILoaded.add(done); } catch(e) {} }\n      const start = Date.now();\n      const t = setInterval(() => {\n        if (isReady()) { clearInterval(t); done(); }\n        else if (Date.now() - start > timeoutMs) {\n          clearInterval(t);\n          if (!resolved) { resolved = true; reject(new Error(fillPlaceholder(TXT.errEcwid, timeoutMs\/1000))); }\n        }\n      }, 200);\n    });\n  }\n  function clearCartAsync() { return new Promise(r => Ecwid.Cart.clear(() => r(true))); }\n  function addProductAsync(payload, timeoutMs = 4000) {\n    return new Promise((resolve, reject) => {\n      let done = false;\n      const t = setTimeout(() => { if (!done) { done = true; resolve({ product:null, cart:null, timedOut:true }); } }, timeoutMs);\n      Ecwid.Cart.addProduct(payload, function(success, product, cart, error) {\n        if (done) return;\n        done = true; clearTimeout(t);\n        if (success) resolve({ product, cart, timedOut:false });\n        else reject(new Error((error || TXT.errProduct) + \" | Payload: \" + JSON.stringify(payload)));\n      });\n    });\n  }\n  function goToCart() { window.location.href = SHOP_CART_URL; }\n  function buildN8nPayload() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const d1 = getDiscounts(p1, false);\n    const d2 = getDiscounts(p2, true);\n    return {\n      sprache: state.commLang, land: state.country, kategorie: state.category, appOnly: isAppOnly(),\n      person1: { vorname: p1.vorname, nachname: p1.nachname, email: p1.email },\n      person2: { vorname: p2.vorname, nachname: p2.nachname, email: p2.email },\n      betraege: {\n        person1: { gewaehlt: Math.round(p1.amount), rabatte: d1.discounts, endbetrag: d1.finalAmount },\n        person2: { gewaehlt: Math.round(p2.amount), rabatte: d2.discounts, endbetrag: d2.finalAmount },\n        gesamt: d1.finalAmount + d2.finalAmount\n      },\n      timestamp: new Date().toISOString()\n    };\n  }\n  async function sendToN8n(payload) {\n    if (!N8N_WEBHOOK_URL || N8N_WEBHOOK_URL.indexOf(\"HIER_\") === 0) {\n      throw new Error(\"Die n8n-Webhook-URL ist im Code noch nicht eingetragen.\");\n    }\n    let res;\n    try {\n      res = await fetch(N8N_WEBHOOK_URL, { method:\"POST\", headers:{\"Content-Type\":\"application\/json\"}, body:JSON.stringify(payload) });\n    } catch (e) {\n      throw new Error(TXT.errNetwork);\n    }\n    if (!res.ok) throw new Error(fillPlaceholder(TXT.errSubmit, res.status));\n    return true;\n  }\n  async function goCheckoutSolo() {\n    clearErrorIn(\"sw-error-amount-solo\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-solo\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-solo\", TXT.errLang);\n    const p = state.persons.solo;\n    const finalAmount = getDiscounts(p, false).finalAmount;\n    const participationProductId = getParticipationProductId(false);\n    setCheckoutLoading(\"sw-btn-checkout-solo\", true);\n    try {\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const statusValue = buildStatusOptionValue(p, false);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: finalAmount, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-solo\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-solo\", false);\n    }\n  }\n  async function goCheckoutPaar() {\n    clearErrorIn(\"sw-error-amount-paar\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-paar\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-paar\", TXT.errLang);\n    if (!validateDetailsPaar()) return showErrorIn(\"sw-error-amount-paar\", TXT.errPaarFields);\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const participationProductId = getParticipationProductId(true);\n    setCheckoutLoading(\"sw-btn-checkout-paar\", true);\n    try {\n      const payload = buildN8nPayload();\n      await sendToN8n(payload);\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const total = getDiscounts(p1, false).finalAmount + getDiscounts(p2, true).finalAmount;\n      const statusValue = buildStatusOptionValue(p1, true);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: total, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-paar\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-paar\", false);\n    }\n  }\n  function validateLangform() {\n    const ok = !!state.commLang && !!state.form && state.form !== \"gruppe\";\n    setNextEnabled(\"sw-btn-langform-next\", ok);\n  }\n  function validateDetailsSolo() {\n    const ok = !!$(\"sw-solo-status\").value;\n    setNextEnabled(\"sw-btn-details-solo-next\", ok);\n    return ok;\n  }\n  function validateDetailsPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const emailOk = s => \/\\S+@\\S+\\.\\S+\/.test(s || \"\");\n    const ok = !!(p1.vorname && p1.vorname.trim()) && !!(p1.nachname && p1.nachname.trim()) && emailOk(p1.email) &&\n               !!(p2.vorname && p2.vorname.trim()) && !!(p2.nachname && p2.nachname.trim()) && emailOk(p2.email);\n    setNextEnabled(\"sw-btn-details-paar-next\", ok);\n    return ok;\n  }\n  function bindNameFields(key) {\n    [\"vorname\",\"nachname\",\"email\"].forEach(f => {\n      $(`sw-${key}-${f}`).addEventListener(\"input\", e => {\n        getPerson(key)[f] = e.target.value;\n        validateDetailsPaar();\n      });\n    });\n  }\n  $(\"sw-btn-welcome-next\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-country-back\").addEventListener(\"click\", () => showStep(1));\n  $(\"sw-btn-country-next\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-country-search\").addEventListener(\"input\",  e => renderCountryList(e.target.value));\n  $(\"sw-country-search\").addEventListener(\"focus\",  () => renderCountryList($(\"sw-country-search\").value));\n  shadow.addEventListener(\"click\", e => {\n    if (!e.target.closest(\"#sw-country-list\") && !e.target.closest(\"#sw-country-search\")) {\n      $(\"sw-country-list\").innerHTML = \"\";\n    }\n  });\n  $(\"sw-commLang\").addEventListener(\"change\", e => {\n    state.commLang = e.target.value;\n    validateLangform();\n    updateAppOnlyUI();\n    refreshSummary();\n  });\n  shadow.querySelectorAll(\".sw-choice-card\").forEach(card => {\n    card.addEventListener(\"click\", () => {\n      state.form = card.dataset.form;\n      shadow.querySelectorAll(\".sw-choice-card\").forEach(c => c.classList.toggle(\"active\", c === card));\n      const isGruppe = state.form === \"gruppe\";\n      $(\"sw-gruppe-note\").style.display = isGruppe ? \"block\" : \"none\";\n      $(\"sw-btn-langform-next\").style.display   = isGruppe ? \"none\" : \"inline-block\";\n      $(\"sw-btn-gruppe-redirect\").style.display = isGruppe ? \"inline-block\" : \"none\";\n      clearErrorIn(\"sw-error-langform\");\n      validateLangform();\n    });\n  });\n  $(\"sw-btn-gruppe-redirect\").addEventListener(\"click\", () => { window.location.href = getGroupRedirectUrl(); });\n  $(\"sw-btn-langform-back\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-langform-next\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-details-solo-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-solo-status\").addEventListener(\"change\", e => {\n    const val = e.target.value;\n    const person = state.persons.solo;\n    person.statusType  = val;\n    person.wiederholer = val === \"wiederholer\";\n    clearErrorIn(\"sw-error-details-solo\");\n    validateDetailsSolo();\n  });\n  $(\"sw-btn-details-solo-next\").addEventListener(\"click\", () => {\n    if (validateDetailsSolo()) { applyRangeForForm(); showStep(5); }\n    else showErrorIn(\"sw-error-details-solo\", TXT.errSelectFirst);\n  });\n  $(\"sw-btn-details-paar-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-btn-details-paar-next\").addEventListener(\"click\", () => {\n    if (validateDetailsPaar()) { applyRangeForForm(); showStep(5); }\n  });\n  $(\"sw-btn-amount-solo-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-amount-paar-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-checkout-solo\").addEventListener(\"click\", goCheckoutSolo);\n  $(\"sw-btn-checkout-paar\").addEventListener(\"click\", goCheckoutPaar);\n  bindNameFields(\"p1\");\n  bindNameFields(\"p2\");\n  wireAmountControl(\"solo\");\n  wireAmountControl(\"p1\");\n  wireAmountControl(\"p2\");\n  showStep(1);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fac3347 e-flex e-con-boxed e-con e-parent\" data-id=\"fac3347\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-82af657 elementor-widget elementor-widget-html\" data-id=\"82af657\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Tinos:ital,wght@0,400;0,700;1,400&display=swap\" rel=\"stylesheet\">\n<style>\n  .ecwid-ProductBrowser,\n  .ecwid-productbrowser,\n  div[id^=\"my-store\"],\n  .ecwid:not(#sw-host-ko) {\n    visibility: hidden !important;\n    height: 0 !important;\n    max-height: 0 !important;\n    overflow: hidden !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    position: absolute !important;\n    pointer-events: none !important;\n  }\n<\/style>\n<div id=\"sw-overlay-ko\" style=\"display:none; position:fixed; inset:0; background:rgba(245,250,246,0.92); z-index:99999; flex-direction:column; align-items:center; justify-content:center; gap:20px;\">\n  <div style=\"width:52px; height:52px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:sw-spin-ko 0.8s linear infinite;\"><\/div>\n  <div style=\"font-family:'Tinos',Georgia,serif; font-size:22px; color:#27703F;\">\uacb0\uc81c \ud654\uba74\uc744 \ubd88\ub7ec\uc624\ub294 \uc911\uc785\ub2c8\ub2e4. \uc7a0\uc2dc\ub9cc \uae30\ub2e4\ub824 \uc8fc\uc138\uc694.<\/div>\n<\/div>\n<style>\n  @keyframes sw-spin-ko { to { transform: rotate(360deg); } }\n<\/style>\n<div id=\"sw-host-ko\"><\/div>\n<script>\n(function () {\n\n  \/\/ \u2500\u2500 Sprach-Guard: Skript bricht sofort ab, wenn die URL nicht zu KO passt \u2500\u2500\n  const _pathMatch = window.location.pathname.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n  const _pageLang = _pathMatch ? _pathMatch[1] : \"de\";\n  if (_pageLang !== \"ko\") { \n    document.getElementById(\"sw-host-ko\")?.remove();\n    document.getElementById(\"sw-overlay-ko\")?.remove();\n    return; \n  }\n\n  const OVERLAY_ID    = \"sw-overlay-ko\";\n  const SHOP_CART_URL = \"https:\/\/spiritual-activity.org\/ko\/store\/cart\";\n  const N8N_WEBHOOK_URL = \"https:\/\/n8n.spiritual-activity.org\/webhook\/registration-be\";\n  function getGroupRedirectUrl() {\n    const path = window.location.pathname;\n    \/\/ Erkennt Sprachpraefixe wie \/en\/, \/es\/, \/it\/, \/ru\/ am Anfang des Pfads.\n    \/\/ Deutsch ist die Standardsprache ohne Praefix.\n    const match = path.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n    const langPrefix = (match && match[1] !== \"de\") ? \"\/\" + match[1] : \"\";\n    return \"https:\/\/spiritual-activity.org\" + langPrefix + \"\/gruppen-anmeldung\";\n  }\n  const PRODUCTS = {\n    cat1: 864374030,\n    cat2: 844860366,\n    cat3: 844907264,\n    cat4: 844907265\n  };\n\n  \/\/ Versandfreie Digital-Produkte fuer alle Faelle, in denen nichts verschickt\n  \/\/ wird: rein digitale Teilnahme und Wiederholer (kein neues Kartenset).\n  const PRODUCTS_APPONLY = {\n    cat1: 863272251,\n    cat2: 863265753,\n    cat3: 863272252,\n    cat4: 863265754\n  };\n  const RANGES = {\n    cat1: { min: 160, max: 800 },\n    cat2: { min: 105, max: 700 },\n    cat3: { min:  75, max: 600 },\n    cat4: { min:  45, max: 500 }\n  };\n  const ORIENTIERUNG = {\n    cat1: { reduced: 160, base: 360, support: 580 },\n    cat2: { reduced: 105, base: 240, support: 460 },\n    cat3: { reduced:  75, base: 160, support: 340 },\n    cat4: { reduced:  45, base: 105, support: 220 }\n  };\n  const DISCOUNT_WIEDERHOLER = 0.30;\n  const DISCOUNT_SCHUELER    = 0.50;\n  const DISCOUNT_STUDENT     = 0.25;\n  const DISCOUNT_PAAR_P2     = 0.50;\n  const DISCOUNT_APP_FIXED   = 35;\n  \/\/ Versandpauschale ausserhalb EU+CH. Ecwid kassiert sie, der Wizard rechnet sie in die Anzeige-Summe ein.\n  const SHIPPING_COST   = 15;\n  \/\/ Sprachschluessel bleiben deutsch \u2013 sie sind die Werte im Ecwid-Shop.\n  const APP_ONLY_LANGS = new Set([\"Arabisch\",\"Farsi\",\"Ukrainisch\",\"Bulgarisch\",\"Franz\u00f6sisch\"]);\n  const APP_ONLY_CATEGORY_EXCEPTION_LANG = { CN: \"Chinesisch\" };\n  const EU_PLUS_CH = new Set([\n    \"AT\",\"BE\",\"BG\",\"CY\",\"CZ\",\"DE\",\"DK\",\"EE\",\"ES\",\"FI\",\"FR\",\"GR\",\"HR\",\n    \"HU\",\"IE\",\"IT\",\"LT\",\"LU\",\"LV\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SE\",\"SI\",\"SK\",\"CH\"\n  ]);\n  \/\/ Ersetzt den Platzhalter in Klammern (z.B. [Code], [X], [\ucf54\ub4dc]) durch den Wert\n  function fillPlaceholder(text, value) {\n    return String(text).replace(\/[\\[\uff3b][^\\]\uff3d]*[\\]\uff3d]\/, value);\n  }\n  function needsShipping(countryCode) {\n    return countryCode && !EU_PLUS_CH.has(countryCode);\n  }\n  \/\/ \u2500\u2500 Uebersetzte Texte \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const TXT = {\n      \"catBadge\": \"\uce74\ud14c\uace0\ub9ac \",\n      \"catLabels\": {\n          \"cat1\": \"\ucc38\uac00\ube44 \uce74\ud14c\uace0\ub9ac 1\",\n          \"cat2\": \"\ucc38\uac00\ube44 \uce74\ud14c\uace0\ub9ac 2\",\n          \"cat3\": \"\ucc38\uac00\ube44 \uce74\ud14c\uace0\ub9ac 3\",\n          \"cat4\": \"\ucc38\uac00\ube44 \uce74\ud14c\uace0\ub9ac 4\"\n      },\n      \"catSuffixDigital\": \"\u2013 \ub514\uc9c0\ud138 \ucc38\uac00\ub9cc \uac00\ub2a5\",\n      \"catSuffixException\": \"\u2013 \ucc38\uac00 \uc5b8\uc5b4\uac00 {X}\uc778 \uacbd\uc6b0\uc5d0\ub9cc \ubc30\uc1a1 \uac00\ub2a5\ud558\uba70, \uadf8 \uc678\uc5d0\ub294 \ub514\uc9c0\ud138 \ucc38\uac00\ub9cc \uac00\ub2a5\",\n      \"noCountry\": \"\uad6d\uac00\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4\",\n      \"markerReduced\": \"\ud560\uc778 \ucc38\uac00\ube44\",\n      \"markerBase\": \"\uae30\ubcf8 \ucc38\uac00\ube44\",\n      \"markerSupport\": \"\ud6c4\uc6d0 \ucc38\uac00\ube44\",\n      \"hintLong\": \"\ud68c\uc6d0\ub2d8\uaed8 \uc801\ud569\ud55c \ucc38\uac00\ube44\ub97c \uc120\ud0dd\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud6c4\uc6d0 \ucc38\uac00\ube44\ub97c \uc120\ud0dd\ud558\uc2dc\uba74 \uacbd\uc81c\uc801 \uc5ec\uac74\uc774 \uc5b4\ub824\uc6b4 \ubd84\ub4e4\uc758 \ucc38\uc5ec\ub97c \uac00\ub2a5\ud558\uac8c \ud558\uace0, \uc774 \ud504\ub85c\uc81d\ud2b8\ub97c \uc138\uc0c1\uc5d0 \ub354 \ub110\ub9ac \uc54c\ub9ac\ub294 \ub370 \ub3c4\uc6c0\uc744 \uc8fc\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\",\n      \"hintPaar\": \"\uac01\uc790 \uc790\uc2e0\uc758 \ucc38\uac00\ube44\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4. \ub450 \ubc88\uc9f8 \ubd84\uc758 \ucc38\uac00\ube44\ub294 \uc790\ub3d9\uc73c\ub85c 50% \ud560\uc778\uc774 \uc801\uc6a9\ub429\ub2c8\ub2e4.\",\n      \"person1\": \"\ucc38\uac00\uc790 1\",\n      \"person2\": \"\ucc38\uac00\uc790 2\",\n      \"p2Badge\": \"(\u221250%)\",\n      \"discWiederholer\": \"\uc7ac\uc218\uac15\uc790\",\n      \"discSchueler\": \"\ud559\uc0dd (\ucd08\u00b7\uc911\u00b7\uace0)\",\n      \"discStudent\": \"\uc9c1\uc5c5 \uad50\uc721 \/ \ub300\ud559\",\n      \"discP2\": \"\ucc38\uac00\uc790 2 \ud560\uc778\",\n      \"discApp\": \"\ub514\uc9c0\ud138 \ucc38\uac00\",\n      \"reasonRegion\": \"\ud68c\uc6d0\ub2d8\uc758 \uc9c0\uc5ed\uc73c\ub85c\ub294 \ubc30\uc1a1\uc774 \ubd88\uac00\ub2a5\ud569\ub2c8\ub2e4. \ub514\uc9c0\ud138 \ucc38\uac00\ub97c \uc120\ud0dd\ud558\uc168\uc2b5\ub2c8\ub2e4. \ud560\uc778\uc740 \uacb0\uc81c \ub2e8\uacc4\uc5d0\uc11c \uc790\ub3d9\uc73c\ub85c \ubc18\uc601\ub429\ub2c8\ub2e4.\",\n      \"reasonRussian\": \"\ub7ec\uc2dc\uc544 \uc678 \uc9c0\uc5ed\uc758 \ub7ec\uc2dc\uc544\uc5b4 \uc0ac\uc6a9\uc790\uc5d0\uac8c\ub294 \ub514\uc9c0\ud138 \ubc84\uc804\ub9cc \uc81c\uacf5\ub429\ub2c8\ub2e4. \ud560\uc778\uc740 \uacb0\uc81c \ub2e8\uacc4\uc5d0\uc11c \uc790\ub3d9\uc73c\ub85c \ubc18\uc601\ub429\ub2c8\ub2e4.\",\n      \"reasonLanguage\": \"\uc774 \uc5b8\uc5b4\ub294 \ub514\uc9c0\ud138 \ubc84\uc804\ub9cc \uc81c\uacf5\ub429\ub2c8\ub2e4. \ud560\uc778\uc740 \uacb0\uc81c \ub2e8\uacc4\uc5d0\uc11c \uc790\ub3d9\uc73c\ub85c \ubc18\uc601\ub429\ub2c8\ub2e4.\",\n      \"reasonException\": \"\ud68c\uc6d0\ub2d8\uc758 \uc9c0\uc5ed\uc5d0\uc11c\ub294 \ucc38\uac00 \uc5b8\uc5b4\uac00 {X}\uc778 \uacbd\uc6b0\uc5d0\ub9cc \ubc30\uc1a1\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4. \ub514\uc9c0\ud138 \ucc38\uac00\ub97c \uc120\ud0dd\ud558\uc168\uc2b5\ub2c8\ub2e4. \ud560\uc778\uc740 \uacb0\uc81c \ub2e8\uacc4\uc5d0\uc11c \uc790\ub3d9\uc73c\ub85c \ubc18\uc601\ub429\ub2c8\ub2e4.\",\n      \"thanksTitle\": \"\uac10\uc0ac\ud569\ub2c8\ub2e4!\",\n      \"thanksLine1\": \"\uacb0\uc81c \ud654\uba74\uc744 \ubd88\ub7ec\uc624\ub294 \uc911\uc785\ub2c8\ub2e4. \uc7a0\uc2dc\ub9cc \uae30\ub2e4\ub824 \uc8fc\uc138\uc694.\",\n      \"thanksLine2\": \"\",\n      \"preparing\": \"\uc900\ube44 \uc911\u2026\",\n      \"errSelectFirst\": \"\uba3c\uc800 \uc120\ud0dd\ud574 \uc8fc\uc138\uc694.\",\n      \"errPaarFields\": \"\uc774\uc804\uc73c\ub85c \ub3cc\uc544\uac00 \ub450 \ubd84 \ubaa8\ub450\uc758 \ud56d\ubaa9\uc744 \uc785\ub825\ud574 \uc8fc\uc138\uc694.\",\n      \"errCountry\": \"\uba3c\uc800 \uad6d\uac00\ub97c \uc120\ud0dd\ud574 \uc8fc\uc138\uc694.\",\n      \"errLang\": \"\ucc38\uac00 \uc5b8\uc5b4\ub97c \uc120\ud0dd\ud574 \uc8fc\uc138\uc694.\",\n      \"errNetwork\": \"\ub370\uc774\ud130\ub97c \uc804\uc1a1\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc778\ud130\ub137 \uc5f0\uacb0\uc744 \ud655\uc778\ud574 \uc8fc\uc138\uc694.\",\n      \"errSubmit\": \"\uc804\uc1a1\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4 (\uc624\ub958 [\ucf54\ub4dc]). \ub2e4\uc2dc \uc2dc\ub3c4\ud574 \uc8fc\uc138\uc694.\",\n      \"errProduct\": \"\uc81c\ud488\uc744 \ucd94\uac00\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4\",\n      \"errEcwid\": \"Ecwid \uc7a5\ubc14\uad6c\ub2c8 API\uac00 [X]\ucd08 \ud6c4\uc5d0\ub3c4 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.\"\n  };\n  \/\/ Anzeigename der Teilnahmesprache (Schluessel = Ecwid-Wert, deutsch)\n  const LANG_DISPLAY = {\n      \"Deutsch\": \"\ub3c5\uc77c\uc5b4\",\n      \"Englisch\": \"\uc601\uc5b4\",\n      \"Spanisch\": \"\uc2a4\ud398\uc778\uc5b4\",\n      \"Franz\u00f6sisch\": \"\ud504\ub791\uc2a4\uc5b4\",\n      \"Italienisch\": \"\uc774\ud0c8\ub9ac\uc544\uc5b4\",\n      \"Portugiesisch\": \"\ud3ec\ub974\ud22c\uac08\uc5b4\",\n      \"Arabisch\": \"\uc544\ub78d\uc5b4\",\n      \"Hebr\u00e4isch\": \"\ud788\ube0c\ub9ac\uc5b4\",\n      \"Farsi\": \"\ud398\ub974\uc2dc\uc544\uc5b4\",\n      \"Georgisch\": \"\uc870\uc9c0\uc544\uc5b4\",\n      \"Ukrainisch\": \"\uc6b0\ud06c\ub77c\uc774\ub098\uc5b4\",\n      \"Niederl\u00e4ndisch\": \"\ub124\ub35c\ub780\ub4dc\uc5b4\",\n      \"T\u00fcrkisch\": \"\ud130\ud0a4\uc5b4\",\n      \"Russisch\": \"\ub7ec\uc2dc\uc544\uc5b4\",\n      \"Chinesisch\": \"\uc911\uad6d\uc5b4\",\n      \"Japanisch\": \"\uc77c\ubcf8\uc5b4\",\n      \"Koreanisch\": \"\ud55c\uad6d\uc5b4\"\n  };\n  \/\/ Feste Laendernamen in der Landessprache (aus CLDR), damit die Liste in\n  \/\/ jedem Browser identisch ist \u2013 unabhaengig von der Intl-Datenlage.\n  const COUNTRY_NAMES = {\n      \"AD\": \"\uc548\ub3c4\ub77c\",\n      \"AE\": \"\uc544\ub78d\uc5d0\ubbf8\ub9ac\ud2b8\",\n      \"AF\": \"\uc544\ud504\uac00\ub2c8\uc2a4\ud0c4\",\n      \"AG\": \"\uc564\ud2f0\uac00 \ubc14\ubd80\ub2e4\",\n      \"AL\": \"\uc54c\ubc14\ub2c8\uc544\",\n      \"AM\": \"\uc544\ub974\uba54\ub2c8\uc544\",\n      \"AO\": \"\uc559\uace8\ub77c\",\n      \"AR\": \"\uc544\ub974\ud5e8\ud2f0\ub098\",\n      \"AT\": \"\uc624\uc2a4\ud2b8\ub9ac\uc544\",\n      \"AU\": \"\uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544\",\n      \"AW\": \"\uc544\ub8e8\ubc14\",\n      \"AZ\": \"\uc544\uc81c\ub974\ubc14\uc774\uc794\",\n      \"BA\": \"\ubcf4\uc2a4\ub2c8\uc544 \ud5e4\ub974\uccb4\uace0\ube44\ub098\",\n      \"BB\": \"\ubc14\ubca0\uc774\ub3c4\uc2a4\",\n      \"BD\": \"\ubc29\uae00\ub77c\ub370\uc2dc\",\n      \"BE\": \"\ubca8\uae30\uc5d0\",\n      \"BF\": \"\ubd80\ub974\ud0a4\ub098\ud30c\uc18c\",\n      \"BG\": \"\ubd88\uac00\ub9ac\uc544\",\n      \"BH\": \"\ubc14\ub808\uc778\",\n      \"BI\": \"\ubd80\ub8ec\ub514\",\n      \"BJ\": \"\ubca0\ub0c9\",\n      \"BN\": \"\ube0c\ub8e8\ub098\uc774\",\n      \"BO\": \"\ubcfc\ub9ac\ube44\uc544\",\n      \"BR\": \"\ube0c\ub77c\uc9c8\",\n      \"BS\": \"\ubc14\ud558\ub9c8\",\n      \"BT\": \"\ubd80\ud0c4\",\n      \"BW\": \"\ubcf4\uce20\uc640\ub098\",\n      \"BY\": \"\ubca8\ub77c\ub8e8\uc2a4\",\n      \"BZ\": \"\ubca8\ub9ac\uc988\",\n      \"CA\": \"\uce90\ub098\ub2e4\",\n      \"CD\": \"\ucf69\uace0-\ud0a8\uc0e4\uc0ac\",\n      \"CF\": \"\uc911\uc559 \uc544\ud504\ub9ac\uce74 \uacf5\ud654\uad6d\",\n      \"CG\": \"\ucf69\uace0-\ube0c\ub77c\uc790\ube4c\",\n      \"CH\": \"\uc2a4\uc704\uc2a4\",\n      \"CI\": \"\ucf54\ud2b8\ub514\ubd80\uc544\ub974\",\n      \"CL\": \"\uce60\ub808\",\n      \"CM\": \"\uce74\uba54\ub8ec\",\n      \"CN\": \"\uc911\uad6d\",\n      \"CO\": \"\ucf5c\ub86c\ube44\uc544\",\n      \"CR\": \"\ucf54\uc2a4\ud0c0\ub9ac\uce74\",\n      \"CV\": \"\uce74\ubcf4\ubca0\ub974\ub370\",\n      \"CY\": \"\ud0a4\ud504\ub85c\uc2a4\",\n      \"CZ\": \"\uccb4\ucf54\",\n      \"DE\": \"\ub3c5\uc77c\",\n      \"DJ\": \"\uc9c0\ubd80\ud2f0\",\n      \"DK\": \"\ub374\ub9c8\ud06c\",\n      \"DM\": \"\ub3c4\ubbf8\ub2c8\uce74\",\n      \"DO\": \"\ub3c4\ubbf8\ub2c8\uce74 \uacf5\ud654\uad6d\",\n      \"DZ\": \"\uc54c\uc81c\ub9ac\",\n      \"EC\": \"\uc5d0\ucf70\ub3c4\ub974\",\n      \"EE\": \"\uc5d0\uc2a4\ud1a0\ub2c8\uc544\",\n      \"EG\": \"\uc774\uc9d1\ud2b8\",\n      \"ES\": \"\uc2a4\ud398\uc778\",\n      \"ET\": \"\uc5d0\ud2f0\uc624\ud53c\uc544\",\n      \"FI\": \"\ud540\ub780\ub4dc\",\n      \"FJ\": \"\ud53c\uc9c0\",\n      \"FM\": \"\ubbf8\ud06c\ub85c\ub124\uc2dc\uc544\",\n      \"FR\": \"\ud504\ub791\uc2a4\",\n      \"GA\": \"\uac00\ubd09\",\n      \"GB\": \"\uc601\uad6d\",\n      \"GB-SCT\": \"\uc2a4\ucf54\ud2c0\ub79c\ub4dc\",\n      \"GD\": \"\uadf8\ub808\ub098\ub2e4\",\n      \"GE\": \"\uc870\uc9c0\uc544\",\n      \"GH\": \"\uac00\ub098\",\n      \"GM\": \"\uac10\ube44\uc544\",\n      \"GN\": \"\uae30\ub2c8\",\n      \"GQ\": \"\uc801\ub3c4 \uae30\ub2c8\",\n      \"GR\": \"\uadf8\ub9ac\uc2a4\",\n      \"GT\": \"\uacfc\ud14c\ub9d0\ub77c\",\n      \"GW\": \"\uae30\ub2c8\ube44\uc0ac\uc6b0\",\n      \"GY\": \"\uac00\uc774\uc544\ub098\",\n      \"HK\": \"\ud64d\ucf69\",\n      \"HN\": \"\uc628\ub450\ub77c\uc2a4\",\n      \"HR\": \"\ud06c\ub85c\uc544\ud2f0\uc544\",\n      \"HT\": \"\uc544\uc774\ud2f0\",\n      \"HU\": \"\ud5dd\uac00\ub9ac\",\n      \"ID\": \"\uc778\ub3c4\ub124\uc2dc\uc544\",\n      \"IE\": \"\uc544\uc77c\ub79c\ub4dc\",\n      \"IL\": \"\uc774\uc2a4\ub77c\uc5d8\",\n      \"IN\": \"\uc778\ub3c4\",\n      \"IQ\": \"\uc774\ub77c\ud06c\",\n      \"IR\": \"\uc774\ub780\",\n      \"IS\": \"\uc544\uc774\uc2ac\ub780\ub4dc\",\n      \"IT\": \"\uc774\ud0c8\ub9ac\uc544\",\n      \"JM\": \"\uc790\uba54\uc774\uce74\",\n      \"JO\": \"\uc694\ub974\ub2e8\",\n      \"JP\": \"\uc77c\ubcf8\",\n      \"KE\": \"\ucf00\ub0d0\",\n      \"KG\": \"\ud0a4\ub974\uae30\uc2a4\uc2a4\ud0c4\",\n      \"KH\": \"\uce84\ubcf4\ub514\uc544\",\n      \"KI\": \"\ud0a4\ub9ac\ubc14\uc2dc\",\n      \"KM\": \"\ucf54\ubaa8\ub85c\",\n      \"KN\": \"\uc138\uc778\ud2b8\ud0a4\uce20 \ub124\ube44\uc2a4\",\n      \"KR\": \"\ub300\ud55c\ubbfc\uad6d\",\n      \"KW\": \"\ucfe0\uc6e8\uc774\ud2b8\",\n      \"KZ\": \"\uce74\uc790\ud750\uc2a4\ud0c4\",\n      \"LA\": \"\ub77c\uc624\uc2a4\",\n      \"LB\": \"\ub808\ubc14\ub17c\",\n      \"LC\": \"\uc138\uc778\ud2b8\ub8e8\uc2dc\uc544\",\n      \"LI\": \"\ub9ac\ud788\ud150\uc288\ud0c0\uc778\",\n      \"LK\": \"\uc2a4\ub9ac\ub791\uce74\",\n      \"LR\": \"\ub77c\uc774\ubca0\ub9ac\uc544\",\n      \"LS\": \"\ub808\uc18c\ud1a0\",\n      \"LT\": \"\ub9ac\ud22c\uc544\ub2c8\uc544\",\n      \"LU\": \"\ub8e9\uc148\ubd80\ub974\ud06c\",\n      \"LV\": \"\ub77c\ud2b8\ube44\uc544\",\n      \"LY\": \"\ub9ac\ube44\uc544\",\n      \"MA\": \"\ubaa8\ub85c\ucf54\",\n      \"MD\": \"\ubab0\ub3c4\ubc14\",\n      \"ME\": \"\ubaac\ud14c\ub124\uadf8\ub85c\",\n      \"MG\": \"\ub9c8\ub2e4\uac00\uc2a4\uce74\ub974\",\n      \"MH\": \"\ub9c8\uc15c \uc81c\ub3c4\",\n      \"MK\": \"\ubd81\ub9c8\ucf00\ub3c4\ub2c8\uc544\",\n      \"ML\": \"\ub9d0\ub9ac\",\n      \"MM\": \"\ubbf8\uc580\ub9c8\",\n      \"MN\": \"\ubabd\uace8\",\n      \"MO\": \"\ub9c8\uce74\uc624\",\n      \"MR\": \"\ubaa8\ub9ac\ud0c0\ub2c8\",\n      \"MT\": \"\ubab0\ud0c0\",\n      \"MU\": \"\ubaa8\ub9ac\uc154\uc2a4\",\n      \"MV\": \"\ubab0\ub514\ube0c\",\n      \"MW\": \"\ub9d0\ub77c\uc704\",\n      \"MX\": \"\uba55\uc2dc\ucf54\",\n      \"MY\": \"\ub9d0\ub808\uc774\uc2dc\uc544\",\n      \"MZ\": \"\ubaa8\uc7a0\ube44\ud06c\",\n      \"NA\": \"\ub098\ubbf8\ube44\uc544\",\n      \"NE\": \"\ub2c8\uc81c\ub974\",\n      \"NG\": \"\ub098\uc774\uc9c0\ub9ac\uc544\",\n      \"NI\": \"\ub2c8\uce74\ub77c\uacfc\",\n      \"NL\": \"\ub124\ub35c\ub780\ub4dc\",\n      \"NO\": \"\ub178\ub974\uc6e8\uc774\",\n      \"NP\": \"\ub124\ud314\",\n      \"NR\": \"\ub098\uc6b0\ub8e8\",\n      \"NZ\": \"\ub274\uc9c8\ub79c\ub4dc\",\n      \"OM\": \"\uc624\ub9cc\",\n      \"PA\": \"\ud30c\ub098\ub9c8\",\n      \"PE\": \"\ud398\ub8e8\",\n      \"PG\": \"\ud30c\ud478\uc544\ub274\uae30\ub2c8\",\n      \"PH\": \"\ud544\ub9ac\ud540\",\n      \"PK\": \"\ud30c\ud0a4\uc2a4\ud0c4\",\n      \"PL\": \"\ud3f4\ub780\ub4dc\",\n      \"PR\": \"\ud478\uc5d0\ub974\ud1a0\ub9ac\ucf54\",\n      \"PS\": \"\ud314\ub808\uc2a4\ud0c0\uc778 \uc9c0\uad6c\",\n      \"PT\": \"\ud3ec\ub974\ud22c\uac08\",\n      \"PW\": \"\ud314\ub77c\uc6b0\",\n      \"PY\": \"\ud30c\ub77c\uacfc\uc774\",\n      \"QA\": \"\uce74\ud0c0\ub974\",\n      \"RO\": \"\ub8e8\ub9c8\ub2c8\uc544\",\n      \"RS\": \"\uc138\ub974\ube44\uc544\",\n      \"RU\": \"\ub7ec\uc2dc\uc544\",\n      \"RW\": \"\ub974\uc644\ub2e4\",\n      \"SA\": \"\uc0ac\uc6b0\ub514\uc544\ub77c\ube44\uc544\",\n      \"SB\": \"\uc194\ub85c\ubaac \uc81c\ub3c4\",\n      \"SC\": \"\uc138\uc774\uc178\",\n      \"SD\": \"\uc218\ub2e8\",\n      \"SE\": \"\uc2a4\uc6e8\ub374\",\n      \"SG\": \"\uc2f1\uac00\ud3ec\ub974\",\n      \"SI\": \"\uc2ac\ub85c\ubca0\ub2c8\uc544\",\n      \"SK\": \"\uc2ac\ub85c\ubc14\ud0a4\uc544\",\n      \"SL\": \"\uc2dc\uc5d0\ub77c\ub9ac\uc628\",\n      \"SM\": \"\uc0b0\ub9c8\ub9ac\ub178\",\n      \"SN\": \"\uc138\ub124\uac08\",\n      \"SO\": \"\uc18c\ub9d0\ub9ac\uc544\",\n      \"SR\": \"\uc218\ub9ac\ub0a8\",\n      \"SS\": \"\ub0a8\uc218\ub2e8\",\n      \"ST\": \"\uc0c1\ud22c\uba54 \ud504\ub9b0\uc2dc\ud398\",\n      \"SV\": \"\uc5d8\uc0b4\ubc14\ub3c4\ub974\",\n      \"SZ\": \"\uc5d0\uc2a4\uc640\ud2f0\ub2c8\",\n      \"TD\": \"\ucc28\ub4dc\",\n      \"TG\": \"\ud1a0\uace0\",\n      \"TH\": \"\ud0dc\uad6d\",\n      \"TJ\": \"\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4\",\n      \"TL\": \"\ub3d9\ud2f0\ubaa8\ub974\",\n      \"TM\": \"\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4\",\n      \"TN\": \"\ud280\ub2c8\uc9c0\",\n      \"TO\": \"\ud1b5\uac00\",\n      \"TR\": \"\ud280\ub974\ud0a4\uc608\",\n      \"TT\": \"\ud2b8\ub9ac\ub2c8\ub2e4\ub4dc \ud1a0\ubc14\uace0\",\n      \"TV\": \"\ud22c\ubc1c\ub8e8\",\n      \"TW\": \"\ub300\ub9cc\",\n      \"TZ\": \"\ud0c4\uc790\ub2c8\uc544\",\n      \"UA\": \"\uc6b0\ud06c\ub77c\uc774\ub098\",\n      \"UG\": \"\uc6b0\uac04\ub2e4\",\n      \"US\": \"\ubbf8\uad6d\",\n      \"UY\": \"\uc6b0\ub8e8\uacfc\uc774\",\n      \"UZ\": \"\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4\",\n      \"VC\": \"\uc138\uc778\ud2b8\ube48\uc13c\ud2b8\uadf8\ub808\ub098\ub518\",\n      \"VE\": \"\ubca0\ub124\uc218\uc5d8\ub77c\",\n      \"VN\": \"\ubca0\ud2b8\ub0a8\",\n      \"VU\": \"\ubc14\ub204\uc544\ud22c\",\n      \"WS\": \"\uc0ac\ubaa8\uc544\",\n      \"XK\": \"\ucf54\uc18c\ubcf4\",\n      \"YE\": \"\uc608\uba58\",\n      \"ZA\": \"\ub0a8\uc544\ud504\ub9ac\uce74\",\n      \"ZM\": \"\uc7a0\ube44\uc544\",\n      \"ZW\": \"\uc9d0\ubc14\ube0c\uc6e8\"\n  };\n\n  \/\/ \u2500\u2500 Zusaetzliche Suchbegriffe (Aliasse) je Land \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Beeinflusst NUR die Suche, nicht den angezeigten Namen. Alles klein schreiben.\n  \/\/ Wichtig fuer KO: lateinische Schreibweisen, damit die Suche auch mit\n  \/\/ umgeschalteter Tastatur funktioniert.\n  const COUNTRY_SEARCH_ALIASES = {\n      \"US\": [\"\ubbf8\uad6d\", \"\uc544\uba54\ub9ac\uce74\", \"usa\", \"america\", \"united states of america\", \"united states\"],\n      \"GB\": [\"\uc601\uad6d\", \"\uc789\uae00\ub79c\ub4dc\", \"uk\", \"england\", \"britain\", \"great britain\", \"united kingdom\"],\n      \"GB-SCT\": [\"\uc2a4\ucf54\ud2c0\ub79c\ub4dc\", \"scotland\"],\n      \"KR\": [\"\ud55c\uad6d\", \"\ub300\ud55c\ubbfc\uad6d\", \"\ub0a8\ud55c\", \"korea\", \"south korea\"],\n      \"NL\": [\"\ub124\ub35c\ub780\ub4dc\", \"holland\", \"netherlands\"],\n      \"CH\": [\"\uc2a4\uc704\uc2a4\", \"switzerland\"],\n      \"DE\": [\"\ub3c5\uc77c\", \"deutschland\", \"germany\"],\n      \"AT\": [\"\uc624\uc2a4\ud2b8\ub9ac\uc544\", \"austria\"],\n      \"CZ\": [\"\uccb4\ucf54\", \"czech republic\", \"czechia\"],\n      \"TR\": [\"\ud130\ud0a4\", \"\ud280\ub974\ud0a4\uc608\", \"turkey\", \"turkiye\", \"t\u00fcrkiye\"],\n      \"RU\": [\"\ub7ec\uc2dc\uc544\", \"russia\", \"russian federation\"],\n      \"JP\": [\"\uc77c\ubcf8\"],\n      \"CN\": [\"\uc911\uad6d\"],\n      \"TW\": [\"\ub300\ub9cc\", \"taiwan\"],\n      \"HK\": [\"\ud64d\ucf69\", \"hong kong\"],\n      \"SG\": [\"\uc2f1\uac00\ud3ec\ub974\"],\n      \"AU\": [\"\ud638\uc8fc\", \"\uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544\"],\n      \"NZ\": [\"\ub274\uc9c8\ub79c\ub4dc\"],\n      \"CA\": [\"\uce90\ub098\ub2e4\"],\n      \"FR\": [\"\ud504\ub791\uc2a4\"],\n      \"IT\": [\"\uc774\ud0c8\ub9ac\uc544\"],\n      \"ES\": [\"\uc2a4\ud398\uc778\"],\n      \"PT\": [\"\ud3ec\ub974\ud22c\uac08\"],\n      \"BR\": [\"\ube0c\ub77c\uc9c8\"],\n      \"MX\": [\"\uba55\uc2dc\ucf54\"],\n      \"IN\": [\"\uc778\ub3c4\"],\n      \"ID\": [\"\uc778\ub3c4\ub124\uc2dc\uc544\"],\n      \"PH\": [\"\ud544\ub9ac\ud540\"],\n      \"VN\": [\"\ubca0\ud2b8\ub0a8\", \"vietnam\", \"viet nam\"],\n      \"TH\": [\"\ud0dc\uad6d\"],\n      \"ZA\": [\"\ub0a8\uc544\ud504\ub9ac\uce74\uacf5\ud654\uad6d\", \"\ub0a8\uc544\uacf5\"],\n      \"EG\": [\"\uc774\uc9d1\ud2b8\"],\n      \"IL\": [\"\uc774\uc2a4\ub77c\uc5d8\"],\n      \"SA\": [\"\uc0ac\uc6b0\ub514\uc544\ub77c\ube44\uc544\"],\n      \"AE\": [\"\uc544\ub78d\uc5d0\ubbf8\ub9ac\ud2b8\", \"uae\", \"emirates\", \"dubai\", \"united arab emirates\"],\n      \"PL\": [\"\ud3f4\ub780\ub4dc\"],\n      \"SE\": [\"\uc2a4\uc6e8\ub374\"],\n      \"NO\": [\"\ub178\ub974\uc6e8\uc774\"],\n      \"DK\": [\"\ub374\ub9c8\ud06c\"],\n      \"FI\": [\"\ud540\ub780\ub4dc\"],\n      \"GR\": [\"\uadf8\ub9ac\uc2a4\"],\n      \"UA\": [\"\uc6b0\ud06c\ub77c\uc774\ub098\"],\n      \"BE\": [\"\ubca8\uae30\uc5d0\"],\n      \"IE\": [\"\uc544\uc77c\ub79c\ub4dc\"],\n      \"MM\": [\"\ubbf8\uc580\ub9c8\", \"burma\", \"myanmar\"],\n      \"GE\": [\"\uc870\uc9c0\uc544\", \"\uadf8\ub8e8\uc9c0\uc57c\", \"grusia\", \"georgia\"],\n      \"IR\": [\"\uc774\ub780\", \"persia\", \"iran\"],\n      \"MY\": [\"\ub9d0\ub808\uc774\uc2dc\uc544\"],\n      \"CI\": [\"ivory coast\", \"cote d'ivoire\"],\n      \"TL\": [\"east timor\", \"timor-leste\"],\n      \"SZ\": [\"swaziland\", \"eswatini\"],\n      \"MK\": [\"macedonia\", \"north macedonia\"],\n      \"MO\": [\"macao\", \"macau\"],\n      \"KP\": [\"north korea\"],\n      \"CV\": [\"cabo verde\", \"cape verde\"],\n      \"CD\": [\"dr congo\", \"drc\", \"congo kinshasa\"],\n      \"CG\": [\"congo brazzaville\"],\n      \"VA\": [\"vatican\", \"holy see\"],\n      \"LA\": [\"laos\"],\n      \"MD\": [\"moldova\"],\n      \"BY\": [\"belarus\"]\n  };\n  const COUNTRIES = {\n    cat1: [\"CY\",\"CA\",\"FR\",\"FI\",\"BH\",\"AU\",\"AD\",\"SE\",\"DE\",\"SA\",\"AT\",\"BE\",\"HK\",\"MT\",\"IS\",\"SM\",\"NL\",\"DK\",\"TW\",\"AE\",\"US\",\"BN\",\"CH\",\"NO\",\"GY\",\"QA\",\"MO\",\"IE\",\"LU\",\"SG\",\"LI\",\"GB\",\"GB-SCT\"],\n    cat2: [\"KR\",\"ME\",\"CL\",\"TT\",\"MV\",\"UY\",\"BS\",\"OM\",\"SC\",\"MY\",\"PA\",\"TR\",\"LV\",\"GR\",\"KZ\",\"SK\",\"HU\",\"RU\",\"RO\",\"EE\",\"AW\",\"PT\",\"PR\",\"HR\",\"KW\",\"JP\",\"NZ\",\"PL\",\"IL\",\"ES\",\"LT\",\"SI\",\"CZ\",\"IT\"],\n    cat3: [\"BZ\",\"TN\",\"GT\",\"IQ\",\"ZA\",\"FJ\",\"EC\",\"LY\",\"ID\",\"VN\",\"BT\",\"DZ\",\"PE\",\"PW\",\"BW\",\"DM\",\"PY\",\"MD\",\"GQ\",\"MN\",\"VC\",\"IR\",\"GD\",\"EG\",\"CO\",\"SR\",\"TM\",\"BA\",\"BB\",\"BR\",\"AL\",\"AM\",\"GA\",\"MX\",\"AZ\",\"TH\",\"LC\",\"CN\",\"MK\",\"DO\",\"AG\",\"AR\",\"GE\",\"CR\",\"MU\",\"RS\",\"BY\",\"KN\",\"XK\",\"BG\"],\n    cat4: [\"UA\",\"BI\",\"SS\",\"CF\",\"YE\",\"MZ\",\"MW\",\"SO\",\"CD\",\"LR\",\"MG\",\"NE\",\"AF\",\"SD\",\"SB\",\"ML\",\"HT\",\"VU\",\"BF\",\"LS\",\"TD\",\"GW\",\"TG\",\"GM\",\"KI\",\"SL\",\"PG\",\"UG\",\"KM\",\"PS\",\"RW\",\"TZ\",\"ET\",\"ZM\",\"FM\",\"BJ\",\"GN\",\"TL\",\"MM\",\"SN\",\"CM\",\"TJ\",\"TV\",\"NP\",\"CG\",\"ST\",\"PK\",\"KE\",\"ZW\",\"MH\",\"HN\",\"TO\",\"CI\",\"WS\",\"GH\",\"VE\",\"KH\",\"MR\",\"KG\",\"NI\",\"NG\",\"DJ\",\"AO\",\"LA\",\"BD\",\"BO\",\"MA\",\"JO\",\"LB\",\"NR\",\"IN\",\"NA\",\"CV\",\"UZ\",\"PH\",\"SZ\",\"JM\",\"SV\",\"LK\"]\n  };\n  \/\/ \u2500\u2500 Ecwid-Optionsnamen und -werte: bleiben exakt deutsch wie im Shop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const OPT_COMM_LANG = \"In welcher Sprache nimmst Du teil?\";\n  const OPT_STATUS    = \"Trifft etwas davon auf Dich zu?\";\n  const STATUS_LABEL = {\n    paar:        \"Zu zweit (gleicher Haushalt)\",\n    schueler:    \"Sch\u00fcler:innen\",\n    student:     \"Student\",\n    wiederholer: \"Wiederholer\",\n    apponly:     \"Digitale Teilnahme (App)\"\n  };\n  \/\/ \u2500\u2500 Shadow DOM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const host = document.getElementById(\"sw-host-ko\");\n  const shadow = host.attachShadow({ mode: \"open\" });\n  const styleEl = document.createElement(\"style\");\n  styleEl.textContent = `\n    :host {\n      display: block;\n      --bg:           #F5FAF6;\n      --card:         #FFFFFF;\n      --ink:          #0C1E14;\n      --ink-muted:    #27703F;\n      --accent:       #0C1E14;\n      --accent-light: #E6F2E8;\n      --border:       #C8E0CE;\n      --radius:       16px;\n      --radius-sm:    10px;\n    }\n    @keyframes wiz-spin { to { transform: rotate(360deg); } }\n    .sw-root {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 20px; font-weight: 400; color: var(--ink);\n      background: var(--bg); padding: 32px 20px;\n      display: flex; align-items: flex-start; justify-content: center;\n    }\n    .sw-card {\n      background: var(--card); border: 1px solid var(--border);\n      border-radius: 24px; padding: 36px 32px;\n      width: 100%; max-width: 780px;\n      box-shadow: 0 4px 24px rgba(12,30,20,0.08); box-sizing: border-box;\n    }\n    @media (max-width: 480px) {\n      .sw-root { padding: 16px 10px; }\n      .sw-card { padding: 24px 16px; border-radius: 16px; }\n    }\n    .sw-progress { display: flex; gap: 8px; margin-bottom: 32px; }\n    .sw-progress-step { flex: 1; height: 4px; background: var(--border); border-radius: 999px; transition: background 0.35s; }\n    .sw-progress-step.active { background: var(--accent); }\n    .sw-progress-step.done   { background: var(--accent); opacity: 0.4; }\n    .sw-step-label { font-size: 12px; font-weight: 400; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: 10px; }\n    .sw-heading { font-size: 26px; font-weight: 500; line-height: 1.2; margin: 0 0 6px; color: var(--accent); letter-spacing: 0.01em; }\n    .sw-subtext { font-size: 18px; font-weight: 400; color: var(--ink-muted); margin: 0 0 28px; line-height: 1.6; }\n    .sw-label { display: block; font-size: 18px; font-weight: 700; margin-bottom: 6px; color: var(--ink); }\n    .sw-select, .sw-text-input {\n      width: 100%; padding: 13px 15px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg);\n      font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-select {\n      appearance: none;\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2327703F' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: right 15px center;\n      cursor: pointer;\n    }\n    .sw-select:focus, .sw-text-input:focus {\n      outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1);\n    }\n    .sw-text-input { margin-bottom: 14px; }\n    .sw-redirect { display: none; margin-top: 12px; padding: 18px 20px; border-radius: var(--radius-sm); background: #FFF8F0; border: 1px solid rgba(180,80,0,0.2); font-size: 17px; line-height: 1.8; color: var(--ink); }\n    .sw-redirect strong { display: block; margin-bottom: 8px; font-size: 17px; color: #7A3500; }\n    .sw-redirect a { color: #27703F; text-decoration: underline; }\n    .sw-infobox {\n      margin-top: 12px; padding: 15px 17px; border-radius: var(--radius-sm);\n      background: var(--accent-light); border: 1px solid rgba(12,30,20,0.15);\n      font-size: 18px; font-weight: 400; line-height: 1.5;\n    }\n    .sw-infobox-title {\n      font-weight: 700; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase;\n      color: var(--accent); margin-bottom: 3px;\n    }\n    .sw-divider { border: 0; border-top: 1px solid var(--border); margin: 30px 0 24px; }\n    .sw-choice-row { display: flex; gap: 10px; flex-wrap: wrap; }\n    .sw-choice-card {\n      flex: 1; min-width: 150px; padding: 16px 14px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      text-align: center; cursor: pointer; font-size: 17px; line-height: 1.3;\n      transition: all 0.15s; background: var(--bg); box-sizing: border-box;\n    }\n    .sw-choice-card:hover { border-color: var(--accent); }\n    .sw-choice-card.active { background: var(--accent-light); border-color: var(--accent); font-weight: 700; color: var(--accent); }\n    @media (max-width: 480px) { .sw-choice-card { min-width: 100%; } }\n    .sw-person-block { margin-bottom: 8px; }\n    .sw-person-title { font-weight: 700; font-size: 21px; color: var(--accent); margin-bottom: 16px; }\n    .sw-field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 0; }\n    @media (max-width: 480px) { .sw-field-grid { grid-template-columns: 1fr; } }\n    .sw-range-header { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 22px; }\n    .sw-range-header-label { font-weight: 700; font-size: 18px; }\n    .sw-amount-display { display: flex; align-items: baseline; gap: 3px; }\n    .sw-amount-display span { font-size: 18px; font-weight: 400; }\n    .sw-amount-input {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 36px; font-weight: 700; color: var(--ink);\n      border: 2px solid var(--border); background: var(--bg);\n      text-align: right; width: 132px; padding: 4px 12px;\n      outline: none; border-radius: var(--radius-sm);\n      transition: background 0.15s, color 0.15s, border-color 0.15s, box-shadow 0.15s;\n    }\n    .sw-amount-input:hover { border-color: var(--accent); background: var(--accent-light); }\n    .sw-amount-input:focus { border-color: var(--accent); background: var(--accent-light); color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    input[type=range].sw-range {\n      -webkit-appearance: none; width: 100%; height: 6px;\n      border-radius: 999px; background: var(--border); outline: none; cursor: pointer;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb {\n      -webkit-appearance: none; width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35);\n      cursor: pointer; transition: transform 0.15s, box-shadow 0.15s;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb:hover { transform: scale(1.08); box-shadow: 0 0 0 9px rgba(12,30,20,0.18), 0 3px 12px rgba(12,30,20,0.4); }\n    input[type=range].sw-range::-webkit-slider-thumb:active { transform: scale(1.12); }\n    input[type=range].sw-range::-moz-range-thumb {\n      width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      border: none; box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); cursor: pointer;\n    }\n    input[type=range].sw-range.sw-pulse::-webkit-slider-thumb { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    input[type=range].sw-range.sw-pulse::-moz-range-thumb    { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    @keyframes sw-thumb-pulse {\n      0%, 100% { box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); }\n      50%      { box-shadow: 0 0 0 15px rgba(12,30,20,0.05), 0 3px 10px rgba(12,30,20,0.35); }\n    }\n    .sw-range-wrap { position: relative; }\n    .sw-markers { position: relative; height: 56px; margin-bottom: 8px; margin-left: 18px; margin-right: 18px; }\n    .sw-marker {\n      position: absolute; transform: translateX(-50%);\n      display: flex; flex-direction: column; align-items: center; gap: 2px;\n      justify-content: flex-end; height: 100%; pointer-events: auto; cursor: pointer;\n    }\n    .sw-marker-tick { width: 1px; height: 10px; background: var(--border); flex-shrink: 0; }\n    .sw-marker.active .sw-marker-tick { background: var(--accent); opacity: 0.5; }\n    .sw-marker-label { font-size: 11px; font-weight: 400; color: var(--ink-muted); white-space: nowrap; line-height: 1.2; text-align: center; order: -2; }\n    .sw-marker-amount { font-size: 13px; font-weight: 700; color: var(--ink-muted); order: -1; }\n    .sw-marker.active .sw-marker-label, .sw-marker.active .sw-marker-amount { color: var(--accent); }\n    @media (max-width: 540px) {\n      .sw-markers { display: none; }\n      .sw-markers-mobile { display: flex !important; }\n    }\n    .sw-markers-mobile {\n      display: none; flex-direction: column; gap: 0;\n      margin: 12px 0 4px; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden;\n    }\n    .sw-marker-mobile {\n      display: flex; align-items: center; justify-content: space-between;\n      padding: 10px 14px; cursor: pointer; border-bottom: 1px solid var(--border);\n      transition: background 0.15s; font-family: 'Tinos', Georgia, serif;\n    }\n    .sw-marker-mobile:last-child { border-bottom: 0; }\n    .sw-marker-mobile:hover { background: var(--accent-light); }\n    .sw-marker-mobile.active { background: var(--accent-light); }\n    .sw-marker-mobile-label { font-size: 15px; font-weight: 400; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-label { color: var(--accent); font-weight: 700; }\n    .sw-marker-mobile-amount { font-size: 16px; font-weight: 700; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-amount { color: var(--accent); }\n    .sw-summary-box { padding: 18px 20px; background: var(--accent-light); border: 1px solid rgba(12,30,20,0.2); border-radius: var(--radius-sm); margin-top: 20px; }\n    .sw-summary-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; font-size: 16px; color: var(--ink); }\n    .sw-summary-row.sw-summary-discount { color: #8A1F1F; }\n    .sw-summary-row.sw-summary-total { border-top: 1px solid rgba(12,30,20,0.25); margin-top: 8px; padding-top: 12px; font-weight: 700; font-size: 22px; color: var(--accent); }\n    .sw-summary-person-label { font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-muted); margin: 14px 0 2px; }\n    .sw-summary-person-label:first-child { margin-top: 0; }\n    .sw-btn-row { display: flex; gap: 10px; margin-top: 24px; flex-wrap: wrap; }\n    .sw-btn { flex: 1; min-width: 140px; padding: 15px 17px; border-radius: var(--radius-sm); font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 700; cursor: pointer; transition: all 0.2s; border: 0; }\n    .sw-btn-primary { background: var(--accent); color: #fff; }\n    .sw-btn-primary:hover { background: #27703F; transform: translateY(-1px); }\n    .sw-btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }\n    .sw-btn-secondary { background: transparent; color: var(--ink); border: 1px solid var(--border); }\n    .sw-btn-secondary:hover { background: var(--bg); }\n    .sw-error { display: none; margin-top: 15px; padding: 13px 15px; border-radius: var(--radius-sm); background: #FFF3F3; border: 1px solid rgba(220,30,30,0.2); color: #8A1F1F; font-size: 18px; font-weight: 400; line-height: 1.5; white-space: pre-wrap; }\n    .wiz-spinner { display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.4); border-top-color: #fff; border-radius: 50%; animation: wiz-spin 0.7s linear infinite; vertical-align: middle; margin-right: 8px; }\n    .sw-country-search-wrap { position: relative; margin-bottom: 10px; }\n    .sw-country-search-icon { position: absolute; left: 18px; top: 50%; transform: translateY(-50%); color: var(--ink-muted); pointer-events: none; opacity: 0.5; }\n    .sw-country-search {\n      width: 100%; padding: 13px 15px 13px 54px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg); font-family: 'Tinos', Georgia, serif;\n      font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-country-search:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    .sw-country-list { max-height: 240px; overflow-y: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }\n    .sw-country-item { padding: 11px 15px; cursor: pointer; font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; display: flex; justify-content: space-between; align-items: center; transition: background 0.15s; border-bottom: 1px solid var(--border); }\n    .sw-country-item:last-child { border-bottom: 0; }\n    .sw-country-item:hover { background: var(--accent-light); }\n    .sw-country-item.selected { background: var(--accent-light); font-weight: 700; }\n    .sw-country-item-cat { font-size: 12px; color: var(--ink-muted); background: var(--border); padding: 2px 8px; border-radius: 999px; }\n    .sw-country-empty { padding: 15px; font-size: 18px; color: var(--ink-muted); text-align: center; }\n    .sw-step { display: none; }\n    .sw-step.active { display: block; }\n  `;\n  shadow.appendChild(styleEl);\n  const wrapper = document.createElement(\"div\");\n  wrapper.innerHTML = `\n    <div class=\"sw-root\">\n      <div class=\"sw-card\">\n        <div class=\"sw-progress\">\n          <div class=\"sw-progress-step\" id=\"sw-prog-1\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-2\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-3\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-4\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-5\"><\/div>\n        <\/div>\n        <!-- STEP 1 -->\n        <div class=\"sw-step active\" id=\"sw-step-welcome\">\n          <div class=\"sw-step-label\">5\ub2e8\uacc4 \uc911 1\ub2e8\uacc4<\/div>\n          <h2 class=\"sw-heading\">\ud658\uc601\ud569\ub2c8\ub2e4<\/h2>\n          <p class=\"sw-subtext\">\uac04\ub2e8\ud55c \uc591\uc2dd\uc744 \ud1b5\ud574 \uad6d\uac00, \uc5b8\uc5b4, \ub4f1\ub85d \uc720\ud615, \ucc38\uac00\ube44\ub97c \uc120\ud0dd\ud558\uc2e0 \ud6c4 \uacb0\uc81c\ud558\uc5ec \ub4f1\ub85d\uc744 \uc644\ub8cc\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n          <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-welcome-next\" style=\"width:100%;\">\ub4f1\ub85d \uc2dc\uc791\ud558\uae30<\/button>\n        <\/div>\n        <!-- STEP 2 -->\n        <div class=\"sw-step\" id=\"sw-step-country\">\n          <div class=\"sw-step-label\">5\ub2e8\uacc4 \uc911 2\ub2e8\uacc4<\/div>\n          <h2 class=\"sw-heading\">\uc5b4\ub514\uc5d0 \uac70\uc8fc\ud558\uc2dc\ub098\uc694?<\/h2>\n          <label class=\"sw-label\">\uad6d\uac00<\/label>\n          <div class=\"sw-country-search-wrap\">\n            <svg class=\"sw-country-search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.35-4.35\"\/><\/svg>\n            <input type=\"text\" class=\"sw-country-search\" id=\"sw-country-search\" placeholder=\"\uad6d\uac00 \uac80\uc0c9\u2026\" autocomplete=\"off\">\n          <\/div>\n          <div class=\"sw-country-list\" id=\"sw-country-list\"><\/div>\n          <input type=\"hidden\" id=\"sw-country\">\n          <div class=\"sw-infobox\" id=\"sw-catInfo\">\n            <div class=\"sw-infobox-title\">\ucc38\uac00\ube44 \uce74\ud14c\uace0\ub9ac<\/div>\n            <div id=\"sw-catText\">\uba3c\uc800 \uad6d\uac00\ub97c \uc120\ud0dd\ud574 \uc8fc\uc138\uc694.<\/div>\n          <\/div>\n          <div class=\"sw-redirect\" id=\"sw-redirect-russia\">\n            <strong>\ub7ec\uc2dc\uc544\uc5d0\uc11c \ucc38\uac00\ud558\uc2dc\ub294 \ubd84\ub4e4\uc744 \uc704\ud55c \ubcc4\ub3c4\uc758 \uc2e0\uccad \ud398\uc774\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/strong>\n            \uc800\ud76c \uacb0\uc81c \uc2dc\uc2a4\ud15c\uc740 \ub7ec\uc2dc\uc544\uc5d0\uc11c \uc774\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ud574\ub2f9 \ud398\uc774\uc9c0\uc5d0\uc11c \uc2e0\uccad\ud574 \uc8fc\uc138\uc694:<br><br>\n            <a href=\"https:\/\/spiritual-activity.org\/ru\/anmeldung-basic-exercises\/\">\ub7ec\uc2dc\uc544\uc5b4 \uc2e0\uccad \ud398\uc774\uc9c0\ub85c \uc774\ub3d9<\/a>\n          <\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-country-back\">\uc774\uc804<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-country-next\" disabled>\ub2e4\uc74c<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 3 -->\n        <div class=\"sw-step\" id=\"sw-step-langform\">\n          <div class=\"sw-step-label\">5\ub2e8\uacc4 \uc911 3\ub2e8\uacc4<\/div>\n          <h2 class=\"sw-heading\">\uc5b8\uc5b4 \ubc0f \ub4f1\ub85d \uc720\ud615<\/h2>\n          <label class=\"sw-label\" for=\"sw-commLang\">\uc5b4\ub5a4 \uc5b8\uc5b4\ub85c \ucc38\uc5ec\ud558\uc2dc\ub098\uc694?<\/label>\n          <select class=\"sw-select\" id=\"sw-commLang\">\n            <option value=\"\" selected disabled>\uc120\ud0dd\ud574 \uc8fc\uc138\uc694<\/option>\n            <option value=\"Deutsch\">\ub3c5\uc77c\uc5b4<\/option>\n            <option value=\"Englisch\">\uc601\uc5b4<\/option>\n            <option value=\"Spanisch\">\uc2a4\ud398\uc778\uc5b4<\/option>\n            <option value=\"Franz\u00f6sisch\">\ud504\ub791\uc2a4\uc5b4<\/option>\n            <option value=\"Italienisch\">\uc774\ud0c8\ub9ac\uc544\uc5b4<\/option>\n            <option value=\"Portugiesisch\">\ud3ec\ub974\ud22c\uac08\uc5b4<\/option>\n            <option value=\"Arabisch\">\uc544\ub78d\uc5b4<\/option>\n            <option value=\"Hebr\u00e4isch\">\ud788\ube0c\ub9ac\uc5b4<\/option>\n            <option value=\"Farsi\">\ud398\ub974\uc2dc\uc544\uc5b4<\/option>\n            <option value=\"Georgisch\">\uc870\uc9c0\uc544\uc5b4<\/option>\n            <option value=\"Ukrainisch\">\uc6b0\ud06c\ub77c\uc774\ub098\uc5b4<\/option>\n            <option value=\"Niederl\u00e4ndisch\">\ub124\ub35c\ub780\ub4dc\uc5b4<\/option>\n            <option value=\"T\u00fcrkisch\">\ud130\ud0a4\uc5b4<\/option>\n            <option value=\"Bulgarisch\">\ubd88\uac00\ub9ac\uc544\uc5b4<\/option>\n            <option value=\"Russisch\">\ub7ec\uc2dc\uc544\uc5b4<\/option>\n            <option value=\"Chinesisch\">\uc911\uad6d\uc5b4<\/option>\n            <option value=\"Japanisch\">\uc77c\ubcf8\uc5b4<\/option>\n            <option value=\"Koreanisch\">\ud55c\uad6d\uc5b4<\/option>\n          <\/select>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note\" style=\"display:none; margin-top:14px;\">\n            <div class=\"sw-infobox-title\">\ub514\uc9c0\ud138 \ucc38\uac00 \u00b7 \u221235\u20ac<\/div>\n            <div id=\"sw-apponly-note-text\">\ub514\uc9c0\ud138 \ucc38\uac00\ub97c \uc120\ud0dd\ud558\uc168\uc2b5\ub2c8\ub2e4. \ud560\uc778\uc740 \uacb0\uc81c \ub2e8\uacc4\uc5d0\uc11c \uc790\ub3d9\uc73c\ub85c \ubc18\uc601\ub429\ub2c8\ub2e4.<\/div>\n          <\/div>\n          <label class=\"sw-label\" style=\"margin-top:26px;\">\uc5b4\ub5bb\uac8c \ub4f1\ub85d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?<\/label>\n          <div class=\"sw-choice-row\" id=\"sw-form-choices\">\n            <div class=\"sw-choice-card active\" data-form=\"einzeln\">\uac1c\uc778<\/div>\n            <div class=\"sw-choice-card\" data-form=\"paar\">2\uc778<br><span style=\"font-size:13px; font-weight:400;\">(\ub3d9\uc77c \uac00\uad6c)<\/span><\/div>\n            <div class=\"sw-choice-card\" data-form=\"gruppe\">\ub2e8\uccb4<br><span style=\"font-size:13px; font-weight:400;\">(4\uc778 \uc774\uc0c1)<\/span><\/div>\n          <\/div>\n          <div class=\"sw-infobox\" id=\"sw-gruppe-note\" style=\"display:none; margin-top:18px;\">\n            <div class=\"sw-infobox-title\">\ub2e8\uccb4 \ub4f1\ub85d<\/div>\n            <div>\uad00\uc2ec\uc744 \uac00\uc838 \uc8fc\uc154\uc11c \uac10\uc0ac\ud569\ub2c8\ub2e4. \ub2e4\uc74c \ud398\uc774\uc9c0\uc5d0\uc11c \ub2e8\uccb4 \ub4f1\ub85d\uc744 \uc9c4\ud589\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucc38\uace0: \ub2e8\uccb4 \ub4f1\ub85d\uc740 \ub3c5\uc77c\uc5b4\uc640 \uc601\uc5b4\ub85c\ub9cc \uc81c\uacf5\ub429\ub2c8\ub2e4.<\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-langform\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-langform-back\">\uc774\uc804<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-langform-next\" disabled>\ub2e4\uc74c<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-gruppe-redirect\" style=\"display:none;\">\ub2e8\uccb4 \ub4f1\ub85d\uc73c\ub85c \uacc4\uc18d\ud558\uae30<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4A -->\n        <div class=\"sw-step\" id=\"sw-step-details-solo\">\n          <div class=\"sw-step-label\">5\ub2e8\uacc4 \uc911 4\ub2e8\uacc4<\/div>\n          <h2 class=\"sw-heading\">\ud68c\uc6d0\ub2d8\uc5d0 \ub300\ud55c \uba87 \uac00\uc9c0 \uc815\ubcf4<\/h2>\n          <p class=\"sw-subtext\">\ub2e4\uc74c \uc911 \ud574\ub2f9\ub418\ub294 \uc0ac\ud56d\uc774 \uc788\ub098\uc694? \uc774\ub97c \ud1b5\ud574 \uc801\ud569\ud55c \ucc38\uac00\ube44\ub97c \uc81c\uc548\ud574 \ub4dc\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\ub514\uc9c0\ud138 \ucc38\uac00 \u00b7 \u221235\u20ac<\/div>\n            <div>\ub514\uc9c0\ud138 \ucc38\uac00\ub97c \uc120\ud0dd\ud558\uc168\uc2b5\ub2c8\ub2e4. \ud560\uc778\uc740 \uacb0\uc81c \ub2e8\uacc4\uc5d0\uc11c \uc790\ub3d9\uc73c\ub85c \ubc18\uc601\ub429\ub2c8\ub2e4.<\/div>\n          <\/div>\n          <label class=\"sw-label\">\uc120\ud0dd\ud574 \uc8fc\uc138\uc694<\/label>\n          <select class=\"sw-select\" id=\"sw-solo-status\">\n            <option value=\"\" disabled selected>\uc120\ud0dd\ud574 \uc8fc\uc138\uc694<\/option>\n            <option value=\"normal\">\uc77c\ubc18 \ub4f1\ub85d<\/option>\n            <option value=\"schueler\">\ud559\uc0dd (\ucd08\u00b7\uc911\u00b7\uace0) (\u221250%)<\/option>\n            <option value=\"student\">\uc9c1\uc5c5 \uad50\uc721 \/ \ub300\ud559 (\u221225%)<\/option>\n            <option value=\"wiederholer\">\uc601\ud63c \uc5f0\uc2b5 \ucf54\uc2a4\ub97c \uc7ac\uc218\uac15\ud569\ub2c8\ub2e4 (\uc0c8 \uce74\ub4dc \uc138\ud2b8 \ubd88\ud544\uc694 \u2212 30%)<\/option>\n          <\/select>\n          <div class=\"sw-error\" id=\"sw-error-details-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-solo-back\">\uc774\uc804<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-solo-next\" disabled>\ub2e4\uc74c<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4B -->\n        <div class=\"sw-step\" id=\"sw-step-details-paar\">\n          <div class=\"sw-step-label\">5\ub2e8\uacc4 \uc911 4\ub2e8\uacc4<\/div>\n          <h2 class=\"sw-heading\">\ub450 \ubd84\uc5d0 \ub300\ud55c \uc815\ubcf4<\/h2>\n          <p class=\"sw-subtext\">\ub450 \ubd84\uc758 \uc815\ubcf4\ub97c \uc785\ub825\ud574 \uc8fc\uc138\uc694. \ub450 \ubc88\uc9f8 \ubd84\uc758 \ucc38\uac00\ube44\ub294 \uc790\ub3d9\uc73c\ub85c 50% \ud560\uc778\uc774 \uc801\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-paar-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\ub514\uc9c0\ud138 \ucc38\uac00 \u00b7 \u221235\u20ac<\/div>\n            <div>\ub514\uc9c0\ud138 \ucc38\uac00\ub97c \uc120\ud0dd\ud558\uc168\uc2b5\ub2c8\ub2e4. \ud560\uc778\uc740 \uacb0\uc81c \ub2e8\uacc4\uc5d0\uc11c \uc790\ub3d9\uc73c\ub85c \ubc18\uc601\ub429\ub2c8\ub2e4.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\ucc38\uac00\uc790 1<\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\uc774\ub984<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-vorname\"><\/div>\n              <div><label class=\"sw-label\">\uc131<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\uc774\uba54\uc77c<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p1-email\">\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\ucc38\uac00\uc790 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\uc774\ub984<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-vorname\"><\/div>\n              <div><label class=\"sw-label\">\uc131<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\uc774\uba54\uc77c<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p2-email\">\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-details-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-paar-back\">\uc774\uc804<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-paar-next\" disabled>\ub2e4\uc74c<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5A -->\n        <div class=\"sw-step\" id=\"sw-step-amount-solo\">\n          <div class=\"sw-step-label\">5\ub2e8\uacc4 \uc911 5\ub2e8\uacc4<\/div>\n          <h2 class=\"sw-heading\">\ucc38\uac00\ube44 \uc120\ud0dd<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-solo\">\ud68c\uc6d0\ub2d8\uaed8 \uc801\ud569\ud55c \ucc38\uac00\ube44\ub97c \uc120\ud0dd\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-solo\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\ub514\uc9c0\ud138 \ucc38\uac00 \u00b7 \u221235\u20ac<\/div>\n            <div>\ub514\uc9c0\ud138 \ucc38\uac00\ub97c \uc120\ud0dd\ud558\uc168\uc2b5\ub2c8\ub2e4. \ud560\uc778\uc740 \uacb0\uc81c \ub2e8\uacc4\uc5d0\uc11c \uc790\ub3d9\uc73c\ub85c \ubc18\uc601\ub429\ub2c8\ub2e4.<\/div>\n          <\/div>\n          <div class=\"sw-range-header\">\n            <div class=\"sw-range-header-label\">\uae08\uc561<\/div>\n            <div class=\"sw-amount-display\">\n              <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-solo\" value=\"360\">\n              <span>\u20ac<\/span>\n            <\/div>\n          <\/div>\n          <div class=\"sw-range-wrap\">\n            <div class=\"sw-markers\" id=\"sw-markers-solo\"><\/div>\n            <input type=\"range\" class=\"sw-range\" id=\"sw-amount-solo\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n            <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-solo\"><\/div>\n          <\/div>\n          <p style=\"margin-top:18px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \ucd94\uac00\uc801\uc778 \uacbd\uc81c\uc801 \ud560\uc778\uc774 \ud544\uc694\ud558\uc2dc\uba74 info@basic-exercises.com \uc73c\ub85c \ubb38\uc758\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-solo\">\n            <div class=\"sw-summary-row\"><span>\uc120\ud0dd\ud55c \ucc38\uac00\ube44<\/span><span id=\"sw-solo-chosen\">360\u20ac<\/span><\/div>\n            <div id=\"sw-solo-discounts\"><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-solo\" style=\"display:none;\"><span>\ubc30\uc1a1\ube44<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\ud569\uacc4<\/span><span><span id=\"sw-solo-total\">360<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-solo-back\">\uc774\uc804<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-solo\">\ub4f1\ub85d\ud558\uae30<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5B -->\n        <div class=\"sw-step\" id=\"sw-step-amount-paar\">\n          <div class=\"sw-step-label\">5\ub2e8\uacc4 \uc911 5\ub2e8\uacc4<\/div>\n          <h2 class=\"sw-heading\">\ucc38\uac00\ube44 \uc120\ud0dd<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-paar\">\uac01\uc790 \uc790\uc2e0\uc758 \ucc38\uac00\ube44\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4. \ub450 \ubc88\uc9f8 \ubd84\uc758 \ucc38\uac00\ube44\ub294 \uc790\ub3d9\uc73c\ub85c 50% \ud560\uc778\uc774 \uc801\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-paar\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\ub514\uc9c0\ud138 \ucc38\uac00 \u00b7 \u221235\u20ac<\/div>\n            <div>\ub514\uc9c0\ud138 \ucc38\uac00\ub97c \uc120\ud0dd\ud558\uc168\uc2b5\ub2c8\ub2e4. \ud560\uc778\uc740 \uacb0\uc81c \ub2e8\uacc4\uc5d0\uc11c \uc790\ub3d9\uc73c\ub85c \ubc18\uc601\ub429\ub2c8\ub2e4.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p1-title\">\ucc38\uac00\uc790 1<\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\ucc38\uac00\ube44<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p1\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p1\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p1\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p1\"><\/div>\n            <\/div>\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p2-title\">\ucc38\uac00\uc790 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\ucc38\uac00\ube44<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p2\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p2\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p2\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p2\"><\/div>\n            <\/div>\n          <\/div>\n          <p style=\"margin-top:8px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \ucd94\uac00\uc801\uc778 \uacbd\uc81c\uc801 \ud560\uc778\uc774 \ud544\uc694\ud558\uc2dc\uba74 info@basic-exercises.com \uc73c\ub85c \ubb38\uc758\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-paar\">\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p1-label\">\ucc38\uac00\uc790 1<\/div>\n            <div class=\"sw-summary-row\"><span>\uc120\ud0dd\ud55c \ucc38\uac00\ube44<\/span><span id=\"sw-p1-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p1-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\uc18c\uacc4<\/span><span id=\"sw-p1-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p2-label\">\ucc38\uac00\uc790 2<\/div>\n            <div class=\"sw-summary-row\"><span>\uc120\ud0dd\ud55c \ucc38\uac00\ube44<\/span><span id=\"sw-p2-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p2-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\uc18c\uacc4<\/span><span id=\"sw-p2-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-paar\" style=\"display:none;\"><span>\ubc30\uc1a1\ube44<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\ud569\uacc4<\/span><span><span id=\"sw-paar-total\">0<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-paar-back\">\uc774\uc804<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-paar\">\uacb0\uc81c\ub85c \uc774\ub3d9<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  `;\n  shadow.appendChild(wrapper);\n  const $ = (id) => shadow.getElementById(id);\n  const COUNTRY_TO_CAT = {};\n  Object.keys(COUNTRIES).forEach(cat => COUNTRIES[cat].forEach(code => COUNTRY_TO_CAT[code] = cat));\n  function getCountryName(code) {\n    if (COUNTRY_NAMES[code]) return COUNTRY_NAMES[code];\n    try { return new Intl.DisplayNames([\"ko\"], { type: \"region\" }).of(code) || code; }\n    catch { return code; }\n  }\n\n  function getCountryAliases(code) {\n    const list = [];\n    \/\/ Intl-Name als Fallback, falls er vom festen CLDR-Namen abweicht\n    if (COUNTRY_NAMES[code]) {\n      try {\n        const intlName = new Intl.DisplayNames([\"ko\"], { type: \"region\" }).of(code);\n        if (intlName && intlName !== COUNTRY_NAMES[code]) list.push(intlName.toLowerCase());\n      } catch {}\n    }\n    \/\/ Englischer Name als lateinische Fallback-Schreibweise fuer alle Laender\n    try {\n      const enName = new Intl.DisplayNames([\"en\"], { type: \"region\" }).of(code);\n      if (enName) list.push(enName.toLowerCase());\n    } catch {}\n    (COUNTRY_SEARCH_ALIASES[code] || []).forEach(a => list.push(a.toLowerCase()));\n    return list;\n  }\n  function getAllCountriesSorted() {\n    const all = [];\n    [\"cat1\",\"cat2\",\"cat3\",\"cat4\"].forEach(cat => {\n      COUNTRIES[cat]\n        .map(code => ({ code, name: getCountryName(code), cat, aliases: getCountryAliases(code) }))\n        .sort((a, b) => a.name.localeCompare(b.name, \"ko\"))\n        .forEach(c => all.push(c));\n    });\n    return all;\n  }\n  function emptyPerson() {\n    return { vorname: \"\", nachname: \"\", email: \"\", wiederholer: false, statusType: \"\", amount: 0 };\n  }\n  const state = {\n    country: \"\", category: \"cat1\",\n    commLang: \"\", form: \"einzeln\",\n    persons: { solo: emptyPerson(), p1: emptyPerson(), p2: emptyPerson() }\n  };\n  function getPerson(key) { return state.persons[key] || state.persons.solo; }\n  function isAppOnly() {\n    const { category: cat, commLang: lang, country } = state;\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[country];\n      \/\/ Ausnahme (z.B. China) gilt nur, wenn auch die passende Sprache gewaehlt ist \u2013\n      \/\/ sonst kann kein physisches Kartenset verschickt werden.\n      if (!exceptionLang || lang !== exceptionLang) return true;\n    }\n    if (APP_ONLY_LANGS.has(lang)) return true;\n    if (lang === \"Russisch\" && country && country !== \"RU\") return true;\n    return false;\n  }\n\n  function isWiederholer(person) {\n    return !!person && (person.wiederholer || person.statusType === \"wiederholer\");\n  }\n\n  \/\/ Geht ueberhaupt ein Kartenset raus? Nur wenn die Teilnahme nicht rein digital\n  \/\/ ist UND mindestens eine Person ein neues Set braucht - Wiederholer bekommen\n  \/\/ keins. Steuert sowohl die Versandzeile in der Zusammenfassung als auch die\n  \/\/ Wahl des Ecwid-Produkts, damit beide nicht auseinanderlaufen koennen.\n  function hasPhysicalShipment(isPaar) {\n    if (isAppOnly()) return false;\n    return isPaar\n      ? !(isWiederholer(state.persons.p1) && isWiederholer(state.persons.p2))\n      : !isWiederholer(state.persons.solo);\n  }\n\n  \/\/ Ecwid haengt den Versand am Produkt fest, nicht am Warenkorb. Ohne physischen\n  \/\/ Versand muss deshalb das versandfreie Digital-Produkt in den Warenkorb, sonst\n  \/\/ schlaegt der Shop trotzdem Versandkosten auf.\n  function getParticipationProductId(isPaar) {\n    return hasPhysicalShipment(isPaar) ? PRODUCTS[state.category] : PRODUCTS_APPONLY[state.category];\n  }\n  function updateAppOnlyUI() {\n    const appOnly = state.commLang ? isAppOnly() : false;\n    let reason = \"\";\n    if (appOnly) {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[state.country];\n      if ((state.category === \"cat3\" || state.category === \"cat4\") && exceptionLang) {\n        reason = TXT.reasonException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang);\n      } else if (state.category === \"cat3\" || state.category === \"cat4\") {\n        reason = TXT.reasonRegion;\n      } else if (state.commLang === \"Russisch\") {\n        reason = TXT.reasonRussian;\n      } else {\n        reason = TXT.reasonLanguage;\n      }\n    }\n    const noteIds = [\"sw-apponly-note\",\"sw-apponly-note-step4\",\"sw-apponly-note-paar-step4\",\"sw-apponly-note-step5-solo\",\"sw-apponly-note-step5-paar\"];\n    noteIds.forEach(id => {\n      const el = $(id);\n      if (!el) return;\n      el.style.display = appOnly ? \"block\" : \"none\";\n      const textDiv = el.querySelector(\"div:not(.sw-infobox-title)\");\n      if (textDiv && reason) textDiv.textContent = reason;\n    });\n  }\n  const STEP_CONTAINER = {\n    1: () => \"sw-step-welcome\",\n    2: () => \"sw-step-country\",\n    3: () => \"sw-step-langform\",\n    4: () => state.form === \"paar\" ? \"sw-step-details-paar\" : \"sw-step-details-solo\",\n    5: () => state.form === \"paar\" ? \"sw-step-amount-paar\" : \"sw-step-amount-solo\"\n  };\n  function showStep(n) {\n    shadow.querySelectorAll(\".sw-step\").forEach(el => el.classList.remove(\"active\"));\n    $(STEP_CONTAINER[n]()).classList.add(\"active\");\n    for (let i = 1; i <= 5; i++) {\n      const prog = $(\"sw-prog-\" + i);\n      if (!prog) continue;\n      if (i < n) prog.className = \"sw-progress-step done\";\n      else if (i === n) prog.className = \"sw-progress-step active\";\n      else prog.className = \"sw-progress-step\";\n    }\n    if (n === 5) {\n      const sliderIds = state.form === \"paar\" ? [\"sw-amount-p1\",\"sw-amount-p2\"] : [\"sw-amount-solo\"];\n      sliderIds.forEach(sid => { const el = $(sid); if (el) el.classList.add(\"sw-pulse\"); });\n      refreshSummary();\n    }\n  }\n  function setNextEnabled(id, enabled) {\n    const b = $(id);\n    if (!b) return;\n    b.disabled = !enabled;\n    b.style.opacity = enabled ? \"1\" : \".4\";\n    b.style.cursor  = enabled ? \"pointer\" : \"not-allowed\";\n  }\n  function showErrorIn(id, msg) { const el=$(id); el.style.display=\"block\"; el.textContent=msg; }\n  function clearErrorIn(id)     { const el=$(id); el.style.display=\"none\";  el.textContent=\"\"; }\n  function setCheckoutLoading(btnId, loading) {\n    const btn = $(btnId);\n    \/\/ Nach dem Danke-Bildschirm existiert der Button nicht mehr \u2013 dann nichts tun.\n    if (!btn) return;\n    const overlay = document.getElementById(OVERLAY_ID);\n    if (!btn.dataset.defaultLabel) btn.dataset.defaultLabel = btn.textContent;\n    if (loading) {\n      btn.disabled = true;\n      btn.innerHTML = '<span class=\"wiz-spinner\"><\/span> ' + TXT.preparing;\n      btn.style.opacity = \".8\";\n      if (overlay) overlay.style.display = \"flex\";\n    } else {\n      btn.disabled = false;\n      btn.textContent = btn.dataset.defaultLabel;\n      btn.style.opacity = \"1\";\n      if (overlay) overlay.style.display = \"none\";\n    }\n  }\n  function showThankYou() {\n    const card = shadow.querySelector(\".sw-card\");\n    if (!card) return;\n    card.innerHTML = `\n      <div style=\"text-align:center; padding:20px 0;\">\n        <div style=\"font-size:56px; margin-bottom:16px; color:#27703F;\">\u2713<\/div>\n        <h2 style=\"font-family:'Tinos',Georgia,serif; font-size:26px; font-weight:500; margin:0 0 12px; color:#0C1E14;\">${TXT.thanksTitle}<\/h2>\n        <p style=\"font-family:'Tinos',Georgia,serif; font-size:18px; color:#27703F; line-height:1.6; margin:0 0 24px;\">${TXT.thanksLine1}${TXT.thanksLine2 ? \"<br>\" + TXT.thanksLine2 : \"\"}<\/p>\n        <div style=\"display:flex; justify-content:center;\">\n          <div style=\"width:36px; height:36px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:wiz-spin 0.8s linear infinite;\"><\/div>\n        <\/div>\n      <\/div>`;\n  }\n  function getAnchors(cat) {\n    const r = RANGES[cat], o = ORIENTIERUNG[cat];\n    return [[0,r.min],[25,o.reduced],[50,o.base],[75,o.support],[100,r.max]];\n  }\n  function normToEuro(norm, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      if (norm <= a[i+1][0]) {\n        const t = (norm - a[i][0]) \/ (a[i+1][0] - a[i][0]);\n        return Math.round(a[i][1] + t * (a[i+1][1] - a[i][1]));\n      }\n    }\n    return a[a.length-1][1];\n  }\n  function euroToNorm(euro, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      const lo = a[i][1], hi = a[i+1][1];\n      if (euro <= hi) {\n        if (hi === lo) return a[i+1][0];\n        return a[i][0] + (euro - lo) \/ (hi - lo) * (a[i+1][0] - a[i][0]);\n      }\n    }\n    return 100;\n  }\n  function getMarkerDefs(cat) {\n    const o = ORIENTIERUNG[cat];\n    return [\n      { value: o.reduced, label: TXT.markerReduced, normPct: 25 },\n      { value: o.base,    label: TXT.markerBase,    normPct: 50 },\n      { value: o.support, label: TXT.markerSupport, normPct: 75 }\n    ];\n  }\n  function renderMarkers(personKey) {\n    const cat = state.category;\n    const person = getPerson(personKey);\n    const markers = getMarkerDefs(cat);\n    const container = $(`sw-markers-${personKey}`);\n    container.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker\" + (person.amount === m.value ? \" active\" : \"\");\n      div.style.left = m.normPct + \"%\";\n      div.innerHTML = `<div class=\"sw-marker-tick\"><\/div><div class=\"sw-marker-amount\">${m.value}\u20ac<\/div><div class=\"sw-marker-label\">${m.label}<\/div>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      container.appendChild(div);\n    });\n    const mobileContainer = $(`sw-markers-mobile-${personKey}`);\n    mobileContainer.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker-mobile\" + (person.amount === m.value ? \" active\" : \"\");\n      div.innerHTML = `<span class=\"sw-marker-mobile-label\">${m.label}<\/span><span class=\"sw-marker-mobile-amount\">${m.value}\u20ac<\/span>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      mobileContainer.appendChild(div);\n    });\n  }\n  function selectMarkerValue(personKey, value) {\n    const person = getPerson(personKey);\n    $(`sw-amount-${personKey}`).value = euroToNorm(value, state.category);\n    person.amount = value;\n    $(`sw-amountInput-${personKey}`).value = value;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromSlider(personKey) {\n    const person = getPerson(personKey);\n    const norm = Number($(`sw-amount-${personKey}`).value);\n    person.amount = normToEuro(norm, state.category);\n    $(`sw-amountInput-${personKey}`).value = person.amount;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromInput(personKey) {\n    const person = getPerson(personKey);\n    const r = RANGES[state.category];\n    let val = Number($(`sw-amountInput-${personKey}`).value);\n    if (isNaN(val)) val = r.min;\n    val = Math.min(r.max, Math.max(r.min, val));\n    person.amount = val;\n    $(`sw-amountInput-${personKey}`).value = val;\n    $(`sw-amount-${personKey}`).value = euroToNorm(val, state.category);\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function wireAmountControl(personKey) {\n    $(`sw-amount-${personKey}`).addEventListener(\"input\", () => updateAmountFromSlider(personKey));\n    $(`sw-amountInput-${personKey}`).addEventListener(\"input\", () => {\n      const v = Number($(`sw-amountInput-${personKey}`).value);\n      if (!isNaN(v)) { getPerson(personKey).amount = v; refreshSummary(); }\n    });\n    $(`sw-amountInput-${personKey}`).addEventListener(\"change\", () => updateAmountFromInput(personKey));\n  }\n  function applyRangeForForm() {\n    const cat = state.category;\n    const ori = ORIENTIERUNG[cat];\n    const hint = TXT.hintLong;\n    if (state.form === \"paar\") {\n      [\"p1\",\"p2\"].forEach(key => {\n        const person = getPerson(key);\n        person.amount = ori.base;\n        $(`sw-amount-${key}`).value = 50;\n        $(`sw-amountInput-${key}`).value = ori.base;\n      });\n      const p1name = state.persons.p1.vorname;\n      const p2name = state.persons.p2.vorname;\n      $(\"sw-amount-p1-title\").innerHTML = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-amount-p2-title\").innerHTML = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) +\n        ' <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">' + TXT.p2Badge + '<\/span>';\n      $(\"sw-summary-p1-label\").textContent = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-summary-p2-label\").textContent = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) + \" \" + TXT.p2Badge;\n      $(\"sw-rangeHint-paar\").textContent = hint;\n      renderMarkers(\"p1\"); renderMarkers(\"p2\");\n    } else {\n      const person = state.persons.solo;\n      person.amount = ori.base;\n      $(\"sw-amount-solo\").value = 50;\n      $(\"sw-amountInput-solo\").value = ori.base;\n      $(\"sw-rangeHint-solo\").textContent = hint;\n      renderMarkers(\"solo\");\n    }\n    refreshSummary();\n  }\n  \/\/ \u2500\u2500 Rabattlogik \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Zuerst wird der fixe App-Rabatt vom gewaehlten Betrag abgezogen, danach der\n  \/\/ prozentuale Rabatt auf den verbleibenden Betrag. Beide werden separat gezeigt.\n  function getPercentDiscountCandidate(person, isPaarP2) {\n    if (isPaarP2) return { value: DISCOUNT_PAAR_P2, label: TXT.discP2 };\n    const candidates = [];\n    if (isWiederholer(person)) candidates.push({ value: DISCOUNT_WIEDERHOLER, label: TXT.discWiederholer });\n    if (person.statusType === \"schueler\") candidates.push({ value: DISCOUNT_SCHUELER, label: TXT.discSchueler });\n    if (person.statusType === \"student\")  candidates.push({ value: DISCOUNT_STUDENT,  label: TXT.discStudent });\n    if (!candidates.length) return null;\n    return candidates.reduce((best, c) => c.value > best.value ? c : best, candidates[0]);\n  }\n  function getDiscounts(person, isPaarP2) {\n    const discounts = [];\n    let remaining = Math.round(person.amount);\n    if (isAppOnly()) {\n      const appDisc = Math.min(DISCOUNT_APP_FIXED, remaining);\n      discounts.push({ type: \"fixed\", value: DISCOUNT_APP_FIXED, label: TXT.discApp, amountEuro: appDisc });\n      remaining -= appDisc;\n    }\n    const pct = getPercentDiscountCandidate(person, isPaarP2);\n    if (pct) {\n      const pctDisc = Math.round(remaining * pct.value);\n      discounts.push({ type: \"pct\", value: pct.value, label: pct.label, amountEuro: pctDisc });\n      remaining -= pctDisc;\n    }\n    return { discounts, finalAmount: Math.max(0, remaining) };\n  }\n  function buildStatusOptionValue(person, isPaar) {\n    const vals = [];\n    if (isPaar) vals.push(STATUS_LABEL.paar);\n    if (isAppOnly()) vals.push(STATUS_LABEL.apponly);\n    if (isWiederholer(person)) vals.push(STATUS_LABEL.wiederholer);\n    if (person.statusType === \"schueler\") vals.push(STATUS_LABEL.schueler);\n    if (person.statusType === \"student\")  vals.push(STATUS_LABEL.student);\n    \/\/ Ecwid erwartet fuer Checkbox-Optionen ein Array, nicht einen kommaseparierten String\n    return vals;\n  }\n  function refreshSummary() {\n    if (state.form === \"paar\") refreshSummaryPaar();\n    else refreshSummarySolo();\n  }\n  function renderDiscountRows(containerId, discounts) {\n    const container = $(containerId);\n    container.innerHTML = \"\";\n    discounts.forEach(d => {\n      const row = document.createElement(\"div\");\n      row.className = \"sw-summary-row sw-summary-discount\";\n      const pctStr = d.type === \"fixed\" ? `\u2212${d.amountEuro}\u20ac` : `\u2212${Math.round(d.value * 100)}%`;\n      row.innerHTML = `<span>${d.label} (${pctStr})<\/span><span>\u2212${d.amountEuro}\u20ac<\/span>`;\n      container.appendChild(row);\n    });\n  }\n  function refreshSummarySolo() {\n    const p = state.persons.solo;\n    const { discounts, finalAmount } = getDiscounts(p, false);\n    $(\"sw-solo-chosen\").textContent = Math.round(p.amount) + \"\u20ac\";\n    renderDiscountRows(\"sw-solo-discounts\", discounts);\n    const shipLine = $(\"sw-shipping-line-solo\");\n    const shippingSolo = (hasPhysicalShipment(false) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingSolo ? \"flex\" : \"none\";\n    $(\"sw-solo-total\").textContent = finalAmount + shippingSolo;\n  }\n  function refreshSummaryPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    function fill(prefix, person, isPaarP2) {\n      const { discounts, finalAmount } = getDiscounts(person, isPaarP2);\n      $(`sw-${prefix}-chosen`).textContent = Math.round(person.amount) + \"\u20ac\";\n      renderDiscountRows(`sw-${prefix}-discounts`, discounts);\n      $(`sw-${prefix}-subtotal`).textContent = finalAmount + \"\u20ac\";\n      return finalAmount;\n    }\n    const f1 = fill(\"p1\", p1, false);\n    const f2 = fill(\"p2\", p2, true);\n    const shipLine = $(\"sw-shipping-line-paar\");\n    const shippingPaar = (hasPhysicalShipment(true) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingPaar ? \"flex\" : \"none\";\n    $(\"sw-paar-total\").textContent = f1 + f2 + shippingPaar;\n  }\n  function renderCountryList(filter) {\n    const list = $(\"sw-country-list\");\n    const q = (filter || \"\").toLowerCase().trim();\n    const filtered = q\n      ? getAllCountriesSorted().filter(c =>\n          c.name.toLowerCase().includes(q) ||\n          (c.aliases || []).some(a => a.includes(q))\n        )\n      : getAllCountriesSorted();\n    list.innerHTML = \"\";\n    if (!filtered.length) { list.innerHTML = '<div class=\"sw-country-empty\">' + TXT.noCountry + '<\/div>'; return; }\n    filtered.forEach(c => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-country-item\" + (state.country === c.code ? \" selected\" : \"\");\n      div.dataset.code = c.code;\n      div.innerHTML = `<span>${c.name}<\/span><span class=\"sw-country-item-cat\">${TXT.catBadge}${c.cat.replace(\"cat\",\"\")}<\/span>`;\n      div.addEventListener(\"click\", () => selectCountry(c.code, c.cat, c.name));\n      list.appendChild(div);\n    });\n  }\n  function selectCountry(code, cat, name) {\n    state.country  = code;\n    state.category = cat;\n    $(\"sw-country\").value = code;\n    $(\"sw-country-search\").value = name;\n    $(\"sw-country-list\").innerHTML = \"\";\n    const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[code];\n    let suffix = \"\";\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      suffix = exceptionLang\n        ? \" \" + TXT.catSuffixException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang)\n        : \" \" + TXT.catSuffixDigital;\n    }\n    $(\"sw-catText\").textContent = (TXT.catLabels[cat] || cat) + suffix;\n    \/\/ Ecwid wickelt in Russland keine Zahlungen ab. Wer Russland waehlt, wird\n    \/\/ deshalb auf die russische Anmeldeseite verwiesen - die laeuft ueber n8n\n    \/\/ und Tochka statt ueber den Shop. Der russische Wizard verweist umgekehrt\n    \/\/ zurueck, sobald dort ein anderes Land gewaehlt wird.\n    const nachRussland = (code === \"RU\");\n    $(\"sw-redirect-russia\").style.display = nachRussland ? \"block\" : \"none\";\n    $(\"sw-catInfo\").style.display         = nachRussland ? \"none\"  : \"block\";\n    setNextEnabled(\"sw-btn-country-next\", !nachRussland);\n    updateAppOnlyUI();\n  }\n  function ensureEcwidReady(timeoutMs = 12000) {\n    return new Promise((resolve, reject) => {\n      function isReady() {\n        return window.Ecwid && window.Ecwid.Cart &&\n               typeof window.Ecwid.Cart.addProduct === \"function\" &&\n               typeof window.Ecwid.Cart.clear === \"function\";\n      }\n      if (isReady()) return resolve(true);\n      let resolved = false;\n      function done() { if (!resolved) { resolved = true; setTimeout(() => resolve(true), 200); } }\n      if (window.Ecwid) { try { window.Ecwid.OnAPILoaded.add(done); } catch(e) {} }\n      const start = Date.now();\n      const t = setInterval(() => {\n        if (isReady()) { clearInterval(t); done(); }\n        else if (Date.now() - start > timeoutMs) {\n          clearInterval(t);\n          if (!resolved) { resolved = true; reject(new Error(fillPlaceholder(TXT.errEcwid, timeoutMs\/1000))); }\n        }\n      }, 200);\n    });\n  }\n  function clearCartAsync() { return new Promise(r => Ecwid.Cart.clear(() => r(true))); }\n  function addProductAsync(payload, timeoutMs = 4000) {\n    return new Promise((resolve, reject) => {\n      let done = false;\n      const t = setTimeout(() => { if (!done) { done = true; resolve({ product:null, cart:null, timedOut:true }); } }, timeoutMs);\n      Ecwid.Cart.addProduct(payload, function(success, product, cart, error) {\n        if (done) return;\n        done = true; clearTimeout(t);\n        if (success) resolve({ product, cart, timedOut:false });\n        else reject(new Error((error || TXT.errProduct) + \" | Payload: \" + JSON.stringify(payload)));\n      });\n    });\n  }\n  function goToCart() { window.location.href = SHOP_CART_URL; }\n  function buildN8nPayload() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const d1 = getDiscounts(p1, false);\n    const d2 = getDiscounts(p2, true);\n    return {\n      sprache: state.commLang, land: state.country, kategorie: state.category, appOnly: isAppOnly(),\n      person1: { vorname: p1.vorname, nachname: p1.nachname, email: p1.email },\n      person2: { vorname: p2.vorname, nachname: p2.nachname, email: p2.email },\n      betraege: {\n        person1: { gewaehlt: Math.round(p1.amount), rabatte: d1.discounts, endbetrag: d1.finalAmount },\n        person2: { gewaehlt: Math.round(p2.amount), rabatte: d2.discounts, endbetrag: d2.finalAmount },\n        gesamt: d1.finalAmount + d2.finalAmount\n      },\n      timestamp: new Date().toISOString()\n    };\n  }\n  async function sendToN8n(payload) {\n    if (!N8N_WEBHOOK_URL || N8N_WEBHOOK_URL.indexOf(\"HIER_\") === 0) {\n      throw new Error(\"Die n8n-Webhook-URL ist im Code noch nicht eingetragen.\");\n    }\n    let res;\n    try {\n      res = await fetch(N8N_WEBHOOK_URL, { method:\"POST\", headers:{\"Content-Type\":\"application\/json\"}, body:JSON.stringify(payload) });\n    } catch (e) {\n      throw new Error(TXT.errNetwork);\n    }\n    if (!res.ok) throw new Error(fillPlaceholder(TXT.errSubmit, res.status));\n    return true;\n  }\n  async function goCheckoutSolo() {\n    clearErrorIn(\"sw-error-amount-solo\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-solo\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-solo\", TXT.errLang);\n    const p = state.persons.solo;\n    const finalAmount = getDiscounts(p, false).finalAmount;\n    const participationProductId = getParticipationProductId(false);\n    setCheckoutLoading(\"sw-btn-checkout-solo\", true);\n    try {\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const statusValue = buildStatusOptionValue(p, false);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: finalAmount, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-solo\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-solo\", false);\n    }\n  }\n  async function goCheckoutPaar() {\n    clearErrorIn(\"sw-error-amount-paar\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-paar\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-paar\", TXT.errLang);\n    if (!validateDetailsPaar()) return showErrorIn(\"sw-error-amount-paar\", TXT.errPaarFields);\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const participationProductId = getParticipationProductId(true);\n    setCheckoutLoading(\"sw-btn-checkout-paar\", true);\n    try {\n      const payload = buildN8nPayload();\n      await sendToN8n(payload);\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const total = getDiscounts(p1, false).finalAmount + getDiscounts(p2, true).finalAmount;\n      const statusValue = buildStatusOptionValue(p1, true);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: total, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-paar\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-paar\", false);\n    }\n  }\n  function validateLangform() {\n    const ok = !!state.commLang && !!state.form && state.form !== \"gruppe\";\n    setNextEnabled(\"sw-btn-langform-next\", ok);\n  }\n  function validateDetailsSolo() {\n    const ok = !!$(\"sw-solo-status\").value;\n    setNextEnabled(\"sw-btn-details-solo-next\", ok);\n    return ok;\n  }\n  function validateDetailsPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const emailOk = s => \/\\S+@\\S+\\.\\S+\/.test(s || \"\");\n    const ok = !!(p1.vorname && p1.vorname.trim()) && !!(p1.nachname && p1.nachname.trim()) && emailOk(p1.email) &&\n               !!(p2.vorname && p2.vorname.trim()) && !!(p2.nachname && p2.nachname.trim()) && emailOk(p2.email);\n    setNextEnabled(\"sw-btn-details-paar-next\", ok);\n    return ok;\n  }\n  function bindNameFields(key) {\n    [\"vorname\",\"nachname\",\"email\"].forEach(f => {\n      $(`sw-${key}-${f}`).addEventListener(\"input\", e => {\n        getPerson(key)[f] = e.target.value;\n        validateDetailsPaar();\n      });\n    });\n  }\n  $(\"sw-btn-welcome-next\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-country-back\").addEventListener(\"click\", () => showStep(1));\n  $(\"sw-btn-country-next\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-country-search\").addEventListener(\"input\",  e => renderCountryList(e.target.value));\n  $(\"sw-country-search\").addEventListener(\"focus\",  () => renderCountryList($(\"sw-country-search\").value));\n  shadow.addEventListener(\"click\", e => {\n    if (!e.target.closest(\"#sw-country-list\") && !e.target.closest(\"#sw-country-search\")) {\n      $(\"sw-country-list\").innerHTML = \"\";\n    }\n  });\n  $(\"sw-commLang\").addEventListener(\"change\", e => {\n    state.commLang = e.target.value;\n    validateLangform();\n    updateAppOnlyUI();\n    refreshSummary();\n  });\n  shadow.querySelectorAll(\".sw-choice-card\").forEach(card => {\n    card.addEventListener(\"click\", () => {\n      state.form = card.dataset.form;\n      shadow.querySelectorAll(\".sw-choice-card\").forEach(c => c.classList.toggle(\"active\", c === card));\n      const isGruppe = state.form === \"gruppe\";\n      $(\"sw-gruppe-note\").style.display = isGruppe ? \"block\" : \"none\";\n      $(\"sw-btn-langform-next\").style.display   = isGruppe ? \"none\" : \"inline-block\";\n      $(\"sw-btn-gruppe-redirect\").style.display = isGruppe ? \"inline-block\" : \"none\";\n      clearErrorIn(\"sw-error-langform\");\n      validateLangform();\n    });\n  });\n  $(\"sw-btn-gruppe-redirect\").addEventListener(\"click\", () => { window.location.href = getGroupRedirectUrl(); });\n  $(\"sw-btn-langform-back\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-langform-next\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-details-solo-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-solo-status\").addEventListener(\"change\", e => {\n    const val = e.target.value;\n    const person = state.persons.solo;\n    person.statusType  = val;\n    person.wiederholer = val === \"wiederholer\";\n    clearErrorIn(\"sw-error-details-solo\");\n    validateDetailsSolo();\n  });\n  $(\"sw-btn-details-solo-next\").addEventListener(\"click\", () => {\n    if (validateDetailsSolo()) { applyRangeForForm(); showStep(5); }\n    else showErrorIn(\"sw-error-details-solo\", TXT.errSelectFirst);\n  });\n  $(\"sw-btn-details-paar-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-btn-details-paar-next\").addEventListener(\"click\", () => {\n    if (validateDetailsPaar()) { applyRangeForForm(); showStep(5); }\n  });\n  $(\"sw-btn-amount-solo-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-amount-paar-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-checkout-solo\").addEventListener(\"click\", goCheckoutSolo);\n  $(\"sw-btn-checkout-paar\").addEventListener(\"click\", goCheckoutPaar);\n  bindNameFields(\"p1\");\n  bindNameFields(\"p2\");\n  wireAmountControl(\"solo\");\n  wireAmountControl(\"p1\");\n  wireAmountControl(\"p2\");\n  showStep(1);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8dac5fb e-flex e-con-boxed e-con e-parent\" data-id=\"8dac5fb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a32da99 elementor-widget elementor-widget-html\" data-id=\"a32da99\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Tinos:ital,wght@0,400;0,700;1,400&display=swap\" rel=\"stylesheet\">\n<style>\n  .ecwid-ProductBrowser,\n  .ecwid-productbrowser,\n  div[id^=\"my-store\"],\n  .ecwid:not(#sw-host-fa) {\n    visibility: hidden !important;\n    height: 0 !important;\n    max-height: 0 !important;\n    overflow: hidden !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    position: absolute !important;\n    pointer-events: none !important;\n  }\n<\/style>\n<div id=\"sw-overlay-fa\" style=\"display:none; position:fixed; inset:0; background:rgba(245,250,246,0.92); z-index:99999; flex-direction:column; align-items:center; justify-content:center; gap:20px;\">\n  <div style=\"width:52px; height:52px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:sw-spin-fa 0.8s linear infinite;\"><\/div>\n  <div style=\"font-family:'Tinos',Georgia,serif; font-size:22px; color:#27703F;\">\u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u067e\u0631\u062f\u0627\u062e\u062a\u2026<\/div>\n<\/div>\n<style>\n  @keyframes sw-spin-fa { to { transform: rotate(360deg); } }\n<\/style>\n<div id=\"sw-host-fa\"><\/div>\n<script>\n(function () {\n  \/\/ \u2500\u2500 Sprach-Guard: Skript bricht sofort ab, wenn die URL nicht zu FA passt \u2500\u2500\n  const _pathMatch = window.location.pathname.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n  const _pageLang = _pathMatch ? _pathMatch[1] : \"de\";\n  if (_pageLang !== \"fa\") {\n    document.getElementById(\"sw-host-fa\")?.remove();\n    document.getElementById(\"sw-overlay-fa\")?.remove();\n    return;\n  }\n  const OVERLAY_ID    = \"sw-overlay-fa\";\n  \/\/ Bewusst die englische Shop-Seite statt \/fa\/: Der Ecwid-Checkout stellt sich\n  \/\/ in der RTL-Fassung nicht brauchbar dar. Die Anmeldung selbst bleibt in der\n  \/\/ Landessprache, nur der Bezahlvorgang laeuft auf Englisch.\n  const SHOP_CART_URL = \"https:\/\/spiritual-activity.org\/en\/store\/cart\";\n  const N8N_WEBHOOK_URL = \"https:\/\/n8n.spiritual-activity.org\/webhook\/registration-be\";\n  function getGroupRedirectUrl() {\n    const path = window.location.pathname;\n    \/\/ Erkennt Sprachpraefixe wie \/en\/, \/es\/, \/it\/, \/ru\/ am Anfang des Pfads.\n    \/\/ Deutsch ist die Standardsprache ohne Praefix.\n    const match = path.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n    const langPrefix = (match && match[1] !== \"de\") ? \"\/\" + match[1] : \"\";\n    return \"https:\/\/spiritual-activity.org\" + langPrefix + \"\/gruppen-anmeldung\";\n  }\n  const PRODUCTS = {\n    cat1: 864374030,\n    cat2: 844860366,\n    cat3: 844907264,\n    cat4: 844907265\n  };\n\n  \/\/ Versandfreie Digital-Produkte fuer alle Faelle, in denen nichts verschickt\n  \/\/ wird: rein digitale Teilnahme und Wiederholer (kein neues Kartenset).\n  const PRODUCTS_APPONLY = {\n    cat1: 863272251,\n    cat2: 863265753,\n    cat3: 863272252,\n    cat4: 863265754\n  };\n  const RANGES = {\n    cat1: { min: 160, max: 800 },\n    cat2: { min: 105, max: 700 },\n    cat3: { min:  75, max: 600 },\n    cat4: { min:  45, max: 500 }\n  };\n  const ORIENTIERUNG = {\n    cat1: { reduced: 160, base: 360, support: 580 },\n    cat2: { reduced: 105, base: 240, support: 460 },\n    cat3: { reduced:  75, base: 160, support: 340 },\n    cat4: { reduced:  45, base: 105, support: 220 }\n  };\n  const DISCOUNT_WIEDERHOLER = 0.30;\n  const DISCOUNT_SCHUELER    = 0.50;\n  const DISCOUNT_STUDENT     = 0.25;\n  const DISCOUNT_PAAR_P2     = 0.50;\n  const DISCOUNT_APP_FIXED   = 35;\n  \/\/ Versandpauschale ausserhalb EU+CH. Ecwid kassiert sie, der Wizard rechnet sie in die Anzeige-Summe ein.\n  const SHIPPING_COST   = 15;\n  \/\/ Sprachschluessel bleiben deutsch \u2013 sie sind die Werte im Ecwid-Shop.\n  const APP_ONLY_LANGS = new Set([\"Arabisch\",\"Farsi\",\"Ukrainisch\",\"Bulgarisch\",\"Franz\u00f6sisch\"]);\n  const APP_ONLY_CATEGORY_EXCEPTION_LANG = { CN: \"Chinesisch\" };\n  const EU_PLUS_CH = new Set([\n    \"AT\",\"BE\",\"BG\",\"CY\",\"CZ\",\"DE\",\"DK\",\"EE\",\"ES\",\"FI\",\"FR\",\"GR\",\"HR\",\n    \"HU\",\"IE\",\"IT\",\"LT\",\"LU\",\"LV\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SE\",\"SI\",\"SK\",\"CH\"\n  ]);\n  \/\/ Ersetzt den Platzhalter in Klammern (z.B. [Code], [X], [\u06a9\u062f]) durch den Wert\n  function fillPlaceholder(text, value) {\n    return String(text).replace(\/[\\[\uff3b][^\\]\uff3d]*[\\]\uff3d]\/, value);\n  }\n  function needsShipping(countryCode) {\n    return countryCode && !EU_PLUS_CH.has(countryCode);\n  }\n  \/\/ \u2500\u2500 Uebersetzte Texte \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const TXT = {\n      \"catBadge\": \"\u062f\u0633\u062a\u0647 \",\n      \"catLabels\": {\n          \"cat1\": \"\u062f\u0633\u062a\u0647 \u0642\u06cc\u0645\u062a \u06f1\",\n          \"cat2\": \"\u062f\u0633\u062a\u0647 \u0642\u06cc\u0645\u062a \u06f2\",\n          \"cat3\": \"\u062f\u0633\u062a\u0647 \u0642\u06cc\u0645\u062a \u06f3\",\n          \"cat4\": \"\u062f\u0633\u062a\u0647 \u0642\u06cc\u0645\u062a \u06f4\"\n      },\n      \"catSuffixDigital\": \"\u2013 \u0641\u0642\u0637 \u0634\u0631\u06a9\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a\",\n      \"catSuffixException\": \"\u2013 \u0627\u0631\u0633\u0627\u0644 \u062f\u0631 \u0645\u0646\u0637\u0642\u0647 \u0634\u0645\u0627 \u0641\u0642\u0637 \u0628\u0627 \u0632\u0628\u0627\u0646 \u0645\u0634\u0627\u0631\u06a9\u062a {X} \u0627\u0645\u06a9\u0627\u0646\u200c\u067e\u0630\u06cc\u0631 \u0627\u0633\u062a\u060c \u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u0641\u0642\u0637 \u0634\u0631\u06a9\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644\",\n      \"noCountry\": \"\u06a9\u0634\u0648\u0631\u06cc \u06cc\u0627\u0641\u062a \u0646\u0634\u062f\",\n      \"markerReduced\": \"\u0647\u0632\u06cc\u0646\u0647 \u06a9\u0627\u0647\u0634\u200c\u06cc\u0627\u0641\u062a\u0647\",\n      \"markerBase\": \"\u0647\u0632\u06cc\u0646\u0647 \u067e\u0627\u06cc\u0647\",\n      \"markerSupport\": \"\u0647\u0632\u06cc\u0646\u0647 \u062d\u0645\u0627\u06cc\u062a\u06cc\",\n      \"hintLong\": \"\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0647\u0632\u06cc\u0646\u0647\u200c\u0627\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0634\u0645\u0627 \u0645\u0646\u0627\u0633\u0628 \u0627\u0633\u062a \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f. \u0628\u0627 \u06cc\u06a9 \u0647\u0632\u06cc\u0646\u0647 \u062d\u0645\u0627\u06cc\u062a\u06cc\u060c \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0634\u0631\u06a9\u062a \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0641\u0631\u0627\u062f\u06cc \u0628\u0627 \u0627\u0645\u06a9\u0627\u0646\u0627\u062a \u0645\u0627\u0644\u06cc \u0645\u062d\u062f\u0648\u062f \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f \u0648 \u0628\u0647 \u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u0628\u06cc\u0634\u062a\u0631 \u0628\u0647 \u062c\u0647\u0627\u0646 \u0628\u0631\u0633\u0627\u0646\u06cc\u0645.\",\n      \"hintPaar\": \"\u0647\u0631 \u0641\u0631\u062f \u0647\u0632\u06cc\u0646\u0647 \u062e\u0648\u062f \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0646\u0641\u0631 \u06f2 \u0628\u0647\u200c\u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06f5\u06f0\u066a \u062a\u062e\u0641\u06cc\u0641 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f.\",\n      \"person1\": \"\u0646\u0641\u0631 \u06f1\",\n      \"person2\": \"\u0646\u0641\u0631 \u06f2\",\n      \"p2Badge\": \"(\u2212\u06f5\u06f0\u066a)\",\n      \"discWiederholer\": \"\u062a\u06a9\u0631\u0627\u0631\u06a9\u0646\u0646\u062f\u0647\",\n      \"discSchueler\": \"\u062f\u0627\u0646\u0634\u200c\u0622\u0645\u0648\u0632\u0627\u0646\",\n      \"discStudent\": \"\u0622\u0645\u0648\u0632\u0634\/\u062a\u062d\u0635\u06cc\u0644\",\n      \"discP2\": \"\u062a\u062e\u0641\u06cc\u0641 \u0646\u0641\u0631 \u06f2\",\n      \"discApp\": \"\u0634\u0631\u06a9\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644\",\n      \"reasonRegion\": \"\u0627\u0631\u0633\u0627\u0644 \u062f\u0631 \u0645\u0646\u0637\u0642\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646\u200c\u067e\u0630\u06cc\u0631 \u0646\u06cc\u0633\u062a. \u0634\u0645\u0627 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0634\u0631\u06a9\u062a \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f. \u062a\u062e\u0641\u06cc\u0641 \u0628\u0647\u200c\u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062f\u0631 \u062e\u0644\u0627\u0635\u0647 \u0645\u062d\u0627\u0633\u0628\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.\",\n      \"reasonRussian\": \"\u0628\u0631\u0627\u06cc \u0631\u0648\u0633\u06cc\u200c\u0632\u0628\u0627\u0646\u0627\u0646 \u062e\u0627\u0631\u062c \u0627\u0632 \u0631\u0648\u0633\u06cc\u0647\u060c \u0641\u0642\u0637 \u0646\u0633\u062e\u0647 \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0645\u0648\u062c\u0648\u062f \u0627\u0633\u062a. \u062a\u062e\u0641\u06cc\u0641 \u0628\u0647\u200c\u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062f\u0631 \u062e\u0644\u0627\u0635\u0647 \u0645\u062d\u0627\u0633\u0628\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.\",\n      \"reasonLanguage\": \"\u062f\u0631 \u0627\u06cc\u0646 \u0632\u0628\u0627\u0646 \u0641\u0642\u0637 \u0646\u0633\u062e\u0647 \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0645\u0648\u062c\u0648\u062f \u0627\u0633\u062a. \u062a\u062e\u0641\u06cc\u0641 \u0628\u0647\u200c\u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062f\u0631 \u062e\u0644\u0627\u0635\u0647 \u0645\u062d\u0627\u0633\u0628\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.\",\n      \"reasonException\": \"\u0627\u0631\u0633\u0627\u0644 \u062f\u0631 \u0645\u0646\u0637\u0642\u0647 \u0634\u0645\u0627 \u0641\u0642\u0637 \u0628\u0627 \u0632\u0628\u0627\u0646 \u0645\u0634\u0627\u0631\u06a9\u062a {X} \u0627\u0645\u06a9\u0627\u0646\u200c\u067e\u0630\u06cc\u0631 \u0627\u0633\u062a. \u0634\u0645\u0627 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0634\u0631\u06a9\u062a \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f. \u062a\u062e\u0641\u06cc\u0641 \u0628\u0647\u200c\u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062f\u0631 \u062e\u0644\u0627\u0635\u0647 \u0645\u062d\u0627\u0633\u0628\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.\",\n      \"thanksTitle\": \"\u0628\u0633\u06cc\u0627\u0631 \u0633\u067e\u0627\u0633\u06af\u0632\u0627\u0631\u06cc\u0645!\",\n      \"thanksLine1\": \"\u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u067e\u0631\u062f\u0627\u062e\u062a\u2026\",\n      \"thanksLine2\": \"\u0628\u0647\u200c\u0632\u0648\u062f\u06cc \u0647\u062f\u0627\u06cc\u062a \u062e\u0648\u0627\u0647\u06cc\u062f \u0634\u062f\u2026\",\n      \"preparing\": \"\u062f\u0631 \u062d\u0627\u0644 \u0622\u0645\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc\u2026\",\n      \"errSelectFirst\": \"\u0644\u0637\u0641\u0627\u064b \u0627\u0628\u062a\u062f\u0627 \u0627\u0646\u062a\u062e\u0627\u0628\u06cc \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f.\",\n      \"errPaarFields\": \"\u0644\u0637\u0641\u0627\u064b \u0628\u0647 \u0639\u0642\u0628 \u0628\u0631\u06af\u0631\u062f\u06cc\u062f \u0648 \u0647\u0645\u0647 \u0641\u06cc\u0644\u062f\u0647\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0647\u0631 \u062f\u0648 \u0646\u0641\u0631 \u067e\u0631 \u06a9\u0646\u06cc\u062f.\",\n      \"errCountry\": \"\u0644\u0637\u0641\u0627\u064b \u0627\u0628\u062a\u062f\u0627 \u06cc\u06a9 \u06a9\u0634\u0648\u0631 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f.\",\n      \"errLang\": \"\u0644\u0637\u0641\u0627\u064b \u0632\u0628\u0627\u0646 \u0634\u0631\u06a9\u062a \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f.\",\n      \"errNetwork\": \"\u0627\u0631\u0633\u0627\u0644 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0645\u06a9\u0646 \u0646\u0634\u062f. \u0644\u0637\u0641\u0627\u064b \u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.\",\n      \"errSubmit\": \"\u0627\u0631\u0633\u0627\u0644 \u0646\u0627\u0645\u0648\u0641\u0642 \u0628\u0648\u062f (\u062e\u0637\u0627 [\u06a9\u062f]). \u0644\u0637\u0641\u0627\u064b \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0644\u0627\u0634 \u06a9\u0646\u06cc\u062f.\",\n      \"errProduct\": \"\u0627\u0641\u0632\u0648\u062f\u0646 \u0645\u062d\u0635\u0648\u0644 \u0645\u0645\u06a9\u0646 \u0646\u0634\u062f\",\n      \"errEcwid\": \"API \u0633\u0628\u062f \u062e\u0631\u06cc\u062f Ecwid \u067e\u0633 \u0627\u0632 [X] \u062b\u0627\u0646\u06cc\u0647 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0646\u06cc\u0633\u062a.\"\n  };\n  \/\/ Anzeigename der Teilnahmesprache (Schluessel = Ecwid-Wert, deutsch)\n  const LANG_DISPLAY = {\n      \"Deutsch\": \"\u0622\u0644\u0645\u0627\u0646\u06cc\",\n      \"Englisch\": \"\u0627\u0646\u06af\u0644\u06cc\u0633\u06cc\",\n      \"Spanisch\": \"\u0627\u0633\u067e\u0627\u0646\u06cc\u0627\u06cc\u06cc\",\n      \"Franz\u00f6sisch\": \"\u0641\u0631\u0627\u0646\u0633\u0648\u06cc\",\n      \"Italienisch\": \"\u0627\u06cc\u062a\u0627\u0644\u06cc\u0627\u06cc\u06cc\",\n      \"Portugiesisch\": \"\u067e\u0631\u062a\u063a\u0627\u0644\u06cc\",\n      \"Arabisch\": \"\u0639\u0631\u0628\u06cc\",\n      \"Hebr\u00e4isch\": \"\u0639\u0628\u0631\u06cc\",\n      \"Farsi\": \"\u0641\u0627\u0631\u0633\u06cc\",\n      \"Georgisch\": \"\u06af\u0631\u062c\u06cc\",\n      \"Ukrainisch\": \"\u0627\u0648\u06a9\u0631\u0627\u06cc\u0646\u06cc\",\n      \"Niederl\u00e4ndisch\": \"\u0647\u0644\u0646\u062f\u06cc\",\n      \"T\u00fcrkisch\": \"\u062a\u0631\u06a9\u06cc\",\n      \"Russisch\": \"\u0631\u0648\u0633\u06cc\",\n      \"Chinesisch\": \"\u0686\u06cc\u0646\u06cc\",\n      \"Japanisch\": \"\u0698\u0627\u067e\u0646\u06cc\",\n      \"Koreanisch\": \"\u06a9\u0631\u0647\u200c\u0627\u06cc\"\n  };\n  \/\/ Feste Laendernamen in der Landessprache (aus CLDR), damit die Liste in\n  \/\/ jedem Browser identisch ist \u2013 unabhaengig von der Intl-Datenlage.\n  const COUNTRY_NAMES = {\n      \"AD\": \"\u0622\u0646\u062f\u0648\u0631\u0627\",\n      \"AE\": \"\u0627\u0645\u0627\u0631\u0627\u062a \u0645\u062a\u062d\u062f\u0647 \u0639\u0631\u0628\u06cc\",\n      \"AF\": \"\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646\",\n      \"AG\": \"\u0622\u0646\u062a\u06cc\u06af\u0648\u0627 \u0648 \u0628\u0627\u0631\u0628\u0648\u062f\u0627\",\n      \"AL\": \"\u0622\u0644\u0628\u0627\u0646\u06cc\",\n      \"AM\": \"\u0627\u0631\u0645\u0646\u0633\u062a\u0627\u0646\",\n      \"AO\": \"\u0622\u0646\u06af\u0648\u0644\u0627\",\n      \"AR\": \"\u0622\u0631\u0698\u0627\u0646\u062a\u06cc\u0646\",\n      \"AT\": \"\u0627\u062a\u0631\u06cc\u0634\",\n      \"AU\": \"\u0627\u0633\u062a\u0631\u0627\u0644\u06cc\u0627\",\n      \"AW\": \"\u0622\u0631\u0648\u0628\u0627\",\n      \"AZ\": \"\u0622\u0630\u0631\u0628\u0627\u06cc\u062c\u0627\u0646\",\n      \"BA\": \"\u0628\u0648\u0633\u0646\u06cc \u0648 \u0647\u0631\u0632\u06af\u0648\u06cc\u0646\",\n      \"BB\": \"\u0628\u0627\u0631\u0628\u0627\u062f\u0648\u0633\",\n      \"BD\": \"\u0628\u0646\u06af\u0644\u0627\u062f\u0634\",\n      \"BE\": \"\u0628\u0644\u0698\u06cc\u06a9\",\n      \"BF\": \"\u0628\u0648\u0631\u06a9\u06cc\u0646\u0627\u0641\u0627\u0633\u0648\",\n      \"BG\": \"\u0628\u0644\u063a\u0627\u0631\u0633\u062a\u0627\u0646\",\n      \"BH\": \"\u0628\u062d\u0631\u06cc\u0646\",\n      \"BI\": \"\u0628\u0648\u0631\u0648\u0646\u062f\u06cc\",\n      \"BJ\": \"\u0628\u0646\u06cc\u0646\",\n      \"BN\": \"\u0628\u0631\u0648\u0646\u0626\u06cc\",\n      \"BO\": \"\u0628\u0648\u0644\u06cc\u0648\u06cc\",\n      \"BR\": \"\u0628\u0631\u0632\u06cc\u0644\",\n      \"BS\": \"\u0628\u0627\u0647\u0627\u0645\u0627\",\n      \"BT\": \"\u0628\u0648\u062a\u0627\u0646\",\n      \"BW\": \"\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627\",\n      \"BY\": \"\u0628\u0644\u0627\u0631\u0648\u0633\",\n      \"BZ\": \"\u0628\u0644\u06cc\u0632\",\n      \"CA\": \"\u06a9\u0627\u0646\u0627\u062f\u0627\",\n      \"CD\": \"\u06a9\u0646\u06af\u0648 (\u06a9\u06cc\u0646\u0634\u0627\u0633\u0627)\",\n      \"CF\": \"\u062c\u0645\u0647\u0648\u0631\u06cc \u0622\u0641\u0631\u06cc\u0642\u0627\u06cc \u0645\u0631\u06a9\u0632\u06cc\",\n      \"CG\": \"\u06a9\u0646\u06af\u0648 (\u0628\u0631\u0627\u0632\u0627\u0648\u06cc\u0644)\",\n      \"CH\": \"\u0633\u0648\u0626\u06cc\u0633\",\n      \"CI\": \"\u0633\u0627\u062d\u0644 \u0639\u0627\u062c\",\n      \"CL\": \"\u0634\u06cc\u0644\u06cc\",\n      \"CM\": \"\u06a9\u0627\u0645\u0631\u0648\u0646\",\n      \"CN\": \"\u0686\u06cc\u0646\",\n      \"CO\": \"\u06a9\u0644\u0645\u0628\u06cc\u0627\",\n      \"CR\": \"\u06a9\u0627\u0633\u062a\u0627\u0631\u06cc\u06a9\u0627\",\n      \"CV\": \"\u06a9\u06cc\u067e \u0648\u0631\u062f\",\n      \"CY\": \"\u0642\u0628\u0631\u0633\",\n      \"CZ\": \"\u0686\u06a9\",\n      \"DE\": \"\u0622\u0644\u0645\u0627\u0646\",\n      \"DJ\": \"\u062c\u06cc\u0628\u0648\u062a\u06cc\",\n      \"DK\": \"\u062f\u0627\u0646\u0645\u0627\u0631\u06a9\",\n      \"DM\": \"\u062f\u0648\u0645\u06cc\u0646\u06cc\u06a9\u0627\",\n      \"DO\": \"\u062c\u0645\u0647\u0648\u0631\u06cc \u062f\u0648\u0645\u06cc\u0646\u06cc\u06a9\u0646\",\n      \"DZ\": \"\u0627\u0644\u062c\u0632\u0627\u06cc\u0631\",\n      \"EC\": \"\u0627\u06a9\u0648\u0627\u062f\u0648\u0631\",\n      \"EE\": \"\u0627\u0633\u062a\u0648\u0646\u06cc\",\n      \"EG\": \"\u0645\u0635\u0631\",\n      \"ES\": \"\u0627\u0633\u067e\u0627\u0646\u06cc\u0627\",\n      \"ET\": \"\u0627\u062a\u06cc\u0648\u067e\u06cc\",\n      \"FI\": \"\u0641\u0646\u0644\u0627\u0646\u062f\",\n      \"FJ\": \"\u0641\u06cc\u062c\u06cc\",\n      \"FM\": \"\u0645\u06cc\u06a9\u0631\u0648\u0646\u0632\u06cc\",\n      \"FR\": \"\u0641\u0631\u0627\u0646\u0633\u0647\",\n      \"GA\": \"\u06af\u0627\u0628\u0646\",\n      \"GB\": \"\u0628\u0631\u06cc\u062a\u0627\u0646\u06cc\u0627\",\n      \"GB-SCT\": \"\u0627\u0633\u06a9\u0627\u062a\u0644\u0646\u062f\",\n      \"GD\": \"\u06af\u0631\u0646\u0627\u062f\u0627\",\n      \"GE\": \"\u06af\u0631\u062c\u0633\u062a\u0627\u0646\",\n      \"GH\": \"\u063a\u0646\u0627\",\n      \"GM\": \"\u06af\u0627\u0645\u0628\u06cc\u0627\",\n      \"GN\": \"\u06af\u06cc\u0646\u0647\",\n      \"GQ\": \"\u06af\u06cc\u0646\u0647 \u0627\u0633\u062a\u0648\u0627\u06cc\u06cc\",\n      \"GR\": \"\u06cc\u0648\u0646\u0627\u0646\",\n      \"GT\": \"\u06af\u0648\u0627\u062a\u0645\u0627\u0644\u0627\",\n      \"GW\": \"\u06af\u06cc\u0646\u0647 \u0628\u06cc\u0633\u0627\u0626\u0648\",\n      \"GY\": \"\u06af\u0648\u06cc\u0627\u0646\",\n      \"HK\": \"\u0647\u0646\u06af\u200c\u06a9\u0646\u06af\",\n      \"HN\": \"\u0647\u0646\u062f\u0648\u0631\u0627\u0633\",\n      \"HR\": \"\u06a9\u0631\u0648\u0627\u0633\u06cc\",\n      \"HT\": \"\u0647\u0627\u0626\u06cc\u062a\u06cc\",\n      \"HU\": \"\u0645\u062c\u0627\u0631\u0633\u062a\u0627\u0646\",\n      \"ID\": \"\u0627\u0646\u062f\u0648\u0646\u0632\u06cc\",\n      \"IE\": \"\u0627\u06cc\u0631\u0644\u0646\u062f\",\n      \"IL\": \"\u0627\u0633\u0631\u0627\u0626\u06cc\u0644\",\n      \"IN\": \"\u0647\u0646\u062f\",\n      \"IQ\": \"\u0639\u0631\u0627\u0642\",\n      \"IR\": \"\u0627\u06cc\u0631\u0627\u0646\",\n      \"IS\": \"\u0627\u06cc\u0633\u0644\u0646\u062f\",\n      \"IT\": \"\u0627\u06cc\u062a\u0627\u0644\u06cc\u0627\",\n      \"JM\": \"\u062c\u0627\u0645\u0627\u0626\u06cc\u06a9\u0627\",\n      \"JO\": \"\u0627\u0631\u062f\u0646\",\n      \"JP\": \"\u0698\u0627\u067e\u0646\",\n      \"KE\": \"\u06a9\u0646\u06cc\u0627\",\n      \"KG\": \"\u0642\u0631\u0642\u06cc\u0632\u0633\u062a\u0627\u0646\",\n      \"KH\": \"\u06a9\u0627\u0645\u0628\u0648\u062c\",\n      \"KI\": \"\u06a9\u06cc\u0631\u06cc\u0628\u0627\u062a\u06cc\",\n      \"KM\": \"\u06a9\u0648\u0645\u0648\u0631\",\n      \"KN\": \"\u0633\u0646\u062a \u06a9\u06cc\u062a\u0633 \u0648 \u0646\u0648\u06cc\u0633\",\n      \"KR\": \"\u06a9\u0631\u0647 \u062c\u0646\u0648\u0628\u06cc\",\n      \"KW\": \"\u06a9\u0648\u06cc\u062a\",\n      \"KZ\": \"\u0642\u0632\u0627\u0642\u0633\u062a\u0627\u0646\",\n      \"LA\": \"\u0644\u0627\u0626\u0648\u0633\",\n      \"LB\": \"\u0644\u0628\u0646\u0627\u0646\",\n      \"LC\": \"\u0633\u0646\u062a \u0644\u0648\u0633\u06cc\u0627\",\n      \"LI\": \"\u0644\u06cc\u062e\u062a\u0646\u200c\u0627\u0634\u062a\u0627\u06cc\u0646\",\n      \"LK\": \"\u0633\u0631\u06cc\u200c\u0644\u0627\u0646\u06a9\u0627\",\n      \"LR\": \"\u0644\u06cc\u0628\u0631\u06cc\u0627\",\n      \"LS\": \"\u0644\u0633\u0648\u062a\u0648\",\n      \"LT\": \"\u0644\u06cc\u062a\u0648\u0627\u0646\u06cc\",\n      \"LU\": \"\u0644\u0648\u06a9\u0632\u0627\u0645\u0628\u0648\u0631\u06af\",\n      \"LV\": \"\u0644\u062a\u0648\u0646\u06cc\",\n      \"LY\": \"\u0644\u06cc\u0628\u06cc\",\n      \"MA\": \"\u0645\u0631\u0627\u06a9\u0634\",\n      \"MD\": \"\u0645\u0648\u0644\u062f\u0627\u0648\u06cc\",\n      \"ME\": \"\u0645\u0648\u0646\u062a\u0647\u200c\u0646\u06af\u0631\u0648\",\n      \"MG\": \"\u0645\u0627\u062f\u0627\u06af\u0627\u0633\u06a9\u0627\u0631\",\n      \"MH\": \"\u062c\u0632\u0627\u06cc\u0631 \u0645\u0627\u0631\u0634\u0627\u0644\",\n      \"MK\": \"\u0645\u0642\u062f\u0648\u0646\u06cc\u0647 \u0634\u0645\u0627\u0644\u06cc\",\n      \"ML\": \"\u0645\u0627\u0644\u06cc\",\n      \"MM\": \"\u0645\u06cc\u0627\u0646\u0645\u0627\u0631\",\n      \"MN\": \"\u0645\u063a\u0648\u0644\u0633\u062a\u0627\u0646\",\n      \"MO\": \"\u0645\u0627\u06a9\u0627\u0626\u0648\",\n      \"MR\": \"\u0645\u0648\u0631\u06cc\u062a\u0627\u0646\u06cc\",\n      \"MT\": \"\u0645\u0627\u0644\u062a\",\n      \"MU\": \"\u0645\u0648\u0631\u06cc\u0633\",\n      \"MV\": \"\u0645\u0627\u0644\u062f\u06cc\u0648\",\n      \"MW\": \"\u0645\u0627\u0644\u0627\u0648\u06cc\",\n      \"MX\": \"\u0645\u06a9\u0632\u06cc\u06a9\",\n      \"MY\": \"\u0645\u0627\u0644\u0632\u06cc\",\n      \"MZ\": \"\u0645\u0648\u0632\u0627\u0645\u0628\u06cc\u06a9\",\n      \"NA\": \"\u0646\u0627\u0645\u06cc\u0628\u06cc\u0627\",\n      \"NE\": \"\u0646\u06cc\u062c\u0631\",\n      \"NG\": \"\u0646\u06cc\u062c\u0631\u06cc\u0647\",\n      \"NI\": \"\u0646\u06cc\u06a9\u0627\u0631\u0627\u06af\u0648\u0626\u0647\",\n      \"NL\": \"\u0647\u0644\u0646\u062f\",\n      \"NO\": \"\u0646\u0631\u0648\u0698\",\n      \"NP\": \"\u0646\u067e\u0627\u0644\",\n      \"NR\": \"\u0646\u0627\u0626\u0648\u0631\u0648\",\n      \"NZ\": \"\u0646\u06cc\u0648\u0632\u06cc\u0644\u0646\u062f\",\n      \"OM\": \"\u0639\u0645\u0627\u0646\",\n      \"PA\": \"\u067e\u0627\u0646\u0627\u0645\u0627\",\n      \"PE\": \"\u067e\u0631\u0648\",\n      \"PG\": \"\u067e\u0627\u067e\u0648\u0622 \u06af\u06cc\u0646\u0647 \u0646\u0648\",\n      \"PH\": \"\u0641\u06cc\u0644\u06cc\u067e\u06cc\u0646\",\n      \"PK\": \"\u067e\u0627\u06a9\u0633\u062a\u0627\u0646\",\n      \"PL\": \"\u0644\u0647\u0633\u062a\u0627\u0646\",\n      \"PR\": \"\u067e\u0648\u0631\u062a\u0648\u0631\u06cc\u06a9\u0648\",\n      \"PS\": \"\u0641\u0644\u0633\u0637\u06cc\u0646\",\n      \"PT\": \"\u067e\u0631\u062a\u063a\u0627\u0644\",\n      \"PW\": \"\u067e\u0627\u0644\u0627\u0626\u0648\",\n      \"PY\": \"\u067e\u0627\u0631\u0627\u06af\u0648\u0626\u0647\",\n      \"QA\": \"\u0642\u0637\u0631\",\n      \"RO\": \"\u0631\u0648\u0645\u0627\u0646\u06cc\",\n      \"RS\": \"\u0635\u0631\u0628\u0633\u062a\u0627\u0646\",\n      \"RU\": \"\u0631\u0648\u0633\u06cc\u0647\",\n      \"RW\": \"\u0631\u0648\u0627\u0646\u062f\u0627\",\n      \"SA\": \"\u0639\u0631\u0628\u0633\u062a\u0627\u0646 \u0633\u0639\u0648\u062f\u06cc\",\n      \"SB\": \"\u062c\u0632\u0627\u06cc\u0631 \u0633\u0644\u06cc\u0645\u0627\u0646\",\n      \"SC\": \"\u0633\u06cc\u0634\u0644\",\n      \"SD\": \"\u0633\u0648\u062f\u0627\u0646\",\n      \"SE\": \"\u0633\u0648\u0626\u062f\",\n      \"SG\": \"\u0633\u0646\u06af\u0627\u067e\u0648\u0631\",\n      \"SI\": \"\u0627\u0633\u0644\u0648\u0648\u0646\u06cc\",\n      \"SK\": \"\u0627\u0633\u0644\u0648\u0627\u06a9\u06cc\",\n      \"SL\": \"\u0633\u06cc\u0631\u0627\u0644\u0626\u0648\u0646\",\n      \"SM\": \"\u0633\u0627\u0646 \u0645\u0627\u0631\u06cc\u0646\u0648\",\n      \"SN\": \"\u0633\u0646\u06af\u0627\u0644\",\n      \"SO\": \"\u0633\u0648\u0645\u0627\u0644\u06cc\",\n      \"SR\": \"\u0633\u0648\u0631\u06cc\u0646\u0627\u0645\",\n      \"SS\": \"\u0633\u0648\u062f\u0627\u0646 \u062c\u0646\u0648\u0628\u06cc\",\n      \"ST\": \"\u0633\u0627\u0626\u0648\u062a\u0648\u0645\u0647 \u0648 \u067e\u0631\u06cc\u0646\u0633\u06cc\u067e\",\n      \"SV\": \"\u0627\u0644\u0633\u0627\u0644\u0648\u0627\u062f\u0648\u0631\",\n      \"SZ\": \"\u0627\u0633\u0648\u0627\u062a\u06cc\u0646\u06cc\",\n      \"TD\": \"\u0686\u0627\u062f\",\n      \"TG\": \"\u062a\u0648\u06af\u0648\",\n      \"TH\": \"\u062a\u0627\u06cc\u0644\u0646\u062f\",\n      \"TJ\": \"\u062a\u0627\u062c\u06cc\u06a9\u0633\u062a\u0627\u0646\",\n      \"TL\": \"\u062a\u06cc\u0645\u0648\u0631 \u0634\u0631\u0642\u06cc\",\n      \"TM\": \"\u062a\u0631\u06a9\u0645\u0646\u0633\u062a\u0627\u0646\",\n      \"TN\": \"\u062a\u0648\u0646\u0633\",\n      \"TO\": \"\u062a\u0648\u0646\u06af\u0627\",\n      \"TR\": \"\u062a\u0631\u06a9\u06cc\u0647\",\n      \"TT\": \"\u062a\u0631\u06cc\u0646\u06cc\u062f\u0627\u062f \u0648 \u062a\u0648\u0628\u0627\u06af\u0648\",\n      \"TV\": \"\u062a\u0648\u0648\u0627\u0644\u0648\",\n      \"TW\": \"\u062a\u0627\u06cc\u0648\u0627\u0646\",\n      \"TZ\": \"\u062a\u0627\u0646\u0632\u0627\u0646\u06cc\u0627\",\n      \"UA\": \"\u0627\u0648\u06a9\u0631\u0627\u06cc\u0646\",\n      \"UG\": \"\u0627\u0648\u06af\u0627\u0646\u062f\u0627\",\n      \"US\": \"\u0627\u06cc\u0627\u0644\u0627\u062a \u0645\u062a\u062d\u062f\u0647 \u0622\u0645\u0631\u06cc\u06a9\u0627\",\n      \"UY\": \"\u0627\u0631\u0648\u06af\u0648\u0626\u0647\",\n      \"UZ\": \"\u0627\u0632\u0628\u06a9\u0633\u062a\u0627\u0646\",\n      \"VC\": \"\u0633\u0646\u062a \u0648\u06cc\u0646\u0633\u0646\u062a \u0648 \u06af\u0631\u0646\u0627\u062f\u06cc\u0646\u200c\u0647\u0627\",\n      \"VE\": \"\u0648\u0646\u0632\u0648\u0626\u0644\u0627\",\n      \"VN\": \"\u0648\u06cc\u062a\u0646\u0627\u0645\",\n      \"VU\": \"\u0648\u0627\u0646\u0648\u0627\u062a\u0648\",\n      \"WS\": \"\u0633\u0627\u0645\u0648\u0622\",\n      \"XK\": \"\u06a9\u0648\u0632\u0648\u0648\",\n      \"YE\": \"\u06cc\u0645\u0646\",\n      \"ZA\": \"\u0622\u0641\u0631\u06cc\u0642\u0627\u06cc \u062c\u0646\u0648\u0628\u06cc\",\n      \"ZM\": \"\u0632\u0627\u0645\u0628\u06cc\u0627\",\n      \"ZW\": \"\u0632\u06cc\u0645\u0628\u0627\u0628\u0648\u0647\"\n  };\n\n  \/\/ \u2500\u2500 Zusaetzliche Suchbegriffe (Aliasse) je Land \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Beeinflusst NUR die Suche, nicht den angezeigten Namen. Alles klein schreiben.\n  \/\/ Wichtig fuer FA: lateinische Schreibweisen, damit die Suche auch mit\n  \/\/ umgeschalteter Tastatur funktioniert.\n  const COUNTRY_SEARCH_ALIASES = {\n      \"US\": [\"\u0622\u0645\u0631\u06cc\u06a9\u0627\", \"\u0627\u0645\u0631\u06cc\u06a9\u0627\", \"\u0627\u06cc\u0627\u0644\u0627\u062a \u0645\u062a\u062d\u062f\u0647\", \"usa\", \"america\", \"united states of america\", \"united states\"],\n      \"GB\": [\"\u0627\u0646\u06af\u0644\u06cc\u0633\", \"\u0627\u0646\u06af\u0644\u0633\u062a\u0627\u0646\", \"\u0628\u0631\u06cc\u062a\u0627\u0646\u06cc\u0627\", \"uk\", \"england\", \"britain\", \"great britain\", \"united kingdom\"],\n      \"GB-SCT\": [\"\u0627\u0633\u06a9\u0627\u062a\u0644\u0646\u062f\", \"scotland\"],\n      \"KR\": [\"\u06a9\u0631\u0647 \u062c\u0646\u0648\u0628\u06cc\", \"\u06a9\u0631\u0647\", \"korea\", \"south korea\"],\n      \"NL\": [\"\u0647\u0644\u0646\u062f\", \"holland\", \"netherlands\"],\n      \"CH\": [\"\u0633\u0648\u0626\u06cc\u0633\", \"switzerland\"],\n      \"DE\": [\"\u0622\u0644\u0645\u0627\u0646\", \"\u0627\u0644\u0645\u0627\u0646\", \"deutschland\", \"germany\"],\n      \"AT\": [\"\u0627\u062a\u0631\u06cc\u0634\", \"austria\"],\n      \"CZ\": [\"\u0686\u06a9\", \"czech republic\", \"czechia\"],\n      \"TR\": [\"\u062a\u0631\u06a9\u06cc\u0647\", \"turkey\", \"turkiye\", \"t\u00fcrkiye\"],\n      \"RU\": [\"\u0631\u0648\u0633\u06cc\u0647\", \"russia\", \"russian federation\"],\n      \"JP\": [\"\u0698\u0627\u067e\u0646\"],\n      \"CN\": [\"\u0686\u06cc\u0646\"],\n      \"IR\": [\"\u0627\u06cc\u0631\u0627\u0646\", \"persia\", \"iran\"],\n      \"IQ\": [\"\u0639\u0631\u0627\u0642\"],\n      \"AF\": [\"\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646\"],\n      \"TJ\": [\"\u062a\u0627\u062c\u06cc\u06a9\u0633\u062a\u0627\u0646\"],\n      \"IL\": [\"\u0627\u0633\u0631\u0627\u0626\u06cc\u0644\"],\n      \"FR\": [\"\u0641\u0631\u0627\u0646\u0633\u0647\"],\n      \"IT\": [\"\u0627\u06cc\u062a\u0627\u0644\u06cc\u0627\"],\n      \"ES\": [\"\u0627\u0633\u067e\u0627\u0646\u06cc\u0627\"],\n      \"PT\": [\"\u067e\u0631\u062a\u063a\u0627\u0644\"],\n      \"BR\": [\"\u0628\u0631\u0632\u06cc\u0644\"],\n      \"MX\": [\"\u0645\u06a9\u0632\u06cc\u06a9\"],\n      \"CA\": [\"\u06a9\u0627\u0646\u0627\u062f\u0627\"],\n      \"AU\": [\"\u0627\u0633\u062a\u0631\u0627\u0644\u06cc\u0627\"],\n      \"NZ\": [\"\u0646\u06cc\u0648\u0632\u06cc\u0644\u0646\u062f\"],\n      \"IN\": [\"\u0647\u0646\u062f\"],\n      \"ZA\": [\"\u0622\u0641\u0631\u06cc\u0642\u0627\u06cc \u062c\u0646\u0648\u0628\u06cc\"],\n      \"EG\": [\"\u0645\u0635\u0631\"],\n      \"GR\": [\"\u06cc\u0648\u0646\u0627\u0646\"],\n      \"PL\": [\"\u0644\u0647\u0633\u062a\u0627\u0646\"],\n      \"UA\": [\"\u0627\u0648\u06a9\u0631\u0627\u06cc\u0646\"],\n      \"SE\": [\"\u0633\u0648\u0626\u062f\"],\n      \"NO\": [\"\u0646\u0631\u0648\u0698\"],\n      \"DK\": [\"\u062f\u0627\u0646\u0645\u0627\u0631\u06a9\"],\n      \"FI\": [\"\u0641\u0646\u0644\u0627\u0646\u062f\"],\n      \"BE\": [\"\u0628\u0644\u0698\u06cc\u06a9\"],\n      \"IE\": [\"\u0627\u06cc\u0631\u0644\u0646\u062f\"],\n      \"GE\": [\"\u06af\u0631\u062c\u0633\u062a\u0627\u0646\", \"grusia\", \"georgia\"],\n      \"PK\": [\"\u067e\u0627\u06a9\u0633\u062a\u0627\u0646\"],\n      \"AE\": [\"\u0627\u0645\u0627\u0631\u0627\u062a\", \"\u062f\u0628\u06cc\", \"uae\", \"emirates\", \"dubai\", \"united arab emirates\"],\n      \"SA\": [\"\u0639\u0631\u0628\u0633\u062a\u0627\u0646\", \"\u0639\u0631\u0628\u0633\u062a\u0627\u0646 \u0633\u0639\u0648\u062f\u06cc\"],\n      \"MM\": [\"\u0645\u06cc\u0627\u0646\u0645\u0627\u0631\", \"\u0628\u0631\u0645\u0647\", \"burma\", \"myanmar\"],\n      \"KW\": [\"\u06a9\u0648\u06cc\u062a\"],\n      \"QA\": [\"\u0642\u0637\u0631\"],\n      \"CI\": [\"ivory coast\", \"cote d'ivoire\"],\n      \"TL\": [\"east timor\", \"timor-leste\"],\n      \"SZ\": [\"swaziland\", \"eswatini\"],\n      \"MK\": [\"macedonia\", \"north macedonia\"],\n      \"MO\": [\"macao\", \"macau\"],\n      \"KP\": [\"north korea\"],\n      \"CV\": [\"cabo verde\", \"cape verde\"],\n      \"CD\": [\"dr congo\", \"drc\", \"congo kinshasa\"],\n      \"CG\": [\"congo brazzaville\"],\n      \"VA\": [\"vatican\", \"holy see\"],\n      \"LA\": [\"laos\"],\n      \"VN\": [\"vietnam\", \"viet nam\"],\n      \"HK\": [\"hong kong\"],\n      \"TW\": [\"taiwan\"],\n      \"MD\": [\"moldova\"],\n      \"BY\": [\"belarus\"]\n  };\n  const COUNTRIES = {\n    cat1: [\"CY\",\"CA\",\"FR\",\"FI\",\"BH\",\"AU\",\"AD\",\"SE\",\"DE\",\"SA\",\"AT\",\"BE\",\"HK\",\"MT\",\"IS\",\"SM\",\"NL\",\"DK\",\"TW\",\"AE\",\"US\",\"BN\",\"CH\",\"NO\",\"GY\",\"QA\",\"MO\",\"IE\",\"LU\",\"SG\",\"LI\",\"GB\",\"GB-SCT\"],\n    cat2: [\"KR\",\"ME\",\"CL\",\"TT\",\"MV\",\"UY\",\"BS\",\"OM\",\"SC\",\"MY\",\"PA\",\"TR\",\"LV\",\"GR\",\"KZ\",\"SK\",\"HU\",\"RU\",\"RO\",\"EE\",\"AW\",\"PT\",\"PR\",\"HR\",\"KW\",\"JP\",\"NZ\",\"PL\",\"IL\",\"ES\",\"LT\",\"SI\",\"CZ\",\"IT\"],\n    cat3: [\"BZ\",\"TN\",\"GT\",\"IQ\",\"ZA\",\"FJ\",\"EC\",\"LY\",\"ID\",\"VN\",\"BT\",\"DZ\",\"PE\",\"PW\",\"BW\",\"DM\",\"PY\",\"MD\",\"GQ\",\"MN\",\"VC\",\"IR\",\"GD\",\"EG\",\"CO\",\"SR\",\"TM\",\"BA\",\"BB\",\"BR\",\"AL\",\"AM\",\"GA\",\"MX\",\"AZ\",\"TH\",\"LC\",\"CN\",\"MK\",\"DO\",\"AG\",\"AR\",\"GE\",\"CR\",\"MU\",\"RS\",\"BY\",\"KN\",\"XK\",\"BG\"],\n    cat4: [\"UA\",\"BI\",\"SS\",\"CF\",\"YE\",\"MZ\",\"MW\",\"SO\",\"CD\",\"LR\",\"MG\",\"NE\",\"AF\",\"SD\",\"SB\",\"ML\",\"HT\",\"VU\",\"BF\",\"LS\",\"TD\",\"GW\",\"TG\",\"GM\",\"KI\",\"SL\",\"PG\",\"UG\",\"KM\",\"PS\",\"RW\",\"TZ\",\"ET\",\"ZM\",\"FM\",\"BJ\",\"GN\",\"TL\",\"MM\",\"SN\",\"CM\",\"TJ\",\"TV\",\"NP\",\"CG\",\"ST\",\"PK\",\"KE\",\"ZW\",\"MH\",\"HN\",\"TO\",\"CI\",\"WS\",\"GH\",\"VE\",\"KH\",\"MR\",\"KG\",\"NI\",\"NG\",\"DJ\",\"AO\",\"LA\",\"BD\",\"BO\",\"MA\",\"JO\",\"LB\",\"NR\",\"IN\",\"NA\",\"CV\",\"UZ\",\"PH\",\"SZ\",\"JM\",\"SV\",\"LK\"]\n  };\n  \/\/ \u2500\u2500 Ecwid-Optionsnamen und -werte: bleiben exakt deutsch wie im Shop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const OPT_COMM_LANG = \"In welcher Sprache nimmst Du teil?\";\n  const OPT_STATUS    = \"Trifft etwas davon auf Dich zu?\";\n  const STATUS_LABEL = {\n    paar:        \"Zu zweit (gleicher Haushalt)\",\n    schueler:    \"Sch\u00fcler:innen\",\n    student:     \"Student\",\n    wiederholer: \"Wiederholer\",\n    apponly:     \"Digitale Teilnahme (App)\"\n  };\n  \/\/ \u2500\u2500 Shadow DOM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const host = document.getElementById(\"sw-host-fa\");\n  const shadow = host.attachShadow({ mode: \"open\" });\n  const styleEl = document.createElement(\"style\");\n  styleEl.textContent = `\n    :host {\n      display: block;\n      --bg:           #F5FAF6;\n      --card:         #FFFFFF;\n      --ink:          #0C1E14;\n      --ink-muted:    #27703F;\n      --accent:       #0C1E14;\n      --accent-light: #E6F2E8;\n      --border:       #C8E0CE;\n      --radius:       16px;\n      --radius-sm:    10px;\n    }\n    @keyframes wiz-spin { to { transform: rotate(360deg); } }\n    .sw-root {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 20px; font-weight: 400; color: var(--ink);\n      background: var(--bg); padding: 32px 20px;\n      display: flex; align-items: flex-start; justify-content: center;\n    }\n    .sw-card {\n      background: var(--card); border: 1px solid var(--border);\n      border-radius: 24px; padding: 36px 32px;\n      width: 100%; max-width: 780px;\n      box-shadow: 0 4px 24px rgba(12,30,20,0.08); box-sizing: border-box;\n    }\n    @media (max-width: 480px) {\n      .sw-root { padding: 16px 10px; }\n      .sw-card { padding: 24px 16px; border-radius: 16px; }\n    }\n    .sw-progress { display: flex; gap: 8px; margin-bottom: 32px; }\n    .sw-progress-step { flex: 1; height: 4px; background: var(--border); border-radius: 999px; transition: background 0.35s; }\n    .sw-progress-step.active { background: var(--accent); }\n    .sw-progress-step.done   { background: var(--accent); opacity: 0.4; }\n    .sw-step-label { font-size: 12px; font-weight: 400; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: 10px; }\n    .sw-heading { font-size: 26px; font-weight: 500; line-height: 1.2; margin: 0 0 6px; color: var(--accent); letter-spacing: 0.01em; }\n    .sw-subtext { font-size: 18px; font-weight: 400; color: var(--ink-muted); margin: 0 0 28px; line-height: 1.6; }\n    .sw-label { display: block; font-size: 18px; font-weight: 700; margin-bottom: 6px; color: var(--ink); }\n    .sw-select, .sw-text-input {\n      width: 100%; padding: 13px 15px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg);\n      font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-select {\n      appearance: none;\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2327703F' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: right 15px center;\n      cursor: pointer;\n    }\n    .sw-select:focus, .sw-text-input:focus {\n      outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1);\n    }\n    .sw-text-input { margin-bottom: 14px; }\n    .sw-redirect { display: none; margin-top: 12px; padding: 18px 20px; border-radius: var(--radius-sm); background: #FFF8F0; border: 1px solid rgba(180,80,0,0.2); font-size: 17px; line-height: 1.8; color: var(--ink); }\n    .sw-redirect strong { display: block; margin-bottom: 8px; font-size: 17px; color: #7A3500; }\n    .sw-redirect a { color: #27703F; text-decoration: underline; }\n    .sw-infobox {\n      margin-top: 12px; padding: 15px 17px; border-radius: var(--radius-sm);\n      background: var(--accent-light); border: 1px solid rgba(12,30,20,0.15);\n      font-size: 18px; font-weight: 400; line-height: 1.5;\n    }\n    .sw-infobox-title {\n      font-weight: 700; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase;\n      color: var(--accent); margin-bottom: 3px;\n    }\n    .sw-divider { border: 0; border-top: 1px solid var(--border); margin: 30px 0 24px; }\n    .sw-choice-row { display: flex; gap: 10px; flex-wrap: wrap; }\n    .sw-choice-card {\n      flex: 1; min-width: 150px; padding: 16px 14px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      text-align: center; cursor: pointer; font-size: 17px; line-height: 1.3;\n      transition: all 0.15s; background: var(--bg); box-sizing: border-box;\n    }\n    .sw-choice-card:hover { border-color: var(--accent); }\n    .sw-choice-card.active { background: var(--accent-light); border-color: var(--accent); font-weight: 700; color: var(--accent); }\n    @media (max-width: 480px) { .sw-choice-card { min-width: 100%; } }\n    .sw-person-block { margin-bottom: 8px; }\n    .sw-person-title { font-weight: 700; font-size: 21px; color: var(--accent); margin-bottom: 16px; }\n    .sw-field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 0; }\n    @media (max-width: 480px) { .sw-field-grid { grid-template-columns: 1fr; } }\n    .sw-range-header { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 22px; }\n    .sw-range-header-label { font-weight: 700; font-size: 18px; }\n    .sw-amount-display { display: flex; align-items: baseline; gap: 3px; }\n    .sw-amount-display span { font-size: 18px; font-weight: 400; }\n    .sw-amount-input {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 36px; font-weight: 700; color: var(--ink);\n      border: 2px solid var(--border); background: var(--bg);\n      text-align: right; width: 132px; padding: 4px 12px;\n      outline: none; border-radius: var(--radius-sm);\n      transition: background 0.15s, color 0.15s, border-color 0.15s, box-shadow 0.15s;\n    }\n    .sw-amount-input:hover { border-color: var(--accent); background: var(--accent-light); }\n    .sw-amount-input:focus { border-color: var(--accent); background: var(--accent-light); color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    input[type=range].sw-range {\n      -webkit-appearance: none; width: 100%; height: 6px;\n      border-radius: 999px; background: var(--border); outline: none; cursor: pointer;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb {\n      -webkit-appearance: none; width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35);\n      cursor: pointer; transition: transform 0.15s, box-shadow 0.15s;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb:hover { transform: scale(1.08); box-shadow: 0 0 0 9px rgba(12,30,20,0.18), 0 3px 12px rgba(12,30,20,0.4); }\n    input[type=range].sw-range::-webkit-slider-thumb:active { transform: scale(1.12); }\n    input[type=range].sw-range::-moz-range-thumb {\n      width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      border: none; box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); cursor: pointer;\n    }\n    input[type=range].sw-range.sw-pulse::-webkit-slider-thumb { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    input[type=range].sw-range.sw-pulse::-moz-range-thumb    { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    @keyframes sw-thumb-pulse {\n      0%, 100% { box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); }\n      50%      { box-shadow: 0 0 0 15px rgba(12,30,20,0.05), 0 3px 10px rgba(12,30,20,0.35); }\n    }\n    .sw-range-wrap { position: relative; }\n    .sw-markers { position: relative; height: 56px; margin-bottom: 8px; margin-left: 18px; margin-right: 18px; }\n    .sw-marker {\n      position: absolute; transform: translateX(-50%);\n      display: flex; flex-direction: column; align-items: center; gap: 2px;\n      justify-content: flex-end; height: 100%; pointer-events: auto; cursor: pointer;\n    }\n    .sw-marker-tick { width: 1px; height: 10px; background: var(--border); flex-shrink: 0; }\n    .sw-marker.active .sw-marker-tick { background: var(--accent); opacity: 0.5; }\n    .sw-marker-label { font-size: 11px; font-weight: 400; color: var(--ink-muted); white-space: nowrap; line-height: 1.2; text-align: center; order: -2; }\n    .sw-marker-amount { font-size: 13px; font-weight: 700; color: var(--ink-muted); order: -1; }\n    .sw-marker.active .sw-marker-label, .sw-marker.active .sw-marker-amount { color: var(--accent); }\n    @media (max-width: 540px) {\n      .sw-markers { display: none; }\n      .sw-markers-mobile { display: flex !important; }\n    }\n    .sw-markers-mobile {\n      display: none; flex-direction: column; gap: 0;\n      margin: 12px 0 4px; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden;\n    }\n    .sw-marker-mobile {\n      display: flex; align-items: center; justify-content: space-between;\n      padding: 10px 14px; cursor: pointer; border-bottom: 1px solid var(--border);\n      transition: background 0.15s; font-family: 'Tinos', Georgia, serif;\n    }\n    .sw-marker-mobile:last-child { border-bottom: 0; }\n    .sw-marker-mobile:hover { background: var(--accent-light); }\n    .sw-marker-mobile.active { background: var(--accent-light); }\n    .sw-marker-mobile-label { font-size: 15px; font-weight: 400; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-label { color: var(--accent); font-weight: 700; }\n    .sw-marker-mobile-amount { font-size: 16px; font-weight: 700; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-amount { color: var(--accent); }\n    .sw-summary-box { padding: 18px 20px; background: var(--accent-light); border: 1px solid rgba(12,30,20,0.2); border-radius: var(--radius-sm); margin-top: 20px; }\n    .sw-summary-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; font-size: 16px; color: var(--ink); }\n    .sw-summary-row.sw-summary-discount { color: #8A1F1F; }\n    .sw-summary-row.sw-summary-total { border-top: 1px solid rgba(12,30,20,0.25); margin-top: 8px; padding-top: 12px; font-weight: 700; font-size: 22px; color: var(--accent); }\n    .sw-summary-person-label { font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-muted); margin: 14px 0 2px; }\n    .sw-summary-person-label:first-child { margin-top: 0; }\n    .sw-btn-row { display: flex; gap: 10px; margin-top: 24px; flex-wrap: wrap; }\n    .sw-btn { flex: 1; min-width: 140px; padding: 15px 17px; border-radius: var(--radius-sm); font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 700; cursor: pointer; transition: all 0.2s; border: 0; }\n    .sw-btn-primary { background: var(--accent); color: #fff; }\n    .sw-btn-primary:hover { background: #27703F; transform: translateY(-1px); }\n    .sw-btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }\n    .sw-btn-secondary { background: transparent; color: var(--ink); border: 1px solid var(--border); }\n    .sw-btn-secondary:hover { background: var(--bg); }\n    .sw-error { display: none; margin-top: 15px; padding: 13px 15px; border-radius: var(--radius-sm); background: #FFF3F3; border: 1px solid rgba(220,30,30,0.2); color: #8A1F1F; font-size: 18px; font-weight: 400; line-height: 1.5; white-space: pre-wrap; }\n    .wiz-spinner { display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.4); border-top-color: #fff; border-radius: 50%; animation: wiz-spin 0.7s linear infinite; vertical-align: middle; margin-right: 8px; }\n    .sw-country-search-wrap { position: relative; margin-bottom: 10px; }\n    .sw-country-search-icon { position: absolute; left: 18px; top: 50%; transform: translateY(-50%); color: var(--ink-muted); pointer-events: none; opacity: 0.5; }\n    .sw-country-search {\n      width: 100%; padding: 13px 15px 13px 54px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg); font-family: 'Tinos', Georgia, serif;\n      font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-country-search:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    .sw-country-list { max-height: 240px; overflow-y: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }\n    .sw-country-item { padding: 11px 15px; cursor: pointer; font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; display: flex; justify-content: space-between; align-items: center; transition: background 0.15s; border-bottom: 1px solid var(--border); }\n    .sw-country-item:last-child { border-bottom: 0; }\n    .sw-country-item:hover { background: var(--accent-light); }\n    .sw-country-item.selected { background: var(--accent-light); font-weight: 700; }\n    .sw-country-item-cat { font-size: 12px; color: var(--ink-muted); background: var(--border); padding: 2px 8px; border-radius: 999px; }\n    .sw-country-empty { padding: 15px; font-size: 18px; color: var(--ink-muted); text-align: center; }\n    .sw-step { display: none; }\n    .sw-step.active { display: block; }\n    \/* \u2500\u2500 RTL-Anpassungen (Farsi) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    .sw-root { direction: rtl; text-align: right; }\n    .sw-country-search { padding: 13px 54px 13px 15px; }\n    .sw-country-search-icon { left: auto; right: 18px; }\n    .sw-select { background-position: left 15px center; }\n    .sw-amount-display { direction: ltr; }\n    .sw-range-wrap { direction: ltr; }\n    .sw-marker-label, .sw-marker-mobile-label { direction: rtl; }\n    .sw-marker-amount, .sw-marker-mobile-amount { direction: ltr; unicode-bidi: isolate; }\n    .sw-summary-row > span:last-child { direction: ltr; unicode-bidi: isolate; }\n    .sw-country-item, .sw-marker-mobile { direction: rtl; }\n    .wiz-spinner { margin-right: 0; margin-left: 8px; }\n    .sw-step-label, .sw-summary-person-label { text-align: right; }\n  `;\n  shadow.appendChild(styleEl);\n  const wrapper = document.createElement(\"div\");\n  wrapper.innerHTML = `\n    <div class=\"sw-root\" dir=\"rtl\">\n      <div class=\"sw-card\">\n        <div class=\"sw-progress\">\n          <div class=\"sw-progress-step\" id=\"sw-prog-1\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-2\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-3\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-4\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-5\"><\/div>\n        <\/div>\n        <!-- STEP 1 -->\n        <div class=\"sw-step active\" id=\"sw-step-welcome\">\n          <div class=\"sw-step-label\">\u0645\u0631\u062d\u0644\u0647 \u06f1 \u0627\u0632 \u06f5<\/div>\n          <h2 class=\"sw-heading\">\u062e\u0648\u0634 \u0622\u0645\u062f\u06cc\u062f<\/h2>\n          <p class=\"sw-subtext\">\u062f\u0631 \u0686\u0646\u062f \u0645\u0631\u062d\u0644\u0647\u060c \u06a9\u0634\u0648\u0631\u060c \u0632\u0628\u0627\u0646\u060c \u0646\u0648\u0639 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0648 \u0647\u0632\u06cc\u0646\u0647 \u0645\u0634\u0627\u0631\u06a9\u062a \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f \u2013 \u0648 \u0633\u067e\u0633 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0647 \u067e\u0631\u062f\u0627\u062e\u062a \u0645\u06cc\u200c\u0631\u0648\u06cc\u062f.<\/p>\n          <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-welcome-next\" style=\"width:100%;\">\u0642\u06cc\u0645\u062a\u200c\u0647\u0627 \u0648 \u062b\u0628\u062a\u200c\u0646\u0627\u0645<\/button>\n        <\/div>\n        <!-- STEP 2 -->\n        <div class=\"sw-step\" id=\"sw-step-country\">\n          <div class=\"sw-step-label\">\u0645\u0631\u062d\u0644\u0647 \u06f2 \u0627\u0632 \u06f5<\/div>\n          <h2 class=\"sw-heading\">\u06a9\u062c\u0627 \u0632\u0646\u062f\u06af\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f\u061f<\/h2>\n          <label class=\"sw-label\">\u06a9\u0634\u0648\u0631<\/label>\n          <div class=\"sw-country-search-wrap\">\n            <svg class=\"sw-country-search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.35-4.35\"\/><\/svg>\n            <input type=\"text\" class=\"sw-country-search\" id=\"sw-country-search\" placeholder=\"\u062c\u0633\u062a\u062c\u0648\u06cc \u06a9\u0634\u0648\u0631\u2026\" autocomplete=\"off\">\n          <\/div>\n          <div class=\"sw-country-list\" id=\"sw-country-list\"><\/div>\n          <input type=\"hidden\" id=\"sw-country\">\n          <div class=\"sw-infobox\" id=\"sw-catInfo\">\n            <div class=\"sw-infobox-title\">\u062f\u0633\u062a\u0647 \u0642\u06cc\u0645\u062a<\/div>\n            <div id=\"sw-catText\">\u0644\u0637\u0641\u0627\u064b \u0627\u0628\u062a\u062f\u0627 \u06cc\u06a9 \u06a9\u0634\u0648\u0631 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f.<\/div>\n          <\/div>\n          <div class=\"sw-redirect\" id=\"sw-redirect-russia\">\n            <strong>\u0628\u0631\u0627\u06cc \u0634\u0631\u06a9\u062a\u200c\u06a9\u0646\u0646\u062f\u06af\u0627\u0646 \u0627\u0632 \u0631\u0648\u0633\u06cc\u0647 \u0635\u0641\u062d\u0647\u0654 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u062c\u062f\u0627\u06af\u0627\u0646\u0647\u200c\u0627\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f.<\/strong>\n            \u0633\u0627\u0645\u0627\u0646\u0647\u0654 \u067e\u0631\u062f\u0627\u062e\u062a \u0645\u0627 \u062f\u0631 \u0631\u0648\u0633\u06cc\u0647 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0646\u06cc\u0633\u062a. \u0644\u0637\u0641\u0627\u064b \u0627\u0632 \u0622\u0646\u062c\u0627 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u06a9\u0646\u06cc\u062f:<br><br>\n            <a href=\"https:\/\/spiritual-activity.org\/ru\/anmeldung-basic-exercises\/\">\u0631\u0641\u062a\u0646 \u0628\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0631\u0648\u0633\u06cc<\/a>\n          <\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-country-back\">\u0628\u0627\u0632\u06af\u0634\u062a<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-country-next\" disabled>\u0628\u0639\u062f\u06cc<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 3 -->\n        <div class=\"sw-step\" id=\"sw-step-langform\">\n          <div class=\"sw-step-label\">\u0645\u0631\u062d\u0644\u0647 \u06f3 \u0627\u0632 \u06f5<\/div>\n          <h2 class=\"sw-heading\">\u0632\u0628\u0627\u0646 \u0648 \u0646\u0648\u0639 \u062b\u0628\u062a\u200c\u0646\u0627\u0645<\/h2>\n          <label class=\"sw-label\" for=\"sw-commLang\">\u0628\u0647 \u0686\u0647 \u0632\u0628\u0627\u0646\u06cc \u0634\u0631\u06a9\u062a \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f\u061f<\/label>\n          <select class=\"sw-select\" id=\"sw-commLang\">\n            <option value=\"\" selected disabled>\u0644\u0637\u0641\u0627\u064b \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f\u2026<\/option>\n            <option value=\"Deutsch\">\u0622\u0644\u0645\u0627\u0646\u06cc<\/option>\n            <option value=\"Englisch\">\u0627\u0646\u06af\u0644\u06cc\u0633\u06cc<\/option>\n            <option value=\"Spanisch\">\u0627\u0633\u067e\u0627\u0646\u06cc\u0627\u06cc\u06cc<\/option>\n            <option value=\"Franz\u00f6sisch\">\u0641\u0631\u0627\u0646\u0633\u0648\u06cc<\/option>\n            <option value=\"Italienisch\">\u0627\u06cc\u062a\u0627\u0644\u06cc\u0627\u06cc\u06cc<\/option>\n            <option value=\"Portugiesisch\">\u067e\u0631\u062a\u063a\u0627\u0644\u06cc<\/option>\n            <option value=\"Arabisch\">\u0639\u0631\u0628\u06cc<\/option>\n            <option value=\"Hebr\u00e4isch\">\u0639\u0628\u0631\u06cc<\/option>\n            <option value=\"Farsi\">\u0641\u0627\u0631\u0633\u06cc<\/option>\n            <option value=\"Georgisch\">\u06af\u0631\u062c\u06cc<\/option>\n            <option value=\"Ukrainisch\">\u0627\u0648\u06a9\u0631\u0627\u06cc\u0646\u06cc<\/option>\n            <option value=\"Niederl\u00e4ndisch\">\u0647\u0644\u0646\u062f\u06cc<\/option>\n            <option value=\"T\u00fcrkisch\">\u062a\u0631\u06a9\u06cc<\/option>\n            <option value=\"Bulgarisch\">\u0628\u0644\u063a\u0627\u0631\u06cc<\/option>\n            <option value=\"Russisch\">\u0631\u0648\u0633\u06cc<\/option>\n            <option value=\"Chinesisch\">\u0686\u06cc\u0646\u06cc<\/option>\n            <option value=\"Japanisch\">\u0698\u0627\u067e\u0646\u06cc<\/option>\n            <option value=\"Koreanisch\">\u06a9\u0631\u0647\u200c\u0627\u06cc<\/option>\n          <\/select>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note\" style=\"display:none; margin-top:14px;\">\n            <div class=\"sw-infobox-title\">\u0634\u0631\u06a9\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u00b7 \u2212\u06f3\u06f5\u20ac<\/div>\n            <div id=\"sw-apponly-note-text\">\u0634\u0645\u0627 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0634\u0631\u06a9\u062a \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f. \u062a\u062e\u0641\u06cc\u0641 \u0628\u0647\u200c\u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062f\u0631 \u062e\u0644\u0627\u0635\u0647 \u0645\u062d\u0627\u0633\u0628\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/div>\n          <\/div>\n          <label class=\"sw-label\" style=\"margin-top:26px;\">\u0686\u06af\u0648\u0646\u0647 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u062f \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u06a9\u0646\u06cc\u062f\u061f<\/label>\n          <div class=\"sw-choice-row\" id=\"sw-form-choices\">\n            <div class=\"sw-choice-card active\" data-form=\"einzeln\">\u0641\u0631\u062f\u06cc<\/div>\n            <div class=\"sw-choice-card\" data-form=\"paar\">\u062f\u0648 \u0646\u0641\u0631\u0647<br><span style=\"font-size:13px; font-weight:400;\">(\u06cc\u06a9 \u062e\u0627\u0646\u0648\u0627\u0631)<\/span><\/div>\n            <div class=\"sw-choice-card\" data-form=\"gruppe\">\u06af\u0631\u0648\u0647\u06cc<br><span style=\"font-size:13px; font-weight:400;\">(\u0627\u0632 \u06f4 \u0646\u0641\u0631 \u0628\u0647 \u0628\u0627\u0644\u0627)<\/span><\/div>\n          <\/div>\n          <div class=\"sw-infobox\" id=\"sw-gruppe-note\" style=\"display:none; margin-top:18px;\">\n            <div class=\"sw-infobox-title\">\u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u06af\u0631\u0648\u0647\u06cc<\/div>\n            <div>\u0627\u0632 \u0639\u0644\u0627\u0642\u0647\u0654 \u0634\u0645\u0627 \u062e\u0648\u0634\u062d\u0627\u0644\u06cc\u0645. \u062f\u0631 \u0635\u0641\u062d\u0647\u0654 \u0628\u0639\u062f \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u06af\u0631\u0648\u0647\u06cc \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f. \u0644\u0637\u0641\u0627\u064b \u062a\u0648\u062c\u0647 \u06a9\u0646\u06cc\u062f: \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u06af\u0631\u0648\u0647\u06cc \u062a\u0646\u0647\u0627 \u0628\u0647 \u0632\u0628\u0627\u0646\u200c\u0647\u0627\u06cc \u0622\u0644\u0645\u0627\u0646\u06cc \u0648 \u0627\u0646\u06af\u0644\u06cc\u0633\u06cc \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0627\u0633\u062a.<\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-langform\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-langform-back\">\u0628\u0627\u0632\u06af\u0634\u062a<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-langform-next\" disabled>\u0628\u0639\u062f\u06cc<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-gruppe-redirect\" style=\"display:none;\">\u0627\u062f\u0627\u0645\u0647 \u0628\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u06af\u0631\u0648\u0647\u06cc<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4A -->\n        <div class=\"sw-step\" id=\"sw-step-details-solo\">\n          <div class=\"sw-step-label\">\u0645\u0631\u062d\u0644\u0647 \u06f4 \u0627\u0632 \u06f5<\/div>\n          <h2 class=\"sw-heading\">\u0686\u0646\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0631\u0628\u0627\u0631\u0647 \u0634\u0645\u0627<\/h2>\n          <p class=\"sw-subtext\">\u0622\u06cc\u0627 \u0647\u06cc\u0686\u200c\u06a9\u062f\u0627\u0645 \u0627\u0632 \u0627\u06cc\u0646 \u0645\u0648\u0627\u0631\u062f \u062f\u0631\u0628\u0627\u0631\u0647 \u0634\u0645\u0627 \u0635\u062f\u0642 \u0645\u06cc\u200c\u06a9\u0646\u062f\u061f \u0627\u06cc\u0646 \u0628\u0647 \u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0647\u0632\u06cc\u0646\u0647 \u0645\u0646\u0627\u0633\u0628 \u0631\u0627 \u0628\u0647 \u0634\u0645\u0627 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u062f\u0647\u06cc\u0645.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u0634\u0631\u06a9\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u00b7 \u2212\u06f3\u06f5\u20ac<\/div>\n            <div>\u0634\u0645\u0627 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0634\u0631\u06a9\u062a \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f. \u062a\u062e\u0641\u06cc\u0641 \u0628\u0647\u200c\u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062f\u0631 \u062e\u0644\u0627\u0635\u0647 \u0645\u062d\u0627\u0633\u0628\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/div>\n          <\/div>\n          <label class=\"sw-label\">\u0644\u0637\u0641\u0627\u064b \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f<\/label>\n          <select class=\"sw-select\" id=\"sw-solo-status\">\n            <option value=\"\" disabled selected>\u0644\u0637\u0641\u0627\u064b \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f\u2026<\/option>\n            <option value=\"normal\">\u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0639\u0627\u062f\u06cc<\/option>\n            <option value=\"schueler\">\u062f\u0627\u0646\u0634\u200c\u0622\u0645\u0648\u0632\u0627\u0646 (\u2212\u06f5\u06f0\u066a)<\/option>\n            <option value=\"student\">\u062f\u0631 \u062d\u0627\u0644 \u0622\u0645\u0648\u0632\u0634\/\u062a\u062d\u0635\u06cc\u0644 (\u2212\u06f2\u06f5\u066a)<\/option>\n            <option value=\"wiederholer\">\u0645\u0646 \u062f\u0648\u0631\u0647 \u0631\u0627 \u0628\u0627 \u062a\u0645\u0631\u06cc\u0646\u200c\u0647\u0627\u06cc \u062c\u0627\u0646\u060c \u062a\u06a9\u0631\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0645 (\u0628\u062f\u0648\u0646 \u0645\u062c\u0645\u0648\u0639\u0647 \u06a9\u0627\u0631\u062a \u062c\u062f\u06cc\u062f \u2212 \u06f3\u06f0\u066a)<\/option>\n          <\/select>\n          <div class=\"sw-error\" id=\"sw-error-details-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-solo-back\">\u0628\u0627\u0632\u06af\u0634\u062a<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-solo-next\" disabled>\u0628\u0639\u062f\u06cc<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4B -->\n        <div class=\"sw-step\" id=\"sw-step-details-paar\">\n          <div class=\"sw-step-label\">\u0645\u0631\u062d\u0644\u0647 \u06f4 \u0627\u0632 \u06f5<\/div>\n          <h2 class=\"sw-heading\">\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0647\u0631 \u062f\u0648\u06cc \u0634\u0645\u0627<\/h2>\n          <p class=\"sw-subtext\">\u0644\u0637\u0641\u0627\u064b \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0647\u0631 \u062f\u0648 \u0646\u0641\u0631 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f. \u0646\u0641\u0631 \u062f\u0648\u0645 \u0628\u0647\u200c\u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06f5\u06f0\u066a \u062a\u062e\u0641\u06cc\u0641 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-paar-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u0634\u0631\u06a9\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u00b7 \u2212\u06f3\u06f5\u20ac<\/div>\n            <div>\u0634\u0645\u0627 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0634\u0631\u06a9\u062a \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f. \u062a\u062e\u0641\u06cc\u0641 \u0628\u0647\u200c\u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062f\u0631 \u062e\u0644\u0627\u0635\u0647 \u0645\u062d\u0627\u0633\u0628\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\u0646\u0641\u0631 \u06f1<\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\u0646\u0627\u0645<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-vorname\"><\/div>\n              <div><label class=\"sw-label\">\u0646\u0627\u0645 \u062e\u0627\u0646\u0648\u0627\u062f\u06af\u06cc<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\u0627\u06cc\u0645\u06cc\u0644<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p1-email\">\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\u0646\u0641\u0631 \u06f2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u2212\u06f5\u06f0\u066a)<\/span><\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\u0646\u0627\u0645<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-vorname\"><\/div>\n              <div><label class=\"sw-label\">\u0646\u0627\u0645 \u062e\u0627\u0646\u0648\u0627\u062f\u06af\u06cc<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\u0627\u06cc\u0645\u06cc\u0644<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p2-email\">\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-details-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-paar-back\">\u0628\u0627\u0632\u06af\u0634\u062a<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-paar-next\" disabled>\u0628\u0639\u062f\u06cc<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5A -->\n        <div class=\"sw-step\" id=\"sw-step-amount-solo\">\n          <div class=\"sw-step-label\">\u0645\u0631\u062d\u0644\u0647 \u06f5 \u0627\u0632 \u06f5<\/div>\n          <h2 class=\"sw-heading\">\u0627\u0646\u062a\u062e\u0627\u0628 \u0647\u0632\u06cc\u0646\u0647 \u0645\u0634\u0627\u0631\u06a9\u062a<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-solo\">\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0647\u0632\u06cc\u0646\u0647\u200c\u0627\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0634\u0645\u0627 \u0645\u0646\u0627\u0633\u0628 \u0627\u0633\u062a \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-solo\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u0634\u0631\u06a9\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u00b7 \u2212\u06f3\u06f5\u20ac<\/div>\n            <div>\u0634\u0645\u0627 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0634\u0631\u06a9\u062a \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f. \u062a\u062e\u0641\u06cc\u0641 \u0628\u0647\u200c\u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062f\u0631 \u062e\u0644\u0627\u0635\u0647 \u0645\u062d\u0627\u0633\u0628\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/div>\n          <\/div>\n          <div class=\"sw-range-header\">\n            <div class=\"sw-range-header-label\">\u0645\u0628\u0644\u063a \u0634\u0645\u0627<\/div>\n            <div class=\"sw-amount-display\">\n              <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-solo\" value=\"360\">\n              <span>\u20ac<\/span>\n            <\/div>\n          <\/div>\n          <div class=\"sw-range-wrap\">\n            <div class=\"sw-markers\" id=\"sw-markers-solo\"><\/div>\n            <input type=\"range\" class=\"sw-range\" id=\"sw-amount-solo\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n            <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-solo\"><\/div>\n          <\/div>\n          <p style=\"margin-top:18px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \u0627\u06af\u0631 \u0628\u0647 \u062a\u062e\u0641\u06cc\u0641 \u0645\u0627\u0644\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f\u060c \u0644\u0637\u0641\u0627\u064b \u0628\u0627 \u0645\u0627 \u0645\u06a9\u0627\u062a\u0628\u0647 \u06a9\u0646\u06cc\u062f:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-solo\">\n            <div class=\"sw-summary-row\"><span>\u0647\u0632\u06cc\u0646\u0647 \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647<\/span><span id=\"sw-solo-chosen\">360\u20ac<\/span><\/div>\n            <div id=\"sw-solo-discounts\"><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-solo\" style=\"display:none;\"><span>\u0627\u0631\u0633\u0627\u0644<\/span><span>\u06f1\u06f5\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\u062c\u0645\u0639 \u06a9\u0644<\/span><span><span id=\"sw-solo-total\">360<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-solo-back\">\u0628\u0627\u0632\u06af\u0634\u062a<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-solo\" style=\"line-height:1.35;\">\u062b\u0628\u062a\u200c\u0646\u0627\u0645<br><span style=\"font-size:13px; font-weight:400;\">\u0641\u0631\u0622\u06cc\u0646\u062f \u067e\u0631\u062f\u0627\u062e\u062a \u0628\u0647 \u0632\u0628\u0627\u0646 \u0627\u0646\u06af\u0644\u06cc\u0633\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u200c\u0634\u0648\u062f<\/span><\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5B -->\n        <div class=\"sw-step\" id=\"sw-step-amount-paar\">\n          <div class=\"sw-step-label\">\u0645\u0631\u062d\u0644\u0647 \u06f5 \u0627\u0632 \u06f5<\/div>\n          <h2 class=\"sw-heading\">\u0627\u0646\u062a\u062e\u0627\u0628 \u0647\u0632\u06cc\u0646\u0647\u200c\u0647\u0627<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-paar\">\u0647\u0631 \u0641\u0631\u062f \u0647\u0632\u06cc\u0646\u0647 \u062e\u0648\u062f \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0646\u0641\u0631 \u06f2 \u0628\u0647\u200c\u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06f5\u06f0\u066a \u062a\u062e\u0641\u06cc\u0641 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-paar\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u0634\u0631\u06a9\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u00b7 \u2212\u06f3\u06f5\u20ac<\/div>\n            <div>\u0634\u0645\u0627 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0634\u0631\u06a9\u062a \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f. \u062a\u062e\u0641\u06cc\u0641 \u0628\u0647\u200c\u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062f\u0631 \u062e\u0644\u0627\u0635\u0647 \u0645\u062d\u0627\u0633\u0628\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p1-title\">\u0646\u0641\u0631 \u06f1<\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\u0647\u0632\u06cc\u0646\u0647<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p1\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p1\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p1\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p1\"><\/div>\n            <\/div>\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p2-title\">\u0646\u0641\u0631 \u06f2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u2212\u06f5\u06f0\u066a)<\/span><\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\u0647\u0632\u06cc\u0646\u0647<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p2\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p2\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p2\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p2\"><\/div>\n            <\/div>\n          <\/div>\n          <p style=\"margin-top:8px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \u0627\u06af\u0631 \u0628\u0647 \u062a\u062e\u0641\u06cc\u0641 \u0645\u0627\u0644\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f\u060c \u0644\u0637\u0641\u0627\u064b \u0628\u0627 \u0645\u0627 \u0645\u06a9\u0627\u062a\u0628\u0647 \u06a9\u0646\u06cc\u062f:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-paar\">\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p1-label\">\u0646\u0641\u0631 \u06f1<\/div>\n            <div class=\"sw-summary-row\"><span>\u0647\u0632\u06cc\u0646\u0647 \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647<\/span><span id=\"sw-p1-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p1-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\u062c\u0645\u0639 \u062c\u0632\u0621<\/span><span id=\"sw-p1-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p2-label\">\u0646\u0641\u0631 \u06f2<\/div>\n            <div class=\"sw-summary-row\"><span>\u0647\u0632\u06cc\u0646\u0647 \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647<\/span><span id=\"sw-p2-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p2-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\u062c\u0645\u0639 \u062c\u0632\u0621<\/span><span id=\"sw-p2-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-paar\" style=\"display:none;\"><span>\u0627\u0631\u0633\u0627\u0644<\/span><span>\u06f1\u06f5\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\u062c\u0645\u0639 \u06a9\u0644<\/span><span><span id=\"sw-paar-total\">0<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-paar-back\">\u0628\u0627\u0632\u06af\u0634\u062a<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-paar\" style=\"line-height:1.35;\">\u0628\u0647 \u0633\u0645\u062a \u067e\u0631\u062f\u0627\u062e\u062a<br><span style=\"font-size:13px; font-weight:400;\">\u0641\u0631\u0622\u06cc\u0646\u062f \u067e\u0631\u062f\u0627\u062e\u062a \u0628\u0647 \u0632\u0628\u0627\u0646 \u0627\u0646\u06af\u0644\u06cc\u0633\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u200c\u0634\u0648\u062f<\/span><\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  `;\n  shadow.appendChild(wrapper);\n  const $ = (id) => shadow.getElementById(id);\n  const COUNTRY_TO_CAT = {};\n  Object.keys(COUNTRIES).forEach(cat => COUNTRIES[cat].forEach(code => COUNTRY_TO_CAT[code] = cat));\n  function getCountryName(code) {\n    if (COUNTRY_NAMES[code]) return COUNTRY_NAMES[code];\n    try { return new Intl.DisplayNames([\"fa\"], { type: \"region\" }).of(code) || code; }\n    catch { return code; }\n  }\n\n  function getCountryAliases(code) {\n    const list = [];\n    \/\/ Intl-Name als Fallback, falls er vom festen CLDR-Namen abweicht\n    if (COUNTRY_NAMES[code]) {\n      try {\n        const intlName = new Intl.DisplayNames([\"fa\"], { type: \"region\" }).of(code);\n        if (intlName && intlName !== COUNTRY_NAMES[code]) list.push(intlName.toLowerCase());\n      } catch {}\n    }\n    \/\/ Englischer Name als lateinische Fallback-Schreibweise fuer alle Laender\n    try {\n      const enName = new Intl.DisplayNames([\"en\"], { type: \"region\" }).of(code);\n      if (enName) list.push(enName.toLowerCase());\n    } catch {}\n    (COUNTRY_SEARCH_ALIASES[code] || []).forEach(a => list.push(a.toLowerCase()));\n    return list;\n  }\n  function getAllCountriesSorted() {\n    const all = [];\n    [\"cat1\",\"cat2\",\"cat3\",\"cat4\"].forEach(cat => {\n      COUNTRIES[cat]\n        .map(code => ({ code, name: getCountryName(code), cat, aliases: getCountryAliases(code) }))\n        .sort((a, b) => a.name.localeCompare(b.name, \"fa\"))\n        .forEach(c => all.push(c));\n    });\n    return all;\n  }\n  function emptyPerson() {\n    return { vorname: \"\", nachname: \"\", email: \"\", wiederholer: false, statusType: \"\", amount: 0 };\n  }\n  const state = {\n    country: \"\", category: \"cat1\",\n    commLang: \"\", form: \"einzeln\",\n    persons: { solo: emptyPerson(), p1: emptyPerson(), p2: emptyPerson() }\n  };\n  function getPerson(key) { return state.persons[key] || state.persons.solo; }\n  function isAppOnly() {\n    const { category: cat, commLang: lang, country } = state;\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[country];\n      \/\/ Ausnahme (z.B. China) gilt nur, wenn auch die passende Sprache gewaehlt ist \u2013\n      \/\/ sonst kann kein physisches Kartenset verschickt werden.\n      if (!exceptionLang || lang !== exceptionLang) return true;\n    }\n    if (APP_ONLY_LANGS.has(lang)) return true;\n    if (lang === \"Russisch\" && country && country !== \"RU\") return true;\n    return false;\n  }\n\n  function isWiederholer(person) {\n    return !!person && (person.wiederholer || person.statusType === \"wiederholer\");\n  }\n\n  \/\/ Geht ueberhaupt ein Kartenset raus? Nur wenn die Teilnahme nicht rein digital\n  \/\/ ist UND mindestens eine Person ein neues Set braucht - Wiederholer bekommen\n  \/\/ keins. Steuert sowohl die Versandzeile in der Zusammenfassung als auch die\n  \/\/ Wahl des Ecwid-Produkts, damit beide nicht auseinanderlaufen koennen.\n  function hasPhysicalShipment(isPaar) {\n    if (isAppOnly()) return false;\n    return isPaar\n      ? !(isWiederholer(state.persons.p1) && isWiederholer(state.persons.p2))\n      : !isWiederholer(state.persons.solo);\n  }\n\n  \/\/ Ecwid haengt den Versand am Produkt fest, nicht am Warenkorb. Ohne physischen\n  \/\/ Versand muss deshalb das versandfreie Digital-Produkt in den Warenkorb, sonst\n  \/\/ schlaegt der Shop trotzdem Versandkosten auf.\n  function getParticipationProductId(isPaar) {\n    return hasPhysicalShipment(isPaar) ? PRODUCTS[state.category] : PRODUCTS_APPONLY[state.category];\n  }\n  function updateAppOnlyUI() {\n    const appOnly = state.commLang ? isAppOnly() : false;\n    let reason = \"\";\n    if (appOnly) {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[state.country];\n      if ((state.category === \"cat3\" || state.category === \"cat4\") && exceptionLang) {\n        reason = TXT.reasonException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang);\n      } else if (state.category === \"cat3\" || state.category === \"cat4\") {\n        reason = TXT.reasonRegion;\n      } else if (state.commLang === \"Russisch\") {\n        reason = TXT.reasonRussian;\n      } else {\n        reason = TXT.reasonLanguage;\n      }\n    }\n    const noteIds = [\"sw-apponly-note\",\"sw-apponly-note-step4\",\"sw-apponly-note-paar-step4\",\"sw-apponly-note-step5-solo\",\"sw-apponly-note-step5-paar\"];\n    noteIds.forEach(id => {\n      const el = $(id);\n      if (!el) return;\n      el.style.display = appOnly ? \"block\" : \"none\";\n      const textDiv = el.querySelector(\"div:not(.sw-infobox-title)\");\n      if (textDiv && reason) textDiv.textContent = reason;\n    });\n  }\n  const STEP_CONTAINER = {\n    1: () => \"sw-step-welcome\",\n    2: () => \"sw-step-country\",\n    3: () => \"sw-step-langform\",\n    4: () => state.form === \"paar\" ? \"sw-step-details-paar\" : \"sw-step-details-solo\",\n    5: () => state.form === \"paar\" ? \"sw-step-amount-paar\" : \"sw-step-amount-solo\"\n  };\n  function showStep(n) {\n    shadow.querySelectorAll(\".sw-step\").forEach(el => el.classList.remove(\"active\"));\n    $(STEP_CONTAINER[n]()).classList.add(\"active\");\n    for (let i = 1; i <= 5; i++) {\n      const prog = $(\"sw-prog-\" + i);\n      if (!prog) continue;\n      if (i < n) prog.className = \"sw-progress-step done\";\n      else if (i === n) prog.className = \"sw-progress-step active\";\n      else prog.className = \"sw-progress-step\";\n    }\n    if (n === 5) {\n      const sliderIds = state.form === \"paar\" ? [\"sw-amount-p1\",\"sw-amount-p2\"] : [\"sw-amount-solo\"];\n      sliderIds.forEach(sid => { const el = $(sid); if (el) el.classList.add(\"sw-pulse\"); });\n      refreshSummary();\n    }\n  }\n  function setNextEnabled(id, enabled) {\n    const b = $(id);\n    if (!b) return;\n    b.disabled = !enabled;\n    b.style.opacity = enabled ? \"1\" : \".4\";\n    b.style.cursor  = enabled ? \"pointer\" : \"not-allowed\";\n  }\n  function showErrorIn(id, msg) { const el=$(id); el.style.display=\"block\"; el.textContent=msg; }\n  function clearErrorIn(id)     { const el=$(id); el.style.display=\"none\";  el.textContent=\"\"; }\n  function setCheckoutLoading(btnId, loading) {\n    const btn = $(btnId);\n    \/\/ Nach dem Danke-Bildschirm existiert der Button nicht mehr \u2013 dann nichts tun.\n    if (!btn) return;\n    const overlay = document.getElementById(OVERLAY_ID);\n    \/\/ innerHTML statt textContent: Der Checkout-Button ist zweizeilig (Hinweis auf den\n    \/\/ englischen Bezahlvorgang). Mit textContent ginge die zweite Zeile beim Zuruecksetzen\n    \/\/ nach einem Fehlversuch verloren.\n    if (!btn.dataset.defaultLabel) btn.dataset.defaultLabel = btn.innerHTML;\n    if (loading) {\n      btn.disabled = true;\n      btn.innerHTML = '<span class=\"wiz-spinner\"><\/span> ' + TXT.preparing;\n      btn.style.opacity = \".8\";\n      if (overlay) overlay.style.display = \"flex\";\n    } else {\n      btn.disabled = false;\n      btn.innerHTML = btn.dataset.defaultLabel;\n      btn.style.opacity = \"1\";\n      if (overlay) overlay.style.display = \"none\";\n    }\n  }\n  function showThankYou() {\n    const card = shadow.querySelector(\".sw-card\");\n    if (!card) return;\n    card.innerHTML = `\n      <div style=\"text-align:center; padding:20px 0;\">\n        <div style=\"font-size:56px; margin-bottom:16px; color:#27703F;\">\u2713<\/div>\n        <h2 style=\"font-family:'Tinos',Georgia,serif; font-size:26px; font-weight:500; margin:0 0 12px; color:#0C1E14;\">${TXT.thanksTitle}<\/h2>\n        <p style=\"font-family:'Tinos',Georgia,serif; font-size:18px; color:#27703F; line-height:1.6; margin:0 0 24px;\">${TXT.thanksLine1}${TXT.thanksLine2 ? \"<br>\" + TXT.thanksLine2 : \"\"}<\/p>\n        <div style=\"display:flex; justify-content:center;\">\n          <div style=\"width:36px; height:36px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:wiz-spin 0.8s linear infinite;\"><\/div>\n        <\/div>\n      <\/div>`;\n  }\n  function getAnchors(cat) {\n    const r = RANGES[cat], o = ORIENTIERUNG[cat];\n    return [[0,r.min],[25,o.reduced],[50,o.base],[75,o.support],[100,r.max]];\n  }\n  function normToEuro(norm, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      if (norm <= a[i+1][0]) {\n        const t = (norm - a[i][0]) \/ (a[i+1][0] - a[i][0]);\n        return Math.round(a[i][1] + t * (a[i+1][1] - a[i][1]));\n      }\n    }\n    return a[a.length-1][1];\n  }\n  function euroToNorm(euro, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      const lo = a[i][1], hi = a[i+1][1];\n      if (euro <= hi) {\n        if (hi === lo) return a[i+1][0];\n        return a[i][0] + (euro - lo) \/ (hi - lo) * (a[i+1][0] - a[i][0]);\n      }\n    }\n    return 100;\n  }\n  function getMarkerDefs(cat) {\n    const o = ORIENTIERUNG[cat];\n    return [\n      { value: o.reduced, label: TXT.markerReduced, normPct: 25 },\n      { value: o.base,    label: TXT.markerBase,    normPct: 50 },\n      { value: o.support, label: TXT.markerSupport, normPct: 75 }\n    ];\n  }\n  function renderMarkers(personKey) {\n    const cat = state.category;\n    const person = getPerson(personKey);\n    const markers = getMarkerDefs(cat);\n    const container = $(`sw-markers-${personKey}`);\n    container.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker\" + (person.amount === m.value ? \" active\" : \"\");\n      div.style.left = m.normPct + \"%\";\n      div.innerHTML = `<div class=\"sw-marker-tick\"><\/div><div class=\"sw-marker-amount\">${m.value}\u20ac<\/div><div class=\"sw-marker-label\">${m.label}<\/div>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      container.appendChild(div);\n    });\n    const mobileContainer = $(`sw-markers-mobile-${personKey}`);\n    mobileContainer.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker-mobile\" + (person.amount === m.value ? \" active\" : \"\");\n      div.innerHTML = `<span class=\"sw-marker-mobile-label\">${m.label}<\/span><span class=\"sw-marker-mobile-amount\">${m.value}\u20ac<\/span>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      mobileContainer.appendChild(div);\n    });\n  }\n  function selectMarkerValue(personKey, value) {\n    const person = getPerson(personKey);\n    $(`sw-amount-${personKey}`).value = euroToNorm(value, state.category);\n    person.amount = value;\n    $(`sw-amountInput-${personKey}`).value = value;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromSlider(personKey) {\n    const person = getPerson(personKey);\n    const norm = Number($(`sw-amount-${personKey}`).value);\n    person.amount = normToEuro(norm, state.category);\n    $(`sw-amountInput-${personKey}`).value = person.amount;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromInput(personKey) {\n    const person = getPerson(personKey);\n    const r = RANGES[state.category];\n    let val = Number($(`sw-amountInput-${personKey}`).value);\n    if (isNaN(val)) val = r.min;\n    val = Math.min(r.max, Math.max(r.min, val));\n    person.amount = val;\n    $(`sw-amountInput-${personKey}`).value = val;\n    $(`sw-amount-${personKey}`).value = euroToNorm(val, state.category);\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function wireAmountControl(personKey) {\n    $(`sw-amount-${personKey}`).addEventListener(\"input\", () => updateAmountFromSlider(personKey));\n    $(`sw-amountInput-${personKey}`).addEventListener(\"input\", () => {\n      const v = Number($(`sw-amountInput-${personKey}`).value);\n      if (!isNaN(v)) { getPerson(personKey).amount = v; refreshSummary(); }\n    });\n    $(`sw-amountInput-${personKey}`).addEventListener(\"change\", () => updateAmountFromInput(personKey));\n  }\n  function applyRangeForForm() {\n    const cat = state.category;\n    const ori = ORIENTIERUNG[cat];\n    const hint = TXT.hintLong;\n    if (state.form === \"paar\") {\n      [\"p1\",\"p2\"].forEach(key => {\n        const person = getPerson(key);\n        person.amount = ori.base;\n        $(`sw-amount-${key}`).value = 50;\n        $(`sw-amountInput-${key}`).value = ori.base;\n      });\n      const p1name = state.persons.p1.vorname;\n      const p2name = state.persons.p2.vorname;\n      $(\"sw-amount-p1-title\").innerHTML = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-amount-p2-title\").innerHTML = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) +\n        ' <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">' + TXT.p2Badge + '<\/span>';\n      $(\"sw-summary-p1-label\").textContent = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-summary-p2-label\").textContent = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) + \" \" + TXT.p2Badge;\n      $(\"sw-rangeHint-paar\").textContent = hint;\n      renderMarkers(\"p1\"); renderMarkers(\"p2\");\n    } else {\n      const person = state.persons.solo;\n      person.amount = ori.base;\n      $(\"sw-amount-solo\").value = 50;\n      $(\"sw-amountInput-solo\").value = ori.base;\n      $(\"sw-rangeHint-solo\").textContent = hint;\n      renderMarkers(\"solo\");\n    }\n    refreshSummary();\n  }\n  \/\/ \u2500\u2500 Rabattlogik \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Zuerst wird der fixe App-Rabatt vom gewaehlten Betrag abgezogen, danach der\n  \/\/ prozentuale Rabatt auf den verbleibenden Betrag. Beide werden separat gezeigt.\n  function getPercentDiscountCandidate(person, isPaarP2) {\n    if (isPaarP2) return { value: DISCOUNT_PAAR_P2, label: TXT.discP2 };\n    const candidates = [];\n    if (isWiederholer(person)) candidates.push({ value: DISCOUNT_WIEDERHOLER, label: TXT.discWiederholer });\n    if (person.statusType === \"schueler\") candidates.push({ value: DISCOUNT_SCHUELER, label: TXT.discSchueler });\n    if (person.statusType === \"student\")  candidates.push({ value: DISCOUNT_STUDENT,  label: TXT.discStudent });\n    if (!candidates.length) return null;\n    return candidates.reduce((best, c) => c.value > best.value ? c : best, candidates[0]);\n  }\n  function getDiscounts(person, isPaarP2) {\n    const discounts = [];\n    let remaining = Math.round(person.amount);\n    if (isAppOnly()) {\n      const appDisc = Math.min(DISCOUNT_APP_FIXED, remaining);\n      discounts.push({ type: \"fixed\", value: DISCOUNT_APP_FIXED, label: TXT.discApp, amountEuro: appDisc });\n      remaining -= appDisc;\n    }\n    const pct = getPercentDiscountCandidate(person, isPaarP2);\n    if (pct) {\n      const pctDisc = Math.round(remaining * pct.value);\n      discounts.push({ type: \"pct\", value: pct.value, label: pct.label, amountEuro: pctDisc });\n      remaining -= pctDisc;\n    }\n    return { discounts, finalAmount: Math.max(0, remaining) };\n  }\n  function buildStatusOptionValue(person, isPaar) {\n    const vals = [];\n    if (isPaar) vals.push(STATUS_LABEL.paar);\n    if (isAppOnly()) vals.push(STATUS_LABEL.apponly);\n    if (isWiederholer(person)) vals.push(STATUS_LABEL.wiederholer);\n    if (person.statusType === \"schueler\") vals.push(STATUS_LABEL.schueler);\n    if (person.statusType === \"student\")  vals.push(STATUS_LABEL.student);\n    \/\/ Ecwid erwartet fuer Checkbox-Optionen ein Array, nicht einen kommaseparierten String\n    return vals;\n  }\n  function refreshSummary() {\n    if (state.form === \"paar\") refreshSummaryPaar();\n    else refreshSummarySolo();\n  }\n  function renderDiscountRows(containerId, discounts) {\n    const container = $(containerId);\n    container.innerHTML = \"\";\n    discounts.forEach(d => {\n      const row = document.createElement(\"div\");\n      row.className = \"sw-summary-row sw-summary-discount\";\n      const pctStr = d.type === \"fixed\" ? `\u2212${d.amountEuro}\u20ac` : `\u2212${Math.round(d.value * 100)}%`;\n      row.innerHTML = `<span>${d.label} (${pctStr})<\/span><span>\u2212${d.amountEuro}\u20ac<\/span>`;\n      container.appendChild(row);\n    });\n  }\n  function refreshSummarySolo() {\n    const p = state.persons.solo;\n    const { discounts, finalAmount } = getDiscounts(p, false);\n    $(\"sw-solo-chosen\").textContent = Math.round(p.amount) + \"\u20ac\";\n    renderDiscountRows(\"sw-solo-discounts\", discounts);\n    const shipLine = $(\"sw-shipping-line-solo\");\n    const shippingSolo = (hasPhysicalShipment(false) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingSolo ? \"flex\" : \"none\";\n    $(\"sw-solo-total\").textContent = finalAmount + shippingSolo;\n  }\n  function refreshSummaryPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    function fill(prefix, person, isPaarP2) {\n      const { discounts, finalAmount } = getDiscounts(person, isPaarP2);\n      $(`sw-${prefix}-chosen`).textContent = Math.round(person.amount) + \"\u20ac\";\n      renderDiscountRows(`sw-${prefix}-discounts`, discounts);\n      $(`sw-${prefix}-subtotal`).textContent = finalAmount + \"\u20ac\";\n      return finalAmount;\n    }\n    const f1 = fill(\"p1\", p1, false);\n    const f2 = fill(\"p2\", p2, true);\n    const shipLine = $(\"sw-shipping-line-paar\");\n    const shippingPaar = (hasPhysicalShipment(true) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingPaar ? \"flex\" : \"none\";\n    $(\"sw-paar-total\").textContent = f1 + f2 + shippingPaar;\n  }\n  function renderCountryList(filter) {\n    const list = $(\"sw-country-list\");\n    const q = (filter || \"\").toLowerCase().trim();\n    const filtered = q\n      ? getAllCountriesSorted().filter(c =>\n          c.name.toLowerCase().includes(q) ||\n          (c.aliases || []).some(a => a.includes(q))\n        )\n      : getAllCountriesSorted();\n    list.innerHTML = \"\";\n    if (!filtered.length) { list.innerHTML = '<div class=\"sw-country-empty\">' + TXT.noCountry + '<\/div>'; return; }\n    filtered.forEach(c => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-country-item\" + (state.country === c.code ? \" selected\" : \"\");\n      div.dataset.code = c.code;\n      div.innerHTML = `<span>${c.name}<\/span><span class=\"sw-country-item-cat\">${TXT.catBadge}${c.cat.replace(\"cat\",\"\")}<\/span>`;\n      div.addEventListener(\"click\", () => selectCountry(c.code, c.cat, c.name));\n      list.appendChild(div);\n    });\n  }\n  function selectCountry(code, cat, name) {\n    state.country  = code;\n    state.category = cat;\n    $(\"sw-country\").value = code;\n    $(\"sw-country-search\").value = name;\n    $(\"sw-country-list\").innerHTML = \"\";\n    const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[code];\n    let suffix = \"\";\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      suffix = exceptionLang\n        ? \" \" + TXT.catSuffixException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang)\n        : \" \" + TXT.catSuffixDigital;\n    }\n    $(\"sw-catText\").textContent = (TXT.catLabels[cat] || cat) + suffix;\n    \/\/ Ecwid wickelt in Russland keine Zahlungen ab. Wer Russland waehlt, wird\n    \/\/ deshalb auf die russische Anmeldeseite verwiesen - die laeuft ueber n8n\n    \/\/ und Tochka statt ueber den Shop. Der russische Wizard verweist umgekehrt\n    \/\/ zurueck, sobald dort ein anderes Land gewaehlt wird.\n    const nachRussland = (code === \"RU\");\n    $(\"sw-redirect-russia\").style.display = nachRussland ? \"block\" : \"none\";\n    $(\"sw-catInfo\").style.display         = nachRussland ? \"none\"  : \"block\";\n    setNextEnabled(\"sw-btn-country-next\", !nachRussland);\n    updateAppOnlyUI();\n  }\n  function ensureEcwidReady(timeoutMs = 12000) {\n    return new Promise((resolve, reject) => {\n      function isReady() {\n        return window.Ecwid && window.Ecwid.Cart &&\n               typeof window.Ecwid.Cart.addProduct === \"function\" &&\n               typeof window.Ecwid.Cart.clear === \"function\";\n      }\n      if (isReady()) return resolve(true);\n      let resolved = false;\n      function done() { if (!resolved) { resolved = true; setTimeout(() => resolve(true), 200); } }\n      if (window.Ecwid) { try { window.Ecwid.OnAPILoaded.add(done); } catch(e) {} }\n      const start = Date.now();\n      const t = setInterval(() => {\n        if (isReady()) { clearInterval(t); done(); }\n        else if (Date.now() - start > timeoutMs) {\n          clearInterval(t);\n          if (!resolved) { resolved = true; reject(new Error(fillPlaceholder(TXT.errEcwid, timeoutMs\/1000))); }\n        }\n      }, 200);\n    });\n  }\n  function clearCartAsync() { return new Promise(r => Ecwid.Cart.clear(() => r(true))); }\n  function addProductAsync(payload, timeoutMs = 4000) {\n    return new Promise((resolve, reject) => {\n      let done = false;\n      const t = setTimeout(() => { if (!done) { done = true; resolve({ product:null, cart:null, timedOut:true }); } }, timeoutMs);\n      Ecwid.Cart.addProduct(payload, function(success, product, cart, error) {\n        if (done) return;\n        done = true; clearTimeout(t);\n        if (success) resolve({ product, cart, timedOut:false });\n        else reject(new Error((error || TXT.errProduct) + \" | Payload: \" + JSON.stringify(payload)));\n      });\n    });\n  }\n  function goToCart() { window.location.href = SHOP_CART_URL; }\n  function buildN8nPayload() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const d1 = getDiscounts(p1, false);\n    const d2 = getDiscounts(p2, true);\n    return {\n      sprache: state.commLang, land: state.country, kategorie: state.category, appOnly: isAppOnly(),\n      person1: { vorname: p1.vorname, nachname: p1.nachname, email: p1.email },\n      person2: { vorname: p2.vorname, nachname: p2.nachname, email: p2.email },\n      betraege: {\n        person1: { gewaehlt: Math.round(p1.amount), rabatte: d1.discounts, endbetrag: d1.finalAmount },\n        person2: { gewaehlt: Math.round(p2.amount), rabatte: d2.discounts, endbetrag: d2.finalAmount },\n        gesamt: d1.finalAmount + d2.finalAmount\n      },\n      timestamp: new Date().toISOString()\n    };\n  }\n  async function sendToN8n(payload) {\n    if (!N8N_WEBHOOK_URL || N8N_WEBHOOK_URL.indexOf(\"HIER_\") === 0) {\n      throw new Error(\"Die n8n-Webhook-URL ist im Code noch nicht eingetragen.\");\n    }\n    let res;\n    try {\n      res = await fetch(N8N_WEBHOOK_URL, { method:\"POST\", headers:{\"Content-Type\":\"application\/json\"}, body:JSON.stringify(payload) });\n    } catch (e) {\n      throw new Error(TXT.errNetwork);\n    }\n    if (!res.ok) throw new Error(fillPlaceholder(TXT.errSubmit, res.status));\n    return true;\n  }\n  async function goCheckoutSolo() {\n    clearErrorIn(\"sw-error-amount-solo\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-solo\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-solo\", TXT.errLang);\n    const p = state.persons.solo;\n    const finalAmount = getDiscounts(p, false).finalAmount;\n    const participationProductId = getParticipationProductId(false);\n    setCheckoutLoading(\"sw-btn-checkout-solo\", true);\n    try {\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const statusValue = buildStatusOptionValue(p, false);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: finalAmount, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-solo\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-solo\", false);\n    }\n  }\n  async function goCheckoutPaar() {\n    clearErrorIn(\"sw-error-amount-paar\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-paar\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-paar\", TXT.errLang);\n    if (!validateDetailsPaar()) return showErrorIn(\"sw-error-amount-paar\", TXT.errPaarFields);\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const participationProductId = getParticipationProductId(true);\n    setCheckoutLoading(\"sw-btn-checkout-paar\", true);\n    try {\n      const payload = buildN8nPayload();\n      await sendToN8n(payload);\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const total = getDiscounts(p1, false).finalAmount + getDiscounts(p2, true).finalAmount;\n      const statusValue = buildStatusOptionValue(p1, true);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: total, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-paar\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-paar\", false);\n    }\n  }\n  function validateLangform() {\n    const ok = !!state.commLang && !!state.form && state.form !== \"gruppe\";\n    setNextEnabled(\"sw-btn-langform-next\", ok);\n  }\n  function validateDetailsSolo() {\n    const ok = !!$(\"sw-solo-status\").value;\n    setNextEnabled(\"sw-btn-details-solo-next\", ok);\n    return ok;\n  }\n  function validateDetailsPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const emailOk = s => \/\\S+@\\S+\\.\\S+\/.test(s || \"\");\n    const ok = !!(p1.vorname && p1.vorname.trim()) && !!(p1.nachname && p1.nachname.trim()) && emailOk(p1.email) &&\n               !!(p2.vorname && p2.vorname.trim()) && !!(p2.nachname && p2.nachname.trim()) && emailOk(p2.email);\n    setNextEnabled(\"sw-btn-details-paar-next\", ok);\n    return ok;\n  }\n  function bindNameFields(key) {\n    [\"vorname\",\"nachname\",\"email\"].forEach(f => {\n      $(`sw-${key}-${f}`).addEventListener(\"input\", e => {\n        getPerson(key)[f] = e.target.value;\n        validateDetailsPaar();\n      });\n    });\n  }\n  $(\"sw-btn-welcome-next\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-country-back\").addEventListener(\"click\", () => showStep(1));\n  $(\"sw-btn-country-next\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-country-search\").addEventListener(\"input\",  e => renderCountryList(e.target.value));\n  $(\"sw-country-search\").addEventListener(\"focus\",  () => renderCountryList($(\"sw-country-search\").value));\n  shadow.addEventListener(\"click\", e => {\n    if (!e.target.closest(\"#sw-country-list\") && !e.target.closest(\"#sw-country-search\")) {\n      $(\"sw-country-list\").innerHTML = \"\";\n    }\n  });\n  $(\"sw-commLang\").addEventListener(\"change\", e => {\n    state.commLang = e.target.value;\n    validateLangform();\n    updateAppOnlyUI();\n    refreshSummary();\n  });\n  shadow.querySelectorAll(\".sw-choice-card\").forEach(card => {\n    card.addEventListener(\"click\", () => {\n      state.form = card.dataset.form;\n      shadow.querySelectorAll(\".sw-choice-card\").forEach(c => c.classList.toggle(\"active\", c === card));\n      const isGruppe = state.form === \"gruppe\";\n      $(\"sw-gruppe-note\").style.display = isGruppe ? \"block\" : \"none\";\n      $(\"sw-btn-langform-next\").style.display   = isGruppe ? \"none\" : \"inline-block\";\n      $(\"sw-btn-gruppe-redirect\").style.display = isGruppe ? \"inline-block\" : \"none\";\n      clearErrorIn(\"sw-error-langform\");\n      validateLangform();\n    });\n  });\n  $(\"sw-btn-gruppe-redirect\").addEventListener(\"click\", () => { window.location.href = getGroupRedirectUrl(); });\n  $(\"sw-btn-langform-back\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-langform-next\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-details-solo-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-solo-status\").addEventListener(\"change\", e => {\n    const val = e.target.value;\n    const person = state.persons.solo;\n    person.statusType  = val;\n    person.wiederholer = val === \"wiederholer\";\n    clearErrorIn(\"sw-error-details-solo\");\n    validateDetailsSolo();\n  });\n  $(\"sw-btn-details-solo-next\").addEventListener(\"click\", () => {\n    if (validateDetailsSolo()) { applyRangeForForm(); showStep(5); }\n    else showErrorIn(\"sw-error-details-solo\", TXT.errSelectFirst);\n  });\n  $(\"sw-btn-details-paar-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-btn-details-paar-next\").addEventListener(\"click\", () => {\n    if (validateDetailsPaar()) { applyRangeForForm(); showStep(5); }\n  });\n  $(\"sw-btn-amount-solo-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-amount-paar-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-checkout-solo\").addEventListener(\"click\", goCheckoutSolo);\n  $(\"sw-btn-checkout-paar\").addEventListener(\"click\", goCheckoutPaar);\n  bindNameFields(\"p1\");\n  bindNameFields(\"p2\");\n  wireAmountControl(\"solo\");\n  wireAmountControl(\"p1\");\n  wireAmountControl(\"p2\");\n  showStep(1);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5aafd78 e-flex e-con-boxed e-con e-parent\" data-id=\"5aafd78\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cf9cf10 elementor-widget elementor-widget-html\" data-id=\"cf9cf10\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Tinos:ital,wght@0,400;0,700;1,400&display=swap\" rel=\"stylesheet\">\n<style>\n  .ecwid-ProductBrowser,\n  .ecwid-productbrowser,\n  div[id^=\"my-store\"],\n  .ecwid:not(#sw-host-he) {\n    visibility: hidden !important;\n    height: 0 !important;\n    max-height: 0 !important;\n    overflow: hidden !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    position: absolute !important;\n    pointer-events: none !important;\n  }\n<\/style>\n<div id=\"sw-overlay-he\" style=\"display:none; position:fixed; inset:0; background:rgba(245,250,246,0.92); z-index:99999; flex-direction:column; align-items:center; justify-content:center; gap:20px;\">\n  <div style=\"width:52px; height:52px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:sw-spin-he 0.8s linear infinite;\"><\/div>\n  <div style=\"font-family:'Tinos',Georgia,serif; font-size:22px; color:#27703F;\">\u05d8\u05d5\u05e2\u05df \u05d0\u05ea \u05d4\u05e7\u05d5\u05e4\u05d4\u2026<\/div>\n<\/div>\n<style>\n  @keyframes sw-spin-he { to { transform: rotate(360deg); } }\n<\/style>\n<div id=\"sw-host-he\"><\/div>\n<script>\n(function () {\n  \/\/ \u2500\u2500 Sprach-Guard: Skript bricht sofort ab, wenn die URL nicht zu HE passt \u2500\u2500\n  const _pathMatch = window.location.pathname.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n  const _pageLang = _pathMatch ? _pathMatch[1] : \"de\";\n  if (_pageLang !== \"he\") {\n    document.getElementById(\"sw-host-he\")?.remove();\n    document.getElementById(\"sw-overlay-he\")?.remove();\n    return;\n  }\n  const OVERLAY_ID    = \"sw-overlay-he\";\n  \/\/ Bewusst die englische Shop-Seite statt \/he\/: Der Ecwid-Checkout stellt sich\n  \/\/ in der RTL-Fassung nicht brauchbar dar. Die Anmeldung selbst bleibt hebraeisch,\n  \/\/ nur der Bezahlvorgang laeuft auf Englisch.\n  const SHOP_CART_URL = \"https:\/\/spiritual-activity.org\/en\/store\/cart\";\n  const N8N_WEBHOOK_URL = \"https:\/\/n8n.spiritual-activity.org\/webhook\/registration-be\";\n  function getGroupRedirectUrl() {\n    const path = window.location.pathname;\n    \/\/ Erkennt Sprachpraefixe wie \/en\/, \/es\/, \/it\/, \/ru\/ am Anfang des Pfads.\n    \/\/ Deutsch ist die Standardsprache ohne Praefix.\n    const match = path.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n    const langPrefix = (match && match[1] !== \"de\") ? \"\/\" + match[1] : \"\";\n    return \"https:\/\/spiritual-activity.org\" + langPrefix + \"\/gruppen-anmeldung\";\n  }\n  const PRODUCTS = {\n    cat1: 864374030,\n    cat2: 844860366,\n    cat3: 844907264,\n    cat4: 844907265\n  };\n\n  \/\/ Versandfreie Digital-Produkte fuer alle Faelle, in denen nichts verschickt\n  \/\/ wird: rein digitale Teilnahme und Wiederholer (kein neues Kartenset).\n  const PRODUCTS_APPONLY = {\n    cat1: 863272251,\n    cat2: 863265753,\n    cat3: 863272252,\n    cat4: 863265754\n  };\n  const RANGES = {\n    cat1: { min: 160, max: 800 },\n    cat2: { min: 105, max: 700 },\n    cat3: { min:  75, max: 600 },\n    cat4: { min:  45, max: 500 }\n  };\n  const ORIENTIERUNG = {\n    cat1: { reduced: 160, base: 360, support: 580 },\n    cat2: { reduced: 105, base: 240, support: 460 },\n    cat3: { reduced:  75, base: 160, support: 340 },\n    cat4: { reduced:  45, base: 105, support: 220 }\n  };\n  const DISCOUNT_WIEDERHOLER = 0.30;\n  const DISCOUNT_SCHUELER    = 0.50;\n  const DISCOUNT_STUDENT     = 0.25;\n  const DISCOUNT_PAAR_P2     = 0.50;\n  const DISCOUNT_APP_FIXED   = 35;\n  \/\/ Versandpauschale ausserhalb EU+CH. Ecwid kassiert sie, der Wizard rechnet sie in die Anzeige-Summe ein.\n  const SHIPPING_COST   = 15;\n  \/\/ Sprachschluessel bleiben deutsch \u2013 sie sind die Werte im Ecwid-Shop.\n  const APP_ONLY_LANGS = new Set([\"Arabisch\",\"Farsi\",\"Ukrainisch\",\"Bulgarisch\",\"Franz\u00f6sisch\"]);\n  const APP_ONLY_CATEGORY_EXCEPTION_LANG = { CN: \"Chinesisch\" };\n  const EU_PLUS_CH = new Set([\n    \"AT\",\"BE\",\"BG\",\"CY\",\"CZ\",\"DE\",\"DK\",\"EE\",\"ES\",\"FI\",\"FR\",\"GR\",\"HR\",\n    \"HU\",\"IE\",\"IT\",\"LT\",\"LU\",\"LV\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SE\",\"SI\",\"SK\",\"CH\"\n  ]);\n  \/\/ Ersetzt den Platzhalter in Klammern (z.B. [Code], [X], [\u05e7\u05d5\u05d3]) durch den Wert\n  function fillPlaceholder(text, value) {\n    return String(text).replace(\/[\\[\uff3b][^\\]\uff3d]*[\\]\uff3d]\/, value);\n  }\n  function needsShipping(countryCode) {\n    return countryCode && !EU_PLUS_CH.has(countryCode);\n  }\n  \/\/ \u2500\u2500 Uebersetzte Texte \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const TXT = {\n      \"catBadge\": \"\u05e7\u05d8\u05f3 \",\n      \"catLabels\": {\n          \"cat1\": \"\u05e7\u05d8\u05d2\u05d5\u05e8\u05d9\u05d9\u05ea \u05de\u05d7\u05d9\u05e8 1\",\n          \"cat2\": \"\u05e7\u05d8\u05d2\u05d5\u05e8\u05d9\u05d9\u05ea \u05de\u05d7\u05d9\u05e8 2\",\n          \"cat3\": \"\u05e7\u05d8\u05d2\u05d5\u05e8\u05d9\u05d9\u05ea \u05de\u05d7\u05d9\u05e8 3\",\n          \"cat4\": \"\u05e7\u05d8\u05d2\u05d5\u05e8\u05d9\u05d9\u05ea \u05de\u05d7\u05d9\u05e8 4\"\n      },\n      \"catSuffixDigital\": \"\u2013 \u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea \u05d3\u05d9\u05d2\u05d9\u05d8\u05dc\u05d9\u05ea \u05d1\u05dc\u05d1\u05d3 \u05d0\u05e4\u05e9\u05e8\u05d9\u05ea\",\n      \"catSuffixException\": \"\u2013 \u05d4\u05de\u05e9\u05dc\u05d5\u05d7 \u05d0\u05e4\u05e9\u05e8\u05d9 \u05d1\u05d0\u05d6\u05d5\u05e8\u05db\u05dd \u05e8\u05e7 \u05d1\u05e9\u05e4\u05ea \u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea {X}, \u05d0\u05d7\u05e8\u05ea \u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea \u05d3\u05d9\u05d2\u05d9\u05d8\u05dc\u05d9\u05ea \u05d1\u05dc\u05d1\u05d3\",\n      \"noCountry\": \"\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d4 \u05de\u05d3\u05d9\u05e0\u05d4\",\n      \"markerReduced\": \"\u05ea\u05e8\u05d5\u05de\u05d4 \u05de\u05d5\u05e4\u05d7\u05ea\u05ea\",\n      \"markerBase\": \"\u05ea\u05e8\u05d5\u05de\u05ea \u05d1\u05e1\u05d9\u05e1\",\n      \"markerSupport\": \"\u05ea\u05e8\u05d5\u05de\u05ea \u05ea\u05de\u05d9\u05db\u05d4\",\n      \"hintLong\": \"\u05db\u05d0\u05df \u05ea\u05d5\u05db\u05dc\u05d5 \u05dc\u05d1\u05d7\u05d5\u05e8 \u05d0\u05ea \u05d4\u05ea\u05e8\u05d5\u05de\u05d4 \u05d4\u05de\u05ea\u05d0\u05d9\u05de\u05d4 \u05dc\u05db\u05dd. \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05ea\u05e8\u05d5\u05de\u05d4 \u05ea\u05d5\u05de\u05db\u05ea \u05ea\u05d0\u05e4\u05e9\u05e8\u05d5 \u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea \u05dc\u05d0\u05e0\u05e9\u05d9\u05dd \u05d1\u05e2\u05dc\u05d9 \u05d9\u05db\u05d5\u05dc\u05ea \u05db\u05dc\u05db\u05dc\u05d9\u05ea \u05de\u05d5\u05d2\u05d1\u05dc\u05ea, \u05d5\u05ea\u05e2\u05d6\u05e8\u05d5 \u05dc\u05e0\u05d5 \u05dc\u05d4\u05de\u05e9\u05d9\u05da \u05d5\u05dc\u05d4\u05d1\u05d9\u05d0 \u05d0\u05ea \u05d4\u05e4\u05e8\u05d5\u05d9\u05e7\u05d8 \u05dc\u05e2\u05d5\u05dc\u05dd.\",\n      \"hintPaar\": \"\u05db\u05dc \u05d0\u05d3\u05dd \u05d1\u05d5\u05d7\u05e8 \u05d0\u05ea \u05d4\u05ea\u05e8\u05d5\u05de\u05d4 \u05e9\u05dc\u05d5. \u05d0\u05d3\u05dd 2 \u05de\u05e7\u05d1\u05dc \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05d4\u05e0\u05d7\u05d4 \u05e9\u05dc 50%.\",\n      \"person1\": \"\u05d0\u05d3\u05dd 1\",\n      \"person2\": \"\u05d0\u05d3\u05dd 2\",\n      \"p2Badge\": \"(\u221250%)\",\n      \"discWiederholer\": \"\u05de\u05e9\u05ea\u05ea\u05e3 \u05d7\u05d5\u05d6\u05e8\",\n      \"discSchueler\": \"\u05ea\u05dc\u05de\u05d9\u05d3\u05d9 \u05d1\u05d9\u05ea \u05e1\u05e4\u05e8\",\n      \"discStudent\": \"\u05d4\u05db\u05e9\u05e8\u05d4\/\u05d0\u05d5\u05e0\u05d9\u05d1\u05e8\u05e1\u05d9\u05d8\u05d4\",\n      \"discP2\": \"\u05d4\u05e0\u05d7\u05ea \u05d0\u05d3\u05dd 2\",\n      \"discApp\": \"\u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea \u05d3\u05d9\u05d2\u05d9\u05d8\u05dc\u05d9\u05ea\",\n      \"reasonRegion\": \"\u05d4\u05de\u05e9\u05dc\u05d5\u05d7 \u05d0\u05d9\u05e0\u05d5 \u05d0\u05e4\u05e9\u05e8\u05d9 \u05d1\u05d0\u05d6\u05d5\u05e8\u05db\u05dd. \u05d0\u05ea\u05dd \u05de\u05e9\u05ea\u05ea\u05e4\u05d9\u05dd \u05d1\u05d0\u05d5\u05e4\u05df \u05d3\u05d9\u05d2\u05d9\u05d8\u05dc\u05d9. \u05d4\u05d4\u05e0\u05d7\u05d4 \u05ea\u05d9\u05dc\u05e7\u05d7 \u05d1\u05d7\u05e9\u05d1\u05d5\u05df \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05d1\u05e1\u05d9\u05db\u05d5\u05dd.\",\n      \"reasonRussian\": \"\u05e2\u05d1\u05d5\u05e8 \u05d3\u05d5\u05d1\u05e8\u05d9 \u05e8\u05d5\u05e1\u05d9\u05ea \u05de\u05d7\u05d5\u05e5 \u05dc\u05e8\u05d5\u05e1\u05d9\u05d4, \u05e7\u05d9\u05d9\u05de\u05ea \u05e8\u05e7 \u05d2\u05e8\u05e1\u05d4 \u05d3\u05d9\u05d2\u05d9\u05d8\u05dc\u05d9\u05ea. \u05d4\u05d4\u05e0\u05d7\u05d4 \u05ea\u05d9\u05dc\u05e7\u05d7 \u05d1\u05d7\u05e9\u05d1\u05d5\u05df \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05d1\u05e1\u05d9\u05db\u05d5\u05dd.\",\n      \"reasonLanguage\": \"\u05d1\u05e9\u05e4\u05d4 \u05d6\u05d5 \u05e7\u05d9\u05d9\u05de\u05ea \u05e8\u05e7 \u05d2\u05e8\u05e1\u05d4 \u05d3\u05d9\u05d2\u05d9\u05d8\u05dc\u05d9\u05ea. \u05d4\u05d4\u05e0\u05d7\u05d4 \u05ea\u05d9\u05dc\u05e7\u05d7 \u05d1\u05d7\u05e9\u05d1\u05d5\u05df \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05d1\u05e1\u05d9\u05db\u05d5\u05dd.\",\n      \"reasonException\": \"\u05d4\u05de\u05e9\u05dc\u05d5\u05d7 \u05d1\u05d0\u05d6\u05d5\u05e8\u05db\u05dd \u05d0\u05e4\u05e9\u05e8\u05d9 \u05e8\u05e7 \u05d1\u05e9\u05e4\u05ea \u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea {X}. \u05d0\u05ea\u05dd \u05de\u05e9\u05ea\u05ea\u05e4\u05d9\u05dd \u05d1\u05d0\u05d5\u05e4\u05df \u05d3\u05d9\u05d2\u05d9\u05d8\u05dc\u05d9. \u05d4\u05d4\u05e0\u05d7\u05d4 \u05ea\u05d9\u05dc\u05e7\u05d7 \u05d1\u05d7\u05e9\u05d1\u05d5\u05df \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05d1\u05e1\u05d9\u05db\u05d5\u05dd.\",\n      \"thanksTitle\": \"\u05ea\u05d5\u05d3\u05d4 \u05e8\u05d1\u05d4!\",\n      \"thanksLine1\": \"\u05d8\u05d5\u05e2\u05df \u05d0\u05ea \u05d4\u05e7\u05d5\u05e4\u05d4\u2026\",\n      \"thanksLine2\": \"\u05ea\u05d5\u05e2\u05d1\u05e8\u05d5 \u05d1\u05e7\u05e8\u05d5\u05d1\u2026\",\n      \"preparing\": \"\u05d1\u05d4\u05db\u05e0\u05d4\u2026\",\n      \"errSelectFirst\": \"\u05d0\u05e0\u05d0 \u05d1\u05e6\u05e2\u05d5 \u05d1\u05d7\u05d9\u05e8\u05d4 \u05ea\u05d7\u05d9\u05dc\u05d4.\",\n      \"errPaarFields\": \"\u05d0\u05e0\u05d0 \u05d7\u05d6\u05e8\u05d5 \u05d0\u05d7\u05d5\u05e8\u05d4 \u05d5\u05de\u05dc\u05d0\u05d5 \u05d0\u05ea \u05db\u05dc \u05d4\u05e9\u05d3\u05d5\u05ea \u05e2\u05d1\u05d5\u05e8 \u05e9\u05e0\u05d9 \u05d4\u05d0\u05e0\u05e9\u05d9\u05dd.\",\n      \"errCountry\": \"\u05d0\u05e0\u05d0 \u05d1\u05d7\u05e8\u05d5 \u05ea\u05d7\u05d9\u05dc\u05d4 \u05de\u05d3\u05d9\u05e0\u05d4.\",\n      \"errLang\": \"\u05d0\u05e0\u05d0 \u05d1\u05d7\u05e8\u05d5 \u05e9\u05e4\u05ea \u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea.\",\n      \"errNetwork\": \"\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05d4\u05d9\u05d4 \u05dc\u05e9\u05dc\u05d5\u05d7 \u05d0\u05ea \u05d4\u05e0\u05ea\u05d5\u05e0\u05d9\u05dd. \u05d0\u05e0\u05d0 \u05d1\u05d3\u05e7\u05d5 \u05d0\u05ea \u05d7\u05d9\u05d1\u05d5\u05e8 \u05d4\u05d0\u05d9\u05e0\u05d8\u05e8\u05e0\u05d8 \u05e9\u05dc\u05db\u05dd.\",\n      \"errSubmit\": \"\u05d4\u05e9\u05dc\u05d9\u05d7\u05d4 \u05e0\u05db\u05e9\u05dc\u05d4 (\u05e9\u05d2\u05d9\u05d0\u05d4 [\u05e7\u05d5\u05d3]). \u05d0\u05e0\u05d0 \u05e0\u05e1\u05d5 \u05e9\u05d5\u05d1.\",\n      \"errProduct\": \"\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05d4\u05d9\u05d4 \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05de\u05d5\u05e6\u05e8\",\n      \"errEcwid\": \"\u05d4-API \u05e9\u05dc \u05e2\u05d2\u05dc\u05ea Ecwid \u05d0\u05d9\u05e0\u05d5 \u05d6\u05de\u05d9\u05df \u05dc\u05d0\u05d7\u05e8 [X] \u05e9\u05e0\u05d9\u05d5\u05ea.\"\n  };\n  \/\/ Anzeigename der Teilnahmesprache (Schluessel = Ecwid-Wert, deutsch)\n  const LANG_DISPLAY = {\n      \"Deutsch\": \"\u05d2\u05e8\u05de\u05e0\u05d9\u05ea\",\n      \"Englisch\": \"\u05d0\u05e0\u05d2\u05dc\u05d9\u05ea\",\n      \"Spanisch\": \"\u05e1\u05e4\u05e8\u05d3\u05d9\u05ea\",\n      \"Franz\u00f6sisch\": \"\u05e6\u05e8\u05e4\u05ea\u05d9\u05ea\",\n      \"Italienisch\": \"\u05d0\u05d9\u05d8\u05dc\u05e7\u05d9\u05ea\",\n      \"Portugiesisch\": \"\u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05d6\u05d9\u05ea\",\n      \"Arabisch\": \"\u05e2\u05e8\u05d1\u05d9\u05ea\",\n      \"Hebr\u00e4isch\": \"\u05e2\u05d1\u05e8\u05d9\u05ea\",\n      \"Farsi\": \"\u05e4\u05e8\u05e1\u05d9\u05ea\",\n      \"Georgisch\": \"\u05d2\u05d0\u05d5\u05e8\u05d2\u05d9\u05ea\",\n      \"Ukrainisch\": \"\u05d0\u05d5\u05e7\u05e8\u05d0\u05d9\u05e0\u05d9\u05ea\",\n      \"Niederl\u00e4ndisch\": \"\u05d4\u05d5\u05dc\u05e0\u05d3\u05d9\u05ea\",\n      \"T\u00fcrkisch\": \"\u05d8\u05d5\u05e8\u05e7\u05d9\u05ea\",\n      \"Russisch\": \"\u05e8\u05d5\u05e1\u05d9\u05ea\",\n      \"Chinesisch\": \"\u05e1\u05d9\u05e0\u05d9\u05ea\",\n      \"Japanisch\": \"\u05d9\u05e4\u05e0\u05d9\u05ea\",\n      \"Koreanisch\": \"\u05e7\u05d5\u05e8\u05d9\u05d0\u05e0\u05d9\u05ea\"\n  };\n  \/\/ Feste Laendernamen in der Landessprache (aus CLDR), damit die Liste in\n  \/\/ jedem Browser identisch ist \u2013 unabhaengig von der Intl-Datenlage.\n  const COUNTRY_NAMES = {\n      \"AD\": \"\u05d0\u05e0\u05d3\u05d5\u05e8\u05d4\",\n      \"AE\": \"\u05d0\u05d9\u05d7\u05d5\u05d3 \u05d4\u05d0\u05de\u05d9\u05e8\u05d5\u05d9\u05d5\u05ea \u05d4\u05e2\u05e8\u05d1\u05d9\u05d5\u05ea\",\n      \"AF\": \"\u05d0\u05e4\u05d2\u05e0\u05d9\u05e1\u05d8\u05df\",\n      \"AG\": \"\u05d0\u05e0\u05d8\u05d9\u05d2\u05d5\u05d0\u05d4 \u05d5\u05d1\u05e8\u05d1\u05d5\u05d3\u05d4\",\n      \"AL\": \"\u05d0\u05dc\u05d1\u05e0\u05d9\u05d4\",\n      \"AM\": \"\u05d0\u05e8\u05de\u05e0\u05d9\u05d4\",\n      \"AO\": \"\u05d0\u05e0\u05d2\u05d5\u05dc\u05d4\",\n      \"AR\": \"\u05d0\u05e8\u05d2\u05e0\u05d8\u05d9\u05e0\u05d4\",\n      \"AT\": \"\u05d0\u05d5\u05e1\u05d8\u05e8\u05d9\u05d4\",\n      \"AU\": \"\u05d0\u05d5\u05e1\u05d8\u05e8\u05dc\u05d9\u05d4\",\n      \"AW\": \"\u05d0\u05e8\u05d5\u05d1\u05d4\",\n      \"AZ\": \"\u05d0\u05d6\u05e8\u05d1\u05d9\u05d9\u05d2'\u05df\",\n      \"BA\": \"\u05d1\u05d5\u05e1\u05e0\u05d9\u05d4 \u05d5\u05d4\u05e8\u05e6\u05d2\u05d5\u05d1\u05d9\u05e0\u05d4\",\n      \"BB\": \"\u05d1\u05e8\u05d1\u05d3\u05d5\u05e1\",\n      \"BD\": \"\u05d1\u05e0\u05d2\u05dc\u05d3\u05e9\",\n      \"BE\": \"\u05d1\u05dc\u05d2\u05d9\u05d4\",\n      \"BF\": \"\u05d1\u05d5\u05e8\u05e7\u05d9\u05e0\u05d4 \u05e4\u05d0\u05e1\u05d5\",\n      \"BG\": \"\u05d1\u05d5\u05dc\u05d2\u05e8\u05d9\u05d4\",\n      \"BH\": \"\u05d1\u05d7\u05e8\u05d9\u05d9\u05df\",\n      \"BI\": \"\u05d1\u05d5\u05e8\u05d5\u05e0\u05d3\u05d9\",\n      \"BJ\": \"\u05d1\u05e0\u05d9\u05df\",\n      \"BN\": \"\u05d1\u05e8\u05d5\u05e0\u05d9\u05d9\",\n      \"BO\": \"\u05d1\u05d5\u05dc\u05d9\u05d1\u05d9\u05d4\",\n      \"BR\": \"\u05d1\u05e8\u05d6\u05d9\u05dc\",\n      \"BS\": \"\u05d1\u05d4\u05d0\u05de\u05d4\",\n      \"BT\": \"\u05d1\u05d4\u05d5\u05d8\u05df\",\n      \"BW\": \"\u05d1\u05d5\u05e6\u05d5\u05d0\u05e0\u05d4\",\n      \"BY\": \"\u05d1\u05dc\u05d0\u05e8\u05d5\u05e1\",\n      \"BZ\": \"\u05d1\u05dc\u05d9\u05d6\",\n      \"CA\": \"\u05e7\u05e0\u05d3\u05d4\",\n      \"CD\": \"\u05e7\u05d5\u05e0\u05d2\u05d5 (\u05e7\u05d9\u05e0\u05e9\u05d0\u05e1\u05d4)\",\n      \"CF\": \"\u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05de\u05e8\u05db\u05d6-\u05d0\u05e4\u05e8\u05d9\u05e7\u05d0\u05d9\u05ea\",\n      \"CG\": \"\u05e7\u05d5\u05e0\u05d2\u05d5 (\u05d1\u05e8\u05d6\u05d0\u05d5\u05d9\u05dc)\",\n      \"CH\": \"\u05e9\u05d5\u05d5\u05d9\u05d9\u05e5\",\n      \"CI\": \"\u05d7\u05d5\u05e3 \u05d4\u05e9\u05e0\u05d4\u05d1\",\n      \"CL\": \"\u05e6'\u05d9\u05dc\u05d4\",\n      \"CM\": \"\u05e7\u05de\u05e8\u05d5\u05df\",\n      \"CN\": \"\u05e1\u05d9\u05df\",\n      \"CO\": \"\u05e7\u05d5\u05dc\u05d5\u05de\u05d1\u05d9\u05d4\",\n      \"CR\": \"\u05e7\u05d5\u05e1\u05d8\u05d4 \u05e8\u05d9\u05e7\u05d4\",\n      \"CV\": \"\u05db\u05e3 \u05d5\u05e8\u05d3\u05d4\",\n      \"CY\": \"\u05e7\u05e4\u05e8\u05d9\u05e1\u05d9\u05df\",\n      \"CZ\": \"\u05e6'\u05db\u05d9\u05d4\",\n      \"DE\": \"\u05d2\u05e8\u05de\u05e0\u05d9\u05d4\",\n      \"DJ\": \"\u05d2'\u05d9\u05d1\u05d5\u05d8\u05d9\",\n      \"DK\": \"\u05d3\u05e0\u05de\u05e8\u05e7\",\n      \"DM\": \"\u05d3\u05d5\u05de\u05d9\u05e0\u05d9\u05e7\u05d4\",\n      \"DO\": \"\u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05d3\u05d5\u05de\u05d9\u05e0\u05d9\u05e7\u05e0\u05d9\u05ea\",\n      \"DZ\": \"\u05d0\u05dc\u05d2'\u05d9\u05e8\u05d9\u05d4\",\n      \"EC\": \"\u05d0\u05e7\u05d5\u05d5\u05d3\u05d5\u05e8\",\n      \"EE\": \"\u05d0\u05e1\u05d8\u05d5\u05e0\u05d9\u05d4\",\n      \"EG\": \"\u05de\u05e6\u05e8\u05d9\u05dd\",\n      \"ES\": \"\u05e1\u05e4\u05e8\u05d3\",\n      \"ET\": \"\u05d0\u05ea\u05d9\u05d5\u05e4\u05d9\u05d4\",\n      \"FI\": \"\u05e4\u05d9\u05e0\u05dc\u05e0\u05d3\",\n      \"FJ\": \"\u05e4\u05d9\u05d2'\u05d9\",\n      \"FM\": \"\u05de\u05d9\u05e7\u05e8\u05d5\u05e0\u05d6\u05d9\u05d4\",\n      \"FR\": \"\u05e6\u05e8\u05e4\u05ea\",\n      \"GA\": \"\u05d2\u05d1\u05d5\u05df\",\n      \"GB\": \"\u05d1\u05e8\u05d9\u05d8\u05e0\u05d9\u05d4\",\n      \"GB-SCT\": \"\u05e1\u05e7\u05d5\u05d8\u05dc\u05e0\u05d3\",\n      \"GD\": \"\u05d2\u05e8\u05e0\u05d3\u05d4\",\n      \"GE\": \"\u05d2\u05d0\u05d5\u05e8\u05d2\u05d9\u05d4\",\n      \"GH\": \"\u05d2\u05d0\u05e0\u05d4\",\n      \"GM\": \"\u05d2\u05de\u05d1\u05d9\u05d4\",\n      \"GN\": \"\u05d2\u05d9\u05e0\u05d0\u05d4\",\n      \"GQ\": \"\u05d2\u05d9\u05e0\u05d0\u05d4 \u05d4\u05de\u05e9\u05d5\u05d5\u05e0\u05d9\u05ea\",\n      \"GR\": \"\u05d9\u05d5\u05d5\u05df\",\n      \"GT\": \"\u05d2\u05d5\u05d0\u05d8\u05de\u05dc\u05d4\",\n      \"GW\": \"\u05d2\u05d9\u05e0\u05d0\u05d4 \u05d1\u05d9\u05e1\u05d0\u05d5\",\n      \"GY\": \"\u05d2\u05d9\u05d0\u05e0\u05d4\",\n      \"HK\": \"\u05d4\u05d5\u05e0\u05d2 \u05e7\u05d5\u05e0\u05d2\",\n      \"HN\": \"\u05d4\u05d5\u05e0\u05d3\u05d5\u05e8\u05e1\",\n      \"HR\": \"\u05e7\u05e8\u05d5\u05d0\u05d8\u05d9\u05d4\",\n      \"HT\": \"\u05d4\u05d0\u05d9\u05d8\u05d9\",\n      \"HU\": \"\u05d4\u05d5\u05e0\u05d2\u05e8\u05d9\u05d4\",\n      \"ID\": \"\u05d0\u05d9\u05e0\u05d3\u05d5\u05e0\u05d6\u05d9\u05d4\",\n      \"IE\": \"\u05d0\u05d9\u05e8\u05dc\u05e0\u05d3\",\n      \"IL\": \"\u05d9\u05e9\u05e8\u05d0\u05dc\",\n      \"IN\": \"\u05d4\u05d5\u05d3\u05d5\",\n      \"IQ\": \"\u05e2\u05d9\u05e8\u05d0\u05e7\",\n      \"IR\": \"\u05d0\u05d9\u05e8\u05d0\u05df\",\n      \"IS\": \"\u05d0\u05d9\u05e1\u05dc\u05e0\u05d3\",\n      \"IT\": \"\u05d0\u05d9\u05d8\u05dc\u05d9\u05d4\",\n      \"JM\": \"\u05d2'\u05de\u05d9\u05d9\u05e7\u05d4\",\n      \"JO\": \"\u05d9\u05e8\u05d3\u05df\",\n      \"JP\": \"\u05d9\u05e4\u05df\",\n      \"KE\": \"\u05e7\u05e0\u05d9\u05d4\",\n      \"KG\": \"\u05e7\u05d9\u05e8\u05d2\u05d9\u05d6\u05e1\u05d8\u05df\",\n      \"KH\": \"\u05e7\u05de\u05d1\u05d5\u05d3\u05d9\u05d4\",\n      \"KI\": \"\u05e7\u05d9\u05e8\u05d9\u05d1\u05d0\u05d8\u05d9\",\n      \"KM\": \"\u05e7\u05d5\u05de\u05d5\u05e8\u05d5\",\n      \"KN\": \"\u05e1\u05e0\u05d8 \u05e7\u05d9\u05d8\u05e1 \u05d5\u05e0\u05d5\u05d5\u05d9\u05e1\",\n      \"KR\": \"\u05d3\u05e8\u05d5\u05dd \u05e7\u05d5\u05e8\u05d9\u05d0\u05d4\",\n      \"KW\": \"\u05db\u05d5\u05d5\u05d9\u05ea\",\n      \"KZ\": \"\u05e7\u05d6\u05d7\u05e1\u05d8\u05df\",\n      \"LA\": \"\u05dc\u05d0\u05d5\u05e1\",\n      \"LB\": \"\u05dc\u05d1\u05e0\u05d5\u05df\",\n      \"LC\": \"\u05e1\u05e0\u05d8 \u05dc\u05d5\u05e1\u05d9\u05d4\",\n      \"LI\": \"\u05dc\u05d9\u05db\u05d8\u05e0\u05e9\u05d8\u05d9\u05d9\u05df\",\n      \"LK\": \"\u05e1\u05e8\u05d9 \u05dc\u05e0\u05e7\u05d4\",\n      \"LR\": \"\u05dc\u05d9\u05d1\u05e8\u05d9\u05d4\",\n      \"LS\": \"\u05dc\u05e1\u05d5\u05d8\u05d5\",\n      \"LT\": \"\u05dc\u05d9\u05d8\u05d0\",\n      \"LU\": \"\u05dc\u05d5\u05e7\u05e1\u05de\u05d1\u05d5\u05e8\u05d2\",\n      \"LV\": \"\u05dc\u05d8\u05d1\u05d9\u05d4\",\n      \"LY\": \"\u05dc\u05d5\u05d1\",\n      \"MA\": \"\u05de\u05e8\u05d5\u05e7\u05d5\",\n      \"MD\": \"\u05de\u05d5\u05dc\u05d3\u05d5\u05d1\u05d4\",\n      \"ME\": \"\u05de\u05d5\u05e0\u05d8\u05e0\u05d2\u05e8\u05d5\",\n      \"MG\": \"\u05de\u05d3\u05d2\u05e1\u05e7\u05e8\",\n      \"MH\": \"\u05d0\u05d9\u05d9 \u05de\u05e8\u05e9\u05dc\",\n      \"MK\": \"\u05e6\u05e4\u05d5\u05df \u05de\u05e7\u05d3\u05d5\u05e0\u05d9\u05d4\",\n      \"ML\": \"\u05de\u05d0\u05dc\u05d9\",\n      \"MM\": \"\u05de\u05d9\u05d0\u05e0\u05de\u05e8\",\n      \"MN\": \"\u05de\u05d5\u05e0\u05d2\u05d5\u05dc\u05d9\u05d4\",\n      \"MO\": \"\u05de\u05e7\u05d0\u05d5\",\n      \"MR\": \"\u05de\u05d0\u05d5\u05e8\u05d9\u05d8\u05e0\u05d9\u05d4\",\n      \"MT\": \"\u05de\u05dc\u05d8\u05d4\",\n      \"MU\": \"\u05de\u05d0\u05d5\u05e8\u05d9\u05e6\u05d9\u05d5\u05e1\",\n      \"MV\": \"\u05d4\u05d0\u05d9\u05d9\u05dd \u05d4\u05de\u05dc\u05d3\u05d9\u05d1\u05d9\u05d9\u05dd\",\n      \"MW\": \"\u05de\u05dc\u05d0\u05d5\u05d5\u05d9\",\n      \"MX\": \"\u05de\u05e7\u05e1\u05d9\u05e7\u05d5\",\n      \"MY\": \"\u05de\u05dc\u05d6\u05d9\u05d4\",\n      \"MZ\": \"\u05de\u05d5\u05d6\u05de\u05d1\u05d9\u05e7\",\n      \"NA\": \"\u05e0\u05de\u05d9\u05d1\u05d9\u05d4\",\n      \"NE\": \"\u05e0\u05d9\u05d6'\u05e8\",\n      \"NG\": \"\u05e0\u05d9\u05d2\u05e8\u05d9\u05d4\",\n      \"NI\": \"\u05e0\u05d9\u05e7\u05e8\u05d2\u05d5\u05d0\u05d4\",\n      \"NL\": \"\u05d4\u05d5\u05dc\u05e0\u05d3\",\n      \"NO\": \"\u05e0\u05d5\u05e8\u05d5\u05d5\u05d2\u05d9\u05d4\",\n      \"NP\": \"\u05e0\u05e4\u05d0\u05dc\",\n      \"NR\": \"\u05e0\u05d0\u05d5\u05e8\u05d5\",\n      \"NZ\": \"\u05e0\u05d9\u05d5 \u05d6\u05d9\u05dc\u05e0\u05d3\",\n      \"OM\": \"\u05e2\u05d5\u05de\u05d0\u05df\",\n      \"PA\": \"\u05e4\u05e0\u05de\u05d4\",\n      \"PE\": \"\u05e4\u05e8\u05d5\",\n      \"PG\": \"\u05e4\u05e4\u05d5\u05d0\u05d4 \u05d2\u05d9\u05e0\u05d0\u05d4 \u05d4\u05d7\u05d3\u05e9\u05d4\",\n      \"PH\": \"\u05d4\u05e4\u05d9\u05dc\u05d9\u05e4\u05d9\u05e0\u05d9\u05dd\",\n      \"PK\": \"\u05e4\u05e7\u05d9\u05e1\u05d8\u05df\",\n      \"PL\": \"\u05e4\u05d5\u05dc\u05d9\u05df\",\n      \"PR\": \"\u05e4\u05d5\u05d0\u05e8\u05d8\u05d5 \u05e8\u05d9\u05e7\u05d5\",\n      \"PS\": \"\u05e4\u05dc\u05e1\u05d8\u05d9\u05df\",\n      \"PT\": \"\u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05dc\",\n      \"PW\": \"\u05e4\u05dc\u05d0\u05d5\",\n      \"PY\": \"\u05e4\u05e8\u05d2\u05d5\u05d5\u05d0\u05d9\",\n      \"QA\": \"\u05e7\u05d8\u05d0\u05e8\",\n      \"RO\": \"\u05e8\u05d5\u05de\u05e0\u05d9\u05d4\",\n      \"RS\": \"\u05e1\u05e8\u05d1\u05d9\u05d4\",\n      \"RU\": \"\u05e8\u05d5\u05e1\u05d9\u05d4\",\n      \"RW\": \"\u05e8\u05d5\u05d0\u05e0\u05d3\u05d4\",\n      \"SA\": \"\u05e2\u05e8\u05d1 \u05d4\u05e1\u05e2\u05d5\u05d3\u05d9\u05ea\",\n      \"SB\": \"\u05d0\u05d9\u05d9 \u05e9\u05dc\u05de\u05d4\",\n      \"SC\": \"\u05d0\u05d9\u05d9 \u05e1\u05d9\u05d9\u05e9\u05dc\",\n      \"SD\": \"\u05e1\u05d5\u05d3\u05df\",\n      \"SE\": \"\u05e9\u05d5\u05d5\u05d3\u05d9\u05d4\",\n      \"SG\": \"\u05e1\u05d9\u05e0\u05d2\u05e4\u05d5\u05e8\",\n      \"SI\": \"\u05e1\u05dc\u05d5\u05d1\u05e0\u05d9\u05d4\",\n      \"SK\": \"\u05e1\u05dc\u05d5\u05d1\u05e7\u05d9\u05d4\",\n      \"SL\": \"\u05e1\u05d9\u05d9\u05e8\u05d4 \u05dc\u05d0\u05d5\u05df\",\n      \"SM\": \"\u05e1\u05df \u05de\u05e8\u05d9\u05e0\u05d5\",\n      \"SN\": \"\u05e1\u05e0\u05d2\u05dc\",\n      \"SO\": \"\u05e1\u05d5\u05de\u05dc\u05d9\u05d4\",\n      \"SR\": \"\u05e1\u05d5\u05e8\u05d9\u05e0\u05d0\u05dd\",\n      \"SS\": \"\u05d3\u05e8\u05d5\u05dd \u05e1\u05d5\u05d3\u05df\",\n      \"ST\": \"\u05e1\u05d0\u05d5 \u05d8\u05d5\u05de\u05d4 \u05d5\u05e4\u05e8\u05d9\u05e0\u05e1\u05d9\u05e4\u05d4\",\n      \"SV\": \"\u05d0\u05dc \u05e1\u05dc\u05d1\u05d3\u05d5\u05e8\",\n      \"SZ\": \"\u05d0\u05e1\u05d5\u05d5\u05d0\u05d8\u05d9\u05e0\u05d9\",\n      \"TD\": \"\u05e6'\u05d0\u05d3\",\n      \"TG\": \"\u05d8\u05d5\u05d2\u05d5\",\n      \"TH\": \"\u05ea\u05d0\u05d9\u05dc\u05e0\u05d3\",\n      \"TJ\": \"\u05d8\u05d2'\u05d9\u05e7\u05d9\u05e1\u05d8\u05df\",\n      \"TL\": \"\u05d8\u05d9\u05de\u05d5\u05e8-\u05dc\u05e1\u05d8\u05d4\",\n      \"TM\": \"\u05d8\u05d5\u05e8\u05e7\u05de\u05e0\u05d9\u05e1\u05d8\u05df\",\n      \"TN\": \"\u05ea\u05d5\u05e0\u05d9\u05e1\u05d9\u05d4\",\n      \"TO\": \"\u05d8\u05d5\u05e0\u05d2\u05d4\",\n      \"TR\": \"\u05d8\u05d5\u05e8\u05e7\u05d9\u05d4\",\n      \"TT\": \"\u05d8\u05e8\u05d9\u05e0\u05d9\u05d3\u05d3 \u05d5\u05d8\u05d5\u05d1\u05d2\u05d5\",\n      \"TV\": \"\u05d8\u05d5\u05d1\u05d0\u05dc\u05d5\",\n      \"TW\": \"\u05d8\u05d9\u05d9\u05d5\u05d5\u05d0\u05df\",\n      \"TZ\": \"\u05d8\u05e0\u05d6\u05e0\u05d9\u05d4\",\n      \"UA\": \"\u05d0\u05d5\u05e7\u05e8\u05d0\u05d9\u05e0\u05d4\",\n      \"UG\": \"\u05d0\u05d5\u05d2\u05e0\u05d3\u05d4\",\n      \"US\": \"\u05d0\u05e8\u05e6\u05d5\u05ea \u05d4\u05d1\u05e8\u05d9\u05ea\",\n      \"UY\": \"\u05d0\u05d5\u05e8\u05d5\u05d2\u05d5\u05d5\u05d0\u05d9\",\n      \"UZ\": \"\u05d0\u05d5\u05d6\u05d1\u05e7\u05d9\u05e1\u05d8\u05df\",\n      \"VC\": \"\u05e1\u05e0\u05d8 \u05d5\u05d9\u05e0\u05e1\u05e0\u05d8 \u05d5\u05d4\u05d2\u05e8\u05e0\u05d3\u05d9\u05e0\u05d9\u05dd\",\n      \"VE\": \"\u05d5\u05e0\u05e6\u05d5\u05d0\u05dc\u05d4\",\n      \"VN\": \"\u05d5\u05d9\u05d9\u05d8\u05e0\u05d0\u05dd\",\n      \"VU\": \"\u05d5\u05e0\u05d5\u05d0\u05d8\u05d5\",\n      \"WS\": \"\u05e1\u05de\u05d5\u05d0\u05d4\",\n      \"XK\": \"\u05e7\u05d5\u05e1\u05d5\u05d1\u05d5\",\n      \"YE\": \"\u05ea\u05d9\u05de\u05df\",\n      \"ZA\": \"\u05d3\u05e8\u05d5\u05dd \u05d0\u05e4\u05e8\u05d9\u05e7\u05d4\",\n      \"ZM\": \"\u05d6\u05de\u05d1\u05d9\u05d4\",\n      \"ZW\": \"\u05d6\u05d9\u05de\u05d1\u05d1\u05d5\u05d0\u05d4\"\n  };\n\n  \/\/ \u2500\u2500 Zusaetzliche Suchbegriffe (Aliasse) je Land \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Beeinflusst NUR die Suche, nicht den angezeigten Namen. Alles klein schreiben.\n  \/\/ Wichtig fuer HE: lateinische Schreibweisen, damit die Suche auch mit\n  \/\/ umgeschalteter Tastatur funktioniert.\n  const COUNTRY_SEARCH_ALIASES = {\n      \"US\": [\"\u05d0\u05e8\u05d4\u05d1\", \"\u05d0\u05e8\u05d4\\\"\u05d1\", \"\u05d0\u05de\u05e8\u05d9\u05e7\u05d4\", \"\u05d0\u05e8\u05e6\u05d5\u05ea \u05d4\u05d1\u05e8\u05d9\u05ea\", \"usa\", \"america\", \"united states of america\", \"united states\"],\n      \"GB\": [\"\u05d0\u05e0\u05d2\u05dc\u05d9\u05d4\", \"\u05d1\u05e8\u05d9\u05d8\u05e0\u05d9\u05d4\", \"uk\", \"england\", \"britain\", \"great britain\", \"united kingdom\"],\n      \"GB-SCT\": [\"\u05e1\u05e7\u05d5\u05d8\u05dc\u05e0\u05d3\", \"scotland\"],\n      \"KR\": [\"\u05e7\u05d5\u05e8\u05d9\u05d0\u05d4\", \"\u05d3\u05e8\u05d5\u05dd \u05e7\u05d5\u05e8\u05d9\u05d0\u05d4\", \"korea\", \"south korea\"],\n      \"NL\": [\"\u05d4\u05d5\u05dc\u05e0\u05d3\", \"holland\", \"netherlands\"],\n      \"CH\": [\"\u05e9\u05d5\u05d5\u05d9\u05d9\u05e5\", \"switzerland\"],\n      \"DE\": [\"\u05d2\u05e8\u05de\u05e0\u05d9\u05d4\", \"deutschland\", \"germany\"],\n      \"AT\": [\"\u05d0\u05d5\u05e1\u05d8\u05e8\u05d9\u05d4\", \"austria\"],\n      \"CZ\": [\"\u05e6\u05db\u05d9\u05d4\", \"\u05e6'\u05db\u05d9\u05d4\", \"czech republic\", \"czechia\"],\n      \"TR\": [\"\u05d8\u05d5\u05e8\u05e7\u05d9\u05d4\", \"turkey\", \"turkiye\", \"t\u00fcrkiye\"],\n      \"RU\": [\"\u05e8\u05d5\u05e1\u05d9\u05d4\", \"russia\", \"russian federation\"],\n      \"JP\": [\"\u05d9\u05e4\u05df\"],\n      \"CN\": [\"\u05e1\u05d9\u05df\"],\n      \"IL\": [\"\u05d9\u05e9\u05e8\u05d0\u05dc\"],\n      \"FR\": [\"\u05e6\u05e8\u05e4\u05ea\"],\n      \"IT\": [\"\u05d0\u05d9\u05d8\u05dc\u05d9\u05d4\"],\n      \"ES\": [\"\u05e1\u05e4\u05e8\u05d3\"],\n      \"PT\": [\"\u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05dc\"],\n      \"BR\": [\"\u05d1\u05e8\u05d6\u05d9\u05dc\"],\n      \"MX\": [\"\u05de\u05e7\u05e1\u05d9\u05e7\u05d5\"],\n      \"CA\": [\"\u05e7\u05e0\u05d3\u05d4\"],\n      \"AU\": [\"\u05d0\u05d5\u05e1\u05d8\u05e8\u05dc\u05d9\u05d4\"],\n      \"NZ\": [\"\u05e0\u05d9\u05d5 \u05d6\u05d9\u05dc\u05e0\u05d3\"],\n      \"IN\": [\"\u05d4\u05d5\u05d3\u05d5\"],\n      \"ZA\": [\"\u05d3\u05e8\u05d5\u05dd \u05d0\u05e4\u05e8\u05d9\u05e7\u05d4\"],\n      \"EG\": [\"\u05de\u05e6\u05e8\u05d9\u05dd\"],\n      \"GR\": [\"\u05d9\u05d5\u05d5\u05df\"],\n      \"PL\": [\"\u05e4\u05d5\u05dc\u05d9\u05df\"],\n      \"UA\": [\"\u05d0\u05d5\u05e7\u05e8\u05d0\u05d9\u05e0\u05d4\"],\n      \"SE\": [\"\u05e9\u05d5\u05d5\u05d3\u05d9\u05d4\"],\n      \"NO\": [\"\u05e0\u05d5\u05e8\u05d5\u05d5\u05d2\u05d9\u05d4\"],\n      \"DK\": [\"\u05d3\u05e0\u05de\u05e8\u05e7\"],\n      \"FI\": [\"\u05e4\u05d9\u05e0\u05dc\u05e0\u05d3\"],\n      \"BE\": [\"\u05d1\u05dc\u05d2\u05d9\u05d4\"],\n      \"IE\": [\"\u05d0\u05d9\u05e8\u05dc\u05e0\u05d3\"],\n      \"GE\": [\"\u05d2\u05d0\u05d5\u05e8\u05d2\u05d9\u05d4\", \"\u05d2\u05e8\u05d5\u05d6\u05d9\u05d4\", \"grusia\", \"georgia\"],\n      \"IR\": [\"\u05d0\u05d9\u05e8\u05d0\u05df\", \"persia\", \"iran\"],\n      \"AE\": [\"\u05d0\u05d9\u05d7\u05d5\u05d3 \u05d4\u05d0\u05de\u05d9\u05e8\u05d5\u05d9\u05d5\u05ea\", \"\u05d3\u05d5\u05d1\u05d0\u05d9\", \"uae\", \"emirates\", \"dubai\", \"united arab emirates\"],\n      \"SA\": [\"\u05e2\u05e8\u05d1 \u05d4\u05e1\u05e2\u05d5\u05d3\u05d9\u05ea\"],\n      \"TW\": [\"\u05d8\u05d9\u05d9\u05d5\u05d5\u05d0\u05df\", \"taiwan\"],\n      \"HK\": [\"\u05d4\u05d5\u05e0\u05d2 \u05e7\u05d5\u05e0\u05d2\", \"hong kong\"],\n      \"SG\": [\"\u05e1\u05d9\u05e0\u05d2\u05e4\u05d5\u05e8\"],\n      \"TH\": [\"\u05ea\u05d0\u05d9\u05dc\u05e0\u05d3\"],\n      \"MM\": [\"\u05de\u05d9\u05d0\u05e0\u05de\u05e8\", \"\u05d1\u05d5\u05e8\u05de\u05d4\", \"burma\", \"myanmar\"],\n      \"AR\": [\"\u05d0\u05e8\u05d2\u05e0\u05d8\u05d9\u05e0\u05d4\"],\n      \"CL\": [\"\u05e6\u05d9\u05dc\u05d4\"],\n      \"CI\": [\"ivory coast\", \"cote d'ivoire\"],\n      \"TL\": [\"east timor\", \"timor-leste\"],\n      \"SZ\": [\"swaziland\", \"eswatini\"],\n      \"MK\": [\"macedonia\", \"north macedonia\"],\n      \"MO\": [\"macao\", \"macau\"],\n      \"KP\": [\"north korea\"],\n      \"CV\": [\"cabo verde\", \"cape verde\"],\n      \"CD\": [\"dr congo\", \"drc\", \"congo kinshasa\"],\n      \"CG\": [\"congo brazzaville\"],\n      \"VA\": [\"vatican\", \"holy see\"],\n      \"LA\": [\"laos\"],\n      \"VN\": [\"vietnam\", \"viet nam\"],\n      \"MD\": [\"moldova\"],\n      \"BY\": [\"belarus\"]\n  };\n  const COUNTRIES = {\n    cat1: [\"CY\",\"CA\",\"FR\",\"FI\",\"BH\",\"AU\",\"AD\",\"SE\",\"DE\",\"SA\",\"AT\",\"BE\",\"HK\",\"MT\",\"IS\",\"SM\",\"NL\",\"DK\",\"TW\",\"AE\",\"US\",\"BN\",\"CH\",\"NO\",\"GY\",\"QA\",\"MO\",\"IE\",\"LU\",\"SG\",\"LI\",\"GB\",\"GB-SCT\"],\n    cat2: [\"KR\",\"ME\",\"CL\",\"TT\",\"MV\",\"UY\",\"BS\",\"OM\",\"SC\",\"MY\",\"PA\",\"TR\",\"LV\",\"GR\",\"KZ\",\"SK\",\"HU\",\"RU\",\"RO\",\"EE\",\"AW\",\"PT\",\"PR\",\"HR\",\"KW\",\"JP\",\"NZ\",\"PL\",\"IL\",\"ES\",\"LT\",\"SI\",\"CZ\",\"IT\"],\n    cat3: [\"BZ\",\"TN\",\"GT\",\"IQ\",\"ZA\",\"FJ\",\"EC\",\"LY\",\"ID\",\"VN\",\"BT\",\"DZ\",\"PE\",\"PW\",\"BW\",\"DM\",\"PY\",\"MD\",\"GQ\",\"MN\",\"VC\",\"IR\",\"GD\",\"EG\",\"CO\",\"SR\",\"TM\",\"BA\",\"BB\",\"BR\",\"AL\",\"AM\",\"GA\",\"MX\",\"AZ\",\"TH\",\"LC\",\"CN\",\"MK\",\"DO\",\"AG\",\"AR\",\"GE\",\"CR\",\"MU\",\"RS\",\"BY\",\"KN\",\"XK\",\"BG\"],\n    cat4: [\"UA\",\"BI\",\"SS\",\"CF\",\"YE\",\"MZ\",\"MW\",\"SO\",\"CD\",\"LR\",\"MG\",\"NE\",\"AF\",\"SD\",\"SB\",\"ML\",\"HT\",\"VU\",\"BF\",\"LS\",\"TD\",\"GW\",\"TG\",\"GM\",\"KI\",\"SL\",\"PG\",\"UG\",\"KM\",\"PS\",\"RW\",\"TZ\",\"ET\",\"ZM\",\"FM\",\"BJ\",\"GN\",\"TL\",\"MM\",\"SN\",\"CM\",\"TJ\",\"TV\",\"NP\",\"CG\",\"ST\",\"PK\",\"KE\",\"ZW\",\"MH\",\"HN\",\"TO\",\"CI\",\"WS\",\"GH\",\"VE\",\"KH\",\"MR\",\"KG\",\"NI\",\"NG\",\"DJ\",\"AO\",\"LA\",\"BD\",\"BO\",\"MA\",\"JO\",\"LB\",\"NR\",\"IN\",\"NA\",\"CV\",\"UZ\",\"PH\",\"SZ\",\"JM\",\"SV\",\"LK\"]\n  };\n  \/\/ \u2500\u2500 Ecwid-Optionsnamen und -werte: bleiben exakt deutsch wie im Shop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const OPT_COMM_LANG = \"In welcher Sprache nimmst Du teil?\";\n  const OPT_STATUS    = \"Trifft etwas davon auf Dich zu?\";\n  const STATUS_LABEL = {\n    paar:        \"Zu zweit (gleicher Haushalt)\",\n    schueler:    \"Sch\u00fcler:innen\",\n    student:     \"Student\",\n    wiederholer: \"Wiederholer\",\n    apponly:     \"Digitale Teilnahme (App)\"\n  };\n  \/\/ \u2500\u2500 Shadow DOM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const host = document.getElementById(\"sw-host-he\");\n  const shadow = host.attachShadow({ mode: \"open\" });\n  const styleEl = document.createElement(\"style\");\n  styleEl.textContent = `\n    :host {\n      display: block;\n      --bg:           #F5FAF6;\n      --card:         #FFFFFF;\n      --ink:          #0C1E14;\n      --ink-muted:    #27703F;\n      --accent:       #0C1E14;\n      --accent-light: #E6F2E8;\n      --border:       #C8E0CE;\n      --radius:       16px;\n      --radius-sm:    10px;\n    }\n    @keyframes wiz-spin { to { transform: rotate(360deg); } }\n    .sw-root {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 20px; font-weight: 400; color: var(--ink);\n      background: var(--bg); padding: 32px 20px;\n      display: flex; align-items: flex-start; justify-content: center;\n    }\n    .sw-card {\n      background: var(--card); border: 1px solid var(--border);\n      border-radius: 24px; padding: 36px 32px;\n      width: 100%; max-width: 780px;\n      box-shadow: 0 4px 24px rgba(12,30,20,0.08); box-sizing: border-box;\n    }\n    @media (max-width: 480px) {\n      .sw-root { padding: 16px 10px; }\n      .sw-card { padding: 24px 16px; border-radius: 16px; }\n    }\n    .sw-progress { display: flex; gap: 8px; margin-bottom: 32px; }\n    .sw-progress-step { flex: 1; height: 4px; background: var(--border); border-radius: 999px; transition: background 0.35s; }\n    .sw-progress-step.active { background: var(--accent); }\n    .sw-progress-step.done   { background: var(--accent); opacity: 0.4; }\n    .sw-step-label { font-size: 12px; font-weight: 400; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: 10px; }\n    .sw-heading { font-size: 26px; font-weight: 500; line-height: 1.2; margin: 0 0 6px; color: var(--accent); letter-spacing: 0.01em; }\n    .sw-subtext { font-size: 18px; font-weight: 400; color: var(--ink-muted); margin: 0 0 28px; line-height: 1.6; }\n    .sw-label { display: block; font-size: 18px; font-weight: 700; margin-bottom: 6px; color: var(--ink); }\n    .sw-select, .sw-text-input {\n      width: 100%; padding: 13px 15px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg);\n      font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-select {\n      appearance: none;\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2327703F' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: right 15px center;\n      cursor: pointer;\n    }\n    .sw-select:focus, .sw-text-input:focus {\n      outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1);\n    }\n    .sw-text-input { margin-bottom: 14px; }\n    .sw-redirect { display: none; margin-top: 12px; padding: 18px 20px; border-radius: var(--radius-sm); background: #FFF8F0; border: 1px solid rgba(180,80,0,0.2); font-size: 17px; line-height: 1.8; color: var(--ink); }\n    .sw-redirect strong { display: block; margin-bottom: 8px; font-size: 17px; color: #7A3500; }\n    .sw-redirect a { color: #27703F; text-decoration: underline; }\n    .sw-infobox {\n      margin-top: 12px; padding: 15px 17px; border-radius: var(--radius-sm);\n      background: var(--accent-light); border: 1px solid rgba(12,30,20,0.15);\n      font-size: 18px; font-weight: 400; line-height: 1.5;\n    }\n    .sw-infobox-title {\n      font-weight: 700; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase;\n      color: var(--accent); margin-bottom: 3px;\n    }\n    .sw-divider { border: 0; border-top: 1px solid var(--border); margin: 30px 0 24px; }\n    .sw-choice-row { display: flex; gap: 10px; flex-wrap: wrap; }\n    .sw-choice-card {\n      flex: 1; min-width: 150px; padding: 16px 14px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      text-align: center; cursor: pointer; font-size: 17px; line-height: 1.3;\n      transition: all 0.15s; background: var(--bg); box-sizing: border-box;\n    }\n    .sw-choice-card:hover { border-color: var(--accent); }\n    .sw-choice-card.active { background: var(--accent-light); border-color: var(--accent); font-weight: 700; color: var(--accent); }\n    @media (max-width: 480px) { .sw-choice-card { min-width: 100%; } }\n    .sw-person-block { margin-bottom: 8px; }\n    .sw-person-title { font-weight: 700; font-size: 21px; color: var(--accent); margin-bottom: 16px; }\n    .sw-field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 0; }\n    @media (max-width: 480px) { .sw-field-grid { grid-template-columns: 1fr; } }\n    .sw-range-header { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 22px; }\n    .sw-range-header-label { font-weight: 700; font-size: 18px; }\n    .sw-amount-display { display: flex; align-items: baseline; gap: 3px; }\n    .sw-amount-display span { font-size: 18px; font-weight: 400; }\n    .sw-amount-input {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 36px; font-weight: 700; color: var(--ink);\n      border: 2px solid var(--border); background: var(--bg);\n      text-align: right; width: 132px; padding: 4px 12px;\n      outline: none; border-radius: var(--radius-sm);\n      transition: background 0.15s, color 0.15s, border-color 0.15s, box-shadow 0.15s;\n    }\n    .sw-amount-input:hover { border-color: var(--accent); background: var(--accent-light); }\n    .sw-amount-input:focus { border-color: var(--accent); background: var(--accent-light); color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    input[type=range].sw-range {\n      -webkit-appearance: none; width: 100%; height: 6px;\n      border-radius: 999px; background: var(--border); outline: none; cursor: pointer;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb {\n      -webkit-appearance: none; width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35);\n      cursor: pointer; transition: transform 0.15s, box-shadow 0.15s;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb:hover { transform: scale(1.08); box-shadow: 0 0 0 9px rgba(12,30,20,0.18), 0 3px 12px rgba(12,30,20,0.4); }\n    input[type=range].sw-range::-webkit-slider-thumb:active { transform: scale(1.12); }\n    input[type=range].sw-range::-moz-range-thumb {\n      width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      border: none; box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); cursor: pointer;\n    }\n    input[type=range].sw-range.sw-pulse::-webkit-slider-thumb { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    input[type=range].sw-range.sw-pulse::-moz-range-thumb    { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    @keyframes sw-thumb-pulse {\n      0%, 100% { box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); }\n      50%      { box-shadow: 0 0 0 15px rgba(12,30,20,0.05), 0 3px 10px rgba(12,30,20,0.35); }\n    }\n    .sw-range-wrap { position: relative; }\n    .sw-markers { position: relative; height: 56px; margin-bottom: 8px; margin-left: 18px; margin-right: 18px; }\n    .sw-marker {\n      position: absolute; transform: translateX(-50%);\n      display: flex; flex-direction: column; align-items: center; gap: 2px;\n      justify-content: flex-end; height: 100%; pointer-events: auto; cursor: pointer;\n    }\n    .sw-marker-tick { width: 1px; height: 10px; background: var(--border); flex-shrink: 0; }\n    .sw-marker.active .sw-marker-tick { background: var(--accent); opacity: 0.5; }\n    .sw-marker-label { font-size: 11px; font-weight: 400; color: var(--ink-muted); white-space: nowrap; line-height: 1.2; text-align: center; order: -2; }\n    .sw-marker-amount { font-size: 13px; font-weight: 700; color: var(--ink-muted); order: -1; }\n    .sw-marker.active .sw-marker-label, .sw-marker.active .sw-marker-amount { color: var(--accent); }\n    @media (max-width: 540px) {\n      .sw-markers { display: none; }\n      .sw-markers-mobile { display: flex !important; }\n    }\n    .sw-markers-mobile {\n      display: none; flex-direction: column; gap: 0;\n      margin: 12px 0 4px; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden;\n    }\n    .sw-marker-mobile {\n      display: flex; align-items: center; justify-content: space-between;\n      padding: 10px 14px; cursor: pointer; border-bottom: 1px solid var(--border);\n      transition: background 0.15s; font-family: 'Tinos', Georgia, serif;\n    }\n    .sw-marker-mobile:last-child { border-bottom: 0; }\n    .sw-marker-mobile:hover { background: var(--accent-light); }\n    .sw-marker-mobile.active { background: var(--accent-light); }\n    .sw-marker-mobile-label { font-size: 15px; font-weight: 400; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-label { color: var(--accent); font-weight: 700; }\n    .sw-marker-mobile-amount { font-size: 16px; font-weight: 700; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-amount { color: var(--accent); }\n    .sw-summary-box { padding: 18px 20px; background: var(--accent-light); border: 1px solid rgba(12,30,20,0.2); border-radius: var(--radius-sm); margin-top: 20px; }\n    .sw-summary-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; font-size: 16px; color: var(--ink); }\n    .sw-summary-row.sw-summary-discount { color: #8A1F1F; }\n    .sw-summary-row.sw-summary-total { border-top: 1px solid rgba(12,30,20,0.25); margin-top: 8px; padding-top: 12px; font-weight: 700; font-size: 22px; color: var(--accent); }\n    .sw-summary-person-label { font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-muted); margin: 14px 0 2px; }\n    .sw-summary-person-label:first-child { margin-top: 0; }\n    .sw-btn-row { display: flex; gap: 10px; margin-top: 24px; flex-wrap: wrap; }\n    .sw-btn { flex: 1; min-width: 140px; padding: 15px 17px; border-radius: var(--radius-sm); font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 700; cursor: pointer; transition: all 0.2s; border: 0; }\n    .sw-btn-primary { background: var(--accent); color: #fff; }\n    .sw-btn-primary:hover { background: #27703F; transform: translateY(-1px); }\n    .sw-btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }\n    .sw-btn-secondary { background: transparent; color: var(--ink); border: 1px solid var(--border); }\n    .sw-btn-secondary:hover { background: var(--bg); }\n    .sw-error { display: none; margin-top: 15px; padding: 13px 15px; border-radius: var(--radius-sm); background: #FFF3F3; border: 1px solid rgba(220,30,30,0.2); color: #8A1F1F; font-size: 18px; font-weight: 400; line-height: 1.5; white-space: pre-wrap; }\n    .wiz-spinner { display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.4); border-top-color: #fff; border-radius: 50%; animation: wiz-spin 0.7s linear infinite; vertical-align: middle; margin-right: 8px; }\n    .sw-country-search-wrap { position: relative; margin-bottom: 10px; }\n    .sw-country-search-icon { position: absolute; left: 18px; top: 50%; transform: translateY(-50%); color: var(--ink-muted); pointer-events: none; opacity: 0.5; }\n    .sw-country-search {\n      width: 100%; padding: 13px 15px 13px 54px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg); font-family: 'Tinos', Georgia, serif;\n      font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-country-search:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    .sw-country-list { max-height: 240px; overflow-y: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }\n    .sw-country-item { padding: 11px 15px; cursor: pointer; font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; display: flex; justify-content: space-between; align-items: center; transition: background 0.15s; border-bottom: 1px solid var(--border); }\n    .sw-country-item:last-child { border-bottom: 0; }\n    .sw-country-item:hover { background: var(--accent-light); }\n    .sw-country-item.selected { background: var(--accent-light); font-weight: 700; }\n    .sw-country-item-cat { font-size: 12px; color: var(--ink-muted); background: var(--border); padding: 2px 8px; border-radius: 999px; }\n    .sw-country-empty { padding: 15px; font-size: 18px; color: var(--ink-muted); text-align: center; }\n    .sw-step { display: none; }\n    .sw-step.active { display: block; }\n    \/* \u2500\u2500 RTL-Anpassungen (Hebr\u00e4isch) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    .sw-root { direction: rtl; text-align: right; }\n    .sw-country-search { padding: 13px 54px 13px 15px; }\n    .sw-country-search-icon { left: auto; right: 18px; }\n    .sw-select { background-position: left 15px center; }\n    .sw-amount-display { direction: ltr; }\n    .sw-range-wrap { direction: ltr; }\n    .sw-marker-label, .sw-marker-mobile-label { direction: rtl; }\n    .sw-marker-amount, .sw-marker-mobile-amount { direction: ltr; unicode-bidi: isolate; }\n    .sw-summary-row > span:last-child { direction: ltr; unicode-bidi: isolate; }\n    .sw-country-item, .sw-marker-mobile { direction: rtl; }\n    .wiz-spinner { margin-right: 0; margin-left: 8px; }\n    .sw-step-label, .sw-summary-person-label { text-align: right; }\n  `;\n  shadow.appendChild(styleEl);\n  const wrapper = document.createElement(\"div\");\n  wrapper.innerHTML = `\n    <div class=\"sw-root\" dir=\"rtl\">\n      <div class=\"sw-card\">\n        <div class=\"sw-progress\">\n          <div class=\"sw-progress-step\" id=\"sw-prog-1\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-2\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-3\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-4\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-5\"><\/div>\n        <\/div>\n        <!-- STEP 1 -->\n        <div class=\"sw-step active\" id=\"sw-step-welcome\">\n          <div class=\"sw-step-label\">\u05e9\u05dc\u05d1 1 \u05de\u05ea\u05d5\u05da 5<\/div>\n          <h2 class=\"sw-heading\">\u05d1\u05e8\u05d5\u05db\u05d9\u05dd \u05d4\u05d1\u05d0\u05d9\u05dd<\/h2>\n          <p class=\"sw-subtext\">\u05d1\u05de\u05e1\u05e4\u05e8 \u05e6\u05e2\u05d3\u05d9\u05dd \u05ea\u05d1\u05d7\u05e8\u05d5 \u05de\u05d3\u05d9\u05e0\u05d4, \u05e9\u05e4\u05d4, \u05e1\u05d5\u05d2 \u05d4\u05e8\u05e9\u05de\u05d4 \u05d5\u05ea\u05e8\u05d5\u05de\u05d4 \u2013 \u05d5\u05ea\u05e2\u05d1\u05e8\u05d5 \u05d9\u05e9\u05d9\u05e8\u05d5\u05ea \u05dc\u05e7\u05d5\u05e4\u05d4.<\/p>\n          <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-welcome-next\" style=\"width:100%;\">\u05de\u05d7\u05d9\u05e8\u05d9\u05dd \u05d5\u05d4\u05e8\u05e9\u05de\u05d4<\/button>\n        <\/div>\n        <!-- STEP 2 -->\n        <div class=\"sw-step\" id=\"sw-step-country\">\n          <div class=\"sw-step-label\">\u05e9\u05dc\u05d1 2 \u05de\u05ea\u05d5\u05da 5<\/div>\n          <h2 class=\"sw-heading\">\u05d4\u05d9\u05db\u05df \u05d0\u05ea\u05dd \u05d2\u05e8\u05d9\u05dd?<\/h2>\n          <label class=\"sw-label\">\u05de\u05d3\u05d9\u05e0\u05d4<\/label>\n          <div class=\"sw-country-search-wrap\">\n            <svg class=\"sw-country-search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.35-4.35\"\/><\/svg>\n            <input type=\"text\" class=\"sw-country-search\" id=\"sw-country-search\" placeholder=\"\u05d7\u05d9\u05e4\u05d5\u05e9 \u05de\u05d3\u05d9\u05e0\u05d4\u2026\" autocomplete=\"off\">\n          <\/div>\n          <div class=\"sw-country-list\" id=\"sw-country-list\"><\/div>\n          <input type=\"hidden\" id=\"sw-country\">\n          <div class=\"sw-infobox\" id=\"sw-catInfo\">\n            <div class=\"sw-infobox-title\">\u05e7\u05d8\u05d2\u05d5\u05e8\u05d9\u05d9\u05ea \u05de\u05d7\u05d9\u05e8<\/div>\n            <div id=\"sw-catText\">\u05d0\u05e0\u05d0 \u05d1\u05d7\u05e8\u05d5 \u05ea\u05d7\u05d9\u05dc\u05d4 \u05de\u05d3\u05d9\u05e0\u05d4.<\/div>\n          <\/div>\n          <div class=\"sw-redirect\" id=\"sw-redirect-russia\">\n            <strong>\u05e7\u05d9\u05d9\u05dd \u05d3\u05e3 \u05d4\u05e8\u05e9\u05de\u05d4 \u05e0\u05e4\u05e8\u05d3 \u05dc\u05de\u05e9\u05ea\u05ea\u05e4\u05d9\u05dd \u05de\u05e8\u05d5\u05e1\u05d9\u05d4.<\/strong>\n            \u05de\u05e2\u05e8\u05db\u05ea \u05d4\u05ea\u05e9\u05dc\u05d5\u05de\u05d9\u05dd \u05e9\u05dc\u05e0\u05d5 \u05d0\u05d9\u05e0\u05d4 \u05d6\u05de\u05d9\u05e0\u05d4 \u05d1\u05e8\u05d5\u05e1\u05d9\u05d4. \u05d0\u05e0\u05d0 \u05d4\u05d9\u05e8\u05e9\u05de\u05d5 \u05e9\u05dd:<br><br>\n            <a href=\"https:\/\/spiritual-activity.org\/ru\/anmeldung-basic-exercises\/\">\u05de\u05e2\u05d1\u05e8 \u05dc\u05d4\u05e8\u05e9\u05de\u05d4 \u05d4\u05e8\u05d5\u05e1\u05d9\u05ea<\/a>\n          <\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-country-back\">\u05d7\u05d6\u05e8\u05d4<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-country-next\" disabled>\u05d4\u05d1\u05d0<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 3 -->\n        <div class=\"sw-step\" id=\"sw-step-langform\">\n          <div class=\"sw-step-label\">\u05e9\u05dc\u05d1 3 \u05de\u05ea\u05d5\u05da 5<\/div>\n          <h2 class=\"sw-heading\">\u05e9\u05e4\u05d4 \u05d5\u05e1\u05d5\u05d2 \u05d4\u05e8\u05e9\u05de\u05d4<\/h2>\n          <label class=\"sw-label\" for=\"sw-commLang\">\u05d1\u05d0\u05d9\u05d6\u05d5 \u05e9\u05e4\u05d4 \u05ea\u05e9\u05ea\u05ea\u05e4\u05d5?<\/label>\n          <select class=\"sw-select\" id=\"sw-commLang\">\n            <option value=\"\" selected disabled>\u05d0\u05e0\u05d0 \u05d1\u05d7\u05e8\u05d5\u2026<\/option>\n            <option value=\"Deutsch\">\u05d2\u05e8\u05de\u05e0\u05d9\u05ea<\/option>\n            <option value=\"Englisch\">\u05d0\u05e0\u05d2\u05dc\u05d9\u05ea<\/option>\n            <option value=\"Spanisch\">\u05e1\u05e4\u05e8\u05d3\u05d9\u05ea<\/option>\n            <option value=\"Franz\u00f6sisch\">\u05e6\u05e8\u05e4\u05ea\u05d9\u05ea<\/option>\n            <option value=\"Italienisch\">\u05d0\u05d9\u05d8\u05dc\u05e7\u05d9\u05ea<\/option>\n            <option value=\"Portugiesisch\">\u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05d6\u05d9\u05ea<\/option>\n            <option value=\"Arabisch\">\u05e2\u05e8\u05d1\u05d9\u05ea<\/option>\n            <option value=\"Hebr\u00e4isch\">\u05e2\u05d1\u05e8\u05d9\u05ea<\/option>\n            <option value=\"Farsi\">\u05e4\u05e8\u05e1\u05d9\u05ea<\/option>\n            <option value=\"Georgisch\">\u05d2\u05d0\u05d5\u05e8\u05d2\u05d9\u05ea<\/option>\n            <option value=\"Ukrainisch\">\u05d0\u05d5\u05e7\u05e8\u05d0\u05d9\u05e0\u05d9\u05ea<\/option>\n            <option value=\"Niederl\u00e4ndisch\">\u05d4\u05d5\u05dc\u05e0\u05d3\u05d9\u05ea<\/option>\n            <option value=\"T\u00fcrkisch\">\u05d8\u05d5\u05e8\u05e7\u05d9\u05ea<\/option>\n            <option value=\"Bulgarisch\">\u05d1\u05d5\u05dc\u05d2\u05e8\u05d9\u05ea<\/option>\n            <option value=\"Russisch\">\u05e8\u05d5\u05e1\u05d9\u05ea<\/option>\n            <option value=\"Chinesisch\">\u05e1\u05d9\u05e0\u05d9\u05ea<\/option>\n            <option value=\"Japanisch\">\u05d9\u05e4\u05e0\u05d9\u05ea<\/option>\n            <option value=\"Koreanisch\">\u05e7\u05d5\u05e8\u05d9\u05d0\u05e0\u05d9\u05ea<\/option>\n          <\/select>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note\" style=\"display:none; margin-top:14px;\">\n            <div class=\"sw-infobox-title\">\u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea \u05d3\u05d9\u05d2\u05d9\u05d8\u05dc\u05d9\u05ea \u00b7 \u221235\u20ac<\/div>\n            <div id=\"sw-apponly-note-text\">\u05d0\u05ea\u05dd \u05de\u05e9\u05ea\u05ea\u05e4\u05d9\u05dd \u05d1\u05d0\u05d5\u05e4\u05df \u05d3\u05d9\u05d2\u05d9\u05d8\u05dc\u05d9. \u05d4\u05d4\u05e0\u05d7\u05d4 \u05ea\u05d9\u05dc\u05e7\u05d7 \u05d1\u05d7\u05e9\u05d1\u05d5\u05df \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05d1\u05e1\u05d9\u05db\u05d5\u05dd.<\/div>\n          <\/div>\n          <label class=\"sw-label\" style=\"margin-top:26px;\">\u05db\u05d9\u05e6\u05d3 \u05ea\u05e8\u05e6\u05d5 \u05dc\u05d4\u05d9\u05e8\u05e9\u05dd?<\/label>\n          <div class=\"sw-choice-row\" id=\"sw-form-choices\">\n            <div class=\"sw-choice-card active\" data-form=\"einzeln\">\u05d9\u05d7\u05d9\u05d3<\/div>\n            <div class=\"sw-choice-card\" data-form=\"paar\">\u05d1\u05d6\u05d5\u05d2<br><span style=\"font-size:13px; font-weight:400;\">(\u05de\u05e9\u05e7 \u05d1\u05d9\u05ea \u05de\u05e9\u05d5\u05ea\u05e3)<\/span><\/div>\n            <div class=\"sw-choice-card\" data-form=\"gruppe\">\u05e7\u05d1\u05d5\u05e6\u05d4<br><span style=\"font-size:13px; font-weight:400;\">(\u05d4\u05d7\u05dc \u05de-4 \u05d0\u05e0\u05e9\u05d9\u05dd)<\/span><\/div>\n          <\/div>\n          <div class=\"sw-infobox\" id=\"sw-gruppe-note\" style=\"display:none; margin-top:18px;\">\n            <div class=\"sw-infobox-title\">\u05d4\u05e8\u05e9\u05de\u05d4 \u05e7\u05d1\u05d5\u05e6\u05ea\u05d9\u05ea<\/div>\n            <div>\u05d0\u05e0\u05d5 \u05e9\u05de\u05d7\u05d9\u05dd \u05e2\u05dc \u05d4\u05ea\u05e2\u05e0\u05d9\u05d9\u05e0\u05d5\u05ea\u05db\u05dd. \u05d1\u05e2\u05de\u05d5\u05d3 \u05d4\u05d1\u05d0 \u05ea\u05d5\u05db\u05dc\u05d5 \u05dc\u05d1\u05e6\u05e2 \u05d0\u05ea \u05d4\u05d4\u05e8\u05e9\u05de\u05d4 \u05d4\u05e7\u05d1\u05d5\u05e6\u05ea\u05d9\u05ea. \u05e9\u05d9\u05de\u05d5 \u05dc\u05d1: \u05d4\u05d4\u05e8\u05e9\u05de\u05d4 \u05d4\u05e7\u05d1\u05d5\u05e6\u05ea\u05d9\u05ea \u05d6\u05de\u05d9\u05e0\u05d4 \u05d1\u05d2\u05e8\u05de\u05e0\u05d9\u05ea \u05d5\u05d1\u05d0\u05e0\u05d2\u05dc\u05d9\u05ea \u05d1\u05dc\u05d1\u05d3.<\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-langform\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-langform-back\">\u05d7\u05d6\u05e8\u05d4<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-langform-next\" disabled>\u05d4\u05d1\u05d0<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-gruppe-redirect\" style=\"display:none;\">\u05d4\u05de\u05e9\u05da \u05dc\u05d4\u05e8\u05e9\u05de\u05d4 \u05e7\u05d1\u05d5\u05e6\u05ea\u05d9\u05ea<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4A -->\n        <div class=\"sw-step\" id=\"sw-step-details-solo\">\n          <div class=\"sw-step-label\">\u05e9\u05dc\u05d1 4 \u05de\u05ea\u05d5\u05da 5<\/div>\n          <h2 class=\"sw-heading\">\u05db\u05de\u05d4 \u05e4\u05e8\u05d8\u05d9\u05dd \u05e2\u05dc\u05d9\u05db\u05dd<\/h2>\n          <p class=\"sw-subtext\">\u05d4\u05d0\u05dd \u05de\u05e9\u05d4\u05d5 \u05de\u05d4\u05d1\u05d0\u05d9\u05dd \u05d7\u05dc \u05e2\u05dc\u05d9\u05db\u05dd? \u05d6\u05d4 \u05e2\u05d5\u05d6\u05e8 \u05dc\u05e0\u05d5 \u05dc\u05d4\u05e6\u05d9\u05e2 \u05dc\u05db\u05dd \u05d0\u05ea \u05d4\u05ea\u05e8\u05d5\u05de\u05d4 \u05d4\u05de\u05ea\u05d0\u05d9\u05de\u05d4.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea \u05d3\u05d9\u05d2\u05d9\u05d8\u05dc\u05d9\u05ea \u00b7 \u221235\u20ac<\/div>\n            <div>\u05d0\u05ea\u05dd \u05de\u05e9\u05ea\u05ea\u05e4\u05d9\u05dd \u05d1\u05d0\u05d5\u05e4\u05df \u05d3\u05d9\u05d2\u05d9\u05d8\u05dc\u05d9. \u05d4\u05d4\u05e0\u05d7\u05d4 \u05ea\u05d9\u05dc\u05e7\u05d7 \u05d1\u05d7\u05e9\u05d1\u05d5\u05df \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05d1\u05e1\u05d9\u05db\u05d5\u05dd.<\/div>\n          <\/div>\n          <label class=\"sw-label\">\u05d0\u05e0\u05d0 \u05d1\u05d7\u05e8\u05d5<\/label>\n          <select class=\"sw-select\" id=\"sw-solo-status\">\n            <option value=\"\" disabled selected>\u05d0\u05e0\u05d0 \u05d1\u05d7\u05e8\u05d5\u2026<\/option>\n            <option value=\"normal\">\u05d4\u05e8\u05e9\u05de\u05d4 \u05e8\u05d2\u05d9\u05dc\u05d4<\/option>\n            <option value=\"schueler\">\u05ea\u05dc\u05de\u05d9\u05d3\u05d9 \u05d1\u05d9\u05ea \u05e1\u05e4\u05e8 (\u221250%)<\/option>\n            <option value=\"student\">\u05d1\u05d4\u05db\u05e9\u05e8\u05d4\/\u05dc\u05d9\u05de\u05d5\u05d3\u05d9\u05dd \u05d0\u05e7\u05d3\u05de\u05d9\u05d9\u05dd (\u221225%)<\/option>\n            <option value=\"wiederholer\">\u05d0\u05e0\u05d9 \u05d7\u05d5\u05d6\u05e8\/\u05ea \u05e2\u05dc \u05d4\u05e7\u05d5\u05e8\u05e1 \u05e2\u05dd \u05ea\u05e8\u05d2\u05d9\u05dc\u05d9 \u05d4\u05e0\u05e4\u05e9 (\u05dc\u05dc\u05d0 \u05e1\u05d8 \u05e7\u05dc\u05e4\u05d9\u05dd \u05d7\u05d3\u05e9 \u2212 30%)<\/option>\n          <\/select>\n          <div class=\"sw-error\" id=\"sw-error-details-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-solo-back\">\u05d7\u05d6\u05e8\u05d4<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-solo-next\" disabled>\u05d4\u05d1\u05d0<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4B -->\n        <div class=\"sw-step\" id=\"sw-step-details-paar\">\n          <div class=\"sw-step-label\">\u05e9\u05dc\u05d1 4 \u05de\u05ea\u05d5\u05da 5<\/div>\n          <h2 class=\"sw-heading\">\u05e4\u05e8\u05d8\u05d9\u05dd \u05e2\u05dc \u05e9\u05e0\u05d9\u05db\u05dd<\/h2>\n          <p class=\"sw-subtext\">\u05d0\u05e0\u05d0 \u05d4\u05d6\u05d9\u05e0\u05d5 \u05d0\u05ea \u05d4\u05e4\u05e8\u05d8\u05d9\u05dd \u05e2\u05d1\u05d5\u05e8 \u05e9\u05e0\u05d9 \u05d4\u05d0\u05e0\u05e9\u05d9\u05dd. \u05d4\u05d0\u05d3\u05dd \u05d4\u05e9\u05e0\u05d9 \u05d9\u05e7\u05d1\u05dc \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05d4\u05e0\u05d7\u05d4 \u05e9\u05dc 50%.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-paar-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea \u05d3\u05d9\u05d2\u05d9\u05d8\u05dc\u05d9\u05ea \u00b7 \u221235\u20ac<\/div>\n            <div>\u05d0\u05ea\u05dd \u05de\u05e9\u05ea\u05ea\u05e4\u05d9\u05dd \u05d1\u05d0\u05d5\u05e4\u05df \u05d3\u05d9\u05d2\u05d9\u05d8\u05dc\u05d9. \u05d4\u05d4\u05e0\u05d7\u05d4 \u05ea\u05d9\u05dc\u05e7\u05d7 \u05d1\u05d7\u05e9\u05d1\u05d5\u05df \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05d1\u05e1\u05d9\u05db\u05d5\u05dd.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\u05d0\u05d3\u05dd 1<\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\u05e9\u05dd \u05e4\u05e8\u05d8\u05d9<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-vorname\"><\/div>\n              <div><label class=\"sw-label\">\u05e9\u05dd \u05de\u05e9\u05e4\u05d7\u05d4<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\u05d3\u05d5\u05d0\"\u05dc<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p1-email\">\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\u05d0\u05d3\u05dd 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\u05e9\u05dd \u05e4\u05e8\u05d8\u05d9<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-vorname\"><\/div>\n              <div><label class=\"sw-label\">\u05e9\u05dd \u05de\u05e9\u05e4\u05d7\u05d4<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\u05d3\u05d5\u05d0\"\u05dc<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p2-email\">\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-details-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-paar-back\">\u05d7\u05d6\u05e8\u05d4<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-paar-next\" disabled>\u05d4\u05d1\u05d0<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5A -->\n        <div class=\"sw-step\" id=\"sw-step-amount-solo\">\n          <div class=\"sw-step-label\">\u05e9\u05dc\u05d1 5 \u05de\u05ea\u05d5\u05da 5<\/div>\n          <h2 class=\"sw-heading\">\u05d1\u05d7\u05d9\u05e8\u05ea \u05ea\u05e8\u05d5\u05de\u05d4<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-solo\">\u05db\u05d0\u05df \u05ea\u05d5\u05db\u05dc\u05d5 \u05dc\u05d1\u05d7\u05d5\u05e8 \u05d0\u05ea \u05d4\u05ea\u05e8\u05d5\u05de\u05d4 \u05d4\u05de\u05ea\u05d0\u05d9\u05de\u05d4 \u05dc\u05db\u05dd.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-solo\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea \u05d3\u05d9\u05d2\u05d9\u05d8\u05dc\u05d9\u05ea \u00b7 \u221235\u20ac<\/div>\n            <div>\u05d0\u05ea\u05dd \u05de\u05e9\u05ea\u05ea\u05e4\u05d9\u05dd \u05d1\u05d0\u05d5\u05e4\u05df \u05d3\u05d9\u05d2\u05d9\u05d8\u05dc\u05d9. \u05d4\u05d4\u05e0\u05d7\u05d4 \u05ea\u05d9\u05dc\u05e7\u05d7 \u05d1\u05d7\u05e9\u05d1\u05d5\u05df \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05d1\u05e1\u05d9\u05db\u05d5\u05dd.<\/div>\n          <\/div>\n          <div class=\"sw-range-header\">\n            <div class=\"sw-range-header-label\">\u05d4\u05e1\u05db\u05d5\u05dd \u05e9\u05dc\u05da<\/div>\n            <div class=\"sw-amount-display\">\n              <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-solo\" value=\"360\">\n              <span>\u20ac<\/span>\n            <\/div>\n          <\/div>\n          <div class=\"sw-range-wrap\">\n            <div class=\"sw-markers\" id=\"sw-markers-solo\"><\/div>\n            <input type=\"range\" class=\"sw-range\" id=\"sw-amount-solo\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n            <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-solo\"><\/div>\n          <\/div>\n          <p style=\"margin-top:18px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \u05d0\u05dd \u05d0\u05ea\u05dd \u05d6\u05e7\u05d5\u05e7\u05d9\u05dd \u05dc\u05d4\u05e0\u05d7\u05d4 \u05db\u05dc\u05db\u05dc\u05d9\u05ea \u05e0\u05d5\u05e1\u05e4\u05ea, \u05d0\u05ea\u05dd \u05de\u05d5\u05d6\u05de\u05e0\u05d9\u05dd \u05dc\u05db\u05ea\u05d5\u05d1 \u05dc\u05e0\u05d5:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-solo\">\n            <div class=\"sw-summary-row\"><span>\u05d4\u05ea\u05e8\u05d5\u05de\u05d4 \u05d4\u05e0\u05d1\u05d7\u05e8\u05ea<\/span><span id=\"sw-solo-chosen\">360\u20ac<\/span><\/div>\n            <div id=\"sw-solo-discounts\"><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-solo\" style=\"display:none;\"><span>\u05de\u05e9\u05dc\u05d5\u05d7<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\u05e1\u05d4\"\u05db<\/span><span><span id=\"sw-solo-total\">360<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-solo-back\">\u05d7\u05d6\u05e8\u05d4<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-solo\" style=\"line-height:1.35;\">\u05d4\u05e8\u05e9\u05de\u05d4<br><span style=\"font-size:13px; font-weight:400;\">\u05ea\u05d4\u05dc\u05d9\u05da \u05d4\u05ea\u05e9\u05dc\u05d5\u05dd \u05d9\u05ea\u05d1\u05e6\u05e2 \u05d1\u05d0\u05e0\u05d2\u05dc\u05d9\u05ea<\/span><\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5B -->\n        <div class=\"sw-step\" id=\"sw-step-amount-paar\">\n          <div class=\"sw-step-label\">\u05e9\u05dc\u05d1 5 \u05de\u05ea\u05d5\u05da 5<\/div>\n          <h2 class=\"sw-heading\">\u05d1\u05d7\u05d9\u05e8\u05ea \u05ea\u05e8\u05d5\u05de\u05d5\u05ea<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-paar\">\u05db\u05dc \u05d0\u05d3\u05dd \u05d1\u05d5\u05d7\u05e8 \u05d0\u05ea \u05d4\u05ea\u05e8\u05d5\u05de\u05d4 \u05e9\u05dc\u05d5. \u05d0\u05d3\u05dd 2 \u05de\u05e7\u05d1\u05dc \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05d4\u05e0\u05d7\u05d4 \u05e9\u05dc 50%.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-paar\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea \u05d3\u05d9\u05d2\u05d9\u05d8\u05dc\u05d9\u05ea \u00b7 \u221235\u20ac<\/div>\n            <div>\u05d0\u05ea\u05dd \u05de\u05e9\u05ea\u05ea\u05e4\u05d9\u05dd \u05d1\u05d0\u05d5\u05e4\u05df \u05d3\u05d9\u05d2\u05d9\u05d8\u05dc\u05d9. \u05d4\u05d4\u05e0\u05d7\u05d4 \u05ea\u05d9\u05dc\u05e7\u05d7 \u05d1\u05d7\u05e9\u05d1\u05d5\u05df \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05d1\u05e1\u05d9\u05db\u05d5\u05dd.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p1-title\">\u05d0\u05d3\u05dd 1<\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\u05ea\u05e8\u05d5\u05de\u05d4<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p1\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p1\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p1\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p1\"><\/div>\n            <\/div>\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p2-title\">\u05d0\u05d3\u05dd 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\u05ea\u05e8\u05d5\u05de\u05d4<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p2\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p2\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p2\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p2\"><\/div>\n            <\/div>\n          <\/div>\n          <p style=\"margin-top:8px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \u05d0\u05dd \u05d0\u05ea\u05dd \u05d6\u05e7\u05d5\u05e7\u05d9\u05dd \u05dc\u05d4\u05e0\u05d7\u05d4 \u05db\u05dc\u05db\u05dc\u05d9\u05ea \u05e0\u05d5\u05e1\u05e4\u05ea, \u05d0\u05ea\u05dd \u05de\u05d5\u05d6\u05de\u05e0\u05d9\u05dd \u05dc\u05db\u05ea\u05d5\u05d1 \u05dc\u05e0\u05d5:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-paar\">\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p1-label\">\u05d0\u05d3\u05dd 1<\/div>\n            <div class=\"sw-summary-row\"><span>\u05d4\u05ea\u05e8\u05d5\u05de\u05d4 \u05d4\u05e0\u05d1\u05d7\u05e8\u05ea<\/span><span id=\"sw-p1-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p1-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\u05e1\u05db\u05d5\u05dd \u05d1\u05d9\u05e0\u05d9\u05d9\u05dd<\/span><span id=\"sw-p1-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p2-label\">\u05d0\u05d3\u05dd 2<\/div>\n            <div class=\"sw-summary-row\"><span>\u05d4\u05ea\u05e8\u05d5\u05de\u05d4 \u05d4\u05e0\u05d1\u05d7\u05e8\u05ea<\/span><span id=\"sw-p2-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p2-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\u05e1\u05db\u05d5\u05dd \u05d1\u05d9\u05e0\u05d9\u05d9\u05dd<\/span><span id=\"sw-p2-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-paar\" style=\"display:none;\"><span>\u05de\u05e9\u05dc\u05d5\u05d7<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\u05e1\u05d4\"\u05db<\/span><span><span id=\"sw-paar-total\">0<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-paar-back\">\u05d7\u05d6\u05e8\u05d4<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-paar\" style=\"line-height:1.35;\">\u05dc\u05e7\u05d5\u05e4\u05d4<br><span style=\"font-size:13px; font-weight:400;\">\u05ea\u05d4\u05dc\u05d9\u05da \u05d4\u05ea\u05e9\u05dc\u05d5\u05dd \u05d9\u05ea\u05d1\u05e6\u05e2 \u05d1\u05d0\u05e0\u05d2\u05dc\u05d9\u05ea<\/span><\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  `;\n  shadow.appendChild(wrapper);\n  const $ = (id) => shadow.getElementById(id);\n  const COUNTRY_TO_CAT = {};\n  Object.keys(COUNTRIES).forEach(cat => COUNTRIES[cat].forEach(code => COUNTRY_TO_CAT[code] = cat));\n  function getCountryName(code) {\n    if (COUNTRY_NAMES[code]) return COUNTRY_NAMES[code];\n    try { return new Intl.DisplayNames([\"he\"], { type: \"region\" }).of(code) || code; }\n    catch { return code; }\n  }\n\n  function getCountryAliases(code) {\n    const list = [];\n    \/\/ Intl-Name als Fallback, falls er vom festen CLDR-Namen abweicht\n    if (COUNTRY_NAMES[code]) {\n      try {\n        const intlName = new Intl.DisplayNames([\"he\"], { type: \"region\" }).of(code);\n        if (intlName && intlName !== COUNTRY_NAMES[code]) list.push(intlName.toLowerCase());\n      } catch {}\n    }\n    \/\/ Englischer Name als lateinische Fallback-Schreibweise fuer alle Laender\n    try {\n      const enName = new Intl.DisplayNames([\"en\"], { type: \"region\" }).of(code);\n      if (enName) list.push(enName.toLowerCase());\n    } catch {}\n    (COUNTRY_SEARCH_ALIASES[code] || []).forEach(a => list.push(a.toLowerCase()));\n    return list;\n  }\n  function getAllCountriesSorted() {\n    const all = [];\n    [\"cat1\",\"cat2\",\"cat3\",\"cat4\"].forEach(cat => {\n      COUNTRIES[cat]\n        .map(code => ({ code, name: getCountryName(code), cat, aliases: getCountryAliases(code) }))\n        .sort((a, b) => a.name.localeCompare(b.name, \"he\"))\n        .forEach(c => all.push(c));\n    });\n    return all;\n  }\n  function emptyPerson() {\n    return { vorname: \"\", nachname: \"\", email: \"\", wiederholer: false, statusType: \"\", amount: 0 };\n  }\n  const state = {\n    country: \"\", category: \"cat1\",\n    commLang: \"\", form: \"einzeln\",\n    persons: { solo: emptyPerson(), p1: emptyPerson(), p2: emptyPerson() }\n  };\n  function getPerson(key) { return state.persons[key] || state.persons.solo; }\n  function isAppOnly() {\n    const { category: cat, commLang: lang, country } = state;\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[country];\n      \/\/ Ausnahme (z.B. China) gilt nur, wenn auch die passende Sprache gewaehlt ist \u2013\n      \/\/ sonst kann kein physisches Kartenset verschickt werden.\n      if (!exceptionLang || lang !== exceptionLang) return true;\n    }\n    if (APP_ONLY_LANGS.has(lang)) return true;\n    if (lang === \"Russisch\" && country && country !== \"RU\") return true;\n    return false;\n  }\n\n  function isWiederholer(person) {\n    return !!person && (person.wiederholer || person.statusType === \"wiederholer\");\n  }\n\n  \/\/ Geht ueberhaupt ein Kartenset raus? Nur wenn die Teilnahme nicht rein digital\n  \/\/ ist UND mindestens eine Person ein neues Set braucht - Wiederholer bekommen\n  \/\/ keins. Steuert sowohl die Versandzeile in der Zusammenfassung als auch die\n  \/\/ Wahl des Ecwid-Produkts, damit beide nicht auseinanderlaufen koennen.\n  function hasPhysicalShipment(isPaar) {\n    if (isAppOnly()) return false;\n    return isPaar\n      ? !(isWiederholer(state.persons.p1) && isWiederholer(state.persons.p2))\n      : !isWiederholer(state.persons.solo);\n  }\n\n  \/\/ Ecwid haengt den Versand am Produkt fest, nicht am Warenkorb. Ohne physischen\n  \/\/ Versand muss deshalb das versandfreie Digital-Produkt in den Warenkorb, sonst\n  \/\/ schlaegt der Shop trotzdem Versandkosten auf.\n  function getParticipationProductId(isPaar) {\n    return hasPhysicalShipment(isPaar) ? PRODUCTS[state.category] : PRODUCTS_APPONLY[state.category];\n  }\n  function updateAppOnlyUI() {\n    const appOnly = state.commLang ? isAppOnly() : false;\n    let reason = \"\";\n    if (appOnly) {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[state.country];\n      if ((state.category === \"cat3\" || state.category === \"cat4\") && exceptionLang) {\n        reason = TXT.reasonException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang);\n      } else if (state.category === \"cat3\" || state.category === \"cat4\") {\n        reason = TXT.reasonRegion;\n      } else if (state.commLang === \"Russisch\") {\n        reason = TXT.reasonRussian;\n      } else {\n        reason = TXT.reasonLanguage;\n      }\n    }\n    const noteIds = [\"sw-apponly-note\",\"sw-apponly-note-step4\",\"sw-apponly-note-paar-step4\",\"sw-apponly-note-step5-solo\",\"sw-apponly-note-step5-paar\"];\n    noteIds.forEach(id => {\n      const el = $(id);\n      if (!el) return;\n      el.style.display = appOnly ? \"block\" : \"none\";\n      const textDiv = el.querySelector(\"div:not(.sw-infobox-title)\");\n      if (textDiv && reason) textDiv.textContent = reason;\n    });\n  }\n  const STEP_CONTAINER = {\n    1: () => \"sw-step-welcome\",\n    2: () => \"sw-step-country\",\n    3: () => \"sw-step-langform\",\n    4: () => state.form === \"paar\" ? \"sw-step-details-paar\" : \"sw-step-details-solo\",\n    5: () => state.form === \"paar\" ? \"sw-step-amount-paar\" : \"sw-step-amount-solo\"\n  };\n  function showStep(n) {\n    shadow.querySelectorAll(\".sw-step\").forEach(el => el.classList.remove(\"active\"));\n    $(STEP_CONTAINER[n]()).classList.add(\"active\");\n    for (let i = 1; i <= 5; i++) {\n      const prog = $(\"sw-prog-\" + i);\n      if (!prog) continue;\n      if (i < n) prog.className = \"sw-progress-step done\";\n      else if (i === n) prog.className = \"sw-progress-step active\";\n      else prog.className = \"sw-progress-step\";\n    }\n    if (n === 5) {\n      const sliderIds = state.form === \"paar\" ? [\"sw-amount-p1\",\"sw-amount-p2\"] : [\"sw-amount-solo\"];\n      sliderIds.forEach(sid => { const el = $(sid); if (el) el.classList.add(\"sw-pulse\"); });\n      refreshSummary();\n    }\n  }\n  function setNextEnabled(id, enabled) {\n    const b = $(id);\n    if (!b) return;\n    b.disabled = !enabled;\n    b.style.opacity = enabled ? \"1\" : \".4\";\n    b.style.cursor  = enabled ? \"pointer\" : \"not-allowed\";\n  }\n  function showErrorIn(id, msg) { const el=$(id); el.style.display=\"block\"; el.textContent=msg; }\n  function clearErrorIn(id)     { const el=$(id); el.style.display=\"none\";  el.textContent=\"\"; }\n  function setCheckoutLoading(btnId, loading) {\n    const btn = $(btnId);\n    \/\/ Nach dem Danke-Bildschirm existiert der Button nicht mehr \u2013 dann nichts tun.\n    if (!btn) return;\n    const overlay = document.getElementById(OVERLAY_ID);\n    \/\/ innerHTML statt textContent: Der Checkout-Button ist zweizeilig (Hinweis auf den\n    \/\/ englischen Bezahlvorgang). Mit textContent ginge die zweite Zeile beim Zuruecksetzen\n    \/\/ nach einem Fehlversuch verloren.\n    if (!btn.dataset.defaultLabel) btn.dataset.defaultLabel = btn.innerHTML;\n    if (loading) {\n      btn.disabled = true;\n      btn.innerHTML = '<span class=\"wiz-spinner\"><\/span> ' + TXT.preparing;\n      btn.style.opacity = \".8\";\n      if (overlay) overlay.style.display = \"flex\";\n    } else {\n      btn.disabled = false;\n      btn.innerHTML = btn.dataset.defaultLabel;\n      btn.style.opacity = \"1\";\n      if (overlay) overlay.style.display = \"none\";\n    }\n  }\n  function showThankYou() {\n    const card = shadow.querySelector(\".sw-card\");\n    if (!card) return;\n    card.innerHTML = `\n      <div style=\"text-align:center; padding:20px 0;\">\n        <div style=\"font-size:56px; margin-bottom:16px; color:#27703F;\">\u2713<\/div>\n        <h2 style=\"font-family:'Tinos',Georgia,serif; font-size:26px; font-weight:500; margin:0 0 12px; color:#0C1E14;\">${TXT.thanksTitle}<\/h2>\n        <p style=\"font-family:'Tinos',Georgia,serif; font-size:18px; color:#27703F; line-height:1.6; margin:0 0 24px;\">${TXT.thanksLine1}${TXT.thanksLine2 ? \"<br>\" + TXT.thanksLine2 : \"\"}<\/p>\n        <div style=\"display:flex; justify-content:center;\">\n          <div style=\"width:36px; height:36px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:wiz-spin 0.8s linear infinite;\"><\/div>\n        <\/div>\n      <\/div>`;\n  }\n  function getAnchors(cat) {\n    const r = RANGES[cat], o = ORIENTIERUNG[cat];\n    return [[0,r.min],[25,o.reduced],[50,o.base],[75,o.support],[100,r.max]];\n  }\n  function normToEuro(norm, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      if (norm <= a[i+1][0]) {\n        const t = (norm - a[i][0]) \/ (a[i+1][0] - a[i][0]);\n        return Math.round(a[i][1] + t * (a[i+1][1] - a[i][1]));\n      }\n    }\n    return a[a.length-1][1];\n  }\n  function euroToNorm(euro, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      const lo = a[i][1], hi = a[i+1][1];\n      if (euro <= hi) {\n        if (hi === lo) return a[i+1][0];\n        return a[i][0] + (euro - lo) \/ (hi - lo) * (a[i+1][0] - a[i][0]);\n      }\n    }\n    return 100;\n  }\n  function getMarkerDefs(cat) {\n    const o = ORIENTIERUNG[cat];\n    return [\n      { value: o.reduced, label: TXT.markerReduced, normPct: 25 },\n      { value: o.base,    label: TXT.markerBase,    normPct: 50 },\n      { value: o.support, label: TXT.markerSupport, normPct: 75 }\n    ];\n  }\n  function renderMarkers(personKey) {\n    const cat = state.category;\n    const person = getPerson(personKey);\n    const markers = getMarkerDefs(cat);\n    const container = $(`sw-markers-${personKey}`);\n    container.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker\" + (person.amount === m.value ? \" active\" : \"\");\n      div.style.left = m.normPct + \"%\";\n      div.innerHTML = `<div class=\"sw-marker-tick\"><\/div><div class=\"sw-marker-amount\">${m.value}\u20ac<\/div><div class=\"sw-marker-label\">${m.label}<\/div>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      container.appendChild(div);\n    });\n    const mobileContainer = $(`sw-markers-mobile-${personKey}`);\n    mobileContainer.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker-mobile\" + (person.amount === m.value ? \" active\" : \"\");\n      div.innerHTML = `<span class=\"sw-marker-mobile-label\">${m.label}<\/span><span class=\"sw-marker-mobile-amount\">${m.value}\u20ac<\/span>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      mobileContainer.appendChild(div);\n    });\n  }\n  function selectMarkerValue(personKey, value) {\n    const person = getPerson(personKey);\n    $(`sw-amount-${personKey}`).value = euroToNorm(value, state.category);\n    person.amount = value;\n    $(`sw-amountInput-${personKey}`).value = value;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromSlider(personKey) {\n    const person = getPerson(personKey);\n    const norm = Number($(`sw-amount-${personKey}`).value);\n    person.amount = normToEuro(norm, state.category);\n    $(`sw-amountInput-${personKey}`).value = person.amount;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromInput(personKey) {\n    const person = getPerson(personKey);\n    const r = RANGES[state.category];\n    let val = Number($(`sw-amountInput-${personKey}`).value);\n    if (isNaN(val)) val = r.min;\n    val = Math.min(r.max, Math.max(r.min, val));\n    person.amount = val;\n    $(`sw-amountInput-${personKey}`).value = val;\n    $(`sw-amount-${personKey}`).value = euroToNorm(val, state.category);\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function wireAmountControl(personKey) {\n    $(`sw-amount-${personKey}`).addEventListener(\"input\", () => updateAmountFromSlider(personKey));\n    $(`sw-amountInput-${personKey}`).addEventListener(\"input\", () => {\n      const v = Number($(`sw-amountInput-${personKey}`).value);\n      if (!isNaN(v)) { getPerson(personKey).amount = v; refreshSummary(); }\n    });\n    $(`sw-amountInput-${personKey}`).addEventListener(\"change\", () => updateAmountFromInput(personKey));\n  }\n  function applyRangeForForm() {\n    const cat = state.category;\n    const ori = ORIENTIERUNG[cat];\n    const hint = TXT.hintLong;\n    if (state.form === \"paar\") {\n      [\"p1\",\"p2\"].forEach(key => {\n        const person = getPerson(key);\n        person.amount = ori.base;\n        $(`sw-amount-${key}`).value = 50;\n        $(`sw-amountInput-${key}`).value = ori.base;\n      });\n      const p1name = state.persons.p1.vorname;\n      const p2name = state.persons.p2.vorname;\n      $(\"sw-amount-p1-title\").innerHTML = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-amount-p2-title\").innerHTML = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) +\n        ' <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">' + TXT.p2Badge + '<\/span>';\n      $(\"sw-summary-p1-label\").textContent = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-summary-p2-label\").textContent = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) + \" \" + TXT.p2Badge;\n      $(\"sw-rangeHint-paar\").textContent = hint;\n      renderMarkers(\"p1\"); renderMarkers(\"p2\");\n    } else {\n      const person = state.persons.solo;\n      person.amount = ori.base;\n      $(\"sw-amount-solo\").value = 50;\n      $(\"sw-amountInput-solo\").value = ori.base;\n      $(\"sw-rangeHint-solo\").textContent = hint;\n      renderMarkers(\"solo\");\n    }\n    refreshSummary();\n  }\n  \/\/ \u2500\u2500 Rabattlogik \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Zuerst wird der fixe App-Rabatt vom gewaehlten Betrag abgezogen, danach der\n  \/\/ prozentuale Rabatt auf den verbleibenden Betrag. Beide werden separat gezeigt.\n  function getPercentDiscountCandidate(person, isPaarP2) {\n    if (isPaarP2) return { value: DISCOUNT_PAAR_P2, label: TXT.discP2 };\n    const candidates = [];\n    if (isWiederholer(person)) candidates.push({ value: DISCOUNT_WIEDERHOLER, label: TXT.discWiederholer });\n    if (person.statusType === \"schueler\") candidates.push({ value: DISCOUNT_SCHUELER, label: TXT.discSchueler });\n    if (person.statusType === \"student\")  candidates.push({ value: DISCOUNT_STUDENT,  label: TXT.discStudent });\n    if (!candidates.length) return null;\n    return candidates.reduce((best, c) => c.value > best.value ? c : best, candidates[0]);\n  }\n  function getDiscounts(person, isPaarP2) {\n    const discounts = [];\n    let remaining = Math.round(person.amount);\n    if (isAppOnly()) {\n      const appDisc = Math.min(DISCOUNT_APP_FIXED, remaining);\n      discounts.push({ type: \"fixed\", value: DISCOUNT_APP_FIXED, label: TXT.discApp, amountEuro: appDisc });\n      remaining -= appDisc;\n    }\n    const pct = getPercentDiscountCandidate(person, isPaarP2);\n    if (pct) {\n      const pctDisc = Math.round(remaining * pct.value);\n      discounts.push({ type: \"pct\", value: pct.value, label: pct.label, amountEuro: pctDisc });\n      remaining -= pctDisc;\n    }\n    return { discounts, finalAmount: Math.max(0, remaining) };\n  }\n  function buildStatusOptionValue(person, isPaar) {\n    const vals = [];\n    if (isPaar) vals.push(STATUS_LABEL.paar);\n    if (isAppOnly()) vals.push(STATUS_LABEL.apponly);\n    if (isWiederholer(person)) vals.push(STATUS_LABEL.wiederholer);\n    if (person.statusType === \"schueler\") vals.push(STATUS_LABEL.schueler);\n    if (person.statusType === \"student\")  vals.push(STATUS_LABEL.student);\n    \/\/ Ecwid erwartet fuer Checkbox-Optionen ein Array, nicht einen kommaseparierten String\n    return vals;\n  }\n  function refreshSummary() {\n    if (state.form === \"paar\") refreshSummaryPaar();\n    else refreshSummarySolo();\n  }\n  function renderDiscountRows(containerId, discounts) {\n    const container = $(containerId);\n    container.innerHTML = \"\";\n    discounts.forEach(d => {\n      const row = document.createElement(\"div\");\n      row.className = \"sw-summary-row sw-summary-discount\";\n      const pctStr = d.type === \"fixed\" ? `\u2212${d.amountEuro}\u20ac` : `\u2212${Math.round(d.value * 100)}%`;\n      row.innerHTML = `<span>${d.label} (${pctStr})<\/span><span>\u2212${d.amountEuro}\u20ac<\/span>`;\n      container.appendChild(row);\n    });\n  }\n  function refreshSummarySolo() {\n    const p = state.persons.solo;\n    const { discounts, finalAmount } = getDiscounts(p, false);\n    $(\"sw-solo-chosen\").textContent = Math.round(p.amount) + \"\u20ac\";\n    renderDiscountRows(\"sw-solo-discounts\", discounts);\n    const shipLine = $(\"sw-shipping-line-solo\");\n    const shippingSolo = (hasPhysicalShipment(false) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingSolo ? \"flex\" : \"none\";\n    $(\"sw-solo-total\").textContent = finalAmount + shippingSolo;\n  }\n  function refreshSummaryPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    function fill(prefix, person, isPaarP2) {\n      const { discounts, finalAmount } = getDiscounts(person, isPaarP2);\n      $(`sw-${prefix}-chosen`).textContent = Math.round(person.amount) + \"\u20ac\";\n      renderDiscountRows(`sw-${prefix}-discounts`, discounts);\n      $(`sw-${prefix}-subtotal`).textContent = finalAmount + \"\u20ac\";\n      return finalAmount;\n    }\n    const f1 = fill(\"p1\", p1, false);\n    const f2 = fill(\"p2\", p2, true);\n    const shipLine = $(\"sw-shipping-line-paar\");\n    const shippingPaar = (hasPhysicalShipment(true) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingPaar ? \"flex\" : \"none\";\n    $(\"sw-paar-total\").textContent = f1 + f2 + shippingPaar;\n  }\n  function renderCountryList(filter) {\n    const list = $(\"sw-country-list\");\n    const q = (filter || \"\").toLowerCase().trim();\n    const filtered = q\n      ? getAllCountriesSorted().filter(c =>\n          c.name.toLowerCase().includes(q) ||\n          (c.aliases || []).some(a => a.includes(q))\n        )\n      : getAllCountriesSorted();\n    list.innerHTML = \"\";\n    if (!filtered.length) { list.innerHTML = '<div class=\"sw-country-empty\">' + TXT.noCountry + '<\/div>'; return; }\n    filtered.forEach(c => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-country-item\" + (state.country === c.code ? \" selected\" : \"\");\n      div.dataset.code = c.code;\n      div.innerHTML = `<span>${c.name}<\/span><span class=\"sw-country-item-cat\">${TXT.catBadge}${c.cat.replace(\"cat\",\"\")}<\/span>`;\n      div.addEventListener(\"click\", () => selectCountry(c.code, c.cat, c.name));\n      list.appendChild(div);\n    });\n  }\n  function selectCountry(code, cat, name) {\n    state.country  = code;\n    state.category = cat;\n    $(\"sw-country\").value = code;\n    $(\"sw-country-search\").value = name;\n    $(\"sw-country-list\").innerHTML = \"\";\n    const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[code];\n    let suffix = \"\";\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      suffix = exceptionLang\n        ? \" \" + TXT.catSuffixException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang)\n        : \" \" + TXT.catSuffixDigital;\n    }\n    $(\"sw-catText\").textContent = (TXT.catLabels[cat] || cat) + suffix;\n    \/\/ Ecwid wickelt in Russland keine Zahlungen ab. Wer Russland waehlt, wird\n    \/\/ deshalb auf die russische Anmeldeseite verwiesen - die laeuft ueber n8n\n    \/\/ und Tochka statt ueber den Shop. Der russische Wizard verweist umgekehrt\n    \/\/ zurueck, sobald dort ein anderes Land gewaehlt wird.\n    const nachRussland = (code === \"RU\");\n    $(\"sw-redirect-russia\").style.display = nachRussland ? \"block\" : \"none\";\n    $(\"sw-catInfo\").style.display         = nachRussland ? \"none\"  : \"block\";\n    setNextEnabled(\"sw-btn-country-next\", !nachRussland);\n    updateAppOnlyUI();\n  }\n  function ensureEcwidReady(timeoutMs = 12000) {\n    return new Promise((resolve, reject) => {\n      function isReady() {\n        return window.Ecwid && window.Ecwid.Cart &&\n               typeof window.Ecwid.Cart.addProduct === \"function\" &&\n               typeof window.Ecwid.Cart.clear === \"function\";\n      }\n      if (isReady()) return resolve(true);\n      let resolved = false;\n      function done() { if (!resolved) { resolved = true; setTimeout(() => resolve(true), 200); } }\n      if (window.Ecwid) { try { window.Ecwid.OnAPILoaded.add(done); } catch(e) {} }\n      const start = Date.now();\n      const t = setInterval(() => {\n        if (isReady()) { clearInterval(t); done(); }\n        else if (Date.now() - start > timeoutMs) {\n          clearInterval(t);\n          if (!resolved) { resolved = true; reject(new Error(fillPlaceholder(TXT.errEcwid, timeoutMs\/1000))); }\n        }\n      }, 200);\n    });\n  }\n  function clearCartAsync() { return new Promise(r => Ecwid.Cart.clear(() => r(true))); }\n  function addProductAsync(payload, timeoutMs = 4000) {\n    return new Promise((resolve, reject) => {\n      let done = false;\n      const t = setTimeout(() => { if (!done) { done = true; resolve({ product:null, cart:null, timedOut:true }); } }, timeoutMs);\n      Ecwid.Cart.addProduct(payload, function(success, product, cart, error) {\n        if (done) return;\n        done = true; clearTimeout(t);\n        if (success) resolve({ product, cart, timedOut:false });\n        else reject(new Error((error || TXT.errProduct) + \" | Payload: \" + JSON.stringify(payload)));\n      });\n    });\n  }\n  function goToCart() { window.location.href = SHOP_CART_URL; }\n  function buildN8nPayload() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const d1 = getDiscounts(p1, false);\n    const d2 = getDiscounts(p2, true);\n    return {\n      sprache: state.commLang, land: state.country, kategorie: state.category, appOnly: isAppOnly(),\n      person1: { vorname: p1.vorname, nachname: p1.nachname, email: p1.email },\n      person2: { vorname: p2.vorname, nachname: p2.nachname, email: p2.email },\n      betraege: {\n        person1: { gewaehlt: Math.round(p1.amount), rabatte: d1.discounts, endbetrag: d1.finalAmount },\n        person2: { gewaehlt: Math.round(p2.amount), rabatte: d2.discounts, endbetrag: d2.finalAmount },\n        gesamt: d1.finalAmount + d2.finalAmount\n      },\n      timestamp: new Date().toISOString()\n    };\n  }\n  async function sendToN8n(payload) {\n    if (!N8N_WEBHOOK_URL || N8N_WEBHOOK_URL.indexOf(\"HIER_\") === 0) {\n      throw new Error(\"Die n8n-Webhook-URL ist im Code noch nicht eingetragen.\");\n    }\n    let res;\n    try {\n      res = await fetch(N8N_WEBHOOK_URL, { method:\"POST\", headers:{\"Content-Type\":\"application\/json\"}, body:JSON.stringify(payload) });\n    } catch (e) {\n      throw new Error(TXT.errNetwork);\n    }\n    if (!res.ok) throw new Error(fillPlaceholder(TXT.errSubmit, res.status));\n    return true;\n  }\n  async function goCheckoutSolo() {\n    clearErrorIn(\"sw-error-amount-solo\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-solo\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-solo\", TXT.errLang);\n    const p = state.persons.solo;\n    const finalAmount = getDiscounts(p, false).finalAmount;\n    const participationProductId = getParticipationProductId(false);\n    setCheckoutLoading(\"sw-btn-checkout-solo\", true);\n    try {\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const statusValue = buildStatusOptionValue(p, false);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: finalAmount, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-solo\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-solo\", false);\n    }\n  }\n  async function goCheckoutPaar() {\n    clearErrorIn(\"sw-error-amount-paar\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-paar\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-paar\", TXT.errLang);\n    if (!validateDetailsPaar()) return showErrorIn(\"sw-error-amount-paar\", TXT.errPaarFields);\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const participationProductId = getParticipationProductId(true);\n    setCheckoutLoading(\"sw-btn-checkout-paar\", true);\n    try {\n      const payload = buildN8nPayload();\n      await sendToN8n(payload);\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const total = getDiscounts(p1, false).finalAmount + getDiscounts(p2, true).finalAmount;\n      const statusValue = buildStatusOptionValue(p1, true);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: total, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-paar\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-paar\", false);\n    }\n  }\n  function validateLangform() {\n    const ok = !!state.commLang && !!state.form && state.form !== \"gruppe\";\n    setNextEnabled(\"sw-btn-langform-next\", ok);\n  }\n  function validateDetailsSolo() {\n    const ok = !!$(\"sw-solo-status\").value;\n    setNextEnabled(\"sw-btn-details-solo-next\", ok);\n    return ok;\n  }\n  function validateDetailsPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const emailOk = s => \/\\S+@\\S+\\.\\S+\/.test(s || \"\");\n    const ok = !!(p1.vorname && p1.vorname.trim()) && !!(p1.nachname && p1.nachname.trim()) && emailOk(p1.email) &&\n               !!(p2.vorname && p2.vorname.trim()) && !!(p2.nachname && p2.nachname.trim()) && emailOk(p2.email);\n    setNextEnabled(\"sw-btn-details-paar-next\", ok);\n    return ok;\n  }\n  function bindNameFields(key) {\n    [\"vorname\",\"nachname\",\"email\"].forEach(f => {\n      $(`sw-${key}-${f}`).addEventListener(\"input\", e => {\n        getPerson(key)[f] = e.target.value;\n        validateDetailsPaar();\n      });\n    });\n  }\n  $(\"sw-btn-welcome-next\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-country-back\").addEventListener(\"click\", () => showStep(1));\n  $(\"sw-btn-country-next\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-country-search\").addEventListener(\"input\",  e => renderCountryList(e.target.value));\n  $(\"sw-country-search\").addEventListener(\"focus\",  () => renderCountryList($(\"sw-country-search\").value));\n  shadow.addEventListener(\"click\", e => {\n    if (!e.target.closest(\"#sw-country-list\") && !e.target.closest(\"#sw-country-search\")) {\n      $(\"sw-country-list\").innerHTML = \"\";\n    }\n  });\n  $(\"sw-commLang\").addEventListener(\"change\", e => {\n    state.commLang = e.target.value;\n    validateLangform();\n    updateAppOnlyUI();\n    refreshSummary();\n  });\n  shadow.querySelectorAll(\".sw-choice-card\").forEach(card => {\n    card.addEventListener(\"click\", () => {\n      state.form = card.dataset.form;\n      shadow.querySelectorAll(\".sw-choice-card\").forEach(c => c.classList.toggle(\"active\", c === card));\n      const isGruppe = state.form === \"gruppe\";\n      $(\"sw-gruppe-note\").style.display = isGruppe ? \"block\" : \"none\";\n      $(\"sw-btn-langform-next\").style.display   = isGruppe ? \"none\" : \"inline-block\";\n      $(\"sw-btn-gruppe-redirect\").style.display = isGruppe ? \"inline-block\" : \"none\";\n      clearErrorIn(\"sw-error-langform\");\n      validateLangform();\n    });\n  });\n  $(\"sw-btn-gruppe-redirect\").addEventListener(\"click\", () => { window.location.href = getGroupRedirectUrl(); });\n  $(\"sw-btn-langform-back\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-langform-next\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-details-solo-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-solo-status\").addEventListener(\"change\", e => {\n    const val = e.target.value;\n    const person = state.persons.solo;\n    person.statusType  = val;\n    person.wiederholer = val === \"wiederholer\";\n    clearErrorIn(\"sw-error-details-solo\");\n    validateDetailsSolo();\n  });\n  $(\"sw-btn-details-solo-next\").addEventListener(\"click\", () => {\n    if (validateDetailsSolo()) { applyRangeForForm(); showStep(5); }\n    else showErrorIn(\"sw-error-details-solo\", TXT.errSelectFirst);\n  });\n  $(\"sw-btn-details-paar-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-btn-details-paar-next\").addEventListener(\"click\", () => {\n    if (validateDetailsPaar()) { applyRangeForForm(); showStep(5); }\n  });\n  $(\"sw-btn-amount-solo-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-amount-paar-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-checkout-solo\").addEventListener(\"click\", goCheckoutSolo);\n  $(\"sw-btn-checkout-paar\").addEventListener(\"click\", goCheckoutPaar);\n  bindNameFields(\"p1\");\n  bindNameFields(\"p2\");\n  wireAmountControl(\"solo\");\n  wireAmountControl(\"p1\");\n  wireAmountControl(\"p2\");\n  showStep(1);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b907490 e-flex e-con-boxed e-con e-parent\" data-id=\"b907490\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d846478 elementor-widget elementor-widget-html\" data-id=\"d846478\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Tinos:ital,wght@0,400;0,700;1,400&display=swap\" rel=\"stylesheet\">\n<style>\n  .ecwid-ProductBrowser,\n  .ecwid-productbrowser,\n  div[id^=\"my-store\"],\n  .ecwid:not(#sw-host-bg) {\n    visibility: hidden !important;\n    height: 0 !important;\n    max-height: 0 !important;\n    overflow: hidden !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    position: absolute !important;\n    pointer-events: none !important;\n  }\n<\/style>\n<div id=\"sw-overlay-bg\" style=\"display:none; position:fixed; inset:0; background:rgba(245,250,246,0.92); z-index:99999; flex-direction:column; align-items:center; justify-content:center; gap:20px;\">\n  <div style=\"width:52px; height:52px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:sw-spin-bg 0.8s linear infinite;\"><\/div>\n  <div style=\"font-family:'Tinos',Georgia,serif; font-size:22px; color:#27703F;\">\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u043e\u0432\u043b\u0435\u043d\u043d\u044f\u2026<\/div>\n<\/div>\n<style>\n  @keyframes sw-spin-bg { to { transform: rotate(360deg); } }\n<\/style>\n<div id=\"sw-host-bg\"><\/div>\n<script>\n(function () {\n  \/\/ \u2500\u2500 Sprach-Guard: Skript bricht sofort ab, wenn die URL nicht zu UK passt \u2500\u2500\n  const _pathMatch = window.location.pathname.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n  const _pageLang = _pathMatch ? _pathMatch[1] : \"de\";\n  if (_pageLang !== \"bg\") { \n    document.getElementById(\"sw-host-bg\")?.remove();\n    document.getElementById(\"sw-overlay-bg\")?.remove();\n    return; \n  }\n  const OVERLAY_ID    = \"sw-overlay-bg\";\n  const SHOP_CART_URL = \"https:\/\/spiritual-activity.org\/bg\/store\/cart\";\n  const N8N_WEBHOOK_URL = \"https:\/\/n8n.spiritual-activity.org\/webhook\/registration-be\";\n  function getGroupRedirectUrl() {\n    const path = window.location.pathname;\n    \/\/ Erkennt Sprachpraefixe wie \/en\/, \/es\/, \/it\/, \/ru\/ am Anfang des Pfads.\n    \/\/ Deutsch ist die Standardsprache ohne Praefix.\n    const match = path.match(\/^\\\/([a-z]{2})(\\\/|$)\/);\n    const langPrefix = (match && match[1] !== \"de\") ? \"\/\" + match[1] : \"\";\n    return \"https:\/\/spiritual-activity.org\" + langPrefix + \"\/gruppen-anmeldung\";\n  }\n  const PRODUCTS = {\n    cat1: 864374030,\n    cat2: 844860366,\n    cat3: 844907264,\n    cat4: 844907265\n  };\n\n  \/\/ Versandfreie Digital-Produkte fuer alle Faelle, in denen nichts verschickt\n  \/\/ wird: rein digitale Teilnahme und Wiederholer (kein neues Kartenset).\n  const PRODUCTS_APPONLY = {\n    cat1: 863272251,\n    cat2: 863265753,\n    cat3: 863272252,\n    cat4: 863265754\n  };\n  const RANGES = {\n    cat1: { min: 160, max: 800 },\n    cat2: { min: 105, max: 700 },\n    cat3: { min:  75, max: 600 },\n    cat4: { min:  45, max: 500 }\n  };\n  const ORIENTIERUNG = {\n    cat1: { reduced: 160, base: 360, support: 580 },\n    cat2: { reduced: 105, base: 240, support: 460 },\n    cat3: { reduced:  75, base: 160, support: 340 },\n    cat4: { reduced:  45, base: 105, support: 220 }\n  };\n  const DISCOUNT_WIEDERHOLER = 0.30;\n  const DISCOUNT_SCHUELER    = 0.50;\n  const DISCOUNT_STUDENT     = 0.25;\n  const DISCOUNT_PAAR_P2     = 0.50;\n  const DISCOUNT_APP_FIXED   = 35;\n  \/\/ Versandpauschale ausserhalb EU+CH. Ecwid kassiert sie, der Wizard rechnet sie in die Anzeige-Summe ein.\n  const SHIPPING_COST   = 15;\n  \/\/ Sprachschluessel bleiben deutsch \u2013 sie sind die Werte im Ecwid-Shop.\n  const APP_ONLY_LANGS = new Set([\"Arabisch\",\"Farsi\",\"Ukrainisch\",\"Bulgarisch\",\"Franz\u00f6sisch\"]);\n  const APP_ONLY_CATEGORY_EXCEPTION_LANG = { CN: \"Chinesisch\" };\n  const EU_PLUS_CH = new Set([\n    \"AT\",\"BE\",\"BG\",\"CY\",\"CZ\",\"DE\",\"DK\",\"EE\",\"ES\",\"FI\",\"FR\",\"GR\",\"HR\",\n    \"HU\",\"IE\",\"IT\",\"LT\",\"LU\",\"LV\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SE\",\"SI\",\"SK\",\"CH\"\n  ]);\n  \/\/ Ersetzt den Platzhalter in Klammern (z.B. [Code], [X], [\ucf54\ub4dc]) durch den Wert\n  function fillPlaceholder(text, value) {\n    return String(text).replace(\/[\\[\uff3b][^\\]\uff3d]*[\\]\uff3d]\/, value);\n  }\n  function needsShipping(countryCode) {\n    return countryCode && !EU_PLUS_CH.has(countryCode);\n  }\n  \/\/ \u2500\u2500 Uebersetzte Texte \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const TXT = {\n      \"catBadge\": \"\u041a\u0430\u0442. \",\n      \"catLabels\": {\n          \"cat1\": \"\u0426\u0435\u043d\u043e\u0432\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f 1\",\n          \"cat2\": \"\u0426\u0435\u043d\u043e\u0432\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f 2\",\n          \"cat3\": \"\u0426\u0435\u043d\u043e\u0432\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f 3\",\n          \"cat4\": \"\u0426\u0435\u043d\u043e\u0432\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f 4\"\n      },\n      \"catSuffixDigital\": \"\u2013 \u0412\u044a\u0437\u043c\u043e\u0436\u043d\u043e \u0435 \u0441\u0430\u043c\u043e \u0434\u0438\u0433\u0438\u0442\u0430\u043b\u043d\u043e \u0443\u0447\u0430\u0441\u0442\u0438\u0435\",\n      \"catSuffixException\": \"\u2013 \u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0435 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u0430 \u0441\u0430\u043c\u043e \u043f\u0440\u0438 \u0435\u0437\u0438\u043a \u043d\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 {X}, \u0438\u043d\u0430\u0447\u0435 \u0435 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u0430\u043c\u043e \u0434\u0438\u0433\u0438\u0442\u0430\u043b\u043d\u043e \u0443\u0447\u0430\u0441\u0442\u0438\u0435\",\n      \"noCountry\": \"\u041d\u044f\u043c\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0430 \u0434\u044a\u0440\u0436\u0430\u0432\u0430\",\n      \"markerReduced\": \"\u041d\u0430\u043c\u0430\u043b\u0435\u043d\u0430 \u0432\u043d\u043e\u0441\u043a\u0430\",\n      \"markerBase\": \"\u041e\u0441\u043d\u043e\u0432\u043d\u0430 \u0432\u043d\u043e\u0441\u043a\u0430\",\n      \"markerSupport\": \"\u041f\u043e\u0434\u043a\u0440\u0435\u043f\u044f\u0449\u0430 \u0432\u043d\u043e\u0441\u043a\u0430\",\n      \"hintLong\": \"\u0422\u0443\u043a \u043c\u043e\u0436\u0435\u0448 \u0434\u0430 \u0438\u0437\u0431\u0435\u0440\u0435\u0448 \u0432\u043d\u043e\u0441\u043a\u0430\u0442\u0430, \u043a\u043e\u044f\u0442\u043e \u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0430 \u0437\u0430 \u0442\u0435\u0431. \u0421 \u043f\u043e-\u0433\u043e\u043b\u044f\u043c\u0430 \u0432\u043d\u043e\u0441\u043a\u0430 \u0434\u0430\u0432\u0430\u0448 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u043d\u0430 \u0445\u043e\u0440\u0430 \u0441 \u043c\u0430\u043b\u043a\u0438 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u0438 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u043d\u0438 \u043f\u043e\u043c\u0430\u0433\u0430\u0448 \u0434\u0430 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u043c\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0437\u0430\u043d\u0430\u043f\u0440\u0435\u0434 \u0438 \u0434\u0430 \u0433\u043e \u0440\u0430\u0437\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0432\u0430\u043c\u0435 \u0432\u044a\u0432 \u0432\u0441\u0438\u0447\u043a\u0438 \u043a\u044a\u0442\u0447\u0435\u0442\u0430 \u043d\u0430 \u0441\u0432\u0435\u0442\u0430.\",\n      \"hintPaar\": \"\u0412\u0441\u0435\u043a\u0438 \u0438\u0437\u0431\u0438\u0440\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u0430\u0442\u0430 \u0441\u0438 \u0432\u043d\u043e\u0441\u043a\u0430. \u041b\u0438\u0446\u0435 2 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 50% \u043e\u0442\u0441\u0442\u044a\u043f\u043a\u0430.\",\n      \"person1\": \"\u041b\u0438\u0446\u0435 1\",\n      \"person2\": \"\u041b\u0438\u0446\u0435 2\",\n      \"p2Badge\": \"(\u221250%)\",\n      \"discWiederholer\": \"\u041f\u043e\u0432\u0442\u0430\u0440\u044f\u0449 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\",\n      \"discSchueler\": \"\u0423\u0447\u0435\u043d\u0438\u0446\u0438\",\n      \"discStudent\": \"\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435\/\u0441\u043b\u0435\u0434\u0432\u0430\u043d\u0435\",\n      \"discP2\": \"\u041e\u0442\u0441\u0442\u044a\u043f\u043a\u0430 \u0437\u0430 \u041b\u0438\u0446\u0435 2\",\n      \"discApp\": \"\u0414\u0438\u0433\u0438\u0442\u0430\u043b\u043d\u043e \u0443\u0447\u0430\u0441\u0442\u0438\u0435\",\n      \"reasonRegion\": \"\u0412 \u0442\u0432\u043e\u044f \u0440\u0435\u0433\u0438\u043e\u043d \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430\u0442\u0430 \u043d\u0435 \u0435 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u0430. \u0422\u0438 \u0443\u0447\u0430\u0441\u0442\u0432\u0430\u0448 \u0434\u0438\u0433\u0438\u0442\u0430\u043b\u043d\u043e. \u041e\u0442\u0441\u0442\u044a\u043f\u043a\u0430\u0442\u0430 \u0441\u0435 \u043d\u0430\u0447\u0438\u0441\u043b\u044f\u0432\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u0442\u043e.\",\n      \"reasonRussian\": \"\u0417\u0430 \u0440\u0443\u0441\u043a\u043e\u0433\u043e\u0432\u043e\u0440\u044f\u0449\u0438 \u0438\u0437\u0432\u044a\u043d \u0420\u0443\u0441\u0438\u044f \u0438\u043c\u0430 \u0441\u0430\u043c\u043e \u0434\u0438\u0433\u0438\u0442\u0430\u043b\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f. \u041e\u0442\u0441\u0442\u044a\u043f\u043a\u0430\u0442\u0430 \u0441\u0435 \u043d\u0430\u0447\u0438\u0441\u043b\u044f\u0432\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u0442\u043e.\",\n      \"reasonLanguage\": \"\u041d\u0430 \u0442\u043e\u0437\u0438 \u0435\u0437\u0438\u043a \u0438\u043c\u0430 \u0441\u0430\u043c\u043e \u0434\u0438\u0433\u0438\u0442\u0430\u043b\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f. \u041e\u0442\u0441\u0442\u044a\u043f\u043a\u0430\u0442\u0430 \u0441\u0435 \u043d\u0430\u0447\u0438\u0441\u043b\u044f\u0432\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u0442\u043e.\",\n      \"reasonException\": \"\u0412 \u0442\u0432\u043e\u044f \u0440\u0435\u0433\u0438\u043e\u043d \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0435 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u0430 \u0441\u0430\u043c\u043e \u043f\u0440\u0438 \u0435\u0437\u0438\u043a \u043d\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 {X}. \u0422\u0438 \u0443\u0447\u0430\u0441\u0442\u0432\u0430\u0448 \u0434\u0438\u0433\u0438\u0442\u0430\u043b\u043d\u043e. \u041e\u0442\u0441\u0442\u044a\u043f\u043a\u0430\u0442\u0430 \u0441\u0435 \u043d\u0430\u0447\u0438\u0441\u043b\u044f\u0432\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u0442\u043e.\",\n      \"thanksTitle\": \"\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u043c \u0442\u0438!\",\n      \"thanksLine1\": \"\u041f\u043b\u0430\u0449\u0430\u043d\u0435\u0442\u043e \u0441\u0435 \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u2026\",\n      \"thanksLine2\": \"\u0429\u0435 \u0431\u044a\u0434\u0435\u0448 \u043f\u0440\u0435\u043d\u0430\u0441\u043e\u0447\u0435\u043d(\u0430) \u0441\u043b\u0435\u0434 \u043c\u0430\u043b\u043a\u043e\u2026\",\n      \"preparing\": \"\u041f\u043e\u0434\u0433\u043e\u0442\u0432\u044f \u0441\u0435\u2026\",\n      \"errSelectFirst\": \"\u041c\u043e\u043b\u044f, \u043f\u044a\u0440\u0432\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u0438 \u0438\u0437\u0431\u043e\u0440.\",\n      \"errPaarFields\": \"\u041c\u043e\u043b\u044f, \u0432\u044a\u0440\u043d\u0438 \u0441\u0435 \u043d\u0430\u0437\u0430\u0434 \u0438 \u043f\u043e\u043f\u044a\u043b\u043d\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u043f\u043e\u043b\u0435\u0442\u0430 \u0437\u0430 \u0434\u0432\u0435\u0442\u0435 \u043b\u0438\u0446\u0430.\",\n      \"errCountry\": \"\u041c\u043e\u043b\u044f, \u043f\u044a\u0440\u0432\u043e \u0438\u0437\u0431\u0435\u0440\u0438 \u0434\u044a\u0440\u0436\u0430\u0432\u0430.\",\n      \"errLang\": \"\u041c\u043e\u043b\u044f, \u0438\u0437\u0431\u0435\u0440\u0438 \u0435\u0437\u0438\u043a \u043d\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435.\",\n      \"errNetwork\": \"\u0414\u0430\u043d\u043d\u0438\u0442\u0435 \u043d\u0435 \u043c\u043e\u0436\u0430\u0445\u0430 \u0434\u0430 \u0431\u044a\u0434\u0430\u0442 \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u0438. \u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0441\u0438.\",\n      \"errSubmit\": \"\u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435\u0442\u043e \u0435 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e (\u0433\u0440\u0435\u0448\u043a\u0430 [\u041a\u043e\u0434]). \u041c\u043e\u043b\u044f, \u043e\u043f\u0438\u0442\u0430\u0439 \u043e\u0442\u043d\u043e\u0432\u043e.\",\n      \"errProduct\": \"\u041f\u0440\u043e\u0434\u0443\u043a\u0442\u044a\u0442 \u043d\u0435 \u043c\u043e\u0436\u0430 \u0434\u0430 \u0431\u044a\u0434\u0435 \u0434\u043e\u0431\u0430\u0432\u0435\u043d\",\n      \"errEcwid\": \"Ecwid Cart API \u043d\u0435 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u0441\u043b\u0435\u0434 [X] \u0441.\"\n  };\n  \/\/ Anzeigename der Teilnahmesprache (Schluessel = Ecwid-Wert, deutsch)\n  const LANG_DISPLAY = {\n      \"Deutsch\": \"\u041d\u0435\u043c\u0441\u043a\u0438\",\n      \"Englisch\": \"\u0410\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\",\n      \"Spanisch\": \"\u0418\u0441\u043f\u0430\u043d\u0441\u043a\u0438\",\n      \"Franz\u00f6sisch\": \"\u0424\u0440\u0435\u043d\u0441\u043a\u0438\",\n      \"Italienisch\": \"\u0418\u0442\u0430\u043b\u0438\u0430\u043d\u0441\u043a\u0438\",\n      \"Portugiesisch\": \"\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0441\u043a\u0438\",\n      \"Arabisch\": \"\u0410\u0440\u0430\u0431\u0441\u043a\u0438\",\n      \"Hebr\u00e4isch\": \"\u0418\u0432\u0440\u0438\u0442\",\n      \"Farsi\": \"\u0424\u0430\u0440\u0441\u0438\",\n      \"Georgisch\": \"\u0413\u0440\u0443\u0437\u0438\u043d\u0441\u043a\u0438\",\n      \"Ukrainisch\": \"\u0423\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\",\n      \"Niederl\u00e4ndisch\": \"\u041d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0438\",\n      \"T\u00fcrkisch\": \"\u0422\u0443\u0440\u0441\u043a\u0438\",\n      \"Bulgarisch\": \"\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438\",\n      \"Russisch\": \"\u0420\u0443\u0441\u043a\u0438\",\n      \"Chinesisch\": \"\u041a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\",\n      \"Japanisch\": \"\u042f\u043f\u043e\u043d\u0441\u043a\u0438\",\n      \"Koreanisch\": \"\u041a\u043e\u0440\u0435\u0439\u0441\u043a\u0438\"\n  };\n  \/\/ Feste Laendernamen in der Landessprache (aus CLDR), damit die Liste in\n  \/\/ jedem Browser identisch ist \u2013 unabhaengig von der Intl-Datenlage.\n  const COUNTRY_NAMES = {\n      \"AD\": \"\u0410\u043d\u0434\u043e\u0440\u0430\",\n      \"AE\": \"\u041e\u0431\u0435\u0434\u0438\u043d\u0435\u043d\u0438 \u0430\u0440\u0430\u0431\u0441\u043a\u0438 \u0435\u043c\u0438\u0440\u0441\u0442\u0432\u0430\",\n      \"AF\": \"\u0410\u0444\u0433\u0430\u043d\u0438\u0441\u0442\u0430\u043d\",\n      \"AG\": \"\u0410\u043d\u0442\u0438\u0433\u0443\u0430 \u0438 \u0411\u0430\u0440\u0431\u0443\u0434\u0430\",\n      \"AL\": \"\u0410\u043b\u0431\u0430\u043d\u0438\u044f\",\n      \"AM\": \"\u0410\u0440\u043c\u0435\u043d\u0438\u044f\",\n      \"AO\": \"\u0410\u043d\u0433\u043e\u043b\u0430\",\n      \"AR\": \"\u0410\u0440\u0436\u0435\u043d\u0442\u0438\u043d\u0430\",\n      \"AT\": \"\u0410\u0432\u0441\u0442\u0440\u0438\u044f\",\n      \"AU\": \"\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u044f\",\n      \"AW\": \"\u0410\u0440\u0443\u0431\u0430\",\n      \"AZ\": \"\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d\",\n      \"BA\": \"\u0411\u043e\u0441\u043d\u0430 \u0438 \u0425\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0438\u043d\u0430\",\n      \"BB\": \"\u0411\u0430\u0440\u0431\u0430\u0434\u043e\u0441\",\n      \"BD\": \"\u0411\u0430\u043d\u0433\u043b\u0430\u0434\u0435\u0448\",\n      \"BE\": \"\u0411\u0435\u043b\u0433\u0438\u044f\",\n      \"BF\": \"\u0411\u0443\u0440\u043a\u0438\u043d\u0430 \u0424\u0430\u0441\u043e\",\n      \"BG\": \"\u0411\u044a\u043b\u0433\u0430\u0440\u0438\u044f\",\n      \"BH\": \"\u0411\u0430\u0445\u0440\u0435\u0439\u043d\",\n      \"BI\": \"\u0411\u0443\u0440\u0443\u043d\u0434\u0438\",\n      \"BJ\": \"\u0411\u0435\u043d\u0438\u043d\",\n      \"BN\": \"\u0411\u0440\u0443\u043d\u0435\u0439 \u0414\u0430\u0440\u0443\u0441\u0441\u0430\u043b\u0430\u043c\",\n      \"BO\": \"\u0411\u043e\u043b\u0438\u0432\u0438\u044f\",\n      \"BR\": \"\u0411\u0440\u0430\u0437\u0438\u043b\u0438\u044f\",\n      \"BS\": \"\u0411\u0430\u0445\u0430\u043c\u0441\u043a\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438\",\n      \"BT\": \"\u0411\u0443\u0442\u0430\u043d\",\n      \"BW\": \"\u0411\u043e\u0442\u0441\u0432\u0430\u043d\u0430\",\n      \"BY\": \"\u0411\u0435\u043b\u0430\u0440\u0443\u0441\",\n      \"BZ\": \"\u0411\u0435\u043b\u0438\u0437\",\n      \"CA\": \"\u041a\u0430\u043d\u0430\u0434\u0430\",\n      \"CD\": \"\u041a\u043e\u043d\u0433\u043e (\u041a\u0438\u043d\u0448\u0430\u0441\u0430)\",\n      \"CF\": \"\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0440\u0435\u043f\u0443\u0431\u043b\u0438\u043a\u0430\",\n      \"CG\": \"\u041a\u043e\u043d\u0433\u043e (\u0411\u0440\u0430\u0437\u0430\u0432\u0438\u043b)\",\n      \"CH\": \"\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0438\u044f\",\n      \"CI\": \"\u041a\u043e\u0442 \u0434\u2019\u0418\u0432\u043e\u0430\u0440\",\n      \"CL\": \"\u0427\u0438\u043b\u0438\",\n      \"CM\": \"\u041a\u0430\u043c\u0435\u0440\u0443\u043d\",\n      \"CN\": \"\u041a\u0438\u0442\u0430\u0439\",\n      \"CO\": \"\u041a\u043e\u043b\u0443\u043c\u0431\u0438\u044f\",\n      \"CR\": \"\u041a\u043e\u0441\u0442\u0430 \u0420\u0438\u043a\u0430\",\n      \"CV\": \"\u041a\u0430\u0431\u043e \u0412\u0435\u0440\u0434\u0435\",\n      \"CY\": \"\u041a\u0438\u043f\u044a\u0440\",\n      \"CZ\": \"\u0427\u0435\u0445\u0438\u044f\",\n      \"DE\": \"\u0413\u0435\u0440\u043c\u0430\u043d\u0438\u044f\",\n      \"DJ\": \"\u0414\u0436\u0438\u0431\u0443\u0442\u0438\",\n      \"DK\": \"\u0414\u0430\u043d\u0438\u044f\",\n      \"DM\": \"\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430\",\n      \"DO\": \"\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0440\u0435\u043f\u0443\u0431\u043b\u0438\u043a\u0430\",\n      \"DZ\": \"\u0410\u043b\u0436\u0438\u0440\",\n      \"EC\": \"\u0415\u043a\u0432\u0430\u0434\u043e\u0440\",\n      \"EE\": \"\u0415\u0441\u0442\u043e\u043d\u0438\u044f\",\n      \"EG\": \"\u0415\u0433\u0438\u043f\u0435\u0442\",\n      \"ES\": \"\u0418\u0441\u043f\u0430\u043d\u0438\u044f\",\n      \"ET\": \"\u0415\u0442\u0438\u043e\u043f\u0438\u044f\",\n      \"FI\": \"\u0424\u0438\u043d\u043b\u0430\u043d\u0434\u0438\u044f\",\n      \"FJ\": \"\u0424\u0438\u0434\u0436\u0438\",\n      \"FM\": \"\u041c\u0438\u043a\u0440\u043e\u043d\u0435\u0437\u0438\u044f\",\n      \"FR\": \"\u0424\u0440\u0430\u043d\u0446\u0438\u044f\",\n      \"GA\": \"\u0413\u0430\u0431\u043e\u043d\",\n      \"GB\": \"\u0412\u0435\u043b\u0438\u043a\u043e\u0431\u0440\u0438\u0442\u0430\u043d\u0438\u044f\",\n      \"GB-SCT\": \"\u0428\u043e\u0442\u043b\u0430\u043d\u0434\u0438\u044f\",\n      \"GD\": \"\u0413\u0440\u0435\u043d\u0430\u0434\u0430\",\n      \"GE\": \"\u0413\u0440\u0443\u0437\u0438\u044f\",\n      \"GH\": \"\u0413\u0430\u043d\u0430\",\n      \"GM\": \"\u0413\u0430\u043c\u0431\u0438\u044f\",\n      \"GN\": \"\u0413\u0432\u0438\u043d\u0435\u044f\",\n      \"GQ\": \"\u0415\u043a\u0432\u0430\u0442\u043e\u0440\u0438\u0430\u043b\u043d\u0430 \u0413\u0432\u0438\u043d\u0435\u044f\",\n      \"GR\": \"\u0413\u044a\u0440\u0446\u0438\u044f\",\n      \"GT\": \"\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0430\",\n      \"GW\": \"\u0413\u0432\u0438\u043d\u0435\u044f-\u0411\u0438\u0441\u0430\u0443\",\n      \"GY\": \"\u0413\u0430\u044f\u043d\u0430\",\n      \"HK\": \"\u0425\u043e\u043d\u043a\u043e\u043d\u0433, \u0421\u0410\u0420 \u043d\u0430 \u041a\u0438\u0442\u0430\u0439\",\n      \"HN\": \"\u0425\u043e\u043d\u0434\u0443\u0440\u0430\u0441\",\n      \"HR\": \"\u0425\u044a\u0440\u0432\u0430\u0442\u0438\u044f\",\n      \"HT\": \"\u0425\u0430\u0438\u0442\u0438\",\n      \"HU\": \"\u0423\u043d\u0433\u0430\u0440\u0438\u044f\",\n      \"ID\": \"\u0418\u043d\u0434\u043e\u043d\u0435\u0437\u0438\u044f\",\n      \"IE\": \"\u0418\u0440\u043b\u0430\u043d\u0434\u0438\u044f\",\n      \"IL\": \"\u0418\u0437\u0440\u0430\u0435\u043b\",\n      \"IN\": \"\u0418\u043d\u0434\u0438\u044f\",\n      \"IQ\": \"\u0418\u0440\u0430\u043a\",\n      \"IR\": \"\u0418\u0440\u0430\u043d\",\n      \"IS\": \"\u0418\u0441\u043b\u0430\u043d\u0434\u0438\u044f\",\n      \"IT\": \"\u0418\u0442\u0430\u043b\u0438\u044f\",\n      \"JM\": \"\u042f\u043c\u0430\u0439\u043a\u0430\",\n      \"JO\": \"\u0419\u043e\u0440\u0434\u0430\u043d\u0438\u044f\",\n      \"JP\": \"\u042f\u043f\u043e\u043d\u0438\u044f\",\n      \"KE\": \"\u041a\u0435\u043d\u0438\u044f\",\n      \"KG\": \"\u041a\u0438\u0440\u0433\u0438\u0437\u0441\u0442\u0430\u043d\",\n      \"KH\": \"\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0430\",\n      \"KI\": \"\u041a\u0438\u0440\u0438\u0431\u0430\u0442\u0438\",\n      \"KM\": \"\u041a\u043e\u043c\u043e\u0440\u0441\u043a\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438\",\n      \"KN\": \"\u0421\u0435\u0439\u043d\u0442 \u041a\u0438\u0442\u0441 \u0438 \u041d\u0435\u0432\u0438\u0441\",\n      \"KR\": \"\u042e\u0436\u043d\u0430 \u041a\u043e\u0440\u0435\u044f\",\n      \"KW\": \"\u041a\u0443\u0432\u0435\u0439\u0442\",\n      \"KZ\": \"\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d\",\n      \"LA\": \"\u041b\u0430\u043e\u0441\",\n      \"LB\": \"\u041b\u0438\u0432\u0430\u043d\",\n      \"LC\": \"\u0421\u0435\u0439\u043d\u0442 \u041b\u0443\u0441\u0438\u044f\",\n      \"LI\": \"\u041b\u0438\u0445\u0442\u0435\u043d\u0449\u0430\u0439\u043d\",\n      \"LK\": \"\u0428\u0440\u0438 \u041b\u0430\u043d\u043a\u0430\",\n      \"LR\": \"\u041b\u0438\u0431\u0435\u0440\u0438\u044f\",\n      \"LS\": \"\u041b\u0435\u0441\u043e\u0442\u043e\",\n      \"LT\": \"\u041b\u0438\u0442\u0432\u0430\",\n      \"LU\": \"\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0433\",\n      \"LV\": \"\u041b\u0430\u0442\u0432\u0438\u044f\",\n      \"LY\": \"\u041b\u0438\u0431\u0438\u044f\",\n      \"MA\": \"\u041c\u0430\u0440\u043e\u043a\u043e\",\n      \"MD\": \"\u041c\u043e\u043b\u0434\u043e\u0432\u0430\",\n      \"ME\": \"\u0427\u0435\u0440\u043d\u0430 \u0433\u043e\u0440\u0430\",\n      \"MG\": \"\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440\",\n      \"MH\": \"\u041c\u0430\u0440\u0448\u0430\u043b\u043e\u0432\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438\",\n      \"MK\": \"\u0421\u0435\u0432\u0435\u0440\u043d\u0430 \u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0438\u044f\",\n      \"ML\": \"\u041c\u0430\u043b\u0438\",\n      \"MM\": \"\u041c\u0438\u0430\u043d\u043c\u0430\u0440 (\u0411\u0438\u0440\u043c\u0430)\",\n      \"MN\": \"\u041c\u043e\u043d\u0433\u043e\u043b\u0438\u044f\",\n      \"MO\": \"\u041c\u0430\u043a\u0430\u043e, \u0421\u0410\u0420 \u043d\u0430 \u041a\u0438\u0442\u0430\u0439\",\n      \"MR\": \"\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0438\u044f\",\n      \"MT\": \"\u041c\u0430\u043b\u0442\u0430\",\n      \"MU\": \"\u041c\u0430\u0432\u0440\u0438\u0446\u0438\u0439\",\n      \"MV\": \"\u041c\u0430\u043b\u0434\u0438\u0432\u0438\",\n      \"MW\": \"\u041c\u0430\u043b\u0430\u0432\u0438\",\n      \"MX\": \"\u041c\u0435\u043a\u0441\u0438\u043a\u043e\",\n      \"MY\": \"\u041c\u0430\u043b\u0430\u0439\u0437\u0438\u044f\",\n      \"MZ\": \"\u041c\u043e\u0437\u0430\u043c\u0431\u0438\u043a\",\n      \"NA\": \"\u041d\u0430\u043c\u0438\u0431\u0438\u044f\",\n      \"NE\": \"\u041d\u0438\u0433\u0435\u0440\",\n      \"NG\": \"\u041d\u0438\u0433\u0435\u0440\u0438\u044f\",\n      \"NI\": \"\u041d\u0438\u043a\u0430\u0440\u0430\u0433\u0443\u0430\",\n      \"NL\": \"\u041d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0438\u044f\",\n      \"NO\": \"\u041d\u043e\u0440\u0432\u0435\u0433\u0438\u044f\",\n      \"NP\": \"\u041d\u0435\u043f\u0430\u043b\",\n      \"NR\": \"\u041d\u0430\u0443\u0440\u0443\",\n      \"NZ\": \"\u041d\u043e\u0432\u0430 \u0417\u0435\u043b\u0430\u043d\u0434\u0438\u044f\",\n      \"OM\": \"\u041e\u043c\u0430\u043d\",\n      \"PA\": \"\u041f\u0430\u043d\u0430\u043c\u0430\",\n      \"PE\": \"\u041f\u0435\u0440\u0443\",\n      \"PG\": \"\u041f\u0430\u043f\u0443\u0430-\u041d\u043e\u0432\u0430 \u0413\u0432\u0438\u043d\u0435\u044f\",\n      \"PH\": \"\u0424\u0438\u043b\u0438\u043f\u0438\u043d\u0438\",\n      \"PK\": \"\u041f\u0430\u043a\u0438\u0441\u0442\u0430\u043d\",\n      \"PL\": \"\u041f\u043e\u043b\u0448\u0430\",\n      \"PR\": \"\u041f\u0443\u0435\u0440\u0442\u043e \u0420\u0438\u043a\u043e\",\n      \"PS\": \"\u041f\u0430\u043b\u0435\u0441\u0442\u0438\u043d\u0441\u043a\u0438 \u0442\u0435\u0440\u0438\u0442\u043e\u0440\u0438\u0438\",\n      \"PT\": \"\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0438\u044f\",\n      \"PW\": \"\u041f\u0430\u043b\u0430\u0443\",\n      \"PY\": \"\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439\",\n      \"QA\": \"\u041a\u0430\u0442\u0430\u0440\",\n      \"RO\": \"\u0420\u0443\u043c\u044a\u043d\u0438\u044f\",\n      \"RS\": \"\u0421\u044a\u0440\u0431\u0438\u044f\",\n      \"RU\": \"\u0420\u0443\u0441\u0438\u044f\",\n      \"RW\": \"\u0420\u0443\u0430\u043d\u0434\u0430\",\n      \"SA\": \"\u0421\u0430\u0443\u0434\u0438\u0442\u0441\u043a\u0430 \u0410\u0440\u0430\u0431\u0438\u044f\",\n      \"SB\": \"\u0421\u043e\u043b\u043e\u043c\u043e\u043d\u043e\u0432\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438\",\n      \"SC\": \"\u0421\u0435\u0439\u0448\u0435\u043b\u0438\",\n      \"SD\": \"\u0421\u0443\u0434\u0430\u043d\",\n      \"SE\": \"\u0428\u0432\u0435\u0446\u0438\u044f\",\n      \"SG\": \"\u0421\u0438\u043d\u0433\u0430\u043f\u0443\u0440\",\n      \"SI\": \"\u0421\u043b\u043e\u0432\u0435\u043d\u0438\u044f\",\n      \"SK\": \"\u0421\u043b\u043e\u0432\u0430\u043a\u0438\u044f\",\n      \"SL\": \"\u0421\u0438\u0435\u0440\u0430 \u041b\u0435\u043e\u043d\u0435\",\n      \"SM\": \"\u0421\u0430\u043d \u041c\u0430\u0440\u0438\u043d\u043e\",\n      \"SN\": \"\u0421\u0435\u043d\u0435\u0433\u0430\u043b\",\n      \"SO\": \"\u0421\u043e\u043c\u0430\u043b\u0438\u044f\",\n      \"SR\": \"\u0421\u0443\u0440\u0438\u043d\u0430\u043c\",\n      \"SS\": \"\u042e\u0436\u0435\u043d \u0421\u0443\u0434\u0430\u043d\",\n      \"ST\": \"\u0421\u0430\u043e \u0422\u043e\u043c\u0435 \u0438 \u041f\u0440\u0438\u043d\u0441\u0438\u043f\u0438\",\n      \"SV\": \"\u0421\u0430\u043b\u0432\u0430\u0434\u043e\u0440\",\n      \"SZ\": \"\u0415\u0441\u0432\u0430\u0442\u0438\u043d\u0438\",\n      \"TD\": \"\u0427\u0430\u0434\",\n      \"TG\": \"\u0422\u043e\u0433\u043e\",\n      \"TH\": \"\u0422\u0430\u0439\u043b\u0430\u043d\u0434\",\n      \"TJ\": \"\u0422\u0430\u0434\u0436\u0438\u043a\u0438\u0441\u0442\u0430\u043d\",\n      \"TL\": \"\u0422\u0438\u043c\u043e\u0440 \u041b\u0435\u0441\u0442\u0435\",\n      \"TM\": \"\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0438\u0441\u0442\u0430\u043d\",\n      \"TN\": \"\u0422\u0443\u043d\u0438\u0441\",\n      \"TO\": \"\u0422\u043e\u043d\u0433\u0430\",\n      \"TR\": \"\u0422\u0443\u0440\u0446\u0438\u044f\",\n      \"TT\": \"\u0422\u0440\u0438\u043d\u0438\u0434\u0430\u0434 \u0438 \u0422\u043e\u0431\u0430\u0433\u043e\",\n      \"TV\": \"\u0422\u0443\u0432\u0430\u043b\u0443\",\n      \"TW\": \"\u0422\u0430\u0439\u0432\u0430\u043d\",\n      \"TZ\": \"\u0422\u0430\u043d\u0437\u0430\u043d\u0438\u044f\",\n      \"UA\": \"\u0423\u043a\u0440\u0430\u0439\u043d\u0430\",\n      \"UG\": \"\u0423\u0433\u0430\u043d\u0434\u0430\",\n      \"US\": \"\u0421\u0410\u0429\",\n      \"UY\": \"\u0423\u0440\u0443\u0433\u0432\u0430\u0439\",\n      \"UZ\": \"\u0423\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d\",\n      \"VC\": \"\u0421\u0435\u0439\u043d\u0442 \u0412\u0438\u043d\u0441\u044a\u043d\u0442 \u0438 \u0413\u0440\u0435\u043d\u0430\u0434\u0438\u043d\u0438\",\n      \"VE\": \"\u0412\u0435\u043d\u0435\u0446\u0443\u0435\u043b\u0430\",\n      \"VN\": \"\u0412\u0438\u0435\u0442\u043d\u0430\u043c\",\n      \"VU\": \"\u0412\u0430\u043d\u0443\u0430\u0442\u0443\",\n      \"WS\": \"\u0421\u0430\u043c\u043e\u0430\",\n      \"XK\": \"\u041a\u043e\u0441\u043e\u0432\u043e\",\n      \"YE\": \"\u0419\u0435\u043c\u0435\u043d\",\n      \"ZA\": \"\u042e\u0436\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430\",\n      \"ZM\": \"\u0417\u0430\u043c\u0431\u0438\u044f\",\n      \"ZW\": \"\u0417\u0438\u043c\u0431\u0430\u0431\u0432\u0435\"\n  };\n  \/\/ \u2500\u2500 Zusaetzliche Suchbegriffe (Aliasse) je Land \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Beeinflusst NUR die Suche, nicht den angezeigten Namen. Alles klein schreiben.\n  \/\/ Wichtig fuer UK: lateinische Schreibweisen, damit die Suche auch mit\n  \/\/ umgeschalteter Tastatur funktioniert.\n  const COUNTRY_SEARCH_ALIASES = {\n      \"US\": [\"\u0441\u0430\u0449\", \"\u0430\u043c\u0435\u0440\u0438\u043a\u0430\", \"\u0441\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438 \u0449\u0430\u0442\u0438\", \"\u0441\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438 \u0430\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0438 \u0449\u0430\u0442\u0438\", \"usa\", \"united states\", \"america\"],\n      \"GB\": [\"\u0432\u0435\u043b\u0438\u043a\u043e\u0431\u0440\u0438\u0442\u0430\u043d\u0438\u044f\", \"\u043e\u0431\u0435\u0434\u0438\u043d\u0435\u043d\u043e \u043a\u0440\u0430\u043b\u0441\u0442\u0432\u043e\", \"\u0430\u043d\u0433\u043b\u0438\u044f\", \"\u0431\u0440\u0438\u0442\u0430\u043d\u0438\u044f\", \"uk\", \"united kingdom\", \"england\", \"great britain\"],\n      \"GB-SCT\": [\"\u0448\u043e\u0442\u043b\u0430\u043d\u0434\u0438\u044f\", \"scotland\"],\n      \"AE\": [\"\u043e\u0430\u0435\", \"\u0435\u043c\u0438\u0440\u0441\u0442\u0432\u0430\", \"\u043e\u0431\u0435\u0434\u0438\u043d\u0435\u043d\u0438 \u0430\u0440\u0430\u0431\u0441\u043a\u0438 \u0435\u043c\u0438\u0440\u0441\u0442\u0432\u0430\", \"uae\", \"emirates\", \"united arab emirates\", \"dubai\"],\n      \"KR\": [\"\u044e\u0436\u043d\u0430 \u043a\u043e\u0440\u0435\u044f\", \"\u043a\u043e\u0440\u0435\u044f\", \"korea\", \"south korea\"],\n      \"NL\": [\"\u043d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0438\u044f\", \"\u0445\u043e\u043b\u0430\u043d\u0434\u0438\u044f\", \"netherlands\", \"holland\"],\n      \"CH\": [\"\u0448\u0432\u0435\u0439\u0446\u0430\u0440\u0438\u044f\", \"switzerland\", \"schweiz\"],\n      \"DE\": [\"\u0433\u0435\u0440\u043c\u0430\u043d\u0438\u044f\", \"germany\", \"deutschland\"],\n      \"AT\": [\"\u0430\u0432\u0441\u0442\u0440\u0438\u044f\", \"austria\"],\n      \"CZ\": [\"\u0447\u0435\u0445\u0438\u044f\", \"\u0447\u0435\u0448\u043a\u0430 \u0440\u0435\u043f\u0443\u0431\u043b\u0438\u043a\u0430\", \"czechia\", \"czech republic\"],\n      \"TR\": [\"\u0442\u0443\u0440\u0446\u0438\u044f\", \"turkey\", \"t\u00fcrkiye\", \"turkiye\"],\n      \"CI\": [\"\u043a\u043e\u0442 \u0434'\u0438\u0432\u043e\u0430\u0440\", \"\u043a\u043e\u0442 \u0434\u0438\u0432\u043e\u0430\u0440\", \"ivory coast\", \"cote d'ivoire\"],\n      \"MM\": [\"\u043c\u0438\u0430\u043d\u043c\u0430\u0440\", \"\u0431\u0438\u0440\u043c\u0430\", \"myanmar\", \"burma\"],\n      \"CV\": [\"\u043a\u0430\u0431\u043e \u0432\u0435\u0440\u0434\u0435\", \"\u0437\u0435\u043b\u0435\u043d\u0438 \u043d\u043e\u0441\", \"cape verde\", \"cabo verde\"],\n      \"TL\": [\"\u0438\u0437\u0442\u043e\u0447\u0435\u043d \u0442\u0438\u043c\u043e\u0440\", \"\u0442\u0438\u043c\u043e\u0440-\u043b\u0435\u0441\u0442\u0435\", \"east timor\", \"timor-leste\"],\n      \"SZ\": [\"\u0435\u0441\u0432\u0430\u0442\u0438\u043d\u0438\", \"\u0441\u0432\u0430\u0437\u0438\u043b\u0435\u043d\u0434\", \"eswatini\", \"swaziland\"],\n      \"MK\": [\"\u0441\u0435\u0432\u0435\u0440\u043d\u0430 \u043c\u0430\u043a\u0435\u0434\u043e\u043d\u0438\u044f\", \"\u043c\u0430\u043a\u0435\u0434\u043e\u043d\u0438\u044f\", \"north macedonia\", \"macedonia\"],\n      \"RU\": [\"\u0440\u0443\u0441\u0438\u044f\", \"\u0440\u0443\u0441\u043a\u0430 \u0444\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u044f\", \"russia\", \"russian federation\"],\n      \"CD\": [\"\u043a\u043e\u043d\u0433\u043e \u043a\u0438\u043d\u0448\u0430\u0441\u0430\", \"\u0434\u0435\u043c\u043e\u043a\u0440\u0430\u0442\u0438\u0447\u043d\u0430 \u0440\u0435\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u043a\u043e\u043d\u0433\u043e\", \"dr congo\", \"drc\"],\n      \"CG\": [\"\u043a\u043e\u043d\u0433\u043e \u0431\u0440\u0430\u0437\u0430\u0432\u0438\u043b\", \"congo brazzaville\"],\n      \"LA\": [\"\u043b\u0430\u043e\u0441\", \"laos\"],\n      \"VN\": [\"\u0432\u0438\u0435\u0442\u043d\u0430\u043c\", \"vietnam\", \"viet nam\"],\n      \"IR\": [\"\u0438\u0440\u0430\u043d\", \"\u043f\u0435\u0440\u0441\u0438\u044f\", \"iran\", \"persia\"],\n      \"MO\": [\"\u043c\u0430\u043a\u0430\u043e\", \"macau\", \"macao\"],\n      \"HK\": [\"\u0445\u043e\u043d\u043a\u043e\u043d\u0433\", \"hong kong\"],\n      \"TW\": [\"\u0442\u0430\u0439\u0432\u0430\u043d\", \"taiwan\"],\n      \"GE\": [\"\u0433\u0440\u0443\u0437\u0438\u044f\", \"georgia\"],\n      \"MD\": [\"\u043c\u043e\u043b\u0434\u043e\u0432\u0430\", \"moldova\"],\n      \"BY\": [\"\u0431\u0435\u043b\u0430\u0440\u0443\u0441\", \"belarus\"],\n      \"BG\": [\"\u0431\u044a\u043b\u0433\u0430\u0440\u0438\u044f\", \"bulgaria\"],\n      \"GR\": [\"\u0433\u044a\u0440\u0446\u0438\u044f\", \"greece\"],\n      \"PL\": [\"\u043f\u043e\u043b\u0448\u0430\", \"poland\"],\n      \"RO\": [\"\u0440\u0443\u043c\u044a\u043d\u0438\u044f\", \"romania\"],\n      \"RS\": [\"\u0441\u044a\u0440\u0431\u0438\u044f\", \"serbia\"],\n      \"HU\": [\"\u0443\u043d\u0433\u0430\u0440\u0438\u044f\", \"hungary\"],\n      \"IT\": [\"\u0438\u0442\u0430\u043b\u0438\u044f\", \"italy\"],\n      \"ES\": [\"\u0438\u0441\u043f\u0430\u043d\u0438\u044f\", \"spain\"],\n      \"FR\": [\"\u0444\u0440\u0430\u043d\u0446\u0438\u044f\", \"france\"],\n      \"PT\": [\"\u043f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0438\u044f\", \"portugal\"],\n      \"SE\": [\"\u0448\u0432\u0435\u0446\u0438\u044f\", \"sweden\"],\n      \"NO\": [\"\u043d\u043e\u0440\u0432\u0435\u0433\u0438\u044f\", \"norway\"],\n      \"DK\": [\"\u0434\u0430\u043d\u0438\u044f\", \"denmark\"],\n      \"FI\": [\"\u0444\u0438\u043d\u043b\u0430\u043d\u0434\u0438\u044f\", \"finland\"],\n      \"IE\": [\"\u0438\u0440\u043b\u0430\u043d\u0434\u0438\u044f\", \"ireland\"],\n      \"IL\": [\"\u0438\u0437\u0440\u0430\u0435\u043b\", \"israel\"],\n      \"JP\": [\"\u044f\u043f\u043e\u043d\u0438\u044f\", \"japan\"],\n      \"CN\": [\"\u043a\u0438\u0442\u0430\u0439\", \"china\"],\n      \"IN\": [\"\u0438\u043d\u0434\u0438\u044f\", \"india\"],\n      \"BR\": [\"\u0431\u0440\u0430\u0437\u0438\u043b\u0438\u044f\", \"brazil\"],\n      \"CA\": [\"\u043a\u0430\u043d\u0430\u0434\u0430\", \"canada\"],\n      \"AU\": [\"\u0430\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u044f\", \"australia\"],\n      \"UA\": [\"\u0443\u043a\u0440\u0430\u0439\u043d\u0430\", \"ukraine\"]\n  };\n  const COUNTRIES = {\n    cat1: [\"CY\",\"CA\",\"FR\",\"FI\",\"BH\",\"AU\",\"AD\",\"SE\",\"DE\",\"SA\",\"AT\",\"BE\",\"HK\",\"MT\",\"IS\",\"SM\",\"NL\",\"DK\",\"TW\",\"AE\",\"US\",\"BN\",\"CH\",\"NO\",\"GY\",\"QA\",\"MO\",\"IE\",\"LU\",\"SG\",\"LI\",\"GB\",\"GB-SCT\"],\n    cat2: [\"KR\",\"ME\",\"CL\",\"TT\",\"MV\",\"UY\",\"BS\",\"OM\",\"SC\",\"MY\",\"PA\",\"TR\",\"LV\",\"GR\",\"KZ\",\"SK\",\"HU\",\"RU\",\"RO\",\"EE\",\"AW\",\"PT\",\"PR\",\"HR\",\"KW\",\"JP\",\"NZ\",\"PL\",\"IL\",\"ES\",\"LT\",\"SI\",\"CZ\",\"IT\"],\n    cat3: [\"BZ\",\"TN\",\"GT\",\"IQ\",\"ZA\",\"FJ\",\"EC\",\"LY\",\"ID\",\"VN\",\"BT\",\"DZ\",\"PE\",\"PW\",\"BW\",\"DM\",\"PY\",\"MD\",\"GQ\",\"MN\",\"VC\",\"IR\",\"GD\",\"EG\",\"CO\",\"SR\",\"TM\",\"BA\",\"BB\",\"BR\",\"AL\",\"AM\",\"GA\",\"MX\",\"AZ\",\"TH\",\"LC\",\"CN\",\"MK\",\"DO\",\"AG\",\"AR\",\"GE\",\"CR\",\"MU\",\"RS\",\"BY\",\"KN\",\"XK\",\"BG\"],\n    cat4: [\"UA\",\"BI\",\"SS\",\"CF\",\"YE\",\"MZ\",\"MW\",\"SO\",\"CD\",\"LR\",\"MG\",\"NE\",\"AF\",\"SD\",\"SB\",\"ML\",\"HT\",\"VU\",\"BF\",\"LS\",\"TD\",\"GW\",\"TG\",\"GM\",\"KI\",\"SL\",\"PG\",\"UG\",\"KM\",\"PS\",\"RW\",\"TZ\",\"ET\",\"ZM\",\"FM\",\"BJ\",\"GN\",\"TL\",\"MM\",\"SN\",\"CM\",\"TJ\",\"TV\",\"NP\",\"CG\",\"ST\",\"PK\",\"KE\",\"ZW\",\"MH\",\"HN\",\"TO\",\"CI\",\"WS\",\"GH\",\"VE\",\"KH\",\"MR\",\"KG\",\"NI\",\"NG\",\"DJ\",\"AO\",\"LA\",\"BD\",\"BO\",\"MA\",\"JO\",\"LB\",\"NR\",\"IN\",\"NA\",\"CV\",\"UZ\",\"PH\",\"SZ\",\"JM\",\"SV\",\"LK\"]\n  };\n  \/\/ \u2500\u2500 Ecwid-Optionsnamen und -werte: bleiben exakt deutsch wie im Shop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const OPT_COMM_LANG = \"In welcher Sprache nimmst Du teil?\";\n  const OPT_STATUS    = \"Trifft etwas davon auf Dich zu?\";\n  const STATUS_LABEL = {\n    paar:        \"Zu zweit (gleicher Haushalt)\",\n    schueler:    \"Sch\u00fcler:innen\",\n    student:     \"Student\",\n    wiederholer: \"Wiederholer\",\n    apponly:     \"Digitale Teilnahme (App)\"\n  };\n  \/\/ \u2500\u2500 Shadow DOM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const host = document.getElementById(\"sw-host-bg\");\n  const shadow = host.attachShadow({ mode: \"open\" });\n  const styleEl = document.createElement(\"style\");\n  styleEl.textContent = `\n    :host {\n      display: block;\n      --bg:           #F5FAF6;\n      --card:         #FFFFFF;\n      --ink:          #0C1E14;\n      --ink-muted:    #27703F;\n      --accent:       #0C1E14;\n      --accent-light: #E6F2E8;\n      --border:       #C8E0CE;\n      --radius:       16px;\n      --radius-sm:    10px;\n    }\n    @keyframes wiz-spin { to { transform: rotate(360deg); } }\n    .sw-root {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 20px; font-weight: 400; color: var(--ink);\n      background: var(--bg); padding: 32px 20px;\n      display: flex; align-items: flex-start; justify-content: center;\n    }\n    .sw-card {\n      background: var(--card); border: 1px solid var(--border);\n      border-radius: 24px; padding: 36px 32px;\n      width: 100%; max-width: 780px;\n      box-shadow: 0 4px 24px rgba(12,30,20,0.08); box-sizing: border-box;\n    }\n    @media (max-width: 480px) {\n      .sw-root { padding: 16px 10px; }\n      .sw-card { padding: 24px 16px; border-radius: 16px; }\n    }\n    .sw-progress { display: flex; gap: 8px; margin-bottom: 32px; }\n    .sw-progress-step { flex: 1; height: 4px; background: var(--border); border-radius: 999px; transition: background 0.35s; }\n    .sw-progress-step.active { background: var(--accent); }\n    .sw-progress-step.done   { background: var(--accent); opacity: 0.4; }\n    .sw-step-label { font-size: 12px; font-weight: 400; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: 10px; }\n    .sw-heading { font-size: 26px; font-weight: 500; line-height: 1.2; margin: 0 0 6px; color: var(--accent); letter-spacing: 0.01em; }\n    .sw-subtext { font-size: 18px; font-weight: 400; color: var(--ink-muted); margin: 0 0 28px; line-height: 1.6; }\n    .sw-label { display: block; font-size: 18px; font-weight: 700; margin-bottom: 6px; color: var(--ink); }\n    .sw-select, .sw-text-input {\n      width: 100%; padding: 13px 15px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg);\n      font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-select {\n      appearance: none;\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2327703F' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: right 15px center;\n      cursor: pointer;\n    }\n    .sw-select:focus, .sw-text-input:focus {\n      outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1);\n    }\n    .sw-text-input { margin-bottom: 14px; }\n    .sw-redirect { display: none; margin-top: 12px; padding: 18px 20px; border-radius: var(--radius-sm); background: #FFF8F0; border: 1px solid rgba(180,80,0,0.2); font-size: 17px; line-height: 1.8; color: var(--ink); }\n    .sw-redirect strong { display: block; margin-bottom: 8px; font-size: 17px; color: #7A3500; }\n    .sw-redirect a { color: #27703F; text-decoration: underline; }\n    .sw-infobox {\n      margin-top: 12px; padding: 15px 17px; border-radius: var(--radius-sm);\n      background: var(--accent-light); border: 1px solid rgba(12,30,20,0.15);\n      font-size: 18px; font-weight: 400; line-height: 1.5;\n    }\n    .sw-infobox-title {\n      font-weight: 700; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase;\n      color: var(--accent); margin-bottom: 3px;\n    }\n    .sw-divider { border: 0; border-top: 1px solid var(--border); margin: 30px 0 24px; }\n    .sw-choice-row { display: flex; gap: 10px; flex-wrap: wrap; }\n    .sw-choice-card {\n      flex: 1; min-width: 150px; padding: 16px 14px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      text-align: center; cursor: pointer; font-size: 17px; line-height: 1.3;\n      transition: all 0.15s; background: var(--bg); box-sizing: border-box;\n    }\n    .sw-choice-card:hover { border-color: var(--accent); }\n    .sw-choice-card.active { background: var(--accent-light); border-color: var(--accent); font-weight: 700; color: var(--accent); }\n    @media (max-width: 480px) { .sw-choice-card { min-width: 100%; } }\n    .sw-person-block { margin-bottom: 8px; }\n    .sw-person-title { font-weight: 700; font-size: 21px; color: var(--accent); margin-bottom: 16px; }\n    .sw-field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 0; }\n    @media (max-width: 480px) { .sw-field-grid { grid-template-columns: 1fr; } }\n    .sw-range-header { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 22px; }\n    .sw-range-header-label { font-weight: 700; font-size: 18px; }\n    .sw-amount-display { display: flex; align-items: baseline; gap: 3px; }\n    .sw-amount-display span { font-size: 18px; font-weight: 400; }\n    .sw-amount-input {\n      font-family: 'Tinos', Georgia, serif;\n      font-size: 36px; font-weight: 700; color: var(--ink);\n      border: 2px solid var(--border); background: var(--bg);\n      text-align: right; width: 132px; padding: 4px 12px;\n      outline: none; border-radius: var(--radius-sm);\n      transition: background 0.15s, color 0.15s, border-color 0.15s, box-shadow 0.15s;\n    }\n    .sw-amount-input:hover { border-color: var(--accent); background: var(--accent-light); }\n    .sw-amount-input:focus { border-color: var(--accent); background: var(--accent-light); color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    input[type=range].sw-range {\n      -webkit-appearance: none; width: 100%; height: 6px;\n      border-radius: 999px; background: var(--border); outline: none; cursor: pointer;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb {\n      -webkit-appearance: none; width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35);\n      cursor: pointer; transition: transform 0.15s, box-shadow 0.15s;\n    }\n    input[type=range].sw-range::-webkit-slider-thumb:hover { transform: scale(1.08); box-shadow: 0 0 0 9px rgba(12,30,20,0.18), 0 3px 12px rgba(12,30,20,0.4); }\n    input[type=range].sw-range::-webkit-slider-thumb:active { transform: scale(1.12); }\n    input[type=range].sw-range::-moz-range-thumb {\n      width: 40px; height: 40px; border-radius: 50%;\n      background-color: var(--accent);\n      background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7l-5 5 5 5M16 7l5 5-5 5'\/%3E%3C\/svg%3E\");\n      background-repeat: no-repeat; background-position: center; background-size: 20px 20px;\n      border: none; box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); cursor: pointer;\n    }\n    input[type=range].sw-range.sw-pulse::-webkit-slider-thumb { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    input[type=range].sw-range.sw-pulse::-moz-range-thumb    { animation: sw-thumb-pulse 1s ease-in-out 3; }\n    @keyframes sw-thumb-pulse {\n      0%, 100% { box-shadow: 0 0 0 6px rgba(12,30,20,0.12), 0 3px 10px rgba(12,30,20,0.35); }\n      50%      { box-shadow: 0 0 0 15px rgba(12,30,20,0.05), 0 3px 10px rgba(12,30,20,0.35); }\n    }\n    .sw-range-wrap { position: relative; }\n    .sw-markers { position: relative; height: 56px; margin-bottom: 8px; margin-left: 18px; margin-right: 18px; }\n    .sw-marker {\n      position: absolute; transform: translateX(-50%);\n      display: flex; flex-direction: column; align-items: center; gap: 2px;\n      justify-content: flex-end; height: 100%; pointer-events: auto; cursor: pointer;\n    }\n    .sw-marker-tick { width: 1px; height: 10px; background: var(--border); flex-shrink: 0; }\n    .sw-marker.active .sw-marker-tick { background: var(--accent); opacity: 0.5; }\n    .sw-marker-label { font-size: 11px; font-weight: 400; color: var(--ink-muted); white-space: nowrap; line-height: 1.2; text-align: center; order: -2; }\n    .sw-marker-amount { font-size: 13px; font-weight: 700; color: var(--ink-muted); order: -1; }\n    .sw-marker.active .sw-marker-label, .sw-marker.active .sw-marker-amount { color: var(--accent); }\n    @media (max-width: 540px) {\n      .sw-markers { display: none; }\n      .sw-markers-mobile { display: flex !important; }\n    }\n    .sw-markers-mobile {\n      display: none; flex-direction: column; gap: 0;\n      margin: 12px 0 4px; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden;\n    }\n    .sw-marker-mobile {\n      display: flex; align-items: center; justify-content: space-between;\n      padding: 10px 14px; cursor: pointer; border-bottom: 1px solid var(--border);\n      transition: background 0.15s; font-family: 'Tinos', Georgia, serif;\n    }\n    .sw-marker-mobile:last-child { border-bottom: 0; }\n    .sw-marker-mobile:hover { background: var(--accent-light); }\n    .sw-marker-mobile.active { background: var(--accent-light); }\n    .sw-marker-mobile-label { font-size: 15px; font-weight: 400; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-label { color: var(--accent); font-weight: 700; }\n    .sw-marker-mobile-amount { font-size: 16px; font-weight: 700; color: var(--ink-muted); }\n    .sw-marker-mobile.active .sw-marker-mobile-amount { color: var(--accent); }\n    .sw-summary-box { padding: 18px 20px; background: var(--accent-light); border: 1px solid rgba(12,30,20,0.2); border-radius: var(--radius-sm); margin-top: 20px; }\n    .sw-summary-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; font-size: 16px; color: var(--ink); }\n    .sw-summary-row.sw-summary-discount { color: #8A1F1F; }\n    .sw-summary-row.sw-summary-total { border-top: 1px solid rgba(12,30,20,0.25); margin-top: 8px; padding-top: 12px; font-weight: 700; font-size: 22px; color: var(--accent); }\n    .sw-summary-person-label { font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-muted); margin: 14px 0 2px; }\n    .sw-summary-person-label:first-child { margin-top: 0; }\n    .sw-btn-row { display: flex; gap: 10px; margin-top: 24px; flex-wrap: wrap; }\n    .sw-btn { flex: 1; min-width: 140px; padding: 15px 17px; border-radius: var(--radius-sm); font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 700; cursor: pointer; transition: all 0.2s; border: 0; }\n    .sw-btn-primary { background: var(--accent); color: #fff; }\n    .sw-btn-primary:hover { background: #27703F; transform: translateY(-1px); }\n    .sw-btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }\n    .sw-btn-secondary { background: transparent; color: var(--ink); border: 1px solid var(--border); }\n    .sw-btn-secondary:hover { background: var(--bg); }\n    .sw-error { display: none; margin-top: 15px; padding: 13px 15px; border-radius: var(--radius-sm); background: #FFF3F3; border: 1px solid rgba(220,30,30,0.2); color: #8A1F1F; font-size: 18px; font-weight: 400; line-height: 1.5; white-space: pre-wrap; }\n    .wiz-spinner { display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.4); border-top-color: #fff; border-radius: 50%; animation: wiz-spin 0.7s linear infinite; vertical-align: middle; margin-right: 8px; }\n    .sw-country-search-wrap { position: relative; margin-bottom: 10px; }\n    .sw-country-search-icon { position: absolute; left: 18px; top: 50%; transform: translateY(-50%); color: var(--ink-muted); pointer-events: none; opacity: 0.5; }\n    .sw-country-search {\n      width: 100%; padding: 13px 15px 13px 54px;\n      border: 1px solid var(--border); border-radius: var(--radius-sm);\n      background: var(--bg); font-family: 'Tinos', Georgia, serif;\n      font-size: 18px; font-weight: 400; color: var(--ink);\n      transition: border-color 0.2s; box-sizing: border-box;\n    }\n    .sw-country-search:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(12,30,20,0.1); }\n    .sw-country-list { max-height: 240px; overflow-y: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }\n    .sw-country-item { padding: 11px 15px; cursor: pointer; font-family: 'Tinos', Georgia, serif; font-size: 18px; font-weight: 400; display: flex; justify-content: space-between; align-items: center; transition: background 0.15s; border-bottom: 1px solid var(--border); }\n    .sw-country-item:last-child { border-bottom: 0; }\n    .sw-country-item:hover { background: var(--accent-light); }\n    .sw-country-item.selected { background: var(--accent-light); font-weight: 700; }\n    .sw-country-item-cat { font-size: 12px; color: var(--ink-muted); background: var(--border); padding: 2px 8px; border-radius: 999px; }\n    .sw-country-empty { padding: 15px; font-size: 18px; color: var(--ink-muted); text-align: center; }\n    .sw-step { display: none; }\n    .sw-step.active { display: block; }\n  `;\n  shadow.appendChild(styleEl);\n  const wrapper = document.createElement(\"div\");\n  wrapper.innerHTML = `\n    <div class=\"sw-root\">\n      <div class=\"sw-card\">\n        <div class=\"sw-progress\">\n          <div class=\"sw-progress-step\" id=\"sw-prog-1\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-2\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-3\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-4\"><\/div>\n          <div class=\"sw-progress-step\" id=\"sw-prog-5\"><\/div>\n        <\/div>\n        <!-- STEP 1 -->\n        <div class=\"sw-step active\" id=\"sw-step-welcome\">\n          <div class=\"sw-step-label\">\u0421\u0442\u044a\u043f\u043a\u0430 1 \u043e\u0442 5<\/div>\n          <h2 class=\"sw-heading\">\u0414\u043e\u0431\u0440\u0435 \u0434\u043e\u0448\u044a\u043b\/\u0414\u043e\u0431\u0440\u0435 \u0434\u043e\u0448\u043b\u0430<\/h2>\n          <p class=\"sw-subtext\">\u0421 \u043d\u044f\u043a\u043e\u043b\u043a\u043e \u0441\u0442\u044a\u043f\u043a\u0438 \u0438\u0437\u0431\u0438\u0440\u0430\u0448 \u0434\u044a\u0440\u0436\u0430\u0432\u0430, \u0435\u0437\u0438\u043a, \u0432\u0438\u0434 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0438 \u0432\u043d\u043e\u0441\u043a\u0430 \u2013 \u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u0438\u0432\u0430\u0448 \u043d\u0430\u043f\u0440\u0430\u0432\u043e \u043a\u044a\u043c \u043f\u043b\u0430\u0449\u0430\u043d\u0435\u0442\u043e.<\/p>\n          <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-welcome-next\" style=\"width:100%;\">\u0426\u0435\u043d\u0438 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f<\/button>\n        <\/div>\n        <!-- STEP 2 -->\n        <div class=\"sw-step\" id=\"sw-step-country\">\n          <div class=\"sw-step-label\">\u0421\u0442\u044a\u043f\u043a\u0430 2 \u043e\u0442 5<\/div>\n          <h2 class=\"sw-heading\">\u041a\u044a\u0434\u0435 \u0436\u0438\u0432\u0435\u0435\u0448?<\/h2>\n          <label class=\"sw-label\">\u0414\u044a\u0440\u0436\u0430\u0432\u0430<\/label>\n          <div class=\"sw-country-search-wrap\">\n            <svg class=\"sw-country-search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.35-4.35\"\/><\/svg>\n            <input type=\"text\" class=\"sw-country-search\" id=\"sw-country-search\" placeholder=\"\u0422\u044a\u0440\u0441\u0435\u043d\u0435 \u043d\u0430 \u0434\u044a\u0440\u0436\u0430\u0432\u0430\u2026\" autocomplete=\"off\">\n          <\/div>\n          <div class=\"sw-country-list\" id=\"sw-country-list\"><\/div>\n          <input type=\"hidden\" id=\"sw-country\">\n          <div class=\"sw-infobox\" id=\"sw-catInfo\">\n            <div class=\"sw-infobox-title\">\u0426\u0435\u043d\u043e\u0432\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f<\/div>\n            <div id=\"sw-catText\">\u041c\u043e\u043b\u044f, \u043f\u044a\u0440\u0432\u043e \u0438\u0437\u0431\u0435\u0440\u0438 \u0434\u044a\u0440\u0436\u0430\u0432\u0430.<\/div>\n          <\/div>\n          <div class=\"sw-redirect\" id=\"sw-redirect-russia\">\n            <strong>\u0417\u0430 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u0446\u0438 \u043e\u0442 \u0420\u0443\u0441\u0438\u044f \u0438\u043c\u0430 \u043e\u0442\u0434\u0435\u043b\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0437\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f.<\/strong>\n            \u041d\u0430\u0448\u0430\u0442\u0430 \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u043d\u0430 \u0432 \u0420\u0443\u0441\u0438\u044f. \u041c\u043e\u043b\u044f, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u0439 \u0441\u0435 \u0442\u0430\u043c:<br><br>\n            <a href=\"https:\/\/spiritual-activity.org\/ru\/anmeldung-basic-exercises\/\">\u041a\u044a\u043c \u0440\u0443\u0441\u043a\u0430\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f<\/a>\n          <\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-country-back\">\u041d\u0430\u0437\u0430\u0434<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-country-next\" disabled>\u041d\u0430\u043f\u0440\u0435\u0434<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 3 -->\n        <div class=\"sw-step\" id=\"sw-step-langform\">\n          <div class=\"sw-step-label\">\u0421\u0442\u044a\u043f\u043a\u0430 3 \u043e\u0442 5<\/div>\n          <h2 class=\"sw-heading\">\u0415\u0437\u0438\u043a \u0438 \u0432\u0438\u0434 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f<\/h2>\n          <label class=\"sw-label\" for=\"sw-commLang\">\u041d\u0430 \u043a\u0430\u043a\u044a\u0432 \u0435\u0437\u0438\u043a \u0443\u0447\u0430\u0441\u0442\u0432\u0430\u0448?<\/label>\n          <select class=\"sw-select\" id=\"sw-commLang\">\n            <option value=\"\" selected disabled>\u041c\u043e\u043b\u044f, \u0438\u0437\u0431\u0435\u0440\u0438\u2026<\/option>\n            <option value=\"Deutsch\">\u041d\u0435\u043c\u0441\u043a\u0438<\/option>\n            <option value=\"Englisch\">\u0410\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438<\/option>\n            <option value=\"Spanisch\">\u0418\u0441\u043f\u0430\u043d\u0441\u043a\u0438<\/option>\n            <option value=\"Franz\u00f6sisch\">\u0424\u0440\u0435\u043d\u0441\u043a\u0438<\/option>\n            <option value=\"Italienisch\">\u0418\u0442\u0430\u043b\u0438\u0430\u043d\u0441\u043a\u0438<\/option>\n            <option value=\"Portugiesisch\">\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0441\u043a\u0438<\/option>\n            <option value=\"Arabisch\">\u0410\u0440\u0430\u0431\u0441\u043a\u0438<\/option>\n            <option value=\"Hebr\u00e4isch\">\u0418\u0432\u0440\u0438\u0442<\/option>\n            <option value=\"Farsi\">\u0424\u0430\u0440\u0441\u0438<\/option>\n            <option value=\"Georgisch\">\u0413\u0440\u0443\u0437\u0438\u043d\u0441\u043a\u0438<\/option>\n            <option value=\"Ukrainisch\">\u0423\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438<\/option>\n            <option value=\"Niederl\u00e4ndisch\">\u041d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0438<\/option>\n            <option value=\"T\u00fcrkisch\">\u0422\u0443\u0440\u0441\u043a\u0438<\/option>\n            <option value=\"Bulgarisch\">\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438<\/option>\n            <option value=\"Russisch\">\u0420\u0443\u0441\u043a\u0438<\/option>\n            <option value=\"Chinesisch\">\u041a\u0438\u0442\u0430\u0439\u0441\u043a\u0438<\/option>\n            <option value=\"Japanisch\">\u042f\u043f\u043e\u043d\u0441\u043a\u0438<\/option>\n            <option value=\"Koreanisch\">\u041a\u043e\u0440\u0435\u0439\u0441\u043a\u0438<\/option>\n          <\/select>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note\" style=\"display:none; margin-top:14px;\">\n            <div class=\"sw-infobox-title\">\u0414\u0418\u0413\u0418\u0422\u0410\u041b\u041d\u041e \u0423\u0427\u0410\u0421\u0422\u0418\u0415 \u00b7 \u221235\u20ac<\/div>\n            <div id=\"sw-apponly-note-text\">\u0422\u0438 \u0443\u0447\u0430\u0441\u0442\u0432\u0430\u0448 \u0434\u0438\u0433\u0438\u0442\u0430\u043b\u043d\u043e. \u041e\u0442\u0441\u0442\u044a\u043f\u043a\u0430\u0442\u0430 \u0441\u0435 \u043d\u0430\u0447\u0438\u0441\u043b\u044f\u0432\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u0442\u043e.<\/div>\n          <\/div>\n          <label class=\"sw-label\" style=\"margin-top:26px;\">\u041a\u0430\u043a \u0438\u0441\u043a\u0430\u0448 \u0434\u0430 \u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u0448?<\/label>\n          <div class=\"sw-choice-row\" id=\"sw-form-choices\">\n            <div class=\"sw-choice-card active\" data-form=\"einzeln\">\u0418\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u043d\u043e<\/div>\n            <div class=\"sw-choice-card\" data-form=\"paar\">\u041f\u043e \u0434\u0432\u043e\u0439\u043a\u0438<br><span style=\"font-size:13px; font-weight:400;\">(\u0435\u0434\u043d\u043e \u0434\u043e\u043c\u0430\u043a\u0438\u043d\u0441\u0442\u0432\u043e)<\/span><\/div>\n            <div class=\"sw-choice-card\" data-form=\"gruppe\">\u0413\u0440\u0443\u043f\u0430<br><span style=\"font-size:13px; font-weight:400;\">(\u043e\u0442 4 \u0434\u0443\u0448\u0438 \u043d\u0430\u0433\u043e\u0440\u0435)<\/span><\/div>\n          <\/div>\n          <div class=\"sw-infobox\" id=\"sw-gruppe-note\" style=\"display:none; margin-top:18px;\">\n            <div class=\"sw-infobox-title\">\u0413\u0440\u0443\u043f\u043e\u0432\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f<\/div>\n            <div>\u0420\u0430\u0434\u0432\u0430\u043c\u0435 \u0441\u0435 \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u0442\u0438. \u041d\u0430 \u0441\u043b\u0435\u0434\u0432\u0430\u0449\u0430\u0442\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043c\u043e\u0436\u0435\u0448 \u0434\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0448 \u0433\u0440\u0443\u043f\u043e\u0432\u0430\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f. \u041c\u043e\u043b\u044f, \u043e\u0431\u044a\u0440\u043d\u0438 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u0433\u0440\u0443\u043f\u043e\u0432\u0430\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u043d\u0430 \u0441\u0430\u043c\u043e \u043d\u0430 \u043d\u0435\u043c\u0441\u043a\u0438 \u0438 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438.<\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-langform\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-langform-back\">\u041d\u0430\u0437\u0430\u0434<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-langform-next\" disabled>\u041d\u0430\u043f\u0440\u0435\u0434<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-gruppe-redirect\" style=\"display:none;\">\u041a\u044a\u043c \u0433\u0440\u0443\u043f\u043e\u0432\u0430\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4A -->\n        <div class=\"sw-step\" id=\"sw-step-details-solo\">\n          <div class=\"sw-step-label\">\u0421\u0442\u044a\u043f\u043a\u0430 4 \u043e\u0442 5<\/div>\n          <h2 class=\"sw-heading\">\u041d\u044f\u043a\u043e\u043b\u043a\u043e \u0434\u0430\u043d\u043d\u0438 \u0437\u0430 \u0442\u0435\u0431<\/h2>\n          <p class=\"sw-subtext\">\u041e\u0442\u043d\u0430\u0441\u044f \u043b\u0438 \u0441\u0435 \u043d\u0435\u0449\u043e \u043e\u0442 \u0438\u0437\u0431\u0440\u043e\u0435\u043d\u043e\u0442\u043e \u0437\u0430 \u0442\u0435\u0431? \u0422\u043e\u0432\u0430 \u043d\u0438 \u043f\u043e\u043c\u0430\u0433\u0430 \u0434\u0430 \u0442\u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0430\u0442\u0430 \u0432\u043d\u043e\u0441\u043a\u0430.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u0414\u0418\u0413\u0418\u0422\u0410\u041b\u041d\u041e \u0423\u0427\u0410\u0421\u0422\u0418\u0415 \u00b7 \u221235\u20ac<\/div>\n            <div>\u0422\u0438 \u0443\u0447\u0430\u0441\u0442\u0432\u0430\u0448 \u0434\u0438\u0433\u0438\u0442\u0430\u043b\u043d\u043e. \u041e\u0442\u0441\u0442\u044a\u043f\u043a\u0430\u0442\u0430 \u0441\u0435 \u043d\u0430\u0447\u0438\u0441\u043b\u044f\u0432\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u0442\u043e.<\/div>\n          <\/div>\n          <label class=\"sw-label\">\u041c\u043e\u043b\u044f, \u0438\u0437\u0431\u0435\u0440\u0438<\/label>\n          <select class=\"sw-select\" id=\"sw-solo-status\">\n            <option value=\"\" disabled selected>\u041c\u043e\u043b\u044f, \u0438\u0437\u0431\u0435\u0440\u0438\u2026<\/option>\n            <option value=\"normal\">\u041e\u0431\u0438\u0447\u0430\u0439\u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f<\/option>\n            <option value=\"schueler\">\u0423\u0447\u0435\u043d\u0438\u0446\u0438 (\u221250%)<\/option>\n            <option value=\"student\">\u0412 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435\/\u0441\u043b\u0435\u0434\u0432\u0430\u043d\u0435 (\u221225%)<\/option>\n            <option value=\"wiederholer\">\u041f\u043e\u0432\u0442\u0430\u0440\u044f\u043c \u043a\u0443\u0440\u0441\u0430 \u0441 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f \u0437\u0430 \u0434\u0443\u0448\u0430\u0442\u0430 (\u0431\u0435\u0437 \u043d\u043e\u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 \u043a\u0430\u0440\u0442\u0438 \u2212 30%)<\/option>\n          <\/select>\n          <div class=\"sw-error\" id=\"sw-error-details-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-solo-back\">\u041d\u0430\u0437\u0430\u0434<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-solo-next\" disabled>\u041d\u0430\u043f\u0440\u0435\u0434<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 4B -->\n        <div class=\"sw-step\" id=\"sw-step-details-paar\">\n          <div class=\"sw-step-label\">\u0421\u0442\u044a\u043f\u043a\u0430 4 \u043e\u0442 5<\/div>\n          <h2 class=\"sw-heading\">\u0414\u0430\u043d\u043d\u0438 \u0437\u0430 \u0434\u0432\u0430\u043c\u0430 \u0432\u0438<\/h2>\n          <p class=\"sw-subtext\">\u041c\u043e\u043b\u044f, \u0432\u044a\u0432\u0435\u0434\u0438 \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u0437\u0430 \u0434\u0432\u0435\u0442\u0435 \u043b\u0438\u0446\u0430. \u0412\u0442\u043e\u0440\u043e\u0442\u043e \u043b\u0438\u0446\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 50% \u043e\u0442\u0441\u0442\u044a\u043f\u043a\u0430.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-paar-step4\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u0414\u0418\u0413\u0418\u0422\u0410\u041b\u041d\u041e \u0423\u0427\u0410\u0421\u0422\u0418\u0415 \u00b7 \u221235\u20ac<\/div>\n            <div>\u0422\u0438 \u0443\u0447\u0430\u0441\u0442\u0432\u0430\u0448 \u0434\u0438\u0433\u0438\u0442\u0430\u043b\u043d\u043e. \u041e\u0442\u0441\u0442\u044a\u043f\u043a\u0430\u0442\u0430 \u0441\u0435 \u043d\u0430\u0447\u0438\u0441\u043b\u044f\u0432\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u0442\u043e.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\u041b\u0438\u0446\u0435 1<\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\u0418\u043c\u0435<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-vorname\"><\/div>\n              <div><label class=\"sw-label\">\u0424\u0430\u043c\u0438\u043b\u0438\u044f<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p1-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\u0418\u043c\u0435\u0439\u043b<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p1-email\">\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\">\u041b\u0438\u0446\u0435 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-field-grid\">\n              <div><label class=\"sw-label\">\u0418\u043c\u0435<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-vorname\"><\/div>\n              <div><label class=\"sw-label\">\u0424\u0430\u043c\u0438\u043b\u0438\u044f<\/label><input class=\"sw-text-input\" type=\"text\" id=\"sw-p2-nachname\"><\/div>\n            <\/div>\n            <label class=\"sw-label\">\u0418\u043c\u0435\u0439\u043b<\/label>\n            <input class=\"sw-text-input\" type=\"email\" id=\"sw-p2-email\">\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-details-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-details-paar-back\">\u041d\u0430\u0437\u0430\u0434<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-details-paar-next\" disabled>\u041d\u0430\u043f\u0440\u0435\u0434<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5A -->\n        <div class=\"sw-step\" id=\"sw-step-amount-solo\">\n          <div class=\"sw-step-label\">\u0421\u0442\u044a\u043f\u043a\u0430 5 \u043e\u0442 5<\/div>\n          <h2 class=\"sw-heading\">\u0418\u0437\u0431\u043e\u0440 \u043d\u0430 \u0432\u043d\u043e\u0441\u043a\u0430<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-solo\">\u0422\u0443\u043a \u043c\u043e\u0436\u0435\u0448 \u0434\u0430 \u0438\u0437\u0431\u0435\u0440\u0435\u0448 \u0432\u043d\u043e\u0441\u043a\u0430\u0442\u0430, \u043a\u043e\u044f\u0442\u043e \u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0430 \u0437\u0430 \u0442\u0435\u0431.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-solo\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u0414\u0418\u0413\u0418\u0422\u0410\u041b\u041d\u041e \u0423\u0427\u0410\u0421\u0422\u0418\u0415 \u00b7 \u221235\u20ac<\/div>\n            <div>\u0422\u0438 \u0443\u0447\u0430\u0441\u0442\u0432\u0430\u0448 \u0434\u0438\u0433\u0438\u0442\u0430\u043b\u043d\u043e. \u041e\u0442\u0441\u0442\u044a\u043f\u043a\u0430\u0442\u0430 \u0441\u0435 \u043d\u0430\u0447\u0438\u0441\u043b\u044f\u0432\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u0442\u043e.<\/div>\n          <\/div>\n          <div class=\"sw-range-header\">\n            <div class=\"sw-range-header-label\">\u0422\u0432\u043e\u044f\u0442\u0430 \u0441\u0443\u043c\u0430<\/div>\n            <div class=\"sw-amount-display\">\n              <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-solo\" value=\"360\">\n              <span>\u20ac<\/span>\n            <\/div>\n          <\/div>\n          <div class=\"sw-range-wrap\">\n            <div class=\"sw-markers\" id=\"sw-markers-solo\"><\/div>\n            <input type=\"range\" class=\"sw-range\" id=\"sw-amount-solo\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n            <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-solo\"><\/div>\n          <\/div>\n          <p style=\"margin-top:18px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \u0410\u043a\u043e \u0438\u043c\u0430\u0448 \u043d\u0443\u0436\u0434\u0430 \u043e\u0442 \u0434\u043e\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u043e \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e \u043d\u0430\u043c\u0430\u043b\u0435\u043d\u0438\u0435, \u043f\u0438\u0448\u0438 \u043d\u0438 \u043d\u0430:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-solo\">\n            <div class=\"sw-summary-row\"><span>\u0418\u0437\u0431\u0440\u0430\u043d\u0430 \u0432\u043d\u043e\u0441\u043a\u0430<\/span><span id=\"sw-solo-chosen\">360\u20ac<\/span><\/div>\n            <div id=\"sw-solo-discounts\"><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-solo\" style=\"display:none;\"><span>\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\u041e\u0431\u0449\u043e<\/span><span><span id=\"sw-solo-total\">360<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-solo\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-solo-back\">\u041d\u0430\u0437\u0430\u0434<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-solo\">\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f<\/button>\n          <\/div>\n        <\/div>\n        <!-- STEP 5B -->\n        <div class=\"sw-step\" id=\"sw-step-amount-paar\">\n          <div class=\"sw-step-label\">\u0421\u0442\u044a\u043f\u043a\u0430 5 \u043e\u0442 5<\/div>\n          <h2 class=\"sw-heading\">\u0418\u0437\u0431\u043e\u0440 \u043d\u0430 \u0432\u043d\u043e\u0441\u043a\u0438<\/h2>\n          <p class=\"sw-subtext\" id=\"sw-rangeHint-paar\">\u0412\u0441\u0435\u043a\u0438 \u0438\u0437\u0431\u0438\u0440\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u0430\u0442\u0430 \u0441\u0438 \u0432\u043d\u043e\u0441\u043a\u0430. \u041b\u0438\u0446\u0435 2 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 50% \u043e\u0442\u0441\u0442\u044a\u043f\u043a\u0430.<\/p>\n          <div class=\"sw-infobox\" id=\"sw-apponly-note-step5-paar\" style=\"display:none; margin-bottom:20px;\">\n            <div class=\"sw-infobox-title\">\u0414\u0418\u0413\u0418\u0422\u0410\u041b\u041d\u041e \u0423\u0427\u0410\u0421\u0422\u0418\u0415 \u00b7 \u221235\u20ac<\/div>\n            <div>\u0422\u0438 \u0443\u0447\u0430\u0441\u0442\u0432\u0430\u0448 \u0434\u0438\u0433\u0438\u0442\u0430\u043b\u043d\u043e. \u041e\u0442\u0441\u0442\u044a\u043f\u043a\u0430\u0442\u0430 \u0441\u0435 \u043d\u0430\u0447\u0438\u0441\u043b\u044f\u0432\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u0442\u043e.<\/div>\n          <\/div>\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p1-title\">\u041b\u0438\u0446\u0435 1<\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\u0412\u043d\u043e\u0441\u043a\u0430<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p1\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p1\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p1\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p1\"><\/div>\n            <\/div>\n          <\/div>\n          <hr class=\"sw-divider\">\n          <div class=\"sw-person-block\">\n            <div class=\"sw-person-title\" id=\"sw-amount-p2-title\">\u041b\u0438\u0446\u0435 2 <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">(\u221250%)<\/span><\/div>\n            <div class=\"sw-range-header\">\n              <div class=\"sw-range-header-label\">\u0412\u043d\u043e\u0441\u043a\u0430<\/div>\n              <div class=\"sw-amount-display\">\n                <input type=\"number\" class=\"sw-amount-input\" id=\"sw-amountInput-p2\" value=\"360\">\n                <span>\u20ac<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"sw-range-wrap\">\n              <div class=\"sw-markers\" id=\"sw-markers-p2\"><\/div>\n              <input type=\"range\" class=\"sw-range\" id=\"sw-amount-p2\" min=\"0\" max=\"100\" step=\"0.5\" value=\"50\">\n              <div class=\"sw-markers-mobile\" id=\"sw-markers-mobile-p2\"><\/div>\n            <\/div>\n          <\/div>\n          <p style=\"margin-top:8px; font-size:16px; color:#27703F; line-height:1.5; font-family:'Tinos',Georgia,serif;\">\n            \u0410\u043a\u043e \u0438\u043c\u0430\u0448 \u043d\u0443\u0436\u0434\u0430 \u043e\u0442 \u0434\u043e\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u043e \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e \u043d\u0430\u043c\u0430\u043b\u0435\u043d\u0438\u0435, \u043f\u0438\u0448\u0438 \u043d\u0438 \u043d\u0430:\n            <a href=\"mailto:info@basic-exercises.com\" style=\"color:#27703F; text-decoration:underline;\">info@basic-exercises.com<\/a>\n          <\/p>\n          <div class=\"sw-summary-box\" id=\"sw-summary-paar\">\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p1-label\">\u041b\u0438\u0446\u0435 1<\/div>\n            <div class=\"sw-summary-row\"><span>\u0418\u0437\u0431\u0440\u0430\u043d\u0430 \u0432\u043d\u043e\u0441\u043a\u0430<\/span><span id=\"sw-p1-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p1-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\u041c\u0435\u0436\u0434\u0438\u043d\u043d\u0430 \u0441\u0443\u043c\u0430<\/span><span id=\"sw-p1-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-person-label\" id=\"sw-summary-p2-label\">\u041b\u0438\u0446\u0435 2<\/div>\n            <div class=\"sw-summary-row\"><span>\u0418\u0437\u0431\u0440\u0430\u043d\u0430 \u0432\u043d\u043e\u0441\u043a\u0430<\/span><span id=\"sw-p2-chosen\">0\u20ac<\/span><\/div>\n            <div id=\"sw-p2-discounts\"><\/div>\n            <div class=\"sw-summary-row\"><span>\u041c\u0435\u0436\u0434\u0438\u043d\u043d\u0430 \u0441\u0443\u043c\u0430<\/span><span id=\"sw-p2-subtotal\">0\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row\" id=\"sw-shipping-line-paar\" style=\"display:none;\"><span>\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430<\/span><span>15\u20ac<\/span><\/div>\n            <div class=\"sw-summary-row sw-summary-total\"><span>\u041e\u0431\u0449\u043e<\/span><span><span id=\"sw-paar-total\">0<\/span>\u20ac<\/span><\/div>\n          <\/div>\n          <div class=\"sw-error\" id=\"sw-error-amount-paar\"><\/div>\n          <div class=\"sw-btn-row\">\n            <button class=\"sw-btn sw-btn-secondary\" id=\"sw-btn-amount-paar-back\">\u041d\u0430\u0437\u0430\u0434<\/button>\n            <button class=\"sw-btn sw-btn-primary\" id=\"sw-btn-checkout-paar\">\u041a\u044a\u043c \u043f\u043b\u0430\u0449\u0430\u043d\u0435\u0442\u043e<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  `;\n  shadow.appendChild(wrapper);\n  const $ = (id) => shadow.getElementById(id);\n  const COUNTRY_TO_CAT = {};\n  Object.keys(COUNTRIES).forEach(cat => COUNTRIES[cat].forEach(code => COUNTRY_TO_CAT[code] = cat));\n  function getCountryName(code) {\n    if (COUNTRY_NAMES[code]) return COUNTRY_NAMES[code];\n    try { return new Intl.DisplayNames([\"bg\"], { type: \"region\" }).of(code) || code; }\n    catch { return code; }\n  }\n  function getCountryAliases(code) {\n    const list = [];\n    \/\/ Intl-Name als Fallback, falls er vom festen CLDR-Namen abweicht\n    if (COUNTRY_NAMES[code]) {\n      try {\n        const intlName = new Intl.DisplayNames([\"bg\"], { type: \"region\" }).of(code);\n        if (intlName && intlName.toLowerCase() !== COUNTRY_NAMES[code].toLowerCase()) {\n          list.push(intlName.toLowerCase());\n        }\n      } catch {}\n    }\n    \/\/ Englischer Name als lateinische Fallback-Schreibweise fuer alle Laender\n    try {\n      const enName = new Intl.DisplayNames([\"en\"], { type: \"region\" }).of(code);\n      if (enName) list.push(enName.toLowerCase());\n    } catch {}\n    (COUNTRY_SEARCH_ALIASES[code] || []).forEach(a => list.push(a.toLowerCase()));\n    return list;\n  }\n  function getAllCountriesSorted() {\n    const all = [];\n    [\"cat1\",\"cat2\",\"cat3\",\"cat4\"].forEach(cat => {\n      COUNTRIES[cat]\n        .map(code => ({ code, name: getCountryName(code), cat, aliases: getCountryAliases(code) }))\n        .sort((a, b) => a.name.localeCompare(b.name, \"bg\"))\n        .forEach(c => all.push(c));\n    });\n    return all;\n  }\n  function emptyPerson() {\n    return { vorname: \"\", nachname: \"\", email: \"\", wiederholer: false, statusType: \"\", amount: 0 };\n  }\n  const state = {\n    country: \"\", category: \"cat1\",\n    commLang: \"\", form: \"einzeln\",\n    persons: { solo: emptyPerson(), p1: emptyPerson(), p2: emptyPerson() }\n  };\n  function getPerson(key) { return state.persons[key] || state.persons.solo; }\n  function isAppOnly() {\n    const { category: cat, commLang: lang, country } = state;\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[country];\n      \/\/ Ausnahme (z.B. China) gilt nur, wenn auch die passende Sprache gewaehlt ist \u2013\n      \/\/ sonst kann kein physisches Kartenset verschickt werden.\n      if (!exceptionLang || lang !== exceptionLang) return true;\n    }\n    if (APP_ONLY_LANGS.has(lang)) return true;\n    if (lang === \"Russisch\" && country && country !== \"RU\") return true;\n    return false;\n  }\n\n  function isWiederholer(person) {\n    return !!person && (person.wiederholer || person.statusType === \"wiederholer\");\n  }\n\n  \/\/ Geht ueberhaupt ein Kartenset raus? Nur wenn die Teilnahme nicht rein digital\n  \/\/ ist UND mindestens eine Person ein neues Set braucht - Wiederholer bekommen\n  \/\/ keins. Steuert sowohl die Versandzeile in der Zusammenfassung als auch die\n  \/\/ Wahl des Ecwid-Produkts, damit beide nicht auseinanderlaufen koennen.\n  function hasPhysicalShipment(isPaar) {\n    if (isAppOnly()) return false;\n    return isPaar\n      ? !(isWiederholer(state.persons.p1) && isWiederholer(state.persons.p2))\n      : !isWiederholer(state.persons.solo);\n  }\n\n  \/\/ Ecwid haengt den Versand am Produkt fest, nicht am Warenkorb. Ohne physischen\n  \/\/ Versand muss deshalb das versandfreie Digital-Produkt in den Warenkorb, sonst\n  \/\/ schlaegt der Shop trotzdem Versandkosten auf.\n  function getParticipationProductId(isPaar) {\n    return hasPhysicalShipment(isPaar) ? PRODUCTS[state.category] : PRODUCTS_APPONLY[state.category];\n  }\n  function updateAppOnlyUI() {\n    const appOnly = state.commLang ? isAppOnly() : false;\n    let reason = \"\";\n    if (appOnly) {\n      const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[state.country];\n      if ((state.category === \"cat3\" || state.category === \"cat4\") && exceptionLang) {\n        reason = TXT.reasonException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang);\n      } else if (state.category === \"cat3\" || state.category === \"cat4\") {\n        reason = TXT.reasonRegion;\n      } else if (state.commLang === \"Russisch\") {\n        reason = TXT.reasonRussian;\n      } else {\n        reason = TXT.reasonLanguage;\n      }\n    }\n    const noteIds = [\"sw-apponly-note\",\"sw-apponly-note-step4\",\"sw-apponly-note-paar-step4\",\"sw-apponly-note-step5-solo\",\"sw-apponly-note-step5-paar\"];\n    noteIds.forEach(id => {\n      const el = $(id);\n      if (!el) return;\n      el.style.display = appOnly ? \"block\" : \"none\";\n      const textDiv = el.querySelector(\"div:not(.sw-infobox-title)\");\n      if (textDiv && reason) textDiv.textContent = reason;\n    });\n  }\n  const STEP_CONTAINER = {\n    1: () => \"sw-step-welcome\",\n    2: () => \"sw-step-country\",\n    3: () => \"sw-step-langform\",\n    4: () => state.form === \"paar\" ? \"sw-step-details-paar\" : \"sw-step-details-solo\",\n    5: () => state.form === \"paar\" ? \"sw-step-amount-paar\" : \"sw-step-amount-solo\"\n  };\n  function showStep(n) {\n    shadow.querySelectorAll(\".sw-step\").forEach(el => el.classList.remove(\"active\"));\n    $(STEP_CONTAINER[n]()).classList.add(\"active\");\n    for (let i = 1; i <= 5; i++) {\n      const prog = $(\"sw-prog-\" + i);\n      if (!prog) continue;\n      if (i < n) prog.className = \"sw-progress-step done\";\n      else if (i === n) prog.className = \"sw-progress-step active\";\n      else prog.className = \"sw-progress-step\";\n    }\n    if (n === 5) {\n      const sliderIds = state.form === \"paar\" ? [\"sw-amount-p1\",\"sw-amount-p2\"] : [\"sw-amount-solo\"];\n      sliderIds.forEach(sid => { const el = $(sid); if (el) el.classList.add(\"sw-pulse\"); });\n      refreshSummary();\n    }\n  }\n  function setNextEnabled(id, enabled) {\n    const b = $(id);\n    if (!b) return;\n    b.disabled = !enabled;\n    b.style.opacity = enabled ? \"1\" : \".4\";\n    b.style.cursor  = enabled ? \"pointer\" : \"not-allowed\";\n  }\n  function showErrorIn(id, msg) { const el=$(id); el.style.display=\"block\"; el.textContent=msg; }\n  function clearErrorIn(id)     { const el=$(id); el.style.display=\"none\";  el.textContent=\"\"; }\n  function setCheckoutLoading(btnId, loading) {\n    const btn = $(btnId);\n    \/\/ Nach dem Danke-Bildschirm existiert der Button nicht mehr \u2013 dann nichts tun.\n    if (!btn) return;\n    const overlay = document.getElementById(OVERLAY_ID);\n    if (!btn.dataset.defaultLabel) btn.dataset.defaultLabel = btn.textContent;\n    if (loading) {\n      btn.disabled = true;\n      btn.innerHTML = '<span class=\"wiz-spinner\"><\/span> ' + TXT.preparing;\n      btn.style.opacity = \".8\";\n      if (overlay) overlay.style.display = \"flex\";\n    } else {\n      btn.disabled = false;\n      btn.textContent = btn.dataset.defaultLabel;\n      btn.style.opacity = \"1\";\n      if (overlay) overlay.style.display = \"none\";\n    }\n  }\n  function showThankYou() {\n    const card = shadow.querySelector(\".sw-card\");\n    if (!card) return;\n    card.innerHTML = `\n      <div style=\"text-align:center; padding:20px 0;\">\n        <div style=\"font-size:56px; margin-bottom:16px; color:#27703F;\">\u2713<\/div>\n        <h2 style=\"font-family:'Tinos',Georgia,serif; font-size:26px; font-weight:500; margin:0 0 12px; color:#0C1E14;\">${TXT.thanksTitle}<\/h2>\n        <p style=\"font-family:'Tinos',Georgia,serif; font-size:18px; color:#27703F; line-height:1.6; margin:0 0 24px;\">${TXT.thanksLine1}${TXT.thanksLine2 ? \"<br>\" + TXT.thanksLine2 : \"\"}<\/p>\n        <div style=\"display:flex; justify-content:center;\">\n          <div style=\"width:36px; height:36px; border:4px solid #B8DEC4; border-top-color:#0C1E14; border-radius:50%; animation:wiz-spin 0.8s linear infinite;\"><\/div>\n        <\/div>\n      <\/div>`;\n  }\n  function getAnchors(cat) {\n    const r = RANGES[cat], o = ORIENTIERUNG[cat];\n    return [[0,r.min],[25,o.reduced],[50,o.base],[75,o.support],[100,r.max]];\n  }\n  function normToEuro(norm, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      if (norm <= a[i+1][0]) {\n        const t = (norm - a[i][0]) \/ (a[i+1][0] - a[i][0]);\n        return Math.round(a[i][1] + t * (a[i+1][1] - a[i][1]));\n      }\n    }\n    return a[a.length-1][1];\n  }\n  function euroToNorm(euro, cat) {\n    const a = getAnchors(cat);\n    for (let i = 0; i < a.length - 1; i++) {\n      const lo = a[i][1], hi = a[i+1][1];\n      if (euro <= hi) {\n        if (hi === lo) return a[i+1][0];\n        return a[i][0] + (euro - lo) \/ (hi - lo) * (a[i+1][0] - a[i][0]);\n      }\n    }\n    return 100;\n  }\n  function getMarkerDefs(cat) {\n    const o = ORIENTIERUNG[cat];\n    return [\n      { value: o.reduced, label: TXT.markerReduced, normPct: 25 },\n      { value: o.base,    label: TXT.markerBase,    normPct: 50 },\n      { value: o.support, label: TXT.markerSupport, normPct: 75 }\n    ];\n  }\n  function renderMarkers(personKey) {\n    const cat = state.category;\n    const person = getPerson(personKey);\n    const markers = getMarkerDefs(cat);\n    const container = $(`sw-markers-${personKey}`);\n    container.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker\" + (person.amount === m.value ? \" active\" : \"\");\n      div.style.left = m.normPct + \"%\";\n      div.innerHTML = `<div class=\"sw-marker-tick\"><\/div><div class=\"sw-marker-amount\">${m.value}\u20ac<\/div><div class=\"sw-marker-label\">${m.label}<\/div>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      container.appendChild(div);\n    });\n    const mobileContainer = $(`sw-markers-mobile-${personKey}`);\n    mobileContainer.innerHTML = \"\";\n    markers.forEach(m => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-marker-mobile\" + (person.amount === m.value ? \" active\" : \"\");\n      div.innerHTML = `<span class=\"sw-marker-mobile-label\">${m.label}<\/span><span class=\"sw-marker-mobile-amount\">${m.value}\u20ac<\/span>`;\n      div.addEventListener(\"click\", () => selectMarkerValue(personKey, m.value));\n      mobileContainer.appendChild(div);\n    });\n  }\n  function selectMarkerValue(personKey, value) {\n    const person = getPerson(personKey);\n    $(`sw-amount-${personKey}`).value = euroToNorm(value, state.category);\n    person.amount = value;\n    $(`sw-amountInput-${personKey}`).value = value;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromSlider(personKey) {\n    const person = getPerson(personKey);\n    const norm = Number($(`sw-amount-${personKey}`).value);\n    person.amount = normToEuro(norm, state.category);\n    $(`sw-amountInput-${personKey}`).value = person.amount;\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function updateAmountFromInput(personKey) {\n    const person = getPerson(personKey);\n    const r = RANGES[state.category];\n    let val = Number($(`sw-amountInput-${personKey}`).value);\n    if (isNaN(val)) val = r.min;\n    val = Math.min(r.max, Math.max(r.min, val));\n    person.amount = val;\n    $(`sw-amountInput-${personKey}`).value = val;\n    $(`sw-amount-${personKey}`).value = euroToNorm(val, state.category);\n    renderMarkers(personKey);\n    refreshSummary();\n  }\n  function wireAmountControl(personKey) {\n    $(`sw-amount-${personKey}`).addEventListener(\"input\", () => updateAmountFromSlider(personKey));\n    $(`sw-amountInput-${personKey}`).addEventListener(\"input\", () => {\n      const v = Number($(`sw-amountInput-${personKey}`).value);\n      if (!isNaN(v)) { getPerson(personKey).amount = v; refreshSummary(); }\n    });\n    $(`sw-amountInput-${personKey}`).addEventListener(\"change\", () => updateAmountFromInput(personKey));\n  }\n  function applyRangeForForm() {\n    const cat = state.category;\n    const ori = ORIENTIERUNG[cat];\n    const hint = TXT.hintLong;\n    if (state.form === \"paar\") {\n      [\"p1\",\"p2\"].forEach(key => {\n        const person = getPerson(key);\n        person.amount = ori.base;\n        $(`sw-amount-${key}`).value = 50;\n        $(`sw-amountInput-${key}`).value = ori.base;\n      });\n      const p1name = state.persons.p1.vorname;\n      const p2name = state.persons.p2.vorname;\n      $(\"sw-amount-p1-title\").innerHTML = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-amount-p2-title\").innerHTML = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) +\n        ' <span style=\"font-size:21px; font-weight:700; color:var(--ink-muted);\">' + TXT.p2Badge + '<\/span>';\n      $(\"sw-summary-p1-label\").textContent = p1name ? `${TXT.person1} \u2013 ${p1name}` : TXT.person1;\n      $(\"sw-summary-p2-label\").textContent = (p2name ? `${TXT.person2} \u2013 ${p2name}` : TXT.person2) + \" \" + TXT.p2Badge;\n      $(\"sw-rangeHint-paar\").textContent = hint;\n      renderMarkers(\"p1\"); renderMarkers(\"p2\");\n    } else {\n      const person = state.persons.solo;\n      person.amount = ori.base;\n      $(\"sw-amount-solo\").value = 50;\n      $(\"sw-amountInput-solo\").value = ori.base;\n      $(\"sw-rangeHint-solo\").textContent = hint;\n      renderMarkers(\"solo\");\n    }\n    refreshSummary();\n  }\n  \/\/ \u2500\u2500 Rabattlogik \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \/\/ Zuerst wird der fixe App-Rabatt vom gewaehlten Betrag abgezogen, danach der\n  \/\/ prozentuale Rabatt auf den verbleibenden Betrag. Beide werden separat gezeigt.\n  function getPercentDiscountCandidate(person, isPaarP2) {\n    if (isPaarP2) return { value: DISCOUNT_PAAR_P2, label: TXT.discP2 };\n    const candidates = [];\n    if (isWiederholer(person)) candidates.push({ value: DISCOUNT_WIEDERHOLER, label: TXT.discWiederholer });\n    if (person.statusType === \"schueler\") candidates.push({ value: DISCOUNT_SCHUELER, label: TXT.discSchueler });\n    if (person.statusType === \"student\")  candidates.push({ value: DISCOUNT_STUDENT,  label: TXT.discStudent });\n    if (!candidates.length) return null;\n    return candidates.reduce((best, c) => c.value > best.value ? c : best, candidates[0]);\n  }\n  function getDiscounts(person, isPaarP2) {\n    const discounts = [];\n    let remaining = Math.round(person.amount);\n    if (isAppOnly()) {\n      const appDisc = Math.min(DISCOUNT_APP_FIXED, remaining);\n      discounts.push({ type: \"fixed\", value: DISCOUNT_APP_FIXED, label: TXT.discApp, amountEuro: appDisc });\n      remaining -= appDisc;\n    }\n    const pct = getPercentDiscountCandidate(person, isPaarP2);\n    if (pct) {\n      const pctDisc = Math.round(remaining * pct.value);\n      discounts.push({ type: \"pct\", value: pct.value, label: pct.label, amountEuro: pctDisc });\n      remaining -= pctDisc;\n    }\n    return { discounts, finalAmount: Math.max(0, remaining) };\n  }\n  function buildStatusOptionValue(person, isPaar) {\n    const vals = [];\n    if (isPaar) vals.push(STATUS_LABEL.paar);\n    if (isAppOnly()) vals.push(STATUS_LABEL.apponly);\n    if (isWiederholer(person)) vals.push(STATUS_LABEL.wiederholer);\n    if (person.statusType === \"schueler\") vals.push(STATUS_LABEL.schueler);\n    if (person.statusType === \"student\")  vals.push(STATUS_LABEL.student);\n    \/\/ Ecwid erwartet fuer Checkbox-Optionen ein Array, nicht einen kommaseparierten String\n    return vals;\n  }\n  function refreshSummary() {\n    if (state.form === \"paar\") refreshSummaryPaar();\n    else refreshSummarySolo();\n  }\n  function renderDiscountRows(containerId, discounts) {\n    const container = $(containerId);\n    container.innerHTML = \"\";\n    discounts.forEach(d => {\n      const row = document.createElement(\"div\");\n      row.className = \"sw-summary-row sw-summary-discount\";\n      const pctStr = d.type === \"fixed\" ? `\u2212${d.amountEuro}\u20ac` : `\u2212${Math.round(d.value * 100)}%`;\n      row.innerHTML = `<span>${d.label} (${pctStr})<\/span><span>\u2212${d.amountEuro}\u20ac<\/span>`;\n      container.appendChild(row);\n    });\n  }\n  function refreshSummarySolo() {\n    const p = state.persons.solo;\n    const { discounts, finalAmount } = getDiscounts(p, false);\n    $(\"sw-solo-chosen\").textContent = Math.round(p.amount) + \"\u20ac\";\n    renderDiscountRows(\"sw-solo-discounts\", discounts);\n    const shipLine = $(\"sw-shipping-line-solo\");\n    const shippingSolo = (hasPhysicalShipment(false) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingSolo ? \"flex\" : \"none\";\n    $(\"sw-solo-total\").textContent = finalAmount + shippingSolo;\n  }\n  function refreshSummaryPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    function fill(prefix, person, isPaarP2) {\n      const { discounts, finalAmount } = getDiscounts(person, isPaarP2);\n      $(`sw-${prefix}-chosen`).textContent = Math.round(person.amount) + \"\u20ac\";\n      renderDiscountRows(`sw-${prefix}-discounts`, discounts);\n      $(`sw-${prefix}-subtotal`).textContent = finalAmount + \"\u20ac\";\n      return finalAmount;\n    }\n    const f1 = fill(\"p1\", p1, false);\n    const f2 = fill(\"p2\", p2, true);\n    const shipLine = $(\"sw-shipping-line-paar\");\n    const shippingPaar = (hasPhysicalShipment(true) && needsShipping(state.country)) ? SHIPPING_COST : 0;\n    shipLine.style.display = shippingPaar ? \"flex\" : \"none\";\n    $(\"sw-paar-total\").textContent = f1 + f2 + shippingPaar;\n  }\n  function renderCountryList(filter) {\n    const list = $(\"sw-country-list\");\n    const q = (filter || \"\").toLowerCase().trim();\n    const filtered = q\n      ? getAllCountriesSorted().filter(c =>\n          c.name.toLowerCase().includes(q) ||\n          (c.aliases || []).some(a => a.includes(q))\n        )\n      : getAllCountriesSorted();\n    list.innerHTML = \"\";\n    if (!filtered.length) { list.innerHTML = '<div class=\"sw-country-empty\">' + TXT.noCountry + '<\/div>'; return; }\n    filtered.forEach(c => {\n      const div = document.createElement(\"div\");\n      div.className = \"sw-country-item\" + (state.country === c.code ? \" selected\" : \"\");\n      div.dataset.code = c.code;\n      div.innerHTML = `<span>${c.name}<\/span><span class=\"sw-country-item-cat\">${TXT.catBadge}${c.cat.replace(\"cat\",\"\")}<\/span>`;\n      div.addEventListener(\"click\", () => selectCountry(c.code, c.cat, c.name));\n      list.appendChild(div);\n    });\n  }\n  function selectCountry(code, cat, name) {\n    state.country  = code;\n    state.category = cat;\n    $(\"sw-country\").value = code;\n    $(\"sw-country-search\").value = name;\n    $(\"sw-country-list\").innerHTML = \"\";\n    const exceptionLang = APP_ONLY_CATEGORY_EXCEPTION_LANG[code];\n    let suffix = \"\";\n    if (cat === \"cat3\" || cat === \"cat4\") {\n      suffix = exceptionLang\n        ? \" \" + TXT.catSuffixException.replace(\"{X}\", LANG_DISPLAY[exceptionLang] || exceptionLang)\n        : \" \" + TXT.catSuffixDigital;\n    }\n    $(\"sw-catText\").textContent = (TXT.catLabels[cat] || cat) + suffix;\n    \/\/ Ecwid wickelt in Russland keine Zahlungen ab. Wer Russland waehlt, wird\n    \/\/ deshalb auf die russische Anmeldeseite verwiesen - die laeuft ueber n8n\n    \/\/ und Tochka statt ueber den Shop. Der russische Wizard verweist umgekehrt\n    \/\/ zurueck, sobald dort ein anderes Land gewaehlt wird.\n    const nachRussland = (code === \"RU\");\n    $(\"sw-redirect-russia\").style.display = nachRussland ? \"block\" : \"none\";\n    $(\"sw-catInfo\").style.display         = nachRussland ? \"none\"  : \"block\";\n    setNextEnabled(\"sw-btn-country-next\", !nachRussland);\n    updateAppOnlyUI();\n  }\n  function ensureEcwidReady(timeoutMs = 12000) {\n    return new Promise((resolve, reject) => {\n      function isReady() {\n        return window.Ecwid && window.Ecwid.Cart &&\n               typeof window.Ecwid.Cart.addProduct === \"function\" &&\n               typeof window.Ecwid.Cart.clear === \"function\";\n      }\n      if (isReady()) return resolve(true);\n      let resolved = false;\n      function done() { if (!resolved) { resolved = true; setTimeout(() => resolve(true), 200); } }\n      if (window.Ecwid) { try { window.Ecwid.OnAPILoaded.add(done); } catch(e) {} }\n      const start = Date.now();\n      const t = setInterval(() => {\n        if (isReady()) { clearInterval(t); done(); }\n        else if (Date.now() - start > timeoutMs) {\n          clearInterval(t);\n          if (!resolved) { resolved = true; reject(new Error(fillPlaceholder(TXT.errEcwid, timeoutMs\/1000))); }\n        }\n      }, 200);\n    });\n  }\n  function clearCartAsync() { return new Promise(r => Ecwid.Cart.clear(() => r(true))); }\n  function addProductAsync(payload, timeoutMs = 4000) {\n    return new Promise((resolve, reject) => {\n      let done = false;\n      const t = setTimeout(() => { if (!done) { done = true; resolve({ product:null, cart:null, timedOut:true }); } }, timeoutMs);\n      Ecwid.Cart.addProduct(payload, function(success, product, cart, error) {\n        if (done) return;\n        done = true; clearTimeout(t);\n        if (success) resolve({ product, cart, timedOut:false });\n        else reject(new Error((error || TXT.errProduct) + \" | Payload: \" + JSON.stringify(payload)));\n      });\n    });\n  }\n  function goToCart() { window.location.href = SHOP_CART_URL; }\n  function buildN8nPayload() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const d1 = getDiscounts(p1, false);\n    const d2 = getDiscounts(p2, true);\n    return {\n      sprache: state.commLang, land: state.country, kategorie: state.category, appOnly: isAppOnly(),\n      person1: { vorname: p1.vorname, nachname: p1.nachname, email: p1.email },\n      person2: { vorname: p2.vorname, nachname: p2.nachname, email: p2.email },\n      betraege: {\n        person1: { gewaehlt: Math.round(p1.amount), rabatte: d1.discounts, endbetrag: d1.finalAmount },\n        person2: { gewaehlt: Math.round(p2.amount), rabatte: d2.discounts, endbetrag: d2.finalAmount },\n        gesamt: d1.finalAmount + d2.finalAmount\n      },\n      timestamp: new Date().toISOString()\n    };\n  }\n  async function sendToN8n(payload) {\n    if (!N8N_WEBHOOK_URL || N8N_WEBHOOK_URL.indexOf(\"HIER_\") === 0) {\n      throw new Error(\"Die n8n-Webhook-URL ist im Code noch nicht eingetragen.\");\n    }\n    let res;\n    try {\n      res = await fetch(N8N_WEBHOOK_URL, { method:\"POST\", headers:{\"Content-Type\":\"application\/json\"}, body:JSON.stringify(payload) });\n    } catch (e) {\n      throw new Error(TXT.errNetwork);\n    }\n    if (!res.ok) throw new Error(fillPlaceholder(TXT.errSubmit, res.status));\n    return true;\n  }\n  async function goCheckoutSolo() {\n    clearErrorIn(\"sw-error-amount-solo\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-solo\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-solo\", TXT.errLang);\n    const p = state.persons.solo;\n    const finalAmount = getDiscounts(p, false).finalAmount;\n    const participationProductId = getParticipationProductId(false);\n    setCheckoutLoading(\"sw-btn-checkout-solo\", true);\n    try {\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const statusValue = buildStatusOptionValue(p, false);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: finalAmount, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-solo\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-solo\", false);\n    }\n  }\n  async function goCheckoutPaar() {\n    clearErrorIn(\"sw-error-amount-paar\");\n    if (!state.country)  return showErrorIn(\"sw-error-amount-paar\", TXT.errCountry);\n    if (!state.commLang) return showErrorIn(\"sw-error-amount-paar\", TXT.errLang);\n    if (!validateDetailsPaar()) return showErrorIn(\"sw-error-amount-paar\", TXT.errPaarFields);\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const participationProductId = getParticipationProductId(true);\n    setCheckoutLoading(\"sw-btn-checkout-paar\", true);\n    try {\n      const payload = buildN8nPayload();\n      await sendToN8n(payload);\n      await ensureEcwidReady();\n      await clearCartAsync();\n      await new Promise(r => setTimeout(r, 1500));\n      const total = getDiscounts(p1, false).finalAmount + getDiscounts(p2, true).finalAmount;\n      const statusValue = buildStatusOptionValue(p1, true);\n      const options = { [OPT_COMM_LANG]: state.commLang };\n      if (statusValue.length > 0) options[OPT_STATUS] = statusValue;\n      const result = await addProductAsync({ id: participationProductId, quantity: 1, selectedPrice: total, options });\n      if (result.timedOut) console.warn(\"[Wizard] addProduct timed out \u2013 proceeding to cart anyway\");\n      showThankYou();\n      setTimeout(goToCart, 2500);\n    } catch (e) {\n      showErrorIn(\"sw-error-amount-paar\", e.message || String(e));\n    } finally {\n      setCheckoutLoading(\"sw-btn-checkout-paar\", false);\n    }\n  }\n  function validateLangform() {\n    const ok = !!state.commLang && !!state.form && state.form !== \"gruppe\";\n    setNextEnabled(\"sw-btn-langform-next\", ok);\n  }\n  function validateDetailsSolo() {\n    const ok = !!$(\"sw-solo-status\").value;\n    setNextEnabled(\"sw-btn-details-solo-next\", ok);\n    return ok;\n  }\n  function validateDetailsPaar() {\n    const p1 = state.persons.p1, p2 = state.persons.p2;\n    const emailOk = s => \/\\S+@\\S+\\.\\S+\/.test(s || \"\");\n    const ok = !!(p1.vorname && p1.vorname.trim()) && !!(p1.nachname && p1.nachname.trim()) && emailOk(p1.email) &&\n               !!(p2.vorname && p2.vorname.trim()) && !!(p2.nachname && p2.nachname.trim()) && emailOk(p2.email);\n    setNextEnabled(\"sw-btn-details-paar-next\", ok);\n    return ok;\n  }\n  function bindNameFields(key) {\n    [\"vorname\",\"nachname\",\"email\"].forEach(f => {\n      $(`sw-${key}-${f}`).addEventListener(\"input\", e => {\n        getPerson(key)[f] = e.target.value;\n        validateDetailsPaar();\n      });\n    });\n  }\n  $(\"sw-btn-welcome-next\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-country-back\").addEventListener(\"click\", () => showStep(1));\n  $(\"sw-btn-country-next\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-country-search\").addEventListener(\"input\",  e => renderCountryList(e.target.value));\n  $(\"sw-country-search\").addEventListener(\"focus\",  () => renderCountryList($(\"sw-country-search\").value));\n  shadow.addEventListener(\"click\", e => {\n    if (!e.target.closest(\"#sw-country-list\") && !e.target.closest(\"#sw-country-search\")) {\n      $(\"sw-country-list\").innerHTML = \"\";\n    }\n  });\n  $(\"sw-commLang\").addEventListener(\"change\", e => {\n    state.commLang = e.target.value;\n    validateLangform();\n    updateAppOnlyUI();\n    refreshSummary();\n  });\n  shadow.querySelectorAll(\".sw-choice-card\").forEach(card => {\n    card.addEventListener(\"click\", () => {\n      state.form = card.dataset.form;\n      shadow.querySelectorAll(\".sw-choice-card\").forEach(c => c.classList.toggle(\"active\", c === card));\n      const isGruppe = state.form === \"gruppe\";\n      $(\"sw-gruppe-note\").style.display = isGruppe ? \"block\" : \"none\";\n      $(\"sw-btn-langform-next\").style.display   = isGruppe ? \"none\" : \"inline-block\";\n      $(\"sw-btn-gruppe-redirect\").style.display = isGruppe ? \"inline-block\" : \"none\";\n      clearErrorIn(\"sw-error-langform\");\n      validateLangform();\n    });\n  });\n  $(\"sw-btn-gruppe-redirect\").addEventListener(\"click\", () => { window.location.href = getGroupRedirectUrl(); });\n  $(\"sw-btn-langform-back\").addEventListener(\"click\", () => showStep(2));\n  $(\"sw-btn-langform-next\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-details-solo-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-solo-status\").addEventListener(\"change\", e => {\n    const val = e.target.value;\n    const person = state.persons.solo;\n    person.statusType  = val;\n    person.wiederholer = val === \"wiederholer\";\n    clearErrorIn(\"sw-error-details-solo\");\n    validateDetailsSolo();\n  });\n  $(\"sw-btn-details-solo-next\").addEventListener(\"click\", () => {\n    if (validateDetailsSolo()) { applyRangeForForm(); showStep(5); }\n    else showErrorIn(\"sw-error-details-solo\", TXT.errSelectFirst);\n  });\n  $(\"sw-btn-details-paar-back\").addEventListener(\"click\", () => showStep(3));\n  $(\"sw-btn-details-paar-next\").addEventListener(\"click\", () => {\n    if (validateDetailsPaar()) { applyRangeForForm(); showStep(5); }\n  });\n  $(\"sw-btn-amount-solo-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-amount-paar-back\").addEventListener(\"click\", () => showStep(4));\n  $(\"sw-btn-checkout-solo\").addEventListener(\"click\", goCheckoutSolo);\n  $(\"sw-btn-checkout-paar\").addEventListener(\"click\", goCheckoutPaar);\n  bindNameFields(\"p1\");\n  bindNameFields(\"p2\");\n  wireAmountControl(\"solo\");\n  wireAmountControl(\"p1\");\n  wireAmountControl(\"p2\");\n  showStep(1);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d4874b7 e-flex e-con-boxed e-con e-parent\" data-id=\"d4874b7\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a528f5d elementor-widget elementor-widget-text-editor\" data-id=\"a528f5d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Unser Kurs wird in vielen Sprachen angeboten. Die Kursinhalte und \u00dcbungskarten sind vollst\u00e4ndig \u00fcbersetzt. Die begleitenden Briefe und die Verdolmetschung der Konferenzen werden gr\u00f6\u00dftenteils ehrenamtlich geleistet und h\u00e4ngen von der Gruppengr\u00f6\u00dfe in der jeweiligen Sprache ab; sie k\u00f6nnen daher nicht f\u00fcr jede Sprache und jede Einheit im vorhinein garantiert werden. Ist in einer Sprache keine Begleitung m\u00f6glich, kann die Konferenz in einer der anderen angebotenen Sprachen wahrgenommen werden, in jedem Fall wird es Englisch und Deutsch geben. Desweiteren besteht f\u00fcr viele Sprachen die M\u00f6glichkeit einer automatischen \u00dcbersetzung.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fcbec12 e-flex e-con-boxed e-con e-parent\" data-id=\"fcbec12\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3e4fd7a elementor-widget elementor-widget-shortcode\" data-id=\"3e4fd7a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div id=\"dynamic-ec-store-container\" class=\"\"><!-- Ecwid shopping cart plugin v 7.0.9 --><!--noptimize--><script data-cfasync=\"false\" data-no-optimize=\"1\" src=\"https:\/\/app.ecwid.com\/script.js?89632828&data_platform=wporg&lang=it\"><\/script><script data-cfasync=\"false\" data-no-optimize=\"1\">if (typeof jQuery !== undefined && jQuery.mobile) { jQuery.mobile.hashListeningEnabled = false; jQuery.mobile.pushStateEnabled=false; }<\/script><!--\/noptimize--><div id=\"ecwid-store-89632828\" class=\"ecwid-shopping-cart-product-browser\" data-ecwid-default-category-id=\"0\"><\/div><script data-cfasync=\"false\" data-no-optimize=\"1\" type=\"text\/javascript\">xProductBrowser(\"id=ecwid-store-89632828\",\"views=grid(20,3) list(60) table(60)\",\"default_page=\");<\/script><!-- END Ecwid Shopping Cart v 7.0.9 --><\/div>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e62689f e-con-full e-flex e-con e-parent\" data-id=\"e62689f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-f4c7d13 e-con-full e-flex e-con e-child\" data-id=\"f4c7d13\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fa33190 elementor-widget elementor-widget-text-editor\" data-id=\"fa33190\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Institute for Spiritual Activity<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7c9e47a e-con-full e-flex e-con e-child\" data-id=\"7c9e47a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b61cb9a e-con-full e-flex e-con e-child\" data-id=\"b61cb9a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bb4c2a5 elementor-widget elementor-widget-text-editor\" data-id=\"bb4c2a5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Datenschutz <span>\u00b7 Impressum \u00b7 AGB<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Preise &#038; Anmeldung Wir freuen uns \u00fcber Deine Anmeldung Geh mit uns und vielen Menschen weltweit den Weg durch die sechs Seelen\u00fcbungen. Start 27. September 2026 Ende 18. April 2027 Dauer 29 Wochen Format Meditativer Schulungsweg \u05d4\u05ea\u05d7\u05dc\u05d4 27 \u05d1\u05e1\u05e4\u05d8\u05de\u05d1\u05e8 2026 \u05e1\u05d9\u05d5\u05dd 18 \u05d1\u05d0\u05e4\u05e8\u05d9\u05dc 2027 \u05de\u05e9\u05da 29 \u05e9\u05d1\u05d5\u05e2\u05d5\u05ea \u05e4\u05d5\u05e8\u05de\u05d8 \u05de\u05e1\u05dc\u05d5\u05dc \u05d4\u05db\u05e9\u05e8\u05d4 \u05de\u05d3\u05d9\u05d8\u05d8\u05d9\u05d1\u05d9 Teilnahmebeitrag Preistransparenz Der Kurs [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-10","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"https:\/\/spiritual-activity.org\/it\/wp-json\/wp\/v2\/pages\/10","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spiritual-activity.org\/it\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/spiritual-activity.org\/it\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/spiritual-activity.org\/it\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/spiritual-activity.org\/it\/wp-json\/wp\/v2\/comments?post=10"}],"version-history":[{"count":463,"href":"https:\/\/spiritual-activity.org\/it\/wp-json\/wp\/v2\/pages\/10\/revisions"}],"predecessor-version":[{"id":1357,"href":"https:\/\/spiritual-activity.org\/it\/wp-json\/wp\/v2\/pages\/10\/revisions\/1357"}],"wp:attachment":[{"href":"https:\/\/spiritual-activity.org\/it\/wp-json\/wp\/v2\/media?parent=10"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}