{"webLayers":[{"_id":"66866b6da0d3715c193a54ef","date_filter":{"enabled":true,"from_date":1720108800,"to_date":1720133999},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"once_per_visit","uses_personalization":true,"data":"","variables_target":null,"page_vars":[]},{"_id":"68c1630bb044d3225eb44a2f","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"url":"https://www.weirdfish.co.uk/refer-a-friend-br","type":"contains"},{"url":"https://www.weirdfish.co.uk/account/loveweirdfish","type":"exact"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"always","uses_personalization":true,"data":"","variables_target":null,"page_vars":[]},{"_id":"695294ea2eebf4ca1486725d","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":[{"url":"Refer-a-Friend","type":"contains"},{"url":"refer-a-friend","type":"contains"},{"url":"/sign-up-to-email","type":"contains"},{"url":"/basket/","type":"contains"},{"url":"https://cdn.exponea.com","type":"contains"}]},"device_target":{"type":"any"},"frequency":"only_once","uses_personalization":true,"data":"","variables_target":null,"page_vars":[]}],"experiments":[{"_id":"65e19fe8691f50ac30cbc63b","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"url":"https://www.weirdfish.co.uk/basket","type":"exact"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"67851e3528aeee9486906f76","date_filter":{"enabled":true,"from_date":1736985600,"to_date":1737352800},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":[{"url":"new-arrivals","type":"contains"}]},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6787d434e30c669cae85d35a","date_filter":{"enabled":true,"from_date":1736985600,"to_date":1737352800},"trigger":{"include_pages":[{"url":"/sale/","type":"contains"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"67b5b09a9d001dcc163d269e","date_filter":{"enabled":true,"from_date":1739836800,"to_date":1740095999},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"67b6f296e4164ed8c6b52612","date_filter":{"enabled":true,"from_date":1739750400,"to_date":1740095999},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6863fd4aeec7228c259185a0","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"url":"https://www.weirdfish.co.uk/account/loveweirdfish","type":"exact"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"68d52b67608e0550a061c199","date_filter":{"enabled":true,"from_date":1759248000,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"68e518c084c20092a17268f8","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"url":"basket","type":"contains"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6915a66924b4e0a8ce07ea76","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"url":"/i/","type":"contains"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6936e22ec3124c294019ed75","date_filter":{"enabled":true,"from_date":1765238460,"to_date":1765324799},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6945241cb4e270774a5c88c4","date_filter":{"enabled":true,"from_date":1766016000,"to_date":1766368800},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"694912553a1c498b19165968","date_filter":{"enabled":true,"from_date":1766361600,"to_date":1766793599},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"698de6485f831d99fde436ad","date_filter":{"enabled":false,"from_date":1759248000,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"69a564dbf9b02761527c4dcc","date_filter":{"enabled":true,"from_date":1772409600,"to_date":1773014399},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"69a56d4610741aa6691a86e8","date_filter":{"enabled":true,"from_date":1772409600,"to_date":1773014399},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"69ae979eddfcb12c03128ade","date_filter":{"enabled":true,"from_date":1773014400,"to_date":1773619199},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":[{"url":"https://www.weirdfish.co.uk/","type":"exact"}]},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"69ae982627db91631c77d38f","date_filter":{"enabled":true,"from_date":1773014400,"to_date":1773619199},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":[{"url":"https://www.weirdfish.co.uk/","type":"exact"}]},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"69b7d5d4a6a112d0eb3e005d","date_filter":{"enabled":true,"from_date":1773619200,"to_date":1774223999},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":[{"url":"https://www.weirdfish.co.uk/p/new-arrivals","type":"contains"}]},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"69b962fc4fe49b722a6cdb3e","date_filter":{"enabled":true,"from_date":1774224000,"to_date":1774825199},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"69dcabc049367304f513a70b","date_filter":{"enabled":true,"from_date":1774825200,"to_date":1777849199},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]}],"constantManagedTags":[{"uses_overlay":false,"type":"js","parametrized_definition":"// Returns email if it is valid\nexponea.validateEmail = function(email) {\n    email = email.trim().toLowerCase();\n    if (/^\\S+@\\S+\\.\\S+$/.test(email)) {\n        return email;\n    } else {\n        return false;\n    }\n};\n\n// Returns price (number) from string if it is valid\nexponea.parsePrice = function(total_price) {\n\ttotal_price = total_price.toString();\n    if (total_price.match(/.*[,].*[,].*/g)) { // two or more commas\n        return parseFloat(total_price.replace(/([^.0-9])/g, ''));\n    } else if (total_price.match(/.*[,].*[.].*/g)) { // a comma and a dot\n        return parseFloat(total_price.replace(',', '').replace(/([^.0-9])/g, ''));\n    } else { // one comma or less\n        return parseFloat(total_price.replace(',', '.').replace(/([^.0-9])/g, ''));\n    }\n};\n\n// Get parameter value from url by name\nexponea.getParameterByName = function(name, url) {\n    if (!url) {\n      url = window.location.href;\n    }\n    name = name.replace(/[\\[\\]]/g, \"\\\\$\u0026\");\n    var regex = new RegExp(\"[?\u0026]\" + name + \"(=([^\u0026#]*)|\u0026|#|$)\"),\n        results = regex.exec(url);\n    if (!results) return null;\n    if (!results[2]) return '';\n    return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\n};\n\n// Google Tag Manager dataLayer toolkit\nexponea.gtm = {\n\tgetFirstValue: function(key) {\n\t    for (var i = 0; i \u003c dataLayer.length; i++) {\n\t        if (dataLayer[i].hasOwnProperty(key)) {\n\t            return dataLayer[i][key];\n\t        }\n\t    }\n\t    return null;\n\t},\n\tgetValue: function(key) {\n\t    for (var i = dataLayer.length - 1; i \u003e= 0; i--) {\n\t        if (dataLayer[i].hasOwnProperty(key)) {\n\t            return dataLayer[i][key];\n\t        }\n\t    }\n\t    return null;\n\t},\n\tgetByKeyValue: function(key, value) {\n\t    for (var i = dataLayer.length - 1; i \u003e= 0; i--) {\n\t        if (dataLayer[i].hasOwnProperty(key)) {\n\t            if (dataLayer[i][key] === value) {\n\t                return dataLayer[i];\n\t            }\n\t        }\n\t    }\n\t    return null;\n\t}\n};\n\n// Storage toolkit\nexponea.storage = {\n\t// Store to Session Storage\n    save: function(key, obj, storage) {\n    \tif(!storage){\n    \t\tstorage = 'sessionStorage';\n    \t}\n        if (this.check(storage)) {\n        \twindow[storage][key] = JSON.stringify(obj);\n        }\n    },\n    // Load from Session Storage\n    load: function(key, storage) {\n    \tif(!storage){\n    \t\tstorage = 'sessionStorage';\n    \t}\n        if (this.check(storage)) {\n            try {\n        \t\treturn JSON.parse(window[storage][key]);\n            } catch (e) {\n                return {};\n            }\n        } else {\n            return {};\n        }\n    },\n    remove: function(key, storage) {\n    \tif(!storage){\n    \t\tstorage = 'sessionStorage';\n    \t}\n        try {\n\t\t\twindow[storage].removeItem(key);\n        } catch (e) {\n            return {};\n        }\n    },\n    check: function(type) {\n    \tif(!type){\n    \t\ttype = 'sessionStorage';\n    \t}\n        try {\n            var storage = window[type],\n                x = '__storage_test__';\n            storage.setItem(x, x);\n            storage.removeItem(x);\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n};\n\n// Cookie toolkit\nexponea.cookie = {\n\t// Set cookie, optional expiraton argument\n\tset: function(cname, cvalue, exdays) {\n\t\tif(exdays){\n\t\t    var d = new Date();\n\t\t    d.setTime(d.getTime() + (exdays*24*60*60*1000));\n\t\t    var expires = \"expires=\"+ d.toUTCString();\n\t\t    document.cookie = cname + \"=\" + cvalue + \";\" + expires + \";path=/\";\n\t\t}else{\n\t\t    document.cookie = cname + \"=\" + cvalue + \";path=/\";\n\t\t}\n\t},\n\t// Get cookie by name\n\tget: function(cname) {\n\t    var name = cname + \"=\";\n\t    var decodedCookie = decodeURIComponent(document.cookie);\n\t    var ca = decodedCookie.split(';');\n\t    for(var i = 0; i \u003cca.length; i++) {\n\t        var c = ca[i];\n\t        while (c.charAt(0) == ' ') {\n\t            c = c.substring(1);\n\t        }\n\t        if (c.indexOf(name) == 0) {\n\t            return c.substring(name.length, c.length);\n\t        }\n\t    }\n\t    return \"\";\n\t}\n};\n\n// Convert DDMMYYY HHMM to Unix timestamp\nexponea.date2unix = function(dateString, deliminator_date, timeString, deliminator_time){\n\tif(!timeString) timeString = \"12:00\";\n\tif(!deliminator_date) deliminator_date = '/';\n\tif(!deliminator_time) deliminator_time = ':';\n\tvar dateParts = dateString.split(deliminator_date);\n\tvar timeParts = timeString.split(deliminator_time);\n\tif(dateParts.length \u003e 1){\n\t\treturn ((new Date(dateParts[2], dateParts[1] - 1, dateParts[0], timeParts[0], timeParts[1]).getTime()) / 1000).toFixed(0);\n\t}\n\treturn null;\n};","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"5cd9657487094100150f7c2c"},{"uses_overlay":false,"type":"js","parametrized_definition":"// Returns email if it is valid\nexponea.validateEmail = function(email) {\n    email = email.trim().toLowerCase();\n    if (/^\\S+@\\S+\\.\\S+$/.test(email)) {\n        return email;\n    } else {\n        return false;\n    }\n};\n\n// Returns price (number) from string if it is valid\nexponea.parsePrice = function(total_price) {\n\ttotal_price = total_price.toString();\n    if (total_price.match(/.*[,].*[,].*/g)) { // two or more commas\n        return parseFloat(total_price.replace(/([^.0-9])/g, ''));\n    } else if (total_price.match(/.*[,].*[.].*/g)) { // a comma and a dot\n        return parseFloat(total_price.replace(',', '').replace(/([^.0-9])/g, ''));\n    } else { // one comma or less\n        return parseFloat(total_price.replace(',', '.').replace(/([^.0-9])/g, ''));\n    }\n};\n\n// Get parameter value from url by name\nexponea.getParameterByName = function(name, url) {\n    if (!url) {\n      url = window.location.href;\n    }\n    name = name.replace(/[\\[\\]]/g, \"\\\\$\u0026\");\n    var regex = new RegExp(\"[?\u0026]\" + name + \"(=([^\u0026#]*)|\u0026|#|$)\"),\n        results = regex.exec(url);\n    if (!results) return null;\n    if (!results[2]) return '';\n    return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\n};\n\n// Google Tag Manager dataLayer toolkit\nexponea.gtm = {\n\tgetFirstValue: function(key) {\n\t    for (var i = 0; i \u003c dataLayer.length; i++) {\n\t        if (dataLayer[i].hasOwnProperty(key)) {\n\t            return dataLayer[i][key];\n\t        }\n\t    }\n\t    return null;\n\t},\n\tgetValue: function(key) {\n\t    for (var i = dataLayer.length - 1; i \u003e= 0; i--) {\n\t        if (dataLayer[i].hasOwnProperty(key)) {\n\t            return dataLayer[i][key];\n\t        }\n\t    }\n\t    return null;\n\t},\n\tgetByKeyValue: function(key, value) {\n\t    for (var i = dataLayer.length - 1; i \u003e= 0; i--) {\n\t        if (dataLayer[i].hasOwnProperty(key)) {\n\t            if (dataLayer[i][key] === value) {\n\t                return dataLayer[i];\n\t            }\n\t        }\n\t    }\n\t    return null;\n\t},\n\tgetAllByKeyValue: function(key, value) {\n\t\tvar objects = [];\n\t    for (var i = dataLayer.length - 1; i \u003e= 0; i--) {\n\t        if (dataLayer[i].hasOwnProperty(key)) {\n\t            if (dataLayer[i][key] === value) {\n\t                objects.push(dataLayer[i]);\n\t            }\n\t        }\n\t    }\n\t    return objects;\n\t}\n};\n\n// Storage toolkit\nexponea.storage = {\n\t// Store to Session Storage\n    save: function(key, obj, storage) {\n    \tif(!storage){\n    \t\tstorage = 'sessionStorage';\n    \t}\n        if (this.check(storage)) {\n        \twindow[storage][key] = JSON.stringify(obj);\n        }\n    },\n    // Load from Session Storage\n    load: function(key, storage) {\n    \tif(!storage){\n    \t\tstorage = 'sessionStorage';\n    \t}\n        if (this.check(storage)) {\n            try {\n        \t\treturn JSON.parse(window[storage][key]);\n            } catch (e) {\n                return {};\n            }\n        } else {\n            return {};\n        }\n    },\n    remove: function(key, storage) {\n    \tif(!storage){\n    \t\tstorage = 'sessionStorage';\n    \t}\n        try {\n\t\t\twindow[storage].removeItem(key);\n        } catch (e) {\n            return {};\n        }\n    },\n    check: function(type) {\n    \tif(!type){\n    \t\ttype = 'sessionStorage';\n    \t}\n        try {\n            var storage = window[type],\n                x = '__storage_test__';\n            storage.setItem(x, x);\n            storage.removeItem(x);\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n};\n\n// Cookie toolkit\nexponea.cookie = {\n\t// Set cookie, optional expiraton argument\n\tset: function(cname, cvalue, exdays) {\n\t\tif(exdays){\n\t\t    var d = new Date();\n\t\t    d.setTime(d.getTime() + (exdays*24*60*60*1000));\n\t\t    var expires = \"expires=\"+ d.toUTCString();\n\t\t    document.cookie = cname + \"=\" + cvalue + \";\" + expires + \";path=/\";\n\t\t}else{\n\t\t    document.cookie = cname + \"=\" + cvalue + \";path=/\";\n\t\t}\n\t},\n\t// Get cookie by name\n\tget: function(cname) {\n\t    var name = cname + \"=\";\n\t    var decodedCookie = decodeURIComponent(document.cookie);\n\t    var ca = decodedCookie.split(';');\n\t    for(var i = 0; i \u003cca.length; i++) {\n\t        var c = ca[i];\n\t        while (c.charAt(0) == ' ') {\n\t            c = c.substring(1);\n\t        }\n\t        if (c.indexOf(name) == 0) {\n\t            return c.substring(name.length, c.length);\n\t        }\n\t    }\n\t    return \"\";\n\t}\n};\n\n// Convert DDMMYYY HHMM to Unix timestamp\nexponea.date2unix = function(dateString, deliminator_date, timeString, deliminator_time){\n\tif(!timeString) timeString = \"12:00\";\n\tif(!deliminator_date) deliminator_date = '/';\n\tif(!deliminator_time) deliminator_time = ':';\n\tvar dateParts = dateString.split(deliminator_date);\n\tvar timeParts = timeString.split(deliminator_time);\n\tif(dateParts.length \u003e 1){\n\t\treturn ((new Date(dateParts[2], dateParts[1] - 1, dateParts[0], timeParts[0], timeParts[1]).getTime()) / 1000).toFixed(0);\n\t}\n\treturn null;\n};","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"6272aacd89bb0696fdbf8052"},{"uses_overlay":false,"type":"js","parametrized_definition":"/**\r\n * buttonCssSelector: button\r\n * eventName: button_clicked\r\n * buttonName: Click here\r\n */\r\n\r\n$(\".br_raf_button\").click(function (elem) {\r\n    exponea.track(\"Clicked on RAF Button\", {\r\n        button_name: \"RAF Button\"\r\n    });\r\n});","trigger":{"include_pages":[{"url":"/refer-a-friend-br","type":"contains"}],"exclude_pages":null},"_id":"67bde325106980c950fc7809"},{"uses_overlay":false,"type":"html","parametrized_definition":"\u003cstyle\u003e\n\n/* ================================================ */\n/* Product Cards */\n/* ================================================ */\n/* Product - Image */\n#cocoaas_chat_wrapper .clarity-chat-container .clarity-assistant-carousel-item-image {\n    aspect-ratio: 2 / 3;\n}\n\n/* Product - Price Container */\n#cocoaas_chat_wrapper .clarity-assistant-carousel-product-price-container {\n    flex-direction: row-reverse;\n}\n\n/* Product - Price */\n#cocoaas_chat_wrapper .clarity-assistant-carousel-product-price {\n  font-size: 15px;\n  line-height: 16px;\n  color: rgba(0, 53, 95, 1);\n  font-weight: 700;\n}\n#cocoaas_chat_wrapper .clarity-assistant-carousel-product-price:has(~ .clarity-assistant-carousel-product-original-price) {\n  color: rgba(204, 46, 46, 1);\n}\n\n/* Product - Original Price */\n#cocoaas_chat_wrapper .clarity-assistant-carousel-product-original-price {\n  color: rgba(0, 53, 95, 1);\n  font-size: 15px;\n  line-height: 16px;\n  font-weight: 700;\n}\n\n/* ================================================ */\n/* Footer */\n/* ================================================ */\n/* Chat Input */\n#cocoaas_chat_wrapper .clarity-chat-footer .clarity-input .clarity-input-container {\n    border-radius: 0;\n}\n#cocoaas_chat_wrapper .clarity-chat-footer .clarity_input_shadow.clarity-input-shadow {\n    padding: 2px;\n}\n#cocoaas_chat_wrapper .clarity-chat-footer .clarity_input_shadow.clarity-input-shadow::before {\n    border-radius: 0;\n    filter: none;\n    inset:  0;\n}\n#cocoaas_chat_wrapper .clarity-chat-footer .clarity_input_shadow.clarity-input-shadow.clarity-focused::before {\n    background: linear-gradient(to right, rgba(217, 227, 233, 1) 0%, rgba(217, 227, 233, 1) 100%);\n}\n#cocoaas_chat_wrapper .clarity-chat-footer .clarity_input_shadow.clarity-input-shadow.clarity-focused::after {\n    display: none;\n}\n#cocoaas_chat_wrapper .clarity-chat-footer .clarity_input_shadow.clarity-input-shadow.clarity-focused .clarity-input-container {\n    border: 1px solid rgba(11, 121, 216, 1);\n}\n\n/* Legal Notice */\n#cocoaas_chat_wrapper .clarity-chat-legal-notice-text-container .clarity-chat-legal-notice-icon-container svg {\n    fill: rgba(94, 115, 156, 1);\n}\n#cocoaas_chat_wrapper .clarity-chat-legal-notice-text {\n    color: rgba(94, 115, 156, 1);\n}\n\n/* Survey */\n#cocoaas_chat_wrapper .clarity-survey-feedback {\n    z-index: 9999999999;\n}\n\u003c/style\u003e","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"69c58a5e6261d9fe3c830971"}],"vars":{"data":[]}}