{"id":9,"date":"2025-11-11T16:32:40","date_gmt":"2025-11-11T15:32:40","guid":{"rendered":"http:\/\/lazabawa.com.pl\/?page_id=9"},"modified":"2025-11-16T17:57:25","modified_gmt":"2025-11-16T16:57:25","slug":"strona-glowna","status":"publish","type":"page","link":"https:\/\/lazabawa.com.pl\/","title":{"rendered":"Strona g\u0142\u00f3wna"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"9\" class=\"elementor elementor-9\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bc48819 e-flex e-con-boxed e-con e-parent\" data-id=\"bc48819\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-136f39d elementor-widget elementor-widget-html\" data-id=\"136f39d\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- Paste this entire block into your Elementor HTML widget (it includes the JS module). -->\n<!DOCTYPE html>\n<html lang=\"pl\">\n<head>\n  <meta charset=\"utf-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" \/>\n  <title>Weekend urodzinowy \u2014 B\u00edl\u00fd Potok<\/title>\n  <!-- Your CSS file reference (we'll send CSS separately) -->\n  <link rel=\"stylesheet\" href=\"style.css\" \/>\n<\/head>\n<body>\n\n  <!-- HERO (glass card) -->\n  <header class=\"hero\">\n    <div class=\"hero-card\">\n      <h1>Weekend urodzinowy \ud83c\udf89<\/h1>\n      <p class=\"subtitle\">28 \u2013 30 listopada | B\u00edl\u00fd Potok, Czechy \ud83c\udde8\ud83c\uddff<\/p>\n      <p class=\"intro\">\n        No wi\u0119c sta\u0142o si\u0119... ko\u0144cz\u0119 <strong>25 lat<\/strong> \ud83d\ude05\n        Z tej okazji zapraszam Ci\u0119 na <strong>imprez\u0119 urodzinow\u0105<\/strong> w drewnianym domku w g\u00f3rach \ud83c\udfd4\ufe0f\n        B\u0119dzie dobra ekipa (reszta plan\u00f3w w trakcie ustalania).<br><br>\n        B\u0119dzie mi turbo mi\u0142o, je\u015bli do\u0142\u0105czysz! \ud83d\udc99\n      <\/p>\n\n      <div class=\"hero-actions\">\n        <button id=\"rsvpBtn\" class=\"btn-primary\">Potwierd\u017a udzia\u0142 \u2705<\/button>\n        <div class=\"countdown-badge\" id=\"countdownBadge\" aria-hidden=\"true\"><\/div>\n      <\/div>\n    <\/div>\n  <\/header>\n\n  <main class=\"container\">\n\n    <!-- Countdown -->\n    <section class=\"card countdown-card\" aria-labelledby=\"countdownTitle\">\n      <h2 id=\"countdownTitle\">\u23f1\ufe0f Odliczanie do wyjazdu<\/h2>\n      <div class=\"countdown-value\" id=\"countdownValue\">\u2014<\/div>\n    <\/section>\n\n    <!-- Full photo (you two) -->\n    <section class=\"card photo-only\">\n      <img decoding=\"async\" src=\"https:\/\/lazabawa.com.pl\/wp-content\/uploads\/2025\/11\/photo_2025-11-11-18.50.01.jpeg\" alt=\"Przemek i Karolina\" class=\"full-photo\" \/>\n    <\/section>\n\n    <!-- Timeline (vertical) -->\n    <section class=\"card timeline-card\">\n      <h2>\ud83d\uddd3\ufe0f Plan weekendu<\/h2>\n      <div class=\"timeline\" id=\"timeline\">\n        <div class=\"timeline-item\" data-order=\"1\">\n          <div class=\"dot\"><\/div>\n          <div class=\"timeline-body\">\n            <h4>Pi\u0105tek<\/h4>\n            <p>Przyjazd, impreza \ud83e\udd42<\/p>\n          <\/div>\n        <\/div>\n\n        <div class=\"timeline-item\" data-order=\"2\">\n          <div class=\"dot\"><\/div>\n          <div class=\"timeline-body\">\n            <h4>Sobota<\/h4>\n            <p>Szlak g\u00f3rski (dla ch\u0119tnych) lub relax \ud83d\udca6<\/p>\n          <\/div>\n        <\/div>\n\n        <div class=\"timeline-item\" data-order=\"3\">\n          <div class=\"dot\"><\/div>\n          <div class=\"timeline-body\">\n            <h4>Niedziela<\/h4>\n            <p>Wsp\u00f3lne \u015bniadanie i powr\u00f3t \ud83c\udf73 <span class=\"muted\">Reszta do dogadania<\/span><\/p>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/section>\n\n    <!-- Check-in \/ out -->\n    <section class=\"card check-row\">\n      <div class=\"check-card\">\n        <h3>\ud83d\udd53 Zameldowanie<\/h3>\n        <p>28 listopada (pi\u0105tek), od 15:00<\/p>\n      <\/div>\n      <div class=\"check-card\">\n        <h3>\ud83d\udd5a Wymeldowanie<\/h3>\n        <p>30 listopada (niedziela), do 11:00<\/p>\n      <\/div>\n    <\/section>\n\n    <!-- Lokalizacja: galerie + mapka -->\n    <section class=\"card gallery-section\">\n      <h2>\ud83d\udcf8 Lokalizacja<\/h2>\n\n      <div class=\"carousel\" id=\"houseCarousel\" aria-hidden=\"false\">\n        <div class=\"carousel-track\">\n          <img decoding=\"async\" src=\"http:\/\/lazabawa.com.pl\/wp-content\/uploads\/2025\/11\/IMG_4934.jpg\" alt=\"Domek 1\" \/>\n          <img decoding=\"async\" src=\"http:\/\/lazabawa.com.pl\/wp-content\/uploads\/2025\/11\/IMG_4935.jpg\" alt=\"Domek 2\" \/>\n          <img decoding=\"async\" src=\"http:\/\/lazabawa.com.pl\/wp-content\/uploads\/2025\/11\/IMG_4936.jpg\" alt=\"Domek 3\" \/>\n          <img decoding=\"async\" src=\"http:\/\/lazabawa.com.pl\/wp-content\/uploads\/2025\/11\/IMG_4937.jpg\" alt=\"Domek 4\" \/>\n          <img decoding=\"async\" src=\"http:\/\/lazabawa.com.pl\/wp-content\/uploads\/2025\/11\/IMG_4938.jpg\" alt=\"Domek 5\" \/>\n        <\/div>\n      <\/div>\n\n      <div class=\"map-wrapper\">\n        <iframe src=\"https:\/\/www.google.com\/maps?q=B\u00edl\u00fd%20Potok%20432,%20Libereck\u00fd%20kraj,%20Czechy&output=embed\"\n          width=\"100%\" height=\"300\" style=\"border:0;\" allowfullscreen=\"\" loading=\"lazy\"><\/iframe>\n      <\/div>\n    <\/section>\n\n    <!-- RSVP -->\n    <section class=\"card rsvp-card\" id=\"rsvpSection\">\n      <h2>\ud83d\udc65 Lista go\u015bci<\/h2>\n\n      <p class=\"rsvp-instruction\">\n        Kliknij swoje imi\u0119, by potwierdzi\u0107 udzia\u0142 <strong>\u2705<\/strong> lub odm\u00f3wi\u0107 <strong>\u274c<\/strong>.\n      <\/p>\n\n      <!-- Progress -->\n      <div class=\"progress-wrap\">\n        <div class=\"progress-label\">Potwierdzone: <span id=\"confirmedCount\">0<\/span> \/ <span id=\"totalCount\">0<\/span><\/div>\n        <div class=\"progress-bar\">\n          <div class=\"progress-fill\" id=\"progressFill\"><\/div>\n        <\/div>\n      <\/div>\n\n      <!-- Groups -->\n      <div class=\"rsvp-grid\">\n        <div class=\"group-card\">\n          <h3 class=\"group-title\">\u2705 Potwierdzeni <span class=\"count\" id=\"countConfirmed\">0<\/span><\/h3>\n          <ul class=\"guest-list\" id=\"list-confirmed\"><\/ul>\n        <\/div>\n\n        <div class=\"group-card\">\n          <h3 class=\"group-title\">\u23f3 Oczekuj\u0105 <span class=\"count\" id=\"countPending\">0<\/span><\/h3>\n          <ul class=\"guest-list\" id=\"list-pending\"><\/ul>\n        <\/div>\n\n        <div class=\"group-card\">\n          <h3 class=\"group-title\">\u274c Nie jad\u0105 <span class=\"count\" id=\"countDenied\">0<\/span><\/h3>\n          <ul class=\"guest-list\" id=\"list-denied\"><\/ul>\n        <\/div>\n      <\/div>\n\n      <!-- hidden original list (keeps markup editable in Elementor if needed) -->\n      <ul id=\"guest-list\" style=\"display:none;\">\n        <li data-name=\"Przemek Ma\u0142ek\">\ud83c\udf82 Przemek Ma\u0142ek<\/li>\n        <li data-name=\"Karolina Gowin\">\ud83d\udc8d Karolina Gowin<\/li>\n        <li data-name=\"Kacper Puda\">\ud83e\udd19\ud83c\udffc Kacper Puda<\/li>\n        <li data-name=\"Weronika Stankiewicz\">\ud83d\udc09 Weronika Stankiewicz<\/li>\n        <li data-name=\"Aleksandra Gude\u0142ajska\">\ud83e\udee6 Aleksandra Gude\u0142ajska<\/li>\n        <li data-name=\"Julia Jachimowicz\">\ud83d\udc84 Julia Jachimowicz<\/li>\n        <li data-name=\"Ksawier Ku\u017aniewski\">\ud83e\udd43 Ksawier Ku\u017aniewski<\/li>\n        <li data-name=\"Natalia Zabieg\u0142a\">\ud83d\udc85 Natalia Zabieg\u0142a<\/li>\n        <li data-name=\"Martyna Stangret\">\ud83d\udc8d Martyna Stangret<\/li>\n        <li data-name=\"Micha\u0142 Drozdek\">\ud83e\udd42 Micha\u0142 Drozdek<\/li>\n        <li data-name=\"Elwira Ma\u0142y\">\ud83d\udc0e Elwira Ma\u0142y<\/li>\n        <li data-name=\"Kamil O\u015bli\u017alok\">\ud83e\udde2 Kamil O\u015bli\u017alok<\/li>\n        <li data-name=\"Kinia Bancerz\">\ud83c\udf38 Kinia Bancerz<\/li>\n        <li data-name=\"Samuel Ma\u0142y\">\ud83c\udfc9 Samuel Ma\u0142y\n        <li data-name=\"S\u0142awek Ma\u0142ek\">\ud83e\udee1 S\u0142awek Ma\u0142ek<\/li>\n        <\/li>\n      <\/ul>\n    <\/section>\n\n    <!-- FAQ -->\n    <section class=\"card faq-card\" id=\"faq\">\n      <h2>\u2753 Najcz\u0119\u015bciej Zadawane Pytania (FAQ)<\/h2>\n\n      <div class=\"faq-item\">\n        <h4>1. Jak powinienem\/am si\u0119 ubra\u0107?<\/h4>\n        <p>Ubi\u00f3r po prostu \u0142adny i wygodny. Bez tematyki \u2014 lu\u017any dresscode.<\/p>\n      <\/div>\n\n      <div class=\"faq-item\">\n        <h4>2. Transport<\/h4>\n        <p>Najlepiej ustali\u0107 wsp\u00f3lne przejazdy 3\u20134 autami, \u017ceby nie bra\u0107 zbyt wielu samochod\u00f3w.<\/p>\n      <\/div>\n\n      <div class=\"faq-item\">\n        <h4>3. Co spakowa\u0107?<\/h4>\n        <p>Ubranie na wiecz\u00f3r, co\u015b wygodnego do domku, co\u015b na ewentualny szlak, kosmetyki itp.<\/p>\n      <\/div>\n    <\/section>\n\n  <\/main>\n\n  <footer>\n    <p>\ud83d\udca1 Stworzone przez Przemka | Birthday Weekend Team 2025<\/p>\n  <\/footer>\n\n  <!-- Popup (hidden initially) -->\n  <div id=\"popup\" class=\"popup hidden\" role=\"dialog\" aria-modal=\"true\" aria-hidden=\"true\">\n    <div class=\"popup-emoji\" id=\"popupEmoji\">\ud83c\udf89<\/div>\n    <div class=\"popup-text\" id=\"popupText\">Dzi\u0119ki!<\/div>\n  <\/div>\n\n  <!-- Confetti canvas -->\n  <canvas id=\"confettiCanvas\" style=\"position:fixed;left:0;top:0;pointer-events:none;z-index:9998;\"><\/canvas>\n\n  <!-- JS: Firebase + UI logic + confetti + timeline animations -->\n  <script type=\"module\">\n  \/\/ ---------------------------\n  \/\/ 1) Firebase init (REPLACE with your config)\n  \/\/ ---------------------------\n  import { initializeApp } from \"https:\/\/www.gstatic.com\/firebasejs\/10.12.0\/firebase-app.js\";\n  import { getDatabase, ref, set, onValue } from \"https:\/\/www.gstatic.com\/firebasejs\/10.12.0\/firebase-database.js\";\n\n  const firebaseConfig = {\n    apiKey: \"TU_WKLEJ_SW\u00d3J_API_KEY\",\n    authDomain: \"birthday-weekend-308c3.firebaseapp.com\",\n    databaseURL: \"https:\/\/birthday-weekend-308c3-default-rtdb.europe-west1.firebasedatabase.app\",\n    projectId: \"birthday-weekend-308c3\"\n  };\n\n  const app = initializeApp(firebaseConfig);\n  const db = getDatabase(app);\n  const refGuests = ref(db, \"guestStatuses\");\n\n  \/\/ ---------------------------\n  \/\/ 2) DOM refs\n  \/\/ ---------------------------\n  const hiddenList = Array.from(document.querySelectorAll(\"#guest-list li\"));\n  const listConfirmed = document.getElementById(\"list-confirmed\");\n  const listPending   = document.getElementById(\"list-pending\");\n  const listDenied    = document.getElementById(\"list-denied\");\n  const totalCountEl  = document.getElementById(\"totalCount\");\n  const confirmedCountEl = document.getElementById(\"confirmedCount\");\n  const countConfirmed = document.getElementById(\"countConfirmed\");\n  const countPending   = document.getElementById(\"countPending\");\n  const countDenied    = document.getElementById(\"countDenied\");\n  const progressFill   = document.getElementById(\"progressFill\");\n  const popup = document.getElementById(\"popup\");\n  const popupText = document.getElementById(\"popupText\");\n  const popupEmoji = document.getElementById(\"popupEmoji\");\n  const confettiCanvas = document.getElementById(\"confettiCanvas\");\n\n  \/\/ set total\n  const TOTAL = hiddenList.length;\n  totalCountEl.textContent = TOTAL;\n\n  \/\/ ---------------------------\n  \/\/ 3) UI update from DB (live)\n  \/\/ ---------------------------\n  onValue(refGuests, (snap) => {\n    const data = snap.val() || {};\n    \/\/ clear lists\n    listConfirmed.innerHTML = \"\";\n    listPending.innerHTML = \"\";\n    listDenied.innerHTML = \"\";\n\n    let confirmed = 0, pending = 0, denied = 0;\n\n    hiddenList.forEach(li => {\n      const name = li.dataset.name.trim();\n      const emoji = (li.textContent || \"\").trim().split(\" \")[0] || \"\";\n      const status = data[name]?.status || \"pending\";\n\n      const item = document.createElement(\"li\");\n      item.className = \"guest-item \" + status;\n      item.dataset.name = name;\n      item.tabIndex = 0;\n      item.innerHTML = `<span class=\"left\">${emoji} <span class=\"guest-name\">${escapeHtml(name)}<\/span><\/span>\n                         <span class=\"status-icon\">${status === \"confirmed\" ? \"\u2705\" : status === \"denied\" ? \"\u274c\" : \"\u23f3\"}<\/span>`;\n\n      \/\/ click handler\n      item.addEventListener(\"click\", () => handleGuestClick(name, status));\n      item.addEventListener(\"keydown\", (e) => { if (e.key === \"Enter\") handleGuestClick(name, status); });\n\n      if (status === \"confirmed\") { listConfirmed.appendChild(item); confirmed++; }\n      else if (status === \"denied\") { listDenied.appendChild(item); denied++; }\n      else { listPending.appendChild(item); pending++; }\n    });\n\n    \/\/ update counts + progress\n    countConfirmed.textContent = confirmed;\n    countPending.textContent = pending;\n    countDenied.textContent = denied;\n    confirmedCountEl.textContent = confirmed;\n    progressFill.style.width = ((confirmed \/ TOTAL) * 100) + \"%\";\n  }, (err) => {\n    console.error(\"Firebase onValue error:\", err);\n  });\n\n  \/\/ ---------------------------\n  \/\/ 4) handle user click: confirm \/ deny \/ reset\n  \/\/ ---------------------------\n  async function handleGuestClick(name, current) {\n    \/\/ if already confirmed\/denied -> ask to reset\n    if (current === \"confirmed\" || current === \"denied\") {\n      const reset = confirm(`${name} ma ju\u017c status \"${current}\". Zresetowa\u0107 do oczekiwania (\u23f3)?`);\n      if (!reset) return;\n      await set(ref(db, \"guestStatuses\/\" + encodeKey(name)), { status: \"pending\", ts: Date.now() });\n      showPopup(\"Status zresetowany\", \"\u21ba\", false);\n      return;\n    }\n\n    \/\/ else prompt confirm\/deny\n    const answer = confirm(`Czy ${name} potwierdza udzia\u0142? (OK = tak, Anuluj = nie)`);\n    const newStatus = answer ? \"confirmed\" : \"denied\";\n\n    await set(ref(db, \"guestStatuses\/\" + encodeKey(name)), { status: newStatus, ts: Date.now() });\n    if (newStatus === \"confirmed\") {\n      confettiBurst();\n      showPopup(\"Dzi\u0119ki za potwierdzenie! \ud83c\udf89\", \"\ud83c\udf89\", true);\n    } else {\n      showPopup(\"Dzi\u0119kujemy za info \ud83d\ude22\", \"\ud83d\udcac\", false);\n    }\n  }\n\n  \/\/ Helper: escape for innerHTML\n  function escapeHtml(str) {\n    return str.replace(\/[&<>\"']\/g, (m) => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[m]));\n  }\n\n  \/\/ Encode DB key (replace . $ # [ ] \/) \u2014 Firebase RTDB key rules\n  function encodeKey(name) {\n    return name.replace(\/[.$#[\\]\/]\/g, \"_\");\n  }\n\n  \/\/ ---------------------------\n  \/\/ 5) popup + confetti\n  \/\/ ---------------------------\n  function showPopup(text, emoji = \"\ud83c\udf89\", positive = true) {\n    popupText.textContent = text;\n    popupEmoji.textContent = emoji;\n    popup.classList.remove(\"hidden\");\n    popup.setAttribute(\"aria-hidden\",\"false\");\n    setTimeout(() => {\n      popup.classList.add(\"hidden\");\n      popup.setAttribute(\"aria-hidden\",\"true\");\n    }, 2200);\n  }\n\n  \/\/ Minimal confetti - lightweight\n  function confettiBurst() {\n    const ctx = confettiCanvas.getContext(\"2d\");\n    resizeCanvas();\n    const W = confettiCanvas.width;\n    const H = confettiCanvas.height;\n    const pieces = [];\n    const colors = [\"#ff7ab6\",\"#ffb86b\",\"#7ee8fa\",\"#80ff72\",\"#c7b3ff\"];\n    for (let i=0;i<80;i++){\n      pieces.push({\n        x: Math.random()*W,\n        y: -Math.random()*H*0.5,\n        vx: (Math.random()-0.5)*6,\n        vy: 2 + Math.random()*6,\n        r: 4 + Math.random()*6,\n        color: colors[Math.floor(Math.random()*colors.length)],\n        rot: Math.random()*360,\n        vr: (Math.random()-0.5)*10\n      });\n    }\n    let t = 0;\n    function frame(){\n      t++;\n      ctx.clearRect(0,0,W,H);\n      pieces.forEach(p=>{\n        p.x += p.vx;\n        p.y += p.vy;\n        p.vy += 0.06;\n        p.rot += p.vr;\n        ctx.save();\n        ctx.translate(p.x,p.y);\n        ctx.rotate(p.rot * Math.PI\/180);\n        ctx.fillStyle = p.color;\n        ctx.fillRect(-p.r\/2, -p.r\/2, p.r, p.r*1.8);\n        ctx.restore();\n      });\n      if (t < 120) requestAnimationFrame(frame);\n      else ctx.clearRect(0,0,W,H);\n    }\n    frame();\n  }\n\n  function resizeCanvas(){\n    confettiCanvas.width = window.innerWidth;\n    confettiCanvas.height = window.innerHeight;\n  }\n  window.addEventListener(\"resize\", resizeCanvas);\n  resizeCanvas();\n\n  \/\/ ---------------------------\n  \/\/ 6) Auto carousel\n  \/\/ ---------------------------\n  (function setupCarousel(){\n    const track = document.querySelector(\"#houseCarousel .carousel-track\");\n    if (!track) return;\n    const slides = track.querySelectorAll(\"img\");\n    let idx = 0;\n    \/\/ ensure track width: handled in CSS flex\n    setInterval(()=> {\n      if (slides.length < 2) return;\n      idx = (idx + 1) % slides.length;\n      track.style.transform = `translateX(-${idx * 100}%)`;\n    }, 4000);\n  })();\n\n  \/\/ ---------------------------\n  \/\/ 7) Countdown (to your event start) - set date here\n  \/\/ ---------------------------\n  (function setupCountdown(){\n    \/\/ Set event start date\/time (local) -> adjust if necessary\n    const eventDate = new Date(\"2025-11-28T15:00:00\"); \/\/ 28 Nov 15:00\n    const el = document.getElementById(\"countdownValue\");\n    const badge = document.getElementById(\"countdownBadge\");\n\n    function tick(){\n      const now = new Date();\n      let diff = Math.max(0, Math.floor((eventDate - now)\/1000)); \/\/ seconds\n      const days = Math.floor(diff \/ 86400); diff -= days*86400;\n      const hours = Math.floor(diff \/ 3600); diff -= hours*3600;\n      const minutes = Math.floor(diff \/ 60); diff -= minutes*60;\n      const seconds = diff;\n      el.textContent = `${days} dni, ${hours} godzin, ${minutes} min, ${seconds} sek`;\n      badge.textContent = `${days}d ${hours}h`;\n    }\n    tick();\n    setInterval(tick, 1000);\n  })();\n\n  \/\/ ---------------------------\n  \/\/ 8) Timeline animation (IntersectionObserver)\n  \/\/ ---------------------------\n  (function timelineObserver(){\n    const items = document.querySelectorAll(\".timeline-item\");\n    if (!items.length) return;\n    const obs = new IntersectionObserver((entries) => {\n      entries.forEach(ent => {\n        if (ent.isIntersecting) {\n          ent.target.classList.add(\"inview\");\n        }\n      });\n    }, { threshold: 0.25 });\n    items.forEach(i => obs.observe(i));\n  })();\n\n  \/\/ ---------------------------\n  \/\/ 9) Scroll-to-RSVP button\n  \/\/ ---------------------------\n  document.getElementById(\"rsvpBtn\").addEventListener(\"click\", (e) => {\n    e.preventDefault();\n    const el = document.getElementById(\"rsvpSection\");\n    if (!el) return;\n    el.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n    \/\/ focus first pending or first item for keyboard users\n    setTimeout(()=> {\n      const firstPending = document.querySelector(\"#list-pending .guest-item\") || document.querySelector(\".guest-item\");\n      if (firstPending) firstPending.focus();\n    }, 600);\n  });\n\n  \/\/ ---------------------------\n  \/\/ 10) Utility: on load, ensure initial DB entries exist (optional)\n  \/\/   -> we don't overwrite existing statuses, but ensure keys exist for each guest\n  \/\/ ---------------------------\n  (async function ensureGuestNodes(){\n    try {\n      const resp = await fetch(`${firebaseConfig.databaseURL}\/guestStatuses.json`);\n      const data = await resp.json();\n      const updates = {};\n      hiddenList.forEach(li => {\n        const name = li.dataset.name.trim();\n        const key = encodeKey(name);\n        if (!data || !data[name]) {\n          \/\/ only create if missing\n          updates[key] = { status: \"pending\", ts: Date.now() };\n        }\n      });\n      \/\/ write if there are missing\n      if (Object.keys(updates).length) {\n        \/\/ Use set per guest to avoid replacing entire tree\n        for (const k of Object.keys(updates)) {\n          await set(ref(db, \"guestStatuses\/\" + k), updates[k]);\n        }\n      }\n    } catch (err) {\n      \/\/ ignore - user may not have DB yet\n      console.warn(\"ensureGuestNodes error (ok if no DB yet):\", err);\n    }\n  })();\n\n  \/\/ ---------------------------\n  \/\/ Accessibility: keyboard support for lists previously added\n  \/\/ ---------------------------\n  <\/script>\n\n<\/body>\n<\/html>\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>Weekend urodzinowy \u2014 B\u00edl\u00fd Potok Weekend urodzinowy &#x1f389; 28 \u2013 30 listopada | B\u00edl\u00fd Potok, Czechy &#x1f1e8;&#x1f1ff; No wi\u0119c sta\u0142o [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-9","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/lazabawa.com.pl\/index.php\/wp-json\/wp\/v2\/pages\/9","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lazabawa.com.pl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/lazabawa.com.pl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/lazabawa.com.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lazabawa.com.pl\/index.php\/wp-json\/wp\/v2\/comments?post=9"}],"version-history":[{"count":109,"href":"https:\/\/lazabawa.com.pl\/index.php\/wp-json\/wp\/v2\/pages\/9\/revisions"}],"predecessor-version":[{"id":148,"href":"https:\/\/lazabawa.com.pl\/index.php\/wp-json\/wp\/v2\/pages\/9\/revisions\/148"}],"wp:attachment":[{"href":"https:\/\/lazabawa.com.pl\/index.php\/wp-json\/wp\/v2\/media?parent=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}