{"id":9,"date":"2026-05-19T08:01:19","date_gmt":"2026-05-19T07:01:19","guid":{"rendered":"https:\/\/papepo.co.uk\/public\/?page_id=9"},"modified":"2026-05-19T12:05:57","modified_gmt":"2026-05-19T11:05:57","slug":"booking-wizard","status":"publish","type":"page","link":"https:\/\/papepo.co.uk\/public\/booking-wizard\/","title":{"rendered":"Booking Wizard"},"content":{"rendered":"\t<div id=\"ppk-wizard-shell\">\n\n\t\t<style>\n\t\t\/* ================================================================== *\/\n\t\t\/* Reset & shell                                                       *\/\n\t\t\/* ================================================================== *\/\n\t\t#ppk-wizard-shell *,\n\t\t#ppk-wizard-shell *::before,\n\t\t#ppk-wizard-shell *::after {\n\t\t\tbox-sizing: border-box;\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t}\n\n\t\t#ppk-wizard-shell {\n\t\t\twidth: 100%;\n\t\t\tbackground: #ffffff;\n\t\t\tfont-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,\n\t\t\t             'Helvetica Neue', Arial, sans-serif;\n\t\t\t-webkit-font-smoothing: antialiased;\n\t\t}\n\n\t\t\/* ================================================================== *\/\n\t\t\/* Card \u2014 Floating Premium Curvature Card Design Across All Breakpoints *\/\n\t\t\/* ================================================================== *\/\n\t\t#ppk-wizard-card {\n\t\t\twidth: calc(100% - 32px); \n\t\t\tmax-width: 440px; \/* Perfect golden ratio for mobile screens *\/\n\t\t\tmargin: 16px auto; \n\t\t\tbackground: #ffffff;\n\t\t\tpadding: 20px 18px 20px;\n\t\t\tborder-radius: 24px; \n\t\t\tbox-shadow: 0 16px 44px rgba(61, 39, 29, 0.08),\n\t\t\t            0 2px 8px   rgba(0, 0, 0, 0.02);\n\t\t\tmin-height: auto;\n\t\t}\n\n\t\t\/* \u91dd\u5c0d Welcome Step \u9032\u884c\u6975\u9650\u9802\u90e8\u58d3\u7e2e\uff0c\u5f37\u5236\u6d88\u6ec5\u6240\u6709 Padding \u8207\u96b1\u5f62 Margin *\/\n\t\t#ppk-step-welcome {\n\t\t\tmargin-top: 0 !important;\n\t\t\tpadding-top: 0 !important;\n\t\t}\n\t\t#ppk-step-welcome p, #ppk-step-welcome div {\n\t\t\tmargin-top: 0 !important;\n\t\t\tpadding-top: 0 !important;\n\t\t}\n\n\t\t\/* \u3010\u6838\u5fc3\u4fee\u5fa9\u3011\u7576\u76ee\u524d\u8655\u65bc Welcome Step \u6642\uff0c\u5fb9\u5e95\u96b1\u85cf\u9802\u90e8 Header \u53ca\u9032\u5ea6\u689d\u8ecc\u8de1\uff0c\u91cb\u653e\u6240\u6709\u96b1\u5f62\u7a7a\u9593 *\/\n\t\t#ppk-wizard-card:has(#ppk-step-welcome.ppk-active) #ppk-wiz-header {\n\t\t\tdisplay: none !important;\n\t\t\tmargin-bottom: 0 !important;\n\t\t\tmin-height: 0 !important;\n\t\t}\n\t\t#ppk-wizard-card:has(#ppk-step-welcome.ppk-active) #ppk-progress-bar-track {\n\t\t\tdisplay: none !important;\n\t\t\tmargin-bottom: 0 !important;\n\t\t}\n\t\t\/* \u5982\u679c\u700f\u89bd\u5668\u4e0d\u652f\u63f4 :has selector\uff0c\u6211\u5011\u540c\u6642\u900f\u904e Welcome \u6fc0\u6d3b\u72c0\u614b\u5411\u4e0b\u58d3\u7e2e *\/\n\t\t#ppk-step-welcome.ppk-active {\n\t\t\tmargin-top: -40px !important; \/* \u5f37\u5236\u5411\u4e0a\u9006\u63a8\uff0c\u5c0d\u6c96\u6389 Theme \u5361\u7247\u81ea\u5e36\u7684\u9802\u90e8 Padding *\/\n\t\t}\n\n\t\t\/* Responsive Viewport Matrix: Tablet Expansion Layer *\/\n\t\t@media (min-width: 481px) and (max-width: 1024px) {\n\t\t\t#ppk-wizard-card {\n\t\t\t\tmax-width: 640px; \/* Dynamically expands to look magnificent on iPad \/ Tablet viewports *\/\n\t\t\t\tpadding: 40px 36px 36px;\n\t\t\t}\n\t\t}\n\n\t\t\/* Responsive Viewport Matrix: Desktop Layer *\/\n\t\t@media (min-width: 1025px) {\n\t\t\t#ppk-wizard-shell {\n\t\t\t\tbackground: transparent; \n\t\t\t\tpadding: 40px 24px 64px;\n\t\t\t\tmin-height: auto;\n\t\t\t}\n\t\t\t#ppk-wizard-card {\n\t\t\t\tmax-width: 640px; \/* \u3010\u5b8c\u7f8e\u89e3\u9396\u3011\u540c\u6b65 Tablet \u7684\u5927\u6c23\u6bd4\u4f8b\uff0c\u9632\u6b62 Desktop \u53cd\u800c\u7e2e\u7a84\u7684\u602a\u7570\u8996\u89ba *\/\n\t\t\t\tmargin: 0 auto;\n\t\t\t\tpadding: 48px 40px 40px; \n\t\t\t}\n\t\t}\n\n\t\t\/* ================================================================== *\/\n\t\t\/* Header row: Back button + progress label                           *\/\n\t\t\/* ================================================================== *\/\n\t\t#ppk-wiz-header {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: space-between;\n\t\t\tmargin-bottom: 16px; \/* \u3010\u9ad4\u9a57\u512a\u5316\u3011\u7e2e\u6e1b\u70ba 16px\uff0c\u8b93\u6709 Progress Bar \u7684\u9801\u9762\u6574\u9ad4\u66f4\u52a0\u7dca\u6e4a\u4e00\u9ad4\u5316 *\/\n\t\t\tmin-height: 32px;\n\t\t}\n\n\t\t#ppk-back-btn {\n\t\t\tdisplay: none; \/* hidden until step 2+ *\/\n\t\t\talign-items: center;\n\t\t\tgap: 6px;\n\t\t\tbackground: none;\n\t\t\tborder: none;\n\t\t\tcursor: pointer;\n\t\t\tfont-size: 1rem;\n\t\t\tfont-weight: 600;\n\t\t\tcolor: #1d70b8;\n\t\t\tpadding: 4px 0;\n\t\t\ttext-decoration: underline;\n\t\t\ttext-underline-offset: 3px;\n\t\t\tline-height: 1;\n\t\t}\n\t\t#ppk-back-btn:hover { color: #003078; }\n\t\t#ppk-back-btn svg { flex-shrink: 0; }\n\n\t\t#ppk-progress-label {\n\t\t\tfont-size: 0.875rem;\n\t\t\tcolor: #505a5f;\n\t\t\tmargin-left: auto;\n\t\t}\n\n\t\t\/* ================================================================== *\/\n\t\t\/* Progress bar (thin line under header)                              *\/\n\t\t\/* ================================================================== *\/\n\t\t#ppk-progress-bar-track {\n\t\t\twidth: 100%;\n\t\t\theight: 4px;\n\t\t\tbackground: #e8e8e8;\n\t\t\tborder-radius: 2px;\n\t\t\tmargin-bottom: 36px;\n\t\t\toverflow: hidden;\n\t\t}\n\t\t#ppk-progress-bar-fill {\n\t\t\theight: 100%;\n\t\t\tbackground: #00703c;\n\t\t\tborder-radius: 2px;\n\t\t\ttransition: width 0.3s ease;\n\t\t\twidth: 0%;\n\t\t}\n\n\t\t\/* ================================================================== *\/\n\t\t\/* Step visibility                                                     *\/\n\t\t\/* ================================================================== *\/\n\t\t.ppk-step {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.ppk-step.ppk-active {\n\t\t\tdisplay: block;\n\t\t\tanimation: ppkFadeIn 0.18s ease;\n\t\t\tpadding: 16px 18px 20px;\n\t\t}\n\t\t#ppk-step-welcome.ppk-active {\n\t\t\tpadding: 0;\n\t\t}\n\t\t@keyframes ppkFadeIn {\n\t\t\tfrom { opacity: 0; transform: translateY(6px); }\n\t\t\tto   { opacity: 1; transform: translateY(0);   }\n\t\t}\n\n\t\t\/* ================================================================== *\/\n\t\t\/* GOV.UK-inspired typography                                         *\/\n\t\t\/* ================================================================== *\/\n\t\t.ppk-step-title {\n\t\t\tfont-size: 1.75rem;\n\t\t\tfont-weight: 700;\n\t\t\tcolor: #0b0c0c;\n\t\t\tline-height: 1.25;\n\t\t\tmargin-bottom: 10px;\n\t\t}\n\t\t.ppk-step-hint {\n\t\t\tfont-size: 1rem;\n\t\t\tcolor: #505a5f;\n\t\t\tline-height: 1.6;\n\t\t\tmargin-bottom: 28px;\n\t\t}\n\t\t@media (min-width: 769px) {\n\t\t\t.ppk-step-title { font-size: 2rem; }\n\t\t\t.ppk-step-hint  { font-size: 1.0625rem; }\n\t\t}\n\n\t\t\/* ================================================================== *\/\n\t\t\/* Form elements \u2014 large-print friendly                               *\/\n\t\t\/* ================================================================== *\/\n\t\t.ppk-label {\n\t\t\tdisplay: block;\n\t\t\tfont-size: 1.0625rem;\n\t\t\tfont-weight: 600;\n\t\t\tcolor: #0b0c0c;\n\t\t\tmargin-bottom: 8px;\n\t\t\tline-height: 1.4;\n\t\t}\n\t\t.ppk-label-hint {\n\t\t\tdisplay: block;\n\t\t\tfont-size: 0.9375rem;\n\t\t\tcolor: #505a5f;\n\t\t\tfont-weight: 400;\n\t\t\tmargin-top: 2px;\n\t\t\tmargin-bottom: 6px;\n\t\t}\n\t\t.ppk-input {\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t\tpadding: 14px 16px !important;\n\t\t\tbox-sizing: border-box !important;\n\t\t\tfont-size: 1.0625rem;\n\t\t\tfont-family: inherit;\n\t\t\tcolor: #0b0c0c;\n\t\t\tbackground: #ffffff;\n\t\t\tborder: 2px solid #0b0c0c;\n\t\t\tborder-radius: 0;\n\t\t\toutline: none;\n\t\t\tmargin-bottom: 24px;\n\t\t\t-webkit-appearance: none;\n\t\t}\n\t\t.ppk-input:focus {\n\t\t\toutline: 3px solid #ffdd00;\n\t\t\toutline-offset: 0;\n\t\t\tbox-shadow: inset 0 0 0 2px #0b0c0c;\n\t\t}\n\n\t\t\/* Radio \/ checkbox option cards *\/\n\t\t.ppk-options-group {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 12px;\n\t\t\tmargin-bottom: 28px;\n\t\t}\n\t\t.ppk-option-label {\n\t\t\tdisplay: flex;\n\t\t\talign-items: flex-start;\n\t\t\tgap: 14px;\n\t\t\tpadding: 16px 18px;\n\t\t\tborder: 2px solid #b1b4b6;\n\t\t\tborder-radius: 4px;\n\t\t\tcursor: pointer;\n\t\t\ttransition: border-color 0.1s;\n\t\t}\n\t\t.ppk-option-label:hover { border-color: #0b0c0c; }\n\t\t.ppk-option-label:has(input:checked) {\n\t\t\tborder-color: #0b0c0c;\n\t\t\tbackground: #f8f8f8;\n\t\t}\n\t\t.ppk-option-label input[type=\"radio\"],\n\t\t.ppk-option-label input[type=\"checkbox\"] {\n\t\t\tmargin-top: 3px;\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t\tflex-shrink: 0;\n\t\t\taccent-color: #0b0c0c;\n\t\t\tcursor: pointer;\n\t\t}\n\t\t.ppk-option-text {\n\t\t\tfont-size: 1.0625rem;\n\t\t\tcolor: #0b0c0c;\n\t\t\tline-height: 1.45;\n\t\t}\n\t\t.ppk-option-text small {\n\t\t\tdisplay: block;\n\t\t\tfont-size: 0.875rem;\n\t\t\tcolor: #505a5f;\n\t\t\tmargin-top: 2px;\n\t\t}\n\n\t\t\/* ================================================================== *\/\n\t\t\/* Buttons \u2014 Premium Rounded Corner Buttons Inside Card               *\/\n\t\t\/* ================================================================== *\/\n\t\t.ppk-btn-primary {\n\t\t\tdisplay: block !important;\n\t\t\twidth: 100% !important; \n\t\t\tpadding: 22px 24px !important; \/* \u518d\u6b21\u52a0\u539a\u4e0a\u4e0b Padding\uff0c\u91cd\u5851\u98fd\u6eff\u5927\u6c23\u7684 Premium \u8cea\u611f *\/\n\t\t\tfont-size: 1.25rem !important; \/* \u5fae\u8abf\u52a0\u5927\u5b57\u9ad4\u5f35\u529b *\/\n\t\t\tfont-weight: 800 !important;\n\t\t\tfont-family: inherit !important;\n\t\t\tcolor: #3d271d !important; \/* \u54c1\u724c\u6df1\u5561\u8272 *\/\n\t\t\tbackground: #ffd800 !important; \n\t\t\tborder: none !important;\n\t\t\tborder-radius: 16px !important; \/* \u547c\u61c9\u9ad8\u968e App \u7684\u7cbe\u7dfb\u5713\u89d2 *\/\n\t\t\tcursor: pointer !important;\n\t\t\ttext-decoration: none !important;\n\t\t\ttext-transform: uppercase !important; \n\t\t\tletter-spacing: 0.05em !important;\n\t\t\tline-height: 1.3 !important; \/* \u6700\u4f73\u5316\u884c\u9ad8\u6bd4\u4f8b *\/\n\t\t\ttransition: background 0.1s ease-in-out, transform 0.1s ease !important;\n\t\t\t-webkit-appearance: none !important;\n\t\t\tbox-shadow: 0 6px 20px rgba(255, 216, 0, 0.45) !important; \/* \u98fd\u6eff\u7684\u54c1\u724c\u7acb\u9ad4\u9670\u5f71 *\/\n\t\t\ttext-align: center !important;\n\t\t}\n\t\t.ppk-btn-primary:hover  { background: #e6c200; transform: translateY(-1px); }\n\t\t.ppk-btn-primary:active { background: #ccad00; transform: translateY(1px); }\n\n\t\t.ppk-btn-row {\n\t\t\tdisplay: flex;\n\t\t\tflex-wrap: wrap;\n\t\t\tmargin-top: 24px;\n\t\t\tmargin-left: 0;\n\t\t\tmargin-right: 0;\n\t\t\tmargin-bottom: 0; \/* \u79fb\u9664\u6240\u6709\u8ca0 Margin \u7834\u683c\u5f15\u64ce\uff0c\u5b89\u5168\u7559\u5728\u5361\u7247\u5167 *\/\n\t\t}\n\n\t\t\/* Tablet & Desktop \u4fdd\u6301\u4e00\u81f4\uff0c\u4e0d\u9700\u8981\u8ca0 Margin *\/\n\t\t@media (min-width: 481px) and (max-width: 1024px) {\n\t\t\t.ppk-btn-row { margin-left: 0; margin-right: 0; margin-bottom: 0; }\n\t\t}\n\t\t@media (min-width: 1025px) {\n\t\t\t.ppk-btn-row { margin-left: 0; margin-right: 0; margin-bottom: 0; }\n\t\t}\n\n\t\t.ppk-btn-secondary {\n\t\t\tdisplay: inline-block;\n\t\t\tpadding: 14px 24px;\n\t\t\tfont-size: 1.0625rem;\n\t\t\tfont-weight: 700;\n\t\t\tfont-family: inherit;\n\t\t\tcolor: #0b0c0c;\n\t\t\tbackground: #f3f2f1;\n\t\t\tborder: 2px solid #0b0c0c;\n\t\t\tborder-radius: 4px;\n\t\t\tcursor: pointer;\n\t\t\ttext-decoration: none;\n\t\t\tline-height: 1;\n\t\t\ttransition: background 0.12s;\n\t\t\t-webkit-appearance: none;\n\t\t}\n\t\t.ppk-btn-secondary:hover { background: #dbdad9; }\n\n\t\t.ppk-btn-danger {\n\t\t\tdisplay: inline-block;\n\t\t\tpadding: 14px 24px;\n\t\t\tfont-size: 1.0625rem;\n\t\t\tfont-weight: 700;\n\t\t\tfont-family: inherit;\n\t\t\tcolor: #ffffff;\n\t\t\tbackground: #d4351c;\n\t\t\tborder: 2px solid transparent;\n\t\t\tborder-radius: 4px;\n\t\t\tcursor: pointer;\n\t\t\tline-height: 1;\n\t\t\ttransition: background 0.12s;\n\t\t\t-webkit-appearance: none;\n\t\t}\n\t\t.ppk-btn-danger:hover { background: #aa2a16; }\n\n\t\t.papepo-wizard-blocking-notice {\n\t\t\tbackground-color: #FFF0F2 !important;\n\t\t\tborder: 2px solid #FF0000 !important;\n\t\t\tcolor: #3D271D !important;\n\t\t\tpadding: 16px !important;\n\t\t\tborder-radius: 8px !important;\n\t\t\tmargin-top: 15px !important;\n\t\t\tfont-weight: 700 !important;\n\t\t\ttext-align: left !important;\n\t\t}\n\n\t\t.papepo-wizard-security-notice {\n\t\t\tbackground-color: transparent !important;\n\t\t\tborder: none !important;\n\t\t\tcolor: #3D271D !important;\n\t\t\tpadding: 0 4px !important;\n\t\t\tmargin-bottom: 20px !important;\n\t\t\tfont-size: 0.94rem !important;\n\t\t\tline-height: 1.5 !important;\n\t\t\ttext-align: left !important;\n\t\t}\n\n\t\t.papepo-preview-track {\n\t\t\tdisplay: flex !important;\n\t\t\tgap: 12px !important;\n\t\t\tmargin-top: 12px !important;\n\t\t\tjustify-content: center !important;\n\t\t}\n\n\t\t.papepo-preview-thumb {\n\t\t\twidth: 80px !important;\n\t\t\theight: 80px !important;\n\t\t\tobject-fit: cover !important;\n\t\t\tborder: 2px solid #3D271D !important;\n\t\t\tborder-radius: 4px !important;\n\t\t\tbackground-color: #FFFFFF !important;\n\t\t}\n\n\t\t\/* ================================================================== *\/\n\t\t\/* Disagree \/ cancel booking modal                                    *\/\n\t\t\/* ================================================================== *\/\n\t\t#ppk-disagree-modal {\n\t\t\tdisplay: none;\n\t\t\tposition: fixed;\n\t\t\tinset: 0;\n\t\t\tbackground: rgba(11, 12, 12, 0.60);\n\t\t\tz-index: 99999;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tpadding: 20px;\n\t\t}\n\t\t#ppk-disagree-modal.ppk-modal-open {\n\t\t\tdisplay: flex !important;\n\t\t}\n\t\t#ppk-disagree-box {\n\t\t\tbackground: #ffffff;\n\t\t\tborder-radius: 8px;\n\t\t\tpadding: 32px 28px 28px;\n\t\t\twidth: 100%;\n\t\t\tmax-width: 480px;\n\t\t\tbox-shadow: 0 8px 40px rgba(0,0,0,0.18);\n\t\t}\n\t\t#ppk-disagree-box h2 {\n\t\t\tfont-size: 1.375rem;\n\t\t\tfont-weight: 700;\n\t\t\tcolor: #0b0c0c;\n\t\t\tmargin-bottom: 12px;\n\t\t}\n\t\t#ppk-disagree-box p {\n\t\t\tfont-size: 1rem;\n\t\t\tcolor: #505a5f;\n\t\t\tline-height: 1.6;\n\t\t\tmargin-bottom: 24px;\n\t\t}\n\n\t\t\/* ================================================================== *\/\n\t\t\/* Date step \u2014 week group labels, large date cards, billing banner    *\/\n\t\t\/* ================================================================== *\/\n\t\t.ppk-date-group-label {\n\t\t\tfont-size: 0.8125rem;\n\t\t\tfont-weight: 700;\n\t\t\ttext-transform: uppercase;\n\t\t\tletter-spacing: 0.06em;\n\t\t\tcolor: #505a5f;\n\t\t\tmargin-top: 20px;\n\t\t\tmargin-bottom: 8px;\n\t\t}\n\t\t.ppk-date-group-label:first-child { margin-top: 0; }\n\n\t\t.ppk-date-option { padding: 18px 20px; }\n\n\t\t.ppk-date-text {\n\t\t\tfont-size: 1.125rem;\n\t\t\tfont-weight: 600;\n\t\t}\n\n\t\t.ppk-info-banner {\n\t\t\tmargin-top: 28px;\n\t\t\tpadding: 16px 18px;\n\t\t\tbackground: #f3f2f1;\n\t\t\tborder-left: 4px solid #505a5f;\n\t\t\tborder-radius: 4px;\n\t\t\tfont-size: 0.9375rem;\n\t\t\tcolor: #0b0c0c;\n\t\t\tline-height: 1.65;\n\t\t}\n\t\t.ppk-info-banner strong { font-weight: 700; }\n\n\t\t\/* ================================================================== *\/\n\t\t\/* Payment step \u2014 contact fields, illustration, Stripe container      *\/\n\t\t\/* ================================================================== *\/\n\t\t.ppk-field-group { margin-bottom: 20px; }\n\n\t\t\/* Order Summary Card Styling *\/\n\t\t.ppk-invoice-card {\n\t\t\tbackground: #f3f2f1;\n\t\t\tborder-left: 4px solid #00703c;\n\t\t\tborder-radius: 4px;\n\t\t\tpadding: 20px;\n\t\t\tmargin-bottom: 28px;\n\t\t}\n\t\t.ppk-invoice-card h3 {\n\t\t\tfont-size: 1.15rem;\n\t\t\tfont-weight: 700;\n\t\t\tcolor: #0b0c0c;\n\t\t\tmargin-bottom: 14px;\n\t\t\ttext-transform: uppercase;\n\t\t\tletter-spacing: 0.03em;\n\t\t}\n\t\t.ppk-invoice-row {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\talign-items: center;\n\t\t\twidth: 100%;\n\t\t\tfont-size: 1rem;\n\t\t\tcolor: #0b0c0c;\n\t\t\tline-height: 1.5;\n\t\t\tpadding: 8px 0;\n\t\t\tborder-bottom: 1px dashed #b1b4b6;\n\t\t}\n\t\t.ppk-invoice-row:last-of-type {\n\t\t\tborder-bottom: none;\n\t\t}\n\t\t.ppk-invoice-row.ppk-gift-row {\n\t\t\tcolor: #00703c;\n\t\t\tfont-weight: 600;\n\t\t}\n\t\t.ppk-invoice-total-row {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\talign-items: center;\n\t\t\twidth: 100%;\n\t\t\tfont-size: 1.35rem;\n\t\t\tfont-weight: 800;\n\t\t\tcolor: #0b0c0c;\n\t\t\tpadding-top: 14px;\n\t\t\tmargin-top: 6px;\n\t\t\tborder-top: 2px solid #0b0c0c;\n\t\t}\n\t\t.ppk-invoice-meta-row {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\talign-items: center;\n\t\t\twidth: 100%;\n\t\t\twhite-space: nowrap;\n\t\t}\n\n\t\t#ppk-wizard-shell input[type=\"text\"],\n\t\t#ppk-wizard-shell input[type=\"email\"],\n\t\t#ppk-wizard-shell input[type=\"tel\"],\n\t\t#ppk-wizard-shell textarea {\n\t\t\tpadding: 14px 16px !important;\n\t\t\tbox-sizing: border-box !important;\n\t\t}\n\n\t\t.ppk-textarea {\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t\tpadding: 14px 16px !important;\n\t\t\tbox-sizing: border-box !important;\n\t\t\tfont-size: 1.0625rem;\n\t\t\tfont-family: inherit;\n\t\t\tcolor: #0b0c0c;\n\t\t\tbackground: #ffffff;\n\t\t\tborder: 2px solid #0b0c0c;\n\t\t\tborder-radius: 0;\n\t\t\toutline: none;\n\t\t\tresize: vertical;\n\t\t\tmin-height: 80px;\n\t\t\t-webkit-appearance: none;\n\t\t}\n\t\t.ppk-textarea:focus {\n\t\t\toutline: 3px solid #ffdd00;\n\t\t\toutline-offset: 0;\n\t\t\tbox-shadow: inset 0 0 0 2px #0b0c0c;\n\t\t}\n\n\t\t\/* \u3010\u5168\u57df Premium \u5716\u7247\u5f15\u64ce\u3011\u4e00\u6b21\u904e\u81ea\u52d5\u5957\u7528\u81f3\u6240\u6709 Wizard \u5361\u7247\u9801\u9762 *\/\n\t\t.ppk-wizard-illustration {\n\t\t\tdisplay: block !important;\n\t\t\twidth: 100% !important;\n\t\t\tmax-width: 250px !important; \/* \u6240\u6709\u5361\u7247\u7d71\u4e00\u7684\u9ec3\u91d1\u63d2\u756b\u5927\u5c0f *\/\n\t\t\theight: auto !important;\n\t\t\tmargin-top: -10px !important; \/* \u3010\u5168\u57df\u9802\u90e8\u6536\u7a84\u3011\u5b8c\u7f8e\u8cbc\u8fd1\u9032\u5ea6\u689d\uff0c\u6d88\u6ec5\u8d05\u8089 *\/\n\t\t\tmargin-bottom: 24px !important; \/* \u3010\u5168\u57df\u4e0b\u65b9\u62c9\u958b\u3011\u63d2\u756b\u8207\u5927\u6a19\u984c\u4e4b\u9593\u6c38\u4e45\u4fdd\u7559\u8212\u9069\u5927\u6c23\u7684\u547c\u5438\u7a7a\u9593 *\/\n\t\t\tmargin-left: auto !important;\n\t\t\tmargin-right: auto !important;\n\t\t\tborder-radius: 16px !important; \/* \u3010\u5168\u57df\u9ad8\u968e\u5713\u89d2\u3011100% \u547c\u61c9 Premium \u54c1\u724c App \u8cea\u611f *\/\n\t\t\tfloat: none !important;\n\t\t}\n\t\t@media (min-width: 481px) {\n\t\t\t.ppk-wizard-illustration {\n\t\t\t\tmax-width: 280px !important;\n\t\t\t\tmargin-top: -12px !important;\n\t\t\t\tmargin-bottom: 28px !important;\n\t\t\t}\n\t\t}\n\t\t@media (min-width: 1025px) {\n\t\t\t.ppk-wizard-illustration {\n\t\t\t\tmax-width: 300px !important;\n\t\t\t\tmargin-top: -12px !important;\n\t\t\t\tmargin-bottom: 28px !important;\n\t\t\t}\n\t\t}\n\t\t.ppk-wizard-illustration[src=\"\"] { display: none; }\n\n\t\t#ppk-stripe-card-element {\n\t\t\tpadding: 16px;\n\t\t\tborder: 2px solid #0b0c0c;\n\t\t\tborder-radius: 0;\n\t\t\tbackground: #ffffff;\n\t\t\tmargin-bottom: 8px;\n\t\t\tmin-height: 44px;\n\t\t}\n\t\t#ppk-stripe-card-element.StripeElement--focus {\n\t\t\toutline: 3px solid #ffdd00;\n\t\t\toutline-offset: 0;\n\t\t}\n\n\t\t#ppk-card-errors {\n\t\t\tdisplay: none;\n\t\t\tmargin-bottom: 20px;\n\t\t\tpadding: 12px 14px;\n\t\t\tbackground: #fde8e6;\n\t\t\tborder-left: 4px solid #d4351c;\n\t\t\tborder-radius: 4px;\n\t\t\tcolor: #d4351c;\n\t\t\tfont-size: 1rem;\n\t\t\tfont-weight: 600;\n\t\t\tline-height: 1.45;\n\t\t}\n\t\t#ppk-card-errors:not(:empty) { display: block; }\n\n\t\t#ppk-submit-booking-btn {\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t\tpadding: 16px 24px;\n\t\t\tfont-size: 1.125rem;\n\t\t\tfont-weight: 700;\n\t\t\tfont-family: inherit;\n\t\t\tcolor: #ffffff;\n\t\t\tbackground: #00703c;\n\t\t\tborder: 2px solid transparent;\n\t\t\tborder-radius: 4px;\n\t\t\tcursor: pointer;\n\t\t\ttext-align: center;\n\t\t\ttransition: background 0.12s;\n\t\t\t-webkit-appearance: none;\n\t\t}\n\t\t#ppk-submit-booking-btn:hover   { background: #005a30; }\n\t\t#ppk-submit-booking-btn:disabled {\n\t\t\tbackground: #aeaeb2;\n\t\t\tcursor: not-allowed;\n\t\t}\n\t\t.ppk-secure-note {\n\t\t\tmargin-top: 10px;\n\t\t\ttext-align: center;\n\t\t\tfont-size: 0.8125rem;\n\t\t\tcolor: #505a5f;\n\t\t}\n\n\t\t\/* ================================================================== *\/\n\t\t\/* Success step                                                        *\/\n\t\t\/* ================================================================== *\/\n\t\t#ppk-step-success {\n\t\t\ttext-align: center;\n\t\t\tpadding: 12px 0 40px;\n\t\t}\n\t\t.ppk-success-icon {\n\t\t\tfont-size: 3.5rem;\n\t\t\tdisplay: block;\n\t\t\tmargin-bottom: 20px;\n\t\t\tline-height: 1;\n\t\t}\n\t\t.ppk-success-title {\n\t\t\tfont-size: 1.875rem;\n\t\t\tfont-weight: 700;\n\t\t\tcolor: #0b0c0c;\n\t\t\tline-height: 1.25;\n\t\t\tmargin-bottom: 14px;\n\t\t}\n\t\t@media (min-width: 769px) {\n\t\t\t.ppk-success-title { font-size: 2.25rem; }\n\t\t}\n\t\t.ppk-success-body {\n\t\t\tfont-size: 1.0625rem;\n\t\t\tcolor: #505a5f;\n\t\t\tline-height: 1.65;\n\t\t\tmargin-bottom: 20px;\n\t\t}\n\t\t.ppk-success-date-box {\n\t\t\tdisplay: inline-block;\n\t\t\tpadding: 14px 22px;\n\t\t\tbackground: #d4edda;\n\t\t\tcolor: #155724;\n\t\t\tborder-radius: 6px;\n\t\t\tfont-size: 1.0625rem;\n\t\t\tfont-weight: 600;\n\t\t\tmargin-bottom: 24px;\n\t\t}\n\t\t<\/style>\n\n\t\t<div id=\"ppk-wizard-card\">\n\n\t\t\t<!-- Header -->\n\t\t\t<div id=\"ppk-wiz-header\">\n\t\t\t\t<button id=\"ppk-back-btn\" type=\"button\" aria-label=\"Go back to previous step\">\n\t\t\t\t\t<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t\t\t\t<path d=\"M8.5 2L3.5 7L8.5 12\" stroke=\"currentColor\" stroke-width=\"2.2\"\n\t\t\t\t\t\t      stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n\t\t\t\t\t<\/svg>\n\t\t\t\t\tBack\n\t\t\t\t<\/button>\n\t\t\t\t<span id=\"ppk-progress-label\" aria-live=\"polite\"><\/span>\n\t\t\t<\/div>\n\n\t\t\t<!-- Progress bar -->\n\t\t\t<div id=\"ppk-progress-bar-track\" role=\"progressbar\" aria-valuenow=\"0\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n\t\t\t\t<div id=\"ppk-progress-bar-fill\"><\/div>\n\t\t\t<\/div>\n\n\t\t\t<!-- Steps -->\n\t\t\t<div id=\"ppk-steps-wrap\">\n\n\t\t\t\t<!-- ============================================================ -->\n\t\t\t\t<!-- STEP: welcome                                                 -->\n\t\t\t\t<!-- ============================================================ -->\n\t\t\t\t<div class=\"ppk-step\" id=\"ppk-step-welcome\" style=\"text-align: center;\">\n\t\t\t\t\t<style>\n\t\t\t\t\t\t\/* \u5716\u7247\u81ea\u9069\u61c9\u653e\u5927\u5f15\u64ce\uff0c\u5f37\u5236\u7d55\u5c0d\u7f6e\u4e2d\u4e26\u6d88\u6ec5\u9802\u90e8\u7a7a\u9699 *\/\n\t\t\t\t\t\t.ppk-welcome-dog-img {\n\t\t\t\t\t\t\twidth: 100% !important;\n\t\t\t\t\t\t\tmax-width: 280px !important; \/* \u624b\u6a5f\u7aef\u5927\u5716 *\/\n\t\t\t\t\t\t\theight: auto !important;\n\t\t\t\t\t\t\tmargin-top: 0 !important; \n\t\t\t\t\t\t\tmargin-bottom: 16px !important;\n\t\t\t\t\t\t\tmargin-left: auto !important;\n\t\t\t\t\t\t\tmargin-right: auto !important;\n\t\t\t\t\t\t\tdisplay: block !important; \n\t\t\t\t\t\t\tborder-radius: 0 !important;\n\t\t\t\t\t\t\tfloat: none !important; \/* \u9810\u9632 Theme \u6d6e\u52d5\u5e72\u64fe *\/\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@media (min-width: 481px) {\n\t\t\t\t\t\t\t.ppk-welcome-dog-img {\n\t\t\t\t\t\t\t\tmax-width: 340px !important; \/* Tablet \u7d55\u5c0d\u7f6e\u4e2d\u653e\u5927 *\/\n\t\t\t\t\t\t\t\tmargin-left: auto !important;\n\t\t\t\t\t\t\t\tmargin-right: auto !important;\n\t\t\t\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@media (min-width: 1025px) {\n\t\t\t\t\t\t\t.ppk-welcome-dog-img {\n\t\t\t\t\t\t\t\tmax-width: 360px !important; \/* Desktop \u7d55\u5c0d\u7f6e\u4e2d\u653e\u5927 *\/\n\t\t\t\t\t\t\t\tmargin-left: auto !important;\n\t\t\t\t\t\t\t\tmargin-right: auto !important;\n\t\t\t\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t<\/style>\n\t\t\t\t\t<img decoding=\"async\" class=\"ppk-welcome-dog-img\" src=\"https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/01-1400x1200-1.png\" alt=\"PAPEPO Welcome Dog\" data-img-id=\"dog-welcome-illustration\">\n\t\t\t\t\t<h1 class=\"ppk-step-title\" style=\"font-size: 1.85rem; font-weight: 900; color: #3d271d; margin-bottom: 14px; line-height: 1.3; letter-spacing: -0.01em;\">Book your collection in 60 seconds<\/h1>\n\t\t\t\t\t<p class=\"ppk-step-hint\" style=\"font-size: 0.98rem; color: #505a5f; margin-bottom: 28px; line-height: 1.5; padding: 0 5px;\">\n\t\t\t\t\t\tNo phone calls. No waiting. Answer a few quick questions and we will confirm your first visit right away.\n\t\t\t\t\t<\/p>\n\t\t\t\t\t<div class=\"ppk-btn-row\">\n\t\t\t\t\t\t<button class=\"ppk-btn-primary\" type=\"button\" onclick=\"window.ppkWizard.goToStep('postcode')\">\n\t\t\t\t\t\t\tStart Booking\n\t\t\t\t\t\t<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t<!-- ============================================================ -->\n\t\t\t\t<!-- STEP: postcode                                                -->\n\t\t\t\t<!-- Search & Replace anchor \u2014 insert additional steps below      -->\n\t\t\t\t<!-- ============================================================ -->\n\t\t\t\t<div class=\"ppk-step\" id=\"ppk-step-postcode\" style=\"text-align: center;\">\n\t\t\t\t\t<style>\n\t\t\t\t\t\t\/* \u7cbe\u7d30\u5316 Postcode \u8f38\u5165\u6846\u5916\u89c0 *\/\n\t\t\t\t\t\t.ppk-input-postcode-field {\n\t\t\t\t\t\t\twidth: 100% !important;\n\t\t\t\t\t\t\tmax-width: 100% !important;\n\t\t\t\t\t\t\tpadding: 16px 20px !important;\n\t\t\t\t\t\t\tfont-size: 1.2rem !important;\n\t\t\t\t\t\t\tfont-weight: 700 !important;\n\t\t\t\t\t\t\tcolor: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #fcfbfa !important;\n\t\t\t\t\t\t\tborder: 2px solid #3d271d !important;\n\t\t\t\t\t\t\tborder-radius: 14px !important;\n\t\t\t\t\t\t\ttext-align: center !important;\n\t\t\t\t\t\t\ttext-transform: uppercase !important;\n\t\t\t\t\t\t\tletter-spacing: 0.05em !important;\n\t\t\t\t\t\t\tbox-shadow: inset 0 2px 4px rgba(0,0,0,0.03) !important;\n\t\t\t\t\t\t\ttransition: border-color 0.2s ease, box-shadow 0.2s ease !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-input-postcode-field:focus {\n\t\t\t\t\t\t\tborder-color: #ffd800 !important;\n\t\t\t\t\t\t\toutline: none !important;\n\t\t\t\t\t\t\tbox-shadow: 0 0 0 4px rgba(255, 216, 0, 0.2) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t<\/style>\n\n\t\t\t\t\t<img decoding=\"async\" class=\"ppk-wizard-illustration\" src=\"https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/02-1400x1200-1.png\" alt=\"PAPEPO Postcode Check\" data-img-id=\"postcode-illustration\">\n\n\t\t\t\t\t<h2 class=\"ppk-step-title\" style=\"font-size: 1.85rem; font-weight: 900; color: #3d271d; margin-top: 0 !important; margin-bottom: 12px !important; line-height: 1.3; letter-spacing: -0.01em;\">Where should we scoop?<\/h2>\n\t\t\t\t\t<p class=\"ppk-step-desc\" style=\"font-size: 1.05rem; color: #66554e; margin-bottom: 24px; line-height: 1.5; padding: 0 10px;\">We currently service Bromley (BR1 to BR7). Enter your full UK postcode to check real-time fleet availability.<\/p>\n\t\t\t\t\t<div class=\"ppk-form-group\" style=\"margin-bottom: 20px; text-align: left;\">\n\t\t\t\t\t\t<label class=\"ppk-label\" for=\"ppk-field-postcode\" style=\"display: block; font-size: 0.9rem; font-weight: 800; color: #3d271d; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 8px; padding-left: 4px;\">Enter Postcode<\/label>\n\t\t\t\t\t\t<input class=\"ppk-input-postcode-field\" type=\"text\" id=\"ppk-field-postcode\" name=\"customer_postcode\" placeholder=\"e.g. BR1 1AA\" autocomplete=\"postal-code\" maxlength=\"10\" oninput=\"document.getElementById('ppk-postcode-error').hidden=true; if(window.ppkWizard && window.ppkWizard.resetPostcodeFullyBookedState) window.ppkWizard.resetPostcodeFullyBookedState();\">\n\t\t\t\t\t\t<div class=\"ppk-error-msg\" id=\"ppk-postcode-error\" hidden style=\"color: #d4351c; font-weight: 700; font-size: 0.95rem; margin-top: 8px; padding-left: 4px;\"><\/div>\n\t\t\t\t\t\t<div id=\"ppk-postcode-fully-booked-banner\" hidden style=\"margin-top: 16px;\"><\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"ppk-btn-row\">\n\t\t\t\t\t\t<button type=\"button\" class=\"ppk-btn-primary\" id=\"ppk-postcode-btn\" onclick=\"window.ppkWizard.handlePostcodeContinue()\">Check Availability<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t<!-- ============================================================ -->\n\t\t\t\t<!-- STEP: dogs (placeholder \u2014 replace with full content)         -->\n\t\t\t\t<!-- ============================================================ -->\n\t\t\t\t<div class=\"ppk-step\" id=\"ppk-step-dogs\" style=\"text-align: center;\">\n\t\t\t\t\t<style>\n\t\t\t\t\t\t\/* Premium \u72d7\u72d7\u9078\u9805\u5c08\u7528\u5361\u7247\u7d44 *\/\n\t\t\t\t\t\t.ppk-dogs-premium-group {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\tflex-direction: column !important;\n\t\t\t\t\t\t\tgap: 10px !important;\n\t\t\t\t\t\t\tmargin-bottom: 24px !important;\n\t\t\t\t\t\t\ttext-align: left !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-dogs-card-label {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\talign-items: center !important;\n\t\t\t\t\t\t\tgap: 14px !important;\n\t\t\t\t\t\t\tpadding: 16px 20px !important;\n\t\t\t\t\t\t\tborder: 2px solid #e1dedb !important;\n\t\t\t\t\t\t\tborder-radius: 16px !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tbackground: #ffffff !important;\n\t\t\t\t\t\t\ttransition: all 0.15s ease-in-out !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-dogs-card-label:hover {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #fcfbfa !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\/* \u9078\u4e2d\u72c0\u614b\uff1a\u5f37\u529b\u9ad8\u5c0d\u6bd4\u54c1\u724c\u5561\u8272\u908a\u6846\u8207\u8f15\u5fae\u6696\u6c99\u80cc\u666f\u8272 *\/\n\t\t\t\t\t\t.ppk-dogs-card-label:has(input:checked) {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #f9f6f3 !important;\n\t\t\t\t\t\t\tbox-shadow: 0 4px 12px rgba(61, 39, 29, 0.04) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-dogs-card-label input[type=\"radio\"] {\n\t\t\t\t\t\t\twidth: 22px !important;\n\t\t\t\t\t\t\theight: 22px !important;\n\t\t\t\t\t\t\taccent-color: #3d271d !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-dogs-card-text {\n\t\t\t\t\t\t\tfont-size: 1.1rem !important;\n\t\t\t\t\t\t\tfont-weight: 700 !important;\n\t\t\t\t\t\t\tcolor: #3d271d !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-dogs-card-text small {\n\t\t\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\t\t\tfont-size: 0.85rem !important;\n\t\t\t\t\t\t\tcolor: #7c6e67 !important;\n\t\t\t\t\t\t\tfont-weight: 400 !important;\n\t\t\t\t\t\t\tmargin-top: 2px !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t<\/style>\n\n\t\t\t\t\t<img decoding=\"async\" class=\"ppk-wizard-illustration\" src=\"https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/03-1400x1200-1.png\" alt=\"PAPEPO Dog Count\" data-img-id=\"dog-count-illustration\">\n\n\t\t\t\t<h1 class=\"ppk-step-title\" style=\"font-size: 1.85rem; font-weight: 900; color: #3d271d; margin-top: 0 !important; margin-bottom: 4px !important; line-height: 1.3; letter-spacing: -0.01em;\">How many dogs do you have?<\/h1>\n\t\t\t\t<p class=\"ppk-step-hint\" style=\"font-size: 1.02rem; color: #66554e; margin-bottom: 20px; line-height: 1.4; padding: 0 10px;\">Enter the total number of dogs requiring waste clearance.<\/p>\n\n\t\t\t<div style=\"display:flex; align-items:center; justify-content:center; gap:16px; margin:24px 0;\">\n\t\t\t\t<button type=\"button\" id=\"ppk-dog-minus\"\n\t\t\t\t        style=\"width:50px; height:50px; background:#3D271D; color:#FFF; border:none; border-radius:6px; font-size:1.6rem; font-weight:bold; cursor:pointer; user-select:none; line-height:1; flex-shrink:0;\">\u2212<\/button>\n\t\t\t\t<input type=\"number\" id=\"ppk-dog-count\" name=\"dog_count\" min=\"1\" max=\"30\" value=\"1\" readonly\n\t\t\t\t       style=\"width:80px; height:50px; text-align:center; font-size:1.6rem; font-weight:800; border:2px solid #3D271D; border-radius:6px; background:#FFF; color:#3D271D; margin:0; -moz-appearance:textfield; -webkit-appearance:none;\">\n\t\t\t\t<button type=\"button\" id=\"ppk-dog-plus\"\n\t\t\t\t        style=\"width:50px; height:50px; background:#FFE000; color:#3D271D; border:2px solid #3D271D; border-radius:6px; font-size:1.6rem; font-weight:bold; cursor:pointer; user-select:none; line-height:1; flex-shrink:0;\">+<\/button>\n\t\t\t<\/div>\n\t\t\t<p style=\"font-size:0.95rem; color:#66554e; margin:0 0 20px; line-height:1.5; text-align:center;\">\n\t\t\t\tEach additional dog adds <strong>+\u00a3<span id=\"ppk-dog-rate-val\">2.00<\/span><\/strong> per visit.<br>\n\t\t\t\tTotal Extra: <strong style=\"color:#3d271d;\">+\u00a3<span id=\"ppk-dog-total-display\">0.00<\/span><\/strong>\n\t\t\t<\/p>\n\n\t\t\t<script>\n\t\t\t(function () {\n\t\t\t\tvar dogInput     = document.getElementById('ppk-dog-count');\n\t\t\t\tvar dogTotalEl   = document.getElementById('ppk-dog-total-display');\n\t\t\t\tvar minusBtn     = document.getElementById('ppk-dog-minus');\n\t\t\t\tvar plusBtn      = document.getElementById('ppk-dog-plus');\n\t\t\t\tvar extraDogRate = 2;\n\n\t\t\t\tfunction updateDogTotal() {\n\t\t\t\t\tvar count = Math.min(30, Math.max(1, parseInt(dogInput.value, 10) || 1));\n\t\t\t\t\tdogInput.value = count;\n\t\t\t\t\tvar extra = Math.max(0, (count - 1) * extraDogRate);\n\t\t\t\t\tif (dogTotalEl) dogTotalEl.textContent = extra.toFixed(2);\n\t\t\t\t\t\/\/ Dim buttons at limits to give tactile feedback.\n\t\t\t\t\tif (minusBtn) minusBtn.style.opacity = count <= 1  ? '0.4' : '1';\n\t\t\t\t\tif (plusBtn)  plusBtn.style.opacity  = count >= 30 ? '0.4' : '1';\n\t\t\t\t}\n\n\t\t\t\tif (minusBtn) {\n\t\t\t\t\tminusBtn.addEventListener('click', function () {\n\t\t\t\t\t\tdogInput.value = Math.max(1, (parseInt(dogInput.value, 10) || 1) - 1);\n\t\t\t\t\t\tupdateDogTotal();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (plusBtn) {\n\t\t\t\t\tplusBtn.addEventListener('click', function () {\n\t\t\t\t\t\tdogInput.value = Math.min(30, (parseInt(dogInput.value, 10) || 1) + 1);\n\t\t\t\t\t\tupdateDogTotal();\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t\/\/ Run once on load to sync wizard state and button opacity.\n\t\t\t\tupdateDogTotal();\n\t\t\t})();\n\t\t\t<\/script>\n\n\t\t\t<div class=\"ppk-btn-row\">\n\t\t\t\t<button class=\"ppk-btn-primary\" type=\"button\" onclick=\"window.ppkWizard.goToStep('frequency');\">\n\t\t\t\t\tContinue &rarr;\n\t\t\t\t<\/button>\n\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t<!-- ============================================================ -->\n\t\t\t\t<!-- STEP: date (first service date selection)                    -->\n\t\t\t\t<!-- ============================================================ -->\n\t\t\t\t<div class=\"ppk-step\" id=\"ppk-step-frequency\" style=\"text-align: center;\">\n\t\t\t\t\t<style>\n\t\t\t\t\t\t\/* Premium \u983b\u7387\u9078\u9805\u5c08\u7528\u5361\u7247\u7d44 *\/\n\t\t\t\t\t\t.ppk-freq-premium-group {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\tflex-direction: column !important;\n\t\t\t\t\t\t\tgap: 10px !important;\n\t\t\t\t\t\t\tmargin-bottom: 24px !important;\n\t\t\t\t\t\t\ttext-align: left !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-freq-card-label {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\talign-items: center !important;\n\t\t\t\t\t\t\tgap: 14px !important;\n\t\t\t\t\t\t\tpadding: 16px 20px !important;\n\t\t\t\t\t\t\tborder: 2px solid #e1dedb !important;\n\t\t\t\t\t\t\tborder-radius: 16px !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tbackground: #ffffff !important;\n\t\t\t\t\t\t\ttransition: all 0.15s ease-in-out !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-freq-card-label:hover {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #fcfbfa !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\/* \u9078\u4e2d\u72c0\u614b\uff1a\u5f37\u529b\u9ad8\u5c0d\u6bd4\u54c1\u724c\u5561\u8272\u908a\u6846\u8207\u8f15\u5fae\u6696\u6c99\u80cc\u666f\u8272 *\/\n\t\t\t\t\t\t.ppk-freq-card-label:has(input:checked) {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #f9f6f3 !important;\n\t\t\t\t\t\t\tbox-shadow: 0 4px 12px rgba(61, 39, 29, 0.04) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-freq-card-label input[type=\"radio\"] {\n\t\t\t\t\t\t\twidth: 22px !important;\n\t\t\t\t\t\t\theight: 22px !important;\n\t\t\t\t\t\t\taccent-color: #3d271d !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-freq-card-text {\n\t\t\t\t\t\t\tfont-size: 1.1rem !important;\n\t\t\t\t\t\t\tfont-weight: 700 !important;\n\t\t\t\t\t\t\tcolor: #3d271d !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-freq-card-text small {\n\t\t\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\t\t\tfont-size: 0.85rem !important;\n\t\t\t\t\t\t\tcolor: #7c6e67 !important;\n\t\t\t\t\t\t\tfont-weight: 400 !important;\n\t\t\t\t\t\t\tmargin-top: 2px !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t<\/style>\n\n\t\t\t\t\t<img decoding=\"async\" class=\"ppk-wizard-illustration\" src=\"https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/04-1400x1200-1.png\" alt=\"PAPEPO Service Frequency\" data-img-id=\"frequency-illustration\">\n\n\t\t\t\t\t<h2 class=\"ppk-step-title\" style=\"font-size: 1.85rem; font-weight: 900; color: #3d271d; margin-top: 0 !important; margin-bottom: 4px !important; line-height: 1.3; letter-spacing: -0.01em;\">How often should we scoop?<\/h2>\n\t\t\t\t\t<p class=\"ppk-step-desc\" style=\"font-size: 1.02rem; color: #66554e; margin-bottom: 20px; line-height: 1.4; padding: 0 10px;\">Keep your lawn flawless with regular visits, or book an intensive rescue clean.<\/p>\n\n\t\t\t\t\t<div class=\"ppk-freq-premium-group\" id=\"ppk-frequency-options\">\n\t\t\t\t<label class=\"ppk-freq-card-label\">\n\t\t\t\t\t<input type=\"radio\" name=\"order_frequency\" value=\"weekly\" checked>\n\t\t\t\t\t<span class=\"ppk-freq-card-text\">\n\t\t\t\t\t\tEvery Week <span style=\"font-size:0.9rem; font-weight:600; color:#7c6e67;\">(From \u00a315.00 \/ visit)<\/span>\n\t\t\t\t\t\t<small>Most popular for spotless gardens. Maximum savings applied.<\/small>\n\t\t\t\t\t<\/span>\n\t\t\t\t<\/label>\n\t\t\t\t<label class=\"ppk-freq-card-label\">\n\t\t\t\t\t<input type=\"radio\" name=\"order_frequency\" value=\"twice_weekly\">\n\t\t\t\t\t<span class=\"ppk-freq-card-text\">\n\t\t\t\t\t\tTwice Weekly <span style=\"font-size:0.9rem; font-weight:600; color:#7c6e67;\">(From \u00a313.00 \/ visit)<\/span>\n\t\t\t\t\t\t<small>Intensive cover for high-volume households \u2014 2 visits every 7 days.<\/small>\n\t\t\t\t\t<\/span>\n\t\t\t\t<\/label>\n\t\t\t\t<label class=\"ppk-freq-card-label\">\n\t\t\t\t\t<input type=\"radio\" name=\"order_frequency\" value=\"fortnightly\">\n\t\t\t\t\t<span class=\"ppk-freq-card-text\">\n\t\t\t\t\t\tEvery 2 Weeks <span style=\"font-size:0.9rem; font-weight:600; color:#7c6e67;\">(From \u00a320.00 \/ visit)<\/span>\n\t\t\t\t\t\t<small>Standard recurring maintenance cycle for normal active lawns.<\/small>\n\t\t\t\t\t<\/span>\n\t\t\t\t<\/label>\n\t\t\t\t<label class=\"ppk-freq-card-label\">\n\t\t\t\t\t<input type=\"radio\" name=\"order_frequency\" value=\"monthly\">\n\t\t\t\t\t<span class=\"ppk-freq-card-text\">\n\t\t\t\t\t\tEvery 4 Weeks <span style=\"font-size:0.9rem; font-weight:600; color:#7c6e67;\">(From \u00a325.00 \/ visit)<\/span>\n\t\t\t\t\t\t<small>Occasional clearing. Best suited for single small dogs.<\/small>\n\t\t\t\t\t<\/span>\n\t\t\t\t<\/label>\n\t\t\t\t<label class=\"ppk-freq-card-label\">\n\t\t\t\t\t<input type=\"radio\" name=\"order_frequency\" value=\"one_off\">\n\t\t\t\t\t<span class=\"ppk-freq-card-text\">\n\t\t\t\t\t\tOne-Off Rescue Clean <span style=\"font-size:0.9rem; font-weight:600; color:#7c6e67;\">(From \u00a328.00)<\/span>\n\t\t\t\t\t\t<small>Single trial visit for active gardens or switching clients.<\/small>\n\t\t\t\t\t<\/span>\n\t\t\t\t<\/label>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"ppk-btn-row\">\n\t\t\t\t\t\t<button type=\"button\" class=\"ppk-btn-primary\" onclick=\"window.ppkWizard.handleFrequencyContinue()\">Continue &rarr;<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t<div class=\"ppk-step\" id=\"ppk-step-garden_condition\" style=\"text-align: center;\">\n\t\t\t\t\t<style>\n\t\t\t\t\t\t\/* Premium \u82b1\u5712\u72c0\u614b\u5c08\u7528\u5361\u7247\u7d44 *\/\n\t\t\t\t\t\t.ppk-garden-premium-group {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\tflex-direction: column !important;\n\t\t\t\t\t\t\tgap: 12px !important;\n\t\t\t\t\t\t\tmargin-bottom: 24px !important;\n\t\t\t\t\t\t\ttext-align: left !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-garden-card-label {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\talign-items: center !important;\n\t\t\t\t\t\t\tgap: 14px !important;\n\t\t\t\t\t\t\tpadding: 18px 20px !important;\n\t\t\t\t\t\t\tborder: 2px solid #e1dedb !important;\n\t\t\t\t\t\t\tborder-radius: 16px !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tbackground: #ffffff !important;\n\t\t\t\t\t\t\ttransition: all 0.15s ease-in-out !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-garden-card-label:hover {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #fcfbfa !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\/* \u9078\u4e2d\u72c0\u614b\uff1a\u5f37\u529b\u9ad8\u5c0d\u6bd4\u54c1\u724c\u5561\u8272\u908a\u6846\u8207\u8f15\u5fae\u6696\u6c99\u80cc\u666f\u8272 *\/\n\t\t\t\t\t\t.ppk-garden-card-label:has(input:checked) {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #f9f6f3 !important;\n\t\t\t\t\t\t\tbox-shadow: 0 4px 12px rgba(61, 39, 29, 0.04) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-garden-card-label input[type=\"radio\"] {\n\t\t\t\t\t\t\twidth: 22px !important;\n\t\t\t\t\t\t\theight: 22px !important;\n\t\t\t\t\t\t\taccent-color: #3d271d !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-garden-card-text {\n\t\t\t\t\t\t\tfont-size: 1.1rem !important;\n\t\t\t\t\t\t\tfont-weight: 700 !important;\n\t\t\t\t\t\t\tcolor: #3d271d !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-garden-card-text small {\n\t\t\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\t\t\tfont-size: 0.85rem !important;\n\t\t\t\t\t\t\tcolor: #7c6e67 !important;\n\t\t\t\t\t\t\tfont-weight: 400 !important;\n\t\t\t\t\t\t\tmargin-top: 2px !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t<\/style>\n\n\t\t\t\t\t<img decoding=\"async\" class=\"ppk-wizard-illustration\" src=\"https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/05-1400x1200-1.png\" alt=\"PAPEPO Garden Condition\" data-img-id=\"garden-condition-illustration\">\n\n\t\t\t\t\t<h2 class=\"ppk-step-title\" style=\"font-size: 1.85rem; font-weight: 900; color: #3d271d; margin-top: 0 !important; margin-bottom: 4px !important; line-height: 1.3; letter-spacing: -0.01em;\">Has it been a while since the last thorough scoop?<\/h2>\n\t\t\t\t\t<p class=\"ppk-step-desc\" style=\"font-size: 1.02rem; color: #66554e; margin-bottom: 20px; line-height: 1.4; padding: 0 20px;\">Whether you maintain daily waste clearance plays a subtle but important role in tailoring your initial lawn reset service layer.<\/p>\n\n\t\t\t\t\t<div id=\"ppk-oneoff-upsell-banner\" style=\"display:none; margin-bottom:20px; padding:16px 18px; background:#fff9e6; border-left:4px solid #ffb100; border-radius:4px; font-size:0.95rem; color:#0b0c0c; line-height:1.5; text-align: left;\">\n\t\t\t\t\t\t\ud83d\udca1 <strong>Exclusive Upgrade Offer:<\/strong> We noticed you selected a standalone One-off clean. If you click <strong>\"Back\"<\/strong> at the top left and switch to a flexible <strong>Weekly subscription<\/strong>, you instantly unlock two major perks:\n\t\t\t\t\t\t<ul style=\"margin-left: 20px; margin-top: 6px; list-style-type: disc;\">\n\t\t\t\t\t\t\t<li>Your lawn reset setup fee is slashed from <span class=\"ppk-banner-oo-amt\">&pound;38<\/span> down to <strong>just <span class=\"ppk-banner-sub-amt\">&pound;19<\/span><\/strong>!<\/li>\n\t\t\t\t\t\t<li>You qualify for a <strong>FREE Odour-Free Outdoor Waste Caddy (Worth \u00a315)<\/strong> delivered straight to your door on our 4th visit!<\/li>\n\t\t\t\t\t<\/ul>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"ppk-garden-premium-group\" id=\"ppk-garden-options\">\n\t\t\t\t\t\t<label class=\"ppk-garden-card-label\">\n\t\t\t\t\t\t\t<input type=\"radio\" name=\"garden_reset_required\" value=\"regular_clearance\" checked>\n\t\t\t\t\t\t\t<span class=\"ppk-garden-card-text\">\n\t\t\t\t\t\t\t\t<strong>Maintained Regularly<\/strong>\n\t\t\t\t\t\t\t\t<small>We frequently clear our yard's dog waste. There is minimal hardened, long-term accumulation.<\/small>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t<\/label>\n\t\t\t\t\t\t<label class=\"ppk-garden-card-label\">\n\t\t\t\t\t\t\t<input type=\"radio\" name=\"garden_reset_required\" value=\"overdue_clearance\">\n\t\t\t\t\t\t\t<span class=\"ppk-garden-card-text\">\n\t\t\t\t\t\t\t\t<strong>It's Been a Long While<\/strong>\n\t\t\t\t\t\t\t\t<small>Waste has accumulated over a significant period. A deep extraction and initial lawn reset are required. Initial turnaround clean surcharge may apply (<span id=\"ppk-dynamic-surcharge-amount\">&pound;19.00<\/span> one-off). <span id=\"ppk-dynamic-surcharge-note\">Subscription unlocked! We have discounted your lawn reset setup fee from &pound;38 down to &pound;19.<\/span><\/small>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t<\/label>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"ppk-btn-row\">\n\t\t\t\t\t\t<button type=\"button\" class=\"ppk-btn-primary\" onclick=\"window.ppkWizard.handleGardenConditionContinue()\">Continue &rarr;<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t<div class=\"ppk-step\" id=\"ppk-step-bin_location\" style=\"text-align: center;\">\n\t\t\t\t\t<style>\n\t\t\t\t\t\t\/* Premium \u5ba3\u544a\u5c08\u7528\u96d9\u72c0\u614b\u5361\u7247\u7d44 *\/\n\t\t\t\t\t\t.ppk-declare-premium-group {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\tflex-direction: column !important;\n\t\t\t\t\t\t\tgap: 12px !important;\n\t\t\t\t\t\t\tmargin-bottom: 24px !important;\n\t\t\t\t\t\t\ttext-align: left !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-declare-card-label {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\talign-items: center !important;\n\t\t\t\t\t\t\tgap: 14px !important;\n\t\t\t\t\t\t\tpadding: 18px 20px !important;\n\t\t\t\t\t\t\tborder: 2px solid #e1dedb !important;\n\t\t\t\t\t\t\tborder-radius: 16px !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tbackground: #ffffff !important;\n\t\t\t\t\t\t\ttransition: all 0.15s ease-in-out !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-declare-card-label:hover {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #fcfbfa !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\/* Agree \u72c0\u614b\u9078\u4e2d\uff1a\u9ad8\u5c0d\u6bd4\u54c1\u724c\u5561\u8272 *\/\n\t\t\t\t\t\t.ppk-declare-card-label:has(input[value=\"agree\"]:checked) {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #f9f6f3 !important;\n\t\t\t\t\t\t\tbox-shadow: 0 4px 12px rgba(61, 39, 29, 0.04) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\/* Disagree \u72c0\u614b\u9078\u4e2d\uff1a\u8b66\u793a\u6027\u8f15\u67d4\u6de1\u7d05 *\/\n\t\t\t\t\t\t.ppk-declare-card-label:has(input[value=\"disagree\"]:checked) {\n\t\t\t\t\t\t\tborder-color: #d93838 !important;\n\t\t\t\t\t\t\tbackground: #fff5f5 !important;\n\t\t\t\t\t\t\tbox-shadow: 0 4px 12px rgba(217, 56, 56, 0.03) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-declare-card-label input[type=\"radio\"] {\n\t\t\t\t\t\t\twidth: 22px !important;\n\t\t\t\t\t\t\theight: 22px !important;\n\t\t\t\t\t\t\taccent-color: #3d271d !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\/* \u5f37\u5236\u63a7\u5236 Disagree \u7684 Radio \u984f\u8272\u70ba\u7d05\u8272 *\/\n\t\t\t\t\t\t.ppk-declare-card-label input[value=\"disagree\"] {\n\t\t\t\t\t\t\taccent-color: #d93838 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-declare-card-text {\n\t\t\t\t\t\t\tfont-size: 1.1rem !important;\n\t\t\t\t\t\t\tfont-weight: 700 !important;\n\t\t\t\t\t\t\tcolor: #3d271d !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-declare-card-text small {\n\t\t\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\t\t\tfont-size: 0.85rem !important;\n\t\t\t\t\t\t\tcolor: #7c6e67 !important;\n\t\t\t\t\t\t\tfont-weight: 400 !important;\n\t\t\t\t\t\t\tmargin-top: 2px !important;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\/* \u5c08\u5c6c\u9632\u79a6\u6027\u9053\u6b49\u5f48\u7a97\u6a23\u5f0f *\/\n\t\t\t\t\t\t.ppk-disagree-modal-overlay {\n\t\t\t\t\t\t\tposition: fixed !important;\n\t\t\t\t\t\t\ttop: 0 !important;\n\t\t\t\t\t\t\tleft: 0 !important;\n\t\t\t\t\t\t\twidth: 100% !important;\n\t\t\t\t\t\t\theight: 100% !important;\n\t\t\t\t\t\t\tbackground: rgba(61, 39, 29, 0.6) !important;\n\t\t\t\t\t\t\tbackdrop-filter: blur(4px) !important;\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\talign-items: center !important;\n\t\t\t\t\t\t\tjustify-content: center !important;\n\t\t\t\t\t\t\tz-index: 99999 !important;\n\t\t\t\t\t\t\topacity: 0;\n\t\t\t\t\t\t\tpointer-events: none;\n\t\t\t\t\t\t\ttransition: opacity 0.2s ease-in-out !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-disagree-modal-overlay.ppk-active {\n\t\t\t\t\t\t\topacity: 1 !important;\n\t\t\t\t\t\t\tpointer-events: auto !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-disagree-modal-card {\n\t\t\t\t\t\t\tbackground: #ffffff !important;\n\t\t\t\t\t\t\tpadding: 32px !important;\n\t\t\t\t\t\t\tborder-radius: 24px !important;\n\t\t\t\t\t\t\tmax-width: 420px !important;\n\t\t\t\t\t\t\twidth: 90% !important;\n\t\t\t\t\t\t\ttext-align: center !important;\n\t\t\t\t\t\t\tbox-shadow: 0 20px 40px rgba(61, 39, 29, 0.15) !important;\n\t\t\t\t\t\t\ttransform: translateY(20px) !important;\n\t\t\t\t\t\t\ttransition: transform 0.2s ease-in-out !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-disagree-modal-overlay.ppk-active .ppk-disagree-modal-card {\n\t\t\t\t\t\t\ttransform: translateY(0) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t<\/style>\n\n\t\t\t\t\t<img decoding=\"async\" class=\"ppk-wizard-illustration\" src=\"https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/06-1400x1200-1.png\" alt=\"PAPEPO Waste Declaration\" data-img-id=\"bin-location-illustration\">\n\n\t\t\t\t\t<h2 class=\"ppk-step-title\" style=\"font-size: 1.85rem; font-weight: 900; color: #3d271d; margin-top: 0 !important; margin-bottom: 4px !important; line-height: 1.3; letter-spacing: -0.01em;\">Our Waste Policy<\/h2>\n\t\t\t\t\t<p class=\"ppk-step-desc\" style=\"font-size: 1.02rem; color: #66554e; margin-bottom: 20px; line-height: 1.4; padding: 0 15px;\">\n\t\t\t\t\t\tPlease note that our handlers <strong>do not take dog waste away off-site<\/strong>. All scooped waste will be safely double-bagged and placed directly into your local council <strong>General Waste Bin<\/strong> (Black\/Grey bin) or dedicated dog waste bin if available on your property.\n\t\t\t\t\t<\/p>\n\n\t\t\t\t\t<div class=\"ppk-declare-premium-group\">\n\t\t\t\t\t\t<label class=\"ppk-declare-card-label\">\n\t\t\t\t\t\t\t<input type=\"radio\" name=\"ppk_waste_compliance\" value=\"agree\" checked>\n\t\t\t\t\t\t\t<span class=\"ppk-declare-card-text\">\n\t\t\t\t\t\t\t\tI agree to the waste policy\n\t\t\t\t\t\t\t\t<small>I understand and permit waste to be double-bagged and left in my general waste bin or dedicated dog waste bin if available on your property.<\/small>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t<\/label>\n\t\t\t\t\t\t<label class=\"ppk-declare-card-label\">\n\t\t\t\t\t\t\t<input type=\"radio\" name=\"ppk_waste_compliance\" value=\"disagree\">\n\t\t\t\t\t\t\t<span class=\"ppk-declare-card-text\" style=\"color: #d93838;\">\n\t\t\t\t\t\t\t\tI do not agree\n\t\t\t\t\t\t\t\t<small style=\"color: #bc5353;\">We will not be able to proceed with your regular scooping service.<\/small>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t<\/label>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"ppk-btn-row\">\n\t\t\t\t\t\t<button type=\"button\" class=\"ppk-btn-primary\" onclick=\"window.ppkWizard.handleWasteCompliance()\">Continue &rarr;<\/button>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"ppk-waste-disagree-modal\" class=\"ppk-disagree-modal-overlay\">\n\t\t\t\t\t\t<div class=\"ppk-disagree-modal-card\">\n\t\t\t\t\t\t\t<div style=\"font-size: 3.5rem; margin-bottom: 12px;\">\u2709\ufe0f<\/div>\n\t\t\t\t\t\t\t<h3 style=\"font-size: 1.5rem; font-weight: 900; color: #3d271d; margin-bottom: 12px;\">We're So Sorry!<\/h3>\n\t\t\t\t\t\t\t<p style=\"font-size: 1rem; color: #66554e; line-height: 1.5; margin-bottom: 24px;\">\n\t\t\t\t\t\t\t\tDue to environmental regulations and local logistics, we are strictly required to leave double-bagged waste on-site. Because you do not agree to this policy, we unfortunately cannot complete your booking at this time.\n\t\t\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\t<div style=\"display: flex !important; flex-direction: column !important; gap: 14px !important; align-items: center !important;\">\n\t\t\t\t\t\t\t\t<button type=\"button\" class=\"ppk-btn-primary\" style=\"width: 100% !important; justify-content: center !important; margin: 0 !important; padding: 14px 20px !important; font-size: 1.05rem !important;\" onclick=\"window.ppkWizard.closeDisagreeModal()\">\n\t\t\t\t\t\t\t\t\t&larr; Go Back &amp; Reconsider\n\t\t\t\t\t\t\t\t<\/button>\n\t\t\t\t\t\t\t\t<button type=\"button\" style=\"background: none !important; border: none !important; color: #a3938b !important; text-decoration: underline !important; font-size: 0.88rem !important; cursor: pointer !important; padding: 4px 12px !important; font-weight: 500 !important; transition: color 0.15s ease !important;\" onmouseover=\"this.style.color='#d93838'\" onmouseout=\"this.style.color='#a3938b'\" onclick=\"window.ppkWizard.terminateBooking()\">\n\t\t\t\t\t\t\t\t\tConfirm &amp; Exit Booking\n\t\t\t\t\t\t\t\t<\/button>\n\t\t\t\t\t\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\n\t\t\t\t<div class=\"ppk-step\" id=\"ppk-step-date\" data-step-alias=\"ppk-step-date_select\" style=\"text-align: center;\">\n\t\t\t\t\t<style>\n\t\t\t\t\t\t\/* Premium \u667a\u80fd\u8abf\u5ea6\u5361\u7247\u6838\u5fc3\u908a\u8ddd\u4fee\u5fa9 *\/\n\t\t\t\t\t\t.ppk-date-premium-group {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\tflex-direction: column !important;\n\t\t\t\t\t\t\tgap: 12px !important;\n\t\t\t\t\t\t\tmargin-bottom: 24px !important;\n\t\t\t\t\t\t\ttext-align: left !important;\n\t\t\t\t\t\t\tmax-width: 100% !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-date-group-label {\n\t\t\t\t\t\t\tfont-size: 0.9rem !important;\n\t\t\t\t\t\t\tfont-weight: 800 !important;\n\t\t\t\t\t\t\tcolor: #3d271d !important;\n\t\t\t\t\t\t\ttext-transform: uppercase !important;\n\t\t\t\t\t\t\tletter-spacing: 0.05em !important;\n\t\t\t\t\t\t\tmargin: 8px 0 4px 4px !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-date-card-label {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\talign-items: center !important;\n\t\t\t\t\t\t\tgap: 14px !important;\n\t\t\t\t\t\t\tpadding: 16px 20px !important;\n\t\t\t\t\t\t\tborder: 2px solid #e1dedb !important;\n\t\t\t\t\t\t\tborder-radius: 16px !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tbackground: #ffffff !important;\n\t\t\t\t\t\t\ttransition: all 0.15s ease-in-out !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-date-card-label:hover {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #fcfbfa !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\/* \u50c5\u7528\u6236\u9ede\u64ca\u5f8c\u52a0\u4e0a .active \u624d\u9ad8\u4eae \u2014 \u7981\u6b62 :first-child \/ :first-of-type \u9810\u8a2d\u8b8a\u8272 *\/\n\t\t\t\t\t\t.ppk-date-card-label.active {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #f9f6f3 !important;\n\t\t\t\t\t\t\tbox-shadow: 0 4px 12px rgba(61, 39, 29, 0.04) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-date-card-label input[type=\"radio\"] {\n\t\t\t\t\t\t\twidth: 22px !important;\n\t\t\t\t\t\t\theight: 22px !important;\n\t\t\t\t\t\t\taccent-color: #3d271d !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-date-card-text {\n\t\t\t\t\t\t\tfont-size: 1.05rem !important;\n\t\t\t\t\t\t\tfont-weight: 700 !important;\n\t\t\t\t\t\t\tcolor: #3d271d !important;\n\t\t\t\t\t\t\ttext-align: left !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-date-card-text small {\n\t\t\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\t\t\tfont-size: 0.85rem !important;\n\t\t\t\t\t\t\tcolor: #7c6e67 !important;\n\t\t\t\t\t\t\tfont-weight: 400 !important;\n\t\t\t\t\t\t\tmargin-top: 2px !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#ppk-step-date .ppk-info-banner {\n\t\t\t\t\t\t\ttext-align: left !important;\n\t\t\t\t\t\t\tmargin-bottom: 24px !important;\n\t\t\t\t\t\t\tbackground: #fcfbfa !important;\n\t\t\t\t\t\t\tborder-left: 4px solid #7c6e67 !important;\n\t\t\t\t\t\t\tpadding: 14px 16px !important;\n\t\t\t\t\t\t\tborder-radius: 8px !important;\n\t\t\t\t\t\t\tfont-size: 0.92rem !important;\n\t\t\t\t\t\t\tline-height: 1.5 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t<\/style>\n\n\t\t\t\t\t<img decoding=\"async\" class=\"ppk-wizard-illustration\" src=\"https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/07-1400x1200-1.png\" alt=\"PAPEPO Commencement Date\" data-img-id=\"date-illustration\">\n\n\t\t\t\t\t<h2 class=\"ppk-step-title\" style=\"font-size: 1.85rem; font-weight: 900; color: #3d271d; margin-top: 0 !important; margin-bottom: 4px !important; line-height: 1.3; letter-spacing: -0.01em;\">When should we start?<\/h2>\n\t\t\t\t\t<p class=\"ppk-step-desc\" id=\"ppk-date-step-desc\" style=\"font-size: 1.02rem; color: #66554e; margin-bottom: 20px; line-height: 1.4; padding: 0 20px;\">Select your preferred commencement date based on your neighborhood's route slots.<\/p>\n\n\t\t\t\t\t<div class=\"ppk-date-premium-group\" id=\"ppk-date-slots-container\"><\/div>\n\t\t\t\t\t<div id=\"ppk-waiting-list-date-notice\" hidden style=\"background: #f9f6f3 !important; border: 2px solid #3d271d !important; border-radius: 16px !important; padding: 20px 22px !important; margin-bottom: 24px !important; text-align: left !important; font-size: 1rem !important; line-height: 1.55 !important; color: #55443e !important;\">\n\t\t\t\t\t\tPriority Waiting List Mode: No date selection required. We will automatically pre-allocate the earliest available collection day for you once our fleet capacity scales up.\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<input type=\"hidden\" id=\"ppk-selected-date-input\" name=\"scheduled_date\">\n\n\t\t\t\t\t<div id=\"ppk-operational-window-banner\" style=\"background: #f9f6f3 !important; border: 2px dashed #3d271d !important; border-radius: 16px !important; padding: 20px !important; margin-bottom: 24px !important; text-align: left !important;\">\n\n\t\t\t\t\t\t<span id=\"ppk-subscription-period-warning\" style=\"display: block; background: #fff1f1; border-left: 4px solid #d93838; padding: 14px 16px !important; border-radius: 12px !important; color: #b72424; font-weight: 700; margin-bottom: 16px; font-size: 0.92rem; line-height: 1.45; box-sizing: border-box !important;\">\n\t\t\t\t\t\t\t\ud83d\udd12 Permanent Slot Lock-in Active:\n\t\t\t\t\t\t\t<br>\n\t\t\t\t\t\t\t<span style=\"font-weight: 400; color: #5b3939; display: block; margin-top: 5px;\">The day of the week you select above will become your permanent regular service day. For example, selecting a Thursday date means our handler will arrive <strong>every subsequent Thursday<\/strong> to maintain your lawn.<\/span>\n\t\t\t\t\t\t<\/span>\n\n\t\t\t\t\t\t<div style=\"display: flex !important; align-items: center !important; gap: 10px !important; margin-bottom: 8px !important;\">\n\t\t\t\t\t\t\t<span style=\"font-size: 1.3rem !important;\">\ud83d\ude9a<\/span>\n\t\t\t\t\t\t\t<strong style=\"font-size: 1.05rem !important; color: #3d271d !important; text-transform: uppercase; letter-spacing: 0.05em;\">Smart Dispatch Window<\/strong>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<p style=\"font-size: 0.95rem !important; color: #55443e !important; line-height: 1.5 !important; margin: 0 !important;\">\n\t\t\t\t\t\t\tTo minimize environmental emissions and maintain low commercial-grade rates, our smart dispatch engine automatically filters available calendar slots based on your verified postcode zone.\n\t\t\t\t\t\t\t<br><br>\n\t\t\t\t\t\t\tYour garden maintenance will be completed efficiently <strong>between 10:00 AM and 3:00 PM (Operating Monday to Sunday)<\/strong>.\n\t\t\t\t\t\t\t<br><br>\n\t\t\t\t\t\t\t<span style=\"color: #00703c !important; font-weight: 700;\">\u2713 Contactless Dispatch:<\/span> You do not need to stay at home or wait for our driver \u2014 as long as our handler has clear gate access, your playground reset will be fully automated!\n\t\t\t\t\t\t<\/p>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<input type=\"hidden\" name=\"time_window\" value=\"10am_3pm\">\n\n\t\t\t\t\t<div class=\"ppk-info-banner\">\n\t\t\t\t\t\t<strong>Billing Transparency:<\/strong> To guarantee and secure your permanent van slot, all subsequent regular renewals are processed automatically 4 days prior to your chosen collection day (e.g., Friday for a Tuesday service). You retain full control and can cancel or pause anytime via your Customer Portal.\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"ppk-btn-row\">\n\t\t\t\t\t\t<button type=\"button\" id=\"ppk-date-continue-btn\" class=\"ppk-btn-primary\" onclick=\"window.ppkWizard.handleDateContinue()\" disabled>Select a Date to Continue<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t<!-- ============================================================ -->\n\t\t\t\t<!-- STEP: terms (disagree triggers modal)                        -->\n\t\t\t\t<!-- ============================================================ -->\n\t\t\t\t<div class=\"ppk-step\" id=\"ppk-step-term_safety\" style=\"text-align: center;\">\n\t\t\t\t\t<style>\n\t\t\t\t\t\t\/* Premium \u5b89\u5168\u689d\u6b3e\u9078\u9805\u5c08\u7528\u5361\u7247\u7d44 *\/\n\t\t\t\t\t\t.ppk-safety-premium-group {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\tflex-direction: column !important;\n\t\t\t\t\t\t\tgap: 12px !important;\n\t\t\t\t\t\t\tmargin-bottom: 24px !important;\n\t\t\t\t\t\t\ttext-align: left !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-safety-card-label {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\talign-items: center !important;\n\t\t\t\t\t\t\tgap: 14px !important;\n\t\t\t\t\t\t\tpadding: 18px 20px !important;\n\t\t\t\t\t\t\tborder: 2px solid #e1dedb !important;\n\t\t\t\t\t\t\tborder-radius: 16px !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tbackground: #ffffff !important;\n\t\t\t\t\t\t\ttransition: all 0.15s ease-in-out !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-safety-card-label:hover {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #fcfbfa !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\/* Agree \u72c0\u614b\u9078\u4e2d\uff1a\u5f37\u529b\u9ad8\u5c0d\u6bd4\u54c1\u724c\u6df1\u5561\u8272 *\/\n\t\t\t\t\t\t.ppk-safety-card-label:has(input[value=\"agree\"]:checked) {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #f9f6f3 !important;\n\t\t\t\t\t\t\tbox-shadow: 0 4px 12px rgba(61, 39, 29, 0.04) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\/* Disagree \u72c0\u614b\u9078\u4e2d\uff1a\u8b66\u793a\u6027\u8f15\u67d4\u6de1\u7d05\u8207\u7d05\u8272\u908a\u6846 *\/\n\t\t\t\t\t\t.ppk-safety-card-label:has(input[value=\"disagree\"]:checked) {\n\t\t\t\t\t\t\tborder-color: #d93838 !important;\n\t\t\t\t\t\t\tbackground: #fff5f5 !important;\n\t\t\t\t\t\t\tbox-shadow: 0 4px 12px rgba(217, 56, 56, 0.03) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-safety-card-label input[type=\"radio\"] {\n\t\t\t\t\t\t\twidth: 22px !important;\n\t\t\t\t\t\t\theight: 22px !important;\n\t\t\t\t\t\t\taccent-color: #3d271d !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-safety-card-label input[value=\"disagree\"] {\n\t\t\t\t\t\t\taccent-color: #d93838 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-safety-card-text {\n\t\t\t\t\t\t\tfont-size: 1.1rem !important;\n\t\t\t\t\t\t\tfont-weight: 700 !important;\n\t\t\t\t\t\t\tcolor: #3d271d !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-safety-card-text small {\n\t\t\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\t\t\tfont-size: 0.85rem !important;\n\t\t\t\t\t\t\tcolor: #7c6e67 !important;\n\t\t\t\t\t\t\tfont-weight: 400 !important;\n\t\t\t\t\t\t\tmargin-top: 2px !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t<\/style>\n\n\t\t\t\t\t<img decoding=\"async\" class=\"ppk-wizard-illustration\" src=\"https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/08-1400x1200-1.png\" alt=\"PAPEPO Dog Safety Rule\" data-img-id=\"dog-safety-rule\">\n\n\t\t\t\t\t<h2 class=\"ppk-step-title\" style=\"font-size: 1.85rem; font-weight: 900; color: #3d271d; margin-top: 0 !important; margin-bottom: 4px !important; line-height: 1.3; letter-spacing: -0.01em;\">1. Secure Dogs Indoors?<\/h2>\n\t\t\t\t\t<p class=\"ppk-step-desc\" style=\"font-size: 1.02rem; color: #66554e; margin-bottom: 20px; line-height: 1.4; padding: 0 15px;\">\n\t\t\t\t\t\tTo protect our field technicians, all dogs <strong>must remain inside the property<\/strong> during the service window. Loose dogs in the garden will cause immediate handler departure.\n\t\t\t\t\t<\/p>\n\n\t\t\t\t\t<div class=\"ppk-safety-premium-group\">\n\t\t\t\t\t\t<label class=\"ppk-safety-card-label\">\n\t\t\t\t\t\t\t<input type=\"radio\" name=\"term_safety_val\" value=\"agree\" id=\"ppk-term_safety-agree\" checked>\n\t\t\t\t\t\t\t<span class=\"ppk-safety-card-text\">\n\t\t\t\t\t\t\t\tYes, I agree to secure my dogs indoors\n\t\t\t\t\t\t\t\t<small>I will ensure no dogs are left unattended in the garden during our service schedule.<\/small>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t<\/label>\n\t\t\t\t\t\t<label class=\"ppk-safety-card-label\">\n\t\t\t\t\t\t\t<input type=\"radio\" name=\"term_safety_val\" value=\"disagree\" id=\"ppk-term_safety-disagree\">\n\t\t\t\t\t\t\t<span class=\"ppk-safety-card-text\" style=\"color: #d93838;\">\n\t\t\t\t\t\t\t\tNo, I cannot guarantee this\n\t\t\t\t\t\t\t\t<small style=\"color: #bc5353;\">Unsecured dogs present a safety risk, meaning our team cannot service your yard.<\/small>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t<\/label>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"ppk-btn-row\">\n\t\t\t\t\t\t<button class=\"ppk-btn-primary\" type=\"button\" onclick=\"window.ppkWizard.handleTermStep('term_safety', 'term_gate')\">Continue &rarr;<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t<div class=\"ppk-step\" id=\"ppk-step-term_gate\" style=\"text-align: center;\">\n\t\t\t\t\t<style>\n\t\t\t\t\t\t\/* Premium \u9598\u9580\u689d\u6b3e\u9078\u9805\u5c08\u7528\u5361\u7247\u7d44 *\/\n\t\t\t\t\t\t.ppk-gate-premium-group {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\tflex-direction: column !important;\n\t\t\t\t\t\t\tgap: 12px !important;\n\t\t\t\t\t\t\tmargin-bottom: 24px !important;\n\t\t\t\t\t\t\ttext-align: left !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-gate-card-label {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\talign-items: center !important;\n\t\t\t\t\t\t\tgap: 14px !important;\n\t\t\t\t\t\t\tpadding: 18px 20px !important;\n\t\t\t\t\t\t\tborder: 2px solid #e1dedb !important;\n\t\t\t\t\t\t\tborder-radius: 16px !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tbackground: #ffffff !important;\n\t\t\t\t\t\t\ttransition: all 0.15s ease-in-out !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-gate-card-label:hover {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #fcfbfa !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\/* Agree \u72c0\u614b\u9078\u4e2d\uff1a\u54c1\u724c\u6df1\u5561\u8272 *\/\n\t\t\t\t\t\t.ppk-gate-card-label:has(input[value=\"agree\"]:checked) {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #f9f6f3 !important;\n\t\t\t\t\t\t\tbox-shadow: 0 4px 12px rgba(61, 39, 29, 0.04) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\/* Disagree \u72c0\u614b\u9078\u4e2d\uff1a\u8b66\u793a\u6027\u8f15\u67d4\u6de1\u7d05\u8207\u7d05\u8272\u908a\u6846 *\/\n\t\t\t\t\t\t.ppk-gate-card-label:has(input[value=\"disagree\"]:checked) {\n\t\t\t\t\t\t\tborder-color: #d93838 !important;\n\t\t\t\t\t\t\tbackground: #fff5f5 !important;\n\t\t\t\t\t\t\tbox-shadow: 0 4px 12px rgba(217, 56, 56, 0.03) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-gate-card-label input[type=\"radio\"] {\n\t\t\t\t\t\t\twidth: 22px !important;\n\t\t\t\t\t\t\theight: 22px !important;\n\t\t\t\t\t\t\taccent-color: #3d271d !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-gate-card-label input[value=\"disagree\"] {\n\t\t\t\t\t\t\taccent-color: #d93838 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-gate-card-text {\n\t\t\t\t\t\t\tfont-size: 1.1rem !important;\n\t\t\t\t\t\t\tfont-weight: 700 !important;\n\t\t\t\t\t\t\tcolor: #3d271d !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-gate-card-text small {\n\t\t\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\t\t\tfont-size: 0.85rem !important;\n\t\t\t\t\t\t\tcolor: #7c6e67 !important;\n\t\t\t\t\t\t\tfont-weight: 400 !important;\n\t\t\t\t\t\t\tmargin-top: 2px !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t<\/style>\n\n\t\t\t\t\t<img decoding=\"async\" class=\"ppk-wizard-illustration\" src=\"https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/09-1400x1200-1.png\" alt=\"PAPEPO Property Access Rule\" data-img-id=\"gate-access-rule\">\n\n\t\t\t\t\t<h2 class=\"ppk-step-title\" style=\"font-size: 1.85rem; font-weight: 900; color: #3d271d; margin-top: 0 !important; margin-bottom: 4px !important; line-height: 1.3; letter-spacing: -0.01em;\">2. Unlocked Gate &amp; Direct Entry Access<\/h2>\n\t\t\t\t\t<p class=\"ppk-step-desc\" style=\"font-size: 1.02rem; color: #66554e; margin-bottom: 16px; line-height: 1.4; padding: 0 15px;\">\n\t\t\t\t\t\tIf our team arrives and cannot gain entry to your garden due to a locked gate or no answer, the service visit will still be fully billable.\n\t\t\t\t\t<\/p>\n\t\t\t\t\t<p class=\"papepo-wizard-security-notice\">\n\t\t\t\t\t\tFor maximum home security, our platform does not store gate codes or access keys. You will receive a direct WhatsApp link to your assigned handler on your final order confirmation card to securely coordinate gate codes on your service day.\n\t\t\t\t\t<\/p>\n\n\t\t\t\t\t<div class=\"ppk-gate-premium-group\">\n\t\t\t\t\t\t<label class=\"ppk-gate-card-label\">\n\t\t\t\t\t\t\t<input type=\"radio\" name=\"term_gate_val\" value=\"agree\" id=\"ppk-term_gate-agree\" checked>\n\t\t\t\t\t\t\t<span class=\"ppk-gate-card-text\">\n\t\t\t\t\t\t\t\tYes\n\t\t\t\t\t\t\t\t<small>I have a direct external side gate or alleyway. I understand handlers are strictly prohibited from walking through the interior of my home.<\/small>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t<\/label>\n\t\t\t\t\t\t<label class=\"ppk-gate-card-label\">\n\t\t\t\t\t\t\t<input type=\"radio\" name=\"term_gate_val\" value=\"disagree\" id=\"ppk-term_gate-disagree\">\n\t\t\t\t\t\t\t<span class=\"ppk-gate-card-text\" style=\"color: #d93838;\">\n\t\t\t\t\t\t\t\tNo\n\t\t\t\t\t\t\t\t<small style=\"color: #bc5353;\">I do not have direct external garden access without passing through my home interior.<\/small>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t<\/label>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"ppk-btn-row\">\n\t\t\t\t\t\t<button class=\"ppk-btn-primary\" type=\"button\" onclick=\"window.ppkWizard.handleTermStep('term_gate', 'term_photos')\">Continue &rarr;<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t<div class=\"ppk-step\" id=\"ppk-step-term_photos\" style=\"text-align: center;\">\n\t\t\t\t\t<style>\n\t\t\t\t\t\t\/* Premium \u7167\u7247\u689d\u6b3e\u9078\u9805\u5c08\u7528\u5361\u7247\u7d44 *\/\n\t\t\t\t\t\t.ppk-photos-premium-group {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\tflex-direction: column !important;\n\t\t\t\t\t\t\tgap: 12px !important;\n\t\t\t\t\t\t\tmargin-bottom: 20px !important;\n\t\t\t\t\t\t\ttext-align: left !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-photos-card-label {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\talign-items: center !important;\n\t\t\t\t\t\t\tgap: 14px !important;\n\t\t\t\t\t\t\tpadding: 18px 20px !important;\n\t\t\t\t\t\t\tborder: 2px solid #e1dedb !important;\n\t\t\t\t\t\t\tborder-radius: 16px !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tbackground: #ffffff !important;\n\t\t\t\t\t\t\ttransition: all 0.15s ease-in-out !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-photos-card-label:hover {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #fcfbfa !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\/* \u9078\u4e2d\u72c0\u614b\uff1a\u7cbe\u7dfb\u54c1\u724c\u6df1\u5561\u8272 *\/\n\t\t\t\t\t\t.ppk-photos-card-label:has(input[type=\"radio\"]:checked) {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #f9f6f3 !important;\n\t\t\t\t\t\t\tbox-shadow: 0 4px 12px rgba(61, 39, 29, 0.04) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-photos-card-label input[type=\"radio\"] {\n\t\t\t\t\t\t\twidth: 22px !important;\n\t\t\t\t\t\t\theight: 22px !important;\n\t\t\t\t\t\t\taccent-color: #3d271d !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-photos-card-text {\n\t\t\t\t\t\t\tfont-size: 1.1rem !important;\n\t\t\t\t\t\t\tfont-weight: 700 !important;\n\t\t\t\t\t\t\tcolor: #3d271d !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-photos-card-text small {\n\t\t\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\t\t\tfont-size: 0.85rem !important;\n\t\t\t\t\t\t\tcolor: #7c6e67 !important;\n\t\t\t\t\t\t\tfont-weight: 400 !important;\n\t\t\t\t\t\t\tmargin-top: 2px !important;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\/* \u52d5\u614b\u5f71\u76f8\u5bb9\u5668\uff1a\u50c5\u5728\u9078\u64c7 Yes \u6642\u5c55\u958b *\/\n\t\t\t\t\t\t#ppk-step-term_photos #ppk-photo-upload-container {\n\t\t\t\t\t\t\tmax-height: 0;\n\t\t\t\t\t\t\topacity: 0;\n\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n\t\t\t\t\t\t\tmargin-bottom: 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#ppk-step-term_photos:has(#ppk-term_photos-agree:checked) #ppk-photo-upload-container {\n\t\t\t\t\t\t\tmax-height: 320px;\n\t\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\t\tmargin-bottom: 24px;\n\t\t\t\t\t\t\tpadding-top: 4px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\/* Premium \u5f71\u76f8\/\u76f8\u6a5f\u6309\u9215\u5916\u89c0 *\/\n\t\t\t\t\t\t.ppk-camera-trigger-box {\n\t\t\t\t\t\t\tborder: 2px dashed #c0b9b3;\n\t\t\t\t\t\t\tbackground: #fdfcfb;\n\t\t\t\t\t\t\tborder-radius: 14px;\n\t\t\t\t\t\t\tpadding: 20px;\n\t\t\t\t\t\t\tcursor: pointer;\n\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\tflex-direction: column;\n\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t\t\tgap: 8px;\n\t\t\t\t\t\t\ttransition: all 0.15s;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-camera-trigger-box:hover {\n\t\t\t\t\t\t\tborder-color: #3d271d;\n\t\t\t\t\t\t\tbackground: #fcfbfa;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-camera-trigger-box svg {\n\t\t\t\t\t\t\tstroke: #7c6e67;\n\t\t\t\t\t\t\ttransition: stroke 0.15s;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-camera-trigger-box:hover svg {\n\t\t\t\t\t\t\tstroke: #3d271d;\n\t\t\t\t\t\t}\n\t\t\t\t\t<\/style>\n\n\t\t\t\t\t<img decoding=\"async\" class=\"ppk-wizard-illustration\" src=\"https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/10-1400x1200-1.png\" alt=\"PAPEPO Garden Photo Verification\" data-img-id=\"photos-rule\">\n\n\t\t\t\t\t<h2 class=\"ppk-step-title\" style=\"font-size: 1.85rem; font-weight: 900; color: #3d271d; margin-top: 0 !important; margin-bottom: 4px !important; line-height: 1.3; letter-spacing: -0.01em;\">3. Avoid Scooping the Wrong Poop?<\/h2>\n\t\t\t\t\t<p class=\"ppk-step-desc\" style=\"font-size: 1.02rem; color: #66554e; margin-bottom: 20px; line-height: 1.4; padding: 0 15px;\">\n\t\t\t\t\t\tPlease upload 2 clear photos: 1 of your garden entry\/gate point, and 1 showing the current condition of your lawn. This helps our handlers prep the correct tools before arrival.\n\t\t\t\t\t<\/p>\n\n\t\t\t\t\t<div class=\"ppk-photos-premium-group\">\n\t\t\t\t\t\t<label class=\"ppk-photos-card-label\">\n\t\t\t\t\t\t\t<input type=\"radio\" name=\"term_photos_val\" value=\"agree\" id=\"ppk-term_photos-agree\" checked>\n\t\t\t\t\t\t\t<span class=\"ppk-photos-card-text\">\n\t\t\t\t\t\t\t\tYes, I can take\/upload a photo now\n\t\t\t\t\t\t\t\t<small>Highly recommended to ensure flawless mapping on our first dispatch visit.<\/small>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t<\/label>\n\t\t\t\t\t\t<label class=\"ppk-photos-card-label\">\n\t\t\t\t\t\t\t<input type=\"radio\" name=\"term_photos_val\" value=\"disagree\" id=\"ppk-term_photos-disagree\">\n\t\t\t\t\t\t\t<span class=\"ppk-photos-card-text\">\n\t\t\t\t\t\t\t\tNo, I'll skip this and let you guys guess\n\t\t\t\t\t\t\t\t<small>I'll make sure my house number is clearly visible from the street instead.<\/small>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t<\/label>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"ppk-photo-upload-container\">\n\t\t\t\t\t\t<label for=\"ppk-garden-photo-file-input\">\n\t\t\t\t\t\t\t<div class=\"ppk-camera-trigger-box\">\n\t\t\t\t\t\t\t\t<div id=\"ppk-media-icon-placeholder\"><\/div>\n\t\t\t\t\t\t\t\t<span style=\"font-weight: 700; color: #3d271d; font-size: 0.95rem;\" id=\"ppk-upload-status-text\">Detecting Device...<\/span>\n\t\t\t\t\t\t\t\t<small style=\"color: #918279;\">JPEG, PNG accepted<\/small>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/label>\n\t\t\t\t\t\t<input type=\"file\" id=\"ppk-garden-photo-file-input\" name=\"garden_layout_photo[]\" accept=\"image\/*\" capture=\"environment\" multiple style=\"display: none;\" onchange=\"window.ppkWizard.handleGardenPhotoPreview(this)\">\n\t\t\t\t\t\t<div class=\"papepo-preview-track\" id=\"ppk-photo-preview-track\">\n\t\t\t\t\t\t\t<img class=\"papepo-preview-thumb\" id=\"ppk-photo-preview-1\" alt=\"Garden entry or gate preview\" style=\"display: none;\">\n\t\t\t\t\t\t\t<img class=\"papepo-preview-thumb\" id=\"ppk-photo-preview-2\" alt=\"Lawn condition preview\" style=\"display: none;\">\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"ppk-btn-row\">\n\t\t\t\t\t\t<button class=\"ppk-btn-primary\" type=\"button\" onclick=\"window.ppkWizard.handleTermStep('term_photos', 'term_disposal')\">Continue &rarr;<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t<div class=\"ppk-step\" id=\"ppk-step-term_disposal\" style=\"text-align: center;\">\n\t\t\t\t\t<style>\n\t\t\t\t\t\t\/* Premium \u5ee2\u7269\u8655\u7406\u689d\u6b3e\u9078\u9805\u5c08\u7528\u5361\u7247\u7d44 *\/\n\t\t\t\t\t\t.ppk-disposal-premium-group {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\tflex-direction: column !important;\n\t\t\t\t\t\t\tgap: 12px !important;\n\t\t\t\t\t\t\tmargin-bottom: 24px !important;\n\t\t\t\t\t\t\ttext-align: left !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-disposal-card-label {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\talign-items: center !important;\n\t\t\t\t\t\t\tgap: 14px !important;\n\t\t\t\t\t\t\tpadding: 18px 20px !important;\n\t\t\t\t\t\t\tborder: 2px solid #e1dedb !important;\n\t\t\t\t\t\t\tborder-radius: 16px !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tbackground: #ffffff !important;\n\t\t\t\t\t\t\ttransition: all 0.15s ease-in-out !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-disposal-card-label:hover {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #fcfbfa !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\/* Agree \u72c0\u614b\u9078\u4e2d\uff08\u9ed1\u6876\u6216\u5c08\u7528\u72d7\u6876\uff09\uff1a\u54c1\u724c\u6df1\u5561\u8272 *\/\n\t\t\t\t\t\t.ppk-disposal-card-label:has(input[value^=\"agree\"]:checked) {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #f9f6f3 !important;\n\t\t\t\t\t\t\tbox-shadow: 0 4px 12px rgba(61, 39, 29, 0.04) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\/* Disagree \u72c0\u614b\u9078\u4e2d\uff1a\u8b66\u793a\u6027\u8f15\u67d4\u6de1\u7d05\u8207\u7d05\u8272\u908a\u6846 *\/\n\t\t\t\t\t\t.ppk-disposal-card-label:has(input[value=\"disagree\"]:checked) {\n\t\t\t\t\t\t\tborder-color: #d93838 !important;\n\t\t\t\t\t\t\tbackground: #fff5f5 !important;\n\t\t\t\t\t\t\tbox-shadow: 0 4px 12px rgba(217, 56, 56, 0.03) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-disposal-card-label input[type=\"radio\"] {\n\t\t\t\t\t\t\twidth: 22px !important;\n\t\t\t\t\t\t\theight: 22px !important;\n\t\t\t\t\t\t\taccent-color: #3d271d !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t\t\t\tflex-shrink: 0 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-disposal-card-label input[value=\"disagree\"] {\n\t\t\t\t\t\t\taccent-color: #d93838 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-disposal-card-text {\n\t\t\t\t\t\t\tfont-size: 1.1rem !important;\n\t\t\t\t\t\t\tfont-weight: 700 !important;\n\t\t\t\t\t\t\tcolor: #3d271d !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-disposal-card-text small {\n\t\t\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\t\t\tfont-size: 0.85rem !important;\n\t\t\t\t\t\t\tcolor: #7c6e67 !important;\n\t\t\t\t\t\t\tfont-weight: 400 !important;\n\t\t\t\t\t\t\tmargin-top: 2px !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-disposal-card-label:has(input[value=\"disagree\"]:checked) .ppk-disposal-card-text {\n\t\t\t\t\t\t\tcolor: #d93838 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t<\/style>\n\n\t\t\t\t\t<img decoding=\"async\" class=\"ppk-wizard-illustration\" src=\"https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/11-1400x1200-1.png\" alt=\"PAPEPO Legal Disposal Rule\" data-img-id=\"disposal-rule\">\n\n\t\t\t\t\t<h2 class=\"ppk-step-title\" style=\"font-size: 1.85rem; font-weight: 900; color: #3d271d; margin-top: 0 !important; margin-bottom: 4px !important; line-height: 1.3; letter-spacing: -0.01em;\">4. Where Should We Place the Scooped Bags?<\/h2>\n\t\t\t\t\t<p class=\"ppk-step-desc\" style=\"font-size: 1.02rem; color: #66554e; margin-bottom: 20px; line-height: 1.4; padding: 0 15px;\">\n\t\t\t\t\t\tOur handlers tie and double-bag all waste securely. Following environmental and routing standards, we leave them in your available household bin.\n\t\t\t\t\t<\/p>\n\n\t\t\t\t\t<div class=\"ppk-disposal-premium-group\">\n\t\t\t\t\t\t<label class=\"ppk-disposal-card-label\">\n\t\t\t\t\t\t\t<input type=\"radio\" name=\"term_disposal_val\" value=\"agree_black\" id=\"ppk-term_disposal-black\" checked>\n\t\t\t\t\t\t\t<span class=\"ppk-disposal-card-text\">\n\t\t\t\t\t\t\t\tYes, place them inside my Domestic Black Bin\n\t\t\t\t\t\t\t\t<small>Perfectly compliant with local councils for double-bagged waste.<\/small>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t<\/label>\n\n\t\t\t\t\t\t<label class=\"ppk-disposal-card-label\">\n\t\t\t\t\t\t\t<input type=\"radio\" name=\"term_disposal_val\" value=\"agree_dog\" id=\"ppk-term_disposal-dog\">\n\t\t\t\t\t\t\t<span class=\"ppk-disposal-card-text\">\n\t\t\t\t\t\t\t\tYes, place them inside my Dedicated Dog Waste Bin\n\t\t\t\t\t\t\t\t<small>If you have a dedicated pet waste collection setup on your property.<\/small>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t<\/label>\n\n\t\t\t\t\t\t<label class=\"ppk-disposal-card-label\">\n\t\t\t\t\t\t\t<input type=\"radio\" name=\"term_disposal_val\" value=\"disagree\" id=\"ppk-term_disposal-disagree\">\n\t\t\t\t\t\t\t<span class=\"ppk-disposal-card-text\">\n\t\t\t\t\t\t\t\tNo, I want PAPEPO to take the waste away\n\t\t\t\t\t\t\t\t<small style=\"color: #bc5353;\">Please review how this legal setup directly keeps your subscription rates low.<\/small>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t<\/label>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"ppk-btn-row\">\n\t\t\t\t\t\t<button class=\"ppk-btn-primary\" type=\"button\" onclick=\"window.ppkWizard.handleTermStep('term_disposal', 'term_grass')\">Continue &rarr;<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t<div class=\"ppk-step\" id=\"ppk-step-term_grass\" style=\"text-align: center;\">\n\t\t\t\t\t<style>\n\t\t\t\t\t\t\/* Premium \u8349\u5730\u7dad\u8b77\u689d\u6b3e\u9078\u9805\u5c08\u7528\u5361\u7247\u7d44 *\/\n\t\t\t\t\t\t.ppk-grass-premium-group {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\tflex-direction: column !important;\n\t\t\t\t\t\t\tgap: 12px !important;\n\t\t\t\t\t\t\tmargin-bottom: 24px !important;\n\t\t\t\t\t\t\ttext-align: left !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-grass-card-label {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\talign-items: center !important;\n\t\t\t\t\t\t\tgap: 14px !important;\n\t\t\t\t\t\t\tpadding: 18px 20px !important;\n\t\t\t\t\t\t\tborder: 2px solid #e1dedb !important;\n\t\t\t\t\t\t\tborder-radius: 16px !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tbackground: #ffffff !important;\n\t\t\t\t\t\t\ttransition: all 0.15s ease-in-out !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-grass-card-label:hover {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #fcfbfa !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\/* Agree \u72c0\u614b\u9078\u4e2d\uff1a\u54c1\u724c\u6df1\u5561\u8272 *\/\n\t\t\t\t\t\t.ppk-grass-card-label:has(input[value=\"agree\"]:checked) {\n\t\t\t\t\t\t\tborder-color: #3d271d !important;\n\t\t\t\t\t\t\tbackground: #f9f6f3 !important;\n\t\t\t\t\t\t\tbox-shadow: 0 4px 12px rgba(61, 39, 29, 0.04) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\/* Disagree \u72c0\u614b\u9078\u4e2d\uff1a\u8b66\u793a\u6027\u8f15\u67d4\u6de1\u7d05\u8207\u7d05\u8272\u908a\u6846 *\/\n\t\t\t\t\t\t.ppk-grass-card-label:has(input[value=\"disagree\"]:checked) {\n\t\t\t\t\t\t\tborder-color: #d93838 !important;\n\t\t\t\t\t\t\tbackground: #fff5f5 !important;\n\t\t\t\t\t\t\tbox-shadow: 0 4px 12px rgba(217, 56, 56, 0.03) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-grass-card-label input[type=\"radio\"] {\n\t\t\t\t\t\t\twidth: 22px !important;\n\t\t\t\t\t\t\theight: 22px !important;\n\t\t\t\t\t\t\taccent-color: #3d271d !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-grass-card-label input[value=\"disagree\"] {\n\t\t\t\t\t\t\taccent-color: #d93838 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-grass-card-text {\n\t\t\t\t\t\t\tfont-size: 1.1rem !important;\n\t\t\t\t\t\t\tfont-weight: 700 !important;\n\t\t\t\t\t\t\tcolor: #3d271d !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-grass-card-text small {\n\t\t\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\t\t\tfont-size: 0.85rem !important;\n\t\t\t\t\t\t\tcolor: #7c6e67 !important;\n\t\t\t\t\t\t\tfont-weight: 400 !important;\n\t\t\t\t\t\t\tmargin-top: 2px !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t<\/style>\n\n\t\t\t\t\t<img decoding=\"async\" class=\"ppk-wizard-illustration\" src=\"https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/12-1400x1200-1.png\" alt=\"PAPEPO Lawn &amp; Eco-Flushing Rule\" data-img-id=\"dog-lawn-rule\">\n\n\t\t\t\t\t<h2 class=\"ppk-step-title\" style=\"font-size: 1.85rem; font-weight: 900; color: #3d271d; margin-top: 0 !important; margin-bottom: 4px !important; line-height: 1.3; letter-spacing: -0.01em;\">5. Lawn Maintenance &amp; Eco-Flushing?<\/h2>\n\t\t\t\t\t<p class=\"ppk-step-desc\" style=\"font-size: 1.02rem; color: #66554e; margin-bottom: 20px; line-height: 1.4; padding: 0 15px;\">\n\t\t\t\t\t\tTo ensure proper scooping, please keep grass cut short (under 4 inches). Severe watery diarrhea will be thoroughly flushed and sanitized with non-toxic eco-spray to protect your grass roots.\n\t\t\t\t\t<\/p>\n\n\t\t\t\t\t<div class=\"ppk-grass-premium-group\">\n\t\t\t\t\t\t<label class=\"ppk-grass-card-label\">\n\t\t\t\t\t\t\t<input type=\"radio\" name=\"term_grass_val\" value=\"agree\" id=\"ppk-term_grass-agree\" checked>\n\t\t\t\t\t\t\t<span class=\"ppk-grass-card-text\">\n\t\t\t\t\t\t\t\tYes, I agree to the lawn &amp; flushing policy\n\t\t\t\t\t\t\t\t<small>I will maintain a short lawn, and I permit eco-flushing and disinfecting for watery stools.<\/small>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t<\/label>\n\t\t\t\t\t\t<label class=\"ppk-grass-card-label\">\n\t\t\t\t\t\t\t<input type=\"radio\" name=\"term_grass_val\" value=\"disagree\" id=\"ppk-term_grass-disagree\">\n\t\t\t\t\t\t\t<span class=\"ppk-grass-card-text\" style=\"color: #d93838;\">\n\t\t\t\t\t\t\t\tNo, I do not agree\n\t\t\t\t\t\t\t\t<small style=\"color: #bc5353;\">Please see why clear visibility and topsoil protection are required for our service.<\/small>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t<\/label>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"ppk-btn-row\">\n\t\t\t\t\t\t<button class=\"ppk-btn-primary\" type=\"button\" onclick=\"window.ppkWizard.handleTermStep('term_grass', 'payment')\">Accept &amp; Proceed to Checkout &rarr;<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t<!-- ============================================================ -->\n\t\t\t\t<!-- STEP: payment (customer details + Stripe checkout)         -->\n\t\t\t\t<!-- ============================================================ -->\n\t\t\t\t<div class=\"ppk-step\" id=\"ppk-step-payment\" style=\"text-align: center;\">\n\t\t\t\t\t<style>\n\t\t\t\t\t\t#ppk-step-payment .ppk-checkout-container { max-width: 480px !important; margin: 0 auto !important; text-align: left !important; }\n\t\t\t\t\t\t#ppk-step-payment .ppk-premium-invoice-card { background: #ffffff !important; border: none !important; border-radius: 20px !important; padding: 24px !important; margin-top: 20px !important; margin-bottom: 20px !important; box-shadow: 0 2px 8px rgba(61, 39, 29, 0.08) !important; }\n\t\t\t\t\t\t#ppk-step-payment .ppk-invoice-header { font-size: 1.25rem !important; font-weight: 900 !important; color: #3d271d !important; margin-bottom: 16px !important; border-bottom: 1px dashed #e1dedb !important; padding-bottom: 10px !important; text-transform: uppercase !important; letter-spacing: 0.03em !important; }\n\t\t\t\t\t\t#ppk-step-payment .ppk-invoice-meta-row { display: flex !important; justify-content: space-between !important; align-items: center !important; width: 100% !important; white-space: nowrap !important; margin-bottom: 12px !important; font-size: 1.05rem !important; color: #55443d !important; }\n\t\t\t\t\t\t#ppk-step-payment .ppk-invoice-meta-row.ppk-invoice-section-header,\n\t\t\t\t\t\t#ppk-step-payment #ppk-invoice-rows-container .ppk-invoice-section-header,\n\t\t\t\t\t\t#ppk-step-payment #ppk-receipt-order-detail-wrap .ppk-invoice-section-header { font-weight: 700 !important; color: #3d271d !important; font-size: 1.05rem !important; }\n\t\t\t\t\t\t#ppk-step-payment #ppk-invoice-rows-container .ppk-invoice-row { display: flex !important; justify-content: space-between !important; align-items: center !important; width: 100% !important; white-space: nowrap !important; gap: 12px !important; margin-bottom: 10px !important; font-size: 1.05rem !important; color: #55443d !important; padding-bottom: 10px !important; border-bottom: 1px solid #e0e0e0 !important; }\n\t\t\t\t\t\t#ppk-step-payment #ppk-invoice-rows-container .ppk-invoice-row.ppk-invoice-ledger-compact { font-size: 0.85rem !important; }\n\t\t\t\t\t\t#ppk-step-payment #ppk-invoice-rows-container .ppk-invoice-row.ppk-invoice-ledger-gift { white-space: normal !important; align-items: flex-start !important; border-bottom: none !important; padding-bottom: 4px !important; margin-bottom: 4px !important; }\n\t\t\t\t\t\t#ppk-step-payment #ppk-invoice-rows-container .ppk-invoice-row.ppk-invoice-section-header.ppk-invoice-premium-header { border-bottom: none !important; padding-bottom: 4px !important; margin-bottom: 6px !important; }\n\t\t\t\t\t\t#ppk-step-payment .ppk-invoice-meta-row.ppk-invoice-receipt-meta { font-size: 0.85rem !important; font-weight: 400 !important; color: #55443d !important; margin: 2px 0 !important; padding: 2px 0 !important; line-height: 1.2 !important; border-bottom: none !important; }\n\t\t\t\t\t\t#ppk-step-payment .ppk-receipt-metadata-block + .ppk-invoice-meta-row.ppk-invoice-section-header { margin-top: 20px !important; }\n\t\t\t\t\t\t#ppk-step-payment #ppk-receipt-order-detail-wrap .ppk-invoice-section-header { margin-top: 20px !important; padding-top: 10px !important; }\n\t\t\t\t\t\t#ppk-step-payment #ppk-order-detail-rows { padding: 4px 0 0 !important; }\n\t\t\t\t\t\t#ppk-step-payment .ppk-invoice-detail-row { display: flex !important; justify-content: space-between !important; align-items: flex-start !important; gap: 12px !important; font-size: 0.82rem !important; color: #7c6e67 !important; line-height: 1.3 !important; padding: 4px 0 !important; margin: 0 !important; border-bottom: none !important; }\n\t\t\t\t\t\t#ppk-step-payment .ppk-invoice-detail-row span:last-child { text-align: right; max-width: 58%; }\n\t\t\t\t\t\t#ppk-step-payment .ppk-invoice-total-row { display: flex !important; justify-content: space-between !important; align-items: center !important; width: 100% !important; white-space: nowrap !important; margin-top: 20px !important; padding: 16px 14px !important; border-top: none !important; background: #ffd800 !important; border-radius: 14px !important; border: 2px solid #3d271d !important; }\n\t\t\t\t\t\t#ppk-step-payment .ppk-invoice-total-label { font-size: 1.2rem !important; font-weight: 900 !important; color: #3d271d !important; }\n\t\t\t\t\t\t#ppk-step-payment .ppk-invoice-total-price, #ppk-step-payment #ppk-invoice-grand-total { font-size: 1.75rem !important; font-weight: 900 !important; color: #3d271d !important; }\n\t\t\t\t\t\t#ppk-step-payment .ppk-stripe-premium-box { background: #fbfafa !important; border: 2px solid #e1dedb !important; border-radius: 16px !important; padding: 18px !important; margin-bottom: 8px !important; }\n\t\t\t\t\t\t#ppk-step-payment .ppk-stripe-premium-box:focus-within { border-color: #3d271d !important; box-shadow: 0 4px 14px rgba(61, 39, 29, 0.06) !important; }\n\t\t\t\t\t\t#ppk-step-payment #ppk-stripe-card-element { padding: 14px 12px !important; border: 2px solid #e1dedb !important; border-radius: 14px !important; background: #ffffff !important; margin-bottom: 0 !important; min-height: 48px !important; outline: none !important; }\n\t\t\t\t\t\t#ppk-step-payment #ppk-stripe-card-element.StripeElement--focus { border-color: #3d271d !important; box-shadow: 0 0 0 3px rgba(255, 216, 0, 0.35) !important; }\n\t\t\t\t\t\t#ppk-step-payment .ppk-secure-badge { display: flex !important; align-items: center !important; gap: 6px !important; font-size: 0.85rem !important; color: #62aa6d !important; font-weight: 700 !important; margin-bottom: 10px !important; }\n\t\t\t\t\t\t#ppk-step-payment .ppk-checkout-field { margin-bottom: 18px !important; }\n\t\t\t\t\t\t#ppk-step-payment .ppk-checkout-field .ppk-input, #ppk-step-payment .ppk-checkout-field .ppk-textarea { border-radius: 14px !important; border: 2px solid #e1dedb !important; padding: 14px 16px !important; box-sizing: border-box !important; }\n\t\t\t\t\t\t#ppk-step-payment .ppk-checkout-field .ppk-input:focus, #ppk-step-payment .ppk-checkout-field .ppk-textarea:focus { border-color: #3d271d !important; outline: none !important; box-shadow: 0 0 0 3px rgba(255, 216, 0, 0.25) !important; }\n\t\t\t\t\t\t#ppk-step-payment #ppk-submit-booking-btn { display: flex !important; align-items: center !important; justify-content: center !important; width: 100% !important; max-width: 480px !important; margin: 8px auto 0 !important; padding: 16px 24px !important; font-size: 1.2rem !important; font-weight: 800 !important; color: #3d271d !important; background: #ffd800 !important; border: 2px solid #3d271d !important; border-radius: 14px !important; cursor: pointer !important; }\n\t\t\t\t\t\t#ppk-step-payment #ppk-submit-booking-btn:hover { background: #f5c800 !important; }\n\t\t\t\t\t\t#ppk-step-payment #ppk-submit-booking-btn:disabled { background: #e1dedb !important; color: #7c6e67 !important; cursor: not-allowed !important; }\n\t\t\t\t\t\t#ppk-step-payment #ppk-card-errors { border-radius: 12px !important; margin-top: 12px !important; margin-bottom: 16px !important; }\n\t\t\t\t\t\t#ppk-step-payment.ppk-wl-payment #ppk-checkout-invoice-card { display: none !important; }\n\t\t\t\t\t\t#ppk-step-payment.ppk-wl-payment .ppk-step-desc { margin-bottom: 20px !important; }\n\t\t\t\t\t\t#ppk-step-payment.ppk-wl-payment .ppk-wizard-buttons { margin-top: 20px !important; }\n\t\t\t\t\t<\/style>\n\n\t\t\t\t\t<img decoding=\"async\" class=\"ppk-wizard-illustration\" src=\"https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/13-1400x1200-1.png\" alt=\"PAPEPO Secure Checkout\" data-img-id=\"secure-checkout\">\n\n\t\t\t\t\t<h2 class=\"ppk-step-title\" style=\"font-size: 1.85rem; font-weight: 900; color: #3d271d; margin-top: 0 !important; margin-bottom: 6px !important; line-height: 1.3; letter-spacing: -0.01em;\">Review &amp; Secure Checkout<\/h2>\n\t\t\t\t\t<p id=\"ppk-payment-checkout-desc\" class=\"ppk-step-desc\" style=\"font-size: 1.02rem; color: #66554e; margin-bottom: 20px !important; display: block !important; line-height: 1.4; padding: 0 20px;\">\n\t\t\t\t\t\tYour custom schedule is locked in! Review your ultra-low subscription breakdown below, then enter your details to activate service.\n\t\t\t\t\t<\/p>\n\n\t\t\t\t\t<div class=\"ppk-checkout-container\" style=\"margin-top: 20px !important;\">\n\t\t\t\t\t\t<div id=\"ppk-checkout-invoice-card\" class=\"ppk-premium-invoice-card\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/logo-black-no-background.png\" alt=\"PAPEPO\" width=\"150\" style=\"width:150px; height:auto; display:block; margin-bottom:15px;\">\n\t\t\t\t\t\t\t<div class=\"ppk-invoice-header\">Order Summary<\/div>\n\t\t\t\t\t\t\t<div class=\"ppk-receipt-metadata-block\">\n\t\t\t\t\t\t\t\t<div class=\"ppk-invoice-meta-row ppk-invoice-receipt-meta\">\n\t\t\t\t\t\t\t\t\t<span>Date<\/span>\n\t\t\t\t\t\t\t\t\t<span id=\"ppk-receipt-date\">01 Jun 2026<\/span>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"ppk-invoice-meta-row ppk-invoice-receipt-meta\">\n\t\t\t\t\t\t\t\t\t<span>Order No.<\/span>\n\t\t\t\t\t\t\t\t\t<span id=\"ppk-receipt-order-no\">PPK-20260601-T8WZUT<\/span>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"ppk-invoice-meta-row ppk-invoice-receipt-meta\">\n\t\t\t\t\t\t\t\t\t<span>Postcode<\/span>\n\t\t\t\t\t\t\t\t\t<span id=\"ppk-receipt-postcode\">&mdash;<\/span>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"ppk-invoice-meta-row ppk-invoice-section-header\">\n\t\t\t\t\t\t\t\t<span>Service Frequency<\/span>\n\t\t\t\t\t\t\t\t<span id=\"ppk-summary-freq-desc\">&mdash;<\/span>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div id=\"ppk-invoice-rows-container\"><\/div>\n\t\t\t\t\t\t\t<div id=\"ppk-receipt-order-detail-wrap\">\n\t\t\t\t\t\t\t\t<div class=\"ppk-invoice-row ppk-invoice-section-header\"><span>Order Detail<\/span><\/div>\n\t\t\t\t\t\t\t\t<div id=\"ppk-order-detail-rows\"><\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<span id=\"ppk-summary-sub-total\" style=\"display: none;\" aria-hidden=\"true\">0.00<\/span>\n\t\t\t\t\t\t\t<div class=\"ppk-invoice-total-row\">\n\t\t\t\t\t\t\t\t<span class=\"ppk-invoice-total-label\">Total Due Now:<\/span>\n\t\t\t\t\t\t\t\t<span class=\"ppk-invoice-total-price\" id=\"ppk-invoice-grand-total\">&pound;0.00<\/span>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<span id=\"ppk-summary-grand-total\" style=\"display: none;\" aria-hidden=\"true\">0.00<\/span>\n\t\t\t\t\t\t\t<p style=\"font-size: 0.82rem; color: #7c6e67; line-height: 1.4; margin-top: 14px; margin-bottom: 0;\">\n\t\t\t\t\t\t\t\t* Subscriptions automatically renew securely every 4 weeks. You retain complete control to pause, resume, or modify via your client portal anytime.\n\t\t\t\t\t\t\t<\/p>\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<div class=\"ppk-checkout-field ppk-field-group\">\n\t\t\t\t\t\t\t<label class=\"ppk-label\" for=\"ppk-field-name\">Full Name<\/label>\n\t\t\t\t\t\t\t<input class=\"ppk-input\" type=\"text\" id=\"ppk-field-name\" name=\"customer_name\" autocomplete=\"name\" placeholder=\"e.g. Jane Smith\">\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"ppk-checkout-field ppk-field-group\">\n\t\t\t\t\t\t\t<label class=\"ppk-label\" for=\"ppk-field-email\">Email Address<\/label>\n\t\t\t\t\t\t\t<span class=\"ppk-label-hint\">We will send your booking confirmation here.<\/span>\n\t\t\t\t\t\t\t<input class=\"ppk-input\" type=\"email\" id=\"ppk-field-email\" name=\"customer_email\" autocomplete=\"email\" placeholder=\"e.g. jane@example.com\">\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"ppk-checkout-field ppk-field-group\">\n\t\t\t\t\t\t\t<label class=\"ppk-label\" for=\"ppk-field-phone\">Phone Number<\/label>\n\t\t\t\t\t\t\t<input class=\"ppk-input\" type=\"tel\" id=\"ppk-field-phone\" name=\"customer_phone\" autocomplete=\"tel\" placeholder=\"e.g. 07700 900123\">\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"ppk-checkout-field ppk-field-group\">\n\t\t\t\t\t\t\t<label class=\"ppk-label\" for=\"ppk-field-address\">Full Street Address<\/label>\n\t\t\t\t\t\t\t<span class=\"ppk-label-hint\">Including house number and road name.<\/span>\n\t\t\t\t\t\t\t<textarea class=\"ppk-textarea\" id=\"ppk-field-address\" name=\"customer_address\" autocomplete=\"street-address\" placeholder=\"e.g. 12 Oak Road, Bromley\"><\/textarea>\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<form id=\"ppk-stripe-form\" onsubmit=\"event.preventDefault();\">\n\t\t\t\t\t\t\t<div class=\"ppk-secure-badge\">\n\t\t\t\t\t\t\t\t<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\"\/><\/svg>\n\t\t\t\t\t\t\t\t256-BIT SSL ENCRYPTED SECURE PAYMENT\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"ppk-stripe-premium-box\">\n\t\t\t\t\t\t\t\t<div id=\"ppk-stripe-card-element\"><\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div id=\"ppk-card-errors\" role=\"alert\"><\/div>\n\t\t\t\t\t\t<\/form>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"ppk-wizard-buttons\">\n\t\t\t\t\t\t<button type=\"button\" id=\"ppk-submit-booking-btn\" onclick=\"window.ppkWizard.handlePaymentSubmit()\">\n\t\t\t\t\t\t\t<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\" style=\"margin-right: 8px;\"><path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\"\/><\/svg>\n\t\t\t\t\t\t\tPay &amp; Secure Booking &rarr;\n\t\t\t\t\t\t<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<p class=\"ppk-secure-note\" style=\"max-width: 480px; margin: 10px auto 0;\">\n\t\t\t\t\t\tYour payment is encrypted and processed securely by Stripe. We never store your card number.\n\t\t\t\t\t<\/p>\n\t\t\t\t<\/div>\n\n\t\t\t\t<!-- ============================================================ -->\n\t\t\t\t<!-- STEP: success (booking confirmed \u2014 terminal step)          -->\n\t\t\t\t<!-- ============================================================ -->\n\t\t\t\t<div class=\"ppk-step\" id=\"ppk-step-success\" style=\"text-align: center; margin-top: 0 !important; padding-top: 0 !important;\">\n\t\t\t\t\t<style>\n\t\t\t\t\t\t.ppk-success-badge-wrapper {\n\t\t\t\t\t\t\twidth: 80px;\n\t\t\t\t\t\t\theight: 80px;\n\t\t\t\t\t\t\tbackground: #e6f4ea;\n\t\t\t\t\t\t\tborder-radius: 50%;\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\talign-items: center !important;\n\t\t\t\t\t\t\tjustify-content: center !important;\n\t\t\t\t\t\t\tmargin: 0 auto 24px auto !important;\n\t\t\t\t\t\t\tbox-shadow: 0 8px 24px rgba(0, 112, 60, 0.12);\n\t\t\t\t\t\t\tborder: 2px solid #caf0d6;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-success-badge-wrapper svg {\n\t\t\t\t\t\t\tcolor: #00703c !important;\n\t\t\t\t\t\t\tdisplay: inline-block !important;\n\t\t\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t\t\t\tposition: static !important;\n\t\t\t\t\t\t\ttransform: none !important;\n\t\t\t\t\t\t\tflex-shrink: 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-success-premium-pass {\n\t\t\t\t\t\t\tbackground: url('https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/textured-gold-background-with-smooth-gradient-2026-03-17-05-05-14-utc-scaled.jpg') center center \/ cover no-repeat !important;\n\t\t\t\t\t\t\tborder: none !important;\n\t\t\t\t\t\t\tborder-radius: 18px !important;\n\t\t\t\t\t\t\tpadding: 24px !important;\n\t\t\t\t\t\t\tmargin: 28px auto !important;\n\t\t\t\t\t\t\tbox-shadow: 0 14px 36px rgba(61, 39, 29, 0.18) !important;\n\t\t\t\t\t\t\ttext-align: left !important;\n\t\t\t\t\t\t\tmax-width: 430px !important;\n\t\t\t\t\t\t\twidth: 100% !important;\n\t\t\t\t\t\t\tbox-sizing: border-box !important;\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\tflex-direction: column !important;\n\t\t\t\t\t\t\tjustify-content: space-between !important;\n\t\t\t\t\t\t\tmin-height: 280px !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-card-top-flow {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\tflex-direction: column !important;\n\t\t\t\t\t\t\tgap: 20px !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-card-logo-wrap {\n\t\t\t\t\t\t\ttext-align: left !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-card-logo-wrap img {\n\t\t\t\t\t\t\twidth: 150px !important;\n\t\t\t\t\t\t\theight: auto !important;\n\t\t\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-success-pass-title {\n\t\t\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\t\t\tfont-family: \"Times New Roman\", Times, Georgia, serif !important;\n\t\t\t\t\t\t\tfont-size: 0.72rem !important;\n\t\t\t\t\t\t\tfont-weight: bold !important;\n\t\t\t\t\t\t\tcolor: #0d0805 !important;\n\t\t\t\t\t\t\ttext-transform: uppercase !important;\n\t\t\t\t\t\t\tletter-spacing: 0.1em !important;\n\t\t\t\t\t\t\tmargin-bottom: 6px !important;\n\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#ppk-success-date-display {\n\t\t\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\t\t\tfont-family: \"Times New Roman\", Times, Georgia, serif !important;\n\t\t\t\t\t\t\tfont-size: calc(2.1rem - 5pt) !important;\n\t\t\t\t\t\t\tfont-weight: 900 !important;\n\t\t\t\t\t\t\tcolor: #0d0805 !important;\n\t\t\t\t\t\t\tline-height: 1.15 !important;\n\t\t\t\t\t\t\tletter-spacing: -0.02em !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-card-bottom-qr-row {\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\tjustify-content: flex-end !important;\n\t\t\t\t\t\t\talign-items: flex-end !important;\n\t\t\t\t\t\t\twidth: 100% !important;\n\t\t\t\t\t\t\tmargin-top: 28px !important;\n\t\t\t\t\t\t\ttext-align: right !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-card-qr-img {\n\t\t\t\t\t\t\theight: 85px !important;\n\t\t\t\t\t\t\twidth: 85px !important;\n\t\t\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\t\t\tmargin-left: auto !important;\n\t\t\t\t\t\t\tmargin-right: 0 !important;\n\t\t\t\t\t\t\tborder-radius: 6px !important;\n\t\t\t\t\t\t\tbox-shadow: 0 4px 12px rgba(61, 39, 29, 0.12) !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-success-portal-nudge {\n\t\t\t\t\t\t\tbackground: #f4f7f5 !important;\n\t\t\t\t\t\t\tborder-left: 4px solid #00703c !important;\n\t\t\t\t\t\t\tborder-radius: 12px !important;\n\t\t\t\t\t\t\tpadding: 16px 18px !important;\n\t\t\t\t\t\t\tmargin-bottom: 28px !important;\n\t\t\t\t\t\t\ttext-align: left !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-success-portal-nudge h4 {\n\t\t\t\t\t\t\tfont-size: 1.05rem !important;\n\t\t\t\t\t\t\tfont-weight: 800 !important;\n\t\t\t\t\t\t\tcolor: #3d271d !important;\n\t\t\t\t\t\t\tmargin-bottom: 6px !important;\n\t\t\t\t\t\t\tdisplay: flex !important;\n\t\t\t\t\t\t\talign-items: center !important;\n\t\t\t\t\t\t\tgap: 6px !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.ppk-success-portal-nudge p {\n\t\t\t\t\t\t\tfont-size: 0.92rem !important;\n\t\t\t\t\t\t\tcolor: #55443e !important;\n\t\t\t\t\t\t\tline-height: 1.5 !important;\n\t\t\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#ppk-step-success.ppk-wl-success #ppk-success-date-box,\n\t\t\t\t\t\t#ppk-step-success.ppk-wl-success #ppk-success-qr-hint,\n\t\t\t\t\t\t#ppk-step-success.ppk-wl-success #ppk-success-staff-contact {\n\t\t\t\t\t\t\tdisplay: none !important;\n\t\t\t\t\t\t\tvisibility: hidden !important;\n\t\t\t\t\t\t\theight: 0 !important;\n\t\t\t\t\t\t\toverflow: hidden !important;\n\t\t\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t\t\t\tpadding: 0 !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#ppk-step-success .ppk-wizard-illustration {\n\t\t\t\t\t\t\tmargin-bottom: 20px !important;\n\t\t\t\t\t\t}\n\t\t\t\t\t<\/style>\n\n\t\t\t\t\t<img decoding=\"async\" class=\"ppk-wizard-illustration\" src=\"https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/14-1400x1200-1.png\" alt=\"PAPEPO Booking Confirmed\" data-img-id=\"booking-success-illustration\">\n\n\t\t\t\t\t<div class=\"ppk-success-badge-wrapper\">\n\t\t\t\t\t\t<svg width=\"36\" height=\"36\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t<polyline points=\"20 6 9 17 4 12\"><\/polyline>\n\t\t\t\t\t\t<\/svg>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<h1 class=\"ppk-success-title\" style=\"font-size: 1.95rem; font-weight: 900; color: #3d271d; line-height: 1.25; letter-spacing: -0.01em; margin-bottom: 12px;\">You're All Set!<\/h1>\n\t\t\t\t\t<p class=\"ppk-success-body\" style=\"font-size: 1.05rem; color: #66554e; line-height: 1.5; padding: 0 10px; margin-bottom: 0;\">\n\t\t\t\t\t\tThank you for joining the PAPEPO family. Your regular van slot has been securely locked into our smart routing schedule.\n\t\t\t\t\t<\/p>\n\n\t\t\t\t\t<div class=\"ppk-success-premium-pass\" id=\"ppk-success-date-box\">\n\t\t\t\t\t\t<div class=\"ppk-card-top-flow\">\n\t\t\t\t\t\t\t<div class=\"ppk-card-logo-wrap\">\n\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/logo-black-no-background.png\" alt=\"PAPEPO Logo\">\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<span class=\"ppk-success-pass-title\">Your service day<\/span>\n\t\t\t\t\t\t\t\t<strong id=\"ppk-success-date-display\">&mdash;<\/strong>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<div class=\"ppk-card-bottom-qr-row\" style=\"display: flex !important; justify-content: space-between !important; align-items: flex-end !important; width: 100% !important;\">\n\t\t\t\t\t\t\t<div id=\"ppk-goldcard-staff-panel\" style=\"text-align: left !important; font-family: -apple-system, BlinkMacSystemFont, sans-serif !important; color: #0d0805 !important; font-size: 0.78rem !important; line-height: 1.4 !important; font-weight: 700 !important; letter-spacing: 0.02em !important; text-transform: uppercase !important; padding-bottom: 2px !important;\">\n\t\t\t\t\t\t\t\t<div style=\"margin-bottom: 2px;\"><span style=\"opacity: 0.6; font-weight: 500;\">STAFF:<\/span> <span id=\"ppk-gcard-staff-name\">\u2014<\/span><\/div>\n\t\t\t\t\t\t\t\t<div style=\"margin-bottom: 2px;\"><span style=\"opacity: 0.6; font-weight: 500;\">TYPE:<\/span> <span id=\"ppk-gcard-staff-type\">\u2014<\/span><\/div>\n\t\t\t\t\t\t\t\t<div><span style=\"opacity: 0.6; font-weight: 500;\">WHATSAPP:<\/span> <a id=\"ppk-gcard-staff-walink\" href=\"#\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"color: #3d271d !important; text-decoration: underline !important; font-weight: 800 !important;\">CHAT NOW \ud83d\udcac<\/a><\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<img decoding=\"async\" class=\"ppk-card-qr-img\" src=\"https:\/\/papepo.co.uk\/public\/wp-content\/uploads\/2026\/05\/qrcode-7936668048.png\" alt=\"PAPEPO Platform Support WhatsApp QR Code\" style=\"margin-left: auto !important; margin-right: 0 !important;\">\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<p id=\"ppk-success-qr-hint\" style=\"font-family: 'Times New Roman', Times, Georgia, serif; font-size: 1.05rem; color: #55443e; font-style: italic; margin: -10px auto 16px auto; max-width: 430px; text-align: center; line-height: 1.4; padding: 0 10px;\">\n\t\t\t\t\t\t\ud83d\udca1 Scan the <strong>PAPEPO Platform Support Line<\/strong> QR code on your pass anytime to reach our central dispatch team via WhatsApp.\n\t\t\t\t\t<\/p>\n\n\t\t\t\t\t<div id=\"ppk-success-staff-contact\" style=\"display: none; max-width: 430px; margin: 0 auto 28px auto; padding: 0 10px;\"><\/div>\n\n\t\t\t\t\t<div class=\"ppk-success-portal-nudge\">\n\t\t\t\t\t\t<h4>\n\t\t\t\t\t\t\t<span>\ud83d\udd10<\/span> Frictionless Client Portal Activated\n\t\t\t\t\t\t<\/h4>\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\tWe've automatically provisioned your secure account. Check your inbox for a <strong>Welcome Email<\/strong> containing your automated login link. You can use it to log in anytime to skip a service, update your gate access code, or pause your schedule seamlessly.\n\t\t\t\t\t\t<\/p>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"ppk-btn-row\">\n\t\t\t\t\t\t<a href=\"https:\/\/papepo.co.uk\/public\/\" class=\"ppk-btn-primary\" style=\"text-align: center; text-decoration: none;\">\n\t\t\t\t\t\t\tReturn to Home\n\t\t\t\t\t\t<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t<!-- END of steps \u2014 insert new steps above this comment via Search & Replace -->\n\n\t\t\t<\/div><!-- #ppk-steps-wrap -->\n\n\t\t<\/div><!-- #ppk-wizard-card -->\n\n\t<\/div><!-- #ppk-wizard-shell -->\n\n\t<!-- ================================================================== -->\n\t<!-- Disagree \/ Cancel Booking modal (outside card, fixed overlay)      -->\n\t<!-- ================================================================== -->\n\t<div id=\"ppk-disagree-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"ppk-disagree-title\" style=\"position: fixed; inset: 0; background-color: rgba(61, 39, 29, 0.4); backdrop-filter: blur(4px); z-index: 99999; align-items: center; justify-content: center; padding: 20px;\">\n\t\t<div id=\"ppk-disagree-box\" style=\"background: #ffffff; padding: 32px 24px; border-radius: 24px; max-width: 440px; width: 100%; text-align: center; box-shadow: 0 10px 30px rgba(61, 39, 29, 0.12); border: 1px solid #e1dedb; position: relative;\">\n\n\t\t\t<div style=\"width: 64px; height: 64px; background: #fff5f5; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin: 0 auto 20px auto; border: 2px solid #fcdede;\">\n\t\t\t\t<svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#d93838\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"><\/path><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"><\/line><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"><\/line><\/svg>\n\t\t\t<\/div>\n\n\t\t\t<h3 id=\"ppk-disagree-title\" style=\"font-size: 1.5rem; font-weight: 900; color: #3d271d; margin: 0 0 12px 0; line-height: 1.3;\">We'd Love to Help, But...<\/h3>\n\n\t\t\t<p style=\"font-size: 0.98rem; color: #66554e; line-height: 1.5; margin: 0 0 24px 0; padding: 0 10px;\">\n\t\t\t\tWe would absolutely love to keep your lawn pristine, but our field handlers' safety is our very top priority. Without a guarantee that dogs will be safely indoors, we unfortunately cannot proceed with setting up your schedule today.\n\t\t\t<\/p>\n\n\t\t\t<p style=\"font-size: 0.88rem; color: #918279; line-height: 1.4; margin: 0 0 24px 0; background: #fcfbfa; padding: 12px; border-radius: 12px; border: 1px dashed #e1dedb;\">\n\t\t\t\tIf you'd like to change your mind or see if you can arrange to secure them during our visits, we're ready whenever you are!\n\t\t\t<\/p>\n\n\t\t\t<div style=\"display: flex; flex-direction: column; gap: 10px;\">\n\t\t\t\t<button type=\"button\" class=\"ppk-btn-primary\" id=\"ppk-review-terms-btn\" style=\"width: 100%; margin: 0; padding: 14px; font-weight: 700; border-radius: 14px;\" onclick=\"window.ppkWizard.closeDisagreeModal()\">\n\t\t\t\t\t&larr; Go Back &amp; Change Answer\n\t\t\t\t<\/button>\n\t\t\t\t<button type=\"button\" id=\"ppk-cancel-booking-btn\" style=\"background: transparent; border: none; color: #a3958e; font-size: 0.9rem; font-weight: 600; cursor: pointer; padding: 8px; text-decoration: underline; transition: color 0.15s;\" onmouseover=\"this.style.color='#d93838'\" onmouseout=\"this.style.color='#a3958e'\" onclick=\"window.ppkWizard.terminateBooking()\">\n\t\t\t\t\tCancel &amp; Leave Booking\n\t\t\t\t<\/button>\n\t\t\t<\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t<script>\n\t(function () {\n\t\t'use strict';\n\n\t\t\/\/ Single Source of Truth Dynamic Pricing Config Pass from Admin Options DB Ledger\n\t\tvar ppkPricingConfig = {\"weekly\":15,\"fortnightly\":20,\"monthly\":25,\"twice_weekly\":13,\"one_off\":28,\"extra_dog\":2,\"surcharge_sub\":19,\"surcharge_oo\":38,\"gift_clawback\":15,\"gift_retail_value\":15};\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ STEP_ORDER \u2014 the canonical ordered list of all step IDs.\n\t\t\/\/ Add new IDs here (in position) when inserting steps via Search & Replace.\n\t\t\/\/ =====================================================================\n\t\tvar STEP_ORDER = [\n\t\t\t'welcome',\n\t\t\t'postcode',\n\t\t\t'dogs',\n\t\t\t'frequency',\n\t\t\t'garden_condition',\n\t\t\t'bin_location',\n\t\t\t'date',\n\t\t\t'term_safety',\n\t\t\t'term_gate',\n\t\t\t'term_photos',\n\t\t\t'term_disposal',\n\t\t\t'term_grass',\n\t\t\t'payment',\n\t\t\t'success'\n\t\t];\n\n\t\t\/\/ Sync Step 5 surcharge copy with live backend pricing registry\n\t\tfunction syncGardenSurchargeDisplay() {\n\t\t\tvar amountSpan = document.getElementById('ppk-dynamic-surcharge-amount');\n\t\t\tvar noteSmall  = document.getElementById('ppk-dynamic-surcharge-note');\n\t\t\tvar orderType  = wizard.data['order_type'] || 'subscription';\n\n\t\t\tif (orderType === 'one_off') {\n\t\t\t\tif (amountSpan) amountSpan.textContent = '\u00a3' + ppkPricingConfig.surcharge_oo.toFixed(2);\n\t\t\t\tif (noteSmall)  noteSmall.textContent  = 'Standard one-off setup fee applies to cover the initial deep extraction.';\n\t\t\t} else {\n\t\t\t\tif (amountSpan) amountSpan.textContent = '\u00a3' + ppkPricingConfig.surcharge_sub.toFixed(2);\n\t\t\t\tif (noteSmall)  noteSmall.textContent  = 'Subscription unlocked! We have discounted your lawn reset setup fee from \u00a3' + ppkPricingConfig.surcharge_oo.toFixed(0) + ' down to \u00a3' + ppkPricingConfig.surcharge_sub.toFixed(0) + '.';\n\t\t\t}\n\t\t}\n\n\t\t\/\/ Handler for frequency step: Maps to production order_type and billing_cycle schema using global backend config parameters\n\t\tfunction handleFrequencyContinue() {\n\t\t\tvar selectedFreq = document.querySelector('input[name=\"order_frequency\"]:checked');\n\t\t\tif (!selectedFreq) {\n\t\t\t\talert('Please select your preferred service frequency to continue.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (selectedFreq.value === 'one_off') {\n\t\t\t\twizard.data['order_type']    = 'one_off';\n\t\t\t\twizard.data['billing_cycle'] = 'one_off';\n\t\t\t} else {\n\t\t\t\twizard.data['order_type']    = 'subscription';\n\t\t\t\twizard.data['billing_cycle'] = selectedFreq.value;\n\t\t\t}\n\t\t\tsyncGardenSurchargeDisplay();\n\t\t\tgoToStep('garden_condition');\n\t\t}\n\n\t\t\/\/ Handler for garden condition: Sets the initial_clean_surcharge binary flag\n\t\tfunction handleGardenConditionContinue() {\n\t\t\tvar condition = document.querySelector('input[name=\"garden_reset_required\"]:checked');\n\t\t\tif (!condition) {\n\t\t\t\talert('Please select your yard waste clearance habit to continue.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar needsInitialReset = condition.value === 'overdue_clearance' || condition.value === 'yes';\n\t\t\twizard.data['garden_reset_required']   = condition.value;\n\t\t\twizard.data['initial_clean_surcharge'] = needsInitialReset ? '1' : '0';\n\t\t\tgoToStep('bin_location');\n\t\t}\n\n\t\t\/\/ ---------------------------------------------------------------------\n\t\t\/\/ Render Day Slots DOM (Injecting slots to container) - Falsely Highlighter Fixed\n\t\t\/\/ ---------------------------------------------------------------------\n\t\tfunction renderAvailableDates(slots) {\n\t\t\tvar container = document.getElementById('ppk-date-slots-container');\n\t\t\tvar dateHiddenInput = document.getElementById('ppk-selected-date-input');\n\t\t\tvar continueBtn     = document.getElementById('ppk-date-continue-btn');\n\t\t\tif (!container) return;\n\t\t\tcontainer.innerHTML = '';\n\n\t\t\tif (!slots || slots.length === 0) {\n\t\t\t\tcontainer.innerHTML = '<p style=\"color:#d93838; font-weight:700; text-align:center;\">Sorry, there are no available collection slots for your postcode at this moment.<\/p>';\n\t\t\t\tif (dateHiddenInput) dateHiddenInput.value = '';\n\t\t\t\tdelete wizard.data['scheduled_date'];\n\t\t\t\tif (continueBtn) {\n\t\t\t\t\tcontinueBtn.setAttribute('disabled', 'disabled');\n\t\t\t\t\tcontinueBtn.textContent = 'Select a Date to Continue';\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar savedDate = wizard.data['scheduled_date'] || '';\n\n\t\t\tslots.forEach(function (slot) {\n\t\t\t\tvar label = document.createElement('label');\n\t\t\t\tlabel.className = 'ppk-date-card-label';\n\n\t\t\t\t\/\/ \u53ea\u6709\u7576\u8a18\u61b6\u9ad4\u4e2d\u771f\u7684\u6709\u9078\u4e2d\u8a72\u65e5\u671f\u6642\uff0c\u624d\u52a0\u4e0a active \u9ad8\u4eae\n\t\t\t\tif (savedDate === slot.date_ymd) {\n\t\t\t\t\tlabel.classList.add('active');\n\t\t\t\t}\n\n\t\t\t\tvar radio = document.createElement('input');\n\t\t\t\tradio.type = 'radio';\n\t\t\t\tradio.name = 'ppk_selected_date_val';\n\t\t\t\tradio.value = slot.date_ymd;\n\t\t\t\tif (savedDate === slot.date_ymd) {\n\t\t\t\t\tradio.checked = true;\n\t\t\t\t}\n\n\t\t\t\tlabel.onclick = function () {\n\t\t\t\t\tdocument.querySelectorAll('#ppk-date-slots-container .ppk-date-card-label').forEach(function (el) {\n\t\t\t\t\t\tel.classList.remove('active');\n\t\t\t\t\t});\n\t\t\t\t\tlabel.classList.add('active');\n\t\t\t\t\tradio.checked = true;\n\t\t\t\t\twizard.data['scheduled_date'] = slot.date_ymd;\n\t\t\t\t\tif (dateHiddenInput) dateHiddenInput.value = slot.date_ymd;\n\t\t\t\t\tif (continueBtn) {\n\t\t\t\t\t\tcontinueBtn.removeAttribute('disabled');\n\t\t\t\t\t\tcontinueBtn.textContent = 'Continue \\u2192';\n\t\t\t\t\t}\n\t\t\t\t\tpersistState();\n\t\t\t\t};\n\n\t\t\t\tvar textSpan = document.createElement('span');\n\t\t\t\ttextSpan.className = 'ppk-date-card-text';\n\t\t\t\ttextSpan.innerHTML = '<strong>' + slot.formatted_date + '<\/strong><small>' + slot.day_name + ' (Surcharge: \\u00a30.00)<\/small>';\n\n\t\t\t\tlabel.appendChild(radio);\n\t\t\t\tlabel.appendChild(textSpan);\n\t\t\t\tcontainer.appendChild(label);\n\t\t\t});\n\n\t\t\tif (savedDate && slots.some(function (s) { return s.date_ymd === savedDate; })) {\n\t\t\t\tif (dateHiddenInput) dateHiddenInput.value = savedDate;\n\t\t\t\tif (continueBtn) {\n\t\t\t\t\tcontinueBtn.removeAttribute('disabled');\n\t\t\t\t\tcontinueBtn.textContent = 'Continue \\u2192';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdelete wizard.data['scheduled_date'];\n\t\t\t\tif (dateHiddenInput) dateHiddenInput.value = '';\n\t\t\t\tif (continueBtn) {\n\t\t\t\t\tcontinueBtn.setAttribute('disabled', 'disabled');\n\t\t\t\t\tcontinueBtn.textContent = 'Select a Date to Continue';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t\/\/ \u3010\u4e0a\u5e1d\u8996\u89d2\u8abf\u5ea6\u5f15\u64ce\u3011\u5c07\u5f8c\u7aef Live \u53ef\u7528\u65e5\u671f\u6e32\u67d3\u70ba Premium \u65e5\u671f\u5361\u7247\n\t\tfunction applyAvailableDatesToDateStep(dates) {\n\t\t\tvar slots = (dates || []).map(function (item) {\n\t\t\t\tvar label = item.label || item.value || '';\n\t\t\t\tvar dayName = label.split(' ')[0] || '';\n\t\t\t\treturn {\n\t\t\t\t\tdate_ymd: item.value,\n\t\t\t\t\tformatted_date: label,\n\t\t\t\t\tday_name: dayName\n\t\t\t\t};\n\t\t\t});\n\t\t\trenderAvailableDates(slots);\n\t\t}\n\n\t\t\/\/ \u5347\u7d1a\u7248\uff1a\u7cbe\u6e96\u6293\u53d6 JQuery UI \u5167\u5d4c\u65e5\u66c6\u5132\u5b58\u7684\u503c\uff0c\u9806\u66a2\u901a\u95dc\n\t\tfunction handleDateContinue() {\n\t\t\tsaveCurrentStepData();\n\t\t\tif (isWaitingListMode()) {\n\t\t\t\tdelete wizard.data['scheduled_date'];\n\t\t\t\tgoToStep('term_safety');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar dateHiddenInput = document.getElementById('ppk-selected-date-input');\n\t\t\tvar dateVal = dateHiddenInput ? dateHiddenInput.value : (wizard.data['scheduled_date'] || '');\n\n\t\t\tif (!dateVal) {\n\t\t\t\talert('Please select an available service date from the calendar grid to continue.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twizard.data['scheduled_date'] = dateVal;\n\t\t\tgoToStep('term_safety');\n\t\t}\n\n\t\tfunction isWaitingListMode() {\n\t\t\treturn wizard.data['is_waiting_list'] === true ||\n\t\t\t\twizard.data['is_waiting_list'] === 'true' ||\n\t\t\t\tgetWaitingListSessionFlag();\n\t\t}\n\n\t\tfunction getWaitingListSessionFlag() {\n\t\t\ttry {\n\t\t\t\treturn sessionStorage.getItem('ppk_is_waiting_list_flag') === 'true';\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfunction setWaitingListSessionFlag(active) {\n\t\t\ttry {\n\t\t\t\tif (active) {\n\t\t\t\t\tsessionStorage.setItem('ppk_is_waiting_list_flag', 'true');\n\t\t\t\t} else {\n\t\t\t\t\tsessionStorage.removeItem('ppk_is_waiting_list_flag');\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\n\t\tfunction restoreWaitingListSessionFlag() {\n\t\t\tif (getWaitingListSessionFlag()) {\n\t\t\t\twizard.data['is_waiting_list'] = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction isSuccessWaitingListView() {\n\t\t\treturn getWaitingListSessionFlag() ||\n\t\t\t\twizard.data['is_waiting_list'] === true ||\n\t\t\t\twizard.data['is_waiting_list'] === 'true' ||\n\t\t\t\tlastSuccessWasWaitingList;\n\t\t}\n\n\t\tfunction ensurePaymentWlSpacer(isWL) {\n\t\t\tvar paymentStep = document.getElementById('ppk-step-payment');\n\t\t\tvar buttonsWrap = paymentStep ? paymentStep.querySelector('.ppk-wizard-buttons') : null;\n\t\t\tvar existing    = document.getElementById('ppk-payment-wl-spacer');\n\n\t\t\tif (!isWL) {\n\t\t\t\tif (existing && existing.parentNode) {\n\t\t\t\t\texisting.parentNode.removeChild(existing);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!buttonsWrap || existing) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar spacer = document.createElement('div');\n\t\t\tspacer.id = 'ppk-payment-wl-spacer';\n\t\t\tspacer.className = 'ppk-wl-spacer';\n\t\t\tspacer.setAttribute('style', 'height: 20px; width: 100%; display: block; clear: both;');\n\t\t\tbuttonsWrap.parentNode.insertBefore(spacer, buttonsWrap);\n\t\t}\n\n\t\tfunction applyWaitingListDateStepUI() {\n\t\t\tvar container   = document.getElementById('ppk-date-slots-container');\n\t\t\tvar notice      = document.getElementById('ppk-waiting-list-date-notice');\n\t\t\tvar opBanner    = document.getElementById('ppk-operational-window-banner');\n\t\t\tvar infoBanner  = document.querySelector('#ppk-step-date .ppk-info-banner');\n\t\t\tvar continueBtn = document.getElementById('ppk-date-continue-btn');\n\t\t\tvar dateHiddenInput = document.getElementById('ppk-selected-date-input');\n\t\t\tvar descEl      = document.getElementById('ppk-date-step-desc');\n\n\t\t\tif (descEl) descEl.textContent = PPK_DATE_DESC_WAITING;\n\t\t\tif (container) container.style.display = 'none';\n\t\t\tif (notice) {\n\t\t\t\tnotice.style.setProperty('display', 'none', 'important');\n\t\t\t\tif (notice.parentNode) notice.parentNode.removeChild(notice);\n\t\t\t}\n\t\t\tif (opBanner) opBanner.style.display = 'none';\n\t\t\tif (infoBanner) infoBanner.style.display = 'none';\n\t\t\tif (dateHiddenInput) dateHiddenInput.value = '';\n\t\t\tdelete wizard.data['scheduled_date'];\n\t\t\tif (continueBtn) {\n\t\t\t\tcontinueBtn.removeAttribute('disabled');\n\t\t\t\tcontinueBtn.textContent = 'Continue \\u2192';\n\t\t\t}\n\t\t}\n\n\t\tfunction resetWaitingListDateStepUI() {\n\t\t\tvar container   = document.getElementById('ppk-date-slots-container');\n\t\t\tvar opBanner    = document.getElementById('ppk-operational-window-banner');\n\t\t\tvar infoBanner  = document.querySelector('#ppk-step-date .ppk-info-banner');\n\t\t\tvar descEl      = document.getElementById('ppk-date-step-desc');\n\n\t\t\tif (descEl) descEl.textContent = PPK_DATE_DESC_DEFAULT;\n\t\t\tif (container) container.style.display = '';\n\t\t\tif (opBanner) opBanner.style.display = '';\n\t\t\tif (infoBanner) infoBanner.style.display = '';\n\t\t}\n\n\t\tvar PPK_DATE_DESC_DEFAULT = \"Select your preferred commencement date based on your neighborhood's route slots.\";\n\t\tvar PPK_DATE_DESC_WAITING = 'You are in the Priority Waiting List Mode. We will automatically pre-allocate the earliest available collection day for you once our fleet capacity scales up.';\n\n\t\tvar PPK_PAYMENT_TITLE_DEFAULT = 'Review & Secure Checkout';\n\t\tvar PPK_PAYMENT_DESC_DEFAULT  = 'Your custom schedule is locked in! Review your ultra-low subscription breakdown below, then enter your details to activate service.';\n\t\tvar PPK_PAYMENT_TITLE_WAITING = 'Thank you! <br> You are in the Waiting List now';\n\t\tvar PPK_PAYMENT_DESC_WAITING  = 'Thank you immensely for your interest in PAPEPO. We have safely cataloged your configuration and will prioritize your request, notifying you the very instant a premium fleet slot becomes available.';\n\n\t\tfunction applyPaymentWaitingListUI(isWL) {\n\t\t\tvar paymentStep = document.getElementById('ppk-step-payment');\n\t\t\tvar titleEl     = paymentStep ? paymentStep.querySelector('.ppk-step-title') : null;\n\t\t\tvar descEl      = paymentStep ? paymentStep.querySelector('.ppk-step-desc') : null;\n\t\t\tvar invoiceCard = document.getElementById('ppk-checkout-invoice-card');\n\n\t\t\tif (isWL) {\n\t\t\t\tif (paymentStep) paymentStep.classList.add('ppk-wl-payment');\n\t\t\t\tif (titleEl) titleEl.innerHTML = PPK_PAYMENT_TITLE_WAITING;\n\t\t\t\tif (descEl) descEl.textContent = PPK_PAYMENT_DESC_WAITING;\n\n\t\t\t\t\/\/ 1. \u5f37\u5236\u70ba\u986f\u793a\u5962\u83ef\u82f1\u6587\u8aaa\u660e\u7684\u6bb5\u843d\u5143\u7d20\uff08p \u6a19\u7c64\u6216\u5c0d\u61c9\u5bb9\u5668\uff09\u6ce8\u5165 20px \u7684\u5e95\u90e8\u5916\u908a\u8ddd\n\t\t\t\tvar wlDesc = document.querySelector('#ppk-step-payment .ppk-success-body') || document.querySelector('#ppk-step-payment p');\n\t\t\t\tif (wlDesc) {\n\t\t\t\t\twlDesc.style.setProperty('margin-bottom', '24px', 'important');\n\t\t\t\t\twlDesc.style.setProperty('padding-bottom', '10px', 'important');\n\t\t\t\t}\n\n\t\t\t\t\/\/ 2. \u5f37\u5236\u70ba\u4e0b\u65b9\u7684\u6309\u9215\u5305\u88f9\u884c\u5bb9\u5668\u6ce8\u5165 20px \u7684\u9802\u90e8\u5916\u908a\u8ddd\n\t\t\t\tvar wlButtons = document.querySelector('#ppk-step-payment .ppk-wizard-buttons');\n\t\t\t\tif (wlButtons) {\n\t\t\t\t\twlButtons.style.setProperty('margin-top', '24px', 'important');\n\t\t\t\t}\n\n\t\t\t\tif (invoiceCard) invoiceCard.style.setProperty('display', 'none', 'important');\n\t\t\t\tensurePaymentWlSpacer(true);\n\t\t\t} else {\n\t\t\t\tif (paymentStep) paymentStep.classList.remove('ppk-wl-payment');\n\t\t\t\tif (titleEl) titleEl.textContent = PPK_PAYMENT_TITLE_DEFAULT;\n\t\t\t\tif (descEl) {\n\t\t\t\t\tdescEl.textContent = PPK_PAYMENT_DESC_DEFAULT;\n\t\t\t\t\tdescEl.style.removeProperty('margin-bottom');\n\t\t\t\t\tdescEl.style.removeProperty('padding-bottom');\n\t\t\t\t}\n\t\t\t\tvar wlButtonsReset = document.querySelector('#ppk-step-payment .ppk-wizard-buttons');\n\t\t\t\tif (wlButtonsReset) {\n\t\t\t\t\twlButtonsReset.style.removeProperty('margin-top');\n\t\t\t\t}\n\t\t\t\tif (invoiceCard) invoiceCard.style.removeProperty('display');\n\t\t\t\tensurePaymentWlSpacer(false);\n\t\t\t}\n\t\t}\n\n\n\t\t\/\/ Generic single term step validation controller (GOV.UK Style flow)\n\t\tfunction handleTermStep(currentStepId, nextStepId) {\n\t\t\t\/\/ Step 11\uff1a\u4e09\u9078\u4e00\u5ee2\u7269\u8655\u7406\uff08agree_black \/ agree_dog = \u540c\u610f\uff0cdisagree = \u6eab\u548c\u5f48\u7a97\uff09\n\t\t\tif (currentStepId === 'term_disposal') {\n\t\t\t\tvar disposalChoice = document.querySelector('input[name=\"term_disposal_val\"]:checked');\n\t\t\t\tif (!disposalChoice) {\n\t\t\t\t\talert('Please select where we should place the scooped bags to continue.');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (disposalChoice.value === 'disagree') {\n\t\t\t\t\tvar modalTitle = document.getElementById('ppk-disagree-title');\n\t\t\t\t\tvar modalDesc  = modalTitle ? modalTitle.nextElementSibling : null;\n\t\t\t\t\tvar modalNote  = modalDesc ? modalDesc.nextElementSibling : null;\n\n\t\t\t\t\tif (modalTitle && modalDesc) {\n\t\t\t\t\t\tmodalTitle.textContent = \"Let's Keep Your Rates Low!\";\n\t\t\t\t\t\tmodalDesc.innerHTML = \"Leaving securely double-bagged waste in your domestic black bin or pet bin is 100% legal and environmentally approved. <br><br>If our vans were to transport the waste away cross-district, we would be legally forced to incur heavy commercial waste transit taxes. By avoiding this licensing premium, <b>we pass 100% of the savings back to you<\/b> to guarantee your ultra-low subscription rate! <br><br>If you're happy with keeping your wallet happy, let's keep going!\";\n\t\t\t\t\t}\n\t\t\t\t\tif (modalNote && modalNote.tagName === 'P') {\n\t\t\t\t\t\tmodalNote.style.display = 'none';\n\t\t\t\t\t}\n\t\t\t\t\tshowDisagreeModal();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\twizard.data['term_disposal_val']      = disposalChoice.value;\n\t\t\t\twizard.data['term_disposal_accepted'] = '1';\n\t\t\t\twizard.data['disposal_method']        = disposalChoice.value;\n\t\t\t\tgoToStep(nextStepId);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar agreeRadio    = document.getElementById('ppk-' + currentStepId + '-agree');\n\t\t\tvar disagreeRadio = document.getElementById('ppk-' + currentStepId + '-disagree');\n\n\t\t\tif (disagreeRadio && disagreeRadio.checked) {\n\t\t\t\t\/\/ Step 10\uff1a\u8df3\u904e\u4e0a\u50b3\u7167\u7247\uff0c\u76f4\u63a5\u524d\u5f80\u4e0b\u4e00\u6b65\uff08\u4e0d\u963b\u64cb\u9810\u7d04\uff09\n\t\t\t\tif (currentStepId === 'term_photos') {\n\t\t\t\t\twizard.data['term_photos_accepted'] = '0';\n\t\t\t\t\twizard.data['garden_photo_skipped'] = '1';\n\t\t\t\t\tgoToStep(nextStepId);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t\/\/ \u52d5\u614b\u6839\u64da\u7576\u524d\u6b65\u9a5f\u66f4\u63db\u5f48\u7a97\u5167\u6587\uff0c\u7dad\u6301\u9802\u7d1a\u8edf\u5305\u88dd\u89aa\u548c\u529b\n\t\t\t\tvar modalTitle = document.getElementById('ppk-disagree-title');\n\t\t\t\tvar modalDesc  = modalTitle ? modalTitle.nextElementSibling : null;\n\t\t\t\tvar modalNote  = modalDesc ? modalDesc.nextElementSibling : null;\n\n\t\t\t\tif (currentStepId === 'term_gate' && modalTitle && modalDesc) {\n\t\t\t\t\tmodalTitle.textContent = 'External Garden Access Required';\n\t\t\t\t\tmodalDesc.textContent = 'Unfortunately, we cannot service properties without external garden access due to strict hygiene and liability insurance regulations.';\n\t\t\t\t\tif (modalNote && modalNote.tagName === 'P') {\n\t\t\t\t\t\tmodalNote.style.display = 'none';\n\t\t\t\t\t}\n\t\t\t\t} else if (currentStepId === 'term_disposal' && modalTitle && modalDesc) {\n\t\t\t\t\tmodalTitle.textContent = \"Let's Keep Your Rates Low!\";\n\t\t\t\t\tmodalDesc.innerHTML = \"Leaving securely double-bagged waste in your domestic black bin or pet bin is 100% legal and environmentally approved. <br><br>If our vans were to transport the waste away cross-district, we would be legally forced to incur heavy commercial waste transit taxes. By avoiding this licensing premium, <b>we pass 100% of the savings back to you<\/b> to guarantee your ultra-low subscription rate! <br><br>If you're happy with keeping your wallet happy, let's keep going!\";\n\t\t\t\t\tif (modalNote && modalNote.tagName === 'P') {\n\t\t\t\t\t\tmodalNote.style.display = 'none';\n\t\t\t\t\t}\n\t\t\t\t} else if (currentStepId === 'term_grass' && modalTitle && modalDesc) {\n\t\t\t\t\tmodalTitle.textContent = 'Protecting Your Turf & Wallet!';\n\t\t\t\t\tmodalDesc.innerHTML = \"We want to give you the most spotless lawn ever! However, without X-ray vision, our field team honestly cannot find waste buried deep inside wild, un-mowed grass. <br><br>Furthermore, physically scraping watery stools would tear up your beautiful lawn's roots and spread harmful bacteria across your turf. Our eco-flushing and non-toxic sanitizing sprays protect both your family and your grass. <br><br>If you're happy to keep the lawn trim and let us take care of the heavy rinsing, let's head to checkout!\";\n\t\t\t\t\tif (modalNote && modalNote.tagName === 'P') {\n\t\t\t\t\t\tmodalNote.style.display = 'none';\n\t\t\t\t\t}\n\t\t\t\t} else if (modalTitle && modalDesc) {\n\t\t\t\t\t\/\/ \u6062\u5fa9\u9810\u8a2d\u7684 Dog Safety \u5167\u6587\n\t\t\t\t\tmodalTitle.textContent = \"We'd Love to Help, But...\";\n\t\t\t\t\tmodalDesc.innerHTML = \"We would absolutely love to keep your lawn pristine, but our field handlers' safety is our very top priority. Without a guarantee that dogs will be safely indoors, we unfortunately cannot proceed with setting up your schedule today.\";\n\t\t\t\t\tif (modalNote && modalNote.tagName === 'P') {\n\t\t\t\t\t\tmodalNote.innerHTML = \"If you'd like to change your mind or see if you can arrange to secure them during our visits, we're ready whenever you are!\";\n\t\t\t\t\t\tmodalNote.style.display = 'block';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshowDisagreeModal();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!agreeRadio || !agreeRadio.checked) {\n\t\t\t\talert('Please select whether you agree or disagree to continue.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t\/\/ Capture acceptance timestamp flag into data payload\n\t\t\twizard.data[currentStepId + '_accepted'] = '1';\n\n\t\t\tif (currentStepId === 'term_photos') {\n\t\t\t\tdelete wizard.data['garden_photo_skipped'];\n\t\t\t\tvar photoInput = document.getElementById('ppk-garden-photo-file-input');\n\t\t\t\tif (photoInput && photoInput.files && photoInput.files.length) {\n\t\t\t\t\tvar photoNames = [];\n\t\t\t\t\tfor (var pi = 0; pi < Math.min(photoInput.files.length, 2); pi++) {\n\t\t\t\t\t\tphotoNames.push(photoInput.files[pi].name);\n\t\t\t\t\t}\n\t\t\t\t\twizard.data['garden_photo_filename'] = photoNames.join(', ');\n\t\t\t\t\twizard.data['garden_photo_count']    = String(photoNames.length);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgoToStep(nextStepId);\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ Wizard state\n\t\t\/\/ =====================================================================\n\t\tvar wizard = {\n\t\t\tcurrentStep : null,\n\t\t\thistory     : [],    \/\/ stack of visited step IDs (enables Back)\n\t\t\tdata        : {}     \/\/ mirrors all field values for AJAX submission\n\t\t};\n\t\twizard.data['draft_order_ref'] = wizard.data['draft_order_ref'] || \"PPK-20260601-T8WZUT\";\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ DOM refs\n\t\t\/\/ =====================================================================\n\t\tvar backBtn      = document.getElementById('ppk-back-btn');\n\t\tvar progressLabel = document.getElementById('ppk-progress-label');\n\t\tvar progressFill  = document.getElementById('ppk-progress-bar-fill');\n\t\tvar progressTrack = document.getElementById('ppk-progress-bar-track');\n\t\tvar disagreeModal = document.getElementById('ppk-disagree-modal');\n\n\t\tfunction ppkEscapeHtml(str) {\n\t\t\treturn String(str || '').replace(\/&\/g, '&amp;').replace(\/<\/g, '&lt;').replace(\/>\/g, '&gt;').replace(\/\"\/g, '&quot;');\n\t\t}\n\n\t\tfunction ppkFormatTermAnswer(val) {\n\t\t\tif (!val) return '\u2014';\n\t\t\tif (val === 'agree' || val.indexOf('agree') === 0) return 'Yes';\n\t\t\tif (val === 'disagree') return 'No';\n\t\t\treturn val;\n\t\t}\n\n\t\tfunction renderReceiptMetadata() {\n\t\t\tvar postcodeEl = document.getElementById('ppk-receipt-postcode');\n\t\t\tvar orderNoEl    = document.getElementById('ppk-receipt-order-no');\n\t\t\tvar pcInput    = document.getElementById('ppk-field-postcode');\n\t\t\tvar postcode   = wizard.data['customer_postcode_normalized'] || wizard.data['customer_postcode'] || (pcInput ? pcInput.value.trim() : '');\n\t\t\tif (postcodeEl) postcodeEl.textContent = postcode || '\u2014';\n\t\t\tif (orderNoEl) {\n\t\t\t\torderNoEl.textContent = wizard.data['draft_order_ref'] || orderNoEl.textContent || '\u2014';\n\t\t\t}\n\t\t}\n\n\t\tfunction renderReceiptOrderDetail() {\n\t\t\tvar container = document.getElementById('ppk-order-detail-rows');\n\t\t\tif (!container) return;\n\n\t\t\tvar orderType = wizard.data['order_type'] || 'subscription';\n\t\t\tvar cycle     = wizard.data['billing_cycle'] || 'weekly';\n\t\t\tvar freqLabels = {\n\t\t\t\tweekly       : 'Weekly',\n\t\t\t\tfortnightly  : 'Fortnightly',\n\t\t\t\tmonthly      : 'Monthly',\n\t\t\t\ttwice_weekly : 'Twice Weekly',\n\t\t\t\tone_off      : 'One-off Visit'\n\t\t\t};\n\t\t\tvar gardenLabels = {\n\t\t\t\tregular_clearance : 'Maintained regularly',\n\t\t\t\toverdue_clearance : 'Long while since last thorough scoop'\n\t\t\t};\n\t\t\tvar disposalLabels = {\n\t\t\t\tagree_black : 'General waste bin (black\/grey)',\n\t\t\t\tagree_dog   : 'Dedicated dog waste bin',\n\t\t\t\tdisagree    : 'Did not agree'\n\t\t\t};\n\n\t\t\tvar scheduledLabel = '\u2014';\n\t\t\tif (isWaitingListMode()) {\n\t\t\t\tscheduledLabel = 'Priority Waiting List';\n\t\t\t} else if (wizard.data['scheduled_date']) {\n\t\t\t\ttry {\n\t\t\t\t\tscheduledLabel = new Date(wizard.data['scheduled_date'] + 'T12:00:00').toLocaleDateString('en-GB', { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' });\n\t\t\t\t} catch (e) {\n\t\t\t\t\tscheduledLabel = wizard.data['scheduled_date'];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar currentDisposalChoice = wizard.data['term_disposal_val'] || wizard.data['disposal_method'] || '';\n\t\t\tvar dynamicDisposalAnswer = disposalLabels[currentDisposalChoice] || (currentDisposalChoice ? currentDisposalChoice : '\u2014');\n\n\t\t\tvar rows = [\n\t\t\t\t{ q: 'Number of dogs', a: String(parseInt(wizard.data['dog_count'], 10) || 1) },\n\t\t\t\t{ q: 'Service frequency', a: orderType === 'one_off' ? 'One-off Visit' : (freqLabels[cycle] || 'Weekly') },\n\t\t\t\t{ q: 'Waste clearance habit', a: gardenLabels[wizard.data['garden_reset_required']] || '\u2014' },\n\t\t\t\t{ q: 'Initial deep clean', a: wizard.data['initial_clean_surcharge'] === '1' ? 'Required' : 'Not required' },\n\t\t\t\t{ q: 'First service date', a: scheduledLabel },\n\t\t\t\t{ q: 'Dogs secured indoors', a: ppkFormatTermAnswer(wizard.data['term_safety_val']) },\n\t\t\t\t{ q: 'Gate access available', a: ppkFormatTermAnswer(wizard.data['term_gate_val']) },\n\t\t\t\t{ q: 'Garden identification', a: ppkFormatTermAnswer(wizard.data['term_photos_val']) },\n\t\t\t\t{ q: 'Waste bag placement', a: dynamicDisposalAnswer },\n\t\t\t\t{ q: 'Lawn maintenance agreed', a: ppkFormatTermAnswer(wizard.data['term_grass_val']) },\n\t\t\t\t{ q: 'Waste policy agreed', a: ppkFormatTermAnswer(wizard.data['ppk_waste_compliance']) }\n\t\t\t];\n\n\t\t\tvar html = '';\n\t\t\trows.forEach(function (row) {\n\t\t\t\thtml += '<div class=\"ppk-invoice-detail-row\"><span>' + ppkEscapeHtml(row.q) + '<\/span><span>' + ppkEscapeHtml(row.a) + '<\/span><\/div>';\n\t\t\t});\n\t\t\tcontainer.innerHTML = html;\n\t\t}\n\n\t\tvar PPK_CAMERA_SVG = '<svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#7c6e67\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z\"><\/path><circle cx=\"12\" cy=\"13\" r=\"4\"><\/circle><\/svg>';\n\t\tvar PPK_FOLDER_SVG = '<svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#7c6e67\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"><\/path><\/svg>';\n\n\t\t\/\/ Step 10: mobile camera vs desktop file upload (device-aware)\n\t\tfunction handleGardenPhotoPreview(input) {\n\t\t\tvar statusText = document.getElementById('ppk-upload-status-text');\n\t\t\tvar thumb1     = document.getElementById('ppk-photo-preview-1');\n\t\t\tvar thumb2     = document.getElementById('ppk-photo-preview-2');\n\t\t\tif (!input) return;\n\n\t\t\tvar files = input.files ? Array.prototype.slice.call(input.files, 0, 2) : [];\n\t\t\t[thumb1, thumb2].forEach(function (thumb, idx) {\n\t\t\t\tif (!thumb) return;\n\t\t\t\tif (files[idx]) {\n\t\t\t\t\tthumb.src = URL.createObjectURL(files[idx]);\n\t\t\t\t\tthumb.style.display = 'block';\n\t\t\t\t} else {\n\t\t\t\t\tthumb.removeAttribute('src');\n\t\t\t\t\tthumb.style.display = 'none';\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!statusText) return;\n\t\t\tif (files.length === 0) {\n\t\t\t\tapplyPhotosStepDeviceUI();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (files.length === 1) {\n\t\t\t\tstatusText.textContent = '\\u2713 1 photo selected \\u2014 please add 1 more';\n\t\t\t\tstatusText.style.color = '#3d271d';\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tstatusText.textContent = '\\u2713 2 photos ready';\n\t\t\tstatusText.style.color = '#0e6231';\n\t\t}\n\n\t\tfunction applyPhotosStepDeviceUI() {\n\t\t\tvar fileInput  = document.getElementById('ppk-garden-photo-file-input');\n\t\t\tvar statusText = document.getElementById('ppk-upload-status-text');\n\t\t\tvar iconBox    = document.getElementById('ppk-media-icon-placeholder');\n\t\t\tif (!fileInput || !statusText) return;\n\n\t\t\tif (fileInput.files && fileInput.files.length) {\n\t\t\t\thandleGardenPhotoPreview(fileInput);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstatusText.style.color = '#3d271d';\n\t\t\tvar isMobile = ('ontouchstart' in window) || (navigator.maxTouchPoints > 0);\n\t\t\tvar isCoarse = window.matchMedia && window.matchMedia('(pointer: coarse)').matches;\n\n\t\t\tif (isMobile || isCoarse) {\n\t\t\t\tfileInput.setAttribute('capture', 'environment');\n\t\t\t\tstatusText.textContent = '\\uD83D\\uDCF8 Snap 2 Garden Photos';\n\t\t\t\tif (iconBox) iconBox.innerHTML = PPK_CAMERA_SVG;\n\t\t\t} else {\n\t\t\t\tfileInput.removeAttribute('capture');\n\t\t\t\tstatusText.textContent = '\\uD83D\\uDCC1 Upload 2 Garden Photos';\n\t\t\t\tif (iconBox) iconBox.innerHTML = PPK_FOLDER_SVG;\n\t\t\t}\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ updateProgressUI \u2014 syncs counter + bar fill (With Anti-Fatigue Gamified Sub-stages)\n\t\t\/\/ =====================================================================\n\t\tfunction updateProgressUI(stepId) {\n\t\t\tvar idx   = STEP_ORDER.indexOf(stepId);\n\t\t\tvar total = STEP_ORDER.length;\n\n\t\t\tif (idx === -1) return;\n\n\t\t\tvar humanIdx = idx + 1;\n\n\t\t\t\/\/ Anti-Fatigue Progress Branding Engine\n\t\t\tif (progressLabel) {\n\t\t\t\tif (stepId.indexOf('term_') === 0) {\n\t\t\t\t\t\/\/ Map term steps to a super-fast sub-stage counter (Step 7 to 11 -> 1 to 5)\n\t\t\t\t\tvar termSteps = STEP_ORDER.filter(function(s) { return s.indexOf('term_') === 0; });\n\t\t\t\t\tvar termIdx = termSteps.indexOf(stepId) + 1;\n\t\t\t\t\tprogressLabel.innerHTML = '\u26a1 <strong>Fast Safety Check: ' + termIdx + ' of ' + termSteps.length + '<\/strong>';\n\t\t\t\t\tprogressLabel.style.color = '#00703c';\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ Regular configuration stages\n\t\t\t\t\tprogressLabel.textContent = 'Step ' + humanIdx + ' of ' + total;\n\t\t\t\t\tprogressLabel.style.color = '#505a5f';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t\/\/ Dynamically trigger the psychological upsell banner on Step 5 if they chose One-off with automated dynamic content injection\n\t\t\tvar upsellBanner = document.getElementById('ppk-oneoff-upsell-banner');\n\t\t\tif (upsellBanner) {\n\t\t\t\tif (stepId === 'garden_condition' && wizard.data['order_type'] === 'one_off') {\n\t\t\t\t\tupsellBanner.style.display = 'block';\n\t\t\t\t\tvar bannerSubAmount = upsellBanner.querySelector('.ppk-banner-sub-amt');\n\t\t\t\t\tvar bannerOoAmount  = upsellBanner.querySelector('.ppk-banner-oo-amt');\n\t\t\t\t\tif (bannerSubAmount) bannerSubAmount.textContent = '\u00a3' + ppkPricingConfig.surcharge_sub.toFixed(0);\n\t\t\t\t\tif (bannerOoAmount)  bannerOoAmount.textContent  = '\u00a3' + ppkPricingConfig.surcharge_oo.toFixed(0);\n\t\t\t\t\tvar bannerGiftRetail = upsellBanner.querySelector('.ppk-banner-gift-retail-amt');\n\t\t\t\t\tif (bannerGiftRetail && ppkPricingConfig.gift_retail_value != null) {\n\t\t\t\t\t\tbannerGiftRetail.textContent = '\u00a3' + Number(ppkPricingConfig.gift_retail_value).toFixed(0);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tupsellBanner.style.display = 'none';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t\/\/ Step 7: hide permanent weekday lock-in warning for one-off bookings\n\t\t\tvar periodWarning = document.getElementById('ppk-subscription-period-warning');\n\t\t\tif (periodWarning && stepId === 'date') {\n\t\t\t\tperiodWarning.style.display = wizard.data['order_type'] === 'one_off' ? 'none' : 'block';\n\t\t\t}\n\n\t\t\t\/\/ Re-bind inline datepicker when returning to the date step\n\t\t\tif (stepId === 'date') {\n\t\t\t\tif (isWaitingListMode()) {\n\t\t\t\t\tapplyWaitingListDateStepUI();\n\t\t\t\t} else {\n\t\t\t\t\tresetWaitingListDateStepUI();\n\t\t\t\t\tif (wizard.data['cached_available_dates']) {\n\t\t\t\t\t\tapplyAvailableDatesToDateStep(wizard.data['cached_available_dates']);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t\/\/ Step 5: keep surcharge copy aligned with selected plan when navigating back\n\t\t\tif (stepId === 'garden_condition') {\n\t\t\t\tsyncGardenSurchargeDisplay();\n\t\t\t}\n\n\t\t\t\/\/ Step 10: sync camera vs upload UI for mobile \/ desktop\n\t\t\tif (stepId === 'term_photos') {\n\t\t\t\tapplyPhotosStepDeviceUI();\n\t\t\t}\n\n\t\t\t\/\/ Dynamic Payment Checkout Invoice Summary Card Calculator Engine (4-Week Upfront Advance Billing via Single Source of Truth parameter option arrays)\n\t\t\tif (stepId === 'payment') {\n\t\t\t\t\/\/ Generate a single locked idempotency key for this payment session to prevent concurrent race conditions\n\t\t\t\tif (!wizard.data['idempotency_key']) {\n\t\t\t\t\twizard.data['idempotency_key'] = 'ppk_idem_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);\n\t\t\t\t}\n\n\t\t\t\tvar rowsContainer = document.getElementById('ppk-invoice-rows-container');\n\t\t\t\tvar totalSpan     = document.getElementById('ppk-invoice-grand-total');\n\t\t\t\tvar stripeForm    = document.getElementById('ppk-stripe-form');\n\t\t\t\tvar secureBadge   = document.querySelector('#ppk-step-payment .ppk-secure-badge');\n\t\t\t\tvar secureNote    = document.querySelector('#ppk-step-payment .ppk-secure-note');\n\t\t\t\tvar submitBtn     = document.getElementById('ppk-submit-booking-btn');\n\t\t\t\tvar isWL          = isWaitingListMode();\n\n\t\t\t\tapplyPaymentWaitingListUI(isWL);\n\t\t\t\trenderReceiptMetadata();\n\t\t\t\trenderReceiptOrderDetail();\n\n\t\t\t\tif (!isWL && rowsContainer && totalSpan) {\n\t\t\t\t\tvar orderType = wizard.data['order_type'] || 'subscription';\n\t\t\t\t\tvar cycle     = wizard.data['billing_cycle'] || 'weekly';\n\t\t\t\t\tvar dogs      = parseInt(wizard.data['dog_count'] || 1, 10);\n\t\t\t\t\tvar hasReset  = wizard.data['initial_clean_surcharge'] === '1';\n\n\t\t\t\t\tvar basePrice = ppkPricingConfig.weekly;\n\t\t\t\t\tif (orderType === 'one_off') {\n\t\t\t\t\t\tbasePrice = ppkPricingConfig.one_off;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (cycle === 'fortnightly') { basePrice = ppkPricingConfig.fortnightly; }\n\t\t\t\t\t\tif (cycle === 'monthly')     { basePrice = ppkPricingConfig.monthly; }\n\t\t\t\t\t\tif (cycle === 'twice_weekly') { basePrice = ppkPricingConfig.twice_weekly; }\n\t\t\t\t\t}\n\n\t\t\t\t\tvar extraDogsPrice  = Math.max(0, (dogs - 1) * ppkPricingConfig.extra_dog);\n\t\t\t\t\tvar singleVisitCost = basePrice + extraDogsPrice;\n\t\t\t\t\tvar grandTotal      = 0;\n\t\t\t\t\tvar subTotal        = 0;\n\t\t\t\t\tvar initialAmt      = 0;\n\t\t\t\t\tvar htmlBuffer      = '';\n\t\t\t\t\tvar freqLabels = {\n\t\t\t\t\t\tweekly       : 'Weekly',\n\t\t\t\t\t\tfortnightly  : 'Fortnightly',\n\t\t\t\t\t\tmonthly      : 'Monthly',\n\t\t\t\t\t\ttwice_weekly : 'Twice Weekly',\n\t\t\t\t\t\tone_off      : 'One-off Visit'\n\t\t\t\t\t};\n\n\t\t\t\t\tif (orderType === 'one_off') {\n\t\t\t\t\t\tsubTotal   = singleVisitCost;\n\t\t\t\t\t\tgrandTotal = singleVisitCost;\n\t\t\t\t\t\thtmlBuffer += '<div class=\"ppk-invoice-row\"><span>One-off Clean Rate<\/span><strong>\u00a3' + singleVisitCost.toFixed(2) + '<\/strong><\/div>';\n\t\t\t\t\t\tif (hasReset) {\n\t\t\t\t\t\t\tinitialAmt = ppkPricingConfig.surcharge_oo;\n\t\t\t\t\t\t\tgrandTotal += initialAmt;\n\t\t\t\t\t\t\thtmlBuffer += '<div class=\"ppk-invoice-row\"><span>Initial Deep Clean<\/span><strong>\u00a3' + initialAmt.toFixed(2) + '<\/strong><\/div>';\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar trialPrice           = singleVisitCost * 0.5;\n\t\t\t\t\t\tvar remainingVisitsCount = 3;\n\t\t\t\t\t\tvar totalVisitsAllocated = 4;\n\n\t\t\t\t\t\tif (cycle === 'twice_weekly') {\n\t\t\t\t\t\t\tremainingVisitsCount = 7;\n\t\t\t\t\t\t\ttotalVisitsAllocated = 8;\n\t\t\t\t\t\t} else if (cycle === 'monthly') {\n\t\t\t\t\t\t\tremainingVisitsCount = 0;\n\t\t\t\t\t\t\ttotalVisitsAllocated = 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar fullPricePeriod = singleVisitCost * remainingVisitsCount;\n\t\t\t\t\t\tsubTotal   = trialPrice + fullPricePeriod;\n\t\t\t\t\t\tgrandTotal = subTotal;\n\n\t\t\t\t\t\thtmlBuffer += '<div class=\"ppk-invoice-row ppk-invoice-section-header\"><span>Advance Pre-paid<\/span><\/div>';\n\t\t\t\t\t\thtmlBuffer += '<div class=\"ppk-invoice-row ppk-invoice-ledger-compact\"><span>Visit 1 <span style=\"font-weight:400;\">(50% Off New Client Trial)<\/span><\/span><strong>\u00a3' + trialPrice.toFixed(2) + '<\/strong><\/div>';\n\t\t\t\t\t\tif (remainingVisitsCount > 0) {\n\t\t\t\t\t\t\thtmlBuffer += '<div class=\"ppk-invoice-row ppk-invoice-ledger-compact\"><span>Visits 2 to ' + totalVisitsAllocated + '<\/span><strong>\u00a3' + fullPricePeriod.toFixed(2) + '<\/strong><\/div>';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (hasReset) {\n\t\t\t\t\t\t\tinitialAmt = ppkPricingConfig.surcharge_sub;\n\t\t\t\t\t\t\tgrandTotal += initialAmt;\n\t\t\t\t\t\t\thtmlBuffer += '<div class=\"ppk-invoice-row ppk-invoice-ledger-compact\"><span>Initial Deep Clean <span style=\"font-weight:400;\">(50% discount)<\/span><\/span><strong>\u00a3' + initialAmt.toFixed(2) + '<\/strong><\/div>';\n\t\t\t\t\t\t}\n\t\t\t\t\t\thtmlBuffer += '<div class=\"ppk-invoice-row ppk-invoice-section-header ppk-invoice-premium-header\"><span>Premium Sign-up Incentive<\/span><\/div>';\n\t\t\t\t\t\thtmlBuffer += '<div class=\"ppk-invoice-row ppk-invoice-ledger-compact ppk-invoice-ledger-gift\"><span>FREE Odour-Free Waste Caddy<span style=\"font-size:0.75rem; opacity:0.7; margin-top:2px; display:block;\">(Delivered during your 4th visit)<\/span><\/span><strong>Free<\/strong><\/div>';\n\t\t\t\t\t}\n\n\t\t\t\t\trowsContainer.innerHTML = htmlBuffer;\n\n\t\t\t\t\tvar freqDescEl = document.getElementById('ppk-summary-freq-desc');\n\t\t\t\t\tif (freqDescEl) {\n\t\t\t\t\t\tfreqDescEl.textContent = orderType === 'one_off'\n\t\t\t\t\t\t\t? 'One-off Visit'\n\t\t\t\t\t\t\t: (freqLabels[cycle] || 'Weekly');\n\t\t\t\t\t}\n\n\t\t\t\t\tvar subTotalEl = document.getElementById('ppk-summary-sub-total');\n\t\t\t\t\tif (subTotalEl) { subTotalEl.textContent = subTotal.toFixed(2); }\n\n\t\t\t\t\tvar grandHiddenEl = document.getElementById('ppk-summary-grand-total');\n\t\t\t\t\tif (grandHiddenEl) { grandHiddenEl.textContent = grandTotal.toFixed(2); }\n\n\t\t\t\t\tvar totalLabel = document.querySelector('#ppk-step-payment .ppk-invoice-total-label');\n\t\t\t\t\tif (totalLabel) {\n\t\t\t\t\t\ttotalLabel.textContent = 'Total Due Now:';\n\t\t\t\t\t}\n\t\t\t\t\ttotalSpan.textContent = '\u00a3' + grandTotal.toFixed(2);\n\t\t\t\t}\n\n\t\t\t\tif (stripeForm) stripeForm.style.display = isWL ? 'none' : '';\n\t\t\t\tif (secureBadge) secureBadge.style.display = isWL ? 'none' : '';\n\t\t\t\tif (secureNote) secureNote.style.display = isWL ? 'none' : '';\n\t\t\t\tif (submitBtn) {\n\t\t\t\t\tsubmitBtn.innerHTML = isWL\n\t\t\t\t\t\t? 'Submit to Priority Waiting List'\n\t\t\t\t\t\t: paySubmitBtnHtml;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar pct = Math.round( (humanIdx \/ total) * 100 );\n\t\t\tif (progressFill)  progressFill.style.width = pct + '%';\n\t\t\tif (progressTrack) {\n\t\t\t\tprogressTrack.setAttribute('aria-valuenow', pct);\n\t\t\t}\n\n\t\t\t\/\/ Hide progress UI on the welcome step for a cleaner look\n\t\t\tvar showProgress = idx > 0;\n\t\t\tif (progressLabel) progressLabel.style.visibility = showProgress ? 'visible' : 'hidden';\n\t\t\tif (progressTrack) progressTrack.style.visibility = showProgress ? 'visible' : 'hidden';\n\n\t\t\tif (stepId === 'success') {\n\t\t\t\tapplySuccessWaitingListUI(isSuccessWaitingListView());\n\t\t\t\trefreshSuccessScheduledDateDisplay();\n\t\t\t}\n\t\t}\n\n\t\tvar lastSuccessWasWaitingList = false;\n\t\tvar PPK_SUCCESS_BODY_DEFAULT = 'Thank you for joining the PAPEPO family. Your regular van slot has been securely locked into our smart routing schedule.';\n\t\tvar PPK_SUCCESS_BODY_WAITING = 'Priority Waiting List Confirmed! Your garden configuration has been successfully logged. We have sent a confirmation email to your address. No payment is taken now. Once a fleet slot is dynamically scaled for your zone, we will notify you immediately via email to activate your account!';\n\n\t\tfunction ensureWizardScheduledDate() {\n\t\t\tvar hidden = document.getElementById('ppk-selected-date-input');\n\t\t\tif (hidden && hidden.value) {\n\t\t\t\twizard.data['scheduled_date'] = hidden.value;\n\t\t\t}\n\t\t}\n\n\t\tfunction persistSuccessScheduledDate(dateYmd) {\n\t\t\tif (!dateYmd) return;\n\t\t\ttry {\n\t\t\t\tsessionStorage.setItem('ppk_success_scheduled_date', String(dateYmd).trim().substring(0, 10));\n\t\t\t} catch (e) {}\n\t\t}\n\n\t\tfunction resolveSuccessScheduledDateYmd(fromResponse) {\n\t\t\tif (fromResponse) return String(fromResponse).trim();\n\t\t\tif (wizard.data && wizard.data['scheduled_date']) return String(wizard.data['scheduled_date']).trim();\n\t\t\tvar hidden = document.getElementById('ppk-selected-date-input');\n\t\t\tif (hidden && hidden.value) return String(hidden.value).trim();\n\t\t\ttry {\n\t\t\t\tvar cached = sessionStorage.getItem('ppk_success_scheduled_date');\n\t\t\t\tif (cached) return String(cached).trim();\n\t\t\t} catch (e) {}\n\t\t\treturn '';\n\t\t}\n\n\t\tfunction renderSuccessScheduledDate(dateYmd) {\n\t\t\tvar dateEl = document.getElementById('ppk-success-date-display');\n\t\t\tif (!dateEl || !dateYmd) return false;\n\n\t\t\tvar normalized = String(dateYmd).trim().substring(0, 10);\n\t\t\tif (!\/^\\d{4}-\\d{2}-\\d{2}$\/.test(normalized)) {\n\t\t\t\tdateEl.textContent = dateYmd;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar d = new Date(normalized + 'T12:00:00');\n\t\t\tif (isNaN(d.getTime())) {\n\t\t\t\tdateEl.textContent = dateYmd;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tdateEl.textContent = d.toLocaleDateString('en-GB', {\n\t\t\t\tweekday: 'long', day: 'numeric', month: 'long', year: 'numeric'\n\t\t\t});\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction refreshSuccessScheduledDateDisplay(fromResponse) {\n\t\t\tif (isSuccessWaitingListView()) return false;\n\t\t\tvar ymd = resolveSuccessScheduledDateYmd(fromResponse);\n\t\t\tif (!ymd) return false;\n\t\t\treturn renderSuccessScheduledDate(ymd);\n\t\t}\n\n\t\tfunction applySuccessStaffContact(staffData) {\n\t\t\tvar contactEl = document.getElementById('ppk-success-staff-contact');\n\t\t\tvar gcardName = document.getElementById('ppk-gcard-staff-name');\n\t\t\tvar gcardType = document.getElementById('ppk-gcard-staff-type');\n\t\t\tvar gcardLink = document.getElementById('ppk-gcard-staff-walink');\n\t\t\tvar gcardPanel = document.getElementById('ppk-goldcard-staff-panel');\n\n\t\t\t\/\/ FIX: Removed strict wa_link requirement. As long as staff_name exists, we render.\n\t\t\tif (staffData && staffData.staff_name) {\n\t\t\t\tvar staffName = String(staffData.staff_name);\n\t\t\t\tvar staffType = staffData.staff_type ? String(staffData.staff_type).toLowerCase() : 'driver';\n\t\t\t\tvar regNumber = staffData.reg_number ? String(staffData.reg_number).trim() : '';\n\n\t\t\t\t\/\/ Upgraded UK Number Format Auto-Healing Protection Engine\n\t\t\t\tvar rawPhone = String(staffData.whatsapp || staffData.customer_phone || '').replace(\/[^0-9]\/g, '');\n\t\t\t\tif (rawPhone.indexOf('07') === 0) {\n\t\t\t\t\trawPhone = '44' + rawPhone.substring(1);\n\t\t\t\t} else if (rawPhone.indexOf('7') === 0 && rawPhone.length === 10) {\n\t\t\t\t\trawPhone = '44' + rawPhone;\n\t\t\t\t}\n\t\t\t\tvar secureWaLink = rawPhone ? 'https:\/\/wa.me\/' + rawPhone : (staffData.wa_link || '#');\n\n\t\t\t\t\/\/ Inject data with PAPEPO standards\n\t\t\t\tif (gcardName) gcardName.textContent = staffName;\n\t\t\t\tif (gcardType) {\n\t\t\t\t\tvar typeLabel = (staffType === 'walker' || staffType === 'foot' || staffType === 'walking') ? 'Walker' : 'Driver';\n\t\t\t\t\tif (typeLabel === 'Driver' && regNumber !== '') {\n\t\t\t\t\t\ttypeLabel += ' [' + regNumber + ']';\n\t\t\t\t\t}\n\t\t\t\t\tgcardType.textContent = typeLabel;\n\t\t\t\t}\n\t\t\t\tif (gcardLink) {\n\t\t\t\t\tgcardLink.setAttribute('href', secureWaLink);\n\t\t\t\t\tgcardLink.textContent = rawPhone ? '+' + rawPhone : 'CHAT NOW \ud83d\udcac';\n\t\t\t\t}\n\t\t\t\tif (gcardPanel) gcardPanel.style.setProperty('visibility', 'visible', 'important');\n\n\t\t\t\tif (contactEl) {\n\t\t\t\t\tcontactEl.innerHTML = '<p style=\"margin-top: 15px; font-size: 14px; color: #3d271d;\">Need to coordinate access or specific details? <a href=\"' + secureWaLink + '\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"color: #3D271D; font-weight: bold; text-decoration: underline;\">Click here to chat directly with your assigned helper, ' + staffName.replace(\/<\/g, '&lt;').replace(\/>\/g, '&gt;') + ' \ud83d\udcac<\/a><\/p>';\n\t\t\t\t\tcontactEl.style.display = 'block';\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tsessionStorage.setItem('ppk_success_staff_contact', JSON.stringify(staffData));\n\t\t\t\t} catch (e) {}\n\t\t\t} else {\n\t\t\t\tif (gcardName) gcardName.textContent = '\u2014';\n\t\t\t\tif (gcardType) gcardType.textContent = '\u2014';\n\t\t\t\tif (gcardLink) gcardLink.setAttribute('href', '#');\n\t\t\t\tif (gcardPanel) gcardPanel.style.setProperty('visibility', 'hidden', 'important');\n\n\t\t\t\tif (contactEl) {\n\t\t\t\t\tcontactEl.innerHTML = '';\n\t\t\t\t\tcontactEl.style.display = 'none';\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tsessionStorage.removeItem('ppk_success_staff_contact');\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\t\t}\n\n\t\tfunction restoreSuccessStaffContactFromSession() {\n\t\t\ttry {\n\t\t\t\tvar raw = sessionStorage.getItem('ppk_success_staff_contact');\n\t\t\t\tif (!raw) {\n\t\t\t\t\tapplySuccessStaffContact(null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tapplySuccessStaffContact(JSON.parse(raw));\n\t\t\t} catch (e) {\n\t\t\t\tapplySuccessStaffContact(null);\n\t\t\t}\n\t\t}\n\n\t\tfunction applySuccessWaitingListUI(isWL) {\n\t\t\tvar successStep = document.getElementById('ppk-step-success');\n\t\t\tvar dateBox = document.getElementById('ppk-success-date-box');\n\t\t\tvar qrHint  = document.getElementById('ppk-success-qr-hint');\n\t\t\tvar bodyEl  = document.querySelector('#ppk-step-success .ppk-success-body');\n\t\t\tvar staffContact = document.getElementById('ppk-success-staff-contact');\n\n\t\t\tif (isWL) {\n\t\t\t\tif (successStep) successStep.classList.add('ppk-wl-success');\n\t\t\t\tif (dateBox) dateBox.style.setProperty('display', 'none', 'important');\n\t\t\t\tif (qrHint) qrHint.style.setProperty('display', 'none', 'important');\n\t\t\t\tif (staffContact) staffContact.style.setProperty('display', 'none', 'important');\n\t\t\t\tif (bodyEl) bodyEl.textContent = PPK_SUCCESS_BODY_WAITING;\n\t\t\t} else {\n\t\t\t\tif (successStep) successStep.classList.remove('ppk-wl-success');\n\t\t\t\tif (dateBox) dateBox.style.removeProperty('display');\n\t\t\t\tif (qrHint) qrHint.style.removeProperty('display');\n\t\t\t\tif (bodyEl) bodyEl.textContent = PPK_SUCCESS_BODY_DEFAULT;\n\t\t\t\trestoreSuccessStaffContactFromSession();\n\t\t\t}\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ persistState \u2014 serialise full wizard state into sessionStorage\n\t\t\/\/ =====================================================================\n\t\tfunction persistState() {\n\t\t\ttry {\n\t\t\t\t\/\/ Create a strict YYYY-MM-DD stamp based on the user's current local browser midnight\n\t\t\t\tvar todayStamp = new Date().getFullYear() + '-' + String(new Date().getMonth() + 1).padStart(2, '0') + '-' + String(new Date().getDate()).padStart(2, '0');\n\t\t\t\tsessionStorage.setItem('papepo_wizard_state', JSON.stringify({\n\t\t\t\t\tcurrentStep     : wizard.currentStep,\n\t\t\t\t\thistory         : wizard.history,\n\t\t\t\t\tdata            : wizard.data,\n\t\t\t\t\tcached_day_stamp: todayStamp\n\t\t\t\t}));\n\t\t\t} catch (e) {\n\t\t\t\t\/\/ sessionStorage unavailable (private mode \/ quota exceeded)\n\t\t\t}\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ restoreFieldsFromData \u2014 write wizard.data values back into the DOM\n\t\t\/\/ Iterates every step (all are in the DOM); safe to call before any\n\t\t\/\/ step is shown because it only sets values, never triggers navigation.\n\t\t\/\/ =====================================================================\n\t\tfunction restoreFieldsFromData() {\n\t\t\tdocument.querySelectorAll('.ppk-step').forEach(function (stepEl) {\n\t\t\t\t\/\/ Text, email, tel, number, date, select, textarea\n\t\t\t\tstepEl.querySelectorAll(\n\t\t\t\t\t'input:not([type=\"radio\"]):not([type=\"checkbox\"]), select, textarea'\n\t\t\t\t).forEach(function (el) {\n\t\t\t\t\tif (el.name && el.name in wizard.data) {\n\t\t\t\t\t\tel.value = wizard.data[el.name];\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t\/\/ Radio buttons \u2014 match by value\n\t\t\t\tstepEl.querySelectorAll('input[type=\"radio\"]').forEach(function (el) {\n\t\t\t\t\tif (el.name && el.name in wizard.data) {\n\t\t\t\t\t\tel.checked = (el.value === wizard.data[el.name]);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t\/\/ Checkboxes\n\t\t\t\tstepEl.querySelectorAll('input[type=\"checkbox\"]').forEach(function (el) {\n\t\t\t\t\tif (el.name && el.name in wizard.data) {\n\t\t\t\t\t\tel.checked = !!wizard.data[el.name];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ showStepDirect \u2014 show a step without pushing to history\n\t\t\/\/ Used exclusively by restoreState; avoids double-stacking history.\n\t\t\/\/ =====================================================================\n\t\tfunction showStepDirect(stepId) {\n\t\t\tvar target = document.getElementById('ppk-step-' + stepId);\n\t\t\tif (!target) return;\n\n\t\t\tdocument.querySelectorAll('.ppk-step').forEach(function (el) {\n\t\t\t\tel.classList.remove('ppk-active');\n\t\t\t});\n\t\t\ttarget.classList.add('ppk-active');\n\t\t\twizard.currentStep = stepId;\n\n\t\t\tupdateProgressUI(stepId);\n\n\t\t\tif (backBtn) {\n\t\t\t\tbackBtn.style.display = wizard.history.length > 0 ? 'inline-flex' : 'none';\n\t\t\t}\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ restoreState \u2014 re-hydrate wizard from sessionStorage on page load\n\t\t\/\/ Returns true if a valid saved state was found and applied.\n\t\t\/\/ =====================================================================\n\t\tfunction restoreState() {\n\t\t\tvar raw;\n\t\t\ttry {\n\t\t\t\traw = sessionStorage.getItem('papepo_wizard_state');\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!raw) return false;\n\n\t\t\tvar saved;\n\t\t\ttry {\n\t\t\t\tsaved = JSON.parse(raw);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t\/\/ Guard: saved step must exist and match a real DOM element\n\t\t\tif (!saved || typeof saved.currentStep !== 'string') return false;\n\t\t\tif (!document.getElementById('ppk-step-' + saved.currentStep)) return false;\n\n\t\t\t\/\/ Re-hydrate in-memory state\n\t\t\tif (saved.data && typeof saved.data === 'object') {\n\t\t\t\twizard.data = saved.data;\n\t\t\t}\n\t\t\tif (Array.isArray(saved.history)) {\n\t\t\t\twizard.history = saved.history;\n\t\t\t}\n\n\t\t\tif (sessionStorage.getItem('ppk_is_waiting_list_flag') === 'true') {\n\t\t\t\twizard.data['is_waiting_list'] = true;\n\t\t\t}\n\n\t\t\t\/\/ Elderly Time-Travel Protection: Check if cache belongs to a past calendar day\n\t\t\tvar currentTodayStamp = new Date().getFullYear() + '-' + String(new Date().getMonth() + 1).padStart(2, '0') + '-' + String(new Date().getDate()).padStart(2, '0');\n\n\t\t\tif (saved.cached_day_stamp !== currentTodayStamp) {\n\t\t\t\t\/\/ Discard stale expired calendar data to protect Stripe billing integrity\n\t\t\t\tif (wizard.data) {\n\t\t\t\t\tdelete wizard.data['cached_available_dates'];\n\t\t\t\t\tdelete wizard.data['scheduled_date']; \/\/ clear old checked past date\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (wizard.data && wizard.data['cached_available_dates']) {\n\t\t\t\tapplyAvailableDatesToDateStep(wizard.data['cached_available_dates']);\n\t\t\t}\n\n\t\t\trestoreFieldsFromData();\n\t\t\tshowStepDirect(saved.currentStep);\n\n\t\t\t\/\/ Silent Background Recovery: If dates are missing but postcode exists, trigger silent live API reload\n\t\t\tif ((!wizard.data || !wizard.data['cached_available_dates']) && wizard.data['customer_postcode_normalized']) {\n\t\t\t\twindow.ppkWizard.handlePostcodeContinue(true); \/\/ true triggers silent background reload\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ saveCurrentStepData \u2014 snapshot all inputs into wizard.data\n\t\t\/\/ (DOM values are also preserved natively; this builds the payload)\n\t\t\/\/ =====================================================================\n\t\tfunction saveCurrentStepData() {\n\t\t\tif (!wizard.currentStep) return;\n\t\t\tvar stepEl = document.getElementById('ppk-step-' + wizard.currentStep);\n\t\t\tif (!stepEl) return;\n\n\t\t\t\/\/ Text, email, tel, number, date, select, textarea\n\t\t\tstepEl.querySelectorAll(\n\t\t\t\t'input:not([type=\"radio\"]):not([type=\"checkbox\"]), select, textarea'\n\t\t\t).forEach(function (el) {\n\t\t\t\tif (el.name) wizard.data[el.name] = el.value;\n\t\t\t});\n\n\t\t\t\/\/ Radio \u2014 only checked value per group\n\t\t\tvar radioGroups = {};\n\t\t\tstepEl.querySelectorAll('input[type=\"radio\"]').forEach(function (el) {\n\t\t\t\tif (el.name && !(el.name in radioGroups)) {\n\t\t\t\t\tradioGroups[el.name] = null;\n\t\t\t\t}\n\t\t\t});\n\t\t\tstepEl.querySelectorAll('input[type=\"radio\"]:checked').forEach(function (el) {\n\t\t\t\tif (el.name) wizard.data[el.name] = el.value;\n\t\t\t});\n\t\t\t\/\/ If a group has no checked radio, keep any previously stored value\n\t\t\tObject.keys(radioGroups).forEach(function (name) {\n\t\t\t\tif (!(name in wizard.data)) wizard.data[name] = '';\n\t\t\t});\n\n\t\t\t\/\/ Checkboxes\n\t\t\tstepEl.querySelectorAll('input[type=\"checkbox\"]').forEach(function (el) {\n\t\t\t\tif (el.name) wizard.data[el.name] = el.checked;\n\t\t\t});\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ goToStep \u2014 navigate forward to a named step\n\t\t\/\/ =====================================================================\n\t\tfunction goToStep(stepId) {\n\t\t\tsaveCurrentStepData();\n\n\t\t\tif (wizard.currentStep) {\n\t\t\t\twizard.history.push(wizard.currentStep);\n\t\t\t}\n\n\t\t\tvar target = document.getElementById('ppk-step-' + stepId);\n\t\t\tif (!target) {\n\t\t\t\tconsole.warn('ppkWizard: step not found \u2014 ' + stepId);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdocument.querySelectorAll('.ppk-step').forEach(function (el) {\n\t\t\t\tel.classList.remove('ppk-active');\n\t\t\t});\n\t\t\ttarget.classList.add('ppk-active');\n\n\t\t\twizard.currentStep = stepId;\n\n\t\t\tupdateProgressUI(stepId);\n\n\t\t\t\/\/ Back button: visible only when there is history to return to\n\t\t\tif (backBtn) {\n\t\t\t\tbackBtn.style.display = wizard.history.length > 0 ? 'inline-flex' : 'none';\n\t\t\t}\n\n\t\t\tpersistState();\n\t\t\tscrollToCard();\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ goBack \u2014 pop history stack and restore previous step\n\t\t\/\/ DOM values are intact (never destroyed); wizard.data is also preserved\n\t\t\/\/ =====================================================================\n\t\tfunction goBack() {\n\t\t\tif (wizard.history.length === 0) return;\n\n\t\t\tsaveCurrentStepData();\n\n\t\t\tvar prev   = wizard.history.pop();\n\t\t\tvar target = document.getElementById('ppk-step-' + prev);\n\t\t\tif (!target) return;\n\n\t\t\tdocument.querySelectorAll('.ppk-step').forEach(function (el) {\n\t\t\t\tel.classList.remove('ppk-active');\n\t\t\t});\n\t\t\ttarget.classList.add('ppk-active');\n\n\t\t\twizard.currentStep = prev;\n\n\t\t\tupdateProgressUI(prev);\n\n\t\t\tif (backBtn) {\n\t\t\t\tbackBtn.style.display = wizard.history.length > 0 ? 'inline-flex' : 'none';\n\t\t\t}\n\n\t\t\tpersistState();\n\t\t\tscrollToCard();\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ scrollToCard \u2014 smooth scroll to the top of the wizard card\n\t\t\/\/ =====================================================================\n\t\tfunction scrollToCard() {\n\t\t\tvar card = document.getElementById('ppk-wizard-card');\n\t\t\tif (card) {\n\t\t\t\tcard.scrollIntoView({ behavior: 'smooth', block: 'start' });\n\t\t\t}\n\t\t}\n\n\t\t\/\/ Individual terms validation logic handles step transitions natively via handleTermStep\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ Disagree modal\n\t\t\/\/ =====================================================================\n\t\tfunction showDisagreeModal() {\n\t\t\tif (disagreeModal) disagreeModal.classList.add('ppk-modal-open');\n\t\t}\n\n\t\tfunction hideDisagreeModal() {\n\t\t\tif (disagreeModal) disagreeModal.classList.remove('ppk-modal-open');\n\t\t}\n\n\t\t\/\/ Terms disagree modal buttons use onclick \u2192 closeDisagreeModal() \/ terminateBooking()\n\n\t\t\/\/ Close modal on backdrop click\n\t\tif (disagreeModal) {\n\t\t\tdisagreeModal.addEventListener('click', function (e) {\n\t\t\t\tif (e.target === disagreeModal) hideDisagreeModal();\n\t\t\t});\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ Live-save \u2014 persist on every keystroke and every selection change.\n\t\t\/\/ Event delegation on #ppk-steps-wrap covers all current and future\n\t\t\/\/ fields without needing to re-attach listeners when steps are added.\n\t\t\/\/ =====================================================================\n\t\tvar stepsWrap = document.getElementById('ppk-steps-wrap');\n\t\tif (stepsWrap) {\n\t\t\tstepsWrap.addEventListener('input', function () {\n\t\t\t\tsaveCurrentStepData();\n\t\t\t\tpersistState();\n\t\t\t});\n\t\t\tstepsWrap.addEventListener('change', function () {\n\t\t\t\tsaveCurrentStepData();\n\t\t\t\tpersistState();\n\t\t\t});\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ Back button\n\t\t\/\/ =====================================================================\n\t\tif (backBtn) {\n\t\t\tbackBtn.addEventListener('click', goBack);\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ showPostcodeError \u2014 display a GOV.UK-style inline error\n\t\t\/\/ =====================================================================\n\t\tfunction showPostcodeError(msg) {\n\t\t\tvar errorEl = document.getElementById('ppk-postcode-error');\n\t\t\tif (!errorEl) return;\n\t\t\terrorEl.textContent = msg;\n\t\t\terrorEl.hidden = false;\n\t\t\terrorEl.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ Postcode fully-booked waiting list UI helpers\n\t\t\/\/ =====================================================================\n\t\tvar postcodeFullyBookedPending = false;\n\n\t\tfunction showPostcodeFullyBookedBanner() {\n\t\t\tvar banner = document.getElementById('ppk-postcode-fully-booked-banner');\n\t\t\tif (!banner) return;\n\t\t\tbanner.hidden = false;\n\t\t\tbanner.innerHTML =\n\t\t\t\t'<div style=\"background:#f9f6f3;border:2px solid #3d271d;border-radius:16px;padding:18px 20px;text-align:left;line-height:1.55;color:#55443e;font-size:0.98rem;\">' +\n\t\t\t\t'We service your area, but we are currently fully booked for the next 4 weeks! However, you can still complete your configuration to join our Priority Waiting List. Once a slot opens up, we will contact you immediately to lock in your service.' +\n\t\t\t\t'<\/div>';\n\t\t}\n\n\t\tfunction hidePostcodeFullyBookedBanner() {\n\t\t\tvar banner = document.getElementById('ppk-postcode-fully-booked-banner');\n\t\t\tif (!banner) return;\n\t\t\tbanner.hidden = true;\n\t\t\tbanner.innerHTML = '';\n\t\t}\n\n\t\tfunction resetPostcodeFullyBookedState() {\n\t\t\tpostcodeFullyBookedPending = false;\n\t\t\thidePostcodeFullyBookedBanner();\n\t\t\tvar btn = document.getElementById('ppk-postcode-btn');\n\t\t\tif (btn) btn.textContent = 'Check Availability';\n\t\t\tdelete wizard.data['is_waiting_list'];\n\t\t\tsetWaitingListSessionFlag(false);\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ handlePostcodeContinue \u2014 async postcode validation via AJAX\n\t\t\/\/ =====================================================================\n\t\tfunction handlePostcodeContinue(isSilent) {\n\t\t\tvar input   = document.getElementById('ppk-field-postcode');\n\t\t\tvar errorEl = document.getElementById('ppk-postcode-error');\n\t\t\tvar btn     = document.getElementById('ppk-postcode-btn');\n\t\t\tvar raw     = input ? input.value.trim() : (wizard.data['customer_postcode_normalized'] || '');\n\n\t\t\t\/\/ Clear errors if not a background check\n\t\t\tif (!isSilent && errorEl) { errorEl.hidden = true; errorEl.textContent = ''; }\n\n\t\t\tif (!raw) {\n\t\t\t\tif (!isSilent) {\n\t\t\t\t\tshowPostcodeError('Please enter a valid postcode.');\n\t\t\t\t\tif (input) input.focus();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t\/\/ Second click: user acknowledged fully booked state and opts into waiting list\n\t\t\tif (!isSilent && postcodeFullyBookedPending) {\n\t\t\t\twizard.data['is_waiting_list'] = true;\n\t\t\t\tsetWaitingListSessionFlag(true);\n\t\t\t\tpersistState();\n\t\t\t\tgoToStep('dogs');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t\/\/ Only block UI with spinners if this is a manual user button click\n\t\t\tif (!isSilent && btn) { btn.disabled = true; btn.textContent = 'Checking...'; }\n\n\t\t\tif (!isSilent) {\n\t\t\t\tdelete wizard.data['cached_available_dates'];\n\t\t\t\ttry { sessionStorage.removeItem('papepo_wizard_state'); } catch (e) {}\n\t\t\t}\n\n\t\t\tvar body = new FormData();\n\t\t\tbody.append('action',   'papepooking_validate_postcode');\n\t\t\tbody.append('nonce',    '86b236efdd');\n\t\t\tbody.append('postcode', raw);\n\n\t\t\tfetch(ppkAjaxUrl, {\n\t\t\t\tmethod:      'POST',\n\t\t\t\tbody:        body,\n\t\t\t\tcredentials: 'same-origin',\n\t\t\t})\n\t\t\t.then(function (r) { return r.json(); })\n\t\t\t.then(function (res) {\n\t\t\t\tif (res.success) {\n\t\t\t\t\twizard.data['zone_id'] = res.data.zone_id;\n\t\t\t\t\twizard.data['customer_postcode_normalized'] = res.data.normalized;\n\t\t\t\t\twizard.data['cached_available_dates'] = res.data.available_dates;\n\n\t\t\t\t\tif (res.data.fully_booked === true) {\n\t\t\t\t\t\tpostcodeFullyBookedPending = true;\n\t\t\t\t\t\tsetWaitingListSessionFlag(true);\n\t\t\t\t\t\tif (!isSilent) {\n\t\t\t\t\t\t\tshowPostcodeFullyBookedBanner();\n\t\t\t\t\t\t\tif (btn) btn.textContent = 'Join Priority Waiting List & Continue';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpersistState();\n\t\t\t\t\t\tif (!isSilent) restoreFieldsFromData();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tpostcodeFullyBookedPending = false;\n\t\t\t\t\thidePostcodeFullyBookedBanner();\n\t\t\t\t\tdelete wizard.data['is_waiting_list'];\n\t\t\t\t\tsetWaitingListSessionFlag(false);\n\n\t\t\t\t\tapplyAvailableDatesToDateStep(res.data.available_dates || []);\n\n\t\t\t\t\tpersistState();\n\t\t\t\t\trestoreFieldsFromData();\n\n\t\t\t\t\tif (!isSilent) {\n\t\t\t\t\t\tgoToStep('dogs');\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tpostcodeFullyBookedPending = false;\n\t\t\t\t\thidePostcodeFullyBookedBanner();\n\t\t\t\t\tif (!isSilent) {\n\t\t\t\t\t\tshowPostcodeError(\n\t\t\t\t\t\t\t(res.data && res.data.message)\n\t\t\t\t\t\t\t\t? res.data.message\n\t\t\t\t\t\t\t\t: 'Sorry, we do not service this area yet.'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(function () {\n\t\t\t\tif (!isSilent) {\n\t\t\t\t\tshowPostcodeError('A network error occurred. Please check your connection and try again.');\n\t\t\t\t}\n\t\t\t})\n\t\t\t.finally(function () {\n\t\t\t\tif (btn) {\n\t\t\t\t\tbtn.disabled = false;\n\t\t\t\t\tbtn.textContent = postcodeFullyBookedPending\n\t\t\t\t\t\t? 'Join Priority Waiting List & Continue'\n\t\t\t\t\t\t: 'Check Availability';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ Stripe.js \u2014 initialise and mount card element\n\t\t\/\/ =====================================================================\n\t\tvar stripePubKey   = \"pk_test_51TbOHCABgTl1VfjsZtNQSKAvE9YHOgwisJRBj1SjiyxyZSBbOjDEQcFPzUVK3M7xfS1gtFh65Rv5ubEENRFwpz4700969jxLRU\";\n\t\tvar ppkAjaxUrl     = \"https:\\\/\\\/papepo.co.uk\\\/public\\\/wp-admin\\\/admin-ajax.php\";\n\t\tvar ppkHomeUrl     = \"https:\\\/\\\/papepo.co.uk\\\/public\\\/\";\n\t\tvar ppkPortalUrl   = \"https:\\\/\\\/papepo.co.uk\\\/public\\\/customer-dashboard\\\/\";\n\t\tvar stripeInstance = null;\n\t\tvar stripeCard     = null;\n\t\tvar stripeReady    = false;\n\n\t\t(function () {\n\t\t\tif (typeof Stripe === 'undefined') {\n\t\t\t\tconsole.warn('ppkWizard: Stripe.js not loaded.');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!stripePubKey) {\n\t\t\t\tconsole.warn('ppkWizard: Stripe publishable key is not configured.');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tstripeInstance = Stripe(stripePubKey);\n\t\t\tvar elements   = stripeInstance.elements();\n\t\t\tstripeCard     = elements.create('card', {\n\t\t\t\thidePostalCode: true, \/\/ Hide Zip\/Postal code field to reduce friction\n\t\t\t\tstyle: {\n\t\t\t\t\tbase: {\n\t\t\t\t\t\tfontSize: '17px',\n\t\t\t\t\t\tfontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n\t\t\t\t\t\tcolor: '#0b0c0c',\n\t\t\t\t\t\t'::placeholder': { color: '#505a5f' }\n\t\t\t\t\t},\n\t\t\t\t\tinvalid: { color: '#d4351c', iconColor: '#d4351c' }\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar mountEl = document.getElementById('ppk-stripe-card-element');\n\t\t\tif (mountEl) {\n\t\t\t\tstripeCard.mount(mountEl);\n\t\t\t\tstripeReady = true;\n\t\t\t}\n\n\t\t\tstripeCard.on('change', function (event) {\n\t\t\t\tvar errEl = document.getElementById('ppk-card-errors');\n\t\t\t\tif (errEl) errEl.textContent = event.error ? event.error.message : '';\n\t\t\t});\n\t\t}());\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ handlePaymentSubmit \u2014 validate fields \u2192 Stripe PM \u2192 AJAX booking\n\t\t\/\/ =====================================================================\n\t\tvar paySubmitBtn = document.getElementById('ppk-submit-booking-btn');\n\t\tvar paySubmitBtnHtml = paySubmitBtn ? paySubmitBtn.innerHTML : '';\n\t\tif (paySubmitBtn) {\n\t\t\tpaySubmitBtn.addEventListener('click', handlePaymentSubmit);\n\t\t}\n\n\t\tfunction submitBookingPayload(paymentMethodId) {\n\t\t\tvar btn       = document.getElementById('ppk-submit-booking-btn');\n\t\t\tvar cardErrEl = document.getElementById('ppk-card-errors');\n\t\t\tvar isWL      = isWaitingListMode();\n\n\t\t\tsaveCurrentStepData();\n\t\t\tensureWizardScheduledDate();\n\t\t\tvar payload = Object.assign({}, wizard.data, {\n\t\t\t\taction:            'papepooking_submit_booking',\n\t\t\t\tnonce:             '86b236efdd',\n\t\t\t\tis_waiting_list:   isWL ? 'true' : 'false'\n\t\t\t});\n\t\t\tif (paymentMethodId) {\n\t\t\t\tpayload.payment_method_id = paymentMethodId;\n\t\t\t}\n\n\t\t\tvar fd = new FormData();\n\t\t\tObject.keys(payload).forEach(function (k) {\n\t\t\t\tvar v = payload[k];\n\t\t\t\tfd.append(k, (v !== null && v !== undefined) ? String(v) : '');\n\t\t\t});\n\t\t\t\/\/ Use the session-locked idempotency key instead of generating a new one on every fetch call\n\t\t\tif (wizard.data['idempotency_key']) {\n\t\t\t\tfd.append('idempotency_key', wizard.data['idempotency_key']);\n\t\t\t}\n\n\t\t\treturn fetch(ppkAjaxUrl, {\n\t\t\t\tmethod: 'POST', body: fd, credentials: 'same-origin'\n\t\t\t})\n\t\t\t.then(function (r) { return r.json(); })\n\t\t\t.then(function (res) {\n\t\t\t\tif (res.success) {\n\t\t\t\t\tlastSuccessWasWaitingList = isWL;\n\t\t\t\t\tif (isWL) {\n\t\t\t\t\t\tsetWaitingListSessionFlag(true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetWaitingListSessionFlag(false);\n\t\t\t\t\t}\n\t\t\t\t\tif (!isWL) {\n\t\t\t\t\t\tvar confirmedDate = resolveSuccessScheduledDateYmd(\n\t\t\t\t\t\t\t(wizard.data && wizard.data['scheduled_date']) || (res.data && res.data.scheduled_date) || ''\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (refreshSuccessScheduledDateDisplay(confirmedDate)) {\n\t\t\t\t\t\t\tpersistSuccessScheduledDate(confirmedDate);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry { sessionStorage.removeItem('ppk_success_scheduled_date'); } catch (e) {}\n\t\t\t\t\t}\n\t\t\t\t\tapplySuccessWaitingListUI(isWL);\n\t\t\t\t\tif (!isWL && res.data && res.data.assigned_staff) {\n\t\t\t\t\t\tapplySuccessStaffContact(res.data.assigned_staff);\n\t\t\t\t\t} else if (isWL) {\n\t\t\t\t\t\tapplySuccessStaffContact(null);\n\t\t\t\t\t}\n\t\t\t\t\ttry { sessionStorage.removeItem('papepo_wizard_state'); } catch (e) {}\n\t\t\t\t\twizard.data    = {};\n\t\t\t\t\twizard.history = [];\n\t\t\t\t\tgoToStep('success');\n\t\t\t\t\tif (backBtn) backBtn.style.display = 'none';\n\t\t\t\t} else {\n\t\t\t\t\tvar msg = (res.data && res.data.message) ? res.data.message : 'Booking failed. Please try again.';\n\t\t\t\t\tif (cardErrEl) cardErrEl.textContent = msg;\n\t\t\t\t\t\/\/ Regenerate idempotency key on failure to allow legitimate subsequent card retries\n\t\t\t\t\twizard.data['idempotency_key'] = 'ppk_idem_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);\n\t\t\t\t\tif (btn) { btn.disabled = false; btn.innerHTML = isWL ? 'Submit to Priority Waiting List' : paySubmitBtnHtml; }\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(function () {\n\t\t\t\tif (cardErrEl) cardErrEl.textContent = 'A network error occurred. Please check your connection and try again.';\n\t\t\t\t\/\/ Regenerate idempotency key on failure to allow legitimate subsequent card retries\n\t\t\t\twizard.data['idempotency_key'] = 'ppk_idem_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);\n\t\t\t\tif (btn) { btn.disabled = false; btn.innerHTML = isWL ? 'Submit to Priority Waiting List' : paySubmitBtnHtml; }\n\t\t\t});\n\t\t}\n\n\t\tfunction handlePaymentSubmit() {\n\t\t\tvar btn       = document.getElementById('ppk-submit-booking-btn');\n\t\t\tvar cardErrEl = document.getElementById('ppk-card-errors');\n\t\t\tif (cardErrEl) cardErrEl.textContent = '';\n\n\t\t\t\/\/ Required field validation\n\t\t\tvar fields = [\n\t\t\t\t{ id: 'ppk-field-name',    label: 'Full Name'      },\n\t\t\t\t{ id: 'ppk-field-email',   label: 'Email Address'  },\n\t\t\t\t{ id: 'ppk-field-phone',   label: 'Phone Number'   },\n\t\t\t\t{ id: 'ppk-field-address', label: 'Street Address' }\n\t\t\t];\n\t\t\tvar firstErrorEl = null;\n\t\t\tfields.forEach(function (f) {\n\t\t\t\tvar el  = document.getElementById(f.id);\n\t\t\t\tvar old = document.getElementById(f.id + '-err');\n\t\t\t\tif (old) old.remove();\n\t\t\t\tif (!el || el.value.trim()) return;\n\t\t\t\tvar p         = document.createElement('p');\n\t\t\t\tp.id          = f.id + '-err';\n\t\t\t\tp.style.cssText = 'color:#d4351c;font-size:0.9375rem;font-weight:600;' +\n\t\t\t\t                  'margin-top:6px;margin-bottom:16px;display:block;';\n\t\t\t\tp.textContent = f.label + ' is required.';\n\t\t\t\tel.parentNode.insertBefore(p, el.nextSibling);\n\t\t\t\tif (!firstErrorEl) firstErrorEl = el;\n\t\t\t});\n\t\t\tif (firstErrorEl) {\n\t\t\t\tfirstErrorEl.focus();\n\t\t\t\tfirstErrorEl.scrollIntoView({ behavior: 'smooth', block: 'center' });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isWaitingListMode()) {\n\t\t\t\tif (btn) { btn.disabled = true; btn.textContent = 'Submitting...'; }\n\t\t\t\tsubmitBookingPayload(null);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!stripeReady || !stripeCard) {\n\t\t\t\tif (cardErrEl) cardErrEl.textContent = 'Payment system is not ready. Please refresh and try again.';\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (btn) { btn.disabled = true; btn.textContent = 'Processing Payment...'; }\n\n\t\t\tvar nameVal  = (document.getElementById('ppk-field-name')  || {value: ''}).value.trim();\n\t\t\tvar emailVal = (document.getElementById('ppk-field-email') || {value: ''}).value.trim();\n\t\t\tvar phoneVal = (document.getElementById('ppk-field-phone') || {value: ''}).value.trim();\n\n\t\t\tstripeInstance.createPaymentMethod({\n\t\t\t\ttype: 'card',\n\t\t\t\tcard: stripeCard,\n\t\t\t\tbilling_details: { name: nameVal, email: emailVal, phone: phoneVal }\n\t\t\t})\n\t\t\t.then(function (result) {\n\t\t\t\tif (result.error) {\n\t\t\t\t\tif (cardErrEl) cardErrEl.textContent = result.error.message;\n\t\t\t\t\tif (btn) { btn.disabled = false; btn.innerHTML = paySubmitBtnHtml; }\n\t\t\t\t\treturn Promise.reject('stripe_handled');\n\t\t\t\t}\n\n\t\t\t\treturn submitBookingPayload(result.paymentMethod.id);\n\t\t\t})\n\t\t\t.catch(function (err) {\n\t\t\t\tif (err !== 'stripe_handled') {\n\t\t\t\t\tif (cardErrEl) cardErrEl.textContent = 'A network error occurred. Please check your connection and try again.';\n\t\t\t\t\tif (btn) { btn.disabled = false; btn.innerHTML = paySubmitBtnHtml; }\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ Step 6 Custom Logic: Waste Policy Declaration Defense Engine\n\t\t\/\/ =====================================================================\n\t\tfunction handleWasteCompliance() {\n\t\t\tvar selected = document.querySelector('input[name=\"ppk_waste_compliance\"]:checked');\n\t\t\tif (!selected) return;\n\n\t\t\tif (selected.value === 'agree') {\n\t\t\t\tsaveCurrentStepData();\n\t\t\t\twizard.data['ppk_waste_compliance'] = 'agree';\n\t\t\t\tgoToStep('date');\n\t\t\t} else {\n\t\t\t\tvar modal = document.getElementById('ppk-waste-disagree-modal');\n\t\t\t\tif (modal) modal.classList.add('ppk-active');\n\t\t\t}\n\t\t}\n\n\t\tfunction closeDisagreeModal() {\n\t\t\tvar wasteModal = document.getElementById('ppk-waste-disagree-modal');\n\t\t\tif (wasteModal) wasteModal.classList.remove('ppk-active');\n\t\t\thideDisagreeModal();\n\t\t}\n\n\t\tfunction terminateBooking() {\n\t\t\tif (disagreeModal && disagreeModal.classList.contains('ppk-modal-open')) {\n\t\t\t\thideDisagreeModal();\n\t\t\t\twizard.data    = {};\n\t\t\t\twizard.history = [];\n\t\t\t\ttry { sessionStorage.removeItem('papepo_wizard_state'); } catch (e) {}\n\t\t\t\twindow.location.href = ppkHomeUrl;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry { sessionStorage.removeItem('papepo_wizard_state'); } catch (e) {}\n\t\t\twindow.location.reload();\n\t\t}\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ Public API \u2014 callable from inline onclick handlers in step HTML\n\t\t\/\/ =====================================================================\n\t\twindow.ppkWizard = {\n\t\t\tgoToStep               : goToStep,\n\t\t\tgoBack                 : goBack,\n\t\t\thandleFrequencyContinue       : handleFrequencyContinue,\n\t\t\thandleGardenConditionContinue : handleGardenConditionContinue,\n\t\t\thandleWasteCompliance         : handleWasteCompliance,\n\t\t\tcloseDisagreeModal            : closeDisagreeModal,\n\t\t\tterminateBooking              : terminateBooking,\n\t\t\thandleDateContinue            : handleDateContinue,\n\t\t\thandleTermStep                : handleTermStep,\n\t\t\thandleGardenPhotoPreview      : handleGardenPhotoPreview,\n\t\t\thandlePostcodeContinue        : handlePostcodeContinue,\n\t\t\tresetPostcodeFullyBookedState : resetPostcodeFullyBookedState,\n\t\t\thandlePaymentSubmit    : handlePaymentSubmit,\n\t\t\tshowDisagreeModal      : showDisagreeModal,\n\t\t\thideDisagreeModal      : hideDisagreeModal,\n\t\t\tgetData                : function () { return Object.assign({}, wizard.data); },\n\t\t\tgetCurrentStep         : function () { return wizard.currentStep; }\n\t\t};\n\n\t\t\/\/ =====================================================================\n\t\t\/\/ Boot \u2014 restore saved session if available, otherwise start fresh\n\t\t\/\/ =====================================================================\n\t\trestoreWaitingListSessionFlag();\n\t\tif (!restoreState()) {\n\t\t\tgoToStep('welcome');\n\t\t}\n\t\tif (isSuccessWaitingListView()) {\n\t\t\tapplySuccessWaitingListUI(true);\n\t\t} else if (wizard.currentStep === 'success') {\n\t\t\trefreshSuccessScheduledDateDisplay();\n\t\t}\n\n\t\tapplyPhotosStepDeviceUI();\n\n\t}());\n\t<\/script>\n\t\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","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":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","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"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"pooadmin","author_link":"https:\/\/papepo.co.uk\/public\/author\/pooadmin\/"},"uagb_comment_info":0,"uagb_excerpt":null,"_links":{"self":[{"href":"https:\/\/papepo.co.uk\/public\/wp-json\/wp\/v2\/pages\/9","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/papepo.co.uk\/public\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/papepo.co.uk\/public\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/papepo.co.uk\/public\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/papepo.co.uk\/public\/wp-json\/wp\/v2\/comments?post=9"}],"version-history":[{"count":2,"href":"https:\/\/papepo.co.uk\/public\/wp-json\/wp\/v2\/pages\/9\/revisions"}],"predecessor-version":[{"id":17,"href":"https:\/\/papepo.co.uk\/public\/wp-json\/wp\/v2\/pages\/9\/revisions\/17"}],"wp:attachment":[{"href":"https:\/\/papepo.co.uk\/public\/wp-json\/wp\/v2\/media?parent=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}