/* growform client2 bundle.url: https://assets.growform.co/3a7757e-mhat2xln/form.bundle.js resolve.source: kv resolve.at: 2025-10-29T07:39:24.892Z form.source: api cache.age_ms: 0 kv.value_present: true fallback_used: false */ ;(function () { var EMBED_TYPE = "iFrame"; var FORM_ID = "62c033c4f75d9e0022871744"; var FORM_BUNDLE_URL = "https://assets.growform.co/3a7757e-mhat2xln/form.bundle.js"; // injected by worker (KV/memory/fallback) var FORM_DATA = {"data":{"form":{"_id":"62c033c4f75d9e0022871744","formName":"Roof Cleaning","fields":{"decorative text_52363373085874":{"type":"Decorative Header","value":"Your Estimate Is On The Way!","width":12,"step":"complete","sortOrder":1,"fieldStyle":{"fontSize":{"value":"22","unit":"px"},"fontWeight":"Bold","color":"#ffffff"},"margins":{"marginTop":20},"stepId":"complete"},"decorative text_797442086161467":{"type":"Decorative Header","value":"Is this a flat roof?","width":12,"step":4,"sortOrder":1,"fieldStyle":{"fontSize":{"value":"21","unit":"px"},"fontWeight":"Bold","textAlign":"Left"},"stepId":"961cde5d2d85078abe5dd75a"},"decorative text_576559560634956":{"type":"Decorative Header","value":"Location - Post Code","width":12,"step":5,"sortOrder":1,"fieldStyle":{"fontSize":{"value":"22","unit":"px"},"fontWeight":"Bold","textAlign":"Left"},"stepId":"b0f0ed4726f67cf1da8361f1"},"decorative text_194067845817258":{"type":"Decorative Paragraph","value":"A member of our team will be in touch with you within 48 working hours. ","width":12,"step":"complete","sortOrder":2,"margins":{"marginBottom":60},"stepId":"complete"},"decorative text_56213455664147":{"type":"Decorative Header","value":"Roof Material...","width":12,"step":3,"sortOrder":1,"fieldStyle":{"fontSize":{"value":"21","unit":"px"},"fontWeight":"Bold","textAlign":"Left"},"stepId":"6ab1376392b2d53019dc1042"},"decorative header_838442739020120":{"type":"Decorative Header","value":"Your property type...","width":12,"sortOrder":1,"step":1,"fieldStyle":{"fontFamily":"Mulish","textAlign":"Left"},"stepId":"4549006b3238878b38d7d4e7"},"single select_148912270813498":{"type":"Single Select","width":12,"label":"Property Type...","options":[{"text":"Detached","id":"2e7b1e3edf6a21467a1356b3"},{"text":"Semi-Detached","id":"284aedf7d3a81aea3369fefe"},{"text":"Terraced","id":"fee8cbc05cef510103d8c2d1"},{"text":"End of Terrace","image":null,"id":"418646d5c3ed1d8e68925355"}],"helperText":null,"step":1,"sortOrder":2,"validationRules":{"required":true},"stepId":"4549006b3238878b38d7d4e7"},"single select_990018989483279":{"type":"Single Select","width":12,"label":"Roof Material...","options":[{"text":"Tile","id":"484ea18463a6ddbc60c53398"},{"text":"Slate","id":"52ffa37c77d002f428a152ef"},{"text":"Felt / Rubber","id":"b7c5394ad75949127b4c6a3d"}],"helperText":null,"step":3,"sortOrder":2,"validationRules":{"required":true},"stepId":"6ab1376392b2d53019dc1042"},"single select_797875422125155":{"type":"Single Select","width":12,"label":"Flat Roof...","options":[{"text":"Yes","id":"60ce99563a13a7c7b27f5372"},{"text":"No","id":"8c25678d618a40c6c1351032"},{"text":"Mixed","id":"d2dd83c789aae1280b9d26a8"}],"helperText":null,"step":4,"sortOrder":2,"validationRules":{"required":true},"stepId":"961cde5d2d85078abe5dd75a"},"decorative header_323722194895032":{"type":"Decorative Header","value":"Email for Estimate...","width":12,"sortOrder":1,"step":6,"fieldStyle":{"textAlign":"Left"},"stepId":"a23d56e59301cb3a45df9dd3"},"email_836096070705177":{"type":"Email","label":"What is your email address?","width":12,"step":6,"sortOrder":2,"stepId":"a23d56e59301cb3a45df9dd3"},"decorative header_743720678432519":{"type":"Decorative Header","value":"Contact Number...","width":12,"sortOrder":1,"step":7,"fieldStyle":{"textAlign":"Left"},"stepId":"183afe4ac7f2df33ae95ed6e"},"phone_192224535258866":{"type":"Phone","label":"What is your phone number?","width":12,"step":7,"sortOrder":2,"defaultCountryFormat":"gb","validationRules":{"required":true,"regex":"phone"},"stepId":"183afe4ac7f2df33ae95ed6e"},"decorative header_973487602651944":{"type":"Decorative Header","value":"Property Size...","width":12,"sortOrder":1,"step":2,"fieldStyle":{"textAlign":"Left"},"stepId":"8ed682951ad3c632fd3e7b6f"},"single select_163802748425046":{"type":"Single Select","width":12,"label":"Number of bedrooms...","options":[{"text":"1-2","id":"52ef2aac961d5aa62195a8e4"},{"text":"3-4","id":"87c521b2ac2dfccaabaf8453"},{"text":"4-5","id":"9d110e42336dcdcc7683c769"},{"text":"5+","image":null,"id":"c2fd33e53f9fb31212023528"}],"helperText":null,"step":2,"sortOrder":2,"validationRules":{"required":true},"stepId":"8ed682951ad3c632fd3e7b6f"},"decorative_header_364257670164416":{"type":"Decorative Header","value":"Location - First Line Address","width":12,"sortOrder":1,"stepId":"41cc2bd8bc0231ae2c224719","fieldStyle":{"textAlign":"Left"}},"text_242818241101142":{"type":"Text","label":"What is your first line of address","width":12,"stepId":"41cc2bd8bc0231ae2c224719","sortOrder":2,"validationRules":{"required":true}},"decorative_header_26198855295497":{"type":"Decorative Header","value":"Please tell us your name...","width":12,"sortOrder":1,"stepId":"573e0f1cbc0240738aae00e1","fieldStyle":{"textAlign":"Left"}},"text_56781766823915":{"type":"Text","label":"Name","width":12,"sortOrder":2,"stepId":"573e0f1cbc0240738aae00e1","validationRules":{"required":true}},"zipcode_417961040223004":{"type":"Zipcode","label":"What is your post code?","zipcodeFieldFormat":"postcode_uk","width":12,"stepId":"b0f0ed4726f67cf1da8361f1","sortOrder":2}},"options":{"numberOfSteps":7,"dateFormat":"DD/MM/YYYY","progressBar":{"enable":true},"continueButton":{"continueText":"Next","submitText":"REQUEST AN ESTIMATE","backText":"Back"},"customStyles":{"width":{"unit":"px","value":650},"parentContainerMinHeight":{"value":0,"unit":"px"},"parentBackgroundImage":{"imageInitialHeight":1116,"imageInitialWidth":1902,"imageHeight":1116,"imageWidth":1902,"imageUrl":"https://res.cloudinary.com/dqnjggegp/image/upload/v1601640522/uploads/qrwuvldlke6g8njr2x6j.jpg"},"headerMarginTop":70,"parentBackgroundColor":"#171d21","innerFormBackgroundColor":"#ffffff","innerFormBackgroundTransparency":"","primaryColor":"#148007","bodyTextColor":"#ffffff","parentContainerBackgroundType":"none","innerFormBackgroundType":"none","buttonBorderColor":"#ffffff","buttonColorSelected":"#dce3ec","buttonBorderColorSelected":"#2696e6","footerMarginBottom":70,"errorColor":"#ff4e4e","buttonColor":"#ffffff","inputLabelColor":"#a3a3a3","inputTextColor":"#000000","buttonTextColor":"#000000"},"localization":{"dateFormat":"DD/MM/YYYY"},"exportTransparentBackground":false,"customScript":"","customCss":".parentContainer {\npadding-top: 10px;\n}\n\n.formBackground {\npadding-top: 10px;\n}","actionOnSubmit":"fireJavaScript"},"ownedByUser":"62c033aff75d9e0022871728","personalisation":{"form_related_to":"Roofers / roofing"},"created":"2022-07-02T12:02:12.468Z","__v":1,"lastEdited":"2023-10-16T18:20:23.865Z","steps":[{"id":"4549006b3238878b38d7d4e7","name":"Unnamed step 1","sortOrder":1},{"id":"8ed682951ad3c632fd3e7b6f","name":"Unnamed step 2","sortOrder":2},{"id":"6ab1376392b2d53019dc1042","name":"Unnamed step 3","sortOrder":3},{"id":"961cde5d2d85078abe5dd75a","name":"Unnamed step 4","sortOrder":4},{"id":"41cc2bd8bc0231ae2c224719","name":"First Line Address","sortOrder":5},{"id":"b0f0ed4726f67cf1da8361f1","name":"Unnamed step 5","sortOrder":6},{"id":"a23d56e59301cb3a45df9dd3","name":"Unnamed step 6","sortOrder":7},{"id":"573e0f1cbc0240738aae00e1","name":"Name","sortOrder":8},{"id":"183afe4ac7f2df33ae95ed6e","name":"Unnamed step 7","sortOrder":9}],"leadsCount":95,"screenshotUrl":"https://res.cloudinary.com/dqnjggegp/image/upload/v1742564993/growform-production/form-screenshots/62c033c4f75d9e0022871744.png","isActive":true},"accountIsActive":true,"accountIsFreeTrial":false}}; // ---- Utils ---- function safeJSONStringify(obj) { return JSON.stringify(obj) .replace(/<\/(script|style)/gi, '<\\/$1') .replace(//g, '--\\>') .replace(/\u2028/g, '\\u2028') .replace(/\u2029/g, '\\u2029'); } function preloadScript(href) { try { if (!href) return; if (document.querySelector('link[rel="preload"][href="' + href + '"]')) return; var l = document.createElement("link"); l.rel = "preload"; l.as = "script"; l.href = href; l.crossOrigin = ""; // allow cache reuse in iframe document.head.appendChild(l); } catch (_) {} } function parseQuery() { var out = {}; try { if (!window.location.search) return out; var usp = new URLSearchParams(window.location.search); usp.forEach(function (v, k) { out[k] = v; }); } catch (_) {} return out; } function buildIframeHTML(opts) { var html = '\n' + '\n' + '
\n' + ' \n' + ' \n' + ' \n' + '\n' + '\n' + ' \n' + ' \n' + '