{"isProjectEmailPrivate":{"allowedDomains":[],"allowedEmails":[],"isEnabled":false},"opts":{"customCursorSize":{"height":43,"width":43},"customHoverCursorSize":{"height":43,"width":43},"arrows":false,"menubutton":false,"sharebutton":false,"pagecounter":false,"endpage":false,"endpagetype":"join","viewertype":"vertical","slidein":false,"scalewidth":3600,"projectinfo":false,"hidden":true,"allowindex":false,"scalableviewer":true,"lqip":false,"useCustomCursor":true,"controlsontop":false,"phoneVerticalAlign":"top","branding":false,"customCursorImage":"https://i-p.rmcdn.net/56176d7d4ff02cd032e50c21/image-8988f614-e48f-4a28-9ea3-64589bfcba6c.png","customCursorIsLambda":true,"customHoverCursorImage":"https://i-p.rmcdn.net/56176d7d4ff02cd032e50c21/image-b63edde4-7c0a-4368-a965-f76f3b836a44.png","customHoverCursorIsLambda":true,"ga_id":"G-4MHCHDVPXV","gtm_id":"GTM-NPR9HT7","viewerNext":false},"textStyles":{"global":[{"name":"style-c33cfbf2-e0de-48ba-970c-b5689f4a78bd","label":"Header 1 (Px Grotesk)","tag":"p","cssProperties":{"fontFamily":"custom_157067","fontWeight":"400","fontSize":60,"lineHeight":52,"letterSpacing":-2,"fontStyle":"normal","color":"00000064","fontFeatureSettings":"\"liga\"","textDecoration":"none","textTransform":"none","textAlign":"left"},"_id":"692ed6830058bd7e4f08533b"},{"name":"style-dbcb2465-0c64-410b-b237-6034bec0fcd0","label":"Header 2 (Px Grotesk)","tag":"p","cssProperties":{"fontFamily":"custom_157067","fontWeight":"400","fontSize":40,"lineHeight":38,"textAlign":"left","fontStyle":"normal","letterSpacing":-1.8},"_id":"692ed7187310da7de03248e0"},{"name":"style-843b675e-e07c-43f5-b42d-020e6d8d97a7","label":"Header 3 (Px Grotesk)","tag":"p","cssProperties":{"fontFamily":"custom_157067","fontWeight":"400","fontSize":28,"lineHeight":28,"letterSpacing":-1,"textAlign":"left","fontStyle":"normal"},"_id":"692ed76b06f037fdbde3cd16"},{"name":"style-abc25478-ea12-4e5b-839c-847991496979","label":"Header 1 (Inter)","tag":"p","cssProperties":{"fontFamily":"Inter","fontWeight":"400","fontSize":38,"lineHeight":40,"letterSpacing":-1.3,"fontStyle":"normal","color":"00000064","fontVariationSettings":"'wght' 550","textDecoration":"none","textTransform":"none","textAlign":"left"},"_id":"692eff81422763a800cb5560"},{"name":"style-ca2afc1a-094b-46f7-af59-0c63d4f72d10","label":"Header 2 (Inter)","tag":"p","cssProperties":{"fontFamily":"Inter","fontWeight":"400","fontSize":16,"lineHeight":20,"letterSpacing":-0.2,"fontStyle":"normal","color":"00000064","fontVariationSettings":"'wght' 550","textDecoration":"none","textTransform":"none","textAlign":"left"},"_id":"692effa40058bd7e4f197d83"},{"name":"style-d0e3550b-5d9b-4f82-914d-6c3a961e62f7","label":"Body 1 (Px Grotesk)","tag":"p","cssProperties":{"fontFamily":"custom_157067","fontWeight":400,"fontSize":21,"lineHeight":24,"letterSpacing":-1,"textAlign":"left","fontStyle":"normal"},"_id":"692ed76b06f037fdbde3cd15"},{"name":"style-3f35fe9d-0b9d-47a0-bc6a-ac2d3a35afc2","label":"Body 2 (Px Grotesk)","tag":"p","cssProperties":{"fontFamily":"custom_157067","fontWeight":400,"fontSize":18,"lineHeight":20,"fontStyle":"normal","color":"00000064","letterSpacing":-0.8,"textAlign":"left"},"_id":"692ed7f9540ece9d0e2e2daf"},{"name":"style-eb08cb29-f0b6-40fe-966a-7ac0a6ca5501","label":"Body 3 (Px Grostesk)","tag":"p","cssProperties":{"fontFamily":"custom_157067","fontWeight":"400","fontSize":16,"lineHeight":18,"fontStyle":"normal","color":"00000064","textAlign":"left","fontVariationSettings":"'wght' 550","paddingRight":5},"_id":"694d44365ad629cd33fb7b80"},{"name":"style-40cf242f-bb38-450b-807a-2203d6352c60","label":"Body 1 (Inter)","tag":"p","cssProperties":{"fontFamily":"Inter","fontWeight":"400","fontSize":12,"lineHeight":14,"fontStyle":"normal","color":"00000064","textAlign":"left","fontVariationSettings":"'wght' 550"},"_id":"692f002c4949f5bbccb4b727"},{"name":"style-53feaeaf-7b69-40d0-90cb-8b3026815a3a","label":"Body 2 (Inter)","tag":"p","cssProperties":{"fontFamily":"Inter","fontWeight":"400","fontSize":10,"lineHeight":10,"letterSpacing":0,"fontStyle":"normal","color":"00000064","fontVariationSettings":"'wght' 550","textDecoration":"none","textTransform":"none","textAlign":"left"},"_id":"692f006c9cd0e3b597eef886"},{"name":"style-fbaddaa8-da70-4bc4-bffa-921a378eee8b","label":"Body 3 (Inter)","tag":"p","cssProperties":{"fontFamily":"Inter","fontWeight":"400","fontSize":14,"lineHeight":16,"fontStyle":"normal","color":"00000064","textAlign":"left","fontVariationSettings":"'wght' 550"},"_id":"694abf2a8a98610c191f5eac"},{"name":"style-6a1e617b-0869-448e-b656-a8043b8ed426","label":"Caption 1 (Px Grotesk)","tag":"p","cssProperties":{"fontFamily":"custom_162036","fontWeight":"700","fontSize":14,"lineHeight":16,"letterSpacing":-0.2,"color":"00000064","textAlign":"left","fontStyle":"normal"},"_id":"692ed82106f037fdbde41048"},{"name":"style-5edefd1e-0648-4923-b91b-a5e9d3b2d45e","label":"Caption 2 (Px Grotesk)","tag":"p","cssProperties":{"fontFamily":"custom_162036","fontWeight":700,"fontSize":12,"lineHeight":14,"letterSpacing":0,"color":"00000064","textAlign":"left","fontStyle":"normal"},"_id":"692ed82106f037fdbde41047"},{"name":"style-efbb8d22-8870-4388-8f20-4fb0ecc1e4eb","label":"Caption 1 (Inter)","tag":"p","cssProperties":{"fontFamily":"Inter","fontWeight":"400","fontSize":9,"lineHeight":12,"letterSpacing":-0.1,"fontStyle":"normal","color":"00000064","fontVariationSettings":"'wght' 450","textDecoration":"none","textTransform":"none","textAlign":"left"},"_id":"692f00ba8820760691dc3035"},{"name":"style-daf26d6b-3ab4-4cce-b392-880f4c7e0714","label":"Caption 2 (Inter)","tag":"p","cssProperties":{"fontFamily":"Inter","fontWeight":"400","fontSize":8,"lineHeight":10,"letterSpacing":0.2,"fontStyle":"normal","color":"00000064","fontVariationSettings":"'wght' 550","textDecoration":"none","textTransform":"none","textAlign":"left"},"_id":"692f0108f1a0011579e19edd"},{"name":"style-6d304872-684f-437c-b49b-aadffbeeff29","label":"Hotspot (Px Grotesk)","tag":"p","cssProperties":{"color":"00000064","fontFamily":"custom_37866","fontStyle":"normal","textAlign":"left","fontSize":8,"lineHeight":10,"letterSpacing":0,"fontWeight":"400","paddingTop":7,"paddingRight":7,"paddingBottom":7,"paddingLeft":7},"_id":"63907dfd897f8a002fc648fd"}],"project":[{"name":"style-bf377961-afb4-44ee-b7e9-d2565f26de13","label":"H1","tag":"h1","cssProperties":{"fontFamily":"custom_37866","fontWeight":"400","fontSize":40,"lineHeight":40,"fontStyle":"normal","color":"00000064","textAlign":"center","paddingTop":16,"letterSpacing":-2},"_id":"641033b85f2a9e0019410bb6"},{"name":"style-fc51465c-3222-4f7c-b4c9-9a820dd105e8","label":"H2","tag":"h2","cssProperties":{"fontFamily":"custom_37866","fontWeight":"400","fontSize":30,"lineHeight":30,"fontStyle":"normal","color":"00000064","textAlign":"center","paddingTop":14,"letterSpacing":-0.8},"_id":"641033d85067060019c85e57"},{"name":"style-6053766e-49f6-4921-9af5-05c2c7c4a1d3","label":"p","tag":"p","cssProperties":{"fontFamily":"custom_37866","fontWeight":400,"fontSize":14,"lineHeight":20,"fontStyle":"normal","color":"00000064","textAlign":"center","letterSpacing":-0.2},"_id":"6410343a677e0100306fe944"},{"name":"style-281bf1f3-8238-4534-bc2c-6d4ec49db536","label":"12 / 16","tag":"p","cssProperties":{"fontFamily":"custom_37866","fontWeight":"700","fontSize":12,"lineHeight":16,"fontStyle":"normal","color":"ff660064","textAlign":"center","letterSpacing":-0.2},"_id":"6429e8ceac2eb2001920dee0"},{"name":"style-13d57ff2-df29-4e4f-9e11-c5d3d24938c2","label":"H1 m","tag":"p","cssProperties":{"fontFamily":"custom_37866","fontWeight":"400","fontSize":30,"lineHeight":30,"fontStyle":"normal","color":"00000064","textAlign":"center","letterSpacing":-1.3,"paddingTop":14},"_id":"642d9907e4c65900214d5b77"},{"name":"style-180dbb78-d68b-48a7-8e88-3514900c53ef","label":"H2 m","tag":"p","cssProperties":{"fontFamily":"custom_37866","fontWeight":"400","fontSize":25,"lineHeight":30,"fontStyle":"normal","color":"00000064","textAlign":"left","paddingTop":16,"letterSpacing":-0.8},"_id":"642d99380da59b003d95f720"},{"name":"paragraph-fa96da6a-8342-479e-971e-f4392207bc55","label":" M","tag":"p","cssProperties":{"color":"00000064","opacity":"100","fontFamily":"custom_37866","fontSize":32,"fontWeight":"400","letterSpacing":-0.8,"lineHeight":"30","textAlign":"left","paddingTop":0,"paddingRight":0,"paddingBottom":0,"paddingLeft":0},"_id":"5f8010ab8dcd2500b0ea3691"},{"name":"style-58e31ab4-9197-441b-a6d1-02a407e30999","label":"H1","tag":"h1","cssProperties":{"fontFamily":"custom_37866","fontWeight":"400","fontSize":55,"lineHeight":50,"letterSpacing":-3,"fontStyle":"normal","color":"00000064","paddingTop":16,"textAlign":"left"},"_id":"689df1f932519ef0aab58663"},{"name":"style-ce249732-154b-48a2-a2d2-76f7cc47e208","label":"H2 32","tag":"h2","cssProperties":{"color":"ffffff64","opacity":"100","fontFamily":"custom_37866","fontSize":32,"fontWeight":"400","letterSpacing":-0.8,"lineHeight":30,"textAlign":"center","paddingTop":6},"_id":"629df90a84137c001afaecff"}]},"listStyles":{"global":[],"project":[]},"linkStyles":{"global":[],"project":[{"style":{"link":{"textColor":"00000064","type":"None","color":"A7A7A728","size":2,"padding":-11},"hover":{"textColor":"00000064","type":"None","color":"00000064","size":1,"padding":0},"current":{"textColor":"00000064","type":"Solid","color":"00000064","size":1,"padding":0}},"name":"link-style-6902be10-1f9d-4928-bd8c-24f198c9c8f5","label":"orange/black","_id":"621df9554c882c002a5066b5"},{"style":{"link":{"textColor":"00000064","type":"Solid","color":"0000001f","size":2,"padding":-12},"hover":{"textColor":"00000064","type":"None","color":"00000064","size":1,"padding":0},"current":{"textColor":"00000064","type":"Solid","color":"00000064","size":1,"padding":0}},"name":"link-style-690f3c36-844f-41db-a10e-2d388dd415a6","label":"black","_id":"642ea11ae4c6590021605bf0"},{"style":{"link":{"textColor":"FFFFFF64","type":"Solid","color":"FFFFFF64","size":1,"padding":-6},"hover":{"textColor":"FFFFFF64","type":"None","color":"00000064","size":1,"padding":0},"current":{"textColor":"00000064","type":"Solid","color":"00000064","size":1,"padding":0}},"name":"link-style-49b9af3e-679a-4708-9bdd-1e658b4abb73","label":"New Style","_id":"642ea11ae4c6590021605bf1"},{"style":{"link":{"textColor":"FFFFFF64","type":"None","color":"FFFFFF64","size":1,"padding":0},"hover":{"textColor":"FFFFFF64","type":"None","color":"FFFFFF64","size":1,"padding":0},"current":{"textColor":"00000064","type":"Solid","color":"00000064","size":1,"padding":0}},"name":"link-style-140f39cd-28d8-4289-be08-5d56fc982de5","label":"BLURB","_id":"671f8c18fd67df3f46e019b6"},{"style":{"link":{"textColor":"80808064","type":"None","color":"00000064","size":1,"padding":0},"hover":{"textColor":"00000064","type":"None","color":"00000064","size":1,"padding":0},"current":{"textColor":"00000064","type":"Solid","color":"00000064","size":1,"padding":0}},"name":"link-style-273ddd71-5bb6-44b0-831f-f5bec7d48e49","label":"New Style","_id":"688b94c3ddf1fcbd940c8e32"}]},"viewport_phone_portrait":{"opts":{"lqip":false}},"likers":[],"submitted_for_featured":0,"selected_for_featured":0,"_id":"646723ba344fea0b01d70cec","num_id":4267026,"__v":0,"allow_iframe_embed":true,"categories":[],"changed":false,"ci_body_bottom":"","ci_body_top":"<script>\n  class ReadymagAnalytics {\n    constructor(config) {\n      this.config = {\n        debug: config.debug !== undefined ? config.debug : true,\n        clickLinks: config.clickLinks || [],\n        scrollSections: config.scrollSections || [],\n        forms: config.forms || [\n          {\n            selector: config.formSelector || \".common-form > form\",\n            events: config.formEvents || {},\n          },\n        ],\n        isFormValid: config.isFormValid || this.defaultFormValidator.bind(this),\n        observerOptions: config.observerOptions || {\n          rootMargin: \"200px\",\n          threshold: [0, 0.1, 0.3],\n        },\n      };\n\n      this.initState();\n    }\n\n    /**\n     * Initialize global state\n     */\n    initState() {\n      if (!window._pageAnalytics) {\n        window._pageAnalytics = {\n          firedScrollEvents: new Set(),\n          formsState: new Map(), // formElement -> { fillingStarted, validated }\n          scrollObserver: null,\n          cleanupFunctions: [],\n          lastInitHash: null,\n        };\n      }\n\n      this.state = window._pageAnalytics;\n    }\n\n\n    log(...args) {\n      if (this.config.debug) {\n        console.log(\"[Analytics]\", ...args);\n      }\n    }\n\n\n    sendEvent(name, param = \"\") {\n      this.log(\"Event:\", name, param);\n\n      if (!window.RM?.analytics?.sendEvent) {\n        console.warn(\"[Analytics] RM.analytics.sendEvent not available\");\n        return false;\n      }\n\n      try {\n        window.RM.analytics.sendEvent(name, param);\n        return true;\n      } catch (error) {\n        console.error(\"[Analytics] Error sending event:\", error);\n        return false;\n      }\n    }\n\n\n    normalizeText(text) {\n      return (text || \"\")\n        .replace(/\\s+/g, \" \")\n        .replace(/(\\n|\\r)+/g, \"\")\n        .toLowerCase()\n        .trim();\n    }\n\n\n    defaultFormValidator(form) {\n      if (!form) return true;\n\n      const wrappers = form.querySelectorAll(\n        \"div.input-wrapper, .form-field, .field-wrapper\",\n      );\n      for (const wrapper of wrappers) {\n        const style = wrapper.getAttribute(\"style\");\n        if (style && style.includes(\"box-shadow: rgb(255, 72, 40)\")) {\n          return false;\n        }\n\n        const input = wrapper.querySelector(\"input, textarea, select\");\n        if (input && input.getAttribute(\"aria-invalid\") === \"true\") {\n          return false;\n        }\n\n        if (\n          wrapper.classList.contains(\"error\") ||\n          wrapper.classList.contains(\"invalid\")\n        ) {\n          return false;\n        }\n      }\n\n      if (form.checkValidity && !form.checkValidity()) {\n        return false;\n      }\n\n      return true;\n    }\n\n    /**\n     * Setup click event delegation\n     */\n    setupClickTracking() {\n      const handleDelegatedClick = (e) => {\n        let target = e.target;\n        let depth = 0;\n        const maxDepth = 5;\n\n        while (target && target !== document.body && depth < maxDepth) {\n          const text = this.normalizeText(target.innerText);\n\n          for (const { text: searchText, event, selector, match } of this.config\n            .clickLinks) {\n            // Check text if provided\n            if (searchText && !text.includes(this.normalizeText(searchText))) {\n              continue;\n            }\n\n            // Check selector if provided\n            if (selector) {\n              try {\n                if (!target.matches(selector)) {\n                  continue;\n                }\n              } catch (e) {\n                this.log(\"Invalid selector:\", selector, e);\n                continue;\n              }\n            }\n\n            // Check match function if provided\n            if (match) {\n              try {\n                if (!match(target)) {\n                  continue;\n                }\n              } catch (e) {\n                this.log(\"Match function error:\", e);\n                continue;\n              }\n            }\n\n            // All conditions passed - fire event\n            this.sendEvent(event);\n            return;\n          }\n          target = target.parentElement;\n          depth++;\n        }\n      };\n\n      document.body.addEventListener(\"click\", handleDelegatedClick);\n\n      this.state.cleanupFunctions.push(() => {\n        document.body.removeEventListener(\"click\", handleDelegatedClick);\n      });\n\n      this.log(\"Click delegation active\");\n    }\n\n    /**\n     * Setup form event tracking (supports multiple forms)\n     */\n    setupFormTracking() {\n      let formsFound = 0;\n\n      this.config.forms.forEach((formConfig) => {\n        const forms = document.querySelectorAll(formConfig.selector);\n\n        forms.forEach((form) => {\n          // Check match function if provided\n          if (formConfig.match) {\n            try {\n              if (!formConfig.match(form)) {\n                return; // Skip this form\n              }\n            } catch (e) {\n              this.log(\"Form match function error:\", e);\n              return;\n            }\n          }\n\n          formsFound++;\n          const events = formConfig.events;\n\n          // Initialize form state if not exists\n          if (!this.state.formsState.has(form)) {\n            this.state.formsState.set(form, {\n              fillingStarted: false,\n              validated: false,\n            });\n          }\n\n          const formState = this.state.formsState.get(form);\n\n          // Track form filling started\n          if (events.fillingStarted) {\n            const handleFormInput = () => {\n              if (!formState.fillingStarted) {\n                formState.fillingStarted = true;\n                this.sendEvent(events.fillingStarted);\n              }\n            };\n\n            form\n              .querySelectorAll(\"input, textarea, select\")\n              .forEach((input) => {\n                input.addEventListener(\"input\", handleFormInput);\n                this.state.cleanupFunctions.push(() =>\n                  input.removeEventListener(\"input\", handleFormInput),\n                );\n              });\n          }\n\n          // Track form submission attempts and validation\n          if (events.submitAttempt || events.success || events.invalid) {\n            const submitButtonSelector =\n              'div[role=\"button\"], button[type=\"submit\"], input[type=\"submit\"]';\n            const submitButton = form.querySelector(submitButtonSelector);\n\n            if (submitButton) {\n              const handleSubmitClick = () => {\n                // Check validation after a brief delay (allows Readymag to apply error styles)\n                setTimeout(() => {\n                  const isValid = this.config.isFormValid(form);\n\n                  if (isValid) {\n                    // Form is valid\n                    if (!formState.validated && events.success) {\n                      this.sendEvent(events.success);\n                      formState.validated = true;\n                    }\n                  } else {\n                    // Form has validation errors\n                    if (events.invalid) {\n                      this.sendEvent(events.invalid);\n                    }\n                  }\n                }, 100);\n              };\n\n              submitButton.addEventListener(\"click\", handleSubmitClick);\n              this.state.cleanupFunctions.push(() =>\n                submitButton.removeEventListener(\"click\", handleSubmitClick),\n              );\n\n              // Watch for submission success via class changes or form removal\n              if (events.submitAttempt) {\n                const observer = new MutationObserver(() => {\n                  // Form successfully submitted (button gets \"submitted\" class)\n                  if (submitButton.classList.contains(\"submitted\")) {\n                    this.sendEvent(events.submitAttempt);\n                    observer.disconnect();\n                  }\n\n                  // Or form is removed from DOM (redirect/hide)\n                  if (!document.contains(form)) {\n                    this.sendEvent(events.submitAttempt);\n                    observer.disconnect();\n                  }\n                });\n\n                observer.observe(submitButton, {\n                  attributes: true,\n                  childList: true,\n                  subtree: true,\n                });\n\n                this.state.cleanupFunctions.push(() => observer.disconnect());\n              }\n            }\n          }\n        });\n      });\n\n      this.log(`Tracking ${formsFound} form(s)`);\n      return formsFound > 0;\n    }\n\n    /**\n     * Setup scroll event tracking with IntersectionObserver\n     */\n    setupScrollTracking() {\n      // Create observer once if it doesn't exist\n      if (!this.state.scrollObserver && \"IntersectionObserver\" in window) {\n        this.state.scrollObserver = new IntersectionObserver((entries) => {\n          entries.forEach((entry) => {\n            if (entry.isIntersecting) {\n              const eventName = entry.target.dataset.scrollEvent;\n\n              if (!this.state.firedScrollEvents.has(eventName)) {\n                this.sendEvent(eventName);\n                this.state.firedScrollEvents.add(eventName);\n                this.state.scrollObserver.unobserve(entry.target);\n              }\n            }\n          });\n        }, this.config.observerOptions);\n\n        this.log(\"Scroll observer created\");\n      }\n\n      // Update observed elements\n      if (this.state.scrollObserver) {\n        const scrollTargets = [];\n\n        // Iterate through sections to find matching elements\n        for (const section of this.config.scrollSections) {\n          let element = null;\n\n          // Determine base selector\n          const baseSelector = section.selector\n            ? section.selector\n            : section.searchInAll\n              ? \"*\"\n              : \"h1, h2, h3, h4, h5, h6\";\n\n          // Get candidate elements\n          const candidates = Array.from(\n            document.querySelectorAll(baseSelector),\n          );\n\n          // Find first matching element\n          for (const el of candidates) {\n            // Skip script/style/head tags\n            if ([\"SCRIPT\", \"STYLE\", \"NOSCRIPT\", \"HEAD\"].includes(el.tagName)) {\n              continue;\n            }\n\n            // Check text if provided\n            if (section.text) {\n              const text = this.normalizeText(el.innerText);\n              const searchText = this.normalizeText(section.text);\n              if (!text.startsWith(searchText)) {\n                continue;\n              }\n            }\n\n            // Check match function if provided\n            if (section.match) {\n              try {\n                if (!section.match(el)) {\n                  continue;\n                }\n              } catch (e) {\n                this.log(\"Scroll match function error:\", e);\n                continue;\n              }\n            }\n\n            // All conditions passed - use this element\n            element = el;\n            break;\n          }\n\n          // Add to targets if found\n          if (element) {\n            scrollTargets.push({ element, event: section.event });\n          }\n        }\n\n        scrollTargets.forEach(({ element, event }) => {\n          // Only observe if not already fired\n          if (element && !this.state.firedScrollEvents.has(event)) {\n            element.dataset.scrollEvent = event;\n            this.state.scrollObserver.observe(element);\n          }\n        });\n\n        this.log(\"Observing\", scrollTargets.length, \"scroll sections\");\n      }\n    }\n\n    /**\n     * Clean up event listeners\n     */\n    cleanup() {\n      this.state.cleanupFunctions.forEach((fn) => fn());\n      this.state.cleanupFunctions = [];\n      this.log(\"Cleaned up listeners\");\n    }\n\n    /**\n     * Initialize tracking (called on each page)\n     */\n    initTracking() {\n      this.cleanup();\n\n      this.log(\"Initializing tracking...\");\n\n      // Setup tracking modules\n      this.setupFormTracking();\n      this.setupClickTracking();\n      this.setupScrollTracking();\n\n      this.log(\"Tracking initialized successfully\");\n      return true;\n    }\n\n    get nodesCount() {\n      const selectors = [\n        \"h1\",\n        \"h2\",\n        \"a\",\n        \"form\",\n        \"input\",\n        \"textarea\",\n        \"select\",\n        // ...(this.config.scrollSections || []).map(\n        // (section) => section.selector,\n        // ),\n        // this.config.formSelector,\n      ].filter((selector) => !!selector);\n      return document.querySelectorAll(selectors.join(\", \")).length;\n    }\n\n    /**\n     * Start the tracker with retry and observation strategies\n     * @param {Object} options - Initialization options\n     * @param {number} options.checkInterval - DOM stability check interval in ms (default: 100)\n     * @param {number} options.requiredStableChecks - Number of stable checks required (default: 5)\n     * @param {number} options.maxWaitTime - Maximum wait time before forcing init in ms (default: 3000)\n     * @param {number} options.minElementsCount - Minimum element count to consider DOM ready (default: 10)\n     */\n    start(options = {}) {\n      const checkInterval = options.checkInterval || 100;\n      const requiredStableChecks = options.requiredStableChecks || 5;\n      const maxWaitTime = options.maxWaitTime || 3000;\n      const minElementsCount = options.minElementsCount || 20;\n\n      let currentURL = window.location.href;\n      let initTimeout = null;\n\n      const tryInit = () => {\n        // Check if URL changed\n        const newURL = window.location.href;\n        if (newURL !== currentURL) {\n          this.log(\"URL changed, re-initializing\");\n          currentURL = newURL;\n          this.state.formsState.clear();\n          this.state.lastInitHash = null;\n        }\n\n        // Create a hash of current page state to prevent duplicate inits\n        const initHash = `${currentURL}-${this.nodesCount}-${document.querySelectorAll(\"div\").length}`;\n\n        // Skip if we already initialized with this exact state\n        if (this.state.lastInitHash === initHash) {\n          return;\n        }\n\n        if (this.initTracking()) {\n          this.state.lastInitHash = initHash;\n          this.log(\"✓ Initialization complete\");\n        }\n      };\n\n      // Strategy 1: Wait for DOM stability by checking element count\n      let stableCount = 0;\n      let lastElementCount = 0;\n      let checkTimer = null;\n      const startTime = Date.now();\n\n      const checkStability = () => {\n        // Count meaningful structural elements (not images, not styling)\n        const currentCount = this.nodesCount;\n\n        if (\n          currentCount === lastElementCount &&\n          currentCount >= minElementsCount\n        ) {\n          stableCount++;\n          this.log(\n            `DOM stable check ${stableCount}/${requiredStableChecks} (${currentCount} elements)`,\n          );\n\n          if (stableCount >= requiredStableChecks) {\n            this.log(\"DOM stabilized, initializing\");\n            tryInit();\n            return;\n          }\n        } else {\n          stableCount = 0;\n        }\n\n        lastElementCount = currentCount;\n\n        // Check if max wait time exceeded\n        if (Date.now() - startTime >= maxWaitTime) {\n          this.log(\"Max wait time reached, forcing initialization\");\n          tryInit();\n          return;\n        }\n\n        // Schedule next check\n        checkTimer = setTimeout(checkStability, checkInterval);\n      };\n\n      // Start stability checks\n      checkTimer = setTimeout(checkStability, checkInterval);\n\n      // Strategy 2: Scroll listener as backup for URL changes\n      let lastScrollTime = Date.now();\n      window.addEventListener(\"scroll\", () => {\n        const now = Date.now();\n        if (now - lastScrollTime > 300) {\n          lastScrollTime = now;\n          const newURL = window.location.href;\n          clearTimeout(initTimeout);\n          initTimeout = setTimeout(tryInit, 100);\n        }\n      });\n\n      this.log(\"Script loaded, waiting for content...\");\n    }\n  }\n\n  function addClickEventForAll(link, action) {\n      const elems = document.querySelectorAll(`a[href=\"${link}\"]`);\n\n      if (!elems?.length)\n          return;\n\n      [...elems].forEach( (elem) => {\n          elem.addEventListener('click', (e) => {\n              e.preventDefault();\n\n              gtag('event', action);\n\n              if (e.currentTarget.target === '_blank') {\n                  window.open(e.currentTarget.href, '_blank');\n              } else {\n                  window.location.href = e.currentTarget.href;\n              }\n          }\n          )\n      }\n      )\n  }\n\n  function addClickEventByText(link, text, action) {\n      const elems = document.querySelectorAll(`a[href=\"${link}\"]`);\n\n      if (!elems?.length)\n          return;\n\n      const currentElem = [...elems].find( (el) => el.textContent.trim() === text);\n\n      if (!currentElem)\n          return;\n\n      currentElem.addEventListener('click', (e) => {\n          e.preventDefault();\n          gtag('event', action);\n          window.location.href = e.currentTarget.href;\n      }\n      )\n  }\n\n  // Configuration\n  const config = {\n    debug: false,\n    clickLinks: [],\n\n    // Scroll section tracking\n    scrollSections: [\n      {\n        selector: '[aria-label=\"Enjoy easy workflow\"]',\n        event: \"rm_main_scroll_2_features_enjoy\",\n      },\n      {\n        selector: '[aria-label=\"Expand functionality to infinity\"]',\n        event: \"rm_main_scroll_3_features_expand\",\n      },\n      {\n        selector: '[aria-label=\"Usecases\"]',\n        event: \"rm_main_scroll_4_usecases\",\n      },\n      {\n        selector: '[aria-label=\"Try for free\"]',\n        event: \"rm_main_scroll_5_try_for_free\",\n      },\n      {\n        selector: \".widget-rm-footer\",\n        event: \"rm_main_scroll_6_footer\",\n      },\n      {\n        selector: '[aria-label=\"Experimental Use Cases\"]',\n        event: \"rm_main_scroll_experiment_2_use_cases\",\n      },\n    ],\n    observerOptions: {\n      root: null,\n      rootMargin: \"200px\",\n      threshold: [0, 0.1, 0.3],\n    },\n  };\n\n  const tracker = new ReadymagAnalytics(config);\n  tracker.start({\n    checkInterval: 100,\n    requiredStableChecks: 5,\n    maxWaitTime: 7000,\n    minElementsCount: 80,\n  });\n\n  document.addEventListener('DOMContentLoaded', () => {\n      setTimeout( () => {\n          addClickEventForAll('mailto:support@readymag.com', 'rm_main_support');\n\n          addClickEventForAll('https://readymag.com/integrations', 'rm_main_integrate');\n          addClickEventByText('https://readymag.com/no-code-website-builder-designers', 'landing pages', 'rm_main_perfect_landing');\n          addClickEventByText('https://readymag.com/presentations', 'presentations', 'rm_main_perfect_presentation');\n          addClickEventByText('https://readymag.com/editorial', 'editorials', 'rm_main_perfect_editorial');\n          addClickEventByText('https://readymag.com/portfolio', 'portfolios', 'rm_main_perfect_portfolio');\n\n          addClickEventForAll('https://readymag.com/readymag/liveonboarding/', 'rm_main_first_screen_banner');\n\n          addClickEventForAll('https://readymag.com/examples/company-website', 'rm_main_usecases_company_websites');\n          addClickEventForAll('https://readymag.com/examples/editorial', 'rm_main_usecases_editorials');\n          addClickEventForAll('https://readymag.com/examples/landing-pages', 'rm_main_usecases_landing_pages');\n          addClickEventForAll('https://readymag.com/templates/presentation', 'rm_main_usecases_presentations');\n          addClickEventForAll('https://readymag.com/examples/portfolio', 'rm_main_usecases_portfolios');\n\n          addClickEventForAll('https://readymag.com/customers/main/', 'rm_main_teams');\n\n          addClickEventByText('https://readymag.com/pricing', 'or choose your subscription plan', 'rm_main_choose_plan');\n\n          addClickEventByText('https://readymag.com/examples/e-commerce', 'e-shops', 'rm_main_perfect_eshop');\n          addClickEventByText('https://readymag.com/examples/e-commerce', 'E-commerce', 'rm_main_usecases_ecommerce');\n\n          addClickEventByText('http://readymag.com/join', 'Try Readymag', 'rm_main_try_readymag');\n          addClickEventByText('http://readymag.com/join', 'Try for free', 'rm_main_try_for_free');\n      }, 2000);\n  });\n</script>","ci_css":"[data-id=\"646720fd6d151800296bf0a4\"],\n[data-id=\"646720fd6d151800296bf0a4\"] > div,\n[data-id=\"646720fd6d151800296bf0a4\"] > div > div,\n[data-id=\"646720fd6d151800296bf0a4\"] > div > div > div,\n[data-id=\"646720fd6d151800296bf0a4\"] > div > div > div > div {\n\tpointer-events: none !important;\n}","ci_head":"","copyStatus":"finished","coverPid":"685eb43590aff8bdedfebcbb","creation_date":"2023-05-19T07:10:53.526Z","description":"Design, prototype, collaborate, publish.","desktopWidth":1024,"edit_params":{"fonts":[{"provider":"system","css_name":"Arial","name":"Arial","variations":["n4","i4","n7","i7"]},{"provider":"system","css_name":"Courier New","name":"Courier New","variations":["n4","i4","n7","i7"]},{"provider":"system","css_name":"Georgia","name":"Georgia","variations":["n4","i4","n7","i7"]},{"provider":"system","css_name":"Times New Roman","name":"Times New Roman","variations":["n4","i4","n7","i7"]},{"provider":"system","css_name":"Trebuchet MS","name":"Trebuchet MS","variations":["n4","i4","n7","i7"]},{"provider":"system","css_name":"Verdana","name":"Verdana","variations":["n4","i4","n7","i7"]},{"provider":"system","css_name":"Tahoma","name":"Tahoma","variations":["n4","n7"]},{"provider":"typekit","css_name":"xgnl","name":"Helvetica Neue LT Pro","variations":["n7"]},{"name":"Px Grotesk","css_name":"custom_37866","css_url":"/api/fonts/60366335cd125400b05c380a/css","variations":["n4","n7"],"provider":"custom","is_personal":true,"_id":"60366335cd125400b05c380a","external_css":false,"hidden":true,"users":["50dad5df6b52d70000000006"]},{"name":"Px bold","css_name":"custom_50073","css_url":"/api/fonts/630f55eaa068b10035f72d02/css","variations":["n7"],"provider":"custom","is_personal":true,"_id":"630f55eaa068b10035f72d02","external_css":false,"hidden":true,"users":["50dad5df6b52d70000000006"]}],"paragraph_styles":[{"_caption":"H1","_name":"paragraph-1","_sort":0,"color":"222222","opacity":100,"tag":"h1","font-family":"Nobel","font-size":48,"font-style":"normal","font-weight":700,"letter-spacing":0,"line-height":60,"text-align":"start","text-decoration":"none","text-transform":"none","vertical-align":"baseline","padding-top":0,"padding-right":0,"padding-bottom":0,"padding-left":0},{"_caption":"H2","_name":"paragraph-2","_sort":1,"color":"222222","opacity":100,"tag":"h2","font-family":"Georgia","font-size":24,"font-style":"normal","font-weight":400,"letter-spacing":0,"line-height":30,"text-align":"start","text-decoration":"none","text-transform":"none","vertical-align":"baseline","padding-top":0,"padding-right":0,"padding-bottom":0,"padding-left":0},{"_caption":"Text","_name":"paragraph-3","_sort":2,"color":"222222","opacity":100,"tag":"p","font-family":"Georgia","font-size":18,"font-style":"normal","font-weight":400,"letter-spacing":0,"line-height":23,"text-align":"start","text-decoration":"none","text-transform":"none","vertical-align":"baseline","padding-top":0,"padding-right":0,"padding-bottom":0,"padding-left":0},{"_caption":"Caption","_name":"paragraph-4","_sort":3,"color":"222222","opacity":50,"font-family":"Georgia","font-size":14,"font-style":"italic","font-weight":400,"letter-spacing":0,"line-height":18,"text-align":"start","text-decoration":"none","text-transform":"none","vertical-align":"baseline","padding-top":0,"padding-right":0,"padding-bottom":0,"padding-left":0}],"link_styles":[{"_caption":"Default Link Style","_name":"link-1","_sort":0,"color":"0078ff","opacity":100,"u-style":"solid","u-color":"0078ff","u-opacity":100,"u-size":1,"u-offset":0,"hover-color":"inherit","hover-opacity":"inherit","hover-u-style":"none","hover-u-color":"inherit","hover-u-opacity":"inherit","hover-u-size":"inherit","hover-u-offset":"inherit"}]},"first_published":"2023-06-13T12:20:16.474Z","folder":"5ced10b0215434185dfbf747","isArchived":false,"isPrivatePages":false,"is_mag_use_minimal_viewport":true,"is_mag_use_page_order":true,"is_private":false,"is_published":true,"last_changed":"2026-04-16T10:19:45.770Z","last_published":"2023-05-19T07:22:33.814Z","master_share_pid":null,"pages":[{"seo":{"title":"","description":"","keywords":""},"custom_shares":{"title":"Readymag","description":"The design tool for outstanding websites","image":"https://c-p.rmcdn.net/5f747d54a0bfc900b69a5fea/Image-dae06291-eaaa-4d69-babf-c997a2f27a8c.jpg","tweet":"Readymag – the design tool for outstanding websites"},"_id":"685eb43590aff8bdedfebcbb","mid":"646720fd6d151800296bf050","wids":["685eb43590aff8bdedfebcc2","685eb43590aff8bdedfebcc7","685eb879853dd02025bea1b2","685eb8792bb86bed77e60b73","685eb87a58f68c9c2a540a0a","685eb87a95b8404562152c63","685eb87a9389cfc05d7fb7dd","685eb87a853dd02025bea1bd","685eb87a0cc96bebb5bdcdd6","685eb87acb063b1f22e71ed9","68dd6348b8a687e60291fc2c","68dd6348b0c2032ffc0acc05","68dd6348fe8594e805fc2c00","68dd634901a89709d3600f3c","68dd63493065e8066119db83","68dd63499d0394484b1609f7","68dd6349d94df208317d4439","68dd6349839440d091612158","68dd6349b5e29ba0bcc31a8d","68dd6349c5b902ce7bb613b2","68dd6349239c911c8844bb12","68dd63498f732dbb644f770c","68dd634af193350112c7d6af","68dd634aa57a73ba9c52ec58","68dd634afe8594e805fc2ca9","68dd634a7b47e5a193c15610","68dd634ab0c2032ffc0acc14","68dd634ab5e29ba0bcc31ab2","68dd634ac5b902ce7bb613f4","68dd634a3d46a72b453a0f24","68dd634ad6d13cd5e9a881c5","68dd634b173bb78eca932048","68dd634b9d0394484b160a07","68dd634b2c484aa3cc7d7663","68dd634bc528756fbf5822dc","68dd634bc5b902ce7bb613f7","68dd634b2c484aa3cc7d7666","68dd634bd94df208317d4455","68dd634b173bb78eca93204c","68dd634be7ce4d19582a5a88","68dd634cc528756fbf5822e9","68dd634cdb7892235e7fa3ed","68dd634c9f7609d6a481f76c","68dd634ce33862f04f8b57b8","68dd634c8f732dbb644f7754","68dd634c9f7609d6a481f76f","68dd634ce7ce4d19582a5a8b","68dd634cb487ce72dad1398a","68dd634cbe7a03a11e4b0420","68dd634dbe7a03a11e4b0424","68dd634dd6d13cd5e9a881fb","68dd634df193350112c7d6f4","68dd634dc528756fbf5822fc","68dd634d3065e8066119dc4d","68dd634d9f7609d6a481f7ad","68dd634dfe8594e805fc2ce5","68dd634d9f7609d6a481f7b0","68dd634d3d46a72b453a0f55","68dd634ec1d17c5bd98dce98","68dd634ef193350112c7d6fb","68dd634ef193350112c7d6fe","68dd634e2c484aa3cc7d76dd","68dd634ebe7a03a11e4b043a","68dd634e5cffb61f33b18800","68dd634e839440d0916121ed","68dd634e3ebb92539ce08d32","68dd634e657f19401c97630c","68dd634fb8a687e60291fd6f","68dd634f5cffb61f33b1880b","68dd634fff828a4e9fa5399c","68dd634fcc0fcc084072e52b","68dd634f3ebb92539ce08d3d","68dd634fd6d13cd5e9a88223","68dd634fd6d13cd5e9a8822d","68dd634f01a89709d3600f61","68dd634f7b47e5a193c1574b","68dd635037cc0b58f53281b9","68dd6350c528756fbf582312","68dd6350657f19401c976386","68dd635041342d56b2e30810","68dd63509f7609d6a481f896","68dd6350be7a03a11e4b04b0","68dd6350c5b902ce7bb6145d","68dd6350c5b902ce7bb61460","68dd63513ebb92539ce08d78","68dd6351f25242fb3b5a9871","68dd63513065e8066119dc9a","68dd6351cc2c888793890f50","68dd6351be7a03a11e4b04ba","68dd6351be7a03a11e4b04bd","68dd6351b5e29ba0bcc31b9e","68dd6351be7a03a11e4b04c0","68dd63519d0394484b160aa2","68dd63523ebb92539ce08d7d","68dd6352b487ce72dad13a1f","68dd6352b5e29ba0bcc31ba1","68dd63523065e8066119dca4","68dd6352d6d13cd5e9a8826c","68dd6352c528756fbf582332","68dd6352f193350112c7d7aa","68dd63523ebb92539ce08d80","68dd63532c484aa3cc7d7b34","68dd6353b0c2032ffc0accd4","68dd6353b0c2032ffc0accd7","68dd6353c5b902ce7bb61476","68dd6353173bb78eca9320ff","68dd63535cffb61f33b188a2","68dd6353e33862f04f8b5a51","68dd6353a8541cd49fc72a9c","68dd6353cc0fcc084072e588","68dd6353839440d091612277","68dd63549f7609d6a481f905","68dd63547b47e5a193c15795","68dd63543d46a72b453a0fcd","68dd6354b8a687e60291fe31","68dd6354c5b902ce7bb61499","68dd63540812a5cace430735","68dd6354c5b902ce7bb6149c","68dd6354b487ce72dad13a65","68dd6354ff828a4e9fa53a1a","68dd6355ff828a4e9fa53a1d","68dd635536406132b5266ca6","68dd6355e33862f04f8b5aaa","68dd63559d0394484b160ae5","68dd6355db7892235e7fa4db","68dd6355cc2c888793890f7a","68dd6355fe8594e805fc2d50","68dd6356db7892235e7fa4de","68dd6356b5e29ba0bcc32103","68dd6356c1d17c5bd98dd021","68dd6356d94df208317d45f7","68dd66c88f732dbb64508e59","68dd66c9b0c2032ffc0ba304","68dd66c97b47e5a193c284a4","68dd66cd41342d56b2e46c0a","68dd66dd3065e806611af776","68dd66ddff828a4e9fa660cd","68dd66dd5cffb61f33b39095","68dd66dd41342d56b2e46cde","68dd66dd36406132b527b2ef","68dd66dd3065e806611af78c","68dd66dd41342d56b2e46ce1","68dd66dde7ce4d19582b820f","68dd66decc2c8887938a113c","68dd66dec528756fbf58f122","68dd66de41342d56b2e46ce6","68dd66deb0c2032ffc0ba7ef","68dd66de36406132b527b343","68dd66de3ebb92539ce1945c","68dd66ded94df208317e35b5","68dd66df173bb78eca9458ad","68dd66dfcc0fcc084073b296","68dd66df37cc0b58f533ab74","68dd66df239c911c8845b553","68dd66df37cc0b58f533ab7b","68dd66dfcc2c8887938a1179","68dd66e0c5b902ce7bb6eb7b","68dd66e0289eabc1af9d4a26","68dd66e0e33862f04f8c4b61","68dd66e0f193350112c91dcd","68dd66e00812a5cace444874","68dd66e05cffb61f33b390ed","68dd66e0b487ce72dad292f0","68dd66e0ff828a4e9fa66120","68dd66e12c484aa3cc7e94a0","68dd66e1f25242fb3b5b9542","68dd66e19f7609d6a483fe73","68dd66e1db7892235e80e5b4","68dd66e1e7ce4d19582b8238","68dd66e1b0c2032ffc0ba81f","68dd66e1f25242fb3b5b9545","68dd66e2b8a687e60292df7c","68dd66e236406132b527b390","68dd66e2b8a687e60292df8f","68dd66e20812a5cace444898","68dd66e2a8541cd49fc818f3","68dd66e2be7a03a11e4be4bd","68dd66e2b487ce72dad29334","68dd66e3839440d091627271","68dd66e3f25242fb3b5b9577","68dd66e39d0394484b1724f2","68dd66e37b47e5a193c2876c","68dd66e3839440d091627288","68dd66e3b8a687e60292df9d","68dd66e3c528756fbf58f150","68dd66e4173bb78eca945959","68dd66e4d94df208317e369f","68dd66e4d6d13cd5e9a93ece","68dd66e40812a5cace4448b2","68dd66e4e33862f04f8c4d45","68dd66e43065e806611afa62","68dd66e5239c911c8845b5ed","68dd66e5657f19401c981624","68dd66e5a8541cd49fc81958","68dd66e5657f19401c981634","68dd66e5cc2c8887938a11de","68dd66e5ff828a4e9fa6614f","68dd66e5239c911c8845b5f0","68dd66e6ff828a4e9fa66152","68dd66e6b8a687e60292dfd9","68dd66e6b8a687e60292dfdc","68dd66e6b487ce72dad2934f","68dd66e6a8541cd49fc81967","68dd66e6e33862f04f8c4d7e","68dd66e7239c911c8845b61c","68dd66e73065e806611afad2","68dd66e741342d56b2e46d77","68dd66e7b487ce72dad2936c","68dd66e7b5e29ba0bcc4297d","68dd66e741342d56b2e46d93","68dd66e7173bb78eca9459cf","68dd66e8db7892235e80e675","68dd66e83ebb92539ce194af","68dd66e836406132b527b422","68dd66e93d46a72b453b0a4b","68dd66e941342d56b2e46d9a","68dd66f037cc0b58f533d3bd","68dd66f0a8541cd49fc81a0a","68dd66f0f25242fb3b5b963e","68dd66f0be7a03a11e4be5ba","68dd66f1a57a73ba9c53c393","68dd66f1e7ce4d19582b8418","699045c84a115b38b5d17c51","69b83a677a9a4d60cbd6291d","69b83a7526738978993e13f2","69b83a9931fc862a4c1551dc","69b83bf431fc862a4c169c8d"],"num":1,"type":"scroll","height":3690,"hidden":false,"isPrivate":false,"sectionscroll":false,"used_autolayout":false,"viewport_tablet_portrait":{"enabled":false,"height":4101,"type":"scroll"},"viewport_phone_portrait":{"enabled":true,"height":6098,"type":"scroll","screenshot":"https://c-p.rmcdn.net/50dad5df6b52d70000000006/4267026/Screenshot-8c67b1d4-3e21-4199-9fbe-594311cfecb5.jpg"},"arrows_color":"white","parentPage":null,"num_id":26606645,"screenshot":"https://c-p.rmcdn.net/50dad5df6b52d70000000006/4267026/Screenshot-26bd90ad-e76a-4a0f-bd81-6f15d3c29d76_readyscr.jpg","children":[],"pagePath":"1","pageNestedNum":"1","htmlUrl":"https://c-p.rmcdn.net/50dad5df6b52d70000000006/4267026/HtmlSnippet-41ad2255-1b14-4abc-a3b8-9d3f6c7eddc3.html"}],"pages_count":1,"pass_last_changed":"2023-05-19T07:10:53.526Z","phoneWidth":320,"prevPubVersionId":"69c40839137478b42950894e","published":"2023-05-19T07:22:33.814Z","setForRemoval":false,"showAsNew":false,"tags":[],"title":"Readymag – the design tool for outstanding websites","typekit_url":"https://use.typekit.net/ik/xHCgzS5QNpj8XsrR6l3KepmPDCSNXnwOBsTlX1ecx2GfeRMJ1SZMI6vUw29aFQjuWDbkFRS3wRj-MfJIpei0dfGHfJRdMUMMeMS6MZMg30rfD3j.js","updated":"2026-04-16T10:19:47.025Z","uri":"4267026","used_custom_fonts":["custom_37866","custom_50073"],"used_google_fonts":[],"used_typekit_fonts":[{"id":"xgnl","variations":["n7"]}],"used_typetoday_fonts":[],"used_webtype_fonts":[],"user":{"num_id":2,"ua":"UA-110571495-2","uri":"readymag","permissions":{"can_make_mag_private_by_email":false,"can_use_analytics":true,"must_show_branding":false,"can_use_gtm":true,"white_label":true,"can_use_custom_analytics":false,"can_use_beta_testing":true,"can_use_e_commerce":true,"can_use_forms_file_upload":true,"forms_file_upload_limit":31457280,"forms_file_upload_count":10,"allow_index":true,"can_use_iframe":true}},"version":2,"widgetAddCounter":1693,"aboveAllWidgets":[],"globalWidgets":[],"hasSummary":true,"hasTextWidgetsV3":true,"hasWidgetsWithVerticalOnscrollAnimation":true,"hasYoutube":false,"usedWidgetTypes":["background","iframe","video","shape","picture","text","shots","button","slideshow","rmfooter","rmheader"],"hasAnimations":true,"usedAnimationTypes":{"scroll":true,"load":true,"hover":true,"click":true},"isPublishedAsTemplate":false,"lastSnapshotCopy":{"status":"finished","projectId":5953428,"snapshotId":"691b812758a4d00b8c0286a5"},"lastSnapshotRestore":{"jobId":18386291,"snapshotId":"691b812758a4d00b8c0286a5","status":"finished"},"cover":"https://c-p.rmcdn.net/50dad5df6b52d70000000006/4267026/Screenshot-26bd90ad-e76a-4a0f-bd81-6f15d3c29d76_readyscr.jpg","is_trusted_gtm":true,"isInternal":true}