{"id":140,"date":"2025-11-07T15:17:32","date_gmt":"2025-11-07T15:17:32","guid":{"rendered":"https:\/\/ellafabian2026.ch\/?page_id=140"},"modified":"2026-03-13T07:14:34","modified_gmt":"2026-03-13T07:14:34","slug":"geschenkliste","status":"publish","type":"page","link":"https:\/\/ellafabian2026.ch\/?page_id=140","title":{"rendered":"Geschenkliste"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"140\" class=\"elementor elementor-140\">\n\t\t\t\t<div class=\"elementor-element elementor-element-38995300 e-flex e-con-boxed jltma-glass-effect-no e-con e-parent\" data-id=\"38995300\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;position&quot;:&quot;fixed&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div data-jltma-wrapper-link=\"{&quot;url&quot;:&quot;http:\\\/\\\/www.ellafabian2026.ch&quot;,&quot;is_external&quot;:&quot;&quot;,&quot;nofollow&quot;:&quot;&quot;}\" style=\"cursor: pointer\" class=\"elementor-element elementor-element-6c4bf9eb jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"6c4bf9eb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"478\" src=\"https:\/\/ellafabian2026.ch\/wp-content\/uploads\/2026\/02\/LOGO-Hochzeit-1024x612.png\" class=\"attachment-large size-large wp-image-295\" alt=\"\" srcset=\"https:\/\/ellafabian2026.ch\/wp-content\/uploads\/2026\/02\/LOGO-Hochzeit-1024x612.png 1024w, https:\/\/ellafabian2026.ch\/wp-content\/uploads\/2026\/02\/LOGO-Hochzeit-300x179.png 300w, https:\/\/ellafabian2026.ch\/wp-content\/uploads\/2026\/02\/LOGO-Hochzeit-768x459.png 768w, https:\/\/ellafabian2026.ch\/wp-content\/uploads\/2026\/02\/LOGO-Hochzeit-1536x918.png 1536w, https:\/\/ellafabian2026.ch\/wp-content\/uploads\/2026\/02\/LOGO-Hochzeit-2048x1224.png 2048w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\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-bc40429 e-flex e-con-boxed jltma-glass-effect-no e-con e-parent\" data-id=\"bc40429\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;position&quot;:&quot;fixed&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-18fd486 e-con-full e-flex jltma-glass-effect-no e-con e-child\" data-id=\"18fd486\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div data-jltma-wrapper-link=\"{&quot;url&quot;:&quot;http:\\\/\\\/www.ellafabian2026.ch&quot;,&quot;is_external&quot;:&quot;&quot;,&quot;nofollow&quot;:&quot;&quot;}\" style=\"cursor: pointer\" class=\"elementor-element elementor-element-87c4eed elementor-view-default jltma-glass-effect-no elementor-widget elementor-widget-icon\" data-id=\"87c4eed\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<i aria-hidden=\"true\" class=\"lnr lnr-arrow-left\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\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-48b9d63 e-flex e-con-boxed jltma-glass-effect-no e-con e-parent\" data-id=\"48b9d63\" 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-d03f888 jltma-glass-effect-no elementor-widget elementor-widget-spacer\" data-id=\"d03f888\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\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-807c204 e-flex e-con-boxed jltma-glass-effect-no e-con e-parent\" data-id=\"807c204\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-1eaf9b7 e-con-full e-flex jltma-glass-effect-no e-con e-child\" data-id=\"1eaf9b7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-15e808c jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"15e808c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Anmeldung<\/h2>\t\t\t\t<\/div>\n\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-6d708f2c e-flex e-con-boxed jltma-glass-effect-no e-con e-parent\" data-id=\"6d708f2c\" 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-27f54ada jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"27f54ada\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"p1\">Auf dieser Seite findet ihr die Anmeldung zu unserer Hochzeit.<\/p><p class=\"p1\">Wenn ihr eine Einladung per Brief erhalten habt, k\u00f6nnt ihr euch unten ganz einfach \u00fcber das Anmeldeformular anmelden. Bitte f\u00fcllt alle erforderlichen Angaben aus, damit wir den Tag mit euch optimal planen k\u00f6nnen.<\/p><p class=\"p1\">Wir freuen uns sehr, diesen besonderen Tag gemeinsam mit euch zu feiern.<\/p><p class=\"p1\"><span style=\"font-weight: bold;\">Wichtig:<\/span>\u00a0die Best\u00e4tigungsmail k\u00f6nnten im Spam-Ordner landen.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-76142de jltma-glass-effect-no elementor-widget elementor-widget-spacer\" data-id=\"76142de\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\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-5cf9d39 e-flex e-con-boxed jltma-glass-effect-no e-con e-parent\" data-id=\"5cf9d39\" 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-3259c4d jltma-glass-effect-no elementor-widget elementor-widget-html\" data-id=\"3259c4d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"rsvp-widget\" id=\"rsvpWidget\">\n  <button type=\"button\" class=\"rsvp-btn\" id=\"rsvpOpenBtn\">Zur Hochzeit anmelden<\/button>\n\n  <div class=\"rsvp-toast\" id=\"rsvpToast\" aria-live=\"polite\"><\/div>\n\n  <div class=\"rsvp-overlay rsvp-hidden\" id=\"rsvpOverlay\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"rsvpTitle\">\n    <div class=\"rsvp-modal\">\n      <div class=\"rsvp-header\">\n        <h3 id=\"rsvpTitle\" class=\"rsvp-title\">Anmeldung<\/h3>\n        <button type=\"button\" class=\"rsvp-close\" id=\"rsvpCloseBtn\" aria-label=\"Schliessen\">\u2715<\/button>\n      <\/div>\n\n      <form class=\"rsvp-form\" id=\"rsvpForm\">\n        <label class=\"rsvp-label\">\n          Name\n          <input class=\"rsvp-input\" type=\"text\" name=\"name\" maxlength=\"120\" required \/>\n        <\/label>\n        \n        <label class=\"rsvp-label\">\n         E-Mail\n            <input class=\"rsvp-input\" type=\"email\" name=\"email\" maxlength=\"190\" required \/>\n            <\/label>\n\n        <div class=\"rsvp-fieldset\">\n          <div class=\"rsvp-legend\">Kommst du zur Hochzeit?<\/div>\n          <label class=\"rsvp-radio\">\n            <input type=\"radio\" name=\"attending\" value=\"1\" required \/>\n            Ja\n          <\/label>\n          <label class=\"rsvp-radio\">\n            <input type=\"radio\" name=\"attending\" value=\"0\" required \/>\n            Nein\n          <\/label>\n        <\/div>\n\n<label class=\"rsvp-label\" id=\"guestWrapper\" style=\"display:none;\">\n  Anzahl Personen\n  <select class=\"rsvp-input\" name=\"guest_count\" required>\n    <option value=\"\" selected>Bitte waehlen<\/option>\n    <option value=\"1\">1 Person<\/option>\n    <option value=\"2\">2 Personen<\/option>\n    <option value=\"3\">3 Personen<\/option>\n    <option value=\"4\">4 Personen<\/option>\n    <option value=\"5\">5 Personen<\/option>\n  <\/select>\n<\/label>\n\n<label class=\"rsvp-label\" id=\"mealWrapper\" style=\"display:none;\">\n  Essen\n  <select class=\"rsvp-input\" name=\"meal_choice\" required>\n    <option value=\"\" selected>Bitte w\u00e4hlen<\/option>\n    <option value=\"fleisch\">Mit Fleisch<\/option>\n    <option value=\"vegetarisch\">Vegetarisch<\/option>\n    <option value=\"vegan\">Vegan<\/option>\n  <\/select>\n<\/label>\n\n<label class=\"rsvp-label\" id=\"mealCommentWrapper\" style=\"display:none;\">\n  Kommentar (optional)\n  <textarea\n    class=\"rsvp-input\"\n    name=\"meal_comment\"\n    rows=\"3\"\n    maxlength=\"500\"\n    placeholder=\"Essensgewohnheiten \/ Allergien \/ z.B. 2x vegetarisch, 1x vegan\"\n  ><\/textarea>\n<\/label>\n\n        <label class=\"rsvp-label\" id=\"hotelWrapper\" style=\"display:none;\">\n  Unterkunftsort\n  <input class=\"rsvp-input\" type=\"text\" name=\"hotel_location\" maxlength=\"120\" \/>\n<\/label>\n\n        <button class=\"rsvp-btn rsvp-btn-full\" type=\"submit\" id=\"rsvpSubmitBtn\">Absenden<\/button>\n        <div class=\"rsvp-hint\">Hinweis: Der Hotelort ist optional.<\/div>\n      <\/form>\n    <\/div>\n  <\/div>\n<\/div>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Baskervville&display=swap\" rel=\"stylesheet\">\n\n<style>\n\n\/* Schrift im ganzen RSVP-Widget erzwingen (inkl. Modal + Form-Elemente) *\/\n#rsvpWidget{\n  font-family: 'Baskervville', serif;\n}\n\n#rsvpWidget input,\n#rsvpWidget select,\n#rsvpWidget textarea,\n#rsvpWidget button{\n  font-family: inherit;\n}\n\n  \/* scoped styles (nur f\u00fcr dieses Widget) *\/\n  #rsvpWidget .rsvp-btn{\n    border:0; background:#111; color:#fff; padding:12px 16px; border-radius:10px;\n    cursor:pointer; font-weight:600; line-height:1;\n    display:block;\n  margin-left:auto;\n  margin-right:auto;\n  font-family:'Baskervville', serif;\n  }\n  #rsvpWidget .rsvp-btn:disabled{opacity:.6; cursor:not-allowed;}\n  #rsvpWidget .rsvp-btn-full{width:100%; padding:12px 16px;}\n\n#rsvpWidget .rsvp-overlay{\n  position: fixed;\n  inset: 0;\n  background: rgba(0,0,0,.45);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 16px;\n  z-index: 999999;\n  overflow-y: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n  #rsvpWidget .rsvp-hidden{display:none;}\n\n  #rsvpWidget .rsvp-modal{\n    width:min(520px, 100%); background:#fff; border-radius:16px;\n    box-shadow:0 10px 35px rgba(0,0,0,.15); padding:18px;\n  }\n  #rsvpWidget .rsvp-header{display:flex; align-items:center; justify-content:space-between; gap:12px;}\n  #rsvpWidget .rsvp-title{margin:0; font-size:18px;}\n  #rsvpWidget .rsvp-close{\n    border:0; background:transparent; font-size:22px; cursor:pointer; padding:6px 10px; border-radius:10px;\n  }\n  #rsvpWidget .rsvp-close:hover{background:#f2f2f2;}\n\n  #rsvpWidget .rsvp-form{display:grid; gap:14px; margin-top:12px;}\n  #rsvpWidget .rsvp-label{display:grid; gap:6px; font-weight:600;}\n  #rsvpWidget .rsvp-input{\n    width:100%; padding:10px 12px; border:1px solid #ddd; border-radius:10px; font-size:16px;\n  }\n  #rsvpWidget .rsvp-fieldset{border:1px solid #eee; border-radius:12px; padding:10px 12px;}\n  #rsvpWidget .rsvp-legend{font-weight:700; margin-bottom:6px;}\n  #rsvpWidget .rsvp-radio{display:flex; align-items:center; gap:10px; font-weight:500; margin-top:6px;}\n  #rsvpWidget .rsvp-hint{font-size:13px; color:#555;}\n\n  #rsvpWidget .rsvp-toast{\n    position:fixed; left:50%; bottom:24px; transform:translateX(-50%);\n    background:#111; color:#fff; padding:10px 12px; border-radius:10px;\n    opacity:0; pointer-events:none; transition:opacity .2s ease; z-index:999999;\n  }\n  #rsvpWidget .rsvp-toast.rsvp-show{opacity:1;}\n  \n  @media (max-width: 520px){\n  #rsvpWidget .primary-btn{\n    width: 100%;\n  }\n\n  #rsvpWidget .modal{\n    width: 100%;\n    padding: 14px;\n    border-radius: 14px;\n  }\n\n  #rsvpWidget input[type=\"text\"],\n  #rsvpWidget input[type=\"email\"],\n  #rsvpWidget select{\n    font-size: 16px; \/* verhindert iOS Zoom *\/\n  }\n}\n\n\n}\n}\n<\/style>\n\n<script>\n(function(){\n  const API_ENDPOINT = \"https:\/\/ellafabian2026.ch\/hochzeit\/api\/rsvp_submit.php\";\n\n  const widget = document.getElementById(\"rsvpWidget\");\n  if(!widget) return;\n\n  const openBtn = widget.querySelector(\"#rsvpOpenBtn\");\n  const closeBtn = widget.querySelector(\"#rsvpCloseBtn\");\n  const overlay  = widget.querySelector(\"#rsvpOverlay\");\n  const form     = widget.querySelector(\"#rsvpForm\");\n  const submitBtn= widget.querySelector(\"#rsvpSubmitBtn\");\n  const toast    = widget.querySelector(\"#rsvpToast\");\n\n  \/\/ Toggle-Felder (nur 1x definieren)\n const hotelWrapper = widget.querySelector(\"#hotelWrapper\");\nconst guestWrapper = widget.querySelector(\"#guestWrapper\");\nconst mealWrapper = widget.querySelector(\"#mealWrapper\");\nconst mealCommentWrapper = widget.querySelector(\"#mealCommentWrapper\");\nconst attendingRadios = widget.querySelectorAll('input[name=\"attending\"]');\n\nfunction toggleYesFields(isYes){\n  if (hotelWrapper) hotelWrapper.style.display = isYes ? \"grid\" : \"none\";\n  if (guestWrapper) guestWrapper.style.display = isYes ? \"grid\" : \"none\";\n  if (mealWrapper)  mealWrapper.style.display  = isYes ? \"grid\" : \"none\";\n  if (mealCommentWrapper) mealCommentWrapper.style.display = isYes ? \"grid\" : \"none\";\n\n  if (!isYes) {\n    const guestSelect = widget.querySelector('select[name=\"guest_count\"]');\n    const hotelInput = widget.querySelector('input[name=\"hotel_location\"]');\n    const mealSelect = widget.querySelector('select[name=\"meal_choice\"]');\n    const mealComment = widget.querySelector('textarea[name=\"meal_comment\"]');\n    if (guestSelect) guestSelect.value = \"\";\n    if (hotelInput) hotelInput.value = \"\";\n    if (mealSelect) mealSelect.value = \"\";\n    if (mealComment) mealComment.value = \"\";\n  }\n}\n\n  attendingRadios.forEach(radio => {\n    radio.addEventListener(\"change\", () => {\n      if (radio.checked) toggleYesFields(radio.value === \"1\");\n    });\n  });\n\n  \/\/ Initialzustand setzen (falls schon etwas ausgewaehlt ist)\n  const checked = widget.querySelector('input[name=\"attending\"]:checked');\n  if (checked) toggleYesFields(checked.value === \"1\");\n\n  \/\/ --- ab hier kommt dann dein bestehender Code f\u00fcr open\/close + submit ---\n  openBtn.addEventListener(\"click\", () => {\n    overlay.classList.remove(\"rsvp-hidden\");\n    const firstInput = form.querySelector('input[name=\"name\"]');\n    if(firstInput) firstInput.focus();\n  });\n\n  closeBtn.addEventListener(\"click\", () => {\n    overlay.classList.add(\"rsvp-hidden\");\n    form.reset();\n    submitBtn.disabled = false;\n    toggleYesFields(false);\n  });\n\n  overlay.addEventListener(\"click\", (e)=>{\n    if(e.target === overlay) {\n      overlay.classList.add(\"rsvp-hidden\");\n      form.reset();\n      submitBtn.disabled = false;\n      toggleYesFields(false);\n    }\n  });\n\n  function showToast(msg){\n    toast.textContent = msg;\n    toast.classList.add(\"rsvp-show\");\n    window.setTimeout(()=>toast.classList.remove(\"rsvp-show\"), 2200);\n  }\n\n  document.addEventListener(\"keydown\", (e)=>{\n    if(e.key === \"Escape\" && !overlay.classList.contains(\"rsvp-hidden\")) {\n      overlay.classList.add(\"rsvp-hidden\");\n      form.reset();\n      submitBtn.disabled = false;\n      toggleYesFields(false);\n    }\n  });\n\n  form.addEventListener(\"submit\", async (e)=>{\n    e.preventDefault();\n    submitBtn.disabled = true;\n\n    const fd = new FormData(form);\n    const payload = {\n      name: (fd.get(\"name\") || \"\").toString().trim(),\n      email: (fd.get(\"email\") || \"\").toString().trim(),\n      attending: fd.get(\"attending\") === \"1\" ? 1 : 0,\n      guest_count: fd.get(\"guest_count\") ? parseInt(fd.get(\"guest_count\"), 10) : null,\n      meal_choice: (fd.get(\"meal_choice\") || \"\").toString().trim(),\n      meal_comment: (fd.get(\"meal_comment\") || \"\").toString().trim(),\n      hotel_location: (fd.get(\"hotel_location\") || \"\").toString().trim()\n    };\n\n    try{\n      const res = await fetch(API_ENDPOINT, {\n        method: \"POST\",\n        headers: {\"Content-Type\":\"application\/json\"},\n        body: JSON.stringify(payload)\n      });\n\n      const json = await res.json().catch(()=>({ok:false, error:\"Ungueltige Server-Antwort.\"}));\n\n      if(!res.ok || !json.ok){\n        showToast(json.error || \"Fehler beim Speichern.\");\n        submitBtn.disabled = false;\n        return;\n      }\n\n      showToast(\"Danke! Deine Anmeldung wurde gespeichert.\");\n      overlay.classList.add(\"rsvp-hidden\");\n      form.reset();\n      submitBtn.disabled = false;\n      toggleYesFields(false);\n    }catch(err){\n      showToast(\"Netzwerkfehler. Bitte spaeter erneut versuchen.\");\n      submitBtn.disabled = false;\n    }\n  });\n})();\n<\/script>\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-5f8ffad e-flex e-con-boxed jltma-glass-effect-no e-con e-parent\" data-id=\"5f8ffad\" 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-a0af185 jltma-glass-effect-no elementor-widget elementor-widget-spacer\" data-id=\"a0af185\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\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-6eda702 e-flex e-con-boxed jltma-glass-effect-no e-con e-parent\" data-id=\"6eda702\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-822b7e6 e-con-full e-flex jltma-glass-effect-no e-con e-child\" data-id=\"822b7e6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8da3515 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"8da3515\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Wunschliste<\/h2>\t\t\t\t<\/div>\n\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-fa0eceb e-flex e-con-boxed jltma-glass-effect-no e-con e-parent\" data-id=\"fa0eceb\" 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-ea29f55 jltma-glass-effect-no elementor-widget elementor-widget-spacer\" data-id=\"ea29f55\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\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<div class=\"elementor-element elementor-element-73bd16e jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"73bd16e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"p1\">Da wir bereits zusammen leben und unser Zuhause eingerichtet haben, w\u00fcnschen wir uns vor allem etwas Symbolisches f\u00fcr unseren gr\u00f6ssten Traum eines eigenen Heims.<\/p>\n<p class=\"p1\">Die aufgef\u00fchrten Geschenke stehen symbolisch f\u00fcr verschiedene f\u00fcr unser zuk\u00fcnftiges &#171;Dehei&#187;, zum Beispiel f\u00fcr Garten, K\u00fcche oder Wohnbereich. Wenn ihr m\u00f6chtet, k\u00f6nnt ihr einen Beitrag zu einem dieser Bestandteile leisten und so symbolisch ein St\u00fcck unseres Traumhauses mitgestalten.<\/p>\n<p class=\"p1\">Alternativ k\u00f6nnt ihr \u00fcber den Button \u201eGeschenk hinzuf\u00fcgen\u201c auch selbst eine Idee erg\u00e4nzen.<\/p>\n<p class=\"p1\">Bitte f\u00fchlt euch zu nichts verpflichtet. Ein Geschenk ist absolut kein Muss. Das Wichtigste f\u00fcr uns ist eure Anwesenheit und die gemeinsame Zeit an diesem besonderen Tag.<\/p>\n<p><b>Wichtig:<\/b> die Best\u00e4tigungsmail k\u00f6nnten im Spam-Ordner landen.<\/p>\t\t\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-70d9e3c e-flex e-con-boxed jltma-glass-effect-no e-con e-parent\" data-id=\"70d9e3c\" 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-d138642 jltma-glass-effect-no elementor-widget elementor-widget-html\" data-id=\"d138642\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"gift-widget\" id=\"giftWidget\">\n\n\n  <div class=\"gift-grid\" id=\"giftGrid\"><\/div>\n  \n  <div class=\"gift-bottom\">\n  <button type=\"button\" class=\"gift-add-btn\" id=\"giftOpenAdd\">\n    \uff0b Geschenk hinzuf\u00fcgen\n  <\/button>\n<\/div>\n\n  <div class=\"gift-toast\" id=\"giftToast\" aria-live=\"polite\"><\/div>\n\n  <!-- Beitrag Modal -->\n  <div class=\"gift-overlay gift-hidden\" id=\"giftContribOverlay\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"giftContribTitle\">\n    <div class=\"gift-modal\">\n      <div class=\"gift-header\">\n        <h3 class=\"gift-h3\" id=\"giftContribTitle\">Schenken<\/h3>\n        <button type=\"button\" class=\"gift-close\" id=\"giftCloseContrib\" aria-label=\"Schliessen\">\u2715<\/button>\n      <\/div>\n\n      <form class=\"gift-form\" id=\"giftContribForm\">\n        <input type=\"hidden\" name=\"gift_id\" id=\"contribGiftId\" \/>\n        <div class=\"gift-muted\" id=\"contribGiftName\"><\/div>\n\n        <!-- Honeypot (unsichtbar) -->\n        <div class=\"gift-hp\">\n          <label>Website <input type=\"text\" name=\"website\" autocomplete=\"off\" tabindex=\"-1\"><\/label>\n        <\/div>\n\n        <label class=\"gift-label\">\n          Name\n          <input class=\"gift-input\" type=\"text\" name=\"donor_name\" maxlength=\"120\" required \/>\n        <\/label>\n\n        <label class=\"gift-label\">\n          E-Mail\n          <input class=\"gift-input\" type=\"email\" name=\"donor_email\" maxlength=\"190\" required \/>\n        <\/label>\n\n        <label class=\"gift-label\">\n          Betrag\n          <input class=\"gift-input\" type=\"number\" name=\"amount\" step=\"0.01\" min=\"1\" required placeholder=\"z.B. 50\">\n        <\/label>\n\n        <button class=\"gift-primary\" type=\"submit\" id=\"giftContribSubmit\">Geschenk senden<\/button>\n        \n\n      <\/form>\n    <\/div>\n  <\/div>\n\n  <!-- Geschenk hinzuf\u00fcgen Modal -->\n  <div class=\"gift-overlay gift-hidden\" id=\"giftAddOverlay\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"giftAddTitle\">\n    <div class=\"gift-modal\">\n      <div class=\"gift-header\">\n        <h3 class=\"gift-h3\" id=\"giftAddTitle\">Geschenk hinzuf\u00fcgen<\/h3>\n        <button type=\"button\" class=\"gift-close\" id=\"giftCloseAdd\" aria-label=\"Schliessen\">\u2715<\/button>\n      <\/div>\n\n      <form class=\"gift-form\" id=\"giftAddForm\">\n        <!-- Honeypot (unsichtbar) -->\n        <div class=\"gift-hp\">\n          <label>Website <input type=\"text\" name=\"website\" autocomplete=\"off\" tabindex=\"-1\"><\/label>\n        <\/div>\n\n        <label class=\"gift-label\">\n          Titel\n          <input class=\"gift-input\" type=\"text\" name=\"title\" maxlength=\"140\" required placeholder=\"z.B. Rasenm\u00e4her\">\n        <\/label>\n\n        \n\n        <label class=\"gift-label\">\n          Bild (optional, JPG\/PNG\/WEBP bis 5MB)\n          <input class=\"gift-input\" type=\"file\" name=\"image\" accept=\"image\/jpeg,image\/png,image\/webp\">\n        <\/label>\n\n        <button class=\"gift-primary\" type=\"submit\" id=\"giftAddSubmit\">Hinzuf\u00fcgen<\/button>\n        <div class=\"gift-muted\">Hinweis: Ohne Bild wird eine Standard-Kachel angezeigt.<\/div>\n      <\/form>\n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Baskervville&display=swap\" rel=\"stylesheet\">\n\n<style>\n  #giftWidget{\n  font-family:'Baskervville', serif;\n}\n  #giftWidget .gift-topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}\n  #giftWidget .gift-title{margin:0;font-size:22px}\n  #giftWidget .gift-add-btn{border:0;background:#111;color:#fff;border-radius:10px;padding:10px 12px;font-weight:800;cursor:pointer}\n  #giftWidget .gift-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}\n  #giftWidget .gift-card{background:#fff;border:1px solid #eee;border-radius:16px;overflow:hidden;box-shadow:0 8px 26px rgba(0,0,0,.06)}\n  #giftWidget .gift-img{width:100%;height:140px;object-fit:cover;display:block;background:#f2f2f2}\n  #giftWidget .gift-body{padding:12px;display:grid;gap:8px}\n  #giftWidget .gift-name{font-weight:800}\n  #giftWidget .gift-meta{font-size:13px;color:#555;display:flex;gap:10px;flex-wrap:wrap}\n  #giftWidget .gift-btn{border:0;background:#111;color:#fff;border-radius:10px;padding:10px 12px;font-weight:700;cursor:pointer}\n  #giftWidget .gift-btn:disabled{opacity:.6;cursor:not-allowed}\n\n  #giftWidget .gift-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);display:grid;place-items:center;padding:24px;z-index:999999}\n  #giftWidget .gift-hidden{display:none}\n  #giftWidget .gift-modal{width:min(520px,100%);background:#fff;border-radius:16px;box-shadow:0 10px 35px rgba(0,0,0,.15);padding:18px}\n  #giftWidget .gift-header{display:flex;align-items:center;justify-content:space-between;gap:12px}\n  #giftWidget .gift-h3{margin:0;font-size:18px}\n  #giftWidget .gift-close{border:0;background:transparent;font-size:22px;cursor:pointer;padding:6px 10px;border-radius:10px}\n  #giftWidget .gift-close:hover{background:#f2f2f2}\n\n  #giftWidget .gift-form{display:grid;gap:12px;margin-top:12px}\n  #giftWidget .gift-label{display:grid;gap:6px;font-weight:700}\n  #giftWidget .gift-input{width:100%;padding:10px 12px;border:1px solid #ddd;border-radius:10px;font-size:16px}\n  #giftWidget .gift-primary{border:0;background:#111;color:#fff;border-radius:10px;padding:12px 14px;font-weight:800;cursor:pointer}\n  #giftWidget .gift-muted{color:#666;font-size:13px}\n\n  #giftWidget .gift-toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);background:#111;color:#fff;padding:10px 12px;border-radius:10px;opacity:0;pointer-events:none;transition:opacity .2s ease;z-index:999999}\n  #giftWidget .gift-toast.show{opacity:1}\n  \n  #giftWidget .gift-bottom{\n  margin-top: 20px;\n  display: flex;\n  justify-content: center; \/* oder flex-end wenn rechtsb\u00fcndig *\/\n}\n\n  \/* Honeypot unsichtbar *\/\n  #giftWidget .gift-hp{position:absolute;left:-9999px;top:-9999px;height:0;width:0;overflow:hidden}\n  #giftWidget .gift-topbar{justify-content:flex-end}\n#giftWidget .gift-add-btn{margin-left:auto}\n  \n  \/* Mobile *\/\n@media (max-width: 520px){\n  #giftWidget .gift-topbar{\n    flex-direction: column;\n    align-items: stretch;\n  }\n\n  #giftWidget .gift-add-btn{\n    width: 100%;\n    justify-content: center;\n  }\n\n  #giftWidget .gift-grid{\n    grid-template-columns: 1fr;\n  }\n\n  #giftWidget .gift-modal{\n    width: 100%;\n    padding: 14px;\n    border-radius: 14px;\n  }\n\n  #giftWidget .gift-input{\n    font-size: 16px; \/* verhindert iOS Zoom *\/\n  }\n\n  #giftWidget .gift-primary{\n    width: 100%;\n  }\n}\n\n\n#giftWidget,\n#giftWidget *{\n  font-family: 'Baskervville', serif !important;\n}\n}\n<\/style>\n\n<script>\n(function(){\n  const GIFTS_LIST = \"https:\/\/ellafabian2026.ch\/hochzeit\/api\/gifts_list.php\";\n  const GIFT_ADD = \"https:\/\/ellafabian2026.ch\/hochzeit\/api\/gift_add.php\";\n  const GIFT_UPLOAD = \"https:\/\/ellafabian2026.ch\/hochzeit\/api\/gift_upload.php\";\n  const GIFT_CONTRIBUTE = \"https:\/\/ellafabian2026.ch\/hochzeit\/api\/gift_contribute.php\";\n\n  const widget = document.getElementById(\"giftWidget\");\n  if(!widget) return;\n\n  const grid = widget.querySelector(\"#giftGrid\");\n  const toast = widget.querySelector(\"#giftToast\");\n\n  const openAddBtn = widget.querySelector(\"#giftOpenAdd\");\n  const addOverlay = widget.querySelector(\"#giftAddOverlay\");\n  const closeAddBtn = widget.querySelector(\"#giftCloseAdd\");\n  const addForm = widget.querySelector(\"#giftAddForm\");\n  const addSubmit = widget.querySelector(\"#giftAddSubmit\");\n\n  const contribOverlay = widget.querySelector(\"#giftContribOverlay\");\n  const closeContribBtn = widget.querySelector(\"#giftCloseContrib\");\n  const contribForm = widget.querySelector(\"#giftContribForm\");\n  const contribSubmit = widget.querySelector(\"#giftContribSubmit\");\n  const contribGiftId = widget.querySelector(\"#contribGiftId\");\n  const contribGiftName = widget.querySelector(\"#contribGiftName\");\n\n  function showToast(msg){\n    toast.textContent = msg;\n    toast.classList.add(\"show\");\n    window.setTimeout(()=>toast.classList.remove(\"show\"), 2400);\n  }\n\n  function openModal(el){ el.classList.remove(\"gift-hidden\"); }\n  function closeModal(el){\n    el.classList.add(\"gift-hidden\");\n  }\n\n  addOverlay.addEventListener(\"click\",(e)=>{ if(e.target===addOverlay){ addForm.reset(); addSubmit.disabled=false; closeModal(addOverlay);} });\n  contribOverlay.addEventListener(\"click\",(e)=>{ if(e.target===contribOverlay){ contribForm.reset(); contribSubmit.disabled=false; closeModal(contribOverlay);} });\n\n  closeAddBtn.addEventListener(\"click\", ()=>{ addForm.reset(); addSubmit.disabled=false; closeModal(addOverlay); });\n  closeContribBtn.addEventListener(\"click\", ()=>{ contribForm.reset(); contribSubmit.disabled=false; closeModal(contribOverlay); });\n\n  document.addEventListener(\"keydown\",(e)=>{\n    if(e.key===\"Escape\"){\n      if(!addOverlay.classList.contains(\"gift-hidden\")){ addForm.reset(); addSubmit.disabled=false; closeModal(addOverlay); }\n      if(!contribOverlay.classList.contains(\"gift-hidden\")){ contribForm.reset(); contribSubmit.disabled=false; closeModal(contribOverlay); }\n    }\n  });\n\n  openAddBtn.addEventListener(\"click\", ()=> openModal(addOverlay));\n\n  async function loadGifts(){\n    grid.innerHTML = \"Lade Geschenke...\";\n    const res = await fetch(GIFTS_LIST);\n    const json = await res.json();\n    if(!json.ok){ grid.innerHTML = \"Konnte Geschenke nicht laden.\"; return; }\n\n    const gifts = json.gifts || [];\n    if(gifts.length === 0){\n      grid.innerHTML = \"<div class='gift-muted'>Noch keine Geschenke vorhanden.<\/div>\";\n      return;\n    }\n\n    grid.innerHTML = \"\";\n    gifts.forEach(g => {\n      const funded = Number(g.funded_amount || 0);\n      const target = g.target_amount !== null ? Number(g.target_amount) : null;\n\n      const card = document.createElement(\"div\");\n      card.className = \"gift-card\";\n\n      const img = document.createElement(\"img\");\n      img.className = \"gift-img\";\n      img.alt = g.title || \"Geschenk\";\n      img.src = g.image_url || \"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='800' height='400'%3E%3Crect width='100%25' height='100%25' fill='%23f2f2f2'\/%3E%3Ctext x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23666' font-size='26'%3EKein Bild%3C\/text%3E%3C\/svg%3E\";\n\n      const body = document.createElement(\"div\");\n      body.className = \"gift-body\";\n\n      const name = document.createElement(\"div\");\n      name.className = \"gift-name\";\n      name.textContent = g.title;\n\n\/\/ Stand-Anzeige entfernt\n\n      const btn = document.createElement(\"button\");\n      btn.className = \"gift-btn\";\n      btn.type = \"button\";\n      btn.textContent = \"Schenken\";\n      btn.addEventListener(\"click\", ()=>{\n        contribGiftId.value = g.id;\n        contribGiftName.textContent = \"Geschenk: \" + g.title;\n        openModal(contribOverlay);\n        const first = contribForm.querySelector('input[name=\"donor_name\"]');\n        if(first) first.focus();\n      });\n\n      body.appendChild(name);\n\n      body.appendChild(btn);\n\n      card.appendChild(img);\n      card.appendChild(body);\n      grid.appendChild(card);\n    });\n  }\n\n  \/\/ Geschenk hinzuf\u00fcgen: Upload (optional) -> gift_add\n  addForm.addEventListener(\"submit\", async (e)=>{\n    e.preventDefault();\n    addSubmit.disabled = true;\n\n    const fd = new FormData(addForm);\n    const title = (fd.get(\"title\") || \"\").toString().trim();\n    const target_amount = (fd.get(\"target_amount\") || \"\").toString().trim() || null;\n    const website = (fd.get(\"website\") || \"\").toString().trim(); \/\/ honeypot\n    const file = fd.get(\"image\");\n\n    try{\n      let image_url = null;\n\n      \/\/ optional upload\n      if(file && file instanceof File && file.size > 0){\n        const up = new FormData();\n        up.append(\"image\", file);\n\n        const upRes = await fetch(GIFT_UPLOAD, { method:\"POST\", body: up });\n        const upJson = await upRes.json().catch(()=>({ok:false, error:\"Ungueltige Upload-Antwort.\"}));\n        if(!upRes.ok || !upJson.ok){\n          showToast(upJson.error || \"Upload fehlgeschlagen.\");\n          addSubmit.disabled = false;\n          return;\n        }\n        image_url = upJson.image_url;\n      }\n\n      const payload = { title, image_url, target_amount, website };\n\n      const res = await fetch(GIFT_ADD, {\n        method:\"POST\",\n        headers:{\"Content-Type\":\"application\/json\"},\n        body: JSON.stringify(payload)\n      });\n      const json = await res.json().catch(()=>({ok:false, error:\"Ungueltige Server-Antwort.\"}));\n\n      if(!res.ok || !json.ok){\n        showToast(json.error || \"Konnte Geschenk nicht speichern.\");\n        addSubmit.disabled = false;\n        return;\n      }\n\n      showToast(\"Geschenk hinzugef\u00fcgt.\");\n      addForm.reset();\n      addSubmit.disabled = false;\n      closeModal(addOverlay);\n      await loadGifts();\n    }catch{\n      showToast(\"Netzwerkfehler. Bitte spaeter erneut versuchen.\");\n      addSubmit.disabled = false;\n    }\n  });\n\n  \/\/ Beitrag leisten\n  contribForm.addEventListener(\"submit\", async (e)=>{\n    e.preventDefault();\n    contribSubmit.disabled = true;\n\n    const fd = new FormData(contribForm);\n    const payload = {\n      gift_id: parseInt((fd.get(\"gift_id\") || \"0\").toString(), 10),\n      donor_name: (fd.get(\"donor_name\") || \"\").toString().trim(),\n      donor_email: (fd.get(\"donor_email\") || \"\").toString().trim(),\n      amount: (fd.get(\"amount\") || \"\").toString().trim(),\n      website: (fd.get(\"website\") || \"\").toString().trim()\n    };\n\n    try{\n      const res = await fetch(GIFT_CONTRIBUTE, {\n        method:\"POST\",\n        headers:{\"Content-Type\":\"application\/json\"},\n        body: JSON.stringify(payload)\n      });\n      const json = await res.json().catch(()=>({ok:false, error:\"Ungueltige Server-Antwort.\"}));\n\n      if(!res.ok || !json.ok){\n        showToast(json.error || \"Konnte Beitrag nicht speichern.\");\n        contribSubmit.disabled = false;\n        return;\n      }\n\n      showToast(\"Danke! Beitrag gespeichert.\");\n      contribForm.reset();\n      contribSubmit.disabled = false;\n      closeModal(contribOverlay);\n      await loadGifts();\n    }catch{\n      showToast(\"Netzwerkfehler. Bitte spaeter erneut versuchen.\");\n      contribSubmit.disabled = false;\n    }\n  });\n\n  loadGifts();\n})();\n<\/script>\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-690f2bd e-flex e-con-boxed jltma-glass-effect-no e-con e-parent\" data-id=\"690f2bd\" 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-bf45e6d jltma-glass-effect-no elementor-widget elementor-widget-spacer\" data-id=\"bf45e6d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\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-65e2fbf e-flex e-con-boxed jltma-glass-effect-no e-con e-parent\" data-id=\"65e2fbf\" 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-7a54d41 jltma-glass-effect-no elementor-widget elementor-widget-html\" data-id=\"7a54d41\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- EF Footer Kontakt + Pop-up -->\n<div class=\"ef-footer\" id=\"efFooter\">\n  <div class=\"ef-footer__inner\">\n    <button class=\"ef-btn\" type=\"button\" id=\"efOpenModal\" aria-haspopup=\"dialog\" aria-controls=\"efModal\">\n      Kontakt & Informationen\n    <\/button>\n  <\/div>\n\n  <!-- Modal -->\n  <div class=\"ef-modal\" id=\"efModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"efModalTitle\" aria-hidden=\"true\">\n    <div class=\"ef-modal__backdrop\" data-ef-close><\/div>\n\n    <div class=\"ef-modal__panel\" role=\"document\">\n      <div class=\"ef-modal__header\">\n        <h3 class=\"ef-modal__title\" id=\"efModalTitle\">Kontakt & Informationen<\/h3>\n        <button class=\"ef-iconbtn\" type=\"button\" aria-label=\"Schliessen\" data-ef-close>\n          <span aria-hidden=\"true\">\u00d7<\/span>\n        <\/button>\n      <\/div>\n\n      <div class=\"ef-modal__content\">\n        <div class=\"ef-cards\">\n\n          <!-- E-Mail -->\n          <div class=\"ef-card\">\n            <div class=\"ef-card__label\">E-Mail<\/div>\n            <div class=\"ef-card__value\">\n              <a class=\"ef-link\" href=\"mailto:hochzeit@ellafabian2026.ch\" id=\"efMailText\">\n                hochzeit@ellafabian2026.ch\n              <\/a>\n              <button class=\"ef-mini\" type=\"button\" data-ef-copy=\"#efMailText\">Kopieren<\/button>\n            <\/div>\n          <\/div>\n\n          <!-- Hochzeitsort -->\n          <div class=\"ef-card\">\n            <div class=\"ef-card__label\">Hochzeitsort<\/div>\n            <div class=\"ef-card__value\">\n              Nals, S\u00fcdtirol<br>\n              <span class=\"ef-muted\">29. August 2026<\/span>\n            <\/div>\n          <\/div>\n\n         <div class=\"ef-card\">\n  <div class=\"ef-card__label\">Bankverbindung<\/div>\n  <div class=\"ef-card__value\">\n    <div class=\"ef-kv\">\n\n      <div class=\"ef-kv__row\">\n        <span class=\"ef-kv__k\">IBAN<\/span>\n        <span class=\"ef-kv__v\" id=\"efIbanText\">CH85 0079 0042 6204 6224 3<\/span>\n        <button class=\"ef-mini\" type=\"button\" data-ef-copy=\"#efIbanText\">Kopieren<\/button>\n      <\/div>\n\n      <div class=\"ef-kv__row\">\n        <span class=\"ef-kv__k\">Empf\u00e4nger<\/span>\n        <span class=\"ef-kv__v\" id=\"efNameText\">Ella Hagmannn<\/span>\n        <button class=\"ef-mini\" type=\"button\" data-ef-copy=\"#efNameText\">Kopieren<\/button>\n      <\/div>\n\n      <div class=\"ef-kv__row\">\n  <span class=\"ef-kv__k\">Bank<\/span>\n  <span class=\"ef-kv__v\" id=\"efBankText\">\n    Bernische Kantonalbank AG<br>\n    Bundesplatz 8<br>\n    3001 Bern\n  <\/span>\n  <button class=\"ef-mini\" type=\"button\" data-ef-copy=\"#efBankText\">Kopieren<\/button>\n<\/div>\n\n    <\/div>\n  <\/div>\n<\/div>\n\n        <\/div>\n\n        <div class=\"ef-toast\" id=\"efToast\" role=\"status\" aria-live=\"polite\"><\/div>\n      <\/div>\n\n      <div class=\"ef-modal__footer\">\n        <button class=\"ef-btn ef-btn--ghost\" type=\"button\" data-ef-close>Schliessen<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<style>\n  .ef-footer {\n    width: 100%;\n    margin-top: 24px;\n  }\n\n  \/* Kein Hintergrund mehr *\/\n  .ef-footer__inner {\n    display: flex;\n    justify-content: center;\n    padding: 20px 12px;\n    border-top: 1px solid rgba(0,0,0,0.08);\n  }\n\n.ef-btn {\n  font: inherit;\n  font-size: 0.9em;\n  letter-spacing: 0.03em;\n  padding: 6px 14px;\n  border-radius: 999px;\n  border: 1px solid rgba(0,0,0,0.18);\n  background: transparent;\n  color: inherit;\n  cursor: pointer;\n  transition: all 180ms ease;\n}\n\n.ef-btn:hover {\n  background: rgba(0,0,0,0.05);\n}\n\n  .ef-btn--ghost {\n    background: transparent;\n  }\n\n  \/* Modal *\/\n  .ef-modal {\n    position: fixed;\n    inset: 0;\n    z-index: 999999;\n    display: none;\n  }\n\n  .ef-modal.is-open {\n    display: block;\n  }\n\n  .ef-modal__backdrop {\n    position: absolute;\n    inset: 0;\n    background: rgba(0,0,0,0.45);\n  }\n\n  .ef-modal__panel {\n    position: relative;\n    width: min(680px, calc(100% - 28px));\n    margin: 10vh auto;\n    border-radius: 20px;\n    background: rgba(255,255,255,0.95);\n    border: 1px solid rgba(0,0,0,0.08);\n    box-shadow: 0 20px 60px rgba(0,0,0,0.25);\n    overflow: hidden;\n  }\n\n  .ef-modal__header,\n  .ef-modal__footer {\n    padding: 16px;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    border-bottom: 1px solid rgba(0,0,0,0.08);\n  }\n\n  .ef-modal__footer {\n    border-top: 1px solid rgba(0,0,0,0.08);\n    border-bottom: none;\n    justify-content: flex-end;\n  }\n\n  .ef-modal__title {\n    margin: 0;\n    font: inherit;\n    font-weight: 600;\n  }\n\n  .ef-iconbtn {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border: 1px solid rgba(0,0,0,0.12);\n  background: transparent;\n  width: 36px;\n  height: 36px;\n  border-radius: 10px;\n  cursor: pointer;\n  padding: 0;\n  line-height: 1;\n  font-size: 20px;\n}\n\n  .ef-modal__content {\n    padding: 18px;\n  }\n\n  .ef-cards {\n    display: grid;\n    gap: 14px;\n  }\n\n  .ef-card {\n    border: 1px solid rgba(0,0,0,0.08);\n    border-radius: 16px;\n    padding: 14px;\n  }\n\n  .ef-card__label {\n    font-size: 0.9em;\n    opacity: 0.7;\n    margin-bottom: 6px;\n  }\n\n  .ef-card__value {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    gap: 10px;\n    flex-wrap: wrap;\n  }\n\n  .ef-link {\n    color: inherit;\n    text-decoration: underline;\n  }\n\n  .ef-mini {\n    font: inherit;\n    font-size: 0.85em;\n    padding: 6px 12px;\n    border-radius: 999px;\n    border: 1px solid rgba(0,0,0,0.15);\n    background: transparent;\n    cursor: pointer;\n  }\n\n  .ef-mini:hover {\n    background: rgba(0,0,0,0.05);\n  }\n\n  .ef-kv {\n    width: 100%;\n    display: grid;\n    gap: 10px;\n  }\n\n  .ef-kv__row {\n    display: grid;\n    grid-template-columns: 120px 1fr auto;\n    gap: 10px;\n    align-items: center;\n  }\n\n  .ef-toast {\n    margin-top: 12px;\n    font-size: 0.9em;\n    opacity: 0;\n    transition: opacity 180ms ease;\n  }\n\n  .ef-toast.is-on {\n    opacity: 0.8;\n  }\n\n  @media (max-width: 520px) {\n    .ef-kv__row {\n      grid-template-columns: 1fr;\n    }\n  }\n<\/style>\n\n<script>\n(function () {\n  const openBtn = document.getElementById('efOpenModal');\n  const modal = document.getElementById('efModal');\n  const footerRoot = document.getElementById('efFooter');\n  const toast = document.getElementById('efToast');\n\n  let lastFocused = null;\n\n  function openModal() {\n    lastFocused = document.activeElement;\n    modal.classList.add('is-open');\n    document.documentElement.style.overflow = 'hidden';\n  }\n\n  function closeModal() {\n    modal.classList.remove('is-open');\n    document.documentElement.style.overflow = '';\n    if (lastFocused) lastFocused.focus();\n  }\n\n  function showToast(msg) {\n    toast.textContent = msg;\n    toast.classList.add('is-on');\n    setTimeout(() => toast.classList.remove('is-on'), 1200);\n  }\n\n  openBtn.addEventListener('click', openModal);\n\n  modal.addEventListener('click', (e) => {\n    if (e.target.matches('[data-ef-close]') || e.target.closest('[data-ef-close]')) {\n      closeModal();\n    }\n  });\n\n  window.addEventListener('keydown', (e) => {\n    if (e.key === 'Escape') closeModal();\n  });\n\n  footerRoot.addEventListener('click', async (e) => {\n    const btn = e.target.closest('[data-ef-copy]');\n    if (!btn) return;\n\n    const el = footerRoot.querySelector(btn.dataset.efCopy);\n    if (!el) return;\n\n    const text = el.tagName === 'A'\n      ? el.getAttribute('href').replace('mailto:', '')\n      : el.textContent;\n\n    await navigator.clipboard.writeText(text.trim());\n    showToast('Kopiert');\n  });\n})();\n<\/script>\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\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Anmeldung Auf dieser Seite findet ihr die Anmeldung zu unserer Hochzeit. Wenn ihr eine Einladung per Brief erhalten habt, k\u00f6nnt ihr euch unten ganz einfach \u00fcber das Anmeldeformular anmelden. Bitte f\u00fcllt alle erforderlichen Angaben aus, damit wir den Tag mit euch optimal planen k\u00f6nnen. Wir freuen uns sehr, diesen besonderen Tag gemeinsam mit euch zu [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-140","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ellafabian2026.ch\/index.php?rest_route=\/wp\/v2\/pages\/140","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ellafabian2026.ch\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ellafabian2026.ch\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ellafabian2026.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ellafabian2026.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=140"}],"version-history":[{"count":184,"href":"https:\/\/ellafabian2026.ch\/index.php?rest_route=\/wp\/v2\/pages\/140\/revisions"}],"predecessor-version":[{"id":606,"href":"https:\/\/ellafabian2026.ch\/index.php?rest_route=\/wp\/v2\/pages\/140\/revisions\/606"}],"wp:attachment":[{"href":"https:\/\/ellafabian2026.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}