{"id":10362,"date":"2026-07-09T21:57:12","date_gmt":"2026-07-09T19:57:12","guid":{"rendered":"https:\/\/bzphoto.be\/?page_id=10362"},"modified":"2026-07-12T01:35:54","modified_gmt":"2026-07-11T23:35:54","slug":"10362-2","status":"publish","type":"page","link":"https:\/\/bzphoto.be\/index.php\/10362-2\/","title":{"rendered":""},"content":{"rendered":"<div class=\"et_pb_section_0 et_pb_section et_section_regular et_flex_section\">\n<div class=\"et_pb_row_0 et_pb_row et_flex_row\">\n<div class=\"et_pb_column_0 et_pb_column et-last-child et_flex_column_24_24 et_flex_column et_pb_css_mix_blend_mode_passthrough\">\n<div class=\"et_pb_code_0 et_pb_code et_pb_module\"><div class=\"et_pb_code_inner\">        <div class=\"pawsative-embed-shell pawsative-text-large\">\n            <iframe\n                id=\"pawsative_09a7faa0022848669b5d6ffc6e77a593_frame\"\n                class=\"pawsative-embed-frame\"\n                src=\"https:\/\/bzphoto.be\/wp-content\/plugins\/pawsative-walks-v12-0-3-preview\/assets\/app\/index.html?pawsative_embed=1&pawsative_scale=1.14&pawsative_instance=pawsative_09a7faa0022848669b5d6ffc6e77a593&pawsative_api_base=\/pawsative-v1203\/api&view=home&v=12.0.3\"\n                title=\"Pawsative Walks App\"\n                loading=\"eager\"\n                scrolling=\"no\"\n            ><\/iframe>\n        <\/div>\n\n        <!-- Parent Modal overlay for Amelia Booking -->\n        <div id=\"pawsative-parent-modal\" class=\"pw-parent-modal\" style=\"display:none;\" aria-modal=\"true\" role=\"dialog\">\n            <div class=\"pw-parent-modal-overlay\"><\/div>\n            <div class=\"pw-parent-modal-container\">\n                <button type=\"button\" class=\"pw-parent-modal-close\" id=\"pawsative-modal-close-btn\" aria-label=\"Close modal\">&times;<\/button>\n                <div class=\"pw-parent-modal-body\" id=\"pawsative-modal-body\"><\/div>\n            <\/div>\n        <\/div>\n\n        <div\n            id=\"pawsative_09a7faa0022848669b5d6ffc6e77a593_sources\"\n            class=\"pawsative-wp-shortcode-sources\"\n            aria-hidden=\"true\"\n        >\n            <!-- Galleries and blogs load through the app APIs. Rendering hidden\n                 duplicate Divi\/NextGEN modules here would download their images twice. -->\n            <div id=\"pawsative-amelia-events-source\"><script>\n  if (typeof hasAmeliaEvent === 'undefined') {\n    var hasAmeliaEvent = true;\n  }\n  if (typeof hasEventApiCall === 'undefined' && ('' === '' && '' === '' && '' !== '1')) {\n    var hasEventApiCall = true;\n  }\n  var hasEventShortcode = (typeof hasEventShortcode === 'undefined') ? false : true;\n  var ameliaShortcodeData = (typeof ameliaShortcodeData === 'undefined') ? [] : ameliaShortcodeData;\n  ameliaShortcodeData.push(\n    {\n      'hasApiCall': (typeof hasEventApiCall !== 'undefined') && hasEventApiCall,\n      'trigger': '',\n      'trigger_type': '',\n      'triggered_form': 'elf',\n      'in_dialog': '',\n      'counter': '1002',\n      'employee': '',\n      'eventId': '',\n      'eventRecurring': 0,\n      'eventTag': \"\",\n      'locationId': \"\",\n      'range': \"\",\n      'ivy': '',\n    }\n  );\n  var ameliaShortcodeDataTriggered = (typeof ameliaShortcodeDataTriggered === 'undefined') ? [] : ameliaShortcodeDataTriggered;\n  if (ameliaShortcodeData[ameliaShortcodeData.length - 1].trigger !== '' || ameliaShortcodeData[ameliaShortcodeData.length - 1].ivy !== '') {\n    if (ameliaShortcodeDataTriggered.filter(a => a.counter === ameliaShortcodeData[ameliaShortcodeData.length - 1].counter).length === 0) {\n      ameliaShortcodeDataTriggered.push(ameliaShortcodeData.pop());\n    } else {\n      ameliaShortcodeData.pop()\n    }\n  }\n  if (typeof hasEventApiCall !== 'undefined' && hasEventApiCall) {\n    hasEventApiCall = false;\n  }\n<\/script>\n\n<div\n  id=\"amelia-v2-booking-1002\"\n  class=\"amelia-v2-booking\"\n>\n    <events-list-form-wrapper><\/div>\n<\/div>\n            <div id=\"pawsative-amelia-booking-source\">\n<script>\n  if (typeof hasAmeliaEntitiesApiCall === 'undefined' && ('' === '' && '' === '' && '' !== '1')) {\n    var hasAmeliaEntitiesApiCall = true;\n  }\n  var ameliaShortcodeData = (typeof ameliaShortcodeData === 'undefined') ? [] : ameliaShortcodeData;\n  ameliaShortcodeData.push(\n    {\n      'hasApiCall': (typeof hasAmeliaEntitiesApiCall !== 'undefined') && hasAmeliaEntitiesApiCall,\n      'trigger': '',\n      'trigger_type': '',\n      'triggered_form': 'sbsNew',\n      'in_dialog': '',\n      'show': '',\n      'counter': '1003',\n      'category': '',\n      'service': '',\n      'employee': '',\n      'location': '',\n      'package': '',\n      'layout': '',\n      'ivy': '',\n    }\n  );\n\n  var ameliaShortcodeDataTriggered = (typeof ameliaShortcodeDataTriggered === 'undefined') ? [] : ameliaShortcodeDataTriggered;\n  if (ameliaShortcodeData[ameliaShortcodeData.length - 1].trigger !== '' || ameliaShortcodeData[ameliaShortcodeData.length - 1].ivy !== '') {\n    if (ameliaShortcodeDataTriggered.filter(a => a.counter === ameliaShortcodeData[ameliaShortcodeData.length - 1].counter).length === 0) {\n      ameliaShortcodeDataTriggered.push(ameliaShortcodeData.pop());\n    } else {\n      ameliaShortcodeData.pop()\n    }\n  }\n  if (typeof hasAmeliaEntitiesApiCall !== 'undefined' && hasAmeliaEntitiesApiCall) {\n    hasAmeliaEntitiesApiCall = false;\n  }\n<\/script>\n\n<div\n  id=\"amelia-v2-booking-1003\"\n  class=\"amelia-v2-booking\"\n >\n    <step-form-wrapper><\/step-form-wrapper><\/div>\n<\/div>\n        <\/div>\n\n        \n        <script>\n            (function(cfg) {\n                var iframe = document.getElementById(cfg.iframeId);\n                if (!iframe) return;\n\n                var cleanDiviSourceContent = function() {\n                    if (!cfg.cleanPage) return;\n                    var shell = iframe.closest(\".pawsative-embed-shell\");\n                    var appSection = shell ? shell.closest(\".et_pb_section\") : null;\n                    if (!shell || !appSection) return;\n\n                    document.body.classList.add(\"pawsative-v1203-clean-page\");\n                    appSection.classList.add(\"pawsative-v1203-app-section\");\n\n                    var builder = appSection.parentElement;\n                    if (builder) {\n                        Array.prototype.forEach.call(builder.children, function(child) {\n                            if (child !== appSection && child.classList && child.classList.contains(\"et_pb_section\")) {\n                                child.classList.add(\"pawsative-v1203-hidden-divi-source\");\n                                child.setAttribute(\"aria-hidden\", \"true\");\n                            }\n                        });\n                    }\n\n                    [\".et_pb_row\", \".et_pb_column\", \".et_pb_module\"].forEach(function(selector) {\n                        appSection.querySelectorAll(selector).forEach(function(node) {\n                            if (!node.contains(shell)) {\n                                node.classList.add(\"pawsative-v1203-hidden-divi-source\");\n                                node.setAttribute(\"aria-hidden\", \"true\");\n                            }\n                        });\n                    });\n                };\n\n                cleanDiviSourceContent();\n\n                var buildPayload = function() {\n                    var payload = { type: \"pawsative_wp_payload\" };\n                    Object.keys(cfg.sources).forEach(function(key) {\n                        var node = document.getElementById(cfg.sources[key]);\n                        payload[key] = node ? node.innerHTML : null;\n                    });\n                    return payload;\n                };\n\n                var postPayload = function() {\n                    if (!iframe.contentWindow) return;\n                    iframe.contentWindow.postMessage(buildPayload(), window.location.origin);\n                };\n\n                var currentHeight = 0;\n                var fullscreenFrameActive = false;\n                var savedFrameHeight = \"\";\n                var applyHeight = function(value) {\n                    var height = Number(value);\n                    if (!height || !Number.isFinite(height)) return;\n                    var clamped = Math.max(620, Math.ceil(height));\n                    if (fullscreenFrameActive) return;\n                    if (Math.abs(clamped - currentHeight) > 15) {\n                        currentHeight = clamped;\n                        iframe.style.height = clamped + \"px\";\n                    }\n                };\n\n                var sendScroll = function() {\n                    if (!iframe.contentWindow) return;\n                    var rect = iframe.getBoundingClientRect();\n                    iframe.contentWindow.postMessage({\n                        type: \"pawsative_parent_scroll\",\n                        top: rect.top,\n                        scrollY: window.scrollY,\n                        innerHeight: window.innerHeight,\n                        innerWidth: window.innerWidth\n                    }, window.location.origin);\n                };\n                window.addEventListener(\"scroll\", sendScroll, { passive: true });\n                window.addEventListener(\"resize\", sendScroll);\n                iframe.addEventListener(\"load\", function() {\n                    document.body.style.overflow = \"\";\n                    document.documentElement.style.overflow = \"\";\n                    sendScroll();\n                    setTimeout(sendScroll, 300);\n                    setTimeout(sendScroll, 1000);\n                });\n\n                \/\/ Modal operations\n                var modal = document.getElementById(\"pawsative-parent-modal\");\n                var modalBody = document.getElementById(\"pawsative-modal-body\");\n                var closeBtn = document.getElementById(\"pawsative-modal-close-btn\");\n                var originalParentMap = {}; \/\/ Tracks original hidden parents so we can return the elements\n\n                var openModal = function(sourceId) {\n                    var sourceNode = document.getElementById(sourceId);\n                    if (!sourceNode) return;\n\n                    \/\/ Track original parent if not tracked yet\n                    if (!originalParentMap[sourceId]) {\n                        originalParentMap[sourceId] = sourceNode.parentNode;\n                    }\n\n                    \/\/ Move active DOM element into the modal body\n                    modalBody.innerHTML = \"\";\n                    modalBody.appendChild(sourceNode);\n\n                    \/\/ Display modal\n                    modal.style.display = \"flex\";\n                    document.body.style.overflow = \"hidden\"; \/\/ Prevent background scrolling\n                };\n\n                var closeModal = function() {\n                    var activeChild = modalBody.firstChild;\n                    if (activeChild && activeChild.id && originalParentMap[activeChild.id]) {\n                        \/\/ Return the element to its hidden position on the parent page\n                        originalParentMap[activeChild.id].appendChild(activeChild);\n                    }\n                    modalBody.innerHTML = \"\";\n                    modal.style.display = \"none\";\n                    document.body.style.overflow = \"\"; \/\/ Restore background scrolling\n                    document.documentElement.style.overflow = \"\";\n                };\n\n                if (closeBtn) {\n                    closeBtn.addEventListener(\"click\", closeModal);\n                }\n                var overlay = modal ? modal.querySelector(\".pw-parent-modal-overlay\") : null;\n                if (overlay) {\n                    overlay.addEventListener(\"click\", closeModal);\n                }\n                document.addEventListener(\"keydown\", function(event) {\n                    if (event.key === \"Escape\" && modal && modal.style.display !== \"none\") {\n                        closeModal();\n                    }\n                });\n\n                iframe.addEventListener(\"load\", function() {\n                    postPayload();\n                    setTimeout(postPayload, 450);\n                });\n\n                window.addEventListener(\"message\", function(event) {\n                    if (event.source !== iframe.contentWindow || event.origin !== window.location.origin) return;\n                    var data = event.data;\n                    if (!data || typeof data !== \"object\") return;\n\n                    if (data.type === \"request_wp_data\" || data.type === \"pawsative_request_payload\") {\n                        postPayload();\n                        return;\n                    }\n\n                    if (data.type === \"pawsative_iframe_height\") {\n                        applyHeight(data.height);\n                    }\n\n                    if (data.type === \"pawsative_scroll_top\") {\n                        var rect = iframe.getBoundingClientRect();\n                        var scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n                        var targetY = rect.top + scrollTop - 100; \/\/ 100px offset for sticky headers\/padding\n                        window.scrollTo({\n                            top: Math.max(0, targetY),\n                            behavior: \"smooth\"\n                        });\n                    }\n\n                    if (data.type === \"pawsative_open_amelia_modal\") {\n                        \/\/ Map standard app sourceIds to actual WordPress DOM container ids\n                        var sourceIdMap = {\n                            \"pawsative-amelia-events-source\": cfg.sources.ameliaEventsHtml,\n                            \"pawsative-amelia-booking-source\": cfg.sources.ameliaBookingHtml\n                        };\n                        var actualId = sourceIdMap[data.sourceId] || data.sourceId;\n                        openModal(actualId);\n                    }\n\n                    if (data.type === \"pawsative_lock_parent_scroll\") {\n                        if (data.lock) {\n                            if (!fullscreenFrameActive) {\n                                fullscreenFrameActive = true;\n                                savedFrameHeight = iframe.style.height;\n                                iframe.classList.add(\"pawsative-embed-frame--fullscreen\");\n                            }\n                            document.body.style.overflow = \"hidden\";\n                            document.documentElement.style.overflow = \"hidden\";\n                            requestAnimationFrame(sendScroll);\n                            setTimeout(sendScroll, 50);\n                        } else {\n                            if (fullscreenFrameActive) {\n                                iframe.classList.remove(\"pawsative-embed-frame--fullscreen\");\n                                iframe.style.height = savedFrameHeight || (currentHeight ? currentHeight + \"px\" : \"620px\");\n                                fullscreenFrameActive = false;\n                                savedFrameHeight = \"\";\n                            }\n                            document.body.style.overflow = \"\";\n                            document.documentElement.style.overflow = \"\";\n                            requestAnimationFrame(sendScroll);\n                        }\n                    }\n                });\n            })({\"iframeId\":\"pawsative_09a7faa0022848669b5d6ffc6e77a593_frame\",\"cleanPage\":true,\"sources\":{\"ameliaEventsHtml\":\"pawsative-amelia-events-source\",\"ameliaBookingHtml\":\"pawsative-amelia-booking-source\"}});\n        <\/script>\n        \n<\/div><\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-template-blank.php","meta":{"ngg_post_thumbnail":0,"footnotes":""},"class_list":["post-10362","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/bzphoto.be\/index.php\/wp-json\/wp\/v2\/pages\/10362","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bzphoto.be\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bzphoto.be\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bzphoto.be\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bzphoto.be\/index.php\/wp-json\/wp\/v2\/comments?post=10362"}],"version-history":[{"count":18,"href":"https:\/\/bzphoto.be\/index.php\/wp-json\/wp\/v2\/pages\/10362\/revisions"}],"predecessor-version":[{"id":10514,"href":"https:\/\/bzphoto.be\/index.php\/wp-json\/wp\/v2\/pages\/10362\/revisions\/10514"}],"wp:attachment":[{"href":"https:\/\/bzphoto.be\/index.php\/wp-json\/wp\/v2\/media?parent=10362"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}