/* growform client2 bundle.url: https://assets.growform.co/cee2d99-mhw6hzfz/form.bundle.js resolve.source: memory resolve.at: 2025-12-13T16:30:22.946Z form.source: api cache.age_ms: 862 fallback_used: false */ ;(function () { var EMBED_TYPE = "iFrame"; var FORM_ID = "65e5560eb000c7000b8d000f"; var FORM_BUNDLE_URL = "https://assets.growform.co/cee2d99-mhw6hzfz/form.bundle.js"; // injected by worker (KV/memory/fallback) var FORM_DATA = {"data":{"form":{"_id":"65e5560eb000c7000b8d000f","steps":[{"id":"2d95de6cbf33867267a18be6","name":"Type of service","sortOrder":1,"copyOf":"60c2d61a66a74bcb70ce6e49"},{"id":"48e511c9217d939a9cdb85ed","name":"ROOF TYPE","sortOrder":2},{"id":"1a1d534134f20d7679e8b7de","name":"Roof Age","sortOrder":3},{"id":"46f80853eb91f1715df1f063","name":"Stories","sortOrder":4},{"id":"af31887470ca35972948e065","name":"Project Urgency","sortOrder":5},{"id":"acd45227cac332d443c4e1db","name":"Location info","sortOrder":6},{"id":"ff4727c9498ef9c0a6c989d9","name":"Contact info","sortOrder":7}],"formName":"Roofing Quote Yelp","fields":{"Decorative Header_52363373085874":{"type":"Decorative Header","value":"Thanks for your enquiry!","width":12,"step":"complete","sortOrder":1,"fieldStyle":{"fontSize":{"value":19,"unit":"px"},"fontWeight":"Bold"},"margins":{"marginTop":20},"stepId":"complete"},"Decorative Header_797442086161467":{"type":"Decorative Header","value":"What's the building's address?","width":12,"step":2,"sortOrder":1,"fieldStyle":{"fontSize":{"value":20,"unit":"px"},"fontWeight":"Bold"},"stepId":"acd45227cac332d443c4e1db"},"Decorative Header_576559560634956":{"type":"Decorative Header","value":"Where shall we send the estimates?","width":12,"step":5,"sortOrder":1,"fieldStyle":{"fontSize":{"value":20,"unit":"px"},"fontWeight":"Bold"},"stepId":"ff4727c9498ef9c0a6c989d9"},"email_907058157108782":{"type":"Email","label":"Your email address","width":12,"margins":{"marginBottom":0},"step":5,"sortOrder":4,"stepId":"ff4727c9498ef9c0a6c989d9"},"phone_589083232390193":{"type":"Phone","label":"Your phone number","width":12,"margins":{"marginBottom":0},"step":5,"sortOrder":5,"helperText":"","stepId":"ff4727c9498ef9c0a6c989d9"},"text_373461752242760":{"type":"Text","label":"First name","width":12,"margins":{"marginBottom":0},"step":5,"sortOrder":2,"validationRules":{"required":true},"stepId":"ff4727c9498ef9c0a6c989d9"},"Decorative_Paragraph_194067845817258":{"type":"Decorative Paragraph","value":"Thanks for your request. We'll be in contact in the next hours.","width":12,"step":"complete","sortOrder":2,"margins":{"marginBottom":60},"stepId":"complete"},"address_791048036833857":{"type":"Address","label":"Building address","width":12,"stepId":"acd45227cac332d443c4e1db","sortOrder":2,"margins":{"marginBottom":0}},"decorative_header_148937855441882":{"type":"Decorative Header","value":"What type of service do you need?","width":12,"step":2,"sortOrder":1,"fieldStyle":{"fontSize":{"value":20,"unit":"px"},"fontWeight":"Bold"},"stepId":"2d95de6cbf33867267a18be6","margins":{"marginBottom":5}},"buttons_86552269379590":{"type":"Buttons","validationRules":{"required":false},"label":"Service type","width":12,"multiple":false,"buttonStyle":{"rt_buttonsPerRow":2,"rt_buttonsPerRowMobile":1,"buttonsType":"Rectangle","spacing":20,"showControls":"Yes","rt_compactLayoutOnMobile":"Yes"},"options":[{"text":"New roof installation","id":"4538c1b5d2e2a8b4633b45a6","image":null},{"text":"Repair or partial replacement","id":"8520042178329cb66678244d","image":null},{"text":"Full roof replacement","id":"7a1aa416126e2e2cbb386e98","image":null},{"text":"Inspection or maintenance","image":null,"id":"c57e82084740f9f039565dc7"}],"stepId":"2d95de6cbf33867267a18be6","sortOrder":2,"hideLabel":true,"imageStyles":{"rt_width":27}},"decorative_header_415531313791333":{"type":"Decorative Header","value":"Choose the status of your project?","width":12,"stepId":"af31887470ca35972948e065","sortOrder":1,"fieldStyle":{"fontSize":{"value":20,"unit":"px"}}},"buttons_591124066778160":{"type":"Buttons","validationRules":{"required":false},"label":"Project Urgency","width":12,"multiple":false,"buttonStyle":{"rt_buttonsPerRow":2,"rt_buttonsPerRowMobile":1,"buttonsType":"Rectangle","spacing":20,"showControls":"Yes","rt_compactLayoutOnMobile":"Yes"},"options":[{"text":"Ready to hire","id":"7263d936fd0671c25b0ae692"},{"text":"Within 2 weeks","id":"b54e132616a56cb7674a16bd"},{"text":"Timing is flexible","id":"fbf56ad53277ebfa06d3f6ca"},{"text":"Planning and budgeting","id":"9fd4019f73f91dd883bfe490"}],"stepId":"af31887470ca35972948e065","sortOrder":2,"hideLabel":true},"hidden_763736838937031":{"type":"Hidden","hiddenFieldName":"utm_source","width":12,"stepId":"ff4727c9498ef9c0a6c989d9","sortOrder":6},"decorative_header_326719907452094":{"type":"Decorative Header","value":"What type of roof do you currently have?","width":12,"stepId":"48e511c9217d939a9cdb85ed","sortOrder":1,"fieldStyle":{"fontSize":{"value":20,"unit":"px"}}},"buttons_950956340921113":{"type":"Buttons","validationRules":{"required":false},"label":"type of roof","width":12,"multiple":false,"buttonStyle":{"rt_buttonsPerRow":2,"rt_buttonsPerRowMobile":1,"buttonsType":"Rectangle","spacing":20,"showControls":"Yes","rt_compactLayoutOnMobile":"Yes"},"imageStyles":{},"options":[{"text":"Asphalt shingles","id":"0514967db3db76a432076a13"},{"text":"Tile","id":"a02c96d17b02806c59018b4a"},{"text":"Wood shake","id":"88786f9eee4ab4641ab15e5d"},{"text":"Flat roof","id":"4f40a2f6396e8a70a3d9a9a0"},{"text":"Metal","image":null,"id":"ab0ea56c73a3cfbc179c0d36"}],"stepId":"48e511c9217d939a9cdb85ed","sortOrder":2,"hideLabel":true},"decorative_header_357337951905947":{"type":"Decorative Header","value":"How old is your roof?","width":12,"stepId":"1a1d534134f20d7679e8b7de","sortOrder":1,"fieldStyle":{"fontSize":{"value":20,"unit":"px"}}},"buttons_283558720429355":{"type":"Buttons","validationRules":{"required":false},"label":"Roof Age","width":12,"multiple":false,"buttonStyle":{"rt_buttonsPerRow":2,"rt_buttonsPerRowMobile":1,"buttonsType":"Rectangle","spacing":20,"showControls":"Yes","rt_compactLayoutOnMobile":"Yes"},"imageStyles":{},"options":[{"text":"0-10 years old","id":"0514967db3db76a432076a13"},{"text":"11-20 years old","id":"a02c96d17b02806c59018b4a"},{"text":"21-30 years old","id":"88786f9eee4ab4641ab15e5d"},{"text":"More than 30 years old","id":"4f40a2f6396e8a70a3d9a9a0"}],"stepId":"1a1d534134f20d7679e8b7de","sortOrder":2,"hideLabel":true},"decorative_header_475293735105803":{"type":"Decorative Header","value":"How many stories tall is your building?","width":12,"stepId":"46f80853eb91f1715df1f063","sortOrder":1,"fieldStyle":{"fontSize":{"value":20,"unit":"px"}}},"buttons_317456470812584":{"type":"Buttons","validationRules":{"required":false},"label":"Stories","width":12,"multiple":false,"buttonStyle":{"rt_buttonsPerRow":2,"rt_buttonsPerRowMobile":1,"buttonsType":"Rectangle","spacing":20,"showControls":"Yes","rt_compactLayoutOnMobile":"Yes"},"imageStyles":{},"options":[{"text":"1 story","id":"0514967db3db76a432076a13"},{"text":"2 story","id":"a02c96d17b02806c59018b4a"},{"text":"3 story","id":"88786f9eee4ab4641ab15e5d"},{"text":"4+ stories","id":"4f40a2f6396e8a70a3d9a9a0"}],"stepId":"46f80853eb91f1715df1f063","sortOrder":2,"hideLabel":true},"text_406636072501173":{"type":"Text","label":"Last name","width":12,"stepId":"ff4727c9498ef9c0a6c989d9","sortOrder":3,"hideLabel":false}},"options":{"numberOfSteps":5,"dateFormat":"DD/MM/YYYY","progressBar":{"enable":true},"continueButton":{"continueText":"Next","submitText":"Get quote","backText":"Back"},"customStyles":{"width":{"unit":"px","value":609},"parentContainerMinHeight":{"value":0,"unit":"px"},"parentBackgroundImage":{"imageInitialHeight":1362,"imageInitialWidth":2066,"imageHeight":1362,"imageWidth":2066,"imageUrl":"https://res.cloudinary.com/dqnjggegp/image/upload/v1597337140/uploads/qmsfk98ank3wfp1ehvyg.jpg"},"headerMarginTop":51,"parentBackgroundColor":"#ffffff","innerFormBackgroundColor":"#ffffff","innerFormBackgroundTransparency":"","primaryColor":"#322b6d","bodyTextColor":"#343434","parentContainerBackgroundType":"color","innerFormBackgroundType":"none","buttonBorderColor":"#ff7500","buttonColorSelected":"#ffa659","buttonBorderColorSelected":"#ff7500","footerMarginBottom":100,"errorColor":"#ff4e4e","buttonColor":"#ff7500","buttonTextColor":"#ffffff","inputLabelColor":"#a3a3a3","inputTextColor":"#000000","defaultFont":"Merriweather","sq_buttonFont":"Inherit","sq_buttonFontSize":18,"showShadows":"Yes","sq_buttonTextColor":"#000000","sq_buttonColor":"#FFFFFF","sq_buttonColorSelected":"#FFFFFF","sq_buttonBorderColor":"#DADADA","sq_buttonBorderColorSelected":"primary","sq_buttonBannerColor":"#FFFFFF","rt_buttonFont":"Inherit","rt_buttonFontSize":18,"rt_buttonColor":"#FFFFFF","rt_buttonColorSelected":"#FFFFFF","rt_buttonTextColor":"#000000","rt_buttonBorderColor":"#DADADA","rt_buttonBorderColorSelected":"primary"},"localization":{"dateFormat":"MM/DD/YYYY"},"exportTransparentBackground":false,"customScript":"","customRedirectUrls":[{"url":"https://grandmarkservicecompany.com/thank-you/"}],"actionOnSubmit":"redirect","analyticsSettings":{"facebook":{"pixelId":"525708597183754"},"unbounce":{"enabled":true},"google_analytics":{"trackingId":"G-BKGHVGVSDZ"}}},"ownedByUser":"626164f19f6e2a00226626af","personalisation":{"form_related_to":"Roofing"},"created":"2024-03-04T05:03:10.879Z","__v":0,"lastEdited":"2025-03-08T15:56:35.817Z","screenshotUrl":"https://res.cloudinary.com/dqnjggegp/image/upload/v1742555911/growform-production/form-screenshots/65e5560eb000c7000b8d000f.png","leadsCount":86,"isActive":false},"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' + '