{"webLayers":[{"_id":"6862a356ce623f4f19e39fd3","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"always","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"687777bbd6d560fc90693882","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"product || category"}],"operator":"regex","type":"string"}},{"attribute":{"id":"6862a355ce623f4f19e39fc9","type":"page_variable"},"constraint":{"operator":"is","type":"boolean","value":"true"}},{"attribute":{"id":"687777bbd6d560fc90693886","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"de34bs"},{"type":"constant","value":"mybb21"},{"type":"constant","value":"destyle21"},{"type":"constant","value":"mybb"},{"type":"constant","value":"defb99"},{"type":"constant","value":"desc99"},{"type":"constant","value":"dedc99"},{"type":"constant","value":"deyt99"},{"type":"constant","value":"depm99"},{"type":"constant","value":"debi99"},{"type":"constant","value":"denb99"},{"type":"constant","value":"degd99"},{"type":"constant","value":"defbta"},{"type":"constant","value":"nbfdcr"},{"type":"constant","value":"fbfdcr"},{"type":"constant","value":"bgfdcr"},{"type":"constant","value":"gofdcr"},{"type":"constant","value":"defbnw"},{"type":"constant","value":"decr01"},{"type":"constant","value":"degnbt"},{"type":"constant","value":"degnbtc"},{"type":"constant","value":"defbre"},{"type":"constant","value":"deac1"},{"type":"constant","value":"defb99a"},{"type":"constant","value":"defb99b"},{"type":"constant","value":"denbai"},{"type":"constant","value":"denbam"}],"operator":"not in","type":"string"}}]},"page_vars":[{"id":"6870cfc582729abfafd29d0c"},{"id":"686bda9631a9bc8251208077"}]},{"_id":"68667741b83d181ea5a3898c","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"url":"birthday-signup","type":"contains"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"until_visitor_interacts","uses_personalization":true,"data":"","variables_target":null,"page_vars":[{"id":"6870cfc682729abfafd29d10"},{"id":"6870cfc582729abfafd29d0c"}]},{"_id":"6870cfc682729abfafd29d15","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"url":"appointment-feedback","type":"contains"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"until_visitor_interacts","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"UK"}],"operator":"equals","type":"string"}}]},"page_vars":[{"id":"6870cfc682729abfafd29d10"}]},{"_id":"6870cfc682729abfafd29d1a","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"url":"appointment-feedback","type":"contains"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"until_visitor_interacts","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"US"}],"operator":"equals","type":"string"}}]},"page_vars":[{"id":"6870cfc682729abfafd29d10"}]},{"_id":"687777bbd6d560fc9069388f","date_filter":{"enabled":false,"from_date":null,"to_date":1755730799},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"only_once","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"687777bbd6d560fc90693882","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"product"},{"type":"constant","value":"category"}],"operator":"in","type":"string"}},{"attribute":{"id":"687777bbd6d560fc90693886","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"gbpdefault"},{"type":"constant","value":"frdefault"},{"type":"constant","value":"frdefault"},{"type":"constant","value":"xbrdefault"},{"type":"constant","value":"eurdefault"},{"type":"constant","value":"nldefault"},{"type":"constant","value":"chdefault"},{"type":"constant","value":"caddefault"},{"type":"constant","value":"dmdefault"},{"type":"constant","value":"auddefault"}],"operator":"in","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"UK"},{"type":"constant","value":"DE"},{"type":"constant","value":"FR"},{"type":"constant","value":"EU"},{"type":"constant","value":"XBR"},{"type":"constant","value":"NL"},{"type":"constant","value":"CH"},{"type":"constant","value":"CA"},{"type":"constant","value":"AU"}],"operator":"in","type":"string"}}]},"page_vars":[{"id":"686bda9631a9bc8251208077"},{"id":"6870cfc582729abfafd29d0c"}]},{"_id":"68c04fe19e95add84bba00ec","date_filter":{"enabled":false,"from_date":null,"to_date":1755730799},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"always","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"687777bbd6d560fc90693886","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"gbpdefault"},{"type":"constant","value":"frdefault"},{"type":"constant","value":"frdefault"},{"type":"constant","value":"xbrdefault"},{"type":"constant","value":"eurdefault"},{"type":"constant","value":"dmdefault"},{"type":"constant","value":"nldefault"},{"type":"constant","value":"chdefault"},{"type":"constant","value":"auddefault"}],"operator":"in","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"UK"},{"type":"constant","value":"EU"},{"type":"constant","value":"FR"},{"type":"constant","value":"XBR"},{"type":"constant","value":"DE"},{"type":"constant","value":"NL"},{"type":"constant","value":"CH"},{"type":"constant","value":"AU"}],"operator":"in","type":"string"}},{"attribute":{"id":"689254c63d8b6aa8df033691","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"category"}],"operator":"does not equal","type":"string"}}]},"page_vars":[{"id":"686bda9631a9bc8251208077"}]},{"_id":"68c15d24ade3bacdc717ba6c","date_filter":{"enabled":false,"from_date":null,"to_date":1755730799},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"always","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"687777bbd6d560fc90693886","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"gbpdefault"},{"type":"constant","value":"frdefault"},{"type":"constant","value":"frdefault"},{"type":"constant","value":"xbrdefault"},{"type":"constant","value":"eurdefault"},{"type":"constant","value":"dmdefault"},{"type":"constant","value":"nldefault"},{"type":"constant","value":"chdefault"},{"type":"constant","value":"auddefault"}],"operator":"not in","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"UK"},{"type":"constant","value":"EU"},{"type":"constant","value":"FR"},{"type":"constant","value":"XBR"},{"type":"constant","value":"DE"},{"type":"constant","value":"NL"},{"type":"constant","value":"CH"},{"type":"constant","value":"AU"}],"operator":"in","type":"string"}},{"attribute":{"id":"687777bbd6d560fc90693882","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"category"}],"operator":"does not equal","type":"string"}}]},"page_vars":[{"id":"686bda9631a9bc8251208077"}]},{"_id":"691252145672b96383dbac6d","date_filter":{"enabled":false,"from_date":null,"to_date":1755730799},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":[{"url":"?currentPageNum=","type":"contains"}]},"device_target":{"type":"any"},"frequency":"only_once","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"687777bbd6d560fc90693882","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"Homepage"},{"type":"constant","value":"homepage"},{"type":"constant","value":"category"},{"type":"constant","value":"product"}],"operator":"in","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"US"}],"operator":"equals","type":"string"}}]},"page_vars":[]},{"_id":"69235bd9ade5a94d1ab9cb4c","date_filter":{"enabled":false,"from_date":null,"to_date":1755730799},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":[{"url":"?currentPageNum=","type":"contains"}]},"device_target":{"type":"any"},"frequency":"only_once","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"687777bbd6d560fc90693882","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"product"}],"operator":"in","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"US"}],"operator":"equals","type":"string"}}]},"page_vars":[]},{"_id":"6924c4fbebe486e2b50e54fe","date_filter":{"enabled":false,"from_date":null,"to_date":1755730799},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"once_per_visit","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"687777bbd6d560fc90693882","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"basket"}],"operator":"equals","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"US"}],"operator":"equals","type":"string"}},{"attribute":{"id":"687777bbd6d560fc90693886","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"usddefault"}],"operator":"equals","type":"string"}}]},"page_vars":[]},{"_id":"69315de8225ae6d31c8e6d16","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"only_once","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"6870cfc682729abfafd29d10","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"Desktop"}],"operator":"contains","type":"string"}},{"attribute":{"id":"689254c63d8b6aa8df033691","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"category"},{"type":"constant","value":"product"}],"operator":"in","type":"string"}},{"attribute":{"id":"689468c1181a7ca4ed37e2c4","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"flannels"}],"operator":"contains","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"UK"},{"type":"constant","value":"US"}],"operator":"in","type":"string"}}]},"page_vars":[]},{"_id":"69329c43a9cdb0ba473a5698","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":[{"url":"?currentPageNum=","type":"contains"}]},"device_target":{"type":"any"},"frequency":"only_once","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"687777bbd6d560fc90693882","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"product"},{"type":"constant","value":"category"}],"operator":"in","type":"string"}},{"attribute":{"id":"687777bbd6d560fc90693886","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"ukpm99"},{"type":"constant","value":"ukfb1c"},{"type":"constant","value":"uksc99"},{"type":"constant","value":"ukreact"},{"type":"constant","value":"ukdg99"},{"type":"constant","value":"ukcv39"},{"type":"constant","value":"fbreact"},{"type":"constant","value":"uknbam"},{"type":"constant","value":"uknbai"},{"type":"constant","value":"ukbn99"},{"type":"constant","value":"ukept1"},{"type":"constant","value":"ukdgcss"},{"type":"constant","value":"eufb20"},{"type":"constant","value":"eupm99"},{"type":"constant","value":"irefb2"},{"type":"constant","value":"irepx"},{"type":"constant","value":"irenb"},{"type":"constant","value":"eunbaw"},{"type":"constant","value":"iregdg"},{"type":"constant","value":"frpx99"},{"type":"constant","value":"frfb99"},{"type":"constant","value":"frnbai"},{"type":"constant","value":"frbr99"},{"type":"constant","value":"frnb99"},{"type":"constant","value":"frabs"},{"type":"constant","value":"depm99"},{"type":"constant","value":"defb99"},{"type":"constant","value":"degd99"},{"type":"constant","value":"desc99"},{"type":"constant","value":"deon1"},{"type":"constant","value":"deac1"},{"type":"constant","value":"denbai"},{"type":"constant","value":"debi99"},{"type":"constant","value":"nlfbdu"},{"type":"constant","value":"nlpmen"}],"operator":"in","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"EU"},{"type":"constant","value":"FR"},{"type":"constant","value":"DE"},{"type":"constant","value":"NL"},{"type":"constant","value":"UK"}],"operator":"in","type":"string"}}]},"page_vars":[{"id":"686bda9631a9bc8251208077"},{"id":"6870cfc582729abfafd29d0c"}]},{"_id":"693c3a5bd4f5fe6c721c167c","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"always","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"689254c63d8b6aa8df033691","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"category"}],"operator":"equals","type":"string"}},{"attribute":{"id":"6870cfc682729abfafd29d10","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"Mobile View"},{"type":"constant","value":"Desktop View"}],"operator":"in","type":"string"}}]},"page_vars":[{"id":"6870cfc582729abfafd29d0c"},{"id":"686bda9631a9bc8251208077"},{"id":"687f5904f7fcebf3eaf07fef"},{"id":"6870cfc682729abfafd29d10"}]},{"_id":"693c40ffb2900131385abe9a","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"always","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"687777bbd6d560fc90693882","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"product"}],"operator":"equals","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"US"},{"type":"constant","value":"DE"},{"type":"constant","value":"EU"},{"type":"constant","value":"FR"},{"type":"constant","value":"CA"},{"type":"constant","value":"AU"},{"type":"constant","value":"CH"},{"type":"constant","value":"NL"},{"type":"constant","value":"XBR"},{"type":"constant","value":"UK"}],"operator":"in","type":"string"}}]},"page_vars":[{"id":"687f5904f7fcebf3eaf07fef"},{"id":"686bda9631a9bc8251208077"},{"id":"687e48e9e79652fed545563f"}]},{"_id":"693c4b002d480c5c435edc75","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"always","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"689254c63d8b6aa8df033691","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"product"}],"operator":"equals","type":"string"}}]},"page_vars":[{"id":"6870cfc582729abfafd29d0c"},{"id":"687e48e9e79652fed545563f"},{"id":"686bda9631a9bc8251208077"},{"id":"6870cfc682729abfafd29d10"}]},{"_id":"693c4c81079b0eb6ee3aa925","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"always","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"689254c63d8b6aa8df033691","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"product"}],"operator":"equals","type":"string"}}]},"page_vars":[{"id":"6870cfc582729abfafd29d0c"},{"id":"687e48e9e79652fed545563f"},{"id":"686bda9631a9bc8251208077"},{"id":"6870cfc682729abfafd29d10"}]},{"_id":"693c4f17cc750607e4e2b1c9","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"always","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"689254c63d8b6aa8df033691","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"basket"}],"operator":"equals","type":"string"}}]},"page_vars":[{"id":"6870cfc582729abfafd29d0c"},{"id":"686bda9631a9bc8251208077"},{"id":"687f9ebffac7bd368375478a"},{"id":"6870cfc682729abfafd29d10"}]},{"_id":"693c5116a4ab3f17e2ac6194","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"always","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"687777bbd6d560fc90693882","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"basket"}],"operator":"equals","type":"string"}}]},"page_vars":[{"id":"6870cfc582729abfafd29d0c"},{"id":"687f9ebffac7bd368375478a"},{"id":"686bda9631a9bc8251208077"},{"id":"6870cfc682729abfafd29d10"}]},{"_id":"694146309036c3f6a6bf5873","date_filter":{"enabled":false,"from_date":null,"to_date":1755730799},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"once_per_visit","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"687777bbd6d560fc90693882","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"basket"}],"operator":"equals","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"US"}],"operator":"equals","type":"string"}},{"attribute":{"id":"687777bbd6d560fc90693886","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"usddefault"}],"operator":"equals","type":"string"}}]},"page_vars":[]},{"_id":"6953dc616dff8cd51d9a37ee","date_filter":{"enabled":false,"from_date":null,"to_date":1755730799},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"always","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"687777bbd6d560fc90693886","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"usddefault"}],"operator":"in","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"US"}],"operator":"in","type":"string"}},{"attribute":{"id":"687777bbd6d560fc90693882","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"category"}],"operator":"does not equal","type":"string"}}]},"page_vars":[{"id":"686bda9631a9bc8251208077"}]},{"_id":"695e8075cee72f0b509c5609","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"always","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"689254c63d8b6aa8df033691","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"category"}],"operator":"equals","type":"string"}},{"attribute":{"id":"68c91ba91c00bfc935319bd9","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"bestsellers"}],"operator":"does not equal","type":"string"}}]},"page_vars":[{"id":"687f5904f7fcebf3eaf07fef"},{"id":"686bda9631a9bc8251208077"}]},{"_id":"6978c3248d6d75a802a26f64","date_filter":{"enabled":false,"from_date":null,"to_date":1755730799},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"only_once","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"687777bbd6d560fc90693882","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"basket"},{"type":"constant","value":"Homepage"}],"operator":"in","type":"string"}},{"attribute":{"id":"687777bbd6d560fc90693886","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"gbpdefault"},{"type":"constant","value":"frdefault"},{"type":"constant","value":"frdefault"},{"type":"constant","value":"xbrdefault"},{"type":"constant","value":"eurdefault"},{"type":"constant","value":"dmdefault"},{"type":"constant","value":"nldefault"},{"type":"constant","value":"chdefault"},{"type":"constant","value":"caddefault"},{"type":"constant","value":"auddefault"}],"operator":"in","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"UK"}],"operator":"in","type":"string"}}]},"page_vars":[{"id":"686bda9631a9bc8251208077"},{"id":"6870cfc582729abfafd29d0c"}]},{"_id":"69a6a6471fd92f81476625e1","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":[{"url":"?currentPageNum=","type":"contains"}]},"device_target":{"type":"any"},"frequency":"once_per_visit","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"689254c63d8b6aa8df033691","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"category"},{"type":"constant","value":"product set"}],"operator":"in","type":"string"}},{"attribute":{"id":"689468c1181a7ca4ed37e2c4","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"suits"}],"operator":"contains","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"UK"}],"operator":"in","type":"string"}}]},"page_vars":[]},{"_id":"69a6e77c13baf83b695bb9b7","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":[{"url":"?currentPageNum=","type":"contains"}]},"device_target":{"type":"any"},"frequency":"once_per_visit","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"689254c63d8b6aa8df033691","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"category"},{"type":"constant","value":"product"}],"operator":"in","type":"string"}},{"attribute":{"id":"689468c1181a7ca4ed37e2c4","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"shirts"}],"operator":"contains","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"UK"}],"operator":"in","type":"string"}}]},"page_vars":[]},{"_id":"69b1449cedc1cc4a07d8957e","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"always","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"689254c63d8b6aa8df033691","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"product"}],"operator":"contains","type":"string"}}]},"page_vars":[{"id":"686bda9631a9bc8251208077"}]},{"_id":"69bd1027315e83420ec6b8dd","date_filter":{"enabled":false,"from_date":null,"to_date":1755730799},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"device_target":{"type":"any"},"frequency":"only_once","uses_personalization":true,"data":"","variables_target":{"conditions":[{"attribute":{"id":"687777bbd6d560fc90693882","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"basket"},{"type":"constant","value":"Homepage"}],"operator":"in","type":"string"}},{"attribute":{"id":"687777bbd6d560fc90693886","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"ukpm99"},{"type":"constant","value":"ukfb1c"},{"type":"constant","value":"uksc99"},{"type":"constant","value":"ukreact"},{"type":"constant","value":"ukdg99"},{"type":"constant","value":"ukcv39"},{"type":"constant","value":"fbreact"},{"type":"constant","value":"uknbam"},{"type":"constant","value":"uknbai"},{"type":"constant","value":"ukbn99"},{"type":"constant","value":"ukept1"},{"type":"constant","value":"ukdgcss"},{"type":"constant","value":"eufb20"},{"type":"constant","value":"eupm99"},{"type":"constant","value":"irefb2"},{"type":"constant","value":"irepx"},{"type":"constant","value":"irenb"},{"type":"constant","value":"eunbaw"},{"type":"constant","value":"iregdg"},{"type":"constant","value":"frpx99"},{"type":"constant","value":"frfb99"},{"type":"constant","value":"frnbai"},{"type":"constant","value":"frbr99"},{"type":"constant","value":"frnb99"},{"type":"constant","value":"frabs"},{"type":"constant","value":"depm99"},{"type":"constant","value":"defb99"},{"type":"constant","value":"degd99"},{"type":"constant","value":"desc99"},{"type":"constant","value":"deon1"},{"type":"constant","value":"deac1"},{"type":"constant","value":"denbai"},{"type":"constant","value":"debi99"},{"type":"constant","value":"nlfbdu"},{"type":"constant","value":"nlpmen"}],"operator":"in","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"UK"}],"operator":"in","type":"string"}}]},"page_vars":[{"id":"686bda9631a9bc8251208077"}]}],"experiments":[{"_id":"68d3a569010042a1c6a61e9f","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":{"conditions":[{"attribute":{"id":"689254c63d8b6aa8df033691","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"basket"}],"operator":"equals","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"US"}],"operator":"equals","type":"string"}}]},"page_vars":[]},{"_id":"69023500d4d6b91cc1f08bc2","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":{"conditions":[{"attribute":{"id":"689254c63d8b6aa8df033691","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"basket"}],"operator":"equals","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"US"},{"type":"constant","value":"UK"}],"operator":"in","type":"string"}}]},"page_vars":[{"id":"6870cfc582729abfafd29d0c"},{"id":"686bda9631a9bc8251208077"},{"id":"687f9ebffac7bd368375478a"},{"id":"6870cfc682729abfafd29d10"}]},{"_id":"69b91967025d836bf2b655f0","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":{"conditions":[{"attribute":{"id":"687777bbd6d560fc90693882","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"category"}],"operator":"in","type":"string"}},{"attribute":{"id":"6870cfc682729abfafd29d10","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"Mobile"}],"operator":"contains","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"US"}],"operator":"equals","type":"string"}}]},"page_vars":[]},{"_id":"69bd4d200c0a39e109dedfcd","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":{"conditions":[{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"US"}],"operator":"equals","type":"string"}},{"attribute":{"id":"68c91ba91c00bfc935319bd9","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"bestsellers"},{"type":"constant","value":"shirts-formal-shirts"},{"type":"constant","value":"shirts-casual-shirts"},{"type":"constant","value":"trousers"},{"type":"constant","value":"knitwear"},{"type":"constant","value":"polos"},{"type":"constant","value":"blazers"},{"type":"constant","value":"accessories"},{"type":"constant","value":"shoes"},{"type":"constant","value":"shirts-business-casual-shirts"},{"type":"constant","value":"suits"},{"type":"constant","value":"jackets"},{"type":"constant","value":"shirts"},{"type":"constant","value":"shirts-polo-shirts"},{"type":"constant","value":"shoes"},{"type":"constant","value":"accessories"}],"operator":"in","type":"string"}},{"attribute":{"id":"689468c1181a7ca4ed37e2c4","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"suits"}],"operator":"does not contain","type":"string"}}]},"page_vars":[{"id":"687f5904f7fcebf3eaf07fef"},{"id":"689468c1181a7ca4ed37e2c4"},{"id":"686bda9631a9bc8251208077"}]},{"_id":"69bd731b7e99f1a73f37daf9","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":{"conditions":[{"attribute":{"id":"687777bbd6d560fc90693886","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"gbpdefault"},{"type":"constant","value":"dmdefault"}],"operator":"in","type":"string"}},{"attribute":{"id":"689254c63d8b6aa8df033691","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"category"},{"type":"constant","value":"product"}],"operator":"in","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"DE"},{"type":"constant","value":"UK"}],"operator":"in","type":"string"}}]},"page_vars":[]},{"_id":"69c521af830c572e354637df","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"url":"/mens-shirts/formal","type":"contains"},{"url":"/mens-shirts/dress","type":"contains"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":{"conditions":[{"attribute":{"id":"689254c63d8b6aa8df033691","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"category"}],"operator":"in","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"UK"},{"type":"constant","value":"US"}],"operator":"in","type":"string"}}]},"page_vars":[]},{"_id":"69d4c34d5566ec5d8248aa73","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":{"conditions":[{"attribute":{"id":"689254c63d8b6aa8df033691","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"basket"}],"operator":"equals","type":"string"}},{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"UK"},{"type":"constant","value":"US"}],"operator":"in","type":"string"}}]},"page_vars":[]},{"_id":"69d4c821b0662cf4aec5e3dc","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":{"conditions":[{"attribute":{"id":"69b7e0c12a7591e216cdb2de","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"US"}],"operator":"equals","type":"string"}},{"attribute":{"id":"689254c63d8b6aa8df033691","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"product"}],"operator":"equals","type":"string"}},{"attribute":{"id":"689498bd181a7ca4ed37ef90","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"FO"}],"operator":"contains","type":"string"}},{"attribute":{"id":"687777bbd6d560fc90693886","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"us39t3"},{"type":"constant","value":"fb39t1"},{"type":"constant","value":"usgonb"}],"operator":"in","type":"string"}}]},"page_vars":[]},{"_id":"69d4e6b3b0662cf4aec6116d","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":{"conditions":[{"attribute":{"id":"6870cfc582729abfafd29d0c","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"US"}],"operator":"equals","type":"string"}},{"attribute":{"id":"689254c63d8b6aa8df033691","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"product"},{"type":"constant","value":"category"},{"type":"constant","value":"Homepage"}],"operator":"in","type":"string"}},{"attribute":{"id":"687777bbd6d560fc90693886","type":"page_variable"},"constraint":{"operands":[{"type":"constant","value":"usddefault"},{"type":"constant","value":"usgob"}],"operator":"in","type":"string"}}]},"page_vars":[]}],"constantManagedTags":[{"uses_overlay":false,"type":"js","parametrized_definition":"(function() {\n    /*\n     jQuery v1.9.1 (c) 2005, 2012\n     jQuery Foundation, Inc. jquery.org/license.\n    */\n    var g = /\\[object (Boolean|Number|String|Function|Array|Date|RegExp)\\]/;\n\n    function h(a) {\n        return null == a ? String(a) : (a = g.exec(Object.prototype.toString.call(Object(a)))) ? a[1].toLowerCase() : \"object\"\n    }\n\n    function k(a, b) {\n        return Object.prototype.hasOwnProperty.call(Object(a), b)\n    }\n\n    function m(a) {\n        if (!a || \"object\" != h(a) || a.nodeType || a == a.window) return !1;\n        try {\n            if (a.constructor \u0026\u0026 !k(a, \"constructor\") \u0026\u0026 !k(a.constructor.prototype, \"isPrototypeOf\")) return !1\n        } catch (b) {\n            return !1\n        }\n        for (var c in a);\n        return void 0 === c || k(a, c)\n    };\n    /*\n     Copyright 2012 Google Inc. All rights reserved. */\n    function n(a, b, c) {\n        this.b = a;\n        this.f = b || function() {};\n        this.d = !1;\n        this.a = {};\n        this.c = [];\n        this.e = p(this);\n        r(this, a, !c);\n        var d = a.push,\n            e = this;\n        a.push = function() {\n            var b = [].slice.call(arguments, 0),\n                c = d.apply(a, b);\n            r(e, b);\n            return c\n        }\n    }\n    window.DataLayerHelper = n;\n    n.prototype.get = function(a) {\n        var b = this.a;\n        a = a.split(\".\");\n        for (var c = 0; c \u003c a.length; c++) {\n            if (void 0 === b[a[c]]) return;\n            b = b[a[c]]\n        }\n        return b\n    };\n    n.prototype.flatten = function() {\n        this.b.splice(0, this.b.length);\n        this.b[0] = {};\n        s(this.a, this.b[0])\n    };\n\n    function r(a, b, c) {\n        for (a.c.push.apply(a.c, b); !1 === a.d \u0026\u0026 0 \u003c a.c.length;) {\n            b = a.c.shift();\n            if (\"array\" == h(b)) a: {\n                var d = b,\n                    e = a.a;\n                if (\"string\" == h(d[0])) {\n                    for (var f = d[0].split(\".\"), u = f.pop(), d = d.slice(1), l = 0; l \u003c f.length; l++) {\n                        if (void 0 === e[f[l]]) break a;\n                        e = e[f[l]]\n                    }\n                    try {\n                        e[u].apply(e, d)\n                    } catch (v) {}\n                }\n            }\n            else if (\"function\" == typeof b) try {\n                    b.call(a.e)\n                } catch (w) {} else if (m(b))\n                    for (var q in b) s(t(q, b[q]), a.a);\n                else continue;\n            c || (a.d = !0, a.f(a.a, b), a.d = !1)\n        }\n    }\n\n    function p(a) {\n        return {\n            set: function(b, c) {\n                s(t(b, c), a.a)\n            },\n            get: function(b) {\n                return a.get(b)\n            }\n        }\n    }\n\n    function t(a, b) {\n        for (var c = {}, d = c, e = a.split(\".\"), f = 0; f \u003c e.length - 1; f++) d = d[e[f]] = {};\n        d[e[e.length - 1]] = b;\n        return c\n    }\n\n    function s(a, b) {\n        for (var c in a)\n            if (k(a, c)) {\n                var d = a[c];\n                \"array\" == h(d) ? (\"array\" == h(b[c]) || (b[c] = []), s(d, b[c])) : m(d) ? (m(b[c]) || (b[c] = {}), s(d, b[c])) : b[c] = d\n            }\n    };\n})();\n\nfunction process(model, m) {\n\tif (m.namespace == \"exponea\") {\n\t\t\n\t\t/*\n\t\t*\tMODIFY EVENT PROPERTIES\n\t\t*/\n\t\t\n\t\t// switch(m.event_name){\n\t\t// \tcase \"view_item\":\n\t\t// \t\tm.event_properties.price = parseFloat(price.split(\"€\")[0]);\n\t\t// \t\tbreak;\n\t\t// \tdefault:\n\t\t// \t\tbreak;\n\t\t// }\n\t\t\n\t\texponea.track(m.event_name,m.event_properties);\n\t}\n}\n\nnew DataLayerHelper(dataLayer, process, true);","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"68a5a9e5b22980546c5c175a"},{"uses_overlay":false,"type":"js","parametrized_definition":"(() =\u003e {\n  \"use strict\";\n\n  const RUN_FLAG = \"__CT_USP_STRIP_V3_ALL_MARKETS__\";\n  if (window[RUN_FLAG]) return;\n  window[RUN_FLAG] = true;\n\n  // ---------------- Poll helper ----------------\n  function poll(selector, cb, timeout, max) {\n    max--;\n    if (document.querySelector(selector) \u0026\u0026 typeof window.utag_data === \"object\") {\n      cb();\n    } else if (max \u003e 0) {\n      setTimeout(function () { poll(selector, cb, timeout, max); }, timeout);\n    }\n  }\n\n  // ---------------- Shared helpers ----------------\n  const isPDP = () =\u003e (window.utag_data?.page?.type || \"\").toLowerCase() === \"product\";\n  const isMobileBP = () =\u003e {\n  const ut = (window.utag_data?.page?.responsive_design_type || \"\").toLowerCase();\n\n\t  // If CT is flagging a specific view, treat mobile/tablet as \"mobile treatment\"\n\t  if (ut) {\n\t    if (ut === \"mobile view\" || ut === \"tablet view\") return true;\n\t    return false;\n\t  }\n\t\n\t  // Fallback: viewport width breakpoint (1024px and below)\n\t  return window.matchMedia?.(\"(max-width: 1024px)\")?.matches || false;\n\t};\n\n  const prefersReduced = () =\u003e\n    window.matchMedia?.(\"(prefers-reduced-motion: reduce)\")?.matches;\n\n  const waitFor = (sel, { timeout = 10000 } = {}) =\u003e\n    new Promise((resolve, reject) =\u003e {\n      const hit = document.querySelector(sel);\n      if (hit) return resolve(hit);\n      const mo = new MutationObserver(() =\u003e {\n        const found = document.querySelector(sel);\n        if (found) {\n          mo.disconnect();\n          resolve(found);\n        }\n      });\n      mo.observe(document.documentElement, { childList: true, subtree: true });\n      setTimeout(() =\u003e {\n        mo.disconnect();\n        reject(new Error(\"waitFor timeout: \" + sel));\n      }, timeout);\n    });\n\n  // ==================================================\n  // UK / US module (variation-based)\n  // ==================================================\n  const module365 = {\n    variationId: 3, // zero-based index into the content buckets\n\n    variations: {\n      uk: {\n        def: [\n          [\n            { copy: 'Designed To Impress, \u003cspan class=\"bold\"\u003eBuilt To Last\u003c/span\u003e', image: 'flag' },\n            { copy: 'Shop Confidently With \u003cspan class=\"bold\"\u003e6 Months To Decide\u003c/span\u003e', image: 'medal' },\n            { copy: '\u003cspan class=\"bold\"\u003eAward Winning\u003c/span\u003e Customer Service, Here For You', image: 'phone' }\n          ],\n          [\n            { copy: 'Timeless \u003cspan class=\"bold\"\u003eBritish Style\u003c/span\u003e, Tailored To You', image: 'flag' },\n            { copy: 'Quality Products \u003cspan class=\"bold\"\u003eMade To Last\u003c/span\u003e', image: 'medal' },\n            { copy: '\u003cspan class=\"bold\"\u003eAward Winning\u003c/span\u003e Customer Service, Here For You', image: 'phone' }\n          ],\n          [\n            { copy: 'Timeless \u003cspan class=\"bold\"\u003eBritish Style\u003c/span\u003e, Made to Last', image: 'flag' },\n            { copy: '\u003cspan class=\"bold\"\u003eEasy \u003cspan class=\"bold\"\u003e6 Month Returns\u003c/span\u003e, No Questions Asked.', image: 'medal' },\n            { copy: 'Trusted \u003cspan class=\"bold\"\u003eBritish Heritage\u003c/span\u003e Since 1986', image: 'flag' }\n          ],\n          [\n            { copy: 'Classic \u003cspan class=\"bold\"\u003eBritish Design\u003c/span\u003e. Timeless Quality.', image: 'flag' },\n            { copy: 'Easy \u003cspan class=\"bold\"\u003e6 Month Returns\u003c/span\u003e, No Questions Asked.', image: 'medal' },\n            { copy: '\u003cspan class=\"bold\"\u003eAward Winning\u003c/span\u003e Customer Service, Here For You', image: 'phone' }\n          ],\n          [\n            { copy: 'Timeless \u003cspan class=\"bold\"\u003eBritish Style\u003c/span\u003e, Tailored To You', image: 'flag' },\n            { copy: '\u003cspan class=\"bold\"\u003eSize and Fit\u003c/span\u003e promise with \u003cspan class=\"bold\"\u003e6-month\u003c/span\u003e returns window', image: 'medal' },\n            { copy: '\u003cspan class=\"bold\"\u003eAward Winning\u003c/span\u003e Customer Service, Here For You', image: 'phone' }\n          ]\n        ],\n        acq: [\n          [\n            { copy: '\u003cspan class=\"bold\"\u003eFree Shipping\u003c/span\u003e On Orders Above £50', image: 'shipping' },\n            { copy: 'Designed To Impress, \u003cspan class=\"bold\"\u003eBuilt To Last\u003c/span\u003e', image: 'tape' },\n            { copy: 'Shop Confidently With \u003cspan class=\"bold\"\u003e6 Months To Decide\u003c/span\u003e', image: 'medal' }\n          ],\n          [\n            { copy: '\u003cspan class=\"bold\"\u003eFree Delivery\u003c/span\u003e On Orders Above £50', image: 'shipping' },\n            { copy: 'Timeless \u003cspan class=\"bold\"\u003eBritish Style\u003c/span\u003e, Tailored To You', image: 'flag' },\n            { copy: 'Easy \u003cspan class=\"bold\"\u003e6 Month Returns\u003c/span\u003e, No Questions Asked.', image: 'medal' }\n          ],\n          [\n            { copy: 'Enjoy \u003cspan class=\"bold\"\u003eFree Delivery\u003c/span\u003e When You Spend £50', image: 'shipping' },\n            { copy: 'Timeless \u003cspan class=\"bold\"\u003eBritish Style\u003c/span\u003e, Made to Last', image: 'flag' },\n            { copy: 'Easy \u003cspan class=\"bold\"\u003e6 Month Returns\u003c/span\u003e, No Questions Asked.', image: 'medal' }\n          ],\n          [\n            { copy: '\u003cspan class=\"bold\"\u003eFree UK Delivery\u003c/span\u003e for Orders Over £50', image: 'shipping' },\n            { copy: 'Designed To Impress, \u003cspan class=\"bold\"\u003eBuilt To Last\u003c/span\u003e', image: 'tape' },\n            { copy: 'Easy \u003cspan class=\"bold\"\u003e6 Month Returns\u003c/span\u003e, No Questions Asked.', image: 'medal' }\n          ],\n          [\n            { copy: '\u003cspan class=\"bold\"\u003eFree UK Delivery\u003c/span\u003e for Orders Over £50', image: 'shipping' },\n            { copy: 'Quality British Design, \u003cspan class=\"bold\"\u003eMade to Last\u003c/span\u003e', image: 'flag' },\n            { copy: '\u003cspan class=\"bold\"\u003eSize and Fit\u003c/span\u003e promise with \u003cspan class=\"bold\"\u003e6-month\u003c/span\u003e returns window', image: 'medal' }\n          ]\n        ]\n      },\n      us: {\n        def: [\n          [\n            { copy: 'Timeless \u003cspan class=\"bold\"\u003eBritish Style\u003c/span\u003e, Built to Last', image: 'flag' },\n            { copy: 'Shop Confidently With \u003cspan class=\"bold\"\u003e6 Months To Decide\u003c/span\u003e', image: 'medal' },\n            { copy: '\u003cspan class=\"bold\"\u003eAward Winning\u003c/span\u003e Customer Service, Here For You', image: 'phone' }\n          ],\n          [\n            { copy: 'Timeless \u003cspan class=\"bold\"\u003eBritish Style\u003c/span\u003e, Tailored To You', image: 'flag' },\n            { copy: 'Quality Products \u003cspan class=\"bold\"\u003eMade To Last\u003c/span\u003e', image: 'medal' },\n            { copy: '\u003cspan class=\"bold\"\u003eAward Winning\u003c/span\u003e Customer Service, Here For You', image: 'phone' }\n          ],\n          [\n            { copy: 'Timeless \u003cspan class=\"bold\"\u003eBritish Style\u003c/span\u003e, Made to Last', image: 'medal' },\n             { copy: 'Easy \u003cspan class=\"bold\"\u003e6 Month Returns\u003c/span\u003e, No Questions Asked.', image: 'medal' },\n            { copy: 'Trusted British Heritage \u003cspan class=\"bold\"\u003eSince 1986\u003c/span\u003e', image: 'flag' }\n          ],\n          [\n            { copy: '\u003cspan class=\"bold\"\u003eClassic British Design\u003c/span\u003e. Timeless Quality.', image: 'flag' },\n            { copy: 'Easy \u003cspan class=\"bold\"\u003e6 Month Returns\u003c/span\u003e, No Questions Asked.', image: 'medal' },\n            { copy: '\u003cspan class=\"bold\"\u003eAward Winning\u003c/span\u003e Customer Service, Here For You', image: 'phone' }\n          ],\n          [\n            { copy: 'Timeless \u003cspan class=\"bold\"\u003eBritish Style\u003c/span\u003e,Tailored To You', image: 'flag' },\n            { copy: '\u003cspan class=\"bold\"\u003eSize and Fit\u003c/span\u003e promise with \u003cspan class=\"bold\"\u003e6-month\u003c/span\u003e returns window', image: 'medal' },\n            { copy: '\u003cspan class=\"bold\"\u003eAward Winning\u003c/span\u003e Customer Service, Here For You', image: 'phone' }\n          ]\n        ],\n        acq: [\n          [\n            { copy: '\u003cspan class=\"bold\"\u003eFree Standard Shipping\u003c/span\u003e On All Orders', image: 'shipping' },\n            { copy: 'Timeless \u003cspan class=\"bold\"\u003eBritish Style\u003c/span\u003e, Built to Last', image: 'flag' },\n            { copy: 'Shop Confidently With \u003cspan class=\"bold\"\u003e6 Months To Decide\u003c/span\u003e', image: 'medal' }\n          ],\n          [\n            { copy: '\u003cspan class=\"bold\"\u003eFree Shipping\u003c/span\u003e For All Orders', image: 'shipping' },\n            { copy: 'Timeless \u003cspan class=\"bold\"\u003eBritish Style\u003c/span\u003e, Tailored To You', image: 'flag' },\n            { copy: 'Easy \u003cspan class=\"bold\"\u003e6 Month Returns\u003c/span\u003e, No Questions Asked.', image: 'medal' }\n          ],\n          [\n            { copy: 'Enjoy \u003cspan class=\"bold\"\u003eFree Shipping\u003c/span\u003e On All Orders', image: 'shipping' },\n            { copy: 'Timeless \u003cspan class=\"bold\"\u003eBritish Style\u003c/span\u003e, Made to Last', image: 'flag' },\n            { copy: 'Easy \u003cspan class=\"bold\"\u003e6 Month Returns\u003c/span\u003e, No Questions Asked.', image: 'medal' }\n          ],\n          [\n            { copy: '\u003cspan class=\"bold\"\u003eFree Shipping\u003c/span\u003e On All Orders', image: 'shipping' },\n            { copy: 'Designed To Impress, \u003cspan class=\"bold\"\u003eBuilt To Last\u003c/span\u003e', image: 'flag' },\n            { copy: 'Easy \u003cspan class=\"bold\"\u003e6 Month Returns\u003c/span\u003e, No Questions Asked.', image: 'medal' }\n          ],\n          [\n            { copy: '\u003cspan class=\"bold\"\u003eFree Shipping\u003c/span\u003e For All Orders', image: 'shipping' },\n            { copy: 'Quality British Design, \u003cspan class=\"bold\"\u003eMade to Last\u003c/span\u003e', image: 'flag' },\n            { copy: '\u003cspan class=\"bold\"\u003eSize and Fit\u003c/span\u003e promise with \u003cspan class=\"bold\"\u003e6-month\u003c/span\u003e returns window', image: 'medal' }\n          ]\n        ]\n      }\n    },\n\n    buildUSPs: function () {\n      if (document.getElementById(\"speero-365-usp\")) return false;\n\n      const ud = window.utag_data || {};\n      const g = (ud.global || {});\n      const p = (ud.page || {});\n      const countryRaw = g.sfcc_country;     // 'UK', 'US'\n      const campaignSite = g.campaign_site;  // site key\n      const pageType = p.type || '';         // 'product' for PDP\n\n      if (String(pageType).toLowerCase() !== 'product') return false;\n      if (!countryRaw || !['uk', 'us'].includes(String(countryRaw).toLowerCase())) return false;\n      if (!campaignSite) return false;\n\n      const defaultCampaignSites = [\n        'usddefault','gbpdefault','dmdefault','ukgob','auddefault','usgob','xbrdefault','frdefault','eurdefault','caddefault',\n        'gegob','nldefault','shareuk1','uscjdl','chdefault','augb','usbrt1','eugob','usafcj','ukbng','xbrgb','affide1',\n        'debng','shareau1','sharefr1','eushare1','xbraff1','pinterest','auctbf','devip'\n      ];\n\n      const isDefault = defaultCampaignSites.includes(String(campaignSite));\n      const acqKey = isDefault ? 'def' : 'acq';\n\n      const countryKey = String(countryRaw).toLowerCase();\n      const countrySet = this.variations \u0026\u0026 this.variations[countryKey];\n\n      if (!countrySet \u0026\u0026 !(this.variations \u0026\u0026 this.variations.uk)) return false;\n\n      const useSet = countrySet || this.variations.uk;\n      const buckets = useSet[acqKey];\n      if (!Array.isArray(buckets)) return false;\n\n      const idx = (this.variationId | 0);\n      const uspContent = buckets[idx];\n      if (!Array.isArray(uspContent)) return false;\n\n      const target = document.querySelector('.pdp-main__more-info');\n      if (!target) return false;\n\n      target.insertAdjacentHTML('beforebegin', `\n        \u003cdiv id=\"speero-365-usp\" class=\"d-flex flex-direction-column\"\n             style=\"font-size:1.6rem;font-family:'Futura'; gap:12px; margin-top:20px; color:#373737; width:100%\"\u003e\n          ${uspContent.map(c =\u003e `\n            \u003cdiv class=\"d-flex\" style=\"gap:8px; align-items:center\"\u003e\n              \u003cimg src=\"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/images/usp-icons/${c.image}-icon.svg\"\n                   style=\"width:24px; height:24px\" alt=\"\"\u003e\n              \u003cspan\u003e${c.copy}\u003c/span\u003e\n            \u003c/div\u003e\n          `).join('')}\n        \u003c/div\u003e\n      `);\n\n      return true;\n    }\n  };\n\n  // ==================================================\n  // Non-UK/US module (USP_BY_LANG)\n  // ==================================================\n  const USP_BY_LANG = {\n    \"de_DE\": [\n      { img: \"tape\",  text: 'Langlebiges Design, \u003cspan class=\"bold\"\u003edas begeistert\u003c/span\u003e' },\n      { img: \"medal\", text: 'Shoppen Sie sorglos mit \u003cspan class=\"bold\"\u003e6 Monaten Bedenkzeit\u003c/span\u003e', cls: \"returns-usp\" },\n      { img: \"phone\", text: '\u003cspan class=\"bold\"\u003ePreisgekrönter Kundenservice, \u003c/span\u003eimmer für Sie da' }\n    ],\n    \"fr_FR\": [\n      { img: \"tape\",  text: 'Pensé pour plaire, \u003cspan class=\"bold\"\u003econçu pour durer\u003c/span\u003e' },\n      { img: \"medal\", text: 'Achetez en toute confiance, \u003cspan class=\"bold\"\u003evous avez 6 mois pour changer d\\'avis\u003c/span\u003e', cls: \"returns-usp\" },\n      { img: \"phone\", text: '\u003cspan class=\"bold\"\u003eUn service client récompensé, \u003c/span\u003eà votre écoute' }\n    ],\n    \"en_AU\": [\n      { img: \"flag\",  text: 'Timeless British Style, \u003cspan class=\"bold\"\u003eBuilt to Last\u003c/span\u003e' },\n      { img: \"medal\", text: 'Shop Confidently With \u003cspan class=\"bold\"\u003e6 Months To Decide\u003c/span\u003e', cls: \"returns-usp\" },\n      { img: \"phone\", text: '\u003cspan class=\"bold\"\u003eAward Winning\u003c/span\u003e Customer Service, Here For You' }\n    ],\n    \"en_CA\": [\n      { img: \"flag\",  text: 'Timeless British Style, \u003cspan class=\"bold\"\u003eBuilt to Last\u003c/span\u003e' },\n      { img: \"medal\", text: 'Shop Confidently With \u003cspan class=\"bold\"\u003e6 Months To Decide\u003c/span\u003e', cls: \"returns-usp\" },\n      { img: \"phone\", text: '\u003cspan class=\"bold\"\u003eAward Winning\u003c/span\u003e Customer Service, Here For You' }\n    ],\n    \"fr_CA\": [\n      { img: \"flag\",  text: 'Le style anglais intemporel, \u003cspan class=\"bold\"\u003econçu pour durer\u003c/span\u003e' },\n      { img: \"medal\", text: 'Achetez en toute confiance avec \u003cspan class=\"bold\"\u003e6 mois pour décider\u003c/span\u003e', cls: \"returns-usp\" },\n      { img: \"phone\", text: '\u003cspan class=\"bold\"\u003eUn service client récompensé, \u003c/span\u003eà votre écoute' }\n    ],\n    \"en_CH\": [\n      { img: \"tape\",  text: 'Designed To Impress, \u003cspan class=\"bold\"\u003eBuilt To Last\u003c/span\u003e' },\n      { img: \"medal\", text: 'Shop Confidently With \u003cspan class=\"bold\"\u003e6 Months To Decide\u003c/span\u003e', cls: \"returns-usp\" },\n      { img: \"lock\",  text: 'Easy Payments With \u003cimg src=\"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/images/usp-icons/twint-logo.svg\" style=\"width:53px; height:21px\"\u003e' }\n    ],\n    \"fr_CH\": [\n      { img: \"tape\",  text: 'Pensé pour plaire, \u003cspan class=\"bold\"\u003econçu pour durer\u003c/span\u003e' },\n      { img: \"medal\", text: 'Achetez en toute confiance avec \u003cspan class=\"bold\"\u003e6 mois pour décider\u003c/span\u003e', cls: \"returns-usp\" },\n      { img: \"lock\",  text: 'Achetez en toute confiance avec \u003cimg src=\"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/images/usp-icons/twint-logo.svg\" style=\"width:53px; height:21px\"\u003e' }\n    ],\n    \"de_CH\": [\n      { img: \"tape\",  text: 'Langlebiges Design, \u003cspan class=\"bold\"\u003edas begeistert\u003c/span\u003e' },\n      { img: \"medal\", text: 'Shoppen Sie sorglos mit \u003cspan class=\"bold\"\u003e6 Monaten Bedenkzeit\u003c/span\u003e', cls: \"returns-usp\" },\n      { img: \"lock\",  text: 'Shoppen Sie sorglos mit \u003cimg src=\"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/images/usp-icons/twint-logo.svg\" style=\"width:53px; height:21px\"\u003e' }\n    ],\n    \"en_NL\": [\n      { img: \"tape\",  text: 'Designed To Impress, \u003cspan class=\"bold\"\u003eBuilt To Last\u003c/span\u003e' },\n      { img: \"medal\", text: 'Shop Confidently With \u003cspan class=\"bold\"\u003e6 Months To Decide\u003c/span\u003e', cls: \"returns-usp\" },\n      { img: \"phone\", text: '\u003cspan class=\"bold\"\u003eAward Winning\u003c/span\u003e Customer Service, Here For You' }\n    ],\n    \"en_IE\": [\n      { img: \"tape\",  text: 'Designed To Impress,\u003cspan class=\"bold\"\u003e Built To Last\u003c/span\u003e' },\n      { img: \"medal\", text: 'Shop Confidently With \u003cspan class=\"bold\"\u003e6 Months To Decide\u003c/span\u003e', cls: \"returns-usp\" },\n      { img: \"phone\", text: '\u003cspan class=\"bold\"\u003eAward Winning\u003c/span\u003e Customer Service, Here For You' }\n    ],\n    \"nl_NL\": [\n      { img: \"tape\",  text: 'Ontworpen om indruk te maken, \u003cspan class=\"bold\"\u003egebouwd om lang mee te gaan\u003c/span\u003e' },\n      { img: \"medal\", text: 'Koop met vertrouwen met \u003cspan class=\"bold\"\u003e6 maanden de tijd om te beslissen\u003c/span\u003e', cls: \"returns-usp\" },\n      { img: \"phone\", text: '\u003cspan class=\"bold\"\u003eBekroonde\u003c/span\u003e klantenservice, er voor u' }\n    ]\n  };\n\n  function renderIntlItems(items) {\n    return items.map(function (item) {\n      return '' +\n        '\u003cdiv class=\"d-flex' + (item.cls ? ' ' + item.cls : '') + '\" style=\"gap:8px; align-items:center\"\u003e' +\n          '\u003cimg src=\"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/images/usp-icons/' + item.img + '-icon.svg\" style=\"width:24px; height:24px\"\u003e' +\n          '\u003cspan\u003e' + item.text + '\u003c/span\u003e' +\n        '\u003c/div\u003e';\n    }).join('');\n  }\n\n  function buildIntlUSPs() {\n    if (document.getElementById(\"USP-Slice-Container\")) return false;\n\n    const ud = window.utag_data || {};\n    const g  = ud.global || {};\n    const p  = ud.page || {};\n    const pageType   = (p.type || '').toLowerCase();\n    const countryRaw = (g.sfcc_country || '').toUpperCase();\n    const siteLang   = g.site_language || '';\n\n    if (pageType !== 'product') return false;\n    if (countryRaw === 'UK' || countryRaw === 'US') return false;\n\n    const items = USP_BY_LANG[siteLang];\n    if (!items) return false;\n\n    const target = document.querySelector('.pdp-main__more-info');\n    if (!target) return false;\n\n    const html = '' +\n      '\u003cdiv id=\"USP-Slice-Container\" class=\"d-flex flex-direction-column\" ' +\n           'style=\"font-size:1.6rem; gap:12px; margin-top:20px; margin-bottom:20px; color:#373737; width:100%\"\u003e' +\n        renderIntlItems(items) +\n      '\u003c/div\u003e';\n\n    target.insertAdjacentHTML('beforebegin', html);\n    return true;\n  }\n\n  // ==================================================\n  // Strip / carousel module (consumes either source)\n  // ==================================================\n  const ID     = \"ct-usp-strip\";\n  const DEBUG  = false;\n  const log    = (...a) =\u003e DEBUG \u0026\u0026 console.log(\"[CT USP Strip]\", ...a);\n\n  const cleanText = (html) =\u003e\n    (html || \"\")\n      // turn bold spans into \u003cb\u003e\n      .replace(/\u003cspan[^\u003e]*class=[\"']?bold[\"']?[^\u003e]*\u003e/gi, \"\u003cb\u003e\")\n      .replace(/\u003c\\/span\u003e/gi, \"\u003c/b\u003e\")\n      // TWINT logo → literal TWINT text so we don't lose meaning\n      .replace(/\u003cimg[^\u003e]*twint-logo[^\u003e]*\u003e/gi, \" TWINT\")\n      // strip all other tags except \u003cb\u003e\n      .replace(/\u003c(?!\\/?b\\b)[^\u003e]+\u003e/gi, \"\")\n      .replace(/\\s+/g, \" \")\n      .trim()\n      .replace(/[.;,:]\\s*$/, \"\");\n\n  const extractItems = (srcEl) =\u003e\n    Array.from(srcEl?.querySelectorAll(\":scope \u003e div.d-flex\") || [])\n      .map((row) =\u003e {\n        const img = row.querySelector(\"img\");\n        const span = row.querySelector(\"span\");\n        const icon = img?.getAttribute(\"src\") || \"\";\n        const alt = img?.getAttribute(\"alt\") || \"\";\n        const label = cleanText(span?.innerHTML || \"\");\n        return icon \u0026\u0026 label ? { icon, alt, label } : null;\n      })\n      .filter(Boolean);\n\n  const injectStyles = () =\u003e {\n    const SID = ID + \"-css\";\n    if (document.getElementById(SID)) return;\n    const css = `\n      #${ID}{\n        font-family: inherit; font-size:14px; line-height:normal; color:#373737;\n        position:relative; z-index:3; border-bottom:1px solid #f5f5f5;\n        contain: layout paint style; isolation:isolate; width:100%;\n      }\n      #${ID} .inner{ max-width:1280px; margin:0 auto; padding:5px 16px; }\n\n      /* Desktop static row */\n      #${ID}.is-desktop .ct-static{ display:flex; align-items:center; justify-content:space-between; gap:12px; }\n      #${ID}.is-desktop .ct-static__item{\n        display:flex; align-items:center; justify-content:center; gap:8px;\n        flex:1 1 0; min-width:0; padding:4px 8px; white-space:nowrap;max-height:28px;\n      }\n      #${ID}.is-desktop .ct-static__item + .ct-static__item{ border-left:1px solid #e8e8e8; }\n\n      #${ID} .ct-usp__icon{ width:20px; height:20px; flex:0 0 20px; display:block; }\n      #${ID} .ct-usp__label{ display:inline; font-size:14px; line-height:normal; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }\n      #${ID} b{ font-weight:600; }\n\n           /* Mobile / tablet carousel (≤1024px) */\n      @media (max-width:1024px){\n        #${ID}{ border-bottom:none; }\n        #${ID} .inner{\n          max-width:none; padding:0;\n          margin-left: calc(50% - 50vw);\n          margin-right: calc(50% - 50vw);\n          width:100vw;\n        }\n        #${ID} .ct-carousel{ position:relative; overflow:hidden; width:100vw; }\n        #${ID} .ct-track{ display:flex; will-change: transform; transition: transform 300ms ease; }\n        #${ID} .ct-slide{\n          width:100vw; flex:0 0 100vw; display:flex; align-items:center; justify-content:center;\n          padding:10px 16px;max-height:28px;\n        }\n        #${ID} .ct-usp-item{ display:inline-flex; align-items:center; gap:8px; white-space:nowrap; }\n      }\n    `;\n    const style = document.createElement(\"style\");\n    style.id = SID;\n    style.textContent = css;\n    document.head.appendChild(style);\n  };\n\n  const buildShell = () =\u003e {\n    const wrap = document.createElement(\"div\");\n    wrap.id = ID;\n    wrap.setAttribute(\"role\", \"region\");\n    wrap.setAttribute(\"aria-label\", \"Key benefits\");\n    wrap.innerHTML = `\n      \u003cdiv class=\"inner\"\u003e\n        \u003cul class=\"ct-static m-ends-z list list--no-bullet\" aria-hidden=\"false\"\u003e\u003c/ul\u003e\n        \u003cdiv class=\"ct-carousel\" style=\"display:none\" aria-roledescription=\"carousel\" aria-label=\"Key benefits\"\u003e\n          \u003cdiv class=\"ct-track\" role=\"group\"\u003e\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    `;\n    return wrap;\n  };\n\n  const itemHTML = (it, isDesktop) =\u003e {\n    const cls = isDesktop ? \"ct-static__item\" : \"ct-usp-item\";\n    return `\n      \u003cli class=\"${cls}\"\u003e\n        \u003cimg class=\"ct-usp__icon\" src=\"${it.icon}\" alt=\"\"\u003e\n        \u003cspan class=\"ct-usp__label\"\u003e${it.label}\u003c/span\u003e\n      \u003c/li\u003e\n    `;\n  };\n\n  const renderDesktop = (items) =\u003e {\n    const box = document.querySelector(`#${ID} .ct-static`);\n    if (box) box.innerHTML = items.map((it) =\u003e itemHTML(it, true)).join(\"\");\n  };\n\n  const renderMobile = (items) =\u003e {\n    const track = document.querySelector(`#${ID} .ct-track`);\n    if (!track) return;\n    track.innerHTML = items\n      .map(\n        (it, i) =\u003e `\n        \u003cdiv class=\"ct-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"${i + 1} of ${items.length}\"\u003e\n          ${itemHTML(it, false)}\n        \u003c/div\u003e\n      `\n      )\n      .join(\"\");\n  };\n\n  // Carousel state\n  let idx = 0;\n  let timer = null;\n  const AUTO_MS = 3000;\n  let paused = false;\n  let startX = 0, dx = 0, dragging = false;\n\n  const getEls = () =\u003e {\n    const wrap = document.getElementById(ID);\n    return {\n      wrap,\n      carousel: wrap?.querySelector(\".ct-carousel\"),\n      track: wrap?.querySelector(\".ct-track\"),\n      slides: wrap?.querySelectorAll(\".ct-slide\") || [],\n    };\n  };\n\n  const applyTransform = (i, animate = true) =\u003e {\n    const { track } = getEls();\n    if (!track) return;\n    track.style.transition = animate ? \"transform 300ms ease\" : \"none\";\n    track.style.transform = `translate3d(${-i * window.innerWidth}px,0,0)`;\n  };\n\n  const next = (len) =\u003e {\n    idx = (idx + 1) % len;\n    applyTransform(idx);\n  };\n  const prev = (len) =\u003e {\n    idx = (idx - 1 + len) % len;\n    applyTransform(idx);\n  };\n\n  const stopAuto = () =\u003e {\n    if (timer) clearInterval(timer);\n    timer = null;\n  };\n\n  const startAuto = (len) =\u003e {\n    if (prefersReduced()) return;\n    stopAuto();\n    if (paused) return;\n    timer = setInterval(() =\u003e next(len), AUTO_MS);\n  };\n\n  const bindMobileInteractions = (len) =\u003e {\n    const { carousel, track } = getEls();\n    if (!carousel || !track) return;\n\n    const pause = () =\u003e {\n      paused = true;\n      stopAuto();\n    };\n    const resume = () =\u003e {\n      paused = false;\n      startAuto(len);\n    };\n\n    carousel.addEventListener(\"mouseenter\", pause, { passive: true });\n    carousel.addEventListener(\"mouseleave\", resume, { passive: true });\n    carousel.addEventListener(\"focusin\", pause, { passive: true });\n    carousel.addEventListener(\"focusout\", resume, { passive: true });\n\n    const onStart = (x) =\u003e {\n      dragging = true;\n      startX = x;\n      dx = 0;\n      stopAuto();\n      track.style.transition = \"none\";\n    };\n    const onMove = (x) =\u003e {\n      if (!dragging) return;\n      dx = x - startX;\n      track.style.transform = `translate3d(${\n        -idx * window.innerWidth + dx\n      }px,0,0)`;\n    };\n    const onEnd = () =\u003e {\n      if (!dragging) return;\n      dragging = false;\n      const threshold = Math.min(120, window.innerWidth * 0.2);\n      if (dx \u003c= -threshold) next(len);\n      else if (dx \u003e= threshold) prev(len);\n      else applyTransform(idx);\n      if (!prefersReduced() \u0026\u0026 !paused) startAuto(len);\n    };\n\n    carousel.addEventListener(\"touchstart\", (e) =\u003e onStart(e.touches[0].clientX), { passive: true });\n    carousel.addEventListener(\"touchmove\", (e) =\u003e onMove(e.touches[0].clientX), { passive: true });\n    carousel.addEventListener(\"touchend\", onEnd, { passive: true });\n\n    document.addEventListener(\"visibilitychange\", () =\u003e {\n      if (document.hidden) stopAuto();\n      else if (!paused \u0026\u0026 isMobileBP()) startAuto(len);\n    });\n  };\n\n  const applyMode = (items) =\u003e {\n    const wrap = document.getElementById(ID);\n    if (!wrap) return;\n    const carousel = wrap.querySelector(\".ct-carousel\");\n    const staticBox = wrap.querySelector(\".ct-static\");\n\n    if (isMobileBP()) {\n      wrap.classList.remove(\"is-desktop\");\n      staticBox.style.display = \"none\";\n      carousel.style.display = \"block\";\n      renderMobile(items);\n      idx = 0;\n      applyTransform(idx, false);\n      bindMobileInteractions(items.length);\n      startAuto(items.length);\n    } else {\n      wrap.classList.add(\"is-desktop\");\n      stopAuto();\n      if (carousel) carousel.style.display = \"none\";\n      staticBox.style.display = \"flex\";\n      renderDesktop(items);\n    }\n  };\n\n  async function initStrip() {\n    if (!isPDP()) return;\n\n    const src =\n      document.getElementById(\"speero-365-usp\") ||\n      document.getElementById(\"USP-Slice-Container\");\n\n    if (!src) return;\n\n    const items = extractItems(src);\n    if (!items.length) return;\n\n    injectStyles();\n    const shell = buildShell();\n\n    if (isMobileBP()) {\n      try {\n        const mobileAnchor = await waitFor(\".js-header-wrapper\");\n        mobileAnchor.insertAdjacentElement(\"afterend\", shell);\n        log(\"Injected after .js-header-wrapper (mobile)\");\n      } catch (e) {\n        return;\n      }\n    } else {\n      const header = document.querySelector(\"#header\");\n      if (!header) return;\n      header.appendChild(shell);\n      log(\"Injected inside #header (desktop)\");\n    }\n\n    try {\n      src.remove();\n    } catch (_) {}\n\n    applyMode(items);\n\n    window.addEventListener(\n      \"resize\",\n      () =\u003e {\n        applyMode(items);\n        if (isMobileBP()) applyTransform(idx, false);\n      },\n      { passive: true }\n    );\n  }\n\n  // ==================================================\n  // Run\n  // ==================================================\n  if (!isPDP()) return;\n\n  poll(\".pdp-main__more-info\", () =\u003e {\n    const ud = window.utag_data || {};\n    const g  = ud.global || {};\n    const countryRaw = (g.sfcc_country || \"\").toUpperCase();\n\n    let built = false;\n    if (countryRaw === \"UK\" || countryRaw === \"US\") {\n      built = module365.buildUSPs();\n    } else {\n      built = buildIntlUSPs();\n    }\n\n    if (built) {\n      initStrip();\n    }\n  }, 30, 200);\n})();\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"68adffa7ca8a419f161f3127"},{"uses_overlay":false,"type":"js","parametrized_definition":"/* CT — DigitalGenius Chat: unified loader for country groups\n   - US: page-type specific proactive config + delayed (60s) enable\n   - UK/DE/AU/EU: country-specific widgetId/locale (no proactive)\n   - Injects #dg-chat z-index fix\n   - Creates required DOM nodes\n*/\n(function () {\n  const FLAG = \"__CT_DG_CHAT_UNIFIED__\";\n  if (window[FLAG]) return;\n  window[FLAG] = true;\n\n  // ---- Helpers --------------------------------------------------------------\n  function get(obj, path, fallback) {\n    try {\n      return path.split(\".\").reduce((o, k) =\u003e (o == null ? o : o[k]), obj) ?? fallback;\n    } catch (e) {\n      return fallback;\n    }\n  }\n\n  function loadScriptOnce(src, id) {\n    return new Promise((resolve, reject) =\u003e {\n      if (document.getElementById(id)) return resolve(\"exists\");\n      const s = document.createElement(\"script\");\n      s.id = id;\n      s.async = true;\n      s.src = src;\n      s.onload = () =\u003e resolve(\"loaded\");\n      s.onerror = (e) =\u003e reject(e);\n      document.head.appendChild(s);\n    });\n  }\n\n  function ensureNode(selector, createFn) {\n    let el = document.querySelector(selector);\n    if (!el) {\n      el = createFn();\n      document.body.appendChild(el);\n    }\n    return el;\n  }\n\n  function injectStyle(css, id) {\n    if (id \u0026\u0026 document.getElementById(id)) return;\n    const st = document.createElement(\"style\");\n    if (id) st.id = id;\n    st.textContent = css;\n    document.head.appendChild(st);\n  }\n\n  // ---- Context --------------------------------------------------------------\n  const ud = window.utag_data || {};\n  const pageType = get(ud, \"page.type\", \"\");\n  const pageName = get(ud, \"page.name\", \"\");\n  const country = get(ud, \"global.sfcc_country\", \"UK\");\n\n  const isUS = country === \"US\";\n  const isAllowedROW = [\"UK\", \"DE\", \"AU\", \"EU\"].includes(country);\n\n  // If not in any supported country, do nothing.\n  if (!isUS \u0026\u0026 !isAllowedROW) return;\n\n  // ---- Required DOM ---------------------------------------------------------\n  // Matches originals: a static-position div and the DG container.\n  ensureNode(\"#dg-chat-container\", () =\u003e {\n    const d = document.createElement(\"div\");\n    d.id = \"dg-chat-container\";\n    return d;\n  });\n  // The US snippet had an extra static div; harmless everywhere.\n  ensureNode(\"div[data-ct-dg-static]\", () =\u003e {\n    const d = document.createElement(\"div\");\n    d.setAttribute(\"data-ct-dg-static\", \"true\");\n    d.setAttribute(\"style\", \"position: static !important;\");\n    return d;\n  });\n\n  // ---- Config per region ----------------------------------------------------\n  const DG_BASE = {\n    env: \"eu\"\n  };\n\n  // US: page-type specific proactive message text (enabled after 60s)\n  if (isUS) {\n    let proactiveQuestions = null;\n\n    if ([\"product\", \"product set\", \"category\"].includes(pageType)) {\n      proactiveQuestions = [\"Do you have any questions about our products or sizing? We are here to help!\"];\n    } else if (pageName === \"basket\" || pageType === \"checkout\") {\n      proactiveQuestions = [\"You’re almost there! Is there anything we can help with?\"];\n    }\n\n    window.DG_CHAT_WIDGET_CONFIG = {\n      widgetId: \"ce95e9a2-4c33-4344-8aac-877b7d00890a\",\n      env: DG_BASE.env,\n      callbacks: {\n        onChatLauncherClick: () =\u003e {\n           exponea.track('Open Chat', {\n        \t\taction: 'conversation_started',\n\n    \t\t});\n        }\n      },\n      locale: \"en-US\",\n      metadata: { countryCode: \"US\" },\n      generalSettings: {},\n      ...(proactiveQuestions\n        ? {\n            proactiveButtonsSettings: {\n              isEnabled: false,\n              questions: proactiveQuestions\n            }\n          }\n        : {})\n    };\n  }\n\n  // UK/DE/AU/EU: country-mapped widget/locale, no proactive\n  if (isAllowedROW) {\n    let storedWidgetId = \"\";\n    let storedLocale = \"\";\n    let storedCountryCode = \"\";\n\n    switch (country) {\n      case \"DE\":\n        storedWidgetId = \"656e5a02-b271-456a-920f-7300034b542a\";\n        storedLocale = \"de-DE\";\n        storedCountryCode = \"DE\";\n        break;\n      case \"UK\":\n        storedWidgetId = \"ce95e9a2-4c33-4344-8aac-877b7d00890a\";\n        storedLocale = \"en-GB\";\n        storedCountryCode = \"GB\";\n        break;\n      case \"EU\":\n        storedWidgetId = \"ce95e9a2-4c33-4344-8aac-877b7d00890a\";\n        storedLocale = \"en-GB\";\n        storedCountryCode = \"EU\";\n        break;\n      case \"AU\":\n        storedWidgetId = \"ce95e9a2-4c33-4344-8aac-877b7d00890a\";\n        storedLocale = \"en-GB\";\n        storedCountryCode = \"AUS\";\n        break;\n    }\n\n    // Only set if not US (to keep US-specific config intact)\n    if (!isUS) {\n      window.DG_CHAT_WIDGET_CONFIG = {\n        widgetId: storedWidgetId,\n        env: DG_BASE.env,\n        locale: storedLocale,\n          callbacks: {\n        onChatLauncherClick: () =\u003e {\n            exponea.track('Open Chat', {\n        \t\taction: 'conversation_started',\n\n    \t\t});\n        }\n      },\n        metadata: { countryCode: storedCountryCode }\n      };\n    }\n  }\n\n  // ---- Load + init ----------------------------------------------------------\n  loadScriptOnce(\"https://chat.digitalgenius.com/init.js\", \"ct-dg-init-js\")\n    .then(() =\u003e {\n      if (window.dgchat \u0026\u0026 typeof window.dgchat.init === \"function\") {\n        window.dgchat.init();\n      }\n\n      // z-index CSS fix (global)\n      injectStyle(\"#dg-chat { z-index:11 !important; }\", \"ct-dg-zfix\");\n\n      // US: After 60s on PDP/PLP/Basket/Checkout, enable proactive buttons \u0026 re-init\n      if (isUS) {\n        const shouldEnableLater =\n          [\"product\", \"product set\", \"category\"].includes(pageType) ||\n          pageName === \"basket\" ||\n          pageType === \"checkout\";\n\n        if (shouldEnableLater) {\n          setTimeout(function () {\n            try {\n              if (!window.DG_CHAT_WIDGET_CONFIG.proactiveButtonsSettings) return;\n              window.DG_CHAT_WIDGET_CONFIG.proactiveButtonsSettings.isEnabled = false;\n              if (window.dgchat?.methods?.initProactiveButtons) {\n                window.dgchat.methods.initProactiveButtons();\n              }\n            } catch (e) {\n              // swallow\n            }\n          }, 60000);\n        }\n      }\n    })\n    .catch((e) =\u003e {\n      // fail silently but log to console for QA\n      if (window.console \u0026\u0026 console.error) {\n        console.error(\"[CT DG Chat] failed to load init.js\", e);\n      }\n    });\n     const css = `\n    @media only screen and (max-width: 800px) {\n      #dg-chat-widget, #dg-chat-widget-placeholder {\n        left: 10% !important;\n        width: 80% !important;\n        border-radius: 0.5rem !important;\n      }\n    }\n  `;\n  $('\u003cstyle\u003e', { text: css }).appendTo('head');\n})();\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"68beaab72ff853b5879139b2"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function () {\n  const ID = \"ct-oc-appointment-banner\";\n  const STYLE_ID = ID + \"-styles\";\n  const BG_URL = \"https://www.charlestyrwhitt.com/dw/image/v2/AAWJ_PRD/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dw9aeaf8bd/merchAssets/content/new-homepage/hp4-storeapp-desktop.jpg?sw=1440\";\n  const LINK = \"https://www.charlestyrwhitt.com/uk/store-appointments.html\";\n\n  // ====== Gating ======\n  if (!(window.utag_data \u0026\u0026 utag_data.global \u0026\u0026 utag_data.page)) return;\n  if (utag_data.global.sfcc_country !== \"UK\") return;\n  if (utag_data.page.name !== \"Checkout-Confirmation\") return;\n\n  const target = document.querySelector(\".js-save-details-content\");\n  if (!target) return;\n\n  const bag = Array.isArray(utag_data.bag) ? utag_data.bag : [];\n  const hasSuit = bag.some((it) =\u003e {\n    const id = String(it?.id || \"\").toUpperCase();\n    const cat = String(it?.category || it?.category_name || \"\").toLowerCase();\n    const type = String(it?.product_type || \"\").toLowerCase();\n    const name = String(it?.name || \"\").toLowerCase();\n    return (\n      id.includes(\"SUT\") ||\n      cat.includes(\"suit\") ||\n      type.includes(\"suit\") ||\n      name.includes(\"suit\")\n    );\n  });\n  if (hasSuit) return;\n\n  document.getElementById(ID)?.remove();\n  document.getElementById(STYLE_ID)?.remove();\n\n  // ====== Styles ======\n  const css = `\n    #${ID} {\n      width: 100%;\n      border-radius: 8px;\n      overflow: hidden;\n      margin: 16px 0;\n    }\n    #${ID} .${ID}-link {\n      display: block;\n      text-decoration: none;\n      color: inherit;\n      cursor: pointer;\n    }\n    #${ID} .${ID}-bg {\n      position: relative;\n      width: 100%;\n      min-height: 220px;\n      background-image: url(\"${BG_URL}\");\n      background-size: cover;\n      background-position: center;\n    }\n    #${ID} .${ID}-overlay {\n      position: absolute;\n      inset: 0;\n      background: rgba(55,55,55,0.4);\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      text-align: center;\n      padding: 24px;\n    }\n    #${ID} .${ID}-text {\n      color: #fff;\n      max-width: 1000px;\n      width: 100%;\n    }\n    #${ID} .${ID}-headline,\n    #${ID} .ct-oc-appointment-banner-headline {\n      text-transform: uppercase;\n      font-size: 28px;\n      line-height: 1.1;\n      font-weight: 700;\n      letter-spacing: 0.2px;\n    }\n    #${ID} .${ID}-subline {\n      margin-top: 8px;\n      font-size: 20px;\n      font-weight: 400;\n    }\n    #${ID} .${ID}-subline strong {\n      font-weight: 500;\n    }\n    #${ID} .${ID}-disclaimer {\n      margin-top: 6px;\n      font-size: 14px;\n      font-weight: 300;\n      opacity: 0.9;\n    }\n    #${ID} .${ID}-cta { margin-top: 16px; }\n    #${ID} .${ID}-cta .btn {\n      display: inline-block;\n      width: 220px;\n      padding: 12px 16px;\n      background: #373737;\n      color: #fff;\n      text-align: center;\n      border: none;\n      border-radius: 3px;\n    }\n    @media (min-width: 768px) {\n      #${ID} .${ID}-bg { min-height: 260px; }\n      #${ID} .${ID}-headline,\n      #${ID} .ct-oc-appointment-banner-headline { font-size: 48px; }\n    }\n  `;\n  const style = document.createElement(\"style\");\n  style.id = STYLE_ID;\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  // ====== Markup ======\n  const wrap = document.createElement(\"div\");\n  wrap.id = ID;\n  wrap.setAttribute(\"role\", \"region\");\n  wrap.setAttribute(\"aria-label\", \"In-store appointment promotion\");\n\n  wrap.innerHTML = `\n    \u003ca class=\"${ID}-link\" href=\"${LINK}\" aria-label=\"Book an in-store appointment\"\u003e\n      \u003cdiv class=\"${ID}-bg\"\u003e\n        \u003cdiv class=\"${ID}-overlay\"\u003e\n          \u003cdiv class=\"${ID}-text\"\u003e\n            \u003cdiv class=\"${ID}-headline ct-oc-appointment-banner-headline\"\u003e10% Off Suits\u003c/div\u003e\n            \u003cdiv class=\"${ID}-subline\"\u003e\n              Book an appointment and \u003cstrong\u003euse code APPT10 in store to claim\u003c/strong\u003e\n            \u003c/div\u003e\n            \u003cdiv class=\"${ID}-disclaimer\"\u003eOffer code only valid in store\u003c/div\u003e\n            \u003cdiv class=\"${ID}-cta\"\u003e\n              \u003cspan class=\"btn\" role=\"presentation\"\u003eBook Appointment\u003c/span\u003e\n            \u003c/div\u003e\n          \u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/a\u003e\n  `;\n\n  target.parentNode.insertBefore(wrap, target);\n\n  // ====== Tracking ======\n  const linkEl = wrap.querySelector(`.${ID}-link`);\n  const trackClick = () =\u003e {\n    try {\n      if (window.exponea \u0026\u0026 typeof exponea.track === \"function\") {\n        exponea.track(\"Clicked Order Conf CTA\", {});\n      }\n    } catch (e) { /* no-op */ }\n  };\n  linkEl.addEventListener(\"click\", trackClick, { capture: true, passive: true });\n})();\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"68bf4243529553f95e296a65"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function () {\r\n  const ID = \"ct-custom-plp\";\r\n  const STYLE_ID = ID + \"-styles\";\r\n  const LOG = (...a) =\u003e console.debug(`[${ID}]`, ...a);\r\n\r\n  // ===== Guards =====\r\n  if (!window.utag_data || !utag_data.page || !utag_data.global) return;\r\n  if (utag_data.page.name !== \"made-with-liberty-fabric\" \u0026\u0026 utag_data.page.name !== \"custom\") return;\r\n\r\n  const country = utag_data.global.sfcc_country;\r\n  if (country !== \"UK\" \u0026\u0026 country !== \"US\") return;\r\n\r\n  // ===== Styles =====\r\n  if (!document.getElementById(STYLE_ID)) {\r\n    const link = document.createElement(\"link\");\r\n    link.rel = \"stylesheet\";\r\n    link.href = \"https://fonts.googleapis.com/css2?family=Lato:wght@400;700;900\u0026display=swap\";\r\n    document.head.appendChild(link);\r\n\r\n    const style = document.createElement(\"style\");\r\n    style.id = STYLE_ID;\r\n    style.textContent = `\r\n      .custom-plp-tag{\r\n        display:inline-block;position:relative;padding:2px 2rem;border-radius:18px;\r\n        color:#373737;font-weight:700;font-family:Lato,sans-serif;font-size:12px;\r\n        width:fit-content;margin-top:8px;text-decoration:none !important;\r\n        background:linear-gradient(#fff,#fff) padding-box,\r\n                   linear-gradient(90deg,#F4B877 0%,#EC967D 15%,#D06D88 30%,#A6699F 45%,#7B63AE 60%,#5757B1 75%,#4852B1 100%) border-box;\r\n        border:2px solid transparent;\r\n      }\r\n      .js-thumb-was-price{\r\n      \tdisplay: none;\r\n      }\r\n    `;\r\n    document.head.appendChild(style);\r\n  }\r\n\r\n  // ===== URL base =====\r\n  // ===== URL base =====\r\n  const { origin } = window.location;\r\n\r\n  // Force /uk/ or /us/ in the base\r\n  let baseURL = origin;\r\n  if (country === \"UK\") {\r\n    baseURL += \"/uk\";\r\n  } else if (country === \"US\") {\r\n    baseURL += \"/us\";\r\n  }\r\n\r\n\r\n  // ===== Catalog =====\r\n  const customProducts = {\r\n  product1: {\r\n    id: \"CFN0003WHT\",\r\n    image: \"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/merchAssets/content/custom/Pre%2Dbuilt/prebuilt1%5FFULL.jpg\",\r\n    link: baseURL + \"/custom/build-your-shirt?pid=CFN0003WHT\u0026Quantity=1\u0026csBackStyle=NA\u0026csSizeAndFit=NA\u0026csButton=white\u0026csCollarStyle=classic\u0026csContrastFabric=Y\u0026csContrastFabricLocation=inside-collar-cuff\u0026csContrastFabricReference=CFL0024NAV\u0026csContrastStitch=Y\u0026csContrastStitchColour=silver\u0026csContrastStitchLocation=all-button-holes\u0026csCuffAdjustment=Y\u0026csCuffStyle=rounded-onebutton\u0026csEngravingCollarStay=NA\u0026csGauntletButton=Y\u0026csLeftCuffWatch=NA\u0026csMonogram=NA\u0026monograminitials=NA\u0026csMonogramColour=NA\u0026csMonogramFont=NA\u0026csMonogramLocation=NA\u0026csPiping=Y\u0026csPipingColour=silver\u0026csPipingLocation=collar-cuff\u0026csPlacketStyle=NA\u0026csPocketStyle=NA\u0026csRightCuffWatch=NA\u0026source=cart\u0026pf=PLP-custom-product-tile-1\u0026pf=cs_otp\u0026cm_sp=CS_PLP_Product_Tile\",\r\n    UKprice: \"£79\",\r\n    USprice: \"$129\"\r\n  },\r\n\r\n  product2: {\r\n    id: \"CFL0021WHT\",\r\n    image: \"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/merchAssets/content/custom/Pre%2Dbuilt/prebuilt_NEW_FULL.jpg\",\r\n    link: baseURL + \"/custom/build-your-shirt?pid=CFN0046LLC\u0026Quantity=1\u0026csBackStyle=back-pleat\u0026csSizeAndFit=NA\u0026csButton=light-blue\u0026csCollarStyle=cutaway\u0026csContrastFabric=Y\u0026csContrastFabricLocation=inside-collar-cuff\u0026csContrastFabricReference=CFB0036STL\u0026csContrastStitch=Y\u0026csContrastStitchColour=lavender\u0026csContrastStitchLocation=all-button-holes\u0026csCuffAdjustment=NA\u0026csCuffStyle=rounded-one-button\u0026csEngravingCollarStay=NA\u0026csGauntletButton=NA\u0026csLeftCuffWatch=NA\u0026csMonogram=NA\u0026monograminitials=NA\u0026csMonogramColour=NA\u0026csMonogramFont=NA\u0026csMonogramLocation=NA\u0026csPiping=Y\u0026csPipingColour=silver\u0026csPipingLocation=collar-cuff\u0026csPlacketStyle=standard\u0026csPocketStyle=NA\u0026csRightCuffWatch=NA\u0026source=cart\u0026pf=cs_edit\u0026cm_sp=CS_PLP_Product_Tile\",\r\n    UKprice: \"£79\",\r\n    USprice: \"$129\"\r\n  },\r\n\r\n  product3: {\r\n    id: \"CFN0053LBU\",\r\n    image: \"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/merchAssets/content/custom/Pre%2Dbuilt/prebuilt3%5FFULL.jpg\",\r\n    link: baseURL + \"/custom/build-your-shirt?pid=CFN0053LBU\u0026Quantity=1\u0026csBackStyle=NA\u0026csSizeAndFit=NA\u0026csButton=white\u0026csCollarStyle=semi-cutaway\u0026csContrastFabric=Y\u0026csContrastFabricLocation=inside-collar-cuff\u0026csContrastFabricReference=CFN0052SPK\u0026csContrastStitch=Y\u0026csContrastStitchColour=pink\u0026csContrastStitchLocation=all-cross-stitch-buttons\u0026csCuffAdjustment=Y\u0026csCuffStyle=rounded-onebutton\u0026csEngravingCollarStay=NA\u0026csGauntletButton=NA\u0026csLeftCuffWatch=NA\u0026csMonogram=NA\u0026monograminitials=NA\u0026csMonogramColour=NA\u0026csMonogramFont=NA\u0026csMonogramLocation=NA\u0026csPiping=Y\u0026csPipingColour=pink\u0026csPipingLocation=collar-cuff\u0026csPlacketStyle=NA\u0026csPocketStyle=NA\u0026csRightCuffWatch=NA\u0026source=cart\u0026pf=PLP-custom-product-tile-3\u0026pf=cs_otp\u0026cm_sp=CS_PLP_Product_Tile\",\r\n    UKprice: \"£99\",\r\n    USprice: \"$149\"\r\n  },\r\n\r\n  product4: {\r\n    id: \"CFR0006BLK\",\r\n    image: \"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/merchAssets/content/custom/Pre%2Dbuilt/prebuilt4%5FFULL.jpg\",\r\n    link: baseURL + \"/custom/build-your-shirt?pid=CFR0006BLK\u0026Quantity=1\u0026csBackStyle=NA\u0026csSizeAndFit=NA\u0026csButton=charcoal\u0026csCollarStyle=classic\u0026csContrastFabric=NA\u0026csContrastStitch=Y\u0026csContrastStitchColour=silver\u0026csContrastStitchLocation=all-button-holes\u0026csCuffAdjustment=Y\u0026csCuffStyle=rounded-onebutton\u0026csEngravingCollarStay=NA\u0026csGauntletButton=NA\u0026csLeftCuffWatch=NA\u0026csMonogram=NA\u0026monograminitials=NA\u0026csMonogramColour=NA\u0026csMonogramFont=NA\u0026csMonogramLocation=NA\u0026csPiping=Y\u0026csPipingColour=silver\u0026csPipingLocation=collar-cuff\u0026csPlacketStyle=french\u0026csPocketStyle=NA\u0026csRightCuffWatch=NA\u0026source=cart\u0026pf=PLP-custom-product-tile-4\u0026pf=cs_otp\u0026cm_sp=CS_PLP_Product_Tile\",\r\n    UKprice: \"£99\",\r\n    USprice: \"$149\"\r\n  },\r\n\r\n  product5: {\r\n    id: \"CFN0009SKY\",\r\n    image: \"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/merchAssets/content/custom/Pre%2Dbuilt/prebuilt5%5FFULL.jpg\",\r\n    link: baseURL + \"/custom/build-your-shirt?pid=CFN0009SKY\u0026Quantity=1\u0026csBackStyle=NA\u0026csSizeAndFit=NA\u0026csButton=white\u0026csCollarStyle=classic\u0026csContrastFabric=Y\u0026csContrastFabricLocation=outside-collar-cuff\u0026csContrastFabricReference=CFN0002WHT\u0026csContrastStitch=Y\u0026csContrastStitchColour=navy\u0026csContrastStitchLocation=all-button-holes\u0026csCuffAdjustment=Y\u0026csCuffStyle=french-square\u0026csEngravingCollarStay=NA\u0026csGauntletButton=NA\u0026csLeftCuffWatch=NA\u0026csMonogram=NA\u0026monograminitials=NA\u0026csMonogramColour=NA\u0026csMonogramFont=NA\u0026csMonogramLocation=NA\u0026csPiping=Y\u0026csPipingColour=navy\u0026csPipingLocation=collar-cuff\u0026csPlacketStyle=standard\u0026csPocketStyle=NA\u0026csRightCuffWatch=NA\u0026source=cart\u0026pf=PLP-custom-product-tile-5\u0026pf=cs_otp\u0026cm_sp=CS_PLP_Product_Tile\",\r\n    UKprice: \"£99\",\r\n    USprice: \"$129\"\r\n  },\r\n\r\n  product6: {\r\n    id: \"CFR0020NKB\",\r\n    image: \"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/merchAssets/content/custom/Pre%2Dbuilt/prebuilt6%5FFULL.jpg\",\r\n    link: baseURL + \"/custom/build-your-shirt?pid=CFR0020NKB\u0026Quantity=1\u0026csBackStyle=NA\u0026csSizeAndFit=NA\u0026csButton=charcoal\u0026csCollarStyle=classic\u0026csContrastFabric=Y\u0026csContrastFabricLocation=inside-collar-cuff\u0026csContrastFabricReference=CFL0027NKB\u0026csContrastStitch=NA\u0026csContrastStitchColour=NA\u0026csContrastStitchLocation=NA\u0026csCuffAdjustment=Y\u0026csCuffStyle=rounded-two-buttons\u0026csEngravingCollarStay=NA\u0026csGauntletButton=NA\u0026csLeftCuffWatch=NA\u0026csMonogram=NA\u0026monograminitials=NA\u0026csMonogramColour=NA\u0026csMonogramFont=NA\u0026csMonogramLocation=NA\u0026csPiping=Y\u0026csPipingColour=navy\u0026csPipingLocation=collar-cuff\u0026csPlacketStyle=french\u0026csPocketStyle=NA\u0026csRightCuffWatch=NA\u0026source=cart\u0026pf=PLP-custom-product-tile-6\u0026pf=cs_otp\u0026cm_sp=CS_PLP_Product_Tile\",\r\n    UKprice: \"£79\",\r\n    USprice: \"$149\"\r\n  },\r\n\r\n  product7: {\r\n    id: \"CFN0024WHT\",\r\n    image: \"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/merchAssets/content/custom/Pre%2Dbuilt/prebuilt7%5FFULL.jpg\",\r\n    link: baseURL + \"/custom/build-your-shirt?pid=CFN0024WHT\u0026Quantity=1\u0026csBackStyle=NA\u0026csSizeAndFit=NA\u0026csButton=white\u0026csCollarStyle=button-down\u0026csContrastFabric=Y\u0026csContrastFabricLocation=inside-collar-cuff\u0026csContrastFabricReference=CFB0036STL\u0026csContrastStitch=Y\u0026csContrastStitchColour=brown\u0026csContrastStitchLocation=all-cross-stitch-buttons\u0026csCuffAdjustment=Y\u0026csCuffStyle=mitered-one-buttons\u0026csEngravingCollarStay=NA\u0026csGauntletButton=NA\u0026csLeftCuffWatch=NA\u0026csMonogram=NA\u0026monograminitials=NA\u0026csMonogramColour=NA\u0026csMonogramFont=NA\u0026csMonogramLocation=NA\u0026csPiping=Y\u0026csPipingColour=brown\u0026csPipingLocation=collar-cuff\u0026csPlacketStyle=french\u0026csPocketStyle=NA\u0026csRightCuffWatch=NA\u0026source=cart\u0026pf=PLP-custom-product-tile-7\u0026pf=cs_otp\u0026cm_sp=CS_PLP_Product_Tile\",\r\n    UKprice: \"£79\",\r\n    USprice: \"$149\"\r\n  },\r\n\r\n  product8: {\r\n    id: \"CFN0003PNK\",\r\n    image: \"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/merchAssets/content/custom/Pre%2Dbuilt/prebuilt8%5FFULL.jpg\",\r\n    link: baseURL + \"/custom/build-your-shirt?pid=CFN0003PNK\u0026Quantity=1\u0026csBackStyle=NA\u0026csSizeAndFit=NA\u0026csButton=white\u0026csCollarStyle=classic\u0026csContrastFabric=Y\u0026csContrastFabricLocation=outside-collar-cuff\u0026csContrastFabricReference=CFN0002WHT\u0026csContrastStitch=Y\u0026csContrastStitchColour=pink\u0026csContrastStitchLocation=all-button-holes\u0026csCuffAdjustment=Y\u0026csCuffStyle=french-rounded\u0026csEngravingCollarStay=NA\u0026csGauntletButton=NA\u0026csLeftCuffWatch=NA\u0026csMonogram=NA\u0026monograminitials=NA\u0026csMonogramColour=NA\u0026csMonogramFont=NA\u0026csMonogramLocation=NA\u0026csPiping=NA\u0026csPipingColour=NA\u0026csPipingLocation=NA\u0026csPlacketStyle=standard\u0026csPocketStyle=NA\u0026csRightCuffWatch=NA\u0026source=cart\u0026pf=PLP-custom-product-tile-8\u0026pf=cs_otp\u0026cm_sp=CS_PLP_Product_Tile\",\r\n    UKprice: \"£79\",\r\n    USprice: \"$129\"\r\n  },\r\n\r\n  product9: {\r\n    id: \"CFL0027VRY\",\r\n    image: \"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/merchAssets/content/custom/Pre%2Dbuilt/prebuilt9%5FFULL.jpg\",\r\n    link: baseURL + \"/custom/build-your-shirt?pid=CFL0027VRY\u0026Quantity=1\u0026csBackStyle=NA\u0026csSizeAndFit=NA\u0026csButton=light-brown\u0026csCollarStyle=classic\u0026csContrastStitch=Y\u0026csContrastStitchColour=maroon\u0026csContrastStitchLocation=all-button-holes\u0026csCuffAdjustment=Y\u0026csCuffStyle=rounded-onebutton\u0026csEngravingCollarStay=NA\u0026csGauntletButton=NA\u0026csLeftCuffWatch=NA\u0026csMonogram=NA\u0026monograminitials=NA\u0026csMonogramColour=NA\u0026csMonogramFont=NA\u0026csMonogramLocation=NA\u0026csPiping=NA\u0026csPipingColour=NA\u0026csPipingLocation=NA\u0026csPlacketStyle=standard\u0026csPocketStyle=NA\u0026csRightCuffWatch=NA\u0026source=cart\u0026pf=PLP-custom-product-tile-9\u0026pf=cs_otp\u0026cm_sp=CS_PLP_Product_Tile\",\r\n    UKprice: \"£139\",\r\n    USprice: \"$179\"\r\n  },\r\n\r\n  product10: {\r\n    id: \"CFB0038SGE\",\r\n    image: \"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/merchAssets/content/custom/Pre%2Dbuilt/prebuilt10%5FFULL.jpg\",\r\n    link: baseURL + \"/custom/build-your-shirt?pid=CFB0038SGE\u0026Quantity=1\u0026csBackStyle=NA\u0026csSizeAndFit=NA\u0026csButton=mid-brown\u0026csCollarStyle=classic\u0026csContrastStitch=Y\u0026csContrastStitchColour=maroon\u0026csContrastStitchLocation=all-button-holes\u0026csCuffAdjustment=Y\u0026csCuffStyle=square-two-buttons\u0026csEngravingCollarStay=NA\u0026csGauntletButton=NA\u0026csLeftCuffWatch=NA\u0026csMonogram=NA\u0026monograminitials=NA\u0026csMonogramColour=NA\u0026csMonogramFont=NA\u0026csMonogramLocation=NA\u0026csPiping=NA\u0026csPipingColour=NA\u0026csPipingLocation=NA\u0026csPlacketStyle=standard\u0026csPocketStyle=NA\u0026csRightCuffWatch=NA\u0026source=cart\u0026pf=PLP-custom-product-tile-10\u0026pf=cs_otp\u0026cm_sp=CS_PLP_Product_Tile\",\r\n    UKprice: \"£79\",\r\n    USprice: \"$129\"\r\n  },\r\n\r\n  product11: {\r\n    id: \"CFN0022WSK\",\r\n    image: \"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/merchAssets/content/custom/Pre%2Dbuilt/preBuiltCFN0022WSK.jpg\",\r\n    link: baseURL + \"/custom/build-your-shirt?pid=CFN0022WSK\u0026Quantity=1\u0026csBackStyle=back-pleat\u0026csSizeAndFit=NA\u0026csButton=white\u0026csCollarSize=16.5\u0026csCollarStyle=classic\u0026csContrastFabric=Y\u0026csContrastFabricLocation=outside-collar-cuff\u0026csContrastFabricReference=CFN0002WHT\u0026csContrastStitch=Y\u0026csContrastStitchColour=light-blue\u0026csContrastStitchLocation=all-button-holes\u0026csCuffAdjustment=NA\u0026csCuffStyle=french-rounded\u0026csEngravingCollarStay=NA\u0026csFit=slim-fit\u0026csGauntletButton=NA\u0026csLeftCuffWatch=NA\u0026csMonogram=NA\u0026monograminitials=NA\u0026csMonogramColour=NA\u0026csMonogramFont=NA\u0026csMonogramLocation=NA\u0026csPiping=Y\u0026csPipingColour=navy\u0026csPipingLocation=collar-cuff\u0026csPlacketStyle=standard\u0026csPocketStyle=NA\u0026csRightCuffWatch=NA\u0026csSleeveLength=34\u0026source=cart\u0026pf=cs_edit\u0026cm_sp=CS_PLP_Product_Tile\",\r\n    UKprice: \"£79\",\r\n    USprice: \"$129\"\r\n  },\r\n\r\n  product12: {\r\n    id: \"CFN0039HEB\",\r\n    image: \"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/merchAssets/content/custom/Pre%2Dbuilt/prebuiltNew.jpg\",\r\n    link: baseURL + \"/custom/build-your-shirt?pid=CFN0039HEB\u0026Quantity=1\u0026csBackStyle=back-pleat\u0026csSizeAndFit=NA\u0026csButton=smoke\u0026csCollarSize=15\u0026csCollarStyle=cutaway\u0026csContrastFabric=Y\u0026csContrastFabricLocation=inside-collar-cuff\u0026csContrastFabricReference=CFL0029MBU\u0026csContrastStitch=Y\u0026csContrastStitchColour=grey\u0026csContrastStitchLocation=all-button-holes\u0026csCuffAdjustment=NA\u0026csCuffStyle=mitered-one-button\u0026csEngravingCollarStay=NA\u0026csFit=slim-fit\u0026csGauntletButton=NA\u0026csLeftCuffWatch=NA\u0026csMonogram=NA\u0026monograminitials=NA\u0026csMonogramColour=NA\u0026csMonogramFont=NA\u0026csMonogramLocation=NA\u0026csPiping=Y\u0026csPipingColour=silver\u0026csPipingLocation=collar-cuff\u0026csPlacketStyle=standard\u0026csPocketStyle=NA\u0026csRightCuffWatch=NA\u0026csSleeveLength=32.5\u0026source=cart\u0026pf=cs_edit\u0026cm_sp=CS_PLP_Product_Tile\",\r\n    UKprice: \"£79\",\r\n    USprice: \"$129\"\r\n  }\r\n};\r\n\r\n\r\n  // ===== Utils =====\r\n  const qs = (root, sel) =\u003e (root || document).querySelector(sel);\r\n  const qsa = (root, sel) =\u003e Array.from((root || document).querySelectorAll(sel));\r\n\r\n  // Keep your original function (requested)\r\n  function replaceImgKeepAttrs(img, newSrc) {\r\n    if (!img) return;\r\n    const clone = img.cloneNode(true); // drops JS listeners\r\n    clone.setAttribute(\"data-thumb-roll-over\", (img.getAttribute(\"src\") || \"\").split(\"?\")[0]);\r\n    clone.setAttribute(\"data-hi-res-thumb-roll-over\", (img.getAttribute(\"src\") || \"\").split(\"?\")[0]);\r\n    clone.setAttribute(\"data-thumb\", newSrc);\r\n    clone.src = newSrc;\r\n    img.replaceWith(clone);\r\n  }\r\n\r\n  function getDisplayPrice(product) {\r\n    const raw = (country === \"UK\" ? product.UKprice : product.USprice) || \"\";\r\n    const numeric = (raw.match(/[\\d.,]+/) || [\"\"])[0].replace(\",\", \"\");\r\n    const currencyCode = raw.trim().startsWith(\"£\") ? \"GBP\"\r\n      : raw.trim().startsWith(\"$\") ? \"USD\"\r\n        : (country === \"UK\" ? \"GBP\" : \"USD\");\r\n    return { raw, numeric, currencyCode };\r\n  }\r\n\r\n  function setPriceFromProduct(root, product) {\r\n    if (!root || !product) return;\r\n    const { raw, numeric, currencyCode } = getDisplayPrice(product);\r\n\r\n    const was = qs(root, \".js-thumb-was-price span[aria-hidden='true'], .was-price span[aria-hidden='true']\");\r\n    const now = qs(root, \".js-thumb-now-price span[aria-hidden='true'], .now-price span[aria-hidden='true']\");\r\n    const wasA11y = qs(root, \".js-thumb-was-price .accessibility-hidden, .was-price .accessibility-hidden\");\r\n    const nowA11y = qs(root, \".js-thumb-now-price .accessibility-hidden, .now-price .accessibility-hidden\");\r\n\r\n    if (now \u0026\u0026 now.textContent !== raw) now.textContent = raw;\r\n    if (nowA11y \u0026\u0026 nowA11y.textContent !== `now ${raw}`) nowA11y.textContent = `now ${raw}`;\r\n    if (was \u0026\u0026 was.textContent !== raw) was.textContent = raw;\r\n    if (wasA11y \u0026\u0026 wasA11y.textContent !== `was ${raw}`) wasA11y.textContent = `was ${raw}`;\r\n\r\n    const currencyInput = qs(root, \"input#productPriceCurrency\");\r\n    const wasInput = qs(root, \"input#productWasPrice\");\r\n    const nowInput = qs(root, \"input#productNowPrice\");\r\n    if (currencyInput \u0026\u0026 currencyInput.value !== currencyCode) currencyInput.value = currencyCode;\r\n    if (wasInput \u0026\u0026 wasInput.value !== numeric) wasInput.value = numeric || \"\";\r\n    if (nowInput \u0026\u0026 nowInput.value !== numeric) nowInput.value = numeric || \"\";\r\n  }\r\n\r\n  function ensureBadgeAfter(el, href) {\r\n    if (!el) return;\r\n    const next = el.nextElementSibling;\r\n    if (next \u0026\u0026 next.classList \u0026\u0026 next.classList.contains(\"custom-plp-tag\")) return;\r\n    const a = document.createElement(\"a\");\r\n    a.className = \"custom-plp-tag\";\r\n    a.href = href;\r\n    a.textContent = \"Custom\";\r\n    el.insertAdjacentElement(\"afterend\", a);\r\n  }\r\n\r\n  let isPatching = false;\r\n\r\n  // ===== Core: update a tile (idempotent + loop-proof) =====\r\n  function updateTile(tile, product) {\r\n    if (!tile || !product) return;\r\n\r\n    // If already applied, just keep links/prices in sync (no heavy DOM)\r\n    if (tile.dataset.ctCustomApplied === \"1\") {\r\n      const allLinks = qsa(tile, \"a.js-thumb-link, a.product-tile__img-link, a.product-tile__name-link\");\r\n      allLinks.forEach(a =\u003e { if (a.href !== product.link) a.href = product.link; });\r\n      setPriceFromProduct(tile, product);\r\n      return;\r\n    }\r\n\r\n    isPatching = true;\r\n\r\n    const img = qs(tile, \"img.js-thumb-img\");\r\n    const pic = qs(tile, \"picture\");\r\n    const allLinks = qsa(tile, \"a.js-thumb-link, a.product-tile__img-link, a.product-tile__name-link\");\r\n\r\n    const newImageSrc = origin + product.image;\r\n    // Only replace if different to avoid extra mutations\r\n    if (img \u0026\u0026 img.getAttribute(\"src\") !== newImageSrc) {\r\n      replaceImgKeepAttrs(img, newImageSrc);\r\n    }\r\n    if (pic) {\r\n      [[\"data-hiressrc\", newImageSrc], [\"data-iessrc\", newImageSrc], [\"data-iesrc\", newImageSrc]]\r\n        .forEach(([k, v]) =\u003e { if (pic.getAttribute(k) !== v) pic.setAttribute(k, v); });\r\n    }\r\n\r\n    // Update all tile links\r\n    allLinks.forEach(a =\u003e { if (a.href !== product.link) a.href = product.link; });\r\n\r\n    // Badge + price\r\n    ensureBadgeAfter(tile, product.link);\r\n    setPriceFromProduct(tile, product);\r\n\r\n    const promo = qs(tile, \".product-tile__promo\");\r\n    if (promo \u0026\u0026 promo.textContent !== \"Buy 2, Save 10%\") promo.textContent = \"Buy 2, Save 10%\";\r\n    \r\n  \r\n\r\n    tile.dataset.ctCustomApplied = \"1\";\r\n    isPatching = false;\r\n\r\n    LOG(\"Updated tile\", product.id);\r\n  }\r\n\r\n  // ===== Apply to PLP tiles =====\r\n  function editCustomPlpTiles() {\r\n    if (isPatching) return;\r\n    Object.values(customProducts).forEach((product) =\u003e {\r\n      const tile = document.querySelector(`[data-prod-id=\"${product.id}\"]`);\r\n      if (tile) updateTile(tile, product);\r\n    });\r\n  }\r\n\r\n  // Observe late renders (debounced)\r\n  let raf = 0;\r\n  const observer = new MutationObserver(() =\u003e {\r\n    if (isPatching) return;\r\n    if (raf) cancelAnimationFrame(raf);\r\n    raf = requestAnimationFrame(editCustomPlpTiles);\r\n  });\r\n  observer.observe(document.body, { childList: true, subtree: true });\r\n\r\n  // Initial pass\r\n  editCustomPlpTiles();\r\n  function overrideProductName(prodId, newName) {\r\n\t  const tile = document.querySelector(`[data-prod-id=\"${prodId}\"]`);\r\n\t  if (!tile) return false;\r\n\t\r\n\t  const nameEl = tile.querySelector(\".js-thumb-name\");\r\n\t  if (!nameEl) return false;\r\n\t\r\n\t  nameEl.textContent = newName;\r\n\t  return true;\r\n\t}\r\n\toverrideProductName(\"CFL0021WHT\", \"Non-Iron Twill - Lilac Purple\");\r\n})();\r\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"68c1a3ef680c78c754c39863"},{"uses_overlay":false,"type":"html","parametrized_definition":"\u003cstyle\u003e\n.pt_product-details .price-diff {\n    text-transform: uppercase !important;\n    font-weight: 500 !important;\n    font-size: 1.2rem !important;\n}\n[data-bestselling] {\n    margin-bottom: 10px;\n}\n.product-tile__collar-label { \n    line-height: normal; \n    font-size: 1.2rem; \n    padding: 0.3rem; \n    border-radius: 0 0 0.5rem 0.5rem; \n    z-index: 1; \n    bottom: -2.2rem;\n}\n.ui-dialog{\n\tborder-radius: 5px;\n}\n\t.plp-grid__multibuy-placeholder--desktop {\n    \theight: 6rem !important;\n\t}\n      .minicart-recommendations .product-tile__name-link span {\n        font-size: 1.4rem !important; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; line-clamp: 1 !important;\n      }\n .js-minicart-rec-slot-wrapper .product-tile__name-link {\n    height: 2.5rem !important;\n}\n .minicart-recommendations .tile__pricing { font-size: 1.5rem !important; }\n \n .minicart-payment-options li.payment-info__li {\n    display: inline-block;\n    margin-left: 5px;\n    min-width: 50px;\n    margin: 0px !important;\n}\n\n.minicart-payment-options img{\n    max-width: 30px !important;\n}\n.footer {\n    padding-bottom: 1.5rem !important;\n}\n.weblayer--box-subscription{\n\tborder-radius:0.5rem !important;\n}\n.colour-swatching .colourSwitch {\n    margin: 0.3rem !important;\n}\n.attribute-info__icon text{\n\tfont-family: 'Futura' !important;\n}\n\u003c/style\u003e\n\n\u003cscript\u003e\n\t(() =\u003e {\n  \"use strict\";\n\n  const LOG_PREFIX = \"[ct-social-proof-top]\";\n  const STYLE_ID = \"ct-social-proof-top-style\";\n\n  const pageType =\n    window.utag_data \u0026\u0026\n    window.utag_data.page \u0026\u0026\n    window.utag_data.page.type;\n\n  if (!/product/i.test(String(pageType))) {\n    console.log(LOG_PREFIX, \"Not a product page → exit\");\n    return;\n  }\n\n  const BADGE_IN_ITEM_SELECTOR =\n    \".slick-slide.slick-current.slick-active .pdpimage__item p.js-thumb-sale-badge\";\n\n  const badgeInActiveItem = document.querySelector(BADGE_IN_ITEM_SELECTOR);\n\n  console.log(LOG_PREFIX, \"Badge selector:\", BADGE_IN_ITEM_SELECTOR);\n  console.log(LOG_PREFIX, \"Badge found?\", !!badgeInActiveItem, badgeInActiveItem || \"\");\n\n  // If badge exists in the active pdpimage__item, do nothing\n  if (badgeInActiveItem) {\n    console.log(LOG_PREFIX, \"Badge exists in active .pdpimage__item → no CSS injected\");\n    return;\n  }\n\n  // Otherwise inject CSS\n  if (document.getElementById(STYLE_ID)) {\n    console.log(LOG_PREFIX, \"CSS already injected → leaving as-is\");\n    return;\n  }\n\n  const style = document.createElement(\"style\");\n  style.id = STYLE_ID;\n  style.textContent = `\n    .socialProofTile {\n      top: 1rem !important;\n    }\n  `;\n\n  document.head.appendChild(style);\n  console.log(LOG_PREFIX, \"Badge NOT found in active .pdpimage__item → injected CSS (top: 1rem)\");\n})();\n\n\u003c/script\u003e","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"68f7b4e24b2345d83288d7bf"},{"uses_overlay":false,"type":"js","parametrized_definition":"(() =\u003e {\r\n  // =======================\r\n  // CT392 – PDP Payment Icons (clone from .payment-info)\r\n  // =======================\r\n  const RUN_FLAG = \"__CT392_INIT__\";\r\n  if (window[RUN_FLAG]) {\r\n    console.log(\"[CT392] Already init\");\r\n    return;\r\n  }\r\n  window[RUN_FLAG] = true;\r\n\r\n  const LOG = (...a) =\u003e console.log(\"[CT392]\", ...a);\r\n\r\n  // selectors / config\r\n  const ADD_ONE_SEL         = \"#add-to-cart\";      // standard PDP\r\n  const ADD_SET_SEL         = \"#add-all-to-cart\";  // suits / product set\r\n  const SOURCE_PAYMENT_INFO = \".payment-info\";     // footer/localised block with logos\r\n\r\n  // detect page type\r\n  const ut = window.utag_data || {};\r\n  const pageType = String(ut?.page?.type || \"\").toLowerCase();\r\n  const isPDP = pageType === \"product\" || pageType === \"product set\";\r\n\r\n  if (!isPDP) {\r\n    LOG(\"Not a PDP; skipping CT392\");\r\n    return;\r\n  }\r\n\r\n  const isProductSet = pageType === \"product set\";\r\n\r\n  // build styled clone block for PDP\r\n  function makeIconsNode() {\r\n    const $src = $(SOURCE_PAYMENT_INFO).first();\r\n    if (!$src.length) {\r\n      LOG(\"No .payment-info source found, aborting clone\");\r\n      return null;\r\n    }\r\n\r\n    // deep clone\r\n    const $clone = $src.clone(true, true);\r\n\r\n    // strip duplicate IDs\r\n    $clone.find(\"[id]\").addBack(\"[id]\").removeAttr(\"id\");\r\n\r\n    // remove \"Wir akzeptieren:\" / \"We accept:\" label\r\n    $clone.children(\"div\").first().remove();\r\n\r\n    // normalise images\r\n    $clone.find(\"img\").each(function () {\r\n      const $img = $(this);\r\n      const dataSrc = $img.attr(\"data-src\");\r\n      const srcAttr = $img.attr(\"src\");\r\n\r\n      if (!srcAttr \u0026\u0026 dataSrc) {\r\n        $img.attr(\"src\", dataSrc);\r\n      }\r\n\r\n      $img.attr(\"data-loaded\", \"true\");\r\n      $img.removeClass(\"lozad\");\r\n    });\r\n\r\n    // remove margin utility classes\r\n    $clone.removeClass(\"m-top-m m-top-l mps-m-top-m m-bottom-m\");\r\n\r\n    // horizontal layout for \u003cul\u003e\r\n    $clone.find(\"ul.payment-info__li-container\").each(function () {\r\n      this.setAttribute(\r\n        \"style\",\r\n        [\r\n          \"display:flex !important\",\r\n          \"align-items:center !important\",\r\n          \"gap:10px !important\",\r\n          \"margin:5px 0 0 !important\",\r\n          \"padding:0 20px !important\",\r\n          \"list-style:none !important\",\r\n          \"text-align:left !important\"\r\n        ].join(\";\")\r\n      );\r\n    });\r\n\r\n    // style \u003cli\u003e icons\r\n    $clone.find(\"li.payment-info__li\").each(function () {\r\n      this.setAttribute(\r\n        \"style\",\r\n        [\r\n          \"display:flex !important\",\r\n          \"align-items:center !important\",\r\n          \"justify-content:center !important\",\r\n          \"max-width:50px\"\r\n        ].join(\";\")\r\n      );\r\n    });\r\n    \r\n     $clone.find(\"li.payment-info__li img\").each(function () {\r\n      this.setAttribute(\r\n        \"style\",\r\n        [\r\n          \"max-width:40px\",\r\n          \"height:40px\"\r\n        ].join(\";\")\r\n      );\r\n    });\r\n\r\n    // wrapper injected under CTA\r\n    $clone\r\n      .addClass(\"ct392-container\").addClass('flex-justify-center')\r\n      .css({\r\n        width: \"100%\",\r\n        display: \"flex\"\r\n      });\r\n\r\n    return $clone[0];\r\n  }\r\n\r\n  function injectMainPdp() {\r\n    if (document.querySelector(\".ct392-container\")) return;\r\n\r\n    if (isProductSet) {\r\n      const addAllBtn = document.querySelector(ADD_SET_SEL);\r\n      if (!addAllBtn) return;\r\n\r\n      if (\r\n        addAllBtn.nextElementSibling \u0026\u0026\r\n        addAllBtn.nextElementSibling.classList?.contains(\"ct392-container\")\r\n      )\r\n        return;\r\n\r\n      const node = makeIconsNode();\r\n      if (!node) return;\r\n\r\n      addAllBtn.insertAdjacentElement(\"afterend\", node);\r\n      LOG(\"Injected (suit set PDP)\");\r\n    } else {\r\n      const addBtn = document.querySelector(ADD_ONE_SEL);\r\n      if (!addBtn) return;\r\n\r\n      let block = addBtn;\r\n      for (let i = 0; i \u003c 4 \u0026\u0026 block \u0026\u0026 block.parentElement; i++) {\r\n        block = block.parentElement;\r\n      }\r\n\r\n      if (!block || block === document.body) {\r\n        block = addBtn.closest(\"form\") || addBtn.parentElement;\r\n      }\r\n      if (!block) return;\r\n\r\n      if (block.querySelector(\".ct392-container\")) return;\r\n\r\n      const node = makeIconsNode();\r\n      if (!node) return;\r\n\r\n      block.appendChild(node);\r\n      LOG(\"Injected (standard PDP)\");\r\n    }\r\n  }\r\n\r\n  function run() {\r\n    injectMainPdp();\r\n  }\r\n\r\n  // initial + rerun after AJAX (variant/size refreshes)\r\n  run();\r\n  $(document).ajaxComplete(() =\u003e {\r\n    run();\r\n  });\r\n})();\r\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"68fb6250d34d870b223da38e"},{"uses_overlay":false,"type":"js","parametrized_definition":"(() =\u003e {\r\n  console.log(\"[CT GiftCard] v42 — Steam hover + move-up + selected badge\");\r\n\r\n  const TEXT = \"#373737\";\r\n  const BORDER = \"#d0d0d0\";\r\n\r\n  /* =========================================================\r\n     1. GLOBAL STYLES\r\n  ========================================================= */\r\n  const STYLE_ID = \"ct-gift-redesign-v42\";\r\n  if (!document.getElementById(STYLE_ID)) {\r\n    const style = document.createElement(\"style\");\r\n    style.id = STYLE_ID;\r\n    style.textContent = `\r\n      .gift-card__list, .gift-card__header { display:none!important; visibility:hidden!important; }\r\n      .main__area { max-width:130.4rem!important; }\r\n      .gift-card__wrapper { box-shadow:none!important; }\r\n\r\n      .ct-gift-wrapper {\r\n        display:flex; flex-wrap:wrap; gap:2rem;\r\n        margin:0 auto 4rem; max-width:1100px;\r\n      }\r\n      .ct-gift-left,.ct-gift-right { flex:1 1 420px; min-width:300px; }\r\n      .ct-gift-right {\r\n        max-height:1060px!important; overflow-y:auto!important;\r\n        scrollbar-width:thin; scrollbar-color:#999 #f0f0f0;\r\n      }\r\n      .ct-gift-right::-webkit-scrollbar{width:8px;}\r\n      .ct-gift-right::-webkit-scrollbar-track{background:#f0f0f0;}\r\n      .ct-gift-right::-webkit-scrollbar-thumb{background-color:#999;border-radius:4px;}\r\n      @media(max-width:768px){\r\n        .ct-gift-wrapper{flex-direction:column;}\r\n        .ct-gift-left,.ct-gift-right{min-width:100%;max-height:none;overflow:visible;}\r\n      }\r\n\r\n      .ct-page-headline{\r\n        max-width:1100px;margin:2rem auto;\r\n        font-family:\"Futura PT\",sans-serif;color:${TEXT};\r\n        display:flex;flex-direction:column;align-items:center;text-align:center;\r\n      }\r\n      .ct-page-headline h1{\r\n        font-size:4.2rem;font-weight:700;color:${TEXT};\r\n        margin:0 0 .5rem;text-transform:uppercase;\r\n      }\r\n      .ct-page-headline h2{font-size:1.4rem;font-weight:500;color:${TEXT};margin:0 0 1.5rem;}\r\n      .ct-top-nav{display:flex;justify-content:center;flex-wrap:wrap;gap:1rem;}\r\n      .ct-top-nav .ct-btn-primary,.ct-top-nav .ct-btn-outline{\r\n        width:200px;height:40px;display:flex;justify-content:center;align-items:center;\r\n      }\r\n      .ct-top-nav .ct-btn-primary{\r\n        background:${TEXT};color:#fff;border:none;border-radius:4px;font-size:1.4rem;font-weight:600;\r\n        text-transform:uppercase;cursor:pointer;\r\n      }\r\n      .ct-top-nav .ct-btn-outline{\r\n        background:#fff;color:${TEXT};border:1px solid ${BORDER};border-radius:4px;\r\n        font-size:1.4rem;font-weight:600;text-transform:uppercase;cursor:pointer;\r\n      }\r\n\r\n      .ct-gift-left .form__label,\r\n      .ct-gift-left .form__label\u003espan.form__label,\r\n      .ct-gift-left h3{\r\n        font-size:1.6rem!important;font-weight:500!important;color:${TEXT}!important;text-align:left!important;\r\n      }\r\n\r\n      /* Left-column heading */\r\n      .ct-gift-left .ct-left-heading{\r\n        font-size:2rem;\r\n        font-weight:600;\r\n        color:${TEXT};\r\n        margin:0 0 2rem;\r\n        text-align:left;\r\n      }\r\n\r\n      .ct-amount-custom-wrapper{max-width:none!important;width:100%!important;}\r\n      .gift-card__amount-label{\r\n        width:7.5rem;height:5rem;border:.1rem solid #bababa;border-radius:.5rem;\r\n        display:flex!important;justify-content:center;align-items:center;font-size:1.4rem!important;\r\n      }\r\n\r\n      .js-designs-slider{\r\n        margin-bottom:30px!important;\r\n        padding-left:20px!important;\r\n        padding-right:20px!important;\r\n      }\r\n\r\n      /* Let the hover lift breathe – prevent clipping */\r\n      .gift-card__design,\r\n      .js-designs-slider,\r\n      .js-designs-slider li,\r\n      .js-designs-slider .slick-list,\r\n      .js-designs-slider .slick-track,\r\n      .ct-designs-grid{\r\n        overflow:visible!important;\r\n      }\r\n\r\n      /* Transparent plates behind designs (no solid white slab) */\r\n      .gift-card__design,\r\n      .js-designs-slider li,\r\n      .js-designs-slider\u003ediv[data-designnameid],\r\n      .ct-designs-grid,\r\n      .ct-designs-grid\u003ediv[data-designnameid]{\r\n        background-color:transparent!important;\r\n      }\r\n\r\n      /* =========================================================\r\n         STEAM-STYLE CARD: 3D lift + sheen\r\n      ========================================================= */\r\n      .js-designs-slider\u003ediv[data-designnameid],\r\n      .ct-designs-grid\u003ediv[data-designnameid]{\r\n        margin-bottom:40px!important;\r\n        cursor:pointer;\r\n        position:relative;\r\n        overflow:hidden;\r\n        border:1px solid rgba(0,0,0,0.25);\r\n        border-top:1px solid rgba(255,255,255,0.1);\r\n        border-radius:30px;\r\n        box-shadow:0 8px 10px -2px rgba(0,0,0,0.5);\r\n        transform:perspective(222px) translate3d(0,5px,0) rotateX(0deg);\r\n        transform-origin:center;\r\n        perspective-origin:top;\r\n        transition:transform 0.28s ease, box-shadow 0.28s ease, border 0.28s ease;\r\n      }\r\n\r\n      .js-designs-slider\u003ediv[data-designnameid]::before,\r\n      .ct-designs-grid\u003ediv[data-designnameid]::before{\r\n        width:100%;\r\n        height:172%;\r\n        position:absolute;\r\n        top:0;\r\n        left:0;\r\n        content:\"\";\r\n        background-image:linear-gradient(35deg,\r\n          rgba(0,0,0,0.1) 0%,\r\n          rgba(0,0,0,0.07) 51.5%,\r\n          rgba(255,255,255,0.15) 54%,\r\n          rgba(255,255,255,0.15) 100%\r\n        );\r\n        transform:translateY(-36%);\r\n        opacity:0.5;\r\n        transition:transform 0.28s ease, opacity 0.28s ease;\r\n        pointer-events:none;\r\n      }\r\n\r\n      .js-designs-slider\u003ediv[data-designnameid]:hover,\r\n      .js-designs-slider\u003ediv[data-designnameid]:focus,\r\n      .ct-designs-grid\u003ediv[data-designnameid]:hover,\r\n      .ct-designs-grid\u003ediv[data-designnameid]:focus{\r\n        border:1px solid rgba(0,0,0,0.1);\r\n        transform:perspective(222px) translate3d(0,0,8px) rotateX(3deg);\r\n        box-shadow:0 14px 16px -2px rgba(0,0,0,0.5);\r\n      }\r\n\r\n      .js-designs-slider\u003ediv[data-designnameid]:hover::before,\r\n      .js-designs-slider\u003ediv[data-designnameid]:focus::before,\r\n      .ct-designs-grid\u003ediv[data-designnameid]:hover::before,\r\n      .ct-designs-grid\u003ediv[data-designnameid]:focus::before{\r\n        opacity:1;\r\n        transform:translateY(-20%);\r\n      }\r\n\r\n      /* Base image styling: centred, 100% width */\r\n      .js-designs-slider\u003ediv[data-designnameid] img,\r\n      .ct-designs-grid\u003ediv[data-designnameid] img{\r\n        display:block;\r\n        width:100%!important;\r\n        height:auto;\r\n        margin-left:auto;\r\n        margin-right:auto;\r\n        border-radius:30px;\r\n      }\r\n\r\n      /* Move-to-top animation class (applied on select) */\r\n      .ct-card-anim{\r\n        animation:ct-card-move-up 0.28s ease-out;\r\n      }\r\n\r\n      @keyframes ct-card-move-up{\r\n        from{\r\n          transform:perspective(222px) translate3d(0,30px,0) rotateX(0deg);\r\n          opacity:0;\r\n        }\r\n        to{\r\n          transform:perspective(222px) translate3d(0,5px,0) rotateX(0deg);\r\n          opacity:1;\r\n        }\r\n      }\r\n\r\n      /* Selected badge */\r\n      .ct-selected-badge{\r\n        position:absolute;\r\n        top:10px;\r\n        right:20px;\r\n        background:#dbefeb;\r\n        color:#004139;\r\n        padding:4px 10px;\r\n        border-radius:6px;\r\n        font-size:1.2rem;\r\n        font-weight:600;\r\n        z-index:5;\r\n        display:flex;\r\n        align-items:center;\r\n        gap:4px;\r\n        opacity:0;\r\n        transform:translateY(-6px);\r\n        transition:opacity .25s ease, transform .25s ease;\r\n      }\r\n      .ct-selected-badge.show{\r\n        opacity:1;\r\n        transform:translateY(0);\r\n      }\r\n\r\n      .ct-main-cta{\r\n        background:#005B2D;color:#fff;border:none;border-radius:4px;\r\n        width:200px;height:40px;display:flex;justify-content:center;align-items:center;\r\n        font-size:1.4rem;font-weight:600;text-transform:uppercase;cursor:pointer;\r\n      }\r\n\r\n      /* Recipient email label — no padding top */\r\n      .gift-card__recipient-email .form__label--checkout{\r\n        padding-top:0!important;\r\n      }\r\n\r\n      .js-gc-edit-section{\r\n        padding-right:20px!important;\r\n      }\r\n\r\n      /* \"Choose a design\" heading size */\r\n      .gift-card__title,\r\n      .gift-card__design h3,\r\n      .ct-gift-right h3{\r\n        font-size:2.4rem!important;\r\n      }\r\n    `;\r\n    document.head.appendChild(style);\r\n  }\r\n\r\n  /* =========================================================\r\n     2. HELPERS\r\n  ========================================================= */\r\n  const $  = (s, r = document) =\u003e r.querySelector(s);\r\n  const $$ = (s, r = document) =\u003e Array.from(r.querySelectorAll(s));\r\n  const make = (t, c, h) =\u003e {\r\n    const el = document.createElement(t);\r\n    if (c) el.className = c;\r\n    if (h !== undefined) el.innerHTML = h;\r\n    return el;\r\n  };\r\n\r\n  const form = $(\"#dwfrm_giftcert\");\r\n  if (!form) {\r\n    console.warn(\"[CT GiftCard] form not found\");\r\n    return;\r\n  }\r\n\r\n  const addSelectedBadge = card =\u003e {\r\n    if (!card) return;\r\n    // kill existing badges inside slider area\r\n    const root = card.closest(\".js-designs-slider, .ct-designs-grid\") || document;\r\n    root.querySelectorAll(\".ct-selected-badge\").forEach(b =\u003e b.remove());\r\n\r\n    const badge = document.createElement(\"div\");\r\n    badge.className = \"ct-selected-badge\";\r\n    badge.innerHTML = `Selected \u003cspan aria-hidden=\"true\"\u003e✓\u003c/span\u003e`;\r\n    card.appendChild(badge);\r\n\r\n    requestAnimationFrame(() =\u003e {\r\n      badge.classList.add(\"show\");\r\n    });\r\n  };\r\n\r\n  /* =========================================================\r\n     3. STRUCTURE / WRAPPERS (SWAPPED ORDER)\r\n  ========================================================= */\r\n  let wrapper = $(\".ct-gift-wrapper\");\r\n  let leftCol = $(\".ct-gift-left\");\r\n  let rightCol = $(\".ct-gift-right\");\r\n  const designBlock = $(\".gift-card__design\");\r\n\r\n  if (!wrapper) {\r\n    wrapper = make(\"div\", \"ct-gift-wrapper\");\r\n    leftCol = make(\"div\", \"ct-gift-left\");\r\n    rightCol = make(\"div\", \"ct-gift-right\");\r\n\r\n    form.parentNode.insertBefore(wrapper, form);\r\n\r\n    // Designs column first (rightCol), form column second (leftCol)\r\n    wrapper.append(rightCol, leftCol);\r\n\r\n    if (designBlock) rightCol.appendChild(designBlock);\r\n    leftCol.appendChild(form);\r\n  } else {\r\n    if (rightCol \u0026\u0026 designBlock \u0026\u0026 designBlock.parentNode !== rightCol) {\r\n      rightCol.appendChild(designBlock);\r\n    }\r\n    if (leftCol \u0026\u0026 form.parentNode !== leftCol) {\r\n      leftCol.appendChild(form);\r\n    }\r\n  }\r\n\r\n  /* =========================================================\r\n     4. HEADLINE (H1 + nav buttons)\r\n  ========================================================= */\r\n  $$(\".ct-page-headline\").forEach(h =\u003e h.remove());\r\n  const headline = make(\r\n    \"div\",\r\n    \"ct-page-headline\",\r\n    `\r\n      \u003ch1\u003eeGift Cards\u003c/h1\u003e\r\n      \u003ch2\u003eGift impeccable shirts in seconds\u003c/h2\u003e\r\n      \u003cdiv class=\"ct-top-nav\"\u003e\r\n        \u003cbutton class=\"ct-btn ct-btn-primary\" type=\"button\"\u003eeGift Card\u003c/button\u003e\r\n        \u003cbutton class=\"ct-btn ct-btn-outline\" type=\"button\" onclick=\"window.location.href='/gift-cards/balance-check'\"\u003e\r\n          CHECK MY BALANCE\r\n        \u003c/button\u003e\r\n      \u003c/div\u003e\r\n    `\r\n  );\r\n  wrapper.parentNode.insertBefore(headline, wrapper);\r\n\r\n  /* =========================================================\r\n     5. LEFT COLUMN HEADING\r\n  ========================================================= */\r\n  if (leftCol \u0026\u0026 !leftCol.querySelector(\".ct-left-heading\")) {\r\n    const heading = make(\"h2\", \"ct-left-heading\", \"Gift Card Details\");\r\n    leftCol.insertBefore(heading, leftCol.firstChild);\r\n  }\r\n\r\n  /* =========================================================\r\n     6. FORM NORMALISATION\r\n  ========================================================= */\r\n  $$(\".bg-grey5\").forEach(el =\u003e el.classList.remove(\"bg-grey5\"));\r\n  $$(\".form__row\").forEach(r =\u003e r.classList.remove(\"mps-m-auto\", \"p-top-m\"));\r\n  $$(\".mps-col-55, .mps-col-50\").forEach(el =\u003e {\r\n    el.classList.remove(\"mps-col-55\", \"mps-col-50\");\r\n    el.classList.add(\"col-100\");\r\n  });\r\n  $$(\".flex-justify-start\").forEach(el =\u003e el.classList.remove(\"flex-justify-start\"));\r\n\r\n  /* =========================================================\r\n     7. PERSONALISATION + ERROR STATES\r\n  ========================================================= */\r\n  const personalOuter =\r\n    form.querySelector(\".m-sides-l.mps-p-top-xl\") ||\r\n    form.querySelector(\".m-sides-l .gift-info\") ||\r\n    form.querySelector(\".m-sides-l\") ||\r\n    null;\r\n\r\n  if (personalOuter) {\r\n    personalOuter.classList.remove(\r\n      \"m-sides-l\",\r\n      \"mps-p-top-xl\",\r\n      \"p-sides-m\",\r\n      \"mps-p-sides-xl\",\r\n      \"p-bottom-l\",\r\n      \"p-top-s\"\r\n    );\r\n  }\r\n\r\n  const giftInfo = form.querySelector(\".gift-info\");\r\n  if (giftInfo) giftInfo.className = \"gift-info overflow-hidden\";\r\n\r\n  const personalRows = form.querySelectorAll(\r\n    \".gift-info .form__row.select-group, .gift-info .form__row.select-group.required\"\r\n  );\r\n\r\n  personalRows.forEach(row =\u003e {\r\n    row.classList.remove(\"mps-m-sides-xl\");\r\n    row.classList.add(\"required\", \"parent-el-error\");\r\n\r\n    const lbl = row.querySelector(\"label.form__label\");\r\n    const lblInner = row.querySelector(\"label.form__label \u003e span.form__label\");\r\n    [lbl, lblInner].forEach(node =\u003e {\r\n      if (!node) return;\r\n      node.style.fontSize = \"1.6rem\";\r\n      node.style.fontWeight = \"500\";\r\n      node.style.color = TEXT;\r\n      node.style.textAlign = \"left\";\r\n    });\r\n\r\n    const field = row.querySelector(\"input, textarea\");\r\n    if (field) {\r\n      field.setAttribute(\"aria-invalid\", \"false\");\r\n      if (field.id \u0026\u0026 !row.querySelector(`#${field.id}-error`)) {\r\n        const err = document.createElement(\"span\");\r\n        err.id = field.id + \"-error\";\r\n        err.className = \"error\";\r\n        err.setAttribute(\"role\", \"alert\");\r\n        const hidden = document.createElement(\"span\");\r\n        hidden.className = \"accessibility-hidden\";\r\n        hidden.textContent = `${lblInner?.textContent?.trim() || lbl?.textContent?.trim() || \"Field\"}: `;\r\n        err.appendChild(hidden);\r\n        err.append(\"This field is required.\");\r\n        field.insertAdjacentElement(\"beforebegin\", err);\r\n        field.setAttribute(\"aria-describedby\", err.id);\r\n      }\r\n    }\r\n  });\r\n\r\n  /* =========================================================\r\n     8. REMOVE PLACEHOLDERS\r\n  ========================================================= */\r\n  $$(\"input[placeholder], textarea[placeholder]\").forEach(el =\u003e el.removeAttribute(\"placeholder\"));\r\n\r\n  /* =========================================================\r\n     9. CTA\r\n  ========================================================= */\r\n  const previewBtn = form.querySelector(\".js-gc-preview-button\");\r\n  if (previewBtn) {\r\n    previewBtn.classList.add(\"ct-main-cta\");\r\n    previewBtn.textContent = \"PREVIEW GIFT CARD\";\r\n    if (!document.querySelector(\".ct-cta-wrap\")) {\r\n      const ctaWrap = make(\"div\", \"ct-cta-wrap\");\r\n      const fs = form.querySelector(\"fieldset.gift-card__fieldset\") || form;\r\n      fs.insertAdjacentElement(\"afterend\", ctaWrap);\r\n      ctaWrap.appendChild(previewBtn);\r\n    }\r\n  }\r\n\r\n  /* =========================================================\r\n     10. UNSLICK (safety)\r\n  ========================================================= */\r\n  const ut = window.utag_data || {};\r\n  if (ut.page?.responsive_design_type === \"Desktop View\") {\r\n    const sliderInit = document.querySelector(\".js-designs-slider.slick-initialized\");\r\n    if (sliderInit) {\r\n      if (typeof jQuery !== \"undefined\" \u0026\u0026 jQuery(sliderInit).hasClass(\"slick-initialized\")) {\r\n        try { jQuery(sliderInit).slick(\"unslick\"); } catch (e) { console.warn(\"unslick failed\", e); }\r\n      }\r\n      const slickList = sliderInit.querySelector(\".slick-list\");\r\n      const slickTrack = slickList?.querySelector(\".slick-track\");\r\n      if (slickTrack) {\r\n        const slides = Array.from(slickTrack.querySelectorAll(\"li.slick-slide\"))\r\n          .filter(li =\u003e !li.classList.contains(\"slick-cloned\"))\r\n          .map(li =\u003e li.querySelector(\"div[data-designnameid]\"));\r\n        const grid = document.createElement(\"div\");\r\n        grid.className = \"ct-designs-grid\";\r\n        slides.forEach(s =\u003e grid.appendChild(s.cloneNode(true)));\r\n        sliderInit.innerHTML = \"\";\r\n        sliderInit.appendChild(grid);\r\n        console.log(\"[CT GiftCard] unslicked → static grid\");\r\n      }\r\n    }\r\n  }\r\n\r\n  /* =========================================================\r\n     11. CLICK → SELECT + MOVE SELECTED TO TOP (+ ANIMATE + BADGE)\r\n  ========================================================= */\r\n  const slider = document.querySelector(\".js-designs-slider\");\r\n  if (slider) {\r\n    const checkedRadio = slider.querySelector(\r\n      'input[name=\"dwfrm_giftcert_purchase_giftCertificateDesign\"]:checked'\r\n    );\r\n    if (checkedRadio) {\r\n      const card = checkedRadio.closest('[data-designnameid]');\r\n      if (card) {\r\n        card.classList.add(\"is-selected\");\r\n        const containerNode = card.closest(\"li.slick-slide\") || card;\r\n        const parent = containerNode.parentElement;\r\n        if (parent \u0026\u0026 parent.firstElementChild !== containerNode) {\r\n          parent.insertBefore(containerNode, parent.firstElementChild);\r\n        }\r\n        addSelectedBadge(card);\r\n      }\r\n    }\r\n\r\n    slider.addEventListener(\"click\", e =\u003e {\r\n      const card = e.target.closest('[data-designnameid]');\r\n      if (!card || !slider.contains(card)) return;\r\n\r\n      const designId = card.getAttribute(\"data-designnameid\");\r\n      const containerNode = card.closest(\"li.slick-slide\") || card;\r\n      const parent = containerNode.parentElement;\r\n      if (!parent) return;\r\n\r\n      const isAlreadyFirst = parent.firstElementChild === containerNode;\r\n\r\n      if (!isAlreadyFirst) {\r\n        parent.insertBefore(containerNode, parent.firstElementChild);\r\n      }\r\n\r\n      parent.querySelectorAll('[data-designnameid]').forEach(el =\u003e {\r\n        el.classList.remove(\"is-selected\");\r\n      });\r\n      card.classList.add(\"is-selected\");\r\n\r\n      // Animate the card moving up into place\r\n      card.classList.remove(\"ct-card-anim\");\r\n      void card.offsetWidth; // force reflow\r\n      card.classList.add(\"ct-card-anim\");\r\n\r\n      // Add / move badge\r\n      addSelectedBadge(card);\r\n\r\n      if (designId) {\r\n        const radio = document.querySelector(\r\n          `input[name=\"dwfrm_giftcert_purchase_giftCertificateDesign\"][value=\"${designId}\"]`\r\n        );\r\n        if (radio) {\r\n          radio.checked = true;\r\n          if (typeof Event === \"function\") {\r\n            radio.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n          }\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  /* =========================================================\r\n     12. Headings and class cleanup\r\n  ========================================================= */\r\n  const amountHeading = document.querySelector(\"h3.font__secondary.capitalize.bold.text-center\");\r\n  if (amountHeading) amountHeading.classList.remove(\"m-top-xl\", \"mps-p-top-m\");\r\n\r\n  const rowBottomL = document.querySelector(\".form__row.m-bottom-l.col-100\");\r\n  if (rowBottomL) rowBottomL.classList.remove(\"m-bottom-l\");\r\n\r\n  const worthEdit = document.querySelector(\".gift-card__worth-edit.js-gc-edit-section.mps-m-bottom-xl\");\r\n  if (worthEdit) worthEdit.classList.remove(\"mps-m-bottom-xl\");\r\n\r\n  const popularLabel = document.querySelector(\r\n    \".gift-card__worth-edit.js-gc-edit-section label.m-bottom-s.h4\"\r\n  );\r\n  if (popularLabel) {\r\n    popularLabel.classList.remove(\"form__label\");\r\n    popularLabel.textContent = \"Choose from some popular gifting amounts or specify your own\";\r\n  }\r\n\r\n  const nameLabelSpan = document.querySelector(\r\n    'span.form__label.form__label--checkout.m-top-m.text-left.m-right-m.m-bottom-s.h4.blue7.font__secondary'\r\n  );\r\n  if (nameLabelSpan \u0026\u0026 nameLabelSpan.textContent.trim() === \"\") {\r\n    nameLabelSpan.textContent = \"Recipients Name\";\r\n  }\r\n\r\n  const giftCardRoot = document.querySelector(\".gift-card\");\r\n  if (giftCardRoot) {\r\n    giftCardRoot.classList.add(\"p-sides-m\");\r\n    const firstChild = giftCardRoot.firstElementChild;\r\n    if (firstChild) firstChild.classList.remove(\"p-sides-m\");\r\n  }\r\n\r\n  const bottomWrap = document.querySelector(\"div.p-bottom-m\");\r\n  if (bottomWrap) bottomWrap.classList.remove(\"p-bottom-m\");\r\n\r\n  console.log(\"[CT GiftCard] v42 — done ✅\");\r\n})();\r\n","trigger":{"include_pages":[{"url":"https://www.charlestyrwhitt.com/us/gift-cards/email?qa=yes","type":"exact"}],"exclude_pages":null},"_id":"69037bb72bb4673d6c677d12"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function () {\n  \"use strict\";\n\n  // PDP gate (CT standard)\n  if (!window.utag_data || !window.utag_data.page || window.utag_data.page.type !== \"product\") {\n    return;\n  }\n\n  // If no long description, add spacing\n  if ($(\".js-product-long-description\").length === 0) {\n    $(\".colour-swatching-wrapper\").addClass(\"m-top-s\");\n  }\n})();\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"694409609bd330ee8745f612"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function () {\n  \"use strict\";\n\n  // ---- Config ----\n  var ONLY_SHOW_ICON_ATTRS = true;\n\n  var RUN_FLAG = \"data-ct-attrs-run\";\n  var ROOT_SEL = \".pdp-main__inner-benefits\";\n  var DESC_SEL = \".pdp-main__benefits-description p\";\n  var LIST_SEL = \".pdp-main__benefits .benefit-content\";\n  var STYLE_ID = \"ct-pdp-icons-style\";\n\n  // ---- Page guard: ONLY run on PDP-like pages ----\n  function isProductPage() {\n    try {\n      var t = String((window.utag_data \u0026\u0026 window.utag_data.page \u0026\u0026 window.utag_data.page.type) || \"\");\n      return t.toLowerCase().indexOf(\"product\") \u003e -1;\n    } catch (e) {}\n    return false;\n  }\n  if (!isProductPage()) return;\n\n  function isShirtProduct() {\n    var id = normaliseId(getProductId());\n    return (\n      id.indexOf(\"FO\") === 0 ||\n      id.indexOf(\"FS\") === 0 ||\n      id.indexOf(\"CS\") === 0 ||\n      id.indexOf(\"SC\") === 0 ||\n      id.indexOf(\"CSR\") === 0 ||\n      id.indexOf(\"CF\") === 0\n    );\n  }\n\n  function nameHasStretchKeyword() {\n    var n = normaliseText(getProductName());\n    return (\n      n.indexOf(\"stretch\") \u003e -1 ||\n      n.indexOf(\"extens\") \u003e -1 || // FR (extensible / extensibilité)\n      n.indexOf(\"elast\") \u003e -1 // DE (elastisch / Elastan)\n    );\n  }\n\n  function upsertAttrWithCapN(attrs, attrObj, cap) {\n    if (!attrs) attrs = [];\n    if (hasAttr(attrs, attrObj.name)) return attrs;\n\n    if (attrs.length \u003c cap) {\n      attrs.unshift(attrObj);\n      return attrs;\n    }\n    attrs[cap - 1] = attrObj;\n    attrs = attrs.slice(0, cap);\n    return attrs;\n  }\n\n  function enforceCapN(attrs, cap) {\n    return (attrs || []).slice(0, cap);\n  }\n\n  // ---- Product helpers ----\n  function getProductId() {\n    try {\n      return String(\n        (window.utag_data \u0026\u0026\n          window.utag_data.products \u0026\u0026\n          window.utag_data.products[0] \u0026\u0026\n          window.utag_data.products[0].id) ||\n          \"\"\n      ).trim();\n    } catch (e) {}\n    return \"\";\n  }\n\n  function getProductName() {\n    try {\n      return String(window.utag_data.products[0].name || \"\");\n    } catch (e) {}\n    return \"\";\n  }\n\n  function normaliseId(s) {\n    return String(s || \"\").toUpperCase().replace(/[^A-Z0-9]/g, \"\");\n  }\n\n  function productIdStartsWith(prefix) {\n    return normaliseId(getProductId()).indexOf(normaliseId(prefix)) === 0;\n  }\n\n  function productIdEquals(id) {\n    return normaliseId(getProductId()) === normaliseId(id);\n  }\n\n  function normaliseText(s) {\n    return String(s || \"\")\n      .toLowerCase()\n      .normalize(\"NFD\")\n      .replace(/[\\u0300-\\u036f]/g, \"\");\n  }\n\n  function nameIncludes(phrase) {\n    var n = normaliseText(getProductName());\n    return n.indexOf(normaliseText(phrase)) \u003e -1;\n  }\n\n  function isSuitProductName() {\n    var n = normaliseText(getProductName());\n    return /\\bsuit\\b/.test(n) || /\\banzug\\b/.test(n) || /\\bcostume\\b/.test(n);\n  }\n\n  // ---- Icon map ----\n  var ICONS = {\n  \t\"100% Silk\":\n  \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dwa855545d/merchAssets/100_Silk_ICON_Blk.svg\",\n  \t\"V-Neck Undershirt\":\n  \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dwa855545d/merchAssets/V_Neck_Undershirt_ICON_Blk.svg\",\n  \t\"Reversible\":\n  \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dwa855545d/merchAssets/Reversible_ICON_Blk.svg\",\n  \t\"100% Cashmere\":\n  \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dwa855545d/merchAssets/100_Cashmere_ICON_Blk.svg\",\n  \n    \"100% Cotton\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dw61a9f70c/merchAssets/content/Cotton_100.png\",\n    \"Non-Iron\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dw1300858a/merchAssets/content/non-iron.png\",\n\n    \"Stretch\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dwf302fabc/merchAssets/content/stretch.png\",\n    \"Cotton Stretch\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dwf302fabc/merchAssets/content/stretch.png\",\n\n    \"Breathable\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dwa855545d/merchAssets/content/All-Svg-Icons/Breathable.svg\",\n    \"Water Repellent\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dw471026a4/merchAssets/content/water-repellent.png\",\n    \"Stain Repellent\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dw1dafa7d3/merchAssets/content/stain-resistant.png\",\n    \"Stretch Waistband\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dwe81b2e72/merchAssets/content/stretch-waistband.svg\",\n\n    \"Temperature Regulating\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dwfae5c9cd/merchAssets/content/All-Svg-Icons/temperature-regulating-black.svg\",\n    \"Merino Wool\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dwa64e405a/merchAssets/content/All-Svg-Icons/Woolmark-black.svg\",\n    \"Machine Washable\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dw3bbe2e72/merchAssets/content/All-Svg-Icons/Machine-washable.svg\",\n\n    \"Super 120s Wool\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dw70a3ffad/merchAssets/content/Super 120s Wool.svg\",\n    \"Crease Recovery\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dw37f51631/merchAssets/content/Crease-Recovery.png\",\n    \"Moisture Wicking\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dw8e3ae4f0/merchAssets/content/Moisture-Wicking.png\",\n    \"100% Linen\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dw4ef09f58/merchAssets/content/All-Svg-Icons/100-linen-black.svg\",\n    \"Lightweight\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dw8c0d6212/merchAssets/content/All-Svg-Icons/Icon_lightweight.svg\",\n\n    \"Reda Cloth\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/v7cd253140e1ee03cf7423b865513f234b6d499e6/merchAssets/content/Reda.svg\",\n    \"Silky Feel\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dwf302fabc/merchAssets/content/silky-feel.svg\",\n    \"2-Ply Supima Cotton\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dw61a9f70c/merchAssets/content/2ply.svg\",\n\n    \"100% Leather\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dw61a9f70c/merchAssets/content/Leather_Icon_Black.svg\",\n    \"100% Leather Upper\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dw61a9f70c/merchAssets/content/Leather_Icon_Black.svg\",\n    \"100% Leather Lined\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dw61a9f70c/merchAssets/content/Leather_Icon_Black.svg\",\n\n    \"Flexible Sole\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dwa855545d/merchAssets/content/fsole.svg\",\n    \"Insulated for Warmth\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dwfae5c9cd/merchAssets/content/All-Svg-Icons/Icon_InsulatedForWarmth.svg\",\n    \"Soft Touch\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dw8c0d6212/merchAssets/content/All-Svg-Icons/Icon_lightweight.svg\",\n    \"Collar Stiffeners\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dwa855545d/merchAssets/content/All-Svg-Icons/collar-stiffeners.svg\",\n    \"Natural Stretch\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dwf302fabc/merchAssets/content/stretch.png\",\n    \"Lightweight Fabric\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dw8c0d6212/merchAssets/content/All-Svg-Icons/Icon_lightweight.svg\",\n    \"Made in Italy\":\n      \"https://www.charlestyrwhitt.com/on/demandware.static/Sites-CTShirts-XBR-Site/-/en/v1768308049381/flags/4x3/it.svg\"\n  };\n\n  // ---- Localisation (DE/FR titles only) ----\n  var LOCALES = {\n   DE: {\n   \t\"V-Neck Undershirt\": \"Unterhemd\",\n   \t\"Reversible\": \"Wendbar\",\n    \"100% Cotton\": \"100% Baumwolle\",\n    \"Non-Iron\": \"Bügelfrei\",\n    \"Stretch\": \"Stretch\",\n    \"Cotton Stretch\": \"Baumwoll-Stretch\",\n    \"Breathable\": \"Atmungsaktiv\",\n    \"Water Repellent\": \"Wasserabweisend\",\n    \"Stain Repellent\": \"Fleckabweisend\",\n    \"Stretch Waistband\": \"Dehnbarer Bund\",\n    \"Temperature Regulating\": \"Temperaturregulierend\",\n    \"Merino Wool\": \"Merinowolle\",\n    \"Machine Washable\": \"Maschinenwaschbar\",\n    \"Super 120s Wool\": \"Super 120s Wolle\",\n    \"Crease Recovery\": \"Knitterarm\",                           // updated\n    \"Moisture Wicking\": \"Feuchtigkeitsableitend\",\n    \"100% Linen\": \"100% Leinen\",\n    \"Lightweight\": \"Leicht\",\n    \"Lightweight Fabric\": \"Leichter Stoff\",\n    \"Lightweight Sole\": \"Leichte Sohle\",\n    \"Reda Cloth\": \"Reda-Stoff\",\n    \"Silky Feel\": \"Seidig\",                                     // updated\n    \"2-Ply Supima Cotton\": \"Supima-Baumwolle (2-fädig)\",        // updated\n    \"100% Leather\": \"100% Leder\",\n    \"100% Leather Upper\": \"Obermaterial: 100 % Leder\",\n    \"100% Leather Lined\": \"100% ledergefüttert\",                 // updated\n    \"Flexible Sole\": \"Flexible Sohle\",\n    \"Insulated for Warmth\": \"Wärmeisolierend\",                   // updated\n    \"Soft Touch\": \"Weich im Griff\",                              // updated\n    \"Collar Stiffeners\": \"Kragenstäbchen\",\n    \"Natural Stretch\": \"Natürliche Elastizität\",                 // updated\n    \"Made in Italy\": \"Hergestellt in Italien\",\n    \"100% 2-Ply Egyptian Cotton\": \"100% ägyptische Baumwolle (2-fädig)\" // updated\n  },\n    FR: {\n    \t\"V-Neck Undershirt\": \"Sous-vêtement\",\n    \t\"Reversible\": \"Réversible\",\n      \"100% Cotton\": \"100 % coton\",\n      \"Non-Iron\": \"Sans repassage\",\n      \"Stretch\": \"Extensible\",\n      \"Cotton Stretch\": \"Coton extensible\",\n      \"Breathable\": \"Respirant\",\n      \"Water Repellent\": \"Déperlant\",\n      \"Stain Repellent\": \"Anti-taches\",\n      \"Stretch Waistband\": \"Ceinture extensible\",\n      \"Temperature Regulating\": \"Régule la température\",\n      \"Merino Wool\": \"Laine mérinos\",\n      \"Machine Washable\": \"Lavable en machine\",\n      \"Super 120s Wool\": \"Laine Super 120s\",\n      \"Crease Recovery\": \"Résistant aux plis\",\n      \"Moisture Wicking\": \"Évacuation de l’humidité\",\n      \"100% Linen\": \"100 % lin\",\n      \"Lightweight\": \"Léger\",\n      \"Lightweight Fabric\": \"Tissu léger\",\n      \"Lightweight Sole\": \"Semelle légère\",\n      \"Reda Cloth\": \"Tissu Reda\",\n      \"Silky Feel\": \"Toucher soyeux\",\n      \"2-Ply Supima Cotton\": \"Coton Supima 2 fils\",\n      \"100% Leather\": \"100 % cuir\",\n      \"100% Leather Upper\": \"Tige : 100 % cuir\",\n      \"100% Leather Lined\": \"Doublure 100 % cuir\",\n      \"Flexible Sole\": \"Semelle flexible\",\n      \"Insulated for Warmth\": \"Isolé pour la chaleur\",\n      \"Soft Touch\": \"Toucher doux\",\n      \"Collar Stiffeners\": \"Baleines de col\",\n      \"Natural Stretch\": \"Naturellement extensible\",\n      \"Made in Italy\": \"Fabriqué en Italie\",\n      \"100% 2-Ply Egyptian Cotton\": \"100 % coton égyptien 2 fils\"\n    }\n  };\n\n  function getLocaleKey() {\n    try {\n      var sl = String(\n        (window.utag_data \u0026\u0026 window.utag_data.global \u0026\u0026 window.utag_data.global.site_language) || \"\"\n      ).toLowerCase();\n      if (sl.indexOf(\"de\") \u003e -1) return \"DE\";\n      if (sl.indexOf(\"fr\") \u003e -1) return \"FR\";\n    } catch (e) {}\n    return \"EN\";\n  }\n\n  function localiseTitles(attrs) {\n    var key = getLocaleKey();\n    if (key === \"EN\") return attrs;\n    var dict = LOCALES[key];\n    if (!dict) return attrs;\n\n    return (attrs || []).map(function (a) {\n      if (a \u0026\u0026 dict[a.name]) return { name: dict[a.name], icon: a.icon };\n      return a;\n    });\n  }\n\n  // ---- Socks / trainers detectors ----\n  function isSocksProduct() {\n    var n = normaliseText(getProductName());\n    return /\\bsock(s)?\\b/.test(n) || /\\bchaussette(s)?\\b/.test(n) || /\\bsocke(n)?\\b/.test(n);\n  }\n  function isComfortSocks() {\n    var n = normaliseText(getProductName());\n    if (!isSocksProduct()) return false;\n    return /\\bcomfort\\b/.test(n) || /\\bconfort\\b/.test(n) || /\\bkomfort\\b/.test(n);\n  }\n  function isCottonRibSocks() {\n    var n = normaliseText(getProductName());\n    return (\n      /\\bcotton\\s+rib\\s+sock(s)?\\b/.test(n) ||\n      (/\\bchaussette(s)?\\b/.test(n) \u0026\u0026 /\\bcotele(e)?s?\\b/.test(n) \u0026\u0026 /\\bcoton\\b/.test(n)) ||\n      (/\\bsocke(n)?\\b/.test(n) \u0026\u0026 /\\bripp\\b/.test(n) \u0026\u0026 /\\bbaumwoll(e)?\\b/.test(n))\n    );\n  }\n  function isNoShowOrInvisibleSocks() {\n    var n = normaliseText(getProductName());\n    var isSocks =\n      /\\bsock(s)?\\b/.test(n) ||\n      /\\bchaussette(s)?\\b/.test(n) ||\n      /\\bsocke(n)?\\b/.test(n) ||\n      /\\bfu(ss|ß)ling(e)?\\b/.test(n);\n    if (!isSocks) return false;\n\n    return (\n      /\\bno\\s*show\\b/.test(n) ||\n      /\\binvisible\\b/.test(n) ||\n      /\\binvisibles?\\b/.test(n) ||\n      /\\bsocquette(s)?\\b/.test(n) ||\n      /\\bfu(ss|ß)ling(e)?\\b/.test(n)\n    );\n  }\n  function isMerinoWoolSocks() {\n    var n = normaliseText(getProductName());\n    if (!isSocksProduct()) return false;\n    return /\\bmerino\\b/.test(n) || /\\bmerinowolle\\b/.test(n) || /\\blaine\\s+merinos\\b/.test(n);\n  }\n  function isTrainersProduct() {\n  var n = normaliseText(getProductName());\n  return (\n    /\\btrainer(s)?\\b/.test(n) ||\n    /\\bsneaker(s)?\\b/.test(n) ||\n    /\\bbasket(s)?\\b/.test(n) ||\n    /\\bturnschuh(e|en)?\\b/.test(n) ||\n    /\\bsneaker\\b/.test(n)\n  );\n}\n\n  // ---- Attr helpers ----\n  function hasAttr(attrs, name) {\n    for (var i = 0; i \u003c (attrs || []).length; i++) {\n      if (attrs[i] \u0026\u0026 attrs[i].name === name) return true;\n    }\n    return false;\n  }\n  function removeAttr(attrs, name) {\n    return (attrs || []).filter(function (a) {\n      return !(a \u0026\u0026 a.name === name);\n    });\n  }\n  function upsertAttrWithCap(attrs, attrObj) {\n    if (!attrs) attrs = [];\n    if (hasAttr(attrs, attrObj.name)) return attrs;\n\n    if (attrs.length \u003c 4) {\n      attrs.unshift(attrObj);\n      return attrs;\n    }\n    attrs[attrs.length - 1] = attrObj;\n    return attrs;\n  }\n  function replaceAttr(attrs, fromName, toObj) {\n    for (var i = 0; i \u003c (attrs || []).length; i++) {\n      if (attrs[i] \u0026\u0026 attrs[i].name === fromName) attrs[i] = toObj;\n    }\n    return attrs;\n  }\n  function makeAttr(name, iconKey) {\n    return { name: name, icon: ICONS[iconKey || name] || null };\n  }\n\n  // ---- Text extraction ----\n  function extractText(root) {\n    var text = \"\";\n    var desc = root.querySelector(DESC_SEL);\n    var nodes, i;\n\n    if (desc) text += \" \" + desc.textContent;\n\n    nodes = root.querySelectorAll(LIST_SEL);\n    for (i = 0; i \u003c nodes.length; i++) text += \" \" + (nodes[i].textContent || \"\");\n\n    text = text.replace(/\\s+/g, \" \").trim();\n    window.ctPdpRawText = text;\n    return text;\n  }\n\n  // ---- Attribute detection rules (EN + DE + FR patterns) ----\n  // Note: patterns are intentionally keywordy + accented-safe because normaliseText isn't applied to raw text.\n  var ICON_ATTRS = [\n  \t{\n\t  name: \"100% Cashmere\",\n\t  patterns: [\n\t    // EN\n\t    /100%\\s*cashmere/i,\n\t    /pure\\s+cashmere/i,\n\t\n\t    // DE\n\t    /100%\\s*kaschmir/i,\n\t    /\\breines\\s+kaschmir\\b/i,\n\t\n\t    // FR\n\t    /100%\\s*cachemire/i,\n\t    /\\bpur\\s+cachemire\\b/i\n\t  ]\n\t},\n\t    {\n      name: \"100% Cotton\",\n      patterns: [\n        // EN\n        /100%\\s*(?:\\d+\\s*-\\s*ply|\\d+\\s*ply)?\\s*cotton/i,\n        /100%\\s*(?:two\\s*ply|2\\s*ply)?\\s*cotton/i,\n        /pure\\s+cotton/i,\n        // DE\n        /100%\\s*(?:\\d+\\s*-\\s*f(?:a|ä)dige|\\d+\\s*f(?:a|ä)dige)?\\s*baumwoll/i,\n        /100%\\s*baumwoll/i,\n        /\\breine\\s+baumwoll(e)?\\b/i,\n        /\\bbaumwoll(e)?\\b/i,\n        // FR\n        /100%\\s*coton/i,\n        /\\bpur\\s+coton\\b/i,\n        /\\b100\\s*%\\s*coton\\b/i\n      ]\n    },\n    {\n  name: \"100% Silk\",\n  patterns: [\n    // EN\n    /100%\\s*silk/i,\n    /pure\\s+silk/i,\n\n    // DE\n    /100%\\s*seide/i,\n    /\\breine\\s+seide\\b/i,\n\n    // FR\n    /100%\\s*soie/i,\n    /\\bpur(e)?\\s+soie\\b/i\n  ]\n},\n    {\n      name: \"Soft Touch\",\n      patterns: [\n        // EN\n        /fine\\s+mercerised\\s+cotton/i,\n        /brushed\\s+for\\s+softness/i,\n        /brushed\\s+on\\s+both\\s+sides/i,\n        /loungewear[-\\s]?like\\s+softness/i,\n        // DE\n        /\\bweich(er|es|e)?\\b/i,\n        /\\bsoft(er|es|e)?\\s+griff\\b/i,\n        /\\bangerauht\\b/i,\n        /\\bgeb[uü]rstet\\b/i,\n        // FR\n        /\\btoucher\\s+doux\\b/i,\n        /\\bdoux\\s+au\\s+toucher\\b/i,\n        /\\bgratt[eé]\\b/i,\n        /\\bbross[eé]\\b/i\n      ]\n    },\n    {\n      name: \"100% Leather Lined\",\n      patterns: [\n        // EN\n        /100%\\s*leather\\s+lining/i,\n        /\\bfully\\s+leather\\s+lined\\b/i,\n        /\\bleather\\s+lined\\b/i,\n        // DE\n        /\\b100%\\s*leder(futter|futtern|gefuttert)\\b/i,\n        /\\bvollst[aä]ndig\\s+ledergefuttert\\b/i,\n        /\\bleder(futter|gefuttert)\\b/i,\n        // FR\n        /\\bdoublure\\s+100%\\s*cuir\\b/i,\n        /\\benti[eè]rement\\s+doubl[eé]\\s+cuir\\b/i,\n        /\\bdoubl[eé]\\s+cuir\\b/i\n      ]\n    },\n    {\n      name: \"Flexible Sole\",\n      patterns: [\n        // EN\n        /\\bflexible\\b[\\s-]*(?:nubuck\\s+)?sole\\b/i,\n        /\\bflexible\\s+sole\\b/i,\n        /\\bflexible\\b[\\s-]*(?:leather\\s+)?insole(?:s)?\\b/i,\n        /\\bsole(?:s)?\\b[\\s\\S]{0,60}\\bflexib(?:le|ility)\\b/i,\n        // DE\n        /\\bflexibl(e|er|es|en)?\\s+sohle\\b/i,\n        /\\bf(?:l|lex)exibilit[aä]t\\b/i,\n        /\\beinlegesohle\\b[\\s\\S]{0,40}\\bflexibl/i,\n        // FR\n        /\\bsemelle\\s+flexible\\b/i,\n        /\\bflexibilit[eé]\\b/i,\n        /\\bsemelle\\b[\\s\\S]{0,60}\\bflexibl/i\n      ]\n    },\n    {\n      name: \"100% Leather\",\n      patterns: [\n        // EN\n        /\\bupper:\\s*leather\\b/i,\n        /100%\\s+[\\w-]+(?:\\s+[\\w-]+){0,3}\\s+leather/i,\n        /\\b100\\s*percent\\s+[\\w-]+(?:\\s+[\\w-]+){0,3}\\s+leather\\b/i,\n        /100%\\s*leather(?!\\s+lining)\\b/i,\n        // DE\n        /\\bober(material)?:\\s*leder\\b/i,\n        /\\b100%\\s*leder\\b/i,\n        /\\bvollleder\\b/i,\n        // FR\n        /\\btige\\s*:\\s*cuir\\b/i,\n        /\\b100%\\s*cuir\\b/i,\n        /\\ben\\s+cuir\\b/i\n      ]\n    },\n    {\n      name: \"2-Ply Supima Cotton\",\n      patterns: [\n        // EN\n        /2[-\\s]*ply\\s+supima/i,\n        /supima\\s+cotton.*2[-\\s]*ply/i,\n        // DE\n        /2[-\\s]*(?:f(?:a|ä)dig|lagig)\\s+supima/i,\n        /supima.*2[-\\s]*(?:f(?:a|ä)dig|lagig)/i,\n        // FR\n        /supima.*2\\s*fils/i,\n        /2\\s*fils.*supima/i\n      ]\n    },\n    {\n\t  name: \"Reversible\",\n\t  patterns: [\n\t    // EN\n\t    /\\breversible\\b/i,\n\t\n\t    // DE\n\t    /\\bwendbar\\b/i,\n\t\n\t    // FR\n\t    /\\br[eé]versible\\b/i\n\t  ]\n\t},\n    {\n      name: \"100% Linen\",\n      patterns: [\n        // EN\n        /100%\\s*linen/i,\n        /pure\\s+linen/i,\n        // DE\n        /100%\\s*leinen/i,\n        /\\breines\\s+leinen\\b/i,\n        // FR\n        /100%\\s*lin/i,\n        /\\bpur\\s+lin\\b/i\n      ]\n    },\n    {\n      name: \"Non-Iron\",\n      patterns: [\n        // EN\n        /non[-\\s]?iron/i,\n        /easy[-\\s]?iron/i,\n        /no\\s+ironing/i,\n        /crease[-\\s]?free/i,\n        // DE\n        /\\bb[üu]gelfrei\\b/i,\n        /\\bleicht\\s+zu\\s+b[üu]geln\\b/i,\n        /\\bohne\\s+b[üu]geln\\b/i,\n        /\\bknitterfrei\\b/i,\n        // FR\n        /\\bsans\\s+repassage\\b/i,\n        /\\bfacile\\s+a\\s+repasser\\b/i,\n        /\\bne\\s+se\\s+repass(e|ent)\\s+pas\\b/i,\n        /\\bsans\\s+pli(s)?\\b/i\n      ]\n    },\n    {\n      name: \"Stretch\",\n      patterns: [\n        // EN\n        /\\bstretch\\b/i,\n        /with\\s+stretch/i,\n        /added\\s+stretch/i,\n        /\\blycra\\b/i,\n        /\\belastane\\b/i,\n        // DE\n        /\\belastan\\b/i,\n        /\\belastisch\\b/i,\n        /\\bmit\\s+stretch\\b/i,\n        // FR\n        /\\bextensible\\b/i,\n        /\\b(avec|ajout\\s+de)\\s+stretch\\b/i,\n        /\\b[ée]lasthanne\\b/i\n      ]\n    },\n    {\n      name: \"Breathable\",\n      patterns: [\n        // EN\n        /breathable/i,\n        /breathability/i,\n        /naturally\\s+breathable/i,\n        /keeps?\\s+you\\s+cool/i,\n        // DE\n        /\\batmungsaktiv\\b/i,\n        /\\b(luft|klima)durchl[aä]ssig\\b/i,\n        /\\bh[aä]lt\\s+(sie|dich)\\s+k[üu]hl\\b/i,\n        // FR\n        /\\brespirant(e|s)?\\b/i,\n        /\\blaisse\\s+respirer\\b/i,\n        /\\b(a[eè]re|aeration)\\b/i\n      ]\n    },\n    {\n      name: \"Moisture Wicking\",\n      patterns: [\n        // EN\n        /moisture[-\\s]?wick/i,\n        /wicking/i,\n        // DE\n        /\\bfeuchtigkeitsableitend\\b/i,\n        /\\bfeuchtigkeit\\b[\\s\\S]{0,20}\\bableit/i,\n        /\\bschwei(ss|ß)(?:ableitend|transport)\\b/i,\n        // FR\n        /\\b[eé]vacuation\\s+de\\s+l['’]humidit[eé]\\b/i,\n        /\\banti[-\\s]?transpiration\\b/i,\n        /\\btranspiration\\b[\\s\\S]{0,30}\\b(evacue|[eé]vacuation)\\b/i\n      ]\n    },\n    {\n      name: \"Water Repellent\",\n      patterns: [\n        // EN\n        /water[-\\s]?repell/i,\n        /water[-\\s]?resist/i,\n        /shower[-\\s]?resist/i,\n        /rain[-\\s]?resist/i,\n        // DE\n        /\\bwasserabweisend\\b/i,\n        /\\bregenabweisend\\b/i,\n        /\\bwasserfest\\b/i,\n        // FR\n        /\\bd[eé]perlant(e|s)?\\b/i,\n        /\\br[eé]sistant\\s+(a|au)\\s+l['’]eau\\b/i,\n        /\\bimperm[eé]able\\b/i\n      ]\n    },\n    {\n      name: \"Lightweight\",\n      patterns: [\n        // EN\n        /light[-\\s]?weight/i,\n        /lighter\\s+weight/i,\n        // DE\n        /\\bleicht\\b/i,\n        /\\bleichtgewicht\\b/i,\n        /\\bgeringes\\s+gewicht\\b/i,\n        // FR\n        /\\bl[eé]ger\\b/i,\n        /\\bl[eé]g[eè]ret[eé]\\b/i,\n        /\\bpoids\\s+l[eé]ger\\b/i\n      ]\n    },\n    {\n      name: \"Stain Repellent\",\n      patterns: [\n        // EN\n        /stain[-\\s]?resist/i,\n        /stain[-\\s]?repell/i,\n        // DE\n        /\\bfleckabweisend\\b/i,\n        /\\bschmutzabweisend\\b/i,\n        // FR\n        /\\banti[-\\s]?tache(s)?\\b/i,\n        /\\bresiste\\s+aux\\s+taches\\b/i\n      ]\n    },\n    {\n      name: \"Stretch Waistband\",\n      patterns: [\n        // EN\n        /stretch\\s+waistband/i,\n        /comfort\\s+waist/i,\n        // DE\n        /\\bdehnbarer\\s+bund\\b/i,\n        /\\bkomfortbund\\b/i,\n        /\\bstretchbund\\b/i,\n        // FR\n        /\\bceinture\\s+extensible\\b/i,\n        /\\btaille\\s+extensible\\b/i,\n        /\\bceinture\\s+stretch\\b/i\n      ]\n    },\n    {\n      name: \"Temperature Regulating\",\n      patterns: [\n        // EN\n        /temperature[-\\s]?regulat/i,\n        /thermo[-\\s]?regulat/i,\n        // DE\n        /\\btemperaturregulierend\\b/i,\n        /\\btemperatur\\b[\\s\\S]{0,20}\\bregulier/i,\n        /\\bthermo\\b/i,\n        // FR\n        /\\br[eé]gulation\\s+de\\s+la\\s+temp[eé]rature\\b/i,\n        /\\bthermo[-\\s]?r[eé]gulation\\b/i,\n        /\\bthermique\\b/i\n      ]\n    },\n    {\n      name: \"Merino Wool\",\n      patterns: [\n        // EN\n        /merino/i,\n        // DE\n        /\\bmerinowolle\\b/i,\n        // FR\n        /\\blaine\\s+m[eé]rinos\\b/i\n      ]\n    },\n    {\n      name: \"Machine Washable\",\n      patterns: [\n        // EN\n        /machine[-\\s]?wash/i,\n        /machine\\s+washable/i,\n        /easy\\s+care/i,\n        // DE\n        /\\bmaschinenwaschbar\\b/i,\n        /\\bmaschinenw[aä]sche\\b/i,\n        /\\bpflegeleicht\\b/i,\n        // FR\n        /\\blavable\\s+en\\s+machine\\b/i,\n        /\\blavage\\s+en\\s+machine\\b/i,\n        /\\bentretien\\s+facile\\b/i\n      ]\n    },\n    {\n      name: \"Super 120s Wool\",\n      patterns: [\n        // EN\n        /super\\s*120/i,\n        /120s\\s+wool/i,\n        // DE\n        /super\\s*120/i,\n        /120s\\s+wolle/i,\n        // FR\n        /super\\s*120/i,\n        /laine\\s+super\\s*120/i\n      ]\n    },\n    {\n      name: \"Reda Cloth\",\n      patterns: [\n        // EN/DE/FR: brand name is stable\n        /reda\\b/i\n      ]\n    },\n    {\n      name: \"Crease Recovery\",\n      patterns: [\n        // EN\n        /crease[-\\s]?recovery/i,\n        /crease[-\\s]?resistant/i,\n        // DE\n        /\\bknittererholung\\b/i,\n        /\\bknitterarm\\b/i,\n        /\\bknitter\\b[\\s\\S]{0,20}\\b(erhol|resist)\\b/i,\n        // FR\n        /\\br[eé]sistant\\s+aux\\s+plis\\b/i,\n        /\\banti[-\\s]?plis\\b/i\n      ]\n    }\n  ];\n\n  var EXTRA_ATTRS = [\n    {\n      name: \"Silky Feel\",\n      patterns: [\n        // EN\n        /silky[\\s-]*feel/i,\n        // DE\n        /\\bseid(en|ig)\\b/i,\n        /\\bseidig\\b/i,\n        // FR\n        /\\btoucher\\s+soyeux\\b/i,\n        /\\bsoyeux\\b/i\n      ]\n    }\n  ];\n\n  function dedupePush(list, attr) {\n    for (var i = 0; i \u003c list.length; i++) if (list[i].name === attr.name) return;\n    list.push(attr);\n  }\n\n  function findAttributes(text) {\n    var attrs = [];\n    var i, j, a, p;\n\n    for (i = 0; i \u003c ICON_ATTRS.length; i++) {\n      a = ICON_ATTRS[i];\n      for (j = 0; j \u003c a.patterns.length; j++) {\n        p = a.patterns[j];\n        if (p.test(text)) {\n          dedupePush(attrs, a);\n          break;\n        }\n      }\n    }\n\n    for (i = 0; i \u003c EXTRA_ATTRS.length; i++) {\n      if (attrs.length \u003e= 4) break;\n      a = EXTRA_ATTRS[i];\n      for (j = 0; j \u003c a.patterns.length; j++) {\n        p = a.patterns[j];\n        if (p.test(text)) {\n          dedupePush(attrs, a);\n          break;\n        }\n      }\n    }\n\n    var mapped = [];\n    for (i = 0; i \u003c attrs.length \u0026\u0026 i \u003c 4; i++) {\n      a = attrs[i];\n      mapped.push({ name: a.name, icon: ICONS[a.name] || null });\n    }\n\n    if (ONLY_SHOW_ICON_ATTRS) {\n      mapped = mapped.filter(function (attr) {\n        return !!attr.icon;\n      });\n    }\n\n    return mapped;\n  }\n\n  // ---- Product-specific rules ----\n  function applyProductSpecificRules(attrs) {\n    var raw = String(window.ctPdpRawText || \"\");\n    var isSuit = isSuitProductName();\n    \n\t    var isPureSilk =\n\t  /100%\\s*silk/i.test(raw) ||\n\t  /100%\\s*seide/i.test(raw) ||\n\t  /100%\\s*soie/i.test(raw);\n\t\n\tif (isPureSilk) {\n\t  attrs = upsertAttrWithCap(attrs, makeAttr(\"100% Silk\", \"100% Silk\"));\n\t\n\t  // Clean up conflicting materials\n\t  attrs = removeAttr(attrs, \"100% Cotton\");\n\t  attrs = removeAttr(attrs, \"100% Linen\");\n\t  attrs = removeAttr(attrs, \"Merino Wool\");\n\t}\n\n    function replaceLightweightWithFabric() {\n      if (hasAttr(attrs, \"Lightweight\")) {\n        attrs = replaceAttr(attrs, \"Lightweight\", makeAttr(\"Lightweight Fabric\", \"Lightweight Fabric\"));\n      }\n      return attrs;\n    }\n    \n\t    if (productIdEquals(\"ACU0220WHT\")) {\n\t  attrs = upsertAttrWithCap(attrs, makeAttr(\"V-Neck Undershirt\", \"V-Neck Undershirt\"));\n\t}\n    \n    if (productIdEquals(\"TRC0285NAV\")) {\n      attrs = removeAttr(attrs, \"Temperature Regulating\");\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Moisture Wicking\", \"Moisture Wicking\"));\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Stretch Waistband\", \"Stretch Waistband\"));\n    }\n\n    if (productIdEquals(\"OUC0089NAV\")) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Insulated for Warmth\", \"Insulated for Warmth\"));\n    }\n\n    if (productIdEquals(\"OUC0093NAV\")) {\n      attrs = removeAttr(attrs, \"Merino Wool\");\n    }\n\n    if (productIdEquals(\"OUR0033NAV\")) {\n      attrs = removeAttr(attrs, \"Lightweight\");\n      attrs = removeAttr(attrs, \"Lightweight Fabric\");\n    }\n\n    if (productIdEquals(\"OUC0088NAV\")) {\n      attrs = removeAttr(attrs, \"Lightweight\");\n      attrs = removeAttr(attrs, \"Lightweight Fabric\");\n    }\n\n    if (productIdEquals(\"OUC0081NAV\")) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Insulated for Warmth\", \"Insulated for Warmth\"));\n    }\n\n    if (productIdEquals(\"OUR0036NAV\")) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Machine Washable\", \"Machine Washable\"));\n    }\n\n    if (productIdEquals(\"OUC0085BLK\")) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Insulated for Warmth\", \"Insulated for Warmth\"));\n    }\n\n    if (nameIncludes(\"performance chinos\") || nameIncludes(\"performance-chinos\")) {\n      attrs = removeAttr(attrs, \"Temperature Regulating\");\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Moisture Wicking\", \"Moisture Wicking\"));\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Stretch Waistband\", \"Stretch Waistband\"));\n    }\n\n    if (nameIncludes(\"puffer coat\")) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Insulated for Warmth\", \"Insulated for Warmth\"));\n    }\n    if (nameIncludes(\"lightweight quilted jacket\") || nameIncludes(\"diamond quilted jacket\")) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Insulated for Warmth\", \"Insulated for Warmth\"));\n    }\n    if (nameIncludes(\"flannel gilet\")) {\n      attrs = removeAttr(attrs, \"Merino Wool\");\n    }\n    if (nameIncludes(\"3 in 1\") \u0026\u0026 (nameIncludes(\"raincoat\") || nameIncludes(\"rain mac\") || nameIncludes(\"rain\"))) {\n      attrs = removeAttr(attrs, \"Lightweight\");\n      attrs = removeAttr(attrs, \"Lightweight Fabric\");\n    }\n    if (nameIncludes(\"wool funnel neck\")) {\n      attrs = removeAttr(attrs, \"Lightweight\");\n      attrs = removeAttr(attrs, \"Lightweight Fabric\");\n    }\n    if (nameIncludes(\"padded raincoat\")) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Machine Washable\", \"Machine Washable\"));\n    }\n\n    if (productIdStartsWith(\"SH\")) {\n      attrs = replaceAttr(attrs, \"100% Leather\", makeAttr(\"100% Leather Upper\", \"100% Leather Upper\"));\n      if (/sole/i.test(raw) || /sohle/i.test(raw) || /semelle/i.test(raw)) {\n        attrs = replaceAttr(attrs, \"Lightweight\", makeAttr(\"Lightweight Sole\", \"Lightweight\"));\n      }\n    }\n\n    if (hasAttr(attrs, \"100% Leather\") || hasAttr(attrs, \"100% Leather Upper\")) {\n      attrs = removeAttr(attrs, \"100% Leather Lined\");\n    }\n\n    if (hasAttr(attrs, \"Flexible Sole\")) {\n      attrs = removeAttr(attrs, \"Lightweight Sole\");\n    }\n\n    if (isSocksProduct()) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Breathable\", \"Breathable\"));\n    }\n\n    if (isSocksProduct() \u0026\u0026 (/luxury\\s+cotton/i.test(raw) || /luxus.*baumwoll/i.test(raw) || /coton.*luxe/i.test(raw))) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Soft Touch\", \"Soft Touch\"));\n    }\n\n    if (isCottonRibSocks()) {\n      attrs = removeAttr(attrs, \"Temperature Regulating\");\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Soft Touch\", \"Soft Touch\"));\n    }\n\n    if (isComfortSocks()) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Soft Touch\", \"Soft Touch\"));\n    }\n\n    if (isNoShowOrInvisibleSocks()) {\n      attrs = (attrs || []).filter(function (a) {\n        if (!a || !a.name) return true;\n        var nn = String(a.name).toLowerCase();\n        return nn !== \"lightweight\" \u0026\u0026 nn !== \"lightweight sole\";\n      });\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Breathable\", \"Breathable\"));\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Soft Touch\", \"Soft Touch\"));\n    }\n\n    if (isMerinoWoolSocks()) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Temperature Regulating\", \"Temperature Regulating\"));\n    }\n\n    if (isTrainersProduct()) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Breathable\", \"Breathable\"));\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Flexible Sole\", \"Flexible Sole\"));\n    }\n\n    if (productIdEquals(\"SHS0004CHC\")) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Breathable\", \"Breathable\"));\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Flexible Sole\", \"Flexible Sole\"));\n    }\n\n    if (productIdEquals(\"SHW0252LGY\")) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Lightweight\", \"Lightweight\"));\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Breathable\", \"Breathable\"));\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Flexible Sole\", \"Flexible Sole\"));\n    }\n\n    if (productIdEquals(\"SHW0200BRN\")) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Breathable\", \"Breathable\"));\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Flexible Sole\", \"Flexible Sole\"));\n    }\n\n    if (hasAttr(attrs, \"Flexible Sole\")) {\n      attrs = removeAttr(attrs, \"Lightweight Sole\");\n    }\n\n    if (productIdStartsWith(\"AC\") \u0026\u0026 !productIdEquals(\"ACR0009NAV\")) {\n      attrs = removeAttr(attrs, \"Stretch\");\n      attrs = removeAttr(attrs, \"Cotton Stretch\");\n    }\n\n    if (productIdEquals(\"ACR0009NAV\")) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Stretch\", \"Stretch\"));\n    }\n\n    if (productIdEquals(\"ACU0200MNV\")) {\n      attrs = removeAttr(attrs, \"Stretch\");\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Cotton Stretch\", \"Cotton Stretch\"));\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Soft Touch\", \"Soft Touch\"));\n    }\n\n    if (productIdEquals(\"ACC0223NAV\") || productIdEquals(\"ACC0233NAV\")) {\n      attrs = removeAttr(attrs, \"Lightweight\");\n      attrs = removeAttr(attrs, \"Lightweight Sole\");\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Soft Touch\", \"Soft Touch\"));\n    }\n\n    if (productIdEquals(\"ACG0008BRN\")) {\n      attrs = removeAttr(attrs, \"100% Leather\");\n      attrs = removeAttr(attrs, \"100% Leather Upper\");\n      attrs = removeAttr(attrs, \"100% Leather Lined\");\n    }\n\n    \n\n    if (nameIncludes(\"natural stretch twill\")) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Merino Wool\", \"Merino Wool\"));\n    }\n\n    if (nameIncludes(\"seasonal design\")) {\n      attrs = removeAttr(attrs, \"Merino Wool\");\n      attrs = removeAttr(attrs, \"Super 120s Wool\");\n    }\n\n    if (nameIncludes(\"100% linen\") \u0026\u0026 isSuit) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Breathable\", \"Breathable\"));\n      attrs = replaceLightweightWithFabric();\n    }\n\n    if (nameIncludes(\"Ultimate Non-Iron Chinos\")) {\n      attrs = removeAttr(attrs, \"Breathable\");\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Stretch Waistband\", \"Stretch Waistband\"));\n    }\n\n    if (nameIncludes(\"ultimate performance\") \u0026\u0026 isSuit) {\n      attrs = removeAttr(attrs, \"Temperature Regulating\");\n      attrs = removeAttr(attrs, \"Stretch\");\n      attrs = removeAttr(attrs, \"Cotton Stretch\");\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Natural Stretch\", \"Natural Stretch\"));\n    }\n\n    if (nameIncludes(\"italian\") \u0026\u0026 isSuit) {\n      attrs = replaceLightweightWithFabric();\n    }\n\n    if (nameIncludes(\"morning suit\")) {\n      attrs = removeAttr(attrs, \"Breathable\");\n    }\n\n    if (nameIncludes(\"wool texture\")) {\n      attrs = removeAttr(attrs, \"Breathable\");\n    }\n\n    if (nameIncludes(\"proper blazer\")) {\n      attrs = removeAttr(attrs, \"Breathable\");\n    }\n\n    if (nameIncludes(\"cotton stretch\") \u0026\u0026 !isSuit) {\n      attrs = removeAttr(attrs, \"100% Cotton\");\n    }\n\n    if (nameIncludes(\"linen cotton\") \u0026\u0026 !isSuit) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Lightweight\", \"Lightweight\"));\n    }\n\n    if (nameIncludes(\"wool silk\") \u0026\u0026 !isSuit) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Soft Touch\", \"Soft Touch\"));\n    }\n\n\n    if ((nameIncludes(\"luxury italian\") || nameIncludes(\"italian luxury\")) \u0026\u0026 !isSuit) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Breathable\", \"Breathable\"));\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Stretch\", \"Stretch\"));\n    }\n\n    if (nameIncludes(\"brushed flannel\")) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Soft Touch\", \"Soft Touch\"));\n    }\n\n    if (nameHasStretchKeyword()) {\n      var nn = normaliseText(getProductName());\n\n      if (nn.indexOf(\"cotton stretch\") \u003e -1 || nn.indexOf(\"baumwoll-stretch\") \u003e -1 || nn.indexOf(\"coton stretch\") \u003e -1) {\n        attrs = removeAttr(attrs, \"Stretch\");\n        attrs = upsertAttrWithCap(attrs, makeAttr(\"Cotton Stretch\", \"Cotton Stretch\"));\n      } else if (!hasAttr(attrs, \"Cotton Stretch\")) {\n        attrs = upsertAttrWithCap(attrs, makeAttr(\"Stretch\", \"Stretch\"));\n      }\n    }\n\n    if (productIdEquals(\"FOL0240WHT\") || productIdEquals(\"FOL0242WHT\")) {\n      attrs = removeAttr(attrs, \"Lightweight\");\n      attrs = removeAttr(attrs, \"Lightweight Fabric\");\n      attrs = removeAttr(attrs, \"Lightweight Sole\");\n    }\n\n    if (productIdEquals(\"FOR2362WHT\")) {\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"100% 2-Ply Egyptian Cotton\", \"100% Cotton\"));\n    }\n\n    if (productIdEquals(\"JEP0340NAV\")) {\n      attrs = removeAttr(attrs, \"Lightweight\");\n      attrs = removeAttr(attrs, \"Lightweight Fabric\");\n      attrs = removeAttr(attrs, \"Lightweight Sole\");\n    }\n    \n     // ---- Slip-on loafers (explicit SKU override) ----\n\tvar LOAFER_IDS = [\n\t  \"SHW0252LGY\",\n\t  \"SHW0252CHK\",\n\t  \"SHW0252LBN\",\n\t  \"SHW0252NAV\",\n\t  \"SHW0264CHC\",\n\t  \"SHW0268OCE\"\n\t];\n\t\n\tif (LOAFER_IDS.indexOf(normaliseId(getProductId())) \u003e -1) {\n\t  attrs = [\n\t    makeAttr(\"Flexible Sole\", \"Flexible Sole\"),\n\t    makeAttr(\"Breathable\", \"Breathable\"),\n\t    makeAttr(\"Lightweight\", \"Lightweight\"),\n\t    makeAttr(\"100% Leather Upper\", \"100% Leather Upper\")\n\t  ];\n\t}\n\n\n    // Shirts: cap at 4 and prioritise Machine Washable if mentioned in copy (EN+DE+FR)\n    if (isShirtProduct()) {\n      var wantsMW =\n        /machine[-\\s]?wash/i.test(raw) ||\n        /machine\\s+washable/i.test(raw) ||\n        /easy\\s+care/i.test(raw) ||\n        /maschinenwaschbar/i.test(raw) ||\n        /pflegeleicht/i.test(raw) ||\n        /lavable\\s+en\\s+machine/i.test(raw) ||\n        /lavage\\s+en\\s+machine/i.test(raw);\n\n      if (wantsMW) {\n        attrs = upsertAttrWithCapN(attrs, makeAttr(\"Machine Washable\", \"Machine Washable\"), 4);\n      }\n\n      attrs = enforceCapN(attrs, 4);\n\n      if (wantsMW \u0026\u0026 !hasAttr(attrs, \"Machine Washable\")) {\n        attrs[3] = makeAttr(\"Machine Washable\", \"Machine Washable\");\n      }\n    }\n\n    // Cashmere products: always Breathable + Temperature Regulating (EN+DE+FR)\n    var pn = normaliseText(getProductName());\n    \n\t   var isCashmere =\n\t  pn.indexOf(\"cashmere\") \u003e -1 ||\n\t  pn.indexOf(\"kaschmir\") \u003e -1 ||\n\t  pn.indexOf(\"cachemire\") \u003e -1;\n\t\n\tvar isPureCashmere =\n\t  /100%\\s*cashmere/i.test(raw) ||\n\t  /100%\\s*kaschmir/i.test(raw) ||\n\t  /100%\\s*cachemire/i.test(raw);\n\t\n\tif (isCashmere) {\n\t  if (isPureCashmere) {\n\t    attrs = upsertAttrWithCap(attrs, makeAttr(\"100% Cashmere\", \"100% Cashmere\"));\n\t  }\n\t\n\t  attrs = upsertAttrWithCap(attrs, makeAttr(\"Breathable\", \"Breathable\"));\n\t  attrs = upsertAttrWithCap(attrs, makeAttr(\"Temperature Regulating\", \"Temperature Regulating\"));\n\t}\n\n    if (productIdEquals(\"SUB0626IDG\")) {\n      attrs = removeAttr(attrs, \"Super 120s Wool\");\n      attrs = upsertAttrWithCap(attrs, makeAttr(\"Merino Wool\", \"Merino Wool\"));\n    }\n\n    return attrs;\n  }\n\n  // ---- Styling ----\n  function injectStyles() {\n    if (document.getElementById(STYLE_ID)) return;\n\n   var css =\n  \".ct-pdp-icons-list{display:flex;flex-direction:row;gap:3rem;color:#373737;justify-content:flex-start;}\" +\n  \".ct-pdp-icons-list.ct-pdp-icons-list--spread{justify-content:left;}\" +\n  \".ct-pdp-icon-item{display:flex;flex-direction:column;align-items:center;gap:0rem;}\" +\n  \".ct-pdp-icon-item__icon img{width:3.6rem;height:3.6rem;object-fit:contain;display:block;border-radius:100%;padding:5px;}\" +\n  \".ct-pdp-icon-item__text-title{font-size:1.2rem;font-weight:normal;color:#373737;text-align:center;}\";\n\n\n    var style = document.createElement(\"style\");\n    style.id = STYLE_ID;\n    style.textContent = css;\n    document.head.appendChild(style);\n  }\n\n  function removeLegacyIcons() {\n    var old = document.querySelectorAll(\".pdp-icons-container\");\n    for (var i = 0; i \u003c old.length; i++) {\n      if (old[i] \u0026\u0026 old[i].parentNode) old[i].parentNode.removeChild(old[i]);\n    }\n  }\n\n  function isProductSetPage() {\n    try {\n      var t = window.utag_data \u0026\u0026 window.utag_data.page \u0026\u0026 window.utag_data.page.type;\n      return String(t || \"\").toLowerCase() === \"product set\";\n    } catch (e) {}\n    return false;\n  }\n\n  // ---- Render ----\n  function render(attrs) {\n    injectStyles();\n    removeLegacyIcons();\n    if (!attrs || !attrs.length) return;\n\n    var container = document.createElement(\"div\");\n    container.className = \"ct-generated-icons m-bottom-s m-top-s\";\n\n    var list = document.createElement(\"div\");\n    list.className = \"ct-pdp-icons-list\";\n    \n    // If more than 2 icons, spread them out; otherwise keep left aligned\n\tif (attrs.length \u003e 3) {\n\t  list.classList.add(\"ct-pdp-icons-list--spread\");\n\t}\n\n\n    for (var i = 0; i \u003c attrs.length; i++) {\n      var attr = attrs[i];\n\n      var item = document.createElement(\"div\");\n      item.className = \"ct-pdp-icon-item\";\n\n      if (attr.icon) {\n        var iconWrap = document.createElement(\"div\");\n        iconWrap.className = \"ct-pdp-icon-item__icon\";\n\n        var img = document.createElement(\"img\");\n        img.src = attr.icon;\n        img.alt = attr.name;\n\n        iconWrap.appendChild(img);\n        item.appendChild(iconWrap);\n      }\n\n      var title = document.createElement(\"div\");\n      title.className = \"ct-pdp-icon-item__text-title\";\n      title.textContent = attr.name;\n      item.appendChild(title);\n\n      list.appendChild(item);\n    }\n\n    container.appendChild(list);\n\n    if (isProductSetPage()) {\n      var setItem = document.querySelector(\".js-product-set-item\");\n      if (setItem) {\n        setItem.insertAdjacentElement(\"beforebegin\", container);\n        return;\n      }\n    }\n\n    var productContent = document.querySelector(\".pdp-main__inner-details\");\nif (productContent) {\n  // Inject inside .pdp-main__inner-details\n  var last = productContent.lastElementChild;\n\n  // If the LAST nested element is a div.grey2, inject BEFORE it\n  if (\n    last \u0026\u0026\n    last.tagName === \"DIV\" \u0026\u0026\n    last.classList \u0026\u0026\n    last.classList.contains(\"grey2\")\n  ) {\n    productContent.insertBefore(container, last);\n  } else {\n    // Otherwise append as the last element\n    productContent.appendChild(container);\n  }\n}\n  }\n\n  // ---- Poll ----\n  function poll(sel, cb, wait, max) {\n    var attempts = 0;\n    (function check() {\n      var el = document.querySelector(sel);\n      if (el) cb(el);\n      else if (attempts \u003c max) {\n        attempts++;\n        setTimeout(check, wait);\n      }\n    })();\n  }\n\n  function init(root) {\n    if (root.hasAttribute(RUN_FLAG)) return;\n    root.setAttribute(RUN_FLAG, \"true\");\n\n    var text = extractText(root);\n    var attrs = findAttributes(text);\n\n    // Product rules BEFORE localisation\n    attrs = applyProductSpecificRules(attrs);\n\n    // Localise titles (DE/FR)\n    attrs = localiseTitles(attrs);\n\n    window.ctPdpAttributes = attrs;\n    render(attrs);\n  }\n\n  poll(ROOT_SEL, init, 200, 40);\n})();\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"6986151b967c803840d27e22"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function () {\n  \"use strict\";\n\n  if (!window.utag_data || !window.utag_data.page) return;\n\n  var PAGE_TYPE = String(utag_data.page.type || \"\").toLowerCase();\n  if (![\"category\", \"homepage\", \"product\"].includes(PAGE_TYPE)) return;\n\n  var TILE_SELECTOR = \"li.plp-grid__container--tile\";\n  var PLP_BADGE_SELECTOR = \".product-tile__plp-badge\";\n  var HOME_BADGE_SELECTOR = \".image-badge\";\n\n  // PDP\n  var PDP_WRAPPER_SELECTOR = \".pdpimage__item\";\n  var PDP_BADGE_SELECTOR = \".product-tile__custom-badge.js-thumb-sale-badge\";\n\n  var TILE_CLASS = \"has-new-badge-radius\";\n  var PDP_CLASS = \"ct-pdp-has-new-badge\";\n  var HOME_LEFT_CLASS = \"is-left\";\n  var HOME_RIGHT_CLASS = \"is-right\";\n  var STYLE_ID = \"ct-badge-style-simple\";\n\n  function hasMeaningfulText(el) {\n    if (!el) return false;\n    var txt = \"\";\n    try {\n      txt = (el.textContent || \"\").replace(/\\s+/g, \" \").trim();\n    } catch (e) {}\n    return txt.length \u003e 0;\n  }\n\n  function injectStylesOnce() {\n    if (document.getElementById(STYLE_ID)) return;\n    if (!document.head) return;\n\n    var style = document.createElement(\"style\");\n    style.id = STYLE_ID;\n\n    style.textContent = `\n      @media (min-width: 768px) {\n        .product-tile__plp-badge,\n        .product-tile__custom-badge.js-thumb-sale-badge {\n          transform: none !important;\n          top: 0 !important;\n          left: 0 !important;\n          border-bottom-right-radius: 5px !important;\n          min-width: 10rem;\n          width: fit-content !important;\n          max-width: max-content !important;\n          font-size: 14px;\n          height: 25px;\n          display: flex;\n          justify-content: center;\n          align-items: center;\n        }\n      }\n\n      @media (max-width: 767px) {\n        .product-tile__plp-badge,\n        .product-tile__custom-badge.js-thumb-sale-badge {\n          transform: none !important;\n          top: 0 !important;\n          left: 0 !important;\n          border-bottom-right-radius: 5px !important;\n          min-width: 7rem;\n          width: fit-content !important;\n          max-width: max-content !important;\n          display: inline-block;\n          padding-left: 5px;\n          padding-right: 5px;\n        }\n      }\n\n      /* PLP tile rounding */\n      ${TILE_SELECTOR}.${TILE_CLASS} {\n        border-top-left-radius: 5px !important;\n        overflow: hidden !important;\n      }\n\n      /* PDP wrapper rounding */\n      ${PDP_WRAPPER_SELECTOR}.${PDP_CLASS} {\n        border-top-left-radius: 5px !important;\n        overflow: hidden !important;\n      }\n\n      .image-badge {\n        top: 0 !important;\n        padding: 7px 30px !important;\n      }\n\n      .image-badge.${HOME_LEFT_CLASS} {\n        border-bottom-right-radius: 5px !important;\n        border-bottom-left-radius: 0 !important;\n      }\n\n      .image-badge.${HOME_RIGHT_CLASS} {\n        border-bottom-left-radius: 5px !important;\n        border-bottom-right-radius: 0 !important;\n      }\n    `;\n\n    document.head.appendChild(style);\n  }\n\n  function setHomeBadgeSideClass(badge) {\n    if (!badge || !badge.parentElement) return;\n\n    badge.classList.remove(HOME_LEFT_CLASS, HOME_RIGHT_CLASS);\n\n    var rect = badge.getBoundingClientRect();\n    var parentRect = badge.parentElement.getBoundingClientRect();\n\n    var nearRight = Math.abs(rect.right - parentRect.right) \u003c 6;\n    var nearLeft = Math.abs(rect.left - parentRect.left) \u003c 6;\n\n    if (nearRight \u0026\u0026 !nearLeft) badge.classList.add(HOME_RIGHT_CLASS);\n    else badge.classList.add(HOME_LEFT_CLASS);\n  }\n\n  function applyPLPLogic() {\n    var tiles = document.querySelectorAll(TILE_SELECTOR);\n    if (!tiles.length) return;\n\n    tiles.forEach(function (tile) {\n      var badge = tile.querySelector(PLP_BADGE_SELECTOR);\n      tile.classList.toggle(TILE_CLASS, hasMeaningfulText(badge));\n    });\n  }\n\n  function applyHomepageLogic() {\n    var badges = document.querySelectorAll(HOME_BADGE_SELECTOR);\n    if (!badges.length) return;\n\n    badges.forEach(function (badge) {\n      setHomeBadgeSideClass(badge);\n    });\n  }\n\n  function applyPDPLogic() {\n    var wrappers = document.querySelectorAll(PDP_WRAPPER_SELECTOR);\n    if (!wrappers.length) return;\n\n    wrappers.forEach(function (wrapper) {\n      var badge = wrapper.querySelector(PDP_BADGE_SELECTOR);\n      wrapper.classList.toggle(PDP_CLASS, hasMeaningfulText(badge));\n    });\n  }\n\n  function run() {\n    injectStylesOnce();\n\n    if (PAGE_TYPE === \"category\") applyPLPLogic();\n    if (PAGE_TYPE === \"homepage\") applyHomepageLogic();\n    if (PAGE_TYPE === \"product\" \u0026\u0026 !utag_data.page.responsive_design_type == 'Mobile View') applyPDPLogic();\n  }\n\n  function observePage() {\n    if (!document.body) return;\n\n    var scheduled = false;\n    var observer = new MutationObserver(function () {\n      if (scheduled) return;\n      scheduled = true;\n      requestAnimationFrame(function () {\n        scheduled = false;\n        run();\n      });\n    });\n\n    observer.observe(document.body, { childList: true, subtree: true });\n  }\n\n  run();\n  observePage();\n  window.addEventListener(\"resize\", run);\n})();","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"69949077c0b536ed256a342e"},{"uses_overlay":false,"type":"js","parametrized_definition":"(() =\u003e {\n  \"use strict\";\n\n  const RUN_FLAG = \"__CT_FOR_YOU_FULL_PLP_OVERLAY_V1__\";\n  if (window[RUN_FLAG]) return;\n  window[RUN_FLAG] = true;\n\n  const RECO_ID = \"697a88b7a87355cc6408aafc\";\n  const MAX_ITEMS = 36;\n\n  let ctForYouLastFocusedTrigger = null;\n  let ctForYouOverlayKeydownHandler = null;\n  let ctForYouLastInteractionWasKeyboard = false;\n\n  function getForYouCopy() {\n    const lang = String(window.utag_data?.global?.site_language || \"\").toUpperCase();\n\n    if (lang.includes(\"DE\")) {\n      return {\n        label: \"Für Sie\",\n        heading: \"Eine auf Sie zugeschnittene Auswahl\",\n        subheading: \"Eine auf Sie zugeschnittene Auswahl, basierend auf Ihrem Surfverhalten und dem, was andere Kunden lieben.\"\n      };\n    }\n\n    if (lang.includes(\"FR\")) {\n      return {\n        label: \"Pour vous\",\n        heading: \"Une sélection adaptée pour vous\",\n        subheading: \"Une sélection adaptée pour vous, inspirée des produits que vous avez vu et de ce que les autres clients apprécient.\"\n      };\n    }\n\n    return {\n      label: \"For You\",\n      heading: \"A tailored collection for you\",\n      subheading: \"A tailored collection for you, inspired by your browsing and what other customers love.\"\n    };\n  }\n\n  function trackForYouClick() {\n    if (window._satellite \u0026\u0026 typeof window._satellite.track === \"function\") {\n      window._satellite.track(\"for_you_ai\", {\n        link_name: \"for_you_ai\"\n      });\n    }\n  }\n\n  function bindInteractionModeTracking() {\n    if (window.__CT_FOR_YOU_INPUT_MODE_BOUND__) return;\n    window.__CT_FOR_YOU_INPUT_MODE_BOUND__ = true;\n\n    document.addEventListener(\"keydown\", function (e) {\n      const key = e.key;\n      if (\n        key === \"Tab\" ||\n        key === \"Enter\" ||\n        key === \" \" ||\n        key === \"Spacebar\" ||\n        key === \"ArrowDown\" ||\n        key === \"ArrowUp\" ||\n        key === \"ArrowLeft\" ||\n        key === \"ArrowRight\"\n      ) {\n        ctForYouLastInteractionWasKeyboard = true;\n      }\n    }, true);\n\n    document.addEventListener(\"mousedown\", function () {\n      ctForYouLastInteractionWasKeyboard = false;\n    }, true);\n\n    document.addEventListener(\"pointerdown\", function () {\n      ctForYouLastInteractionWasKeyboard = false;\n    }, true);\n\n    document.addEventListener(\"touchstart\", function () {\n      ctForYouLastInteractionWasKeyboard = false;\n    }, true);\n  }\n\n  function markKeyboardInteractionOnTrigger(el) {\n    if (!el || el.getAttribute(\"data-ct-keyboard-bound\") === \"true\") return;\n\n    el.setAttribute(\"data-ct-keyboard-bound\", \"true\");\n\n    el.addEventListener(\"keydown\", function (e) {\n      if (\n        e.key === \"Tab\" ||\n        e.key === \"Enter\" ||\n        e.key === \" \" ||\n        e.key === \"Spacebar\" ||\n        e.key === \"ArrowDown\" ||\n        e.key === \"ArrowUp\" ||\n        e.key === \"ArrowLeft\" ||\n        e.key === \"ArrowRight\"\n      ) {\n        ctForYouLastInteractionWasKeyboard = true;\n      }\n    });\n  }\n\n  function bindDesktopHoverImageSwap(tileEl, imgEl, primarySrc, hoverSrc) {\n    if (!tileEl || !imgEl || !primarySrc || !hoverSrc) return;\n    if (!isDesktopViewport()) return;\n    if (tileEl.getAttribute(\"data-ct-hover-swap-bound\") === \"true\") return;\n\n    tileEl.setAttribute(\"data-ct-hover-swap-bound\", \"true\");\n\n    let preloaded = false;\n    const preloadImg = new Image();\n\n    function ensurePreloaded() {\n      if (preloaded) return;\n      preloadImg.src = hoverSrc;\n      preloaded = true;\n    }\n\n    function swapToHover() {\n      ensurePreloaded();\n      imgEl.src = hoverSrc;\n    }\n\n    function swapToPrimary() {\n      imgEl.src = primarySrc;\n    }\n\n    tileEl.addEventListener(\"mouseenter\", swapToHover);\n    tileEl.addEventListener(\"mouseleave\", swapToPrimary);\n    tileEl.addEventListener(\"focusin\", swapToHover);\n    tileEl.addEventListener(\"focusout\", swapToPrimary);\n  }\n\n  function poll(selector, cb, timeout, max) {\n    max--;\n    if (document.querySelector(selector) \u0026\u0026 window.utag_data) {\n      cb();\n    } else if (max \u003e 0) {\n      setTimeout(() =\u003e poll(selector, cb, timeout, max), timeout);\n    }\n  }\n\n  function isDesktopViewport() {\n    return window.matchMedia \u0026\u0026 window.matchMedia(\"(min-width: 1024px)\").matches;\n  }\n\n  function isMobileViewport() {\n    return !isDesktopViewport();\n  }\n\n  function isMobileView() {\n    try {\n      const t = (window.utag_data?.page?.responsive_design_type || \"\").toLowerCase();\n      return t === \"mobile view\";\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function escapeHtml(str) {\n    return String(str || \"\")\n      .replace(/\u0026/g, \"\u0026amp;\")\n      .replace(/\u003c/g, \"\u0026lt;\")\n      .replace(/\u003e/g, \"\u0026gt;\")\n      .replace(/\"/g, \"\u0026quot;\")\n      .replace(/'/g, \"\u0026#039;\");\n  }\n\n  function cleanProductTitle(raw) {\n    let t = String(raw || \"\").trim();\n    if (!t) return \"\";\n\n    t = t.replace(/^(men’s|men's|mens)\\s+/i, \"\").trim();\n    t = t.replace(/^(women’s|women's|womens)\\s+/i, \"\").trim();\n    t = t.replace(/\\bPants\\b/gi, \"Trousers\");\n    t = t.replace(/charles\\s+tyrwhitt/ig, \"\").trim();\n\n    const sizeIdx = t.toLowerCase().indexOf(\" size\");\n    if (sizeIdx !== -1) {\n      t = t.slice(0, sizeIdx).trim();\n    }\n\n    t = t\n      .replace(/\\bSingle\\s+Cuff\\b/ig, \"\")\n      .replace(/\\bPure\\b/ig, \"\")\n      .replace(/\\s{2,}/g, \" \")\n      .replace(/\\s+[-–—]\\s*$/g, \"\")\n      .trim();\n\n    return t;\n  }\n\n  function formatCollarType(raw) {\n    const t = String(raw || \"\").trim();\n    if (!t) return \"\";\n    return t\n      .replace(/[_-]+/g, \" \")\n      .replace(/\\s+/g, \" \")\n      .replace(/\\b\\w/g, function (m) { return m.toUpperCase(); });\n  }\n\n  function normalizeMoney(val) {\n    const v = String(val || \"\").trim();\n    if (!v) return \"\";\n    return v.replace(/\\s+/g, \"\").replace(/,/g, \"\").replace(/[^\\d.]/g, \"\").trim();\n  }\n\n  function parseMoney(val) {\n    const n = normalizeMoney(val);\n    return n ? parseFloat(n) : NaN;\n  }\n\n  function hasRealDiscount(was, now) {\n    const wasNum = parseMoney(was);\n    const nowNum = parseMoney(now);\n\n    if (!Number.isNaN(wasNum) \u0026\u0026 !Number.isNaN(nowNum)) {\n      return wasNum \u003e nowNum;\n    }\n\n    return !!was \u0026\u0026 !!now \u0026\u0026 String(was).trim() !== String(now).trim();\n  }\n\n  function removeProductTile(tileEl) {\n    try {\n      if (tileEl \u0026\u0026 tileEl.parentNode) tileEl.parentNode.removeChild(tileEl);\n    } catch (e) {}\n  }\n\n  function watchTileImage(imgEl, tileEl, onRemoved) {\n    if (!imgEl || !tileEl) return;\n\n    const src = (imgEl.getAttribute(\"src\") || \"\").trim();\n    if (!src) return;\n\n    let settled = false;\n\n    function removeTile() {\n      if (settled) return;\n      settled = true;\n      removeProductTile(tileEl);\n      if (typeof onRemoved === \"function\") onRemoved();\n    }\n\n    function handleLoad() {\n      if (settled) return;\n\n      if (imgEl.naturalWidth \u003e 0 \u0026\u0026 imgEl.naturalHeight \u003e 0) {\n        settled = true;\n        tileEl.setAttribute(\"data-ct-image-ok\", \"true\");\n      } else {\n        removeTile();\n      }\n    }\n\n    function handleError() {\n      removeTile();\n    }\n\n    imgEl.addEventListener(\"load\", handleLoad, { once: true });\n    imgEl.addEventListener(\"error\", handleError, { once: true });\n\n    if (imgEl.complete) {\n      if (imgEl.naturalWidth \u003e 0 \u0026\u0026 imgEl.naturalHeight \u003e 0) {\n        settled = true;\n        tileEl.setAttribute(\"data-ct-image-ok\", \"true\");\n      } else {\n        removeTile();\n      }\n    }\n  }\n\n  function buildProductUrl(prodId) {\n    if (!prodId) return \"#\";\n\n    const global = window.utag_data?.global || {};\n    const country = String(global.sfcc_country || \"UK\").toLowerCase();\n    const siteLanguage = String(global.site_language || \"\").trim();\n\n    const pathParts = (window.location.pathname || \"\").split(\"/\").filter(Boolean);\n\n    let prefix = \"/\" + encodeURIComponent(country);\n\n    if (\n      pathParts.length \u003e= 2 \u0026\u0026\n      pathParts[0].toLowerCase() === country \u0026\u0026\n      siteLanguage \u0026\u0026\n      pathParts[1].toLowerCase() === siteLanguage.toLowerCase()\n    ) {\n      prefix += \"/\" + encodeURIComponent(siteLanguage);\n    }\n\n    return (\n      window.location.origin +\n      prefix +\n      \"/\" +\n      encodeURIComponent(prodId) +\n      \".html?pf=for_you_ai\"\n    );\n  }\n\n  const COPY = getForYouCopy();\n\n  const CT_PRODUCT_DATA = (() =\u003e {\n    const cache = new Map();\n    const inflight = new Map();\n    const queue = [];\n    let active = 0;\n\n    const MAX_CONCURRENCY = 4;\n    const TIMEOUT_MS = 8000;\n    const RETRIES = 1;\n\n    function buildUrl(prodId) {\n      const global = window.utag_data?.global || {};\n      const country = global.sfcc_country || \"UK\";\n      const lang = global.site_language || \"en_GB\";\n\n      return (\n        \"/on/demandware.store/Sites-CTShirts-\" +\n        encodeURIComponent(country) +\n        \"-Site/\" +\n        encodeURIComponent(lang) +\n        \"/Product-getProductTileData?productids=\" +\n        encodeURIComponent(prodId)\n      );\n    }\n\n    function ajaxText(url) {\n      if (window.jQuery \u0026\u0026 window.jQuery.ajax) {\n        return new Promise((resolve, reject) =\u003e {\n          let done = false;\n          const timer = setTimeout(() =\u003e {\n            if (done) return;\n            done = true;\n            reject(new Error(\"timeout\"));\n          }, TIMEOUT_MS);\n\n          window.jQuery\n            .ajax({ url, method: \"GET\", dataType: \"text\" })\n            .done((txt) =\u003e {\n              if (done) return;\n              done = true;\n              clearTimeout(timer);\n              resolve(txt);\n            })\n            .fail((xhr, status, err) =\u003e {\n              if (done) return;\n              done = true;\n              clearTimeout(timer);\n              reject(new Error(status || err || \"ajax_fail\"));\n            });\n        });\n      }\n\n      return fetch(url, { credentials: \"include\" }).then((r) =\u003e r.text());\n    }\n\n    async function fetchOne(prodId, attempt = 0) {\n      const url = buildUrl(prodId);\n\n      try {\n        const txt = await ajaxText(url);\n\n        let json = null;\n        try {\n          json = JSON.parse(txt);\n        } catch (e) {\n          if (attempt \u003c RETRIES) return fetchOne(prodId, attempt + 1);\n          return null;\n        }\n\n        if (!Array.isArray(json) || !json.length) return null;\n\n        const obj =\n          json.find((x) =\u003e x \u0026\u0026 String(x.productid).toUpperCase() === String(prodId).toUpperCase()) ||\n          json[0];\n\n        if (!obj) return null;\n\n        return {\n          id: String(obj.productid || prodId).toUpperCase(),\n          name: String(obj.productname || \"\"),\n          collarType: String(obj.collarType || \"\"),\n          image0: String(obj.productimage0 || \"\"),\n          image1: String(obj.productimage1 || \"\"),\n          was: String(obj.wasprice || \"\"),\n          now: String(obj.nowprice || \"\"),\n          mbuy: String(obj.multibuyPrice || \"\")\n        };\n      } catch (e) {\n        if (attempt \u003c RETRIES) return fetchOne(prodId, attempt + 1);\n        return null;\n      }\n    }\n\n    function pump() {\n      while (active \u003c MAX_CONCURRENCY \u0026\u0026 queue.length) {\n        const job = queue.shift();\n        active++;\n\n        fetchOne(job.id)\n          .then((res) =\u003e {\n            if (res) cache.set(job.id, res);\n            job.resolve(res);\n          })\n          .catch(() =\u003e job.resolve(null))\n          .finally(() =\u003e {\n            active--;\n            pump();\n          });\n      }\n    }\n\n    function get(prodId) {\n      if (!prodId) return Promise.resolve(null);\n\n      const id = String(prodId).toUpperCase();\n\n      if (cache.has(id)) return Promise.resolve(cache.get(id));\n      if (inflight.has(id)) return inflight.get(id);\n\n      const p = new Promise((resolve) =\u003e {\n        queue.push({ id, resolve });\n        pump();\n      }).finally(() =\u003e inflight.delete(id));\n\n      inflight.set(id, p);\n      return p;\n    }\n\n    return { get };\n  })();\n\n  function applyEndpointDataToTile(prodId, tileEl, onTileChange) {\n    if (!prodId || !tileEl) return Promise.resolve(false);\n\n    tileEl.setAttribute(\"data-ct-hydrating\", \"true\");\n\n    return CT_PRODUCT_DATA.get(prodId).then((p) =\u003e {\n      if (!p) {\n        removeProductTile(tileEl);\n        if (typeof onTileChange === \"function\") onTileChange();\n        return false;\n      }\n\n      const cleanTitle = cleanProductTitle(p.name || prodId);\n      const bestImg = String(p.image0 || p.image1 || \"\").trim();\n\n      if (!bestImg) {\n        removeProductTile(tileEl);\n        if (typeof onTileChange === \"function\") onTileChange();\n        return false;\n      }\n\n      const titleEl = tileEl.querySelector(\"[data-ct-title]\");\n      if (titleEl) {\n        titleEl.textContent = cleanTitle;\n      }\n\n      const collarWrap = tileEl.querySelector(\"[data-ct-collar-wrap]\");\n      if (collarWrap) {\n        const rawCollar = String(p.collarType || \"\").trim().toLowerCase();\n\n        const EXCLUDED_COLLARS = [\n          \"polo\",\n          \"button_neck\",\n          \"Button Neck\",\n          \"trophy_neck\"\n        ];\n\n        const isExcluded = EXCLUDED_COLLARS.some(function (val) {\n          return rawCollar.includes(val);\n        });\n\n        let collarEl = collarWrap.querySelector(\".product-tile__collar-label\");\n\n        if (isExcluded) {\n          collarWrap.classList.remove(\"ct-for-you-has-collar\");\n\n          if (collarEl \u0026\u0026 collarEl.parentNode) {\n            collarEl.parentNode.removeChild(collarEl);\n          }\n        } else {\n          const collarText = formatCollarType(p.collarType);\n\n          if (collarText) {\n            if (!collarEl) {\n              collarEl = document.createElement(\"div\");\n              collarEl.className = \"bg-grey5 grey1 p m-all-z text-center capitalize product-tile__collar-label position-absolute col-100\";\n              collarWrap.appendChild(collarEl);\n            }\n\n            collarEl.textContent = collarText;\n            collarWrap.classList.add(\"ct-for-you-has-collar\");\n          } else {\n            collarWrap.classList.remove(\"ct-for-you-has-collar\");\n\n            if (collarEl \u0026\u0026 collarEl.parentNode) {\n              collarEl.parentNode.removeChild(collarEl);\n            }\n          }\n        }\n      }\n\n      const pricingWrap = tileEl.querySelector(\"[data-ct-price]\");\n      if (pricingWrap) {\n        const now = String(p.now || \"\").trim();\n        const was = String(p.was || \"\").trim();\n        const hasDiscount = hasRealDiscount(was, now);\n\n        pricingWrap.innerHTML = now\n          ? (\n              hasDiscount\n                ? '\u003cspan class=\"ct-for-you-price-was\"\u003e' + escapeHtml(was) + '\u003c/span\u003e' +\n                  '\u003cspan class=\"ct-for-you-price-now red1\"\u003eNow ' + escapeHtml(now) + \"\u003c/span\u003e\"\n                : '\u003cspan class=\"ct-for-you-price-now\"\u003e' + escapeHtml(now) + \"\u003c/span\u003e\"\n            )\n          : \"\";\n      }\n\n      const mbEl = tileEl.querySelector(\"[data-ct-mb]\");\n      if (mbEl) {\n        let mbValue = String(p.mbuy || \"\").trim();\n        const nowNum = parseMoney(p.now);\n        const mbNum = parseMoney(mbValue);\n\n        if (!mbValue) {\n          mbEl.remove();\n        } else {\n          if (!Number.isNaN(nowNum) \u0026\u0026 !Number.isNaN(mbNum) \u0026\u0026 mbNum \u003e nowNum) {\n            mbValue = p.now;\n          }\n\n          const finalMbNum = parseMoney(mbValue);\n          if (!Number.isNaN(nowNum) \u0026\u0026 !Number.isNaN(finalMbNum) \u0026\u0026 finalMbNum === nowNum) {\n            mbEl.remove();\n          } else {\n            const spans = mbEl.querySelectorAll(\"span\");\n            if (spans.length \u003e= 2) {\n              spans[0].textContent = mbValue + \" Multibuy\";\n              spans[1].textContent = mbValue + \" Multibuy price\";\n            } else {\n              mbEl.textContent = mbValue + \" Multibuy\";\n            }\n          }\n        }\n      }\n\n      const imgEl = tileEl.querySelector(\"img[data-ct-img]\");\n      if (!imgEl) {\n        removeProductTile(tileEl);\n        if (typeof onTileChange === \"function\") onTileChange();\n        return false;\n      }\n\n      const primaryImg = String(p.image0 || \"\").trim();\n      const hoverImg = String(p.image1 || \"\").trim();\n\n      if (!primaryImg) {\n        removeProductTile(tileEl);\n        if (typeof onTileChange === \"function\") onTileChange();\n        return false;\n      }\n\n      imgEl.alt = cleanTitle;\n      imgEl.src = primaryImg;\n      imgEl.setAttribute(\"data-ct-primary-img\", primaryImg);\n\n      const hoverImgIsValid =\n        hoverImg \u0026\u0026\n        !/noimagemedium\\.png/i.test(hoverImg);\n\n      if (hoverImgIsValid) {\n        imgEl.setAttribute(\"data-ct-hover-img\", hoverImg);\n        bindDesktopHoverImageSwap(tileEl, imgEl, primaryImg, hoverImg);\n      } else {\n        imgEl.removeAttribute(\"data-ct-hover-img\");\n      }\n\n      watchTileImage(imgEl, tileEl, onTileChange);\n\n      tileEl.setAttribute(\"data-ct-hydrating\", \"false\");\n      tileEl.setAttribute(\"data-ct-endpoint-ready\", \"true\");\n\n      return true;\n    }).catch(() =\u003e {\n      removeProductTile(tileEl);\n      if (typeof onTileChange === \"function\") onTileChange();\n      return false;\n    });\n  }\n\n  function injectForYouMobileNavItem() {\n    if (!isMobileViewport()) return;\n\n    const mobileNav =\n      document.querySelector(\"#navigation .js-navigation\") ||\n      document.querySelector(\".js-navigation\");\n\n    if (!mobileNav) return;\n    if (mobileNav.querySelector('[data-ct-for-you-mobile=\"true\"]')) return;\n\n    const li = document.createElement(\"li\");\n    li.setAttribute(\"role\", \"listitem\");\n    li.className = \"js-nav-link-main navigation__li navigation__li--main\";\n    li.setAttribute(\"data-ct-for-you-mobile\", \"true\");\n\n    li.innerHTML = `\n      \u003cdiv class=\"experience-component experience-layouts-navItem\"\u003e\n        \u003ca data-hover=\"false\"\n           data-tracking=\"top-nav-parent-url\"\n           id=\"ct-for-you-mobile-nav-link\"\n           href=\"#\"\n           class=\"navigation__li-link navigation__li-link--has-sub navigation__li-link--color\n                  has-sub-menu js-maincat cursor-pointer position-relative capitalize\n                  text-decoration-none d-block\"\u003e\n          ${COPY.label}\n          \u003cspan\u003e\n            \u003csvg aria-hidden=\"true\" focusable=\"false\"\n                 style=\"width:20px;height:20px;margin-right:0;vertical-align:middle;display:inline-block;margin-top:-15px;\"\n                 viewBox=\"0 0 23 18\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n              \u003cpath d=\"M5.43949 1.05205C5.57433 0.495998 6.03716 0.21797 6.5 0.217969C6.96284 0.217968 7.42567 0.495995 7.56051 1.05205L8.30252 4.1121C8.3988 4.50915 8.70882 4.81917 9.10587 4.91545L12.1659 5.65746C13.278 5.92713 13.278 7.50881 12.1659 7.77848L9.10587 8.52049C8.70882 8.61677 8.39881 8.92679 8.30253 9.32384L7.56051 12.3839C7.29084 13.496 5.70917 13.496 5.43949 12.3839L4.69748 9.32384C4.6012 8.92679 4.29118 8.61677 3.89413 8.52049L0.834083 7.77848C-0.278028 7.50881 -0.278028 5.92713 0.834083 5.65746L3.89413 4.91545C4.29118 4.81917 4.6012 4.50915 4.69748 4.1121L5.43949 1.05205Z\" fill=\"currentColor\"\u003e\u003c/path\u003e\n              \u003cpath d=\"M11.5133 2.46797C10.961 2.46797 10.5133 2.02025 10.5133 1.46797C10.5133 0.915684 10.961 0.467969 11.5133 0.467969C12.0656 0.467969 12.5133 0.915684 12.5133 1.46797C12.5133 2.02025 12.0656 2.46797 11.5133 2.46797Z\" fill=\"currentColor\"\u003e\u003c/path\u003e\n              \u003cpath d=\"M19 11.718C18.4477 11.718 18 11.2703 18 10.718C18 10.1657 18.4477 9.71797 19 9.71797C19.5523 9.71797 20 10.1657 20 10.718C20 11.2703 19.5523 11.718 19 11.718Z\" fill=\"currentColor\"\u003e\u003c/path\u003e\n              \u003cpath d=\"M7.56051 17.3706C7.00823 17.3706 6.56051 16.9229 6.56051 16.3706C6.56051 15.8183 7.00823 15.3706 7.56051 15.3706C8.11279 15.3706 8.56051 15.8183 8.56051 16.3706C8.56051 16.9229 8.11279 17.3706 7.56051 17.3706Z\" fill=\"currentColor\"\u003e\u003c/path\u003e\n            \u003c/svg\u003e\n          \u003c/span\u003e\n\n          \u003cspan class=\"align-center-v right-z m-right-l nav-touch-device\"\u003e\n            \u003csvg class=\"navigation__li-link--arrow\" style=\"width:9px\" viewBox=\"0 0 6 10\" aria-label=\"\"\u003e\n              \u003cuse xlink:href=\"#icon-empty-arrow\"\u003e\u003c/use\u003e\n            \u003c/svg\u003e\n          \u003c/span\u003e\n        \u003c/a\u003e\n\n        \u003cdiv class=\"accessibility-arrow-container\"\u003e\u003c/div\u003e\n\n        \u003cdiv class=\"navigation__li-subcats level-2 js-navigation__level top-z\" data-ct-for-you-subcats=\"true\"\u003e\n          \u003cdiv class=\"navigation__li-subcats__container d-flex flex-direction-column navigation__li-subcats__container-no-touch text-left\"\u003e\n            \u003cdiv class=\"d-none nav-non-touch-device\"\u003e\u003c/div\u003e\n\n            \u003cdiv class=\"experience-region experience-detailsRegion\"\u003e\n              \u003cspan class=\"js-navigation-prev-next-mobile d-block nav-touch-device pd-navigation-btn text-center\"\u003e\n                ${COPY.label}\n                \u003cspan\u003e\n                  \u003csvg aria-hidden=\"true\" focusable=\"false\"\n                       style=\"width:20px;height:20px;margin-right:0;vertical-align:middle;display:inline-block;margin-top:-15px;\"\n                       viewBox=\"0 0 23 18\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n                    \u003cpath d=\"M5.43949 1.05205C5.57433 0.495998 6.03716 0.21797 6.5 0.217969C6.96284 0.217968 7.42567 0.495995 7.56051 1.05205L8.30252 4.1121C8.3988 4.50915 8.70882 4.81917 9.10587 4.91545L12.1659 5.65746C13.278 5.92713 13.278 7.50881 12.1659 7.77848L9.10587 8.52049C8.70882 8.61677 8.39881 8.92679 8.30253 9.32384L7.56051 12.3839C7.29084 13.496 5.70917 13.496 5.43949 12.3839L4.69748 9.32384C4.6012 8.92679 4.29118 8.61677 3.89413 8.52049L0.834083 7.77848C-0.278028 7.50881 -0.278028 5.92713 0.834083 5.65746L3.89413 4.91545C4.29118 4.81917 4.6012 4.50915 4.69748 4.1121L5.43949 1.05205Z\" fill=\"currentColor\"\u003e\u003c/path\u003e\n                    \u003cpath d=\"M11.5133 2.46797C10.961 2.46797 10.5133 2.02025 10.5133 1.46797C10.5133 0.915684 10.961 0.467969 11.5133 0.467969C12.0656 0.467969 12.5133 0.915684 12.5133 1.46797C12.5133 2.02025 12.0656 2.46797 11.5133 2.46797Z\" fill=\"currentColor\"\u003e\u003c/path\u003e\n                    \u003cpath d=\"M19 11.718C18.4477 11.718 18 11.2703 18 10.718C18 10.1657 18.4477 9.71797 19 9.71797C19.5523 9.71797 20 10.1657 20 10.718C20 11.2703 19.5523 11.718 19 11.718Z\" fill=\"currentColor\"\u003e\u003c/path\u003e\n                    \u003cpath d=\"M7.56051 17.3706C7.00823 17.3706 6.56051 16.9229 6.56051 16.3706C6.56051 15.8183 7.00823 15.3706 7.56051 15.3706C8.11279 15.3706 8.56051 15.8183 8.56051 16.3706C8.56051 16.9229 8.11279 17.3706 7.56051 17.3706Z\" fill=\"currentColor\"\u003e\u003c/path\u003e\n                  \u003c/svg\u003e\n                \u003c/span\u003e\n                \u003cspan class=\"arrow-back d-flex align-items-flex-center nav-touch-device\"\u003e\n                  \u003csvg class=\"arrow-back--svg\" style=\"width:9px\" viewBox=\"0 0 6 10\" aria-label=\"\"\u003e\n                    \u003cuse xlink:href=\"#icon-empty-arrow\"\u003e\u003c/use\u003e\n                  \u003c/svg\u003e\n                \u003c/span\u003e\n              \u003c/span\u003e\n\n              \u003cdiv class=\"ct-for-you-nav-panel\" data-ct-for-you-panel=\"true\"\u003e\n                \u003cul class=\"ct-for-you-nav-grid\" data-ct-for-you-grid=\"true\"\u003e\u003c/ul\u003e\n                \u003cp class=\"ct-for-you-nav-empty\" data-ct-for-you-empty=\"true\" style=\"display:none;\"\u003e\n                  No recommendations available right now. Please try again later.\n                \u003c/p\u003e\n              \u003c/div\u003e\n            \u003c/div\u003e\n\n            \u003cdiv class=\"js-trending-mobile-carousel nav-touch-device\"\u003e\u003c/div\u003e\n          \u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    `;\n\n    const children = mobileNav.children;\n    if (children.length \u003e= 1) {\n      mobileNav.insertBefore(li, children[1] || null);\n    } else {\n      mobileNav.appendChild(li);\n    }\n  }\n\n  function hasExistingForYouTopNav() {\n    const navRoot = document.querySelector(\"#navigation\");\n    if (!navRoot) return false;\n\n    const links = navRoot.querySelectorAll(\"a\");\n    for (let i = 0; i \u003c links.length; i++) {\n      const txt = (links[i].textContent || \"\").trim().toLowerCase();\n      if (txt === COPY.label.toLowerCase()) return true;\n    }\n\n    return false;\n  }\n\n  function injectForYouNavItem() {\n    if (!isDesktopViewport()) return;\n\n    const navUl =\n      document.querySelector(\"#navigation .navigation__li-container--main\") ||\n      document.querySelector(\"#navigation .navigation-li-container\") ||\n      document.querySelector(\"#navigation ul\");\n\n    if (!navUl) return;\n    if (hasExistingForYouTopNav()) return;\n    if (navUl.querySelector('[data-ct-for-you-nav=\"true\"]')) return;\n\n    const li = document.createElement(\"li\");\n    li.setAttribute(\"role\", \"listitem\");\n    li.setAttribute(\"data-ct-for-you-nav\", \"true\");\n    li.className = \"js-nav-link-main navigation__li navigation__li--main\";\n\n    li.innerHTML = `\n    \u003cdiv class=\"experience-component experience-layouts-navItem\"\u003e\n      \u003ca data-hover=\"false\"\n         data-tracking=\"top-nav-parent-url\"\n         href=\"#\"\n         id=\"ct-for-you-nav-link\"\n         class=\"navigationItem-ct-foryou navigation__li-link navigation__li-link--has-sub navigation__li-link--color\n                has-sub-menu js-maincat cursor-pointer position-relative capitalize text-decoration-none d-block\n                grey1 mps-grey1 mls-grey1 ls-grey1\"\u003e\n        ${COPY.label}\n        \u003cspan\u003e\n          \u003csvg aria-hidden=\"true\" focusable=\"false\"\n               style=\"width:20px;height:20px;margin-right:0;vertical-align:middle;display:inline-block;margin-top:-15px;\"\n               viewBox=\"0 0 23 18\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n            \u003cpath d=\"M5.43949 1.05205C5.57433 0.495998 6.03716 0.21797 6.5 0.217969C6.96284 0.217968 7.42567 0.495995 7.56051 1.05205L8.30252 4.1121C8.3988 4.50915 8.70882 4.81917 9.10587 4.91545L12.1659 5.65746C13.278 5.92713 13.278 7.50881 12.1659 7.77848L9.10587 8.52049C8.70882 8.61677 8.39881 8.92679 8.30253 9.32384L7.56051 12.3839C7.29084 13.496 5.70917 13.496 5.43949 12.3839L4.69748 9.32384C4.6012 8.92679 4.29118 8.61677 3.89413 8.52049L0.834083 7.77848C-0.278028 7.50881 -0.278028 5.92713 0.834083 5.65746L3.89413 4.91545C4.29118 4.81917 4.6012 4.50915 4.69748 4.1121L5.43949 1.05205Z\" fill=\"currentColor\"\u003e\u003c/path\u003e\n            \u003cpath d=\"M11.5133 2.46797C10.961 2.46797 10.5133 2.02025 10.5133 1.46797C10.5133 0.915684 10.961 0.467969 11.5133 0.467969C12.0656 0.467969 12.5133 0.915684 12.5133 1.46797C12.5133 2.02025 12.0656 2.46797 11.5133 2.46797Z\" fill=\"currentColor\"\u003e\u003c/path\u003e\n            \u003cpath d=\"M19 11.718C18.4477 11.718 18 11.2703 18 10.718C18 10.1657 18.4477 9.71797 19 9.71797C19.5523 9.71797 20 10.1657 20 10.718C20 11.2703 19.5523 11.718 19 11.718Z\" fill=\"currentColor\"\u003e\u003c/path\u003e\n            \u003cpath d=\"M7.56051 17.3706C7.00823 17.3706 6.56051 16.9229 6.56051 16.3706C6.56051 15.8183 7.00823 15.3706 7.56051 15.3706C8.11279 15.3706 8.56051 15.8183 8.56051 16.3706C8.56051 16.9229 8.11279 17.3706 7.56051 17.3706Z\" fill=\"currentColor\"\u003e\u003c/path\u003e\n          \u003c/svg\u003e\n        \u003c/span\u003e\n\n        \u003cspan class=\"align-center-v right-z m-right-l nav-touch-device\"\u003e\n          \u003csvg class=\"navigation__li-link--arrow\" style=\"width:9px\" viewBox=\"0 0 6 10\" aria-label=\"\"\u003e\n            \u003cuse xlink:href=\"#icon-empty-arrow\"\u003e\u003c/use\u003e\n          \u003c/svg\u003e\n        \u003c/span\u003e\n      \u003c/a\u003e\n\n      \u003cdiv class=\"accessibility-arrow-container\"\u003e\u003c/div\u003e\n\n      \u003cdiv class=\"navigation__li-subcats level-2 js-navigation__level top-z\" data-ct-for-you-desktop-subcats=\"true\"\u003e\n        \u003cdiv class=\"navigation__li-subcats__container d-flex flex-direction-column navigation__li-subcats__container-no-touch text-left small-width\"\u003e\n          \u003cdiv class=\"d-none nav-non-touch-device\"\u003e\u003c/div\u003e\n\n          \u003cspan class=\"js-navigation-prev-next-mobile d-block nav-touch-device pd-navigation-btn text-center\"\u003e\n            ${COPY.label}\n            \u003cspan class=\"arrow-back d-flex align-items-flex-center nav-touch-device\"\u003e\n              \u003csvg class=\"arrow-back--svg\" style=\"width:9px\" viewBox=\"0 0 6 10\" aria-label=\"\"\u003e\n                \u003cuse xlink:href=\"#icon-empty-arrow\"\u003e\u003c/use\u003e\n              \u003c/svg\u003e\n            \u003c/span\u003e\n          \u003c/span\u003e\n\n          \u003cdiv class=\"experience-region experience-detailsRegion\"\u003e\n            \u003cdiv class=\"ct-for-you-desktop-panel\" data-ct-for-you-desktop-panel=\"true\"\u003e\n            \u003ch3 style=\"font-size: 16px; font-weight: 500;\"\n                class=\"navigationHeader-1099191298 mls-m-bottom-m m-top-s sentence-case-mobile uppercase \n                       font__primary grey1 mps-grey1 mls-grey1 ls-grey1\"\u003e\n                ${COPY.heading}\n            \u003c/h3\u003e\n              \u003cul class=\"ct-for-you-desktop-grid\" data-ct-for-you-desktop-grid=\"true\"\u003e\u003c/ul\u003e\n              \u003cp class=\"ct-for-you-desktop-empty\" data-ct-for-you-desktop-empty=\"true\" style=\"display:none;\"\u003e\n                No recommendations available right now. Please try again later.\n              \u003c/p\u003e\n            \u003c/div\u003e\n          \u003c/div\u003e\n\n          \u003cdiv class=\"js-trending-mobile-carousel nav-touch-device\"\u003e\u003c/div\u003e\n          \u003cdiv class=\"d-none nav-non-touch-device navigation__gallery\"\u003e\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  `;\n\n    navUl.appendChild(li);\n  }\n\n  function fetchRecommendationsIntoDesktopNav(subcatsRoot) {\n    if (!subcatsRoot) return;\n\n    const grid = subcatsRoot.querySelector('[data-ct-for-you-desktop-grid=\"true\"]');\n    const emptyMsg = subcatsRoot.querySelector('[data-ct-for-you-desktop-empty=\"true\"]');\n    if (!grid) return;\n\n    const status = subcatsRoot.getAttribute(\"data-ct-status\") || \"idle\";\n    if (status === \"loading\" || status === \"loaded\") return;\n\n    if (emptyMsg) emptyMsg.style.display = \"none\";\n\n    const MAX_WAIT_MS = 3000;\n    const STEP_MS = 100;\n    let waited = 0;\n\n    function setEmpty() {\n      if (!emptyMsg) return;\n      emptyMsg.style.display = grid.children.length ? \"none\" : \"block\";\n    }\n\n    function hasSdk() {\n      return !!(window.exponea \u0026\u0026 typeof window.exponea.getRecommendation === \"function\");\n    }\n\n    function startFetch() {\n      subcatsRoot.setAttribute(\"data-ct-status\", \"loading\");\n      grid.innerHTML = \"\";\n\n      const MAX_DESKTOP = 6;\n\n      function paint(data) {\n        subcatsRoot.setAttribute(\"data-ct-status\", \"loaded\");\n\n        if (!data || !data.length) {\n          setEmpty();\n          return;\n        }\n\n        const fragment = document.createDocumentFragment();\n        let count = 0;\n\n        for (let i = 0; i \u003c data.length \u0026\u0026 count \u003c MAX_DESKTOP; i++) {\n          const item = data[i];\n          if (!item) continue;\n\n          const id = item.item_id;\n          if (!id) continue;\n\n          const url = buildProductUrl(id);\n\n          const li = document.createElement(\"li\");\n          li.className = \"ct-for-you-desktop-tile\";\n          li.innerHTML = `\n            \u003ca href=\"${escapeHtml(url)}\"\u003e\n              \u003cdiv class=\"position-relative\" data-ct-collar-wrap\u003e\n                \u003cimg data-ct-img alt=\"\"\u003e\n              \u003c/div\u003e\n              \u003cdiv class=\"ct-for-you-desktop-title\" data-ct-title\u003e\u003c/div\u003e\n              \u003cdiv class=\"ct-for-you-desktop-price tile__pricing text-left grey1 font__secondary m-top-xs normal\" data-ct-price\u003e\u003c/div\u003e\n              \u003cp class=\"product-tile__promo h5 capitalize grey2 m-top-xs font__secondary\" data-ct-mb\u003e\n                \u003cspan aria-hidden=\"true\"\u003e\u003c/span\u003e\n                \u003cspan class=\"accessibility-hidden\"\u003e\u003c/span\u003e\n              \u003c/p\u003e\n            \u003c/a\u003e\n          `;\n\n          fragment.appendChild(li);\n\n          applyEndpointDataToTile(id, li, setEmpty);\n          count++;\n        }\n\n        grid.appendChild(fragment);\n        setEmpty();\n      }\n\n      window.exponea.getRecommendation({\n        recommendationId: RECO_ID,\n        size: 16,\n        callback: paint\n      });\n    }\n\n    (function waitForSdk() {\n      if (hasSdk()) {\n        startFetch();\n        return;\n      }\n      waited += STEP_MS;\n      if (waited \u003e= MAX_WAIT_MS) {\n        subcatsRoot.setAttribute(\"data-ct-status\", \"idle\");\n        setEmpty();\n        return;\n      }\n      setTimeout(waitForSdk, STEP_MS);\n    })();\n  }\n\n  function adjustMobilePillNav() {\n    if (!isMobileView()) return;\n\n    const wrapper = document.querySelector(\".experience-region.experience-fixedPinsWrapper\");\n    if (!wrapper) return;\n\n    const forYouComponent = Array.from(\n      wrapper.querySelectorAll(\".experience-component.experience-assets-textInfoCta\")\n    ).find((comp) =\u003e {\n      const a = comp.querySelector(\"a.text-info-cta-8926321849--link, a\");\n      return a \u0026\u0026 a.textContent.trim().toLowerCase() === \"for you\";\n    });\n\n    if (forYouComponent \u0026\u0026 wrapper.children.length \u003e 0) {\n      const first = wrapper.children[0];\n      if (first \u0026\u0026 first !== forYouComponent) {\n        wrapper.insertBefore(forYouComponent, first.nextSibling);\n      }\n    }\n\n    const pillLink = forYouComponent ? forYouComponent.querySelector(\"a\") : null;\n\n    if (pillLink) {\n      pillLink.style.padding = \"5px 25px\";\n      pillLink.style.margin = \"0 5px\";\n      pillLink.style.lineHeight = \"initial\";\n      pillLink.style.width = \"fit-content\";\n      pillLink.style.borderRadius = \"15px\";\n    }\n  }\n\n  function getFocusableElements(container) {\n    if (!container) return [];\n\n    const selectors = [\n      'a[href]',\n      'area[href]',\n      'button:not([disabled])',\n      'input:not([disabled]):not([type=\"hidden\"])',\n      'select:not([disabled])',\n      'textarea:not([disabled])',\n      'iframe',\n      'object',\n      'embed',\n      '[contenteditable=\"true\"]',\n      '[tabindex]:not([tabindex=\"-1\"])'\n    ].join(\",\");\n\n    return Array.from(container.querySelectorAll(selectors)).filter((el) =\u003e {\n      if (!el) return false;\n      if (el.hasAttribute(\"disabled\")) return false;\n      if (el.getAttribute(\"aria-hidden\") === \"true\") return false;\n\n      const style = window.getComputedStyle(el);\n      if (style.display === \"none\" || style.visibility === \"hidden\") return false;\n\n      return true;\n    });\n  }\n\n  function getMobilePanelElements() {\n    const subcats = document.querySelector('[data-ct-for-you-subcats=\"true\"]');\n    if (!subcats) return {};\n\n    const container =\n      subcats.querySelector(\".navigation__li-subcats__container\") || subcats;\n\n    const closeBtn =\n      subcats.querySelector(\".js-navigation-prev-next-mobile\") || null;\n\n    return {\n      subcats,\n      container,\n      closeBtn\n    };\n  }\n\n  function focusOverlayStart() {\n    if (!ctForYouLastInteractionWasKeyboard) return;\n\n    const overlay = document.getElementById(\"ct-for-you-overlay\");\n    if (!overlay) return;\n\n    const panel = overlay.querySelector(\".ct-for-you-overlay__panel\");\n    const closeBtn = overlay.querySelector(\".ct-for-you-overlay__close-x\");\n\n    const moveFocus = () =\u003e {\n      if (!overlay.classList.contains(\"ct-for-you-overlay--open\")) return;\n\n      if (closeBtn) {\n        closeBtn.focus();\n        return;\n      }\n\n      const focusables = getFocusableElements(panel);\n      if (focusables.length) {\n        focusables[0].focus();\n        return;\n      }\n\n      if (panel) {\n        panel.setAttribute(\"tabindex\", \"-1\");\n        panel.focus();\n      }\n    };\n\n    requestAnimationFrame(() =\u003e {\n      requestAnimationFrame(moveFocus);\n    });\n  }\n\n  function focusMobilePanelStart() {\n    if (!ctForYouLastInteractionWasKeyboard) return;\n\n    const els = getMobilePanelElements();\n    if (!els.subcats || !els.container) return;\n\n    const moveFocus = () =\u003e {\n      const activePanel = els.subcats.classList.contains(\"navigation__li-subcats--active\") ||\n        els.subcats.classList.contains(\"active\") ||\n        els.subcats.getAttribute(\"aria-hidden\") === \"false\" ||\n        window.getComputedStyle(els.subcats).display !== \"none\";\n\n      if (!activePanel) return;\n\n      if (els.closeBtn) {\n        if (!els.closeBtn.hasAttribute(\"tabindex\")) {\n          els.closeBtn.setAttribute(\"tabindex\", \"0\");\n        }\n        els.closeBtn.focus();\n        return;\n      }\n\n      const focusables = getFocusableElements(els.container);\n      if (focusables.length) {\n        focusables[0].focus();\n        return;\n      }\n\n      els.container.setAttribute(\"tabindex\", \"-1\");\n      els.container.focus();\n    };\n\n    requestAnimationFrame(() =\u003e {\n      requestAnimationFrame(moveFocus);\n    });\n  }\n\n  function removeOverlayFocusTrap() {\n    if (ctForYouOverlayKeydownHandler) {\n      document.removeEventListener(\"keydown\", ctForYouOverlayKeydownHandler, true);\n      ctForYouOverlayKeydownHandler = null;\n    }\n  }\n\n  function trapOverlayFocus() {\n    const overlay = document.getElementById(\"ct-for-you-overlay\");\n    if (!overlay) return;\n\n    const panel = overlay.querySelector(\".ct-for-you-overlay__panel\");\n    if (!panel) return;\n\n    removeOverlayFocusTrap();\n\n    ctForYouOverlayKeydownHandler = function (e) {\n      if (!overlay.classList.contains(\"ct-for-you-overlay--open\")) return;\n\n      if (e.key === \"Escape\") {\n        e.preventDefault();\n        closeOverlay();\n        return;\n      }\n\n      if (e.key !== \"Tab\") return;\n\n      const focusables = getFocusableElements(panel);\n\n      if (!focusables.length) {\n        e.preventDefault();\n        panel.setAttribute(\"tabindex\", \"-1\");\n        panel.focus();\n        return;\n      }\n\n      const first = focusables[0];\n      const last = focusables[focusables.length - 1];\n      const active = document.activeElement;\n\n      if (e.shiftKey) {\n        if (active === first || !panel.contains(active)) {\n          e.preventDefault();\n          last.focus();\n        }\n      } else {\n        if (active === last || !panel.contains(active)) {\n          e.preventDefault();\n          first.focus();\n        }\n      }\n    };\n\n    document.addEventListener(\"keydown\", ctForYouOverlayKeydownHandler, true);\n  }\n\n  function ensureOverlay() {\n    if (document.getElementById(\"ct-for-you-overlay\")) return;\n\n    const cssId = \"ct-for-you-overlay-css\";\n    if (!document.getElementById(cssId)) {\n      const style = document.createElement(\"style\");\n      style.id = cssId;\n      style.textContent = `\n[data-ct-for-you-desktop-subcats=\"true\"] .navigation__li-subcats__container {\n  width: 100%;\n  max-width: 1200px !important;\n  margin: 0 auto;\n}\n\n.ct-for-you-desktop-grid {\n  display: grid;\n  grid-template-columns: repeat(6, minmax(0, 1fr));\n  gap: 10px;\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n.ct-for-you-desktop-tile a {\n  display: block;\n  text-decoration: none;\n  color: inherit;\n}\n\n.ct-for-you-desktop-tile img {\n  width: 100%;\n  aspect-ratio: 4 / 5;\n  height: auto;\n  object-fit: cover;\n  display: block;\n  background: #fff;\n}\n\n.ct-for-you-desktop-title {\n  font-family: Futura, sans-serif;\n  font-size: 1.6rem;\n  line-height: 1.2;\n  color: #373737;\n  margin: 5px 0 2px;\n  display: -webkit-box;\n  -webkit-line-clamp: 2;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n}\n\n.ct-for-you-desktop-price {\n  font-family: Futura, sans-serif;\n  font-size: 1.6rem;\n  line-height: 1.2;\n  color: #373737;\n}\n\n.ct-for-you-desktop-panel {\n  padding: 0px 16px 16px;\n  max-width: 100% !important;\n  margin: 0 auto !important;\n  padding: 0px 15px 15px !important;\n  max-width: calc(100vw - 100px) !important;\n  box-sizing: border-box !important;\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.ct-for-you-desktop-empty {\n  font-family: Futura, Arial, sans-serif;\n  font-size: 1.4rem;\n  color: #373737;\n  margin: 0;\n}\n\n.ct-for-you-nav-panel { padding: 12px 16px 24px; }\n.ct-for-you-nav-grid {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0,1fr));\n  gap: 4px;\n}\n\n.ct-for-you-nav-tile a { text-decoration: none; display: block; }\n.ct-for-you-nav-tile img { width: 100%; display: block; background: #fff; }\n.ct-for-you-nav-title {\n  font-family: Futura, sans-serif;\n  font-size: 1.6rem;\n  color: #373737;\n  margin: 8px 0 4px;\n}\n.ct-for-you-nav-price { font-family: Futura, sans-serif; font-size: 1.6rem; color: #373737; }\n.ct-for-you-nav-empty { font-family: Futura, Arial, sans-serif; font-size: 1.6rem; }\n\n.ct-for-you-overlay {\n  position: fixed;\n  inset: 0;\n  z-index: 9999;\n  opacity: 0;\n  visibility: hidden;\n  pointer-events: none;\n  transition: opacity 220ms ease, visibility 0ms linear 220ms;\n}\n\n.ct-for-you-overlay--open {\n  opacity: 1;\n  visibility: visible;\n  pointer-events: auto;\n  transition: opacity 220ms ease;\n}\n\n.ct-for-you-overlay__backdrop {\n  position: absolute;\n  inset: 0;\n  background: rgba(0,0,0,0.35);\n}\n\n.ct-for-you-overlay__panel {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  left: auto;\n  width: 100%;\n  background: #fff;\n  overflow: auto;\n  transform: translate3d(110%, 0, 0);\n  transition: transform 360ms cubic-bezier(0.22, 1, 0.36, 1);\n  will-change: transform;\n}\n\n@media (min-width: 1024px) {\n  .ct-for-you-overlay__panel {\n    width: 40%;\n  }\n}\n\n.ct-for-you-overlay--open .ct-for-you-overlay__panel {\n  transform: translate3d(0, 0, 0);\n}\n\n.ct-for-you-grid-wrapper { padding: 1.5rem 1rem 3rem; }\n.ct-for-you-grid-copy {\n  margin: 0 0 1.5rem;\n  font-family: \"Futura\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 1.6rem;\n  color: #373737;\n}\n\n#ct-for-you-product-grid {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0,1fr));\n  gap: 0.4rem;\n}\n@media (min-width: 768px) {\n  #ct-for-you-product-grid { grid-template-columns: repeat(3, minmax(0,1fr)); }\n  .ct-for-you-nav-tile{margin-top:5px};\n}\n\n.ct-for-you-tile .product-tile__img-link { display: block; }\n.ct-for-you-tile img { width: 100%; display: block; background: #fff; }\n.ct-for-you-tile .js-product-tile-name { font-family: Futura, sans-serif; font-size: 1.6rem; color: #373737; }\n.ct-for-you-tile .tile__pricing { font-size: 1.6rem; }\n.ct-for-you-price-was { text-decoration: line-through; opacity: .7; margin-right: .4rem; color: #8a8a8a; }\n.ct-for-you-price-now { font-weight: 600; }\n.ct-for-you-grid-empty {\n  font-family: \"Futura\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 1.6rem;\n  padding: 1rem 0;\n}\n\n#ct-for-you-heading {\n  font-size: 3.2rem;\n  letter-spacing: 0;\n}\n\n.ct-for-you-overlay__close-x {\n  position: absolute;\n  top: 1.5rem;\n  right: 1.5rem;\n  z-index: 2;\n  width: 2.6rem;\n  height: 2.6rem;\n  padding: 0;\n  border: 0;\n  border-radius: 999px;\n  background: transparent;\n  cursor: pointer;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n}\n.ct-for-you-overlay__close-x svg {\n  width: 3.2rem;\n  height: 3.2rem;\n  fill: #8a8a8a;\n}\n.ct-for-you-overlay__close-x:focus-visible {\n  outline: 2px solid #373737;\n  outline-offset: 2px;\n}\n\n.product-tile__collar-label {\n  line-height: normal;\n  font-size: 1.2rem;\n  padding: 0.3rem;\n  border-radius: 0 0 0.5rem 0.5rem;\n  z-index: 1;\n  bottom: -2.2rem;\n  left: 0;\n}\n\n.ct-for-you-desktop-tile [data-ct-collar-wrap],\n.ct-for-you-nav-tile [data-ct-collar-wrap] {\n  position: relative;\n  display: block;\n}\n\n.ct-for-you-desktop-tile .product-tile__collar-label,\n.ct-for-you-nav-tile .product-tile__collar-label {\n  position: absolute;\n  width: 100%;\n}\n\n.ct-for-you-desktop-tile [data-ct-collar-wrap].ct-for-you-has-collar + .ct-for-you-desktop-title,\n.ct-for-you-nav-tile [data-ct-collar-wrap].ct-for-you-has-collar + .ct-for-you-nav-title {\n  margin-top: 2.6rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .ct-for-you-overlay,\n  .ct-for-you-overlay__panel {\n    transition: none !important;\n    transform: none !important;\n  }\n}`;\n      document.head.appendChild(style);\n    }\n\n    const overlay = document.createElement(\"div\");\n    overlay.id = \"ct-for-you-overlay\";\n    overlay.className = \"ct-for-you-overlay\";\n    overlay.setAttribute(\"aria-hidden\", \"true\");\n    overlay.innerHTML = `\n      \u003cdiv class=\"ct-for-you-overlay__backdrop\" data-ct-for-you-close=\"true\"\u003e\u003c/div\u003e\n      \u003cdiv class=\"ct-for-you-overlay__panel\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"ct-for-you-heading\"\u003e\n        \u003cdiv class=\"primary-content plp-grid primary-content-suits main__primary main__primary--right float-right col-100 p-all-z\"\u003e\n          \u003cdiv class=\"ct-for-you-grid-wrapper\"\u003e\n            \u003cdiv class=\"d-flex mps-m-bottom-m\"\u003e\n              \u003cdiv class=\"col-100 mls-col-50 d-flex flex-direction-column tib-banner flex-grow-1\"\u003e\n                \u003cbutton type=\"button\" class=\"ct-for-you-overlay__close-x\" data-ct-for-you-close=\"true\" aria-label=\"Close\"\u003e\n                  \u003csvg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\n                    \u003cpath d=\"M6 6L18 18M18 6L6 18\"\n                          fill=\"none\"\n                          stroke=\"#8a8a8a\"\n                          stroke-width=\"1.2\"\n                          stroke-linecap=\"round\"\n                          stroke-linejoin=\"round\"\u003e\u003c/path\u003e\n                  \u003c/svg\u003e\n                \u003c/button\u003e\n\n                \u003cdiv class=\"p-ends-m p-sides-xs col-100 text-left overflow-hidden\"\u003e\n                  \u003cp id=\"ct-for-you-heading\"\n                    class=\"m-ends-m col-100 grey1 p-sides-z font__secondary medium\"\n                    style=\"display:flex;align-items:center;gap:.6rem;\"\u003e\n                    For You\n                  \u003c/p\u003e\n                  \u003csvg aria-hidden=\"true\" focusable=\"false\"\n                       style=\"width: 30px; height: 30px; display: inline-block; position: absolute; top: 35px; left: 120px;\"\n                       viewBox=\"0 0 23 18\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n                    \u003cpath d=\"M5.43949 1.05205C5.57433 0.495998 6.03716 0.21797 6.5 0.217969C6.96284 0.217968 7.42567 0.495995 7.56051 1.05205L8.30252 4.1121C8.3988 4.50915 8.70882 4.81917 9.10587 4.91545L12.1659 5.65746C13.278 5.92713 13.278 7.50881 12.1659 7.77848L9.10587 8.52049C8.70882 8.61677 8.39881 8.92679 8.30253 9.32384L7.56051 12.3839C7.29084 13.496 5.70917 13.496 5.43949 12.3839L4.69748 9.32384C4.6012 8.92679 4.29118 8.61677 3.89413 8.52049L0.834083 7.77848C-0.278028 7.50881 -0.278028 5.92713 0.834083 5.65746L3.89413 4.91545C4.29118 4.81917 4.6012 4.50915 4.69748 4.1121L5.43949 1.05205Z\" fill=\"currentColor\"/\u003e\n                    \u003cpath d=\"M11.5133 2.46797C10.961 2.46797 10.5133 2.02025 10.5133 1.46797C10.5133 0.915684 10.961 0.467969 11.5133 0.467969C12.0656 0.467969 12.5133 0.915684 12.5133 1.46797C12.5133 2.02025 12.0656 2.46797 11.5133 2.46797Z\" fill=\"currentColor\"/\u003e\n                    \u003cpath d=\"M19 11.718C18.4477 11.718 18 11.2703 18 10.718C18 10.1657 18.4477 9.71797 19 9.71797C19.5523 9.71797 20 10.1657 20 10.718C20 11.2703 19.5523 11.718 19 11.718Z\" fill=\"currentColor\"/\u003e\n                    \u003cpath d=\"M7.56051 17.3706C7.00823 17.3706 6.56051 16.9229 6.56051 16.3706C6.56051 15.8183 7.00823 15.3706 7.56051 15.3706C8.11279 15.3706 8.56051 15.8183 8.56051 16.3706C8.56051 16.9229 8.11279 17.3706 7.56051 17.3706Z\" fill=\"currentColor\"/\u003e\n                  \u003c/svg\u003e\n                  \u003cdiv class=\"js-tib-id top-info__banner--text col-100 p-sides-z position-relative\"\u003e\n                    \u003cp class=\"ct-for-you-grid-copy\"\u003e${COPY.subheading}\u003c/p\u003e\n                  \u003c/div\u003e\n                \u003c/div\u003e\n              \u003c/div\u003e\n            \u003c/div\u003e\n\n            \u003cdiv class=\"mls-d-flex mls-flex-direction-row search-result__container mps-m-top-s\"\u003e\n              \u003cdiv class=\"plp-grid__wrapper flex-grow-1 m-top-m mls-m-top-z\"\u003e\n                \u003cdiv class=\"js-infinite-scroll search-result-content content__row clearfix tile__items-container m-all-z position-relative\"\u003e\n                  \u003cdiv class=\"plp-grid__main-subcat\"\u003e\n                    \u003cul id=\"ct-for-you-product-grid\" class=\"js-product-grid-container plp-grid__container plp-grid__container--2-col-mobile plp-grid__container--4-col-desktop\"\u003e\u003c/ul\u003e\n                    \u003cp class=\"ct-for-you-grid-empty\" style=\"display:none;\"\u003eNo recommendations available right now. Please try again later.\u003c/p\u003e\n                  \u003c/div\u003e\n                \u003c/div\u003e\n              \u003c/div\u003e\n            \u003c/div\u003e\n\n          \u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e`;\n    document.body.appendChild(overlay);\n\n    overlay.addEventListener(\"click\", (e) =\u003e {\n      const closeEl = e.target \u0026\u0026 e.target.closest \u0026\u0026 e.target.closest('[data-ct-for-you-close=\"true\"]');\n      if (closeEl) closeOverlay();\n    });\n  }\n\n  function openOverlay(triggerEl) {\n    ensureOverlay();\n    const overlay = document.getElementById(\"ct-for-you-overlay\");\n    if (!overlay) return;\n\n    ctForYouLastFocusedTrigger = triggerEl || document.activeElement || null;\n\n    overlay.classList.add(\"ct-for-you-overlay--open\");\n    overlay.setAttribute(\"aria-hidden\", \"false\");\n\n    trapOverlayFocus();\n    focusOverlayStart();\n\n    if (!overlay.getAttribute(\"data-ct-loaded\")) {\n      overlay.setAttribute(\"data-ct-loaded\", \"true\");\n      fetchRecommendations();\n    }\n  }\n\n  function closeOverlay() {\n    const overlay = document.getElementById(\"ct-for-you-overlay\");\n    if (!overlay) return;\n\n    overlay.classList.remove(\"ct-for-you-overlay--open\");\n    overlay.setAttribute(\"aria-hidden\", \"true\");\n\n    removeOverlayFocusTrap();\n\n    if (\n      ctForYouLastFocusedTrigger \u0026\u0026\n      typeof ctForYouLastFocusedTrigger.focus === \"function\" \u0026\u0026\n      document.contains(ctForYouLastFocusedTrigger)\n    ) {\n      requestAnimationFrame(() =\u003e {\n        ctForYouLastFocusedTrigger.focus();\n      });\n    }\n  }\n\n  function fetchRecommendationsIntoMobileNav(subcatsRoot) {\n    if (!subcatsRoot) return;\n\n    const grid = subcatsRoot.querySelector('[data-ct-for-you-grid=\"true\"]');\n    const emptyMsg = subcatsRoot.querySelector('[data-ct-for-you-empty=\"true\"]');\n    if (!grid) return;\n\n    const status = subcatsRoot.getAttribute(\"data-ct-status\") || \"idle\";\n    if (status === \"loading\" || status === \"loaded\") return;\n\n    if (emptyMsg) emptyMsg.style.display = \"none\";\n    grid.innerHTML = \"\";\n\n    function updateEmptyState() {\n      if (!emptyMsg) return;\n      emptyMsg.style.display = grid.children.length ? \"none\" : \"block\";\n    }\n\n    function paint(data) {\n      if (!data || !data.length) {\n        updateEmptyState();\n        return;\n      }\n\n      const fragment = document.createDocumentFragment();\n      let count = 0;\n\n      for (let i = 0; i \u003c data.length \u0026\u0026 count \u003c MAX_ITEMS; i++) {\n        const item = data[i];\n        if (!item) continue;\n\n        const id = item.item_id;\n        if (!id) continue;\n\n        const url = buildProductUrl(id);\n\n        const li = document.createElement(\"li\");\n        li.className = \"ct-for-you-nav-tile m-bottom-xl mps-m-bottom-z\";\n        li.innerHTML = `\n          \u003ca href=\"${escapeHtml(url)}\"\u003e\n            \u003cdiv class=\"position-relative\" data-ct-collar-wrap\u003e\n              \u003cimg data-ct-img alt=\"\"\u003e\n            \u003c/div\u003e\n            \u003cdiv class=\"ct-for-you-nav-title\" data-ct-title\u003e\u003c/div\u003e\n            \u003cdiv class=\"ct-for-you-nav-price tile__pricing text-left grey1 font__secondary m-top-xs normal\" data-ct-price\u003e\u003c/div\u003e\n            \u003cdiv class=\"ct-for-you-nav-mb grey2 product-tile__promo h5 capitalize grey2 m-top-xs font__secondary\" data-ct-mb\u003e\u003c/div\u003e\n          \u003c/a\u003e\n        `;\n\n        fragment.appendChild(li);\n\n        applyEndpointDataToTile(id, li, updateEmptyState);\n        count++;\n      }\n\n      grid.appendChild(fragment);\n      updateEmptyState();\n    }\n\n    const MAX_WAIT_MS = 3000;\n    const STEP_MS = 100;\n    let waited = 0;\n\n    function hasSdk() {\n      return !!(window.exponea \u0026\u0026 typeof window.exponea.getRecommendation === \"function\");\n    }\n\n    function startFetch() {\n      subcatsRoot.setAttribute(\"data-ct-status\", \"loading\");\n\n      window.exponea.getRecommendation({\n        recommendationId: RECO_ID,\n        size: MAX_ITEMS,\n        callback: function (data) {\n          subcatsRoot.setAttribute(\"data-ct-status\", \"loaded\");\n          paint(data);\n        }\n      });\n    }\n\n    (function waitForSdk() {\n      if (hasSdk()) {\n        startFetch();\n        return;\n      }\n      waited += STEP_MS;\n      if (waited \u003e= MAX_WAIT_MS) {\n        subcatsRoot.setAttribute(\"data-ct-status\", \"idle\");\n        updateEmptyState();\n        return;\n      }\n      setTimeout(waitForSdk, STEP_MS);\n    })();\n  }\n\n  function fetchRecommendations() {\n    const grid = document.getElementById(\"ct-for-you-product-grid\");\n    const emptyMsg = document.querySelector(\".ct-for-you-grid-empty\");\n    if (!grid) return;\n\n    grid.innerHTML = \"\";\n\n    function updateEmptyState() {\n      if (!emptyMsg || !grid) return;\n      emptyMsg.style.display = grid.children.length ? \"none\" : \"block\";\n    }\n\n    function paint(data) {\n      if (!data || !data.length) {\n        if (emptyMsg) emptyMsg.style.display = \"block\";\n        return;\n      }\n\n      const fragment = document.createDocumentFragment();\n      let count = 0;\n\n      for (let i = 0; i \u003c data.length \u0026\u0026 count \u003c MAX_ITEMS; i++) {\n        const item = data[i];\n        if (!item) continue;\n\n        const id = item.item_id;\n        if (!id) continue;\n\n        const url = buildProductUrl(id);\n\n        const li = document.createElement(\"li\");\n        li.className = \"position-relative plp-grid__container--tile m-bottom-xl ct-for-you-tile\";\n        li.innerHTML =\n          '\u003cdiv class=\"position-relative product-tile js-product-tile-container js-product-tile\" data-prod-id=\"' +\n          escapeHtml(id) +\n          '\"\u003e' +\n          '  \u003cdiv class=\"product-tile__img text-center position-relative\" data-ct-collar-wrap\u003e' +\n          '    \u003ca class=\"thumb-link js-thumb-link js-product-tile-image product-tile__img-link d-block keyboard-focus-outline\" href=\"' +\n          escapeHtml(url) +\n          '\"\u003e' +\n          '      \u003cpicture class=\"d-block bg-white\" style=\"aspect-ratio:430/538;\"\u003e' +\n          '        \u003cimg data-ct-img alt=\"\" style=\"aspect-ratio:430/538;\"\u003e' +\n          \"      \u003c/picture\u003e\" +\n          \"    \u003c/a\u003e\" +\n          \"  \u003c/div\u003e\" +\n          '  \u003cdiv class=\"js-tile-info-wrapper text-left product-tile__info-wrapper\"\u003e' +\n          '    \u003cdiv class=\"js-tile-info product-tile__info bg-white overflow-hidden position-relative\"\u003e' +\n          \"      \u003cdiv\u003e\" +\n          '        \u003ca class=\"js-thumb-link outline-offset-1 product-tile__name-link h4 h4__regular grey1 d-block js-product-tile-name p-top-s\" href=\"' +\n          escapeHtml(url) +\n          '\"\u003e' +\n          '          \u003cspan class=\"js-thumb-name font__secondary\" data-ct-title\u003e\u003c/span\u003e' +\n          \"        \u003c/a\u003e\" +\n          \"      \u003c/div\u003e\" +\n          \"      \u003cdiv\u003e\" +\n          '        \u003cdiv class=\"h5\"\u003e' +\n          '          \u003cdiv class=\"js-tile-pricing tile__pricing text-left grey1 font__secondary m-top-xs normal\" data-ct-price\u003e\u003c/div\u003e' +\n          \"        \u003c/div\u003e\" +\n          '        \u003cp class=\"product-tile__promo h5 capitalize grey2 m-top-xs font__secondary\" data-ct-mb\u003e' +\n          '          \u003cspan aria-hidden=\"true\"\u003e\u003c/span\u003e' +\n          '          \u003cspan class=\"accessibility-hidden\"\u003e\u003c/span\u003e' +\n          \"        \u003c/p\u003e\" +\n          \"      \u003c/div\u003e\" +\n          \"    \u003c/div\u003e\" +\n          \"  \u003c/div\u003e\" +\n          \"\u003c/div\u003e\";\n\n        fragment.appendChild(li);\n\n        applyEndpointDataToTile(id, li, updateEmptyState);\n        count++;\n      }\n\n      grid.appendChild(fragment);\n      if (emptyMsg) emptyMsg.style.display = grid.children.length ? \"none\" : \"block\";\n    }\n\n    if (window.exponea \u0026\u0026 typeof window.exponea.getRecommendation === \"function\") {\n      window.exponea.getRecommendation({\n        recommendationId: RECO_ID,\n        size: MAX_ITEMS,\n        callback: paint\n      });\n    } else {\n      if (emptyMsg) emptyMsg.style.display = \"block\";\n    }\n  }\n\n  function wireClicks() {\n    const navLink =\n      document.getElementById(\"ct-for-you-nav-link\") ||\n      document.querySelector(\"#navigation a#ct-for-you-nav-link\");\n\n    if (navLink \u0026\u0026 !navLink.getAttribute(\"data-ct-bound\")) {\n      navLink.setAttribute(\"data-ct-bound\", \"true\");\n      markKeyboardInteractionOnTrigger(navLink);\n\n      navLink.addEventListener(\"click\", (e) =\u003e {\n        e.preventDefault();\n        trackForYouClick();\n        openOverlay(e.currentTarget);\n      });\n\n      const parentLi = navLink.closest(\"li\");\n      const subcats = parentLi\n        ? parentLi.querySelector('[data-ct-for-you-desktop-subcats=\"true\"]')\n        : document.querySelector('[data-ct-for-you-desktop-subcats=\"true\"]');\n\n      const loadDesktopPanel = () =\u003e {\n        if (subcats) fetchRecommendationsIntoDesktopNav(subcats);\n      };\n\n      parentLi \u0026\u0026 parentLi.addEventListener(\"mouseenter\", loadDesktopPanel);\n      navLink.addEventListener(\"focusin\", loadDesktopPanel);\n    }\n\n    const mobileTopLink = document.getElementById(\"ct-for-you-mobile-nav-link\");\n    if (mobileTopLink \u0026\u0026 !mobileTopLink.getAttribute(\"data-ct-bound\")) {\n      mobileTopLink.setAttribute(\"data-ct-bound\", \"true\");\n      markKeyboardInteractionOnTrigger(mobileTopLink);\n\n      mobileTopLink.addEventListener(\"click\", (e) =\u003e {\n        trackForYouClick();\n\n        requestAnimationFrame(() =\u003e {\n          const subcats = document.querySelector('[data-ct-for-you-subcats=\"true\"]');\n          if (subcats) {\n            fetchRecommendationsIntoMobileNav(subcats);\n            focusMobilePanelStart();\n          }\n        });\n      });\n    }\n\n    const pillLink = Array.from(\n      document.querySelectorAll(\".experience-fixedPinsWrapper a\")\n    ).find((a) =\u003e a.textContent.trim().toLowerCase() === \"for you\");\n\n    if (pillLink \u0026\u0026 !pillLink.getAttribute(\"data-ct-bound\")) {\n      pillLink.setAttribute(\"data-ct-bound\", \"true\");\n      markKeyboardInteractionOnTrigger(pillLink);\n\n      pillLink.addEventListener(\"click\", (e) =\u003e {\n        e.preventDefault();\n        openOverlay(e.currentTarget);\n      });\n    }\n  }\n\n  function prefetchForYouNavRecs() {\n    const desktopSubcats = document.querySelector('[data-ct-for-you-desktop-subcats=\"true\"]');\n    if (desktopSubcats) fetchRecommendationsIntoDesktopNav(desktopSubcats);\n\n    const mobileSubcats = document.querySelector('[data-ct-for-you-subcats=\"true\"]');\n    if (mobileSubcats) fetchRecommendationsIntoMobileNav(mobileSubcats);\n  }\n\n  function init() {\n    bindInteractionModeTracking();\n    injectForYouNavItem();\n    injectForYouMobileNavItem();\n    adjustMobilePillNav();\n    ensureOverlay();\n    wireClicks();\n    prefetchForYouNavRecs();\n  }\n\n  poll(\n    \"#navigation\",\n    () =\u003e {\n      try {\n        init();\n      } catch (e) {\n        console \u0026\u0026 console.warn \u0026\u0026 console.warn(\"CT For You overlay init error\", e);\n      }\n    },\n    50,\n    60\n  );\n})();","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"69b96ed614ffb0ae5bf050d8"},{"uses_overlay":false,"type":"js","parametrized_definition":"(() =\u003e {\n  \"use strict\";\n\n  const RUN_FLAG = \"__CT_PICTURE_DATA_IESRC_TO_IMG__\";\n  if (window[RUN_FLAG]) return;\n  window[RUN_FLAG] = true;\n\n  function processPicture(picture) {\n    if (!picture) return;\n\n    const img = picture.querySelector(\"img\");\n    if (!img) return;\n\n    const ieSrc = picture.getAttribute(\"data-iesrc\");\n    if (!ieSrc) return;\n\n    // Prevent reprocessing\n    if (img.getAttribute(\"data-ct-src-applied\") === \"true\") return;\n\n    img.src = ieSrc;\n    img.setAttribute(\"data-ct-src-applied\", \"true\");\n  }\n\n  function init(root = document) {\n    root.querySelectorAll(\"picture[data-iesrc]\").forEach(processPicture);\n  }\n\n  // Initial run\n  init();\n\n  // Handle dynamic DOM changes (PLP loads, CMS blocks, carousels, etc.)\n  const observer = new MutationObserver((mutations) =\u003e {\n    mutations.forEach((m) =\u003e {\n      m.addedNodes.forEach((node) =\u003e {\n        if (node.nodeType !== 1) return;\n\n        if (node.matches \u0026\u0026 node.matches(\"picture[data-iesrc]\")) {\n          processPicture(node);\n        } else if (node.querySelectorAll) {\n          node.querySelectorAll(\"picture[data-iesrc]\").forEach(processPicture);\n        }\n      });\n    });\n  });\n\n  observer.observe(document.body, {\n    childList: true,\n    subtree: true\n  });\n})();","trigger":{"include_pages":[{"url":"https://www.charlestyrwhitt.com/uk/editorial-style-tips/why-we-love-linen.html","type":"contains"}],"exclude_pages":null},"_id":"69d532ca5566ec5d82491225"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function () {\n\tif(utag_data.global.sfcc_country == 'FR' \u0026\u0026 !utag_data.page.name.includes('checkout')){\n (function () {\n  const REPLACEMENT = ' VITE';\n\n  function replaceInTextNode(node) {\n    if (!node || node.nodeType !== Node.TEXT_NODE) return;\n    node.nodeValue = node.nodeValue.replace(\n      /(code\\s*:\\s*)offre\\b/gi,\n      `$1${REPLACEMENT}`\n    );\n  }\n\n  function replaceWrappedCode(el) {\n    if (!el || el.nodeType !== Node.ELEMENT_NODE) return;\n\n    const fullText = (el.textContent || '').replace(/\\s+/g, ' ').trim();\n\n    // Only operate in elements that look like promo code copy\n    if (/code\\s*:/i.test(fullText)) {\n      // Replace direct text node pattern: \"Code : Offre\"\n      el.childNodes.forEach(replaceInTextNode);\n\n      // Replace wrapped standalone code values like \u003cb\u003eOFFRE\u003c/b\u003e / \u003cspan\u003eOFFRE\u003c/span\u003e\n      el.querySelectorAll('b, strong, span').forEach(node =\u003e {\n        const text = (node.textContent || '').trim();\n        if (/^offre$/i.test(text)) {\n          node.textContent = REPLACEMENT;\n        }\n      });\n    }\n  }\n\n  function run(root) {\n    const scope = root \u0026\u0026 root.nodeType === 1 ? root : document;\n    scope.querySelectorAll('p, a, div, span, li').forEach(replaceWrappedCode);\n  }\n\n  run(document);\n\n  const observer = new MutationObserver((mutations) =\u003e {\n    mutations.forEach((mutation) =\u003e {\n      mutation.addedNodes.forEach((node) =\u003e {\n        if (node.nodeType === 1) run(node);\n      });\n    });\n  });\n\n  observer.observe(document.body, {\n    childList: true,\n    subtree: true\n  });\n})();\n\t}\n})();","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"69e109fa11fa348d4f908847"},{"uses_overlay":false,"type":"html","parametrized_definition":"\u003cstyle\u003e\n\t.order-totals__shipment-message{\n\t\tdisplay: none !important;\n\t}\n\u003c/style\u003e","trigger":{"include_pages":[{"url":"cart","type":"contains"}],"exclude_pages":null},"_id":"691eec84d52ab291bf508f26"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function ($) {\n  // Gate: suits PDP on UK site only\n  if (!(window.utag_data \n        \u0026\u0026 utag_data.page \n        \u0026\u0026 utag_data.page.type === \"product set\" \n        \u0026\u0026 utag_data.global \n        \u0026\u0026 utag_data.global.sfcc_country === \"UK\")) {\n    return;\n  }\n\n  var DELAY = 20000; // set to 25000 for 25s live\n  var STYLE_ID = \"suitsModal-styles\";\n  var MODAL_ID = \"signupModal\";\n  var OVERLAY_ID = \"suitsOverlay\";\n\n  // ----- CSS -----\n  if (!document.getElementById(STYLE_ID)) {\n    var css = `\n      body.no-scroll-suits { overflow: hidden; }\n\n      .suitsOverlay {\n        position: fixed; inset: 0;\n        background-color: rgba(186,186,186,0.75);\n        z-index: 99; display: none; opacity: 0; transition: opacity 220ms ease;\n      }\n      .suitsOverlay.is-open { display: block; opacity: 1; }\n\n      .suitsModal {\n    \tdisplay:none;\n        z-index: 100; background-color: #fff; text-align: center;\n        width: 90%; max-width: 650px;\n        position: fixed; top: -100%; left: 50%; transform: translate(-50%, -50%);\n        box-shadow: 0 12px 30px rgba(0,0,0,0.25);\n      }\n\n      @media (max-width: 600px) {\n        .suitsModal {\n          width: 100%; max-width: none;\n          left: 0; transform: none;\n          bottom: -100%; top: auto;\n          border-radius: 12px 12px 0 0;\n        }\n        #image_container { display: none; }\n      }\n\n      .suitsModal .close-icon {\n        position: absolute;\n        top: 0px;\n        right: 0px;\n        background: none;\n        border: none;\n        cursor: pointer;\n      }\n\n      .suitsClose:focus {\n        outline: #001F49 solid 1px;\n      }\n\n      #content_container { display: flex; }\n      #image_container { flex: 1; height: 100%; }\n      #newsletter_info_container { flex: 1; }\n    `;\n    $(\"\u003cstyle\u003e\", { id: STYLE_ID, text: css }).appendTo(\"head\");\n  }\n\n  // ----- HTML -----\n  var overlayHtml = '\u003cdiv id=\"' + OVERLAY_ID + '\" class=\"suitsOverlay\" aria-hidden=\"true\"\u003e\u003c/div\u003e';\n\n  var modalHtml = `\n    \u003cdiv id=\"${MODAL_ID}\" class=\"suitsModal\" role=\"dialog\" aria-labelledby=\"dialog-title-SignUp\" aria-describedby=\"dialog-description-SignUp\" tabindex=\"-1\"\u003e\n      \u003cbutton aria-label=\"Close\" class=\"close-icon suitsClose\"\u003e\n        \u003csvg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n             xmlns=\"http://www.w3.org/2000/svg\"\u003e\n          \u003cpath d=\"M2.99867 13L12.998 3\" stroke=\"#000\" stroke-width=\"1.5\"\n                stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003c/path\u003e\n          \u003cpath d=\"M12.9987 13L2.998 3\" stroke=\"#000\" stroke-width=\"1.5\"\n                stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003c/path\u003e\n        \u003c/svg\u003e\n      \u003c/button\u003e\n\n      \u003cdiv id=\"content_container\"\u003e\n        \u003cdiv id=\"image_container\"\u003e\n          \u003cimg src=\"/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/va22a0af4c1de0ac91509302495404ab121b7b684/merchAssets/content/Suit-Pdp-Popup.jpg\"\n               alt=\"charlestyrwhitt\" style=\"width:100%;height:100%;object-fit:cover;\"\u003e\n        \u003c/div\u003e\n        \u003cdiv id=\"newsletter_info_container\"\u003e\n          \u003ch1 id=\"dialog-title-SignUp\" class=\"visually-hidden\"\u003eCharles Tyrwhitt Sign up modal\u003c/h1\u003e\n          \u003cp id=\"dialog-description-SignUp\" class=\"visually-hidden\"\u003e\u003c/p\u003e\n\n          \u003cdiv class=\"p-all-s wrapper body-wrapper h-100\" style=\"height:100%;display:flex;justify-content:center;align-items:center;\"\u003e\n            \u003csection\u003e\n              \u003cp class=\"m-ends-m h2\" style=\"font-size:1.6rem;\"\u003eNeed help finding your perfect size?\u003c/p\u003e\n              \u003cp class=\"m-ends-m h2 heading--center\" style=\"font-size:4.3rem;\"\u003e10% OFF SUITS\u003c/p\u003e\n              \u003cp class=\"pre-sub m-ends-m m-bottom-z p-sides-m\"\u003eGet measured and enjoy 10% off suits in-store.\u003c/p\u003e\n              \u003ch4 class=\"m-top-m\"\u003eUse code: \u003cstrong\u003eAPPT10\u003c/strong\u003e to claim \u003cstrong\u003ein-store\u003c/strong\u003e\u003c/h4\u003e\n              \u003ca id=\"suitsModalCTA\" href=\"https://www.charlestyrwhitt.com/uk/store-appointments.html#cm_sp=HP-HP6_book-an-appointment\"\n                 class=\"m-top-m button bg-grey1\" style=\"display:block;margin:auto;width:100%;\"\u003eBook Appointment\u003c/a\u003e\n            \u003c/section\u003e\n          \u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  `;\n\n  // ----- Functions -----\n  function openModal() {\n    if ($(\"#\" + MODAL_ID).length) return;\n    $(\"body\").append(overlayHtml + modalHtml).addClass(\"no-scroll-suits\");\n\n    var $modal = $(\"#\" + MODAL_ID);\n    var isMobile = window.matchMedia(\"(max-width: 600px)\").matches;\n\n    if (isMobile) {\n      $modal.animate({ bottom: \"0\" }, 400);\n    } else {\n      $modal.animate({ top: \"50%\" }, 400);\n    }\n\n    $(\"#\" + OVERLAY_ID).addClass(\"is-open\");\n    $modal.focus();\n  }\n\n  function closeModal() {\n    var $modal = $(\"#\" + MODAL_ID);\n    var isMobile = window.matchMedia(\"(max-width: 600px)\").matches;\n\n    if (isMobile) {\n      $modal.animate({ bottom: \"-100%\" }, 300, removeModal);\n    } else {\n      $modal.animate({ top: \"-100%\" }, 300, removeModal);\n    }\n  }\n\n  function removeModal() {\n    $(\"#\" + OVERLAY_ID).remove();\n    $(\"#\" + MODAL_ID).remove();\n    $(\"body\").removeClass(\"no-scroll-suits\");\n  }\n\n  // ----- Events -----\n  //setTimeout(openModal, DELAY);\n\n  $(document).on(\"click\", \"#\" + MODAL_ID + \" .suitsClose\", closeModal);\n  $(document).on(\"click\", \"#\" + OVERLAY_ID, closeModal);\n  $(document).on(\"keydown\", function (e) {\n    if (e.key === \"Escape\" \u0026\u0026 $(\"#\" + MODAL_ID).length) closeModal();\n  });\n\n  // CTA tracking\n  $(document).on(\"click\", \"#suitsModalCTA\", function () {\n    if (typeof exponea !== \"undefined\" \u0026\u0026 exponea.track) {\n      exponea.track(\"Clicked Suits Hesitation Modal\", {});\n    }\n  });\n\n})(jQuery);\n\n(function () {\n  const ID = \"ct-store-hero-msg\";\n  const STYLE_ID = ID + \"-styles\";\n\n  // ====== Gate ======\n  if (!(window.utag_data \n        \u0026\u0026 utag_data.page?.name === \"store-appointments\" \n        \u0026\u0026 utag_data.global?.sfcc_country === \"UK\")) {\n    return;\n  }\n\n  const target = document.querySelector(\".storeReopening .bg-hero\");\n  if (!target) return;\n\n  // Idempotent\n  document.getElementById(ID)?.remove();\n  document.getElementById(STYLE_ID)?.remove();\n\n  // Ensure target can anchor absolutely-positioned child\n  try {\n    const pos = getComputedStyle(target).position;\n    if (pos === \"static\") target.style.position = \"relative\";\n  } catch (e) {}\n\n  // ====== Styles ======\n  const css = `\n    #${ID} {\n      position: absolute;\n      inset: 0;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      padding: 24px;\n      text-align: center;\n      z-index: 2;\n    }\n    #${ID}::before {\n      content: \"\";\n      position: absolute;\n      inset: 0;\n      background: rgba(55,55,55,0.40);\n      z-index: -1;\n    }\n    #${ID} .${ID}-text {\n      color: #fff;\n      max-width: 1000px;\n      width: 100%;\n      margin: 0 auto;\n    }\n    #${ID} .${ID}-headline {\n      text-transform: uppercase;\n      font-size: 28px;\n      line-height: 1.1;\n      font-weight: 700;\n      letter-spacing: 0.2px;\n    }\n    #${ID} .${ID}-subline {\n      margin-top: 8px;\n      font-size: 20px;\n      font-weight: 400;\n    }\n    #${ID} .${ID}-subline strong { font-weight: 500; }\n    #${ID} .${ID}-disclaimer {\n      margin-top: 6px;\n      font-size: 14px;\n      font-weight: 300;\n      opacity: 0.9;\n    }\n    @media (min-width: 768px) {\n      #${ID} .${ID}-headline { font-size: 48px; }\n    }\n  `;\n  const style = document.createElement(\"style\");\n  style.id = STYLE_ID;\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  // ====== Markup (no CTA) ======\n  const wrap = document.createElement(\"div\");\n  wrap.id = ID;\n  wrap.setAttribute(\"role\", \"region\");\n  wrap.setAttribute(\"aria-label\", \"In-store appointment message\");\n\n  wrap.innerHTML = `\n    \u003cdiv class=\"${ID}-text\"\u003e\n      \u003cdiv class=\"${ID}-headline\"\u003e10% Off Suits\u003c/div\u003e\n      \u003cdiv class=\"${ID}-subline\"\u003eBook an appointment and \u003cstrong\u003euse code APPT10 in store to claim\u003c/strong\u003e\u003c/div\u003e\n      \u003cdiv class=\"${ID}-disclaimer\"\u003eOffer code only valid in store\u003c/div\u003e\n    \u003c/div\u003e\n  `;\n\n  target.appendChild(wrap);\n})();\n\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"68bff31995524e9158b97c95"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function () {\n  var SELECTORS = ['.js-service-banner-carousel', '.banner-strip--carousel'].join(',');\n\n  var reduceMotion = window.matchMedia \u0026\u0026\n    window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n  var $carousels = $(SELECTORS);\n  if (!$carousels.length) return;\n\n  function enableAutoplay($el) {\n    try {\n      if (reduceMotion) {\n        // Do not autoplay for reduced motion users\n        $el.slick('slickSetOption', 'autoplay', false, true);\n        $el.slick('slickPause');\n        return;\n      }\n\n      // Enable autoplay\n      $el.slick('slickSetOption', 'autoplay', true, true);\n      $el.slick('slickPlay');\n\n      // Pause on hover + keyboard focus\n      $el\n        .off('.ctA11y')\n        .on('mouseenter.ctA11y focusin.ctA11y', function () {\n          try { $el.slick('slickPause'); } catch (e) {}\n        })\n        .on('mouseleave.ctA11y focusout.ctA11y', function () {\n          try { $el.slick('slickPlay'); } catch (e) {}\n        });\n\n    } catch (e) {}\n  }\n\n  $carousels.each(function () {\n    var $carousel = $(this);\n\n    if ($carousel.hasClass('slick-initialized')) {\n      enableAutoplay($carousel);\n    } else {\n      $carousel.on('init.ctAutoplayA11y', function () {\n        enableAutoplay($carousel);\n      });\n    }\n  });\n})();\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"69788d378d6d75a802a23b03"},{"uses_overlay":false,"type":"js","parametrized_definition":"(() =\u003e {\n  \"use strict\";\n\n  // PLP only\n  try {\n    const pageType = String(window.utag_data?.page?.type || \"\").toLowerCase();\n    if (!pageType.includes(\"category\")) return;\n  } catch {\n    return;\n  }\n\n  const RUN_FLAG = \"__CRO_SOCIALPROOF_SWATCH_OFFSET__\";\n  if (window[RUN_FLAG]) return;\n  window[RUN_FLAG] = true;\n\n  const SWATCH_MORE_SEL = \".js-more-swatches\";\n  const BADGE_SEL =\n    \".weblayer--box-notification.socialProof.socialProofTile.slide-in-init.slide-in\";\n\n  const STYLE_ID = \"cro-socialproof-styles\";\n\n  function ensureStyles() {\n    if (document.getElementById(STYLE_ID)) return;\n\n    const style = document.createElement(\"style\");\n    style.id = STYLE_ID;\n    style.textContent = `\n      .weblayer--box-notification {\n        max-width: 100% !important;\n      }\n\n      .cro-sp-swatch-open ${BADGE_SEL} {\n        bottom: 6.5rem !important;\n      }\n    `;\n    document.head.appendChild(style);\n  }\n\n  function isDisplayed(el) {\n    if (!el) return false;\n    return window.getComputedStyle(el).display !== \"none\";\n  }\n\n  function updateTile(tile) {\n    if (!tile) return;\n\n    const moreSwatches = tile.querySelector(SWATCH_MORE_SEL);\n    const swatchOpened = isDisplayed(moreSwatches);\n\n    tile.classList.toggle(\"cro-sp-swatch-open\", swatchOpened);\n  }\n\n  function updateAll() {\n    ensureStyles();\n    document\n      .querySelectorAll(\".product-tile, li, .product, .grid-item\")\n      .forEach(updateTile);\n  }\n\n  updateAll();\n\n  const mo = new MutationObserver(() =\u003e updateAll());\n  mo.observe(document.documentElement, {\n    subtree: true,\n    childList: true,\n    attributes: true,\n    attributeFilter: [\"style\", \"class\"]\n  });\n})();\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"6992eb007382ab5934687afb"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function () {\n  \"use strict\";\n\n  // --------------------------\n  // Debug (optional)\n  // --------------------------\n  var DEBUG = false;\n  try { DEBUG = /[?\u0026]debugExitRecs=1\\b/.test(location.search); } catch (e) {}\n  var LOG_PREFIX = \"[ct-exit-recs]\";\n  function log() {\n    if (!DEBUG || !window.console) return;\n    try { console.log.apply(console, [LOG_PREFIX].concat([].slice.call(arguments))); } catch (e) {}\n  }\n  function warn() {\n    if (!window.console) return;\n    try { console.warn.apply(console, [LOG_PREFIX].concat([].slice.call(arguments))); } catch (e) {}\n  }\n\n  // --------------------------\n  // Config\n  // --------------------------\n  var RECO_ID = \"688a7741490a4272fbe3f1d5\";\n  var REQUEST_SIZE = 12;\n\n  // PV gate + QA override\n  var PV_KEY = \"ct_exit_pageviews\";\n  var PV_MAX = 1;\n\n  var FORCE = false;\n  try { FORCE = /[?\u0026]forceExitRecs=1\\b/.test(location.search); } catch (e) {}\n\n  // Prevent double init\n  if (window.__ct_exit_recs_init) { log(\"bail: already init\"); return; }\n\n  // --------------------------\n  // Guards\n  // --------------------------\n  var ud = window.utag_data;\n  if (!ud || !ud.global || !ud.page) { warn(\"bail: missing utag_data\"); return; }\n\n  var pageType = String(ud.page.type || \"\").toLowerCase();\n  if (pageType !== \"product\" \u0026\u0026 pageType !== \"category\") return;\n\n  var country = String(ud.global.sfcc_country || \"\").toUpperCase();\n  if (!country) { warn(\"bail: missing sfcc_country\"); return; }\n\n  var allowedCountries = [\"UK\", \"DE\", \"EU\", \"FR\", \"CH\", \"AU\"];\n  if (allowedCountries.indexOf(country) === -1) return;\n\n  // --------------------------\n  // SEEN PER CUSTOMER (once per customer)\n  // --------------------------\n  var SEEN_PREFIX = \"ct_exit_recs_seen_v1_\";\n\n  function safeGet(obj, path) {\n    try {\n      var parts = String(path).split(\".\");\n      var cur = obj;\n      for (var i = 0; i \u003c parts.length; i++) {\n        if (!cur) return \"\";\n        cur = cur[parts[i]];\n      }\n      return cur == null ? \"\" : String(cur);\n    } catch (e) { return \"\"; }\n  }\n\n  function getCustomerKey() {\n    // Try common CT/Tealium shapes first\n    var candidates = [\n      safeGet(ud, \"customer.id\"),\n      safeGet(ud, \"customer.customer_id\"),\n      safeGet(ud, \"customerId\"),\n      safeGet(ud, \"customer_id\"),\n      safeGet(ud, \"global.customer_id\"),\n      safeGet(ud, \"global.customerId\"),\n      safeGet(ud, \"global.customer_number\"),\n      safeGet(ud, \"global.customer_no\")\n    ];\n\n    for (var i = 0; i \u003c candidates.length; i++) {\n      var v = (candidates[i] || \"\").trim();\n      if (v \u0026\u0026 v !== \"0\" \u0026\u0026 v.toLowerCase() !== \"null\" \u0026\u0026 v.toLowerCase() !== \"undefined\") return v;\n    }\n\n    // Exponea sometimes exposes an ID (best-effort; don’t rely on it)\n    try {\n      if (window.exponea \u0026\u0026 typeof window.exponea.customer_id !== \"undefined\") {\n        var ex = String(window.exponea.customer_id || \"\").trim();\n        if (ex) return ex;\n      }\n      if (window.exponea \u0026\u0026 typeof window.exponea.customerId !== \"undefined\") {\n        var ex2 = String(window.exponea.customerId || \"\").trim();\n        if (ex2) return ex2;\n      }\n    } catch (e) {}\n\n    return \"\"; // if we can't identify customer, we can't enforce \"per customer\"\n  }\n\n  function hasSeenForCustomer(customerKey) {\n    if (!customerKey) return false;\n    try {\n      return localStorage.getItem(SEEN_PREFIX + customerKey) === \"1\";\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function markSeenForCustomer(customerKey) {\n    if (!customerKey) return;\n    try {\n      localStorage.setItem(SEEN_PREFIX + customerKey, \"1\");\n    } catch (e) {}\n  }\n\n  var customerKey = getCustomerKey();\n  log(\"customerKey\", customerKey || \"(none)\");\n\n  // Only enforce once-per-customer when we have a customerKey.\n  // QA override bypasses this.\n  if (!FORCE \u0026\u0026 customerKey \u0026\u0026 hasSeenForCustomer(customerKey)) {\n    log(\"bail: already seen for customer\", customerKey);\n    return;\n  }\n\n  // --------------------------\n  // PV gate\n  // --------------------------\n  var pv = Math.max(0, parseInt(localStorage.getItem(PV_KEY) || \"0\", 10)) + 1;\n  localStorage.setItem(PV_KEY, String(pv));\n  if (!FORCE \u0026\u0026 pv \u003e PV_MAX) {\n    log(\"bail: pv gate\", pv, \"max\", PV_MAX);\n    return;\n  }\n\n  // Mark init AFTER passing gates\n  window.__ct_exit_recs_init = true;\n\n  // --------------------------\n  // Context\n  // --------------------------\n  var global = ud.global || {};\n  var lang = global.site_language || \"en_GB\";\n\n  var titleFieldMap = {\n    en_GB: \"title\", en_US: \"product_name_us\", de_DE: \"product_name_de\",\n    en_IE: \"product_name_eu\", fr_FR: \"product_name_fr\", en_AU: \"product_name_au\",\n    en: \"product_name_xbr\", en_CA: \"product_name_ca_en\", fr_CA: \"product_name_ca_fr\",\n    en_CH: \"product_name_ch_en\", de_CH: \"product_name_ch_de\",\n    en_NL: \"product_name_nl_en\", nl_NL: \"product_name_nl_nl\",\n    fr_CH: \"product_name_ch_fr\"\n  };\n  var titleField = titleFieldMap[lang] || \"title\";\n\n  var NOW_LABELS = { en: \"Now\", de: \"Jetzt\", fr: \"Maintenant\", nl: \"Nu\" };\n  var isoLang = String(lang || \"\").split(/[_-]/)[0];\n  var nowLabel = NOW_LABELS[isoLang] || NOW_LABELS.en;\n\n  var headingMap = {\n    en_GB: \"Have you seen?\",\n    en_US: \"Have you seen?\",\n    en_AU: \"Have you seen?\",\n    en_IE: \"Have you seen?\",\n    en_CA: \"Have you seen?\",\n    fr_FR: \"Avez-vous vu ?\",\n    fr_CA: \"Avez-vous vu ?\",\n    fr_CH: \"Avez-vous vu ?\",\n    de_DE: \"Haben Sie schon gesehen?\",\n    de_CH: \"Haben Sie schon gesehen?\",\n    nl_NL: \"Heb je dit al gezien?\",\n    en_NL: \"Have you seen?\"\n  };\n  var headingText = headingMap[lang] || \"Have you seen?\";\n\n  function getCountrySlug(ctCountry) { return String(ctCountry || \"UK\").toLowerCase(); }\n  function buildProductUrl(prodId) {\n    if (!prodId) return \"#\";\n    var slug = getCountrySlug(country);\n    return \"/\" + encodeURIComponent(slug) + \"/\" + encodeURIComponent(prodId) + \".html?pf=recs_exit\";\n  }\n\n  function transformBloomImage(url) {\n    if (!url) return \"\";\n    var cleaned = String(url).split(\"?\")[0];\n    return cleaned.replace(/^https:\\/\\/www\\.charlestyrwhitt\\.com\\//,\n      \"https://www.charlestyrwhitt.com/dw/image/v2/AAWJ_PRD/\") + \"?sw=860\u0026sh=1080\u0026sm=fit\u0026q=42\";\n  }\n\n  function escapeHtml(a) {\n    return String(a || \"\")\n      .replace(/\u0026/g, \"\u0026amp;\")\n      .replace(/\u003c/g, \"\u0026lt;\")\n      .replace(/\u003e/g, \"\u0026gt;\")\n      .replace(/\"/g, \"\u0026quot;\")\n      .replace(/'/g, \"\u0026#39;\");\n  }\n\n  function isMobileView() {\n    return (window.matchMedia \u0026\u0026 matchMedia(\"(max-width: 768px)\").matches)\n      || ud?.page?.responsive_design_type === \"Mobile View\";\n  }\n\n  // --------------------------\n  // Pricing endpoint helpers (same as your current)\n  // --------------------------\n  function getLocaleSlug(langStr) { return String(langStr || \"en_GB\").replace(\"-\", \"_\"); }\n  function getSiteId(ctCountry) {\n    var map = {\n      UK: \"CTShirts-UK-Site\", US: \"CTShirts-US-Site\", DE: \"CTShirts-DE-Site\",\n      EU: \"CTShirts-EU-Site\", FR: \"CTShirts-FR-Site\", AU: \"CTShirts-AU-Site\",\n      NL: \"CTShirts-NL-Site\", CH: \"CTShirts-CH-Site\", CA: \"CTShirts-CA-Site\",\n      XBR: \"CTShirts-XBR-Site\"\n    };\n    return map[ctCountry] || \"CTShirts-UK-Site\";\n  }\n  var localeSlug = getLocaleSlug(lang);\n  var siteId = getSiteId(country);\n\n  function normalisePriceString(str) { return String(str || \"\").replace(/\\s+/g, \" \").trim(); }\n\n  function getPayloadNowPrice(item) {\n    return (item.nowprice || item.now_price || item.price_formatted || item.now_price_formatted ||\n      item.formatted_price || item.priceFormatted || item.price || \"\");\n  }\n  function getPayloadWasPrice(item) {\n    return (item.wasprice || item.was_price || item.was_price_formatted || item.original_price_formatted ||\n      item.rrp_formatted || item.original_price || item.rrp || \"\");\n  }\n\n  function renderPricingHtml(rawWas, rawNow) {\n    rawWas = rawWas ? String(rawWas) : \"\";\n    rawNow = rawNow ? String(rawNow) : \"\";\n    if (!rawNow) return \"\";\n\n    var hasDiscount = !!rawWas \u0026\u0026 normalisePriceString(rawWas) !== normalisePriceString(rawNow);\n\n    var wasHtml = hasDiscount\n      ? '\u003cspan class=\"ct-reco-price-was grey2\"\u003e' + rawWas + \"\u003c/span\u003e\"\n      : \"\";\n\n    var nowHtml = hasDiscount\n      ? '\u003cspan class=\"ct-reco-price-now red1\"\u003e\u003cspan class=\"ct-reco-now-label m-left-s\"\u003e' + nowLabel + \"\u003c/span\u003e \" + rawNow + \"\u003c/span\u003e\"\n      : '\u003cspan class=\"ct-reco-price-now\"\u003e' + rawNow + \"\u003c/span\u003e\";\n\n    return wasHtml + nowHtml;\n  }\n\n  function fetchAndOverridePricing(prodId, $tile, itemPayload) {\n    try {\n      if (!prodId || !$tile || !$tile.length) return;\n\n      var $pricing = $tile.find(\".ct-reco-pricing\");\n      if (!$pricing.length) return;\n\n      function clearLoading() { $pricing.removeClass(\"ct-reco-pricing--loading\"); }\n\n      var url =\n        \"/on/demandware.store/Sites-\" + siteId + \"/\" + localeSlug +\n        \"/Product-GetUpdatedProductPrices?productids=\" + encodeURIComponent(prodId);\n\n      if (!window.jQuery || !jQuery.ajax) {\n        clearLoading();\n        $pricing.html(renderPricingHtml(getPayloadWasPrice(itemPayload), getPayloadNowPrice(itemPayload)));\n        return;\n      }\n\n      jQuery.ajax({ url: url, method: \"GET\", dataType: \"json\" })\n        .done(function (resp) {\n          try {\n            var obj = null;\n            if (resp \u0026\u0026 resp.length) {\n              for (var i = 0; i \u003c resp.length; i++) {\n                if (resp[i] \u0026\u0026 resp[i].productid === prodId) { obj = resp[i]; break; }\n              }\n              if (!obj) obj = resp[0];\n            }\n\n            var rawWas = obj \u0026\u0026 obj.wasprice ? String(obj.wasprice) : \"\";\n            var rawNow = obj \u0026\u0026 obj.nowprice ? String(obj.nowprice) : \"\";\n\n            if (!rawNow) {\n              rawWas = getPayloadWasPrice(itemPayload);\n              rawNow = getPayloadNowPrice(itemPayload);\n            }\n\n            clearLoading();\n            $pricing.html(renderPricingHtml(rawWas, rawNow));\n          } catch (e) {\n            clearLoading();\n            $pricing.html(renderPricingHtml(getPayloadWasPrice(itemPayload), getPayloadNowPrice(itemPayload)));\n          }\n        })\n        .fail(function () {\n          $pricing.removeClass(\"ct-reco-pricing--loading\");\n          $pricing.html(renderPricingHtml(getPayloadWasPrice(itemPayload), getPayloadNowPrice(itemPayload)));\n        });\n    } catch (e) {}\n  }\n\n  // --------------------------\n  // Styles (wrapper uses fit-content to avoid clipping)\n  // --------------------------\n  function ensureStyles() {\n    if (document.getElementById(\"ct-exitrecs-styles\")) return;\n\n    var s = document.createElement(\"style\");\n    s.id = \"ct-exitrecs-styles\";\n    s.textContent = `\n      #exitBRRecommendations .product-tile__promo { visibility: hidden !important; }\n\n      #exitBRRecommendations .recommendations__carousel .slick-list { margin: 0 -0.2rem; }\n      #exitBRRecommendations .recommendations__carousel .slick-slide { padding: 0 0.2rem; }\n\n      @media (max-width: 768px) {\n        #exitBRRecommendations .product-tile__name-link {\n          display: -webkit-box;\n          -webkit-line-clamp: 2;\n          -webkit-box-orient: vertical;\n          overflow: hidden;\n          text-overflow: ellipsis;\n          white-space: normal;\n        }\n      }\n\n      /* fit-content wrapper (no clipping) */\n      #exitBRRecommendationsWrapper {\n        overflow: visible;\n        max-height: 0;\n        opacity: 0;\n        transform: translateY(-6px);\n        transition: opacity .25s ease, transform .25s ease;\n        will-change: opacity, transform;\n      }\n      #exitBRRecommendationsWrapper.is-visible {\n        max-height: fit-content;\n        opacity: 1;\n        transform: translateY(0);\n      }\n\n      #exitBRRecommendations .ct-reco-pricing { min-height: 2.4rem; margin-top: .3rem; }\n\n      #exitBRRecommendations .ct-reco-pricing--loading { position: relative; overflow: hidden; }\n      #exitBRRecommendations .ct-reco-pricing--loading::before { content:\"\"; display:block; width:70%; height:1.6rem; border-radius:999px; background:#eee; }\n      #exitBRRecommendations .ct-reco-pricing--loading::after {\n        content:\"\"; position:absolute; top:0; left:-40%; width:40%; height:1.6rem;\n        background: linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,.7), rgba(255,255,255,0));\n        animation: ct-exit-reco-shimmer 1.1s infinite;\n      }\n      @keyframes ct-exit-reco-shimmer { 0%{ transform: translateX(0);} 100%{ transform: translateX(150%);} }\n\n      #exitBRRecommendations .ct-reco-price-was { text-decoration: line-through !important; opacity: .7; margin-right: .4rem; line-height: 1.25; }\n      #exitBRRecommendations .ct-reco-price-now { font-weight: 700; line-height: 1.25; white-space: normal; color: #373737; }\n      #exitBRRecommendations .ct-reco-price-now.red1 { color: #bc2e35; }\n      #exitBRRecommendations .ct-reco-now-label { font-weight: 700; }\n\n      #exitBRRecommendations .product-tile__info,\n      #exitBRRecommendations .js-tile-info {\n        height: auto !important;\n        min-height: 0 !important;\n        overflow: visible !important;\n      }\n\n      #exitBRRecommendations .ct-reco-pricing {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: baseline;\n        row-gap: 2px;\n      }\n\n      #exitBRRecommendations .slick-slide { height: auto !important; }\n      #exitBRRecommendations .slick-track { display: flex; align-items: stretch; }\n      #exitBRRecommendations .slick-slide \u003e div { height: 100%; }\n    `;\n    document.head.appendChild(s);\n  }\n\n  function injectContainer() {\n    if (document.getElementById(\"exitBRRecommendationsWrapper\")) return;\n\n    var container = document.createElement(\"div\");\n    container.id = \"exitBRRecommendationsWrapper\";\n    container.className = \"p-left-s\";\n    container.style.margin = \"0\";\n    container.innerHTML = '\u003cdiv id=\"exitBRRecommendations\"\u003e\u003c/div\u003e';\n\n    var main = document.querySelector(\"#main\");\n    if (main \u0026\u0026 main.parentNode) main.parentNode.insertBefore(container, main);\n    else document.body.prepend(container);\n  }\n\n  function openWrapper() {\n    var outer = document.getElementById(\"exitBRRecommendationsWrapper\");\n    if (!outer) return;\n    outer.classList.remove(\"is-visible\");\n    void outer.offsetHeight;\n    outer.classList.add(\"is-visible\");\n  }\n\n  // --------------------------\n  // Render\n  // --------------------------\n  function renderItems(items) {\n    if (!window.jQuery) { warn(\"bail: jQuery missing\"); return; }\n    if (!Array.isArray(items) || !items.length) return;\n\n    ensureStyles();\n    injectContainer();\n\n    var container = document.getElementById(\"exitBRRecommendations\");\n    if (!container) return;\n\n    container.innerHTML =\n      '\u003ch2 class=\"js-recommendations-title recommendations__title font__secondary m-ends-m grey1 text-left\"\u003e' +\n        headingText +\n      \"\u003c/h2\u003e\" +\n      '\u003cdiv class=\"js-recommendations-carousel recommendations__carousel\"\u003e\u003c/div\u003e';\n\n    var wrapper = container.querySelector(\".js-recommendations-carousel\");\n    if (!wrapper) return;\n\n    var $wrapper = jQuery(wrapper);\n    $wrapper.empty();\n\n    var kept = 0;\n\n    for (var i = 0; i \u003c items.length; i++) {\n      var item = items[i];\n      if (!item) continue;\n\n      var id = item.id || item.item_id;\n      if (!id) continue;\n\n      var title = escapeHtml((item[titleField] || item.title || \"\").replace(/Charles Tyrwhitt\\s*/gi, \"\").trim());\n      var url = buildProductUrl(id);\n      var img = transformBloomImage(item.thumb_image || item.image || \"\");\n\n      var slideHtml = '\u003cdiv class=\"position-relative product-tile-recs js-product-tile-container js-product-tile-recs\" data-prod-id-recs=\"' + escapeHtml(id) + '\"\u003e' + '\u003cdiv class=\"product-tile__img text-center position-relative overflow-hidden\"\u003e' + '\u003ca class=\"thumb-link-recs js-thumb-link-recs js-product-tile-image product-tile__img-link d-block standard-res keyboard-focus-outline show-video--false\" href=\"' + escapeHtml(url) + '\" title=\"' + title + '\"\u003e' + '\u003cimg width=\"430\" height=\"538\" src=\"' + escapeHtml(img) + '\" alt=\"' + title + '\" class=\"js-thumb-img\" loading=\"lazy\"\u003e' + \"\u003c/a\u003e\" + \"\u003c/div\u003e\" + '\u003cdiv class=\"js-tile-info-wrapper text-left product-tile__info-wrapper\"\u003e' + '\u003cdiv class=\"js-tile-info product-tile__info bg-white overflow-hidden position-relative\"\u003e' + \"\u003cdiv\u003e\" + '\u003ca class=\"js-thumb-link-recs outline-offset-1 capitalize--nl product-tile__name-link h4 h4__regular grey1 d-block js-product-tile-name p-top-s\" href=\"' + escapeHtml(url) + '\"\u003e' + '\u003cspan class=\"js-thumb-name capitalize--nl font__secondary\"\u003e' + title + \"\u003c/span\u003e\" + \"\u003c/a\u003e\" + \"\u003c/div\u003e\" + '\u003cdiv class=\"h5 bold\"\u003e' + '\u003cdiv class=\"ct-reco-pricing ct-reco-pricing--loading\"\u003e\u003c/div\u003e' + \"\u003c/div\u003e\" + \"\u003c/div\u003e\" + \"\u003c/div\u003e\" + \"\u003c/div\u003e\";\n\n      var $slide = jQuery(slideHtml);\n      fetchAndOverridePricing(String(id), $slide, item);\n\n      $wrapper.append($slide);\n      kept++;\n    }\n\n    if (!kept) return;\n\n    if (window.jQuery \u0026\u0026 jQuery.fn \u0026\u0026 typeof jQuery.fn.slick === \"function\") {\n      if ($wrapper.hasClass(\"slick-initialized\")) $wrapper.slick(\"unslick\");\n      $wrapper.slick({\n        slidesToShow: 6,\n        slidesToScroll: 2,\n        arrows: true,\n        dots: false,\n        infinite: false,\n        prevArrow:\n          '\u003cbutton type=\"button\" class=\"slick-prev slick-prev--inner keyboard-focus-outline slick-arrow\" aria-label=\"Previous\"\u003e\u003cspan class=\"slick-prev__icon position-relative\"\u003e\u003cp class=\"accessibility-hidden text-transform-none\"\u003ePrevious\u003c/p\u003e\u003c/span\u003e\u003c/button\u003e',\n        nextArrow:\n          '\u003cbutton type=\"button\" class=\"slick-next slick-next--inner keyboard-focus-outline slick-arrow\" aria-label=\"Next\"\u003e\u003cspan class=\"slick-next__icon position-relative\"\u003e\u003cp class=\"accessibility-hidden text-transform-none\"\u003eNext\u003c/p\u003e\u003c/span\u003e\u003c/button\u003e',\n        responsive: [\n          { breakpoint: 1024, settings: { slidesToShow: 3, slidesToScroll: 2, arrows: true } },\n          { breakpoint: 768,  settings: { slidesToShow: 2, slidesToScroll: 2, arrows: true } },\n          { breakpoint: 480,  settings: { slidesToShow: 2.1, slidesToScroll: 2, arrows: true } }\n        ]\n      });\n    }\n\n    openWrapper();\n\n    // ✅ ONLY NOW: mark as seen for this customer (only if we have a customer key)\n    // (so we don't burn the \"once\" if the module fails before it renders)\n    if (!FORCE \u0026\u0026 customerKey) {\n      markSeenForCustomer(customerKey);\n      log(\"marked seen for customer\", customerKey);\n    }\n  }\n\n  function fetchRecs() {\n    if (!(window.exponea \u0026\u0026 typeof exponea.getRecommendation === \"function\")) {\n      warn(\"bail: exponea.getRecommendation missing\");\n      return;\n    }\n\n    var seedId = ud \u0026\u0026 ud.products \u0026\u0026 ud.products[0] \u0026\u0026 ud.products[0].id;\n    var itemsObj = {};\n\n    if (pageType === \"product\" \u0026\u0026 seedId) itemsObj[seedId] = 1;\n\n    window.exponea.getRecommendation({\n      recommendationId: RECO_ID,\n      size: REQUEST_SIZE,\n      callback: renderItems,\n      fillWithRandom: true,\n      items: itemsObj,\n      catalogFilter: [],\n      catalogAttributesWhitelist: []\n    });\n  }\n\n  // --------------------------\n  // Triggers (exit intent logic)\n  // --------------------------\n  var triggered = false;\n  function trigger(source) {\n    if (triggered) return;\n    triggered = true;\n    log(\"trigger\", source);\n    fetchRecs();\n  }\n\n  document.addEventListener(\"mouseleave\", function (e) {\n    if (e.clientY \u003c= 0 \u0026\u0026 !isMobileView()) trigger(\"mouseleave\");\n  });\n\n  if (isMobileView()) {\n    var addToCartClicked = false;\n\n    document.addEventListener(\"click\", function (e) {\n      if (e.target \u0026\u0026 e.target.closest \u0026\u0026 e.target.closest(\"#add-to-cart\")) addToCartClicked = true;\n    }, { capture: true });\n\n    function fireOnce(src) {\n      if (!triggered \u0026\u0026 !addToCartClicked) trigger(src);\n    }\n\n    var seenDepth = 0;\n    window.addEventListener(\"scroll\", function () {\n      seenDepth = Math.max(seenDepth, window.scrollY || 0);\n      if (seenDepth \u003e 1200 \u0026\u0026 (window.scrollY || 0) \u003c 50) fireOnce(\"scroll-return-top\");\n    }, { passive: true });\n\n    try {\n      history.pushState({ _ct_exit_guard: 1 }, \"\");\n      window.addEventListener(\"popstate\", function () {\n        fireOnce(\"popstate\");\n        try { history.pushState({ _ct_exit_guard: 1 }, \"\"); } catch (e) {}\n      });\n    } catch (e) {}\n\n    document.addEventListener(\"visibilitychange\", function () {\n      if (document.visibilityState === \"hidden\") fireOnce(\"visibility-hidden\");\n    });\n  }\n\n  // QA helper\n  window.__ctExitRecs = window.__ctExitRecs || {};\n  window.__ctExitRecs.force = function () { trigger(\"force\"); };\n  window.__ctExitRecs.resetPV = function () { try { localStorage.removeItem(PV_KEY); } catch (e) {} };\n  window.__ctExitRecs.resetSeen = function () {\n    try { if (customerKey) localStorage.removeItem(SEEN_PREFIX + customerKey); } catch (e) {}\n  };\n\n})();\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"68ae050f7f2e543de6fd89d7"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function () {\r\n  if (!(window.utag_data \u0026\u0026 window.utag_data.page \u0026\u0026 window.utag_data.page.type === 'Homepage')) {\r\n    return; // ✅ only run on homepage\r\n  }\r\n\r\n  const anchors = document.querySelectorAll('a');\r\n  const regex = /(HP-)(HeroCarousel[^\u0026]*)/;\r\n  const tilesToAssignSlots = [];\r\n\r\n  // Collect anchors with visible images\r\n  anchors.forEach(anchor =\u003e {\r\n    const href = anchor.getAttribute('href');\r\n    if (href \u0026\u0026 regex.test(href) \u0026\u0026 $(anchor).find('img:visible').length) {\r\n      tilesToAssignSlots.push($(anchor));\r\n    }\r\n  });\r\n\r\n  // Assign classes and update hrefs in a single loop\r\n  tilesToAssignSlots.forEach((tile, index) =\u003e {\r\n    var incrementedIndex = index + 1;\r\n    tile.closest('.fpHpCatImg').addClass('CarouselSlot' + index);\r\n\r\n    $('.CarouselSlot' + index).find('a:visible').each(function (linkIndex) {\r\n      const href = $(this).attr('href');\r\n\r\n      if (href \u0026\u0026 regex.test(href)) {\r\n        var url = new URL(href, window.location.origin); // Preserve original URL\r\n        url.searchParams.set(\"cm_sp\", \"HP-HeroCarousel_Tile\" + incrementedIndex + \"_Link\" + (linkIndex + 1));\r\n        $(this).attr('href', url.toString()); // Update href with preserved URL + new query param\r\n      }\r\n    });\r\n  });\r\n})();\r\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"68ae06e807dd0d4b9d47e54a"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function() {\n  try {\n    if (utag_data?.page?.type === 'category') {\n      var style = document.createElement('style');\n      style.innerHTML = `\n        .product-tile__swatch-img {\n          border-radius: 0.5rem !important;\n        }\n      `;\n      document.head.appendChild(style);\n    }\n  } catch(e) {\n    console.warn(\"Swatch style injection failed\", e);\n  }\n})();\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"68af1636d151d5422a0efc15"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function () {\r\n  try {\r\n    if (!(window.utag_data \u0026\u0026 utag_data.global \u0026\u0026 utag_data.page)) return;\r\n\r\n    const isStaffOrder = utag_data.global.campaign_site === \"stafforder\";\r\n    const isBasketPage = utag_data.page.type === \"basket\";\r\n\r\n    if (!isStaffOrder || !isBasketPage) return;\r\n\r\n    const STYLE_ID = \"ct-hide-special-offers\";\r\n\r\n    // Avoid duplicate injections\r\n    if (document.getElementById(STYLE_ID)) return;\r\n\r\n    const css = `\r\n      #special-offers {\r\n        display: none !important;\r\n      }\r\n    `;\r\n\r\n    const styleEl = document.createElement(\"style\");\r\n    styleEl.id = STYLE_ID;\r\n    styleEl.textContent = css;\r\n    document.head.appendChild(styleEl);\r\n\r\n    console.log(\"[ct-custom] Special offers hidden for stafforder basket page\");\r\n  } catch (e) {\r\n    console.error(\"[ct-custom] Error injecting style\", e);\r\n  }\r\n})();\r\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"68c40df86fa9646f78402586"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function() {\n  try {\n    // ✅ Gate: Only run if consent group 3 is active\n    if (typeof OptanonActiveGroups === \"undefined\" || OptanonActiveGroups.indexOf(\"3\") === -1) return;\n\n    // ✅ Gate: Only run if utag_data exists\n    if (!(window.utag_data \u0026\u0026 utag_data.global \u0026\u0026 utag_data.page)) return;\n\n    // ✅ Gate: Only on US or UK sites\n    var country = utag_data.global.sfcc_country || \"\";\n    if ([\"US\", \"UK\"].indexOf(country) === -1) return;\n\n    // ✅ Gate: Only on confirmation pages\n    var pageName = (utag_data.page.name || \"\").toLowerCase();\n    if (pageName.indexOf(\"confirmation\") === -1) return;\n\n    // ---- Build items ----\n    var transformedItems = [];\n    if (Array.isArray(utag_data.bag)) {\n      for (let i = 0; i \u003c utag_data.bag.length; i++) {\n        var item = utag_data.bag[i];\n        transformedItems.push({\n          productId: item.id,\n          productVariantId: item.sku,\n          name: item.name,\n          category: item.category,\n          price: {\n            value: item.unit_price,\n            currency: utag_data.order.currency\n          }\n        });\n      }\n    }\n\n    // ---- Fire attentive event ----\n    if (window.attentive \u0026\u0026 attentive.analytics \u0026\u0026 typeof attentive.analytics.purchase === \"function\") {\n      attentive.analytics.purchase({\n        items: transformedItems,\n        order: {\n          orderId: utag_data.order.id\n        }\n      });\n    }\n  } catch (e) {\n    console.warn(\"[CT] attentive purchase script failed\", e);\n  }\n})();\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"68cc00f3e4f99619b6ef5d2e"},{"uses_overlay":false,"type":"html","parametrized_definition":"\u003cstyle\u003e\n    .internal_linking_container {\n        padding-top: 15px;\n    }\n\n    .il_title {\n        font-size: 1.6rem;\n        font-weight: 600;\n        margin-bottom: 5px;\n    }\n\u003c/style\u003e\n\n\n\u003cscript\u003e\n    $(function() {\n        var internalLinking = {\n\n            internalLinkingMessage: function() {\n\n                var SEF0349TPE_il_product_info = {\n                    id: 'TRT0439TPE',\n                    name: 'Linen Trousers - Taupe',\n                    nameUs: 'Linen Pants - Taupe',\n                    nameDe: 'Leinenhose - Taupe',\n                    nameEu: 'Linen Trousers - Taupe',\n                    nameAu: 'Linen Pants - Taupe',\n                    price: '£120',\n                    usPrice: '$200',\n                    dePrice: '€160',\n                    euPrice: '€160',\n                    auPrice: '$200',\n                    url: 'TRT0439TPE.html?pf=internal_tracking_linen'\n                }\n\n                var TRT0439TPESB_il_product_info = {\n                    id: 'SEF0349TPE',\n                    name: 'Linen Jacket - Taupe',\n                    nameUs: 'Linen Jacket - Taupe',\n                    nameDe: 'Leinen-Sakko - Taupe',\n                    nameEu: 'Linen Jacket - Taupe',\n                    nameAu: 'Linen Jacket - Taupe',\n                    price: '£279',\n                    usPrice: '$449',\n                    dePrice: '€369',\n                    euPrice: '€369',\n                    auPrice: '$499',\n                    url: 'SEF0349TPE.html?pf=internal_tracking_linen'\n                }\n\n\n                var SEF0349RYL_il_product_info = {\n                    id: 'TRT0439RYL',\n                    name: 'Linen Trousers - Royal Blue',\n                    nameUs: 'Linen Pants - Royal Blue',\n                    nameDe: 'Leinenhose - Königsblau',\n                    nameEu: 'Linen Trousers - Royal Blue',\n                    nameAu: 'Linen Pants - Royal Blue',\n                    price: '£120',\n                    usPrice: '$200',\n                    dePrice: '€160',\n                    euPrice: '€160',\n                    auPrice: '$200',\n                    url: 'TRT0439RYL.html?pf=internal_tracking_linen'\n                }\n\n                var TRT0439RYL_il_product_info = {\n                    id: 'SEF0349RYL',\n                    name: 'Linen Jacket - Royal Blue',\n                    nameUs: 'Linen Jacket - Royal Blue',\n                    nameDe: 'Leinen-Sakko - Königsblau',\n                    nameEu: 'Linen Jacket - Royal Blue',\n                    nameAu: 'Linen Jacket - Royal Blue',\n                    price: '£279',\n                    usPrice: '$449',\n                    dePrice: '€369',\n                    euPrice: '€369',\n                    auPrice: '$499',\n                    url: 'SEF0349RYL.html?pf=internal_tracking_linen'\n                }\n\n                //\n                var SEF0349OLV_il_product_info = {\n                    id: 'TRT0439OLV',\n                    name: 'Linen Trousers - Olive Green',\n                    nameUs: 'Linen Pants - Olive Green',\n                    nameDe: 'Leinenhose - Olivgrün',\n                    nameEu: 'Linen Trousers - Olive Green',\n                    nameAu: 'Linen Pants - Olive Green',\n                    price: '£120',\n                    usPrice: '$200',\n                    dePrice: '€160',\n                    euPrice: '€160',\n                    auPrice: '$200',\n                    url: 'TRT0439OLV.html?pf=internal_tracking_linen'\n                }\n\n                var TRT0439OLV_il_product_info = {\n                    id: 'SEF0349OLV',\n                    name: 'Linen Jacket - Olive Green',\n                    nameUs: 'Linen Jacket - Olive Green',\n                    nameDe: 'Leinen-Sakko - Olivgrün',\n                    nameEu: 'Linen Jacket - Olive Green',\n                    nameAu: 'Linen Jacket - Olive Green',\n                    price: '£249.95',\n                    usPrice: '$449',\n                    dePrice: '€349,95',\n                    euPrice: '€349,95',\n                    auPrice: '$499',\n                    url: 'SEF0349OLV.html?pf=internal_tracking_linen'\n                }\n\n                //\n                var SEF0349DNY_il_product_info = {\n                    id: 'TRT0439DNY',\n                    name: 'Linen Trousers - Dark Navy',\n                    nameUs: 'Linen Pants - Dark Navy',\n                    nameDe: 'Leinenhose - Tiefblau',\n                    nameEu: 'Linen Trousers - Dark Navy',\n                    nameAu: 'Linen Pants - Dark Navy',\n                    price: '£120',\n                    usPrice: '$200',\n                    dePrice: '€160',\n                    euPrice: '€160',\n                    auPrice: '$200',\n                    url: 'TRT0439DNY.html?pf=internal_tracking_linen'\n                }\n\n                var TRT0439DNY_il_product_info = {\n                    id: 'SEF0349DNY',\n                    name: 'Linen Jacket - Dark Navy',\n                    nameUs: 'Linen Jacket - Dark Navy',\n                    nameDe: 'Leinen-Sakko - Tiefblau',\n                    nameEu: 'Linen Jacket - Dark Navy',\n                    nameAu: 'Linen Jacket - Dark Navy',\n                    price: '£279.95',\n                    usPrice: '$449',\n                    dePrice: '€349,95',\n                    euPrice: '€349,95',\n                    auPrice: '$499',\n                    url: 'SEF0349DNY.html?pf=internal_tracking_linen'\n                }\n\n                //\n                var SEF0350TPE_il_product_info = {\n                    id: 'TRT0439TPE',\n                    name: 'Linen Trousers - Taupe',\n                    nameUs: 'Linen Pants - Taupe',\n                    nameDe: 'Leinenhose - Taupe',\n                    nameEu: 'Linen Trousers - Taupe',\n                    nameAu: 'Linen Pants - Taupe',\n                    price: '£120',\n                    usPrice: '$200',\n                    dePrice: '€160',\n                    euPrice: '€160',\n                    auPrice: '$200',\n                    url: 'TRT0439TPE.html?pf=internal_tracking_linen'\n                }\n\n                var TRT0439TPE_il_product_info = {\n                    id: 'SEF0350TPE',\n                    name: 'Double Breasted Linen Jacket - Taupe',\n                    nameUs: 'Double Breasted Linen Jacket - Taupe',\n                    nameDe: 'Leinen-Sakko - Taupe',\n                    nameEu: 'Double Breasted Linen Jacket - Taupe',\n                    nameAu: 'Double Breasted Linen Jacket - Taupe',\n                    price: '£279.95',\n                    usPrice: '$449',\n                    dePrice: '€349,95',\n                    euPrice: '€349,95',\n                    auPrice: '$499',\n                    url: 'SEF0350TPE.html?pf=internal_tracking_linen'\n                }\n\n\n                if (utag_data.products[0].id == 'SEF0349TPE') {\n                    var price = '';\n                    var name = '';\n                    var regionalTitle = '';\n                    if (utag_data.global.sfcc_country == 'UK') {\n                        price = SEF0349TPE_il_product_info.price\n                        name = SEF0349TPE_il_product_info.name\n                        regionalTitle = 'Shop the matching Trousers'\n                    } else if (utag_data.global.sfcc_country == 'US') {\n                        price = SEF0349TPE_il_product_info.usPrice\n                        name = SEF0349TPE_il_product_info.nameUs\n                        regionalTitle = 'Shop the matching Pants'\n                    } else if (utag_data.global.sfcc_country == 'DE') {\n                        price = SEF0349TPE_il_product_info.dePrice\n                        name = SEF0349TPE_il_product_info.nameDe\n                        regionalTitle = 'Entdecken Sie die passenden Hosen'\n                    } else if (utag_data.global.sfcc_country == 'EU') {\n                        price = SEF0349TPE_il_product_info.euPrice\n                        name = SEF0349TPE_il_product_info.nameEu\n                        regionalTitle = 'Shop the matching Trousers'\n                    } else if (utag_data.global.sfcc_country == 'AU') {\n                        price = SEF0349TPE_il_product_info.auPrice\n                        name = SEF0349TPE_il_product_info.nameAu\n                        regionalTitle = 'Shop the matching Pants'\n                    }\n\n\n                    var ilMessageJacketHTML =\n                        `\n               \u003cdiv class=\"internal_linking_container\"\u003e\n               \u003cdiv class=\"il_title\"\u003e` + regionalTitle + `\u003c/div\u003e\n               \u003cdiv class=\"il_message\"\u003e\u003ca href=` + SEF0349TPE_il_product_info.url + `\u003e` + name + ` - \u003cstrong\u003e` + price + `\u003c/strong\u003e\u003c/a\u003e\u003c/div\u003e\n               \u003c/div\u003e\n               `\n\n                    var ilJacketMessage = $(ilMessageJacketHTML);\n                    var pdpMainInfo = $('.pdp-main__more-info');\n                    ilJacketMessage.insertBefore(pdpMainInfo);\n\n                }\n\n                if (utag_data.products[0].id == 'TRT0439TPE') {\n                    var price = '';\n                    var name = '';\n                    var regionalTitle = '';\n                    if (utag_data.global.sfcc_country == 'UK') {\n                        price = TRT0439TPESB_il_product_info.price\n                        name = TRT0439TPESB_il_product_info.name\n                        regionalTitle = 'Shop the matching Jacket'\n                    } else if (utag_data.global.sfcc_country == 'US') {\n                        price = TRT0439TPESB_il_product_info.usPrice\n                        name = TRT0439TPESB_il_product_info.nameUs\n                        regionalTitle = 'Shop the matching Jacket'\n                    } else if (utag_data.global.sfcc_country == 'DE') {\n                        price = TRT0439TPESB_il_product_info.dePrice\n                        name = TRT0439TPESB_il_product_info.nameDe\n                        regionalTitle = 'Entdecken Sie die passende Jacke'\n                    } else if (utag_data.global.sfcc_country == 'EU') {\n                        price = TRT0439TPESB_il_product_info.euPrice\n                        name = TRT0439TPESB_il_product_info.nameEu\n                        regionalTitle = 'Shop the matching Jacket'\n                    } else if (utag_data.global.sfcc_country == 'AU') {\n                        price = TRT0439TPESB_il_product_info.auPrice\n                        name = TRT0439TPESB_il_product_info.nameAu\n                        regionalTitle = 'Shop the matching Jacket'\n                    }\n\n                    var ilMessageTrousersHTML =\n                        `\n                    \u003cdiv class=\"internal_linking_container\"\u003e\n                    \u003cdiv class=\"il_title\"\u003e` + regionalTitle + `\u003c/div\u003e\n                    \u003cdiv class=\"il_message\"\u003e\u003ca href=` + TRT0439TPESB_il_product_info.url + `\u003e` + name + ` - \u003cstrong\u003e` + price + `\u003c/strong\u003e\u003c/a\u003e\u003c/div\u003e\n                    \u003c/div\u003e\n                    `\n\n                    var ilTrousersMessage = $(ilMessageTrousersHTML);\n                    var pdpMainInfo = $('.pdp-main__more-info');\n                    ilTrousersMessage.insertBefore(pdpMainInfo);\n\n                }\n\n\n                ///\n                if (utag_data.products[0].id == 'SEF0350TPE') {\n\n                    var price = '';\n                    var name = '';\n                    var regionalTitle = '';\n                    if (utag_data.global.sfcc_country == 'UK') {\n                        price = SEF0350TPE_il_product_info.price\n                        name = SEF0350TPE_il_product_info.name\n                        regionalTitle = 'Shop the matching Trousers'\n                    } else if (utag_data.global.sfcc_country == 'US') {\n                        price = SEF0350TPE_il_product_info.usPrice\n                        name = SEF0350TPE_il_product_info.nameUs\n                        regionalTitle = 'Shop the matching Pants'\n                    } else if (utag_data.global.sfcc_country == 'DE') {\n                        price = SEF0350TPE_il_product_info.dePrice\n                        name = SEF0350TPE_il_product_info.nameDe\n                        regionalTitle = 'Entdecken Sie die passenden Hosen'\n                    } else if (utag_data.global.sfcc_country == 'EU') {\n                        price = SEF0350TPE_il_product_info.euPrice\n                        name = SEF0350TPE_il_product_info.nameEu\n                        regionalTitle = 'Shop the matching Trousers'\n                    } else if (utag_data.global.sfcc_country == 'AU') {\n                        price = SEF0350TPE_il_product_info.auPrice\n                        name = SEF0350TPE_il_product_info.nameAu\n                        regionalTitle = 'Shop the matching Pants'\n                    }\n\n\n                    var ilMessageJacketHTML =\n                        `\n  \u003cdiv class=\"internal_linking_container\"\u003e\n  \u003cdiv class=\"il_title\"\u003e` + regionalTitle + `\u003c/div\u003e\n  \u003cdiv class=\"il_message\"\u003e\u003ca href=` + SEF0350TPE_il_product_info.url + `\u003e` + name + ` - \u003cstrong\u003e` + price + `\u003c/strong\u003e\u003c/a\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  `\n\n                    var ilJacketMessage = $(ilMessageJacketHTML);\n                    var pdpMainInfo = $('.pdp-main__more-info');\n                    ilJacketMessage.insertBefore(pdpMainInfo);\n\n                }\n\n                if (utag_data.products[0].id == 'TRT0439TPE') {\n                    var price = '';\n                    var name = '';\n                    var regionalTitle = '';\n                    if (utag_data.global.sfcc_country == 'UK') {\n                        price = TRT0439TPE_il_product_info.price\n                        name = TRT0439TPE_il_product_info.name\n                        regionalTitle = 'Shop the matching Jacket'\n                    } else if (utag_data.global.sfcc_country == 'US') {\n                        price = TRT0439TPE_il_product_info.usPrice\n                        name = TRT0439TPE_il_product_info.nameUs\n                        regionalTitle = 'Shop the matching Jacket'\n                    } else if (utag_data.global.sfcc_country == 'DE') {\n                        price = TRT0439TPE_il_product_info.dePrice\n                        name = TRT0439TPE_il_product_info.nameDe\n                        regionalTitle = 'Entdecken Sie die passende Jacke'\n                    } else if (utag_data.global.sfcc_country == 'EU') {\n                        price = TRT0439TPE_il_product_info.euPrice\n                        name = TRT0439TPE_il_product_info.nameEu\n                        regionalTitle = 'Shop the matching Jacket'\n                    } else if (utag_data.global.sfcc_country == 'AU') {\n                        price = TRT0439TPE_il_product_info.auPrice\n                        name = TRT0439TPE_il_product_info.nameAu\n                        regionalTitle = 'Shop the matching Jacket'\n                    }\n\n                    var ilMessageTrousersHTML =\n                        `\n  \u003cdiv class=\"internal_linking_container\"\u003e\n  \u003cdiv class=\"il_title\"\u003e` + regionalTitle + `\u003c/div\u003e\n  \u003cdiv class=\"il_message\"\u003e\u003ca href=` + TRT0439TPE_il_product_info.url + `\u003e` + name + ` - \u003cstrong\u003e` + price + `\u003c/strong\u003e\u003c/a\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  `\n\n                    var ilTrousersMessage = $(ilMessageTrousersHTML);\n                    var pdpMainInfo = $('.pdp-main__more-info');\n                    ilTrousersMessage.insertBefore(pdpMainInfo);\n\n                }\n\n\n\n                ///\n\n\n\n                //   if (utag_data.products[0].id == 'SEF0349RYL') {\n\n                //     var price = '';\n                //     var name = '';\n                //     var regionalTitle = '';\n                //     if (utag_data.global.sfcc_country == 'UK') {\n                //       price = SEF0349RYL_il_product_info.price\n                //       name = SEF0349RYL_il_product_info.name\n                //       regionalTitle = 'Shop the matching Trousers'\n                //     }\n                //     else if (utag_data.global.sfcc_country == 'US') {\n                //       price = SEF0349RYL_il_product_info.usPrice\n                //       name = SEF0349RYL_il_product_info.nameUs\n                //       regionalTitle = 'Shop the matching Pants'\n                //     }\n                //     else if (utag_data.global.sfcc_country == 'DE') {\n                //       price = SEF0349RYL_il_product_info.dePrice\n                //       name = SEF0349RYL_il_product_info.nameDe\n                //       regionalTitle = 'Entdecken Sie die passenden Hosen'\n                //     }\n                //     else if (utag_data.global.sfcc_country == 'EU') {\n                //       price = SEF0349RYL_il_product_info.euPrice\n                //       name = SEF0349RYL_il_product_info.nameEu\n                //       regionalTitle = 'Shop the matching Trousers'\n                //     }\n                //     else if (utag_data.global.sfcc_country == 'AU') {\n                //       price = SEF0349RYL_il_product_info.auPrice\n                //       name = SEF0349RYL_il_product_info.nameAu\n                //       regionalTitle = 'Shop the matching Pants'\n                //     }\n\n\n                //     var ilMessageJacketHTML =\n                //       `\n                //             \u003cdiv class=\"internal_linking_container\"\u003e\n                //             \u003cdiv class=\"il_title\"\u003e`+ regionalTitle + `\u003c/div\u003e\n                //             \u003cdiv class=\"il_message\"\u003e\u003ca href=`+ SEF0349RYL_il_product_info.url + `\u003e` + name + ` - \u003cstrong\u003e` + price + `\u003c/strong\u003e\u003c/a\u003e\u003c/div\u003e\n                //             \u003c/div\u003e\n                //             `\n\n                //     var ilJacketMessage = $(ilMessageJacketHTML);\n                //     var pdpMainInfo = $('.pdp-main__more-info');\n                //     ilJacketMessage.insertBefore(pdpMainInfo);\n\n                //   }\n\n                //   if (utag_data.products[0].id == 'TRT0439RYL') {\n                //     var price = '';\n                //     var name = '';\n                //     var regionalTitle = '';\n                //     if (utag_data.global.sfcc_country == 'UK') {\n                //       price = TRT0439RYL_il_product_info.price\n                //       name = TRT0439RYL_il_product_info.name\n                //       regionalTitle = 'Shop the matching Jacket'\n                //     }\n                //     else if (utag_data.global.sfcc_country == 'US') {\n                //       price = TRT0439RYL_il_product_info.usPrice\n                //       name = TRT0439RYL_il_product_info.nameUs\n                //       regionalTitle = 'Shop the matching Jacket'\n                //     }\n                //     else if (utag_data.global.sfcc_country == 'DE') {\n                //       price = TRT0439RYL_il_product_info.dePrice\n                //       name = TRT0439RYL_il_product_info.nameDe\n                //       regionalTitle = 'Entdecken Sie die passende Jacke'\n                //     }\n                //     else if (utag_data.global.sfcc_country == 'EU') {\n                //       price = TRT0439RYL_il_product_info.euPrice\n                //       name = TRT0439RYL_il_product_info.nameEu\n                //       regionalTitle = 'Shop the matching Jacket'\n                //     }\n                //     else if (utag_data.global.sfcc_country == 'AU') {\n                //       price = TRT0439RYL_il_product_info.auPrice\n                //       name = TRT0439RYL_il_product_info.nameAu\n                //       regionalTitle = 'Shop the matching Jacket'\n                //     }\n\n                //     var ilMessageTrousersHTML =\n                //       `\n                //             \u003cdiv class=\"internal_linking_container\"\u003e\n                //             \u003cdiv class=\"il_title\"\u003e`+ regionalTitle + `\u003c/div\u003e\n                //             \u003cdiv class=\"il_message\"\u003e\u003ca href=`+ TRT0439RYL_il_product_info.url + `\u003e` + name + ` - \u003cstrong\u003e` + price + `\u003c/strong\u003e\u003c/a\u003e\u003c/div\u003e\n                //             \u003c/div\u003e\n                //             `\n\n                //     var ilTrousersMessage = $(ilMessageTrousersHTML);\n                //     var pdpMainInfo = $('.pdp-main__more-info');\n                //     ilTrousersMessage.insertBefore(pdpMainInfo);\n\n                //   }\n\n                //           if (utag_data.products[0].id == 'SEF0349OLV') {\n\n                //             var price = '';\n                //             var name = '';\n                //             var regionalTitle = '';\n                //             if (utag_data.global.sfcc_country == 'UK') {\n                //               price = SEF0349OLV_il_product_info.price\n                //               name = SEF0349OLV_il_product_info.name\n                //               regionalTitle = 'Shop the matching Trousers'\n                //             }\n                //             else if (utag_data.global.sfcc_country == 'US') {\n                //               price = SEF0349OLV_il_product_info.usPrice\n                //               name = SEF0349OLV_il_product_info.nameUs\n                //               regionalTitle = 'Shop the matching Pants'\n                //             }\n                //             else if (utag_data.global.sfcc_country == 'DE') {\n                //               price = SEF0349OLV_il_product_info.dePrice\n                //               name = SEF0349OLV_il_product_info.nameDe\n                //               regionalTitle = 'Entdecken Sie die passenden Hosen'\n                //             }\n                //             else if (utag_data.global.sfcc_country == 'EU') {\n                //               price = SEF0349OLV_il_product_info.euPrice\n                //               name = SEF0349OLV_il_product_info.nameEu\n                //               regionalTitle = 'Shop the matching Trousers'\n                //             }\n                //             else if (utag_data.global.sfcc_country == 'AU') {\n                //               price = SEF0349OLV_il_product_info.auPrice\n                //               name = SEF0349OLV_il_product_info.nameAu\n                //               regionalTitle = 'Shop the matching Pants'\n                //             }\n\n\n                //             var ilMessageJacketHTML =\n                //               `\n                //   \u003cdiv class=\"internal_linking_container\"\u003e\n                //   \u003cdiv class=\"il_title\"\u003e`+ regionalTitle + `\u003c/div\u003e\n                //   \u003cdiv class=\"il_message\"\u003e\u003ca href=`+ SEF0349OLV_il_product_info.url + `\u003e` + name + ` - \u003cstrong\u003e` + price + `\u003c/strong\u003e\u003c/a\u003e\u003c/div\u003e\n                //   \u003c/div\u003e\n                //   `\n\n                //             var ilJacketMessage = $(ilMessageJacketHTML);\n                //             var pdpMainInfo = $('.pdp-main__more-info');\n                //             ilJacketMessage.insertBefore(pdpMainInfo);\n\n                //           }\n\n                //           if (utag_data.products[0].id == 'TRT0439OLV') {\n                //             var price = '';\n                //             var name = '';\n                //             var regionalTitle = '';\n                //             if (utag_data.global.sfcc_country == 'UK') {\n                //               price = TRT0439OLV_il_product_info.price\n                //               name = TRT0439OLV_il_product_info.name\n                //               regionalTitle = 'Shop the matching Jacket'\n                //             }\n                //             else if (utag_data.global.sfcc_country == 'US') {\n                //               price = TRT0439OLV_il_product_info.usPrice\n                //               name = TRT0439OLV_il_product_info.nameUs\n                //               regionalTitle = 'Shop the matching Jacket'\n                //             }\n                //             else if (utag_data.global.sfcc_country == 'DE') {\n                //               price = TRT0439OLV_il_product_info.dePrice\n                //               name = TRT0439OLV_il_product_info.nameDe\n                //               regionalTitle = 'Entdecken Sie die passende Jacke'\n                //             }\n                //             else if (utag_data.global.sfcc_country == 'EU') {\n                //               price = TRT0439OLV_il_product_info.euPrice\n                //               name = TRT0439OLV_il_product_info.nameEu\n                //               regionalTitle = 'Shop the matching Jacket'\n                //             }\n                //             else if (utag_data.global.sfcc_country == 'AU') {\n                //               price = TRT0439OLV_il_product_info.auPrice\n                //               name = TRT0439OLV_il_product_info.nameAu\n                //               regionalTitle = 'Shop the matching Jacket'\n                //             }\n\n                //             var ilMessageTrousersHTML =\n                //               `\n                //   \u003cdiv class=\"internal_linking_container\"\u003e\n                //   \u003cdiv class=\"il_title\"\u003e`+ regionalTitle + `\u003c/div\u003e\n                //   \u003cdiv class=\"il_message\"\u003e\u003ca href=`+ TRT0439OLV_il_product_info.url + `\u003e` + name + ` - \u003cstrong\u003e` + price + `\u003c/strong\u003e\u003c/a\u003e\u003c/div\u003e\n                //   \u003c/div\u003e\n                //   `\n\n                //             var ilTrousersMessage = $(ilMessageTrousersHTML);\n                //             var pdpMainInfo = $('.pdp-main__more-info');\n                //             ilTrousersMessage.insertBefore(pdpMainInfo);\n\n                //           }\n\n\n                if (utag_data.products[0].id == 'SEF0349DNY') {\n\n                    var price = '';\n                    var name = '';\n                    var regionalTitle = '';\n                    if (utag_data.global.sfcc_country == 'UK') {\n                        price = SEF0349DNY_il_product_info.price\n                        name = SEF0349DNY_il_product_info.name\n                        regionalTitle = 'Shop the matching Trousers'\n                    } else if (utag_data.global.sfcc_country == 'US') {\n                        price = SEF0349DNY_il_product_info.usPrice\n                        name = SEF0349DNY_il_product_info.nameUs\n                        regionalTitle = 'Shop the matching Pants'\n                    } else if (utag_data.global.sfcc_country == 'DE') {\n                        price = SEF0349DNY_il_product_info.dePrice\n                        name = SEF0349DNY_il_product_info.nameDe\n                        regionalTitle = 'Entdecken Sie die passenden Hosen'\n                    } else if (utag_data.global.sfcc_country == 'EU') {\n                        price = SEF0349DNY_il_product_info.euPrice\n                        name = SEF0349DNY_il_product_info.nameEu\n                        regionalTitle = 'Shop the matching Trousers'\n                    } else if (utag_data.global.sfcc_country == 'AU') {\n                        price = SEF0349DNY_il_product_info.auPrice\n                        name = SEF0349DNY_il_product_info.nameAu\n                        regionalTitle = 'Shop the matching Pants'\n                    }\n\n\n                    var ilMessageJacketHTML =\n                        `\n  \u003cdiv class=\"internal_linking_container\"\u003e\n  \u003cdiv class=\"il_title\"\u003e` + regionalTitle + `\u003c/div\u003e\n  \u003cdiv class=\"il_message\"\u003e\u003ca href=` + SEF0349DNY_il_product_info.url + `\u003e` + name + ` - \u003cstrong\u003e` + price + `\u003c/strong\u003e\u003c/a\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  `\n\n                    var ilJacketMessage = $(ilMessageJacketHTML);\n                    var pdpMainInfo = $('.pdp-main__more-info');\n                    ilJacketMessage.insertBefore(pdpMainInfo);\n\n                }\n\n                if (utag_data.products[0].id == 'TRT0439DNY') {\n                    var price = '';\n                    var name = '';\n                    var regionalTitle = '';\n                    if (utag_data.global.sfcc_country == 'UK') {\n                        price = TRT0439DNY_il_product_info.price\n                        name = TRT0439DNY_il_product_info.name\n                        regionalTitle = 'Shop the matching Jacket'\n                    } else if (utag_data.global.sfcc_country == 'US') {\n                        price = TRT0439DNY_il_product_info.usPrice\n                        name = TRT0439DNY_il_product_info.nameUs\n                        regionalTitle = 'Shop the matching Jacket'\n                    } else if (utag_data.global.sfcc_country == 'DE') {\n                        price = TRT0439DNY_il_product_info.dePrice\n                        name = TRT0439DNY_il_product_info.nameDe\n                        regionalTitle = 'Entdecken Sie die passende Jacke'\n                    } else if (utag_data.global.sfcc_country == 'EU') {\n                        price = TRT0439DNY_il_product_info.euPrice\n                        name = TRT0439DNY_il_product_info.nameEu\n                        regionalTitle = 'Shop the matching Jacket'\n                    } else if (utag_data.global.sfcc_country == 'AU') {\n                        price = TRT0439DNY_il_product_info.auPrice\n                        name = TRT0439DNY_il_product_info.nameAu\n                        regionalTitle = 'Shop the matching Jacket'\n                    }\n\n                    var ilMessageTrousersHTML =\n                        `\n  \u003cdiv class=\"internal_linking_container\"\u003e\n  \u003cdiv class=\"il_title\"\u003e` + regionalTitle + `\u003c/div\u003e\n  \u003cdiv class=\"il_message\"\u003e\u003ca href=` + TRT0439DNY_il_product_info.url + `\u003e` + name + ` - \u003cstrong\u003e` + price + `\u003c/strong\u003e\u003c/a\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  `\n\n                    var ilTrousersMessage = $(ilMessageTrousersHTML);\n                    var pdpMainInfo = $('.pdp-main__more-info');\n                    ilTrousersMessage.insertBefore(pdpMainInfo);\n\n                }\n\n                //    if(utag_data.products[0].id == 'SEU0220FRG') {\n\n                //        var price = '';\n                //        var name = '';\n                //        var regionalTitle = '';\n\n                //        if (utag_data.global.sfcc_country == 'UK') {\n                //            price = SEU0220FRG_il_product_info.price\n                //            name = SEU0220FRG_il_product_info.name\n                //            regionalTitle = 'Shop the matching Trousers'\n                //        }\n                //        else if (utag_data.global.sfcc_country == 'US') {\n                //            price = SEU0220FRG_il_product_info.usPrice\n                //            name = SEU0220FRG_il_product_info.nameUs\n                //            regionalTitle = 'Shop the matching Pants'\n                //        }\n                //        else if (utag_data.global.sfcc_country == 'DE') {\n                //            price = SEU0220FRG_il_product_info.dePrice\n                //            name = SEU0220FRG_il_product_info.nameDe\n                //            regionalTitle = 'Entdecken Sie die passenden Hosen'\n                //        }\n                //        else if (utag_data.global.sfcc_country == 'EU') {\n                //            price = SEU0220FRG_il_product_info.euPrice\n                //            name = SEU0220FRG_il_product_info.nameEu\n                //            regionalTitle = 'Shop the matching Trousers'\n                //        }\n                //        else if (utag_data.global.sfcc_country == 'AU') {\n                //         price = SEU0220FRG_il_product_info.auPrice\n                //         name = SEU0220FRG_il_product_info.nameAu\n                //         regionalTitle = 'Shop the matching Pants'\n                //        }\n\n\n                //        var ilMessageJacketHTML =\n                //        `\n                //            \u003cdiv class=\"internal_linking_container\"\u003e\n                //            \u003cdiv class=\"il_title\"\u003e`+ regionalTitle +`\u003c/div\u003e\n                //            \u003cdiv class=\"il_message\"\u003e\u003ca href=`+ SEU0220FRG_il_product_info.url +`\u003e`+ name +` - \u003cstrong\u003e`+ price +`\u003c/strong\u003e\u003c/a\u003e\u003c/div\u003e\n                //            \u003c/div\u003e\n                //        `\n\n                //     var ilJacketMessage = $(ilMessageJacketHTML);\n                //     var pdpMainInfo = $('.pdp-main__more-info');\n                //     ilJacketMessage.insertBefore(pdpMainInfo);\n\n                // }\n\n                //    if(utag_data.products[0].id == 'TRT0430FRG') {\n\n                //        var price = '';\n                //        var name = '';\n                //        var regionalTitle = '';\n                //        if (utag_data.global.sfcc_country == 'UK') {\n                //           price = TRT0430FRG_il_product_info.price\n                //           name = TRT0430FRG_il_product_info.name\n                //           regionalTitle = 'Shop the matching Jacket'\n                //        }\n                //        else if (utag_data.global.sfcc_country == 'US') {\n                //           price = TRT0430FRG_il_product_info.usPrice\n                //           name = TRT0430FRG_il_product_info.nameUs\n                //           regionalTitle = 'Shop the matching Jacket'\n                //        }\n                //        else if (utag_data.global.sfcc_country == 'DE') {\n                //            price = TRT0430FRG_il_product_info.dePrice\n                //            name = TRT0430FRG_il_product_info.nameDe\n                //            regionalTitle = 'Entdecken Sie die passende Jacke'\n                //        }\n                //        else if (utag_data.global.sfcc_country == 'EU') {\n                //            price = TRT0430FRG_il_product_info.euPrice\n                //            name = TRT0430FRG_il_product_info.nameEu\n                //            regionalTitle = 'Shop the matching Jacket'\n                //        }\n                //        else if (utag_data.global.sfcc_country == 'AU') {\n                //         price = TRT0430FRG_il_product_info.auPrice\n                //         name = TRT0430FRG_il_product_info.nameAu\n                //         regionalTitle = 'Shop the matching Jacket'\n                //        }\n\n                //    var ilMessageTrousersHTML =\n                //    `\n                //    \u003cdiv class=\"internal_linking_container\"\u003e\n                //    \u003cdiv class=\"il_title\"\u003e`+ regionalTitle +`\u003c/div\u003e\n                //    \u003cdiv class=\"il_message\"\u003e\u003ca href=`+ TRT0430FRG_il_product_info.url +`\u003e`+ name +` - \u003cstrong\u003e`+ price +`\u003c/strong\u003e\u003c/a\u003e\u003c/div\u003e\n                //    \u003c/div\u003e\n                //    `\n\n                //    var ilTrousersMessage = $(ilMessageTrousersHTML);\n                //    var pdpMainInfo = $('.pdp-main__more-info');\n                //    ilTrousersMessage.insertBefore(pdpMainInfo);\n\n                //    }\n\n                //    if(utag_data.products[0].id == 'SEU0220NAV') {\n\n                //        var price = '';\n                //        var name = '';\n                //        var regionalTitle = '';\n                //        if (utag_data.global.sfcc_country == 'UK') {\n                //            price = SEU0220NAV_il_product_info.price\n                //            name = SEU0220NAV_il_product_info.name\n                //            regionalTitle = 'Shop the matching Trousers'\n                //        }\n                //        else if (utag_data.global.sfcc_country == 'US') {\n                //            price = SEU0220NAV_il_product_info.usPrice\n                //            name = SEU0220NAV_il_product_info.nameUs\n                //            regionalTitle = 'Shop the matching Pants'\n                //        }\n                //        else if (utag_data.global.sfcc_country == 'DE') {\n                //            price = SEU0220NAV_il_product_info.dePrice\n                //            name = SEU0220NAV_il_product_info.nameDe\n                //            regionalTitle = 'Entdecken Sie die passenden Hosen'\n                //        }\n                //        else if (utag_data.global.sfcc_country == 'EU') {\n                //            price = SEU0220NAV_il_product_info.euPrice\n                //            name = SEU0220NAV_il_product_info.nameEu\n                //            regionalTitle = 'Shop the matching Trousers'\n                //        }\n                //        else if (utag_data.global.sfcc_country == 'AU') {\n                //         price = SEU0220NAV_il_product_info.auPrice\n                //         name = SEU0220NAV_il_product_info.nameAu\n                //         regionalTitle = 'Shop the matching Pants'\n                //        }\n\n\n                //        var ilMessageJacketHTML =\n                //        `\n                //        \u003cdiv class=\"internal_linking_container\"\u003e\n                //        \u003cdiv class=\"il_title\"\u003e`+ regionalTitle +`\u003c/div\u003e\n                //        \u003cdiv class=\"il_message\"\u003e\u003ca href=`+ SEU0220NAV_il_product_info.url +`\u003e`+ name +` - \u003cstrong\u003e`+ price +`\u003c/strong\u003e\u003c/a\u003e\u003c/div\u003e\n                //        \u003c/div\u003e\n                //        `\n\n                //        var ilJacketMessage = $(ilMessageJacketHTML);\n                //        var pdpMainInfo = $('.pdp-main__more-info');\n                //        ilJacketMessage.insertBefore(pdpMainInfo);\n\n                //    }\n\n                //    if(utag_data.products[0].id == 'TRT0430DNY') {\n\n                //        var price = '';\n                //        var name = '';\n                //        var regionalTitle = '';\n                //        if (utag_data.global.sfcc_country == 'UK') {\n                //           price = TRT0430DNY_il_product_info.price\n                //           name = TRT0430DNY_il_product_info.name\n                //           regionalTitle = 'Shop the matching Jacket'\n                //        }\n                //        else if (utag_data.global.sfcc_country == 'US') {\n                //           price = TRT0430DNY_il_product_info.usPrice\n                //           name = TRT0430DNY_il_product_info.nameUs\n                //           regionalTitle = 'Shop the matching Jacket'\n                //        }\n                //        else if (utag_data.global.sfcc_country == 'DE') {\n                //         price = TRT0430DNY_il_product_info.dePrice\n                //         name = TRT0430DNY_il_product_info.nameDe\n                //         regionalTitle = 'Entdecken Sie die passende Jacke'\n                //        }\n                //        else if (utag_data.global.sfcc_country == 'EU') {\n                //            price = TRT0430DNY_il_product_info.euPrice\n                //            name = TRT0430DNY_il_product_info.nameEu\n                //            regionalTitle = 'Shop the matching Jacket'\n                //        }\n                //        else if (utag_data.global.sfcc_country == 'AU') {\n                //         price = TRT0430DNY_il_product_info.auPrice\n                //         name = TRT0430DNY_il_product_info.nameAu\n                //         regionalTitle = 'Shop the matching Jacket'\n                //        }\n\n                //    var ilMessageTrousersHTML =\n                //    `\n                //    \u003cdiv class=\"internal_linking_container\"\u003e\n                //    \u003cdiv class=\"il_title\"\u003e`+ regionalTitle +`\u003c/div\u003e\n                //    \u003cdiv class=\"il_message\"\u003e\u003ca href=`+ TRT0430DNY_il_product_info.url +`\u003e`+ name +` - \u003cstrong\u003e`+ price +`\u003c/strong\u003e\u003c/a\u003e\u003c/div\u003e\n                //    \u003c/div\u003e\n                //    `\n\n                //    var ilTrousersMessage = $(ilMessageTrousersHTML);\n                //    var pdpMainInfo = $('.pdp-main__more-info');\n                //    ilTrousersMessage.insertBefore(pdpMainInfo);\n\n                //    }\n            }\n        }\n\nif(utag_data.page.type == 'product'){\n\tif(utag_data.global.sfcc_country == 'UK' || utag_data.global.sfcc_country == 'US' || utag_data.global.sfcc_country == 'DE' || utag_data.global.sfcc_country == 'EU' || utag_data.global.sfcc_country == 'AU'){\n\t\t    internalLinking.internalLinkingMessage();\n\t}\n}\n\n});\n\n\n  \n\u003c/script\u003e","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"68cc18fdfbf6ffb814948944"},{"uses_overlay":false,"type":"js","parametrized_definition":"(() =\u003e {\n  try {\n    const SELECTOR = '.pt_product-search-noresult';\n    const EVENT_NAME = 'engagement.failedSearchRecs';\n\n    const isSearchPage =\n      window.utag_data \u0026\u0026\n      window.utag_data.page \u0026\u0026\n      window.utag_data.page.type \u0026\u0026\n      window.utag_data.page.type.toLowerCase() === 'search';\n\n    if (!isSearchPage) {\n      console.log(`[DBG] Not a search page (utag_data.page.type != 'search') — exiting`);\n      return;\n    }\n\n    const pushEvent = () =\u003e {\n      try {\n        window.dataLayer = window.dataLayer || [];\n        window.dataLayer.push({ event: EVENT_NAME });\n        console.log(`[DBG] Pushed ${EVENT_NAME} to dataLayer`);\n      } catch (err) {\n        console.error('[ERR] Failed to push event:', err);\n      }\n    };\n\n    const checkAndPush = () =\u003e {\n      const el = document.querySelector(SELECTOR);\n      if (el) {\n        console.log(`[DBG] ${SELECTOR} found – triggering ${EVENT_NAME}`);\n        pushEvent();\n        return true;\n      }\n      return false;\n    };\n\n    // Initial check\n    if (checkAndPush()) return;\n\n    // Observe DOM for delayed renders\n    const observer = new MutationObserver(() =\u003e {\n      if (checkAndPush()) observer.disconnect();\n    });\n\n    observer.observe(document.body, { childList: true, subtree: true });\n    console.log(`[DBG] Watching for ${SELECTOR} on search page to trigger ${EVENT_NAME}`);\n  } catch (err) {\n    console.error('[ERR] Failed search trigger script error:', err);\n  }\n})();\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"68e6391e41160b86f0aeca81"},{"uses_overlay":false,"type":"js","parametrized_definition":"(() =\u003e {\n  try {\n    if (!window.utag_data || !utag_data.global) return;\n    if (utag_data.global.sfcc_country !== \"DE\") return;\n\n    const STYLE_ID = \"ct-trustbadge-style\";\n    document.getElementById(STYLE_ID)?.remove();\n\n    const isPDP = String(utag_data?.page?.type || \"\").includes(\"product\");\n    const trustBadgeZ = isPDP ? 5 : 1;\n\n    const css = `\n      [id^=\"trustbadge-container-\"] {\n        z-index: ${trustBadgeZ} !important;\n      }\n\n      /* Keep PLP filters above trustbadge on desktop */\n      @media only screen and (min-width: 1024px) {\n        .filtering-wrapper {\n          z-index: 2 !important;\n        }\n      }\n    `;\n\n    const style = document.createElement(\"style\");\n    style.id = STYLE_ID;\n    style.textContent = css.trim();\n    document.head.appendChild(style);\n\n    console.log(\n      \"[CT Style Inject] Trustbadge z-index applied\",\n      isPDP ? \"(PDP = 5)\" : \"(PLP = 1)\"\n    );\n  } catch (err) {\n    console.error(\"[CT Style Inject] Error:\", err);\n  }\n})();\n","trigger":{"include_pages":[{"url":"/de/","type":"contains"}],"exclude_pages":null},"_id":"68f0b39f7e7d419964cc6a7f"},{"uses_overlay":false,"type":"js","parametrized_definition":"(() =\u003e {\n  document.addEventListener(\"click\", e =\u003e {\n    const link = e.target.closest('a[class^=\"navigationLink-\"]');\n    if (!link) return;\n\n\n    const sub = (link.textContent || \"\").trim();\n\n    const top = link\n      .closest(\".navigation__li--main, .navigation-li-container\")\n      ?.querySelector(\".navigation__li-link--has-sub\")\n      ?.textContent.trim() || \"unknown\";\n\n    const val = `top nav|${top}|${sub}`;\n\n    console.log(\"Sending eVar10:\", val);\n\n    if (window.s) {\n      s.eVar10 = val;\n      s.linkTrackVars = \"eVar10\";\n      s.tl(true, \"o\", val);\n    }\n  });\n})();\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"69170d1d606537e7c64e31f0"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function () {\r\n  \"use strict\";\r\n  \r\n  var UI_CONFIG = {\r\n  ENABLE_HOMEPAGE: false,\r\n  ENABLE_PLP: false,\r\n  ENABLE_PDP: false,\r\n  ENABLE_BASKET: true\r\n};\r\n\r\n  /* ========================================================================== *\r\n   *  MULTIBUY: Banner + Slideout + Recs + Price Formatting (PLP \u0026 PDP)\r\n   * ========================================================================== */\r\n\r\n  /* ========================== Debug Logger ========================== */\r\n  var TAG = \"[MB Debug]\";\r\n  function dbg() {\r\n    try { console.debug.apply(console, [TAG].concat([].slice.call(arguments))); } catch (e) {}\r\n  }\r\n\r\n  /* ====================== Data Layer / Page Flags =================== */\r\n  var utag_data_safe = window.utag_data || {};\r\n  var utag_page = utag_data_safe.page || {};\r\n  var utag_global = utag_data_safe.global || {};\r\n  var utag_prods = Array.isArray(utag_data_safe.products) ? utag_data_safe.products : [];\r\n\r\n  var PAGE_TYPE = String(utag_page.type || \"\").toLowerCase();\r\n\tvar IS_HOMEPAGE = PAGE_TYPE === \"homepage\";\r\n\tvar IS_PLP = PAGE_TYPE === \"category\";\r\n\tvar IS_PDP = PAGE_TYPE === \"product\";\r\n\tvar IS_BASKET = PAGE_TYPE === \"basket\";\r\n\tvar IS_MOBILE = utag_page.responsive_design_type === \"Mobile View\";\r\n\r\n  /* =============================== State =========================== */\r\n  var MB_INIT_DONE = false;\r\n  var RECHECK_TIMER = null;\r\n  var BASKET_OBSERVER = null;\r\n  var SYNC_DEBOUNCE = null;\r\n  var PRICE_OBSERVED = new WeakSet();\r\n  var KEYDOWN_BOUND = false;\r\n\r\n  /* =============================== Consts ========================== */\r\n  var RECO_CONTAINER_ID = \"popup-recommendations\";\r\n  var RECOMMENDATION_ID = \"69baa78568e692b40d7c836a\";\r\n\r\n  /* ======================= Site / Locale Helpers =================== */\r\n  var COUNTRY = (String(utag_global.sfcc_country || utag_global.country || \"\") || \"\").toUpperCase();\r\n  var SITE_LANG = utag_global.site_language || \"en_GB\";\r\n\r\n  function getLocaleSlug(langStr) {\r\n    if (!langStr) return \"en_GB\";\r\n    return String(langStr).replace(\"-\", \"_\");\r\n  }\r\n\r\n  function getSiteId(ctCountry) {\r\n    var map = {\r\n      UK: \"CTShirts-UK-Site\",\r\n      US: \"CTShirts-US-Site\",\r\n      DE: \"CTShirts-DE-Site\",\r\n      EU: \"CTShirts-EU-Site\",\r\n      FR: \"CTShirts-FR-Site\",\r\n      AU: \"CTShirts-AU-Site\",\r\n      NL: \"CTShirts-NL-Site\",\r\n      CH: \"CTShirts-CH-Site\",\r\n      CA: \"CTShirts-CA-Site\"\r\n    };\r\n    return map[ctCountry] || \"CTShirts-UK-Site\";\r\n  }\r\n  \r\n  function isSurfaceEnabled() {\r\n  if (IS_HOMEPAGE) return !!UI_CONFIG.ENABLE_HOMEPAGE;\r\n  if (IS_PLP) return !!UI_CONFIG.ENABLE_PLP;\r\n  if (IS_PDP) return !!UI_CONFIG.ENABLE_PDP;\r\n  if (IS_BASKET) return !!UI_CONFIG.ENABLE_BASKET;\r\n  return false;\r\n}\r\n\r\nfunction getLang() {\r\n  var lang = String(utag_global.site_language || SITE_LANG || \"\").toUpperCase();\r\n  if (lang.indexOf(\"DE\") \u003e -1) return \"DE\";\r\n  if (lang.indexOf(\"FR\") \u003e -1) return \"FR\";\r\n  return \"EN\";\r\n}\r\n\r\nvar LANG = getLang();\r\n\r\nvar COPY = {\r\n  EN: {\r\n    banner: 'Save Even More - \u003cspan class=\"bold m-sides-xs\"\u003eUp to 50% Off\u003c/span\u003e - \u003cspan class=\"underline m-sides-xs\"\u003eAdd now\u003c/span\u003e',\r\n    now: \"Now\",\r\n    was: \"was\",\r\n    noRecs: \"No recommendations available!\"\r\n  },\r\n  DE: {\r\n    banner: 'Noch mehr sparen - \u003cspan class=\"bold m-sides-xs\"\u003eBis zu 50 % Rabatt\u003c/span\u003e - \u003cspan class=\"underline m-sides-xs\"\u003eJetzt\u003c/span\u003e',\r\n    now: \"Jetzt\",\r\n    was: \"war\",\r\n    noRecs: \"Keine Empfehlungen verfügbar!\"\r\n  },\r\n  FR: {\r\n    banner: 'Économisez encore plus - \u003cspan class=\"bold m-sides-xs\"\u003eJusqu’à -50 %\u003c/span\u003e - \u003cspan class=\"underline m-sides-xs\"\u003eVoir l’offre\u003c/span\u003e',\r\n    now: \"\", // often omitted in FR\r\n    was: \"au lieu de\",\r\n    noRecs: \"Aucune recommandation disponible !\"\r\n  }\r\n};\r\n  \r\n  function getMultibuySlideoutCopy() {\r\n  var lang = String(utag_global.site_language || SITE_LANG || \"\").toUpperCase();\r\n\r\n  if (lang.indexOf(\"DE\") \u003e -1) {\r\n    return {\r\n      heading: \"Bis zu 50 % Rabatt\",\r\n      subheading: \"Sparen Sie mehr mit unseren beliebten Hemden.\"\r\n    };\r\n  }\r\n\r\n  if (lang.indexOf(\"FR\") \u003e -1) {\r\n    return {\r\n      heading: \"Jusqu’à 50 % de réduction\",\r\n      subheading: \"Faites encore plus d’économies avec nos chemises populaires.\"\r\n    };\r\n  }\r\n\r\n  return {\r\n    heading: \"Up to 50% Off\",\r\n    subheading: \"Save more with our popular shirts.\"\r\n  };\r\n}\r\n\r\nvar MB_SLIDEOUT_COPY = getMultibuySlideoutCopy();\r\n\r\n  function buildFrontEndProductUrl(item) {\r\n    if (!item) return \"#\";\r\n\r\n    var pid = item.id || item.item_id;\r\n    if (!pid) return \"#\";\r\n\r\n    var global = window.utag_data \u0026\u0026 window.utag_data.global ? window.utag_data.global : {};\r\n    var country = String(global.sfcc_country || COUNTRY || \"UK\").toLowerCase();\r\n    var siteLanguage = String(global.site_language || SITE_LANG || \"\").trim();\r\n\r\n    var pathParts = (window.location.pathname || \"\").split(\"/\").filter(Boolean);\r\n\r\n    var prefix = \"/\" + encodeURIComponent(country);\r\n\r\n    if (\r\n      pathParts.length \u003e= 2 \u0026\u0026\r\n      pathParts[0].toLowerCase() === country \u0026\u0026\r\n      siteLanguage \u0026\u0026\r\n      pathParts[1].toLowerCase() === siteLanguage.toLowerCase()\r\n    ) {\r\n      prefix += \"/\" + encodeURIComponent(siteLanguage);\r\n    }\r\n\r\n    return window.location.origin + prefix + \"/\" + encodeURIComponent(pid) + \".html?pf=5th_shirt_pop\";\r\n  }\r\n\r\n  var localeSlug = getLocaleSlug(SITE_LANG);\r\n  var siteId = getSiteId(COUNTRY || \"UK\");\r\n\r\n  /* =============================== Utils =========================== */\r\n  function escapeHtml(str) {\r\n    return String(str || \"\")\r\n      .replace(/\u0026/g, \"\u0026amp;\")\r\n      .replace(/\u003c/g, \"\u0026lt;\")\r\n      .replace(/\u003e/g, \"\u0026gt;\")\r\n      .replace(/\"/g, \"\u0026quot;\")\r\n      .replace(/'/g, \"\u0026#039;\");\r\n  }\r\n\r\n  function closest(el, selector) {\r\n    while (el \u0026\u0026 el.nodeType === 1) {\r\n      if (el.matches \u0026\u0026 el.matches(selector)) return el;\r\n      el = el.parentNode;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  function normaliseImageV2(src) {\r\n    if (!src) return \"\";\r\n    var params = \"?sw=860\u0026sh=1080\u0026sm=fit\u0026q=55\";\r\n    var base = String(src).split(\"?\")[0];\r\n    if (/\\/dw\\/image\\/v2\\//.test(base)) return base + params;\r\n    if (/^https?:\\/\\//i.test(base)) {\r\n      try { base = new URL(base).pathname; }\r\n      catch (e) { base = base.replace(/^https?:\\/\\/[^/]+/, \"\"); }\r\n    }\r\n    if (base.indexOf(\"/on/demandware.static/\") === 0 || base.indexOf(\"/demandware.static/\") === 0) {\r\n      return \"https://www.charlestyrwhitt.com/dw/image/v2/AAWJ_PRD\" + base + params;\r\n    }\r\n    return base + params;\r\n  }\r\n\r\n  function cleanProductTitle(raw) {\r\n    var t = String(raw || \"\").trim();\r\n    if (!t) return \"\";\r\n\r\n    t = t.replace(/^(men’s|men's|mens)\\s+/i, \"\").trim();\r\n    t = t.replace(/^(women’s|women's|womens)\\s+/i, \"\").trim();\r\n    t = t.replace(/\\bPants\\b/gi, \"Trousers\");\r\n    t = t.replace(/charles\\s+tyrwhitt/ig, \"\").trim();\r\n\r\n    var sizeIdx = t.toLowerCase().indexOf(\" size\");\r\n    if (sizeIdx !== -1) {\r\n      t = t.slice(0, sizeIdx).trim();\r\n    }\r\n\r\n    t = t\r\n      .replace(/\\bSingle\\s+Cuff\\b/ig, \"\")\r\n      .replace(/\\bPure\\b/ig, \"\")\r\n      .replace(/\\s{2,}/g, \" \")\r\n      .replace(/\\s+[-–—]\\s*$/g, \"\")\r\n      .trim();\r\n\r\n    return t;\r\n  }\r\n  \r\n function injectPagingbarOverride() {\r\n  if (document.getElementById(\"mb-pagingbar-override\")) return;\r\n\r\n  var css =\r\n    \"@media (min-width: 1024px) and (hover: hover), \" +\r\n    \"(min-width: 1024px) and (-ms-high-contrast:active), \" +\r\n    \"(min-width: 1024px) and (-ms-high-contrast:none) {\" +\r\n      \".pagingbar-top {\" +\r\n        \"top: 11rem !important;\" +\r\n      \"}\" +\r\n    \"}\";\r\n\r\n  var style = document.createElement(\"style\");\r\n  style.id = \"mb-pagingbar-override\";\r\n  style.appendChild(document.createTextNode(css));\r\n  document.head.appendChild(style);\r\n}\r\n\r\nfunction removePagingbarOverride() {\r\n  var el = document.getElementById(\"mb-pagingbar-override\");\r\n  if (el \u0026\u0026 el.parentNode) el.parentNode.removeChild(el);\r\n}\r\n\r\n  function formatCollarType(raw) {\r\n    var t = String(raw || \"\").trim();\r\n    if (!t) return \"\";\r\n    return t\r\n      .replace(/[_-]+/g, \" \")\r\n      .replace(/\\s+/g, \" \")\r\n      .replace(/\\b\\w/g, function (m) { return m.toUpperCase(); });\r\n  }\r\n\r\n  function normalizeMoney(val) {\r\n    var v = String(val || \"\").trim();\r\n    if (!v) return \"\";\r\n    return v.replace(/\\s+/g, \"\").replace(/,/g, \"\").replace(/[^\\d.]/g, \"\").trim();\r\n  }\r\n\r\n  function parseMoneyNumber(val) {\r\n    var n = normalizeMoney(val);\r\n    return n ? parseFloat(n) : NaN;\r\n  }\r\n\r\n  function hasRealDiscount(was, now) {\r\n    var wasNum = parseMoneyNumber(was);\r\n    var nowNum = parseMoneyNumber(now);\r\n\r\n    if (!Number.isNaN(wasNum) \u0026\u0026 !Number.isNaN(nowNum)) {\r\n      return wasNum \u003e nowNum;\r\n    }\r\n\r\n    return !!was \u0026\u0026 !!now \u0026\u0026 String(was).trim() !== String(now).trim();\r\n  }\r\n\r\n  function parseMoney(text) {\r\n    if (!text) return null;\r\n    var m = String(text).replace(/\\s+/g, \" \").match(/([£$€])\\s*([\\d]+(?:[.,]\\d{1,2})?)/);\r\n    if (!m) return null;\r\n    var symbol = m[1];\r\n    var displayNum = m[2];\r\n    return { symbol: symbol, display: symbol + displayNum, value: displayNum.replace(\",\", \".\") };\r\n  }\r\n\r\n  function getVisNode(el) {\r\n    return el \u0026\u0026 (el.querySelector('[aria-hidden=\"true\"]') || el);\r\n  }\r\n\r\n  function removeRecoTile(tileEl) {\r\n    try {\r\n      if (tileEl \u0026\u0026 tileEl.parentNode) tileEl.parentNode.removeChild(tileEl);\r\n    } catch (e) {}\r\n  }\r\n\r\n  function watchRecoTileImage(imgEl, tileEl, onRemoved) {\r\n    if (!imgEl || !tileEl) return;\r\n\r\n    var src = (imgEl.getAttribute(\"src\") || \"\").trim();\r\n    if (!src) return;\r\n\r\n    var settled = false;\r\n\r\n    function removeTile() {\r\n      if (settled) return;\r\n      settled = true;\r\n      removeRecoTile(tileEl);\r\n      if (typeof onRemoved === \"function\") onRemoved();\r\n    }\r\n\r\n    function handleLoad() {\r\n      if (settled) return;\r\n\r\n      if (imgEl.naturalWidth \u003e 0 \u0026\u0026 imgEl.naturalHeight \u003e 0) {\r\n        settled = true;\r\n        tileEl.setAttribute(\"data-ct-image-ok\", \"true\");\r\n      } else {\r\n        removeTile();\r\n      }\r\n    }\r\n\r\n    function handleError() {\r\n      removeTile();\r\n    }\r\n\r\n    imgEl.addEventListener(\"load\", handleLoad, { once: true });\r\n    imgEl.addEventListener(\"error\", handleError, { once: true });\r\n\r\n    if (imgEl.complete) {\r\n      if (imgEl.naturalWidth \u003e 0 \u0026\u0026 imgEl.naturalHeight \u003e 0) {\r\n        settled = true;\r\n        tileEl.setAttribute(\"data-ct-image-ok\", \"true\");\r\n      } else {\r\n        removeTile();\r\n      }\r\n    }\r\n  }\r\n\r\n  function bindRecoHoverImageSwap(tileEl, imgEl, primarySrc, hoverSrc) {\r\n    if (!tileEl || !imgEl || !primarySrc || !hoverSrc) return;\r\n    if (IS_MOBILE) return;\r\n    if (tileEl.getAttribute(\"data-ct-hover-swap-bound\") === \"true\") return;\r\n\r\n    tileEl.setAttribute(\"data-ct-hover-swap-bound\", \"true\");\r\n\r\n    var preloaded = false;\r\n    var preloadImg = new Image();\r\n\r\n    function ensurePreloaded() {\r\n      if (preloaded) return;\r\n      preloadImg.src = hoverSrc;\r\n      preloaded = true;\r\n    }\r\n\r\n    function swapToHover() {\r\n      ensurePreloaded();\r\n      imgEl.src = hoverSrc;\r\n    }\r\n\r\n    function swapToPrimary() {\r\n      imgEl.src = primarySrc;\r\n    }\r\n\r\n    tileEl.addEventListener(\"mouseenter\", swapToHover);\r\n    tileEl.addEventListener(\"mouseleave\", swapToPrimary);\r\n    tileEl.addEventListener(\"focusin\", swapToHover);\r\n    tileEl.addEventListener(\"focusout\", swapToPrimary);\r\n  }\r\n\r\n  /* ==================== Rich Reco Tile Endpoint Cache ==================== */\r\n  var CT_RECO_PRODUCT_DATA = (function () {\r\n    var cache = new Map();\r\n    var inflight = new Map();\r\n    var queue = [];\r\n    var active = 0;\r\n\r\n    var MAX_CONCURRENCY = 4;\r\n    var TIMEOUT_MS = 8000;\r\n    var RETRIES = 1;\r\n\r\n    function buildUrl(prodId) {\r\n      return (\r\n        \"/on/demandware.store/Sites-\" +\r\n        siteId +\r\n        \"/\" +\r\n        localeSlug +\r\n        \"/Product-getProductTileData?productids=\" +\r\n        encodeURIComponent(prodId)\r\n      );\r\n    }\r\n\r\n    function ajaxText(url) {\r\n      if (window.jQuery \u0026\u0026 window.jQuery.ajax) {\r\n        return new Promise(function (resolve, reject) {\r\n          var done = false;\r\n          var timer = setTimeout(function () {\r\n            if (done) return;\r\n            done = true;\r\n            reject(new Error(\"timeout\"));\r\n          }, TIMEOUT_MS);\r\n\r\n          window.jQuery\r\n            .ajax({ url: url, method: \"GET\", dataType: \"text\" })\r\n            .done(function (txt) {\r\n              if (done) return;\r\n              done = true;\r\n              clearTimeout(timer);\r\n              resolve(txt);\r\n            })\r\n            .fail(function (xhr, status, err) {\r\n              if (done) return;\r\n              done = true;\r\n              clearTimeout(timer);\r\n              reject(new Error(status || err || \"ajax_fail\"));\r\n            });\r\n        });\r\n      }\r\n\r\n      return fetch(url, { credentials: \"include\" }).then(function (r) {\r\n        return r.text();\r\n      });\r\n    }\r\n\r\n    function fetchOne(prodId, attempt) {\r\n      attempt = attempt || 0;\r\n      var url = buildUrl(prodId);\r\n\r\n      return ajaxText(url)\r\n        .then(function (txt) {\r\n          var json = null;\r\n\r\n          try {\r\n            json = JSON.parse(txt);\r\n          } catch (e) {\r\n            if (attempt \u003c RETRIES) return fetchOne(prodId, attempt + 1);\r\n            return null;\r\n          }\r\n\r\n          if (!Array.isArray(json) || !json.length) return null;\r\n\r\n          var obj = null;\r\n          for (var i = 0; i \u003c json.length; i++) {\r\n            if (json[i] \u0026\u0026 String(json[i].productid).toUpperCase() === String(prodId).toUpperCase()) {\r\n              obj = json[i];\r\n              break;\r\n            }\r\n          }\r\n          if (!obj) obj = json[0];\r\n          if (!obj) return null;\r\n\r\n          return {\r\n            id: String(obj.productid || prodId).toUpperCase(),\r\n            name: String(obj.productname || \"\"),\r\n            collarType: String(obj.collarType || \"\"),\r\n            image0: String(obj.productimage0 || \"\"),\r\n            image1: String(obj.productimage1 || \"\"),\r\n            was: String(obj.wasprice || \"\"),\r\n            now: String(obj.nowprice || \"\"),\r\n            mbuy: String(obj.multibuyPrice || \"\")\r\n          };\r\n        })\r\n        .catch(function () {\r\n          if (attempt \u003c RETRIES) return fetchOne(prodId, attempt + 1);\r\n          return null;\r\n        });\r\n    }\r\n\r\n    function pump() {\r\n      while (active \u003c MAX_CONCURRENCY \u0026\u0026 queue.length) {\r\n        (function () {\r\n          var job = queue.shift();\r\n          active++;\r\n\r\n          fetchOne(job.id)\r\n            .then(function (res) {\r\n              if (res) cache.set(job.id, res);\r\n              job.resolve(res);\r\n            })\r\n            .catch(function () {\r\n              job.resolve(null);\r\n            })\r\n            .finally(function () {\r\n              active--;\r\n              pump();\r\n            });\r\n        })();\r\n      }\r\n    }\r\n\r\n    function get(prodId) {\r\n      if (!prodId) return Promise.resolve(null);\r\n\r\n      var id = String(prodId).toUpperCase();\r\n\r\n      if (cache.has(id)) return Promise.resolve(cache.get(id));\r\n      if (inflight.has(id)) return inflight.get(id);\r\n\r\n      var p = new Promise(function (resolve) {\r\n        queue.push({ id: id, resolve: resolve });\r\n        pump();\r\n      }).finally(function () {\r\n        inflight.delete(id);\r\n      });\r\n\r\n      inflight.set(id, p);\r\n      return p;\r\n    }\r\n\r\n    return { get: get };\r\n  })();\r\n\r\n  function applyEndpointDataToRecoTile(prodId, tileEl, onTileChange) {\r\n    if (!prodId || !tileEl) return Promise.resolve(false);\r\n\r\n    tileEl.setAttribute(\"data-ct-hydrating\", \"true\");\r\n\r\n    return CT_RECO_PRODUCT_DATA.get(prodId).then(function (p) {\r\n      if (!p) {\r\n        removeRecoTile(tileEl);\r\n        if (typeof onTileChange === \"function\") onTileChange();\r\n        return false;\r\n      }\r\n\r\n      var cleanTitle = cleanProductTitle(p.name || prodId);\r\n      var primaryImg = String(p.image0 || \"\").trim();\r\n      var hoverImg = String(p.image1 || \"\").trim();\r\n\r\n      if (!primaryImg) {\r\n        removeRecoTile(tileEl);\r\n        if (typeof onTileChange === \"function\") onTileChange();\r\n        return false;\r\n      }\r\n\r\n      var titleEl = tileEl.querySelector(\"[data-ct-title]\");\r\n      if (titleEl) titleEl.textContent = cleanTitle;\r\n\r\n      var linkEls = tileEl.querySelectorAll(\"a[href]\");\r\n      for (var l = 0; l \u003c linkEls.length; l++) {\r\n        linkEls[l].setAttribute(\"title\", cleanTitle);\r\n      }\r\n\r\n      var collarWrap = tileEl.querySelector(\"[data-ct-collar-wrap]\");\r\n      if (collarWrap) {\r\n        var rawCollar = String(p.collarType || \"\").trim().toLowerCase();\r\n        var excluded = [\"polo\", \"button_neck\", \"button neck\", \"trophy_neck\"];\r\n        var isExcluded = excluded.some(function (val) {\r\n          return rawCollar.indexOf(val) \u003e -1;\r\n        });\r\n\r\n        var collarEl = collarWrap.querySelector(\".product-tile__collar-label\");\r\n\r\n        if (isExcluded) {\r\n          collarWrap.classList.remove(\"ct-reco-has-collar\");\r\n          if (collarEl \u0026\u0026 collarEl.parentNode) collarEl.parentNode.removeChild(collarEl);\r\n        } else {\r\n          var collarText = formatCollarType(p.collarType);\r\n\r\n          if (collarText) {\r\n            if (!collarEl) {\r\n              collarEl = document.createElement(\"div\");\r\n              collarEl.className = \"bg-grey5 grey1 p m-all-z text-center capitalize product-tile__collar-label position-absolute col-100\";\r\n              collarWrap.appendChild(collarEl);\r\n            }\r\n            collarEl.textContent = collarText;\r\n            collarWrap.classList.add(\"ct-reco-has-collar\");\r\n          } else {\r\n            collarWrap.classList.remove(\"ct-reco-has-collar\");\r\n            if (collarEl \u0026\u0026 collarEl.parentNode) collarEl.parentNode.removeChild(collarEl);\r\n          }\r\n        }\r\n      }\r\n\r\n            var pricingWrap = tileEl.querySelector(\"[data-ct-price]\");\r\n      if (pricingWrap) {\r\n        var was = String(p.was || \"\").trim();\r\n        var now = String(p.now || \"\").trim();\r\n        var mbValue = String(p.mbuy || \"\").trim();\r\n\r\n        var nowNum = parseMoneyNumber(now);\r\n        var mbNum = parseMoneyNumber(mbValue);\r\n        var wasNum = parseMoneyNumber(was);\r\n\r\n        // ONLY show multibuy format if multibuy is genuinely cheaper than now\r\n        if (\r\n          mbValue \u0026\u0026\r\n          now \u0026\u0026\r\n          !Number.isNaN(nowNum) \u0026\u0026\r\n          !Number.isNaN(mbNum) \u0026\u0026\r\n          mbNum \u003c nowNum\r\n        ) {\r\n          pricingWrap.innerHTML =\r\n            '\u003cspan class=\"ct-reco-price-was\"\u003e' + escapeHtml(now) + '\u003c/span\u003e' +\r\n            '\u003cspan class=\"ct-reco-price-now red1\"\u003eNow ' + escapeHtml(mbValue) + \"\u003c/span\u003e\";\r\n        }\r\n\r\n        // Standard discount only if was is genuinely higher than now\r\n        else if (\r\n          now \u0026\u0026\r\n          was \u0026\u0026\r\n          !Number.isNaN(wasNum) \u0026\u0026\r\n          !Number.isNaN(nowNum) \u0026\u0026\r\n          wasNum \u003e nowNum\r\n        ) {\r\n          pricingWrap.innerHTML =\r\n            '\u003cspan class=\"ct-reco-price-was\"\u003e' + escapeHtml(was) + '\u003c/span\u003e' +\r\n            '\u003cspan class=\"ct-reco-price-now red1\"\u003eNow ' + escapeHtml(now) + \"\u003c/span\u003e\";\r\n        }\r\n\r\n        // Otherwise just show now\r\n        else if (now) {\r\n          pricingWrap.innerHTML =\r\n            '\u003cspan class=\"ct-reco-price-now\"\u003e' + escapeHtml(now) + \"\u003c/span\u003e\";\r\n        } else {\r\n          pricingWrap.innerHTML = \"\";\r\n        }\r\n      }\r\n\r\n      var mbEl = tileEl.querySelector(\"[data-ct-mb]\");\r\n      if (mbEl) {\r\n        mbEl.remove();\r\n      }\r\n\r\n      var imgEl = tileEl.querySelector(\"img[data-ct-img]\");\r\n      if (!imgEl) {\r\n        removeRecoTile(tileEl);\r\n        if (typeof onTileChange === \"function\") onTileChange();\r\n        return false;\r\n      }\r\n\r\n      imgEl.alt = cleanTitle;\r\n      imgEl.src = primaryImg;\r\n      imgEl.setAttribute(\"data-ct-primary-img\", primaryImg);\r\n\r\n      if (hoverImg) {\r\n        imgEl.setAttribute(\"data-ct-hover-img\", hoverImg);\r\n        bindRecoHoverImageSwap(tileEl, imgEl, primaryImg, hoverImg);\r\n      }\r\n\r\n      watchRecoTileImage(imgEl, tileEl, onTileChange);\r\n\r\n      tileEl.setAttribute(\"data-ct-hydrating\", \"false\");\r\n      tileEl.setAttribute(\"data-ct-endpoint-ready\", \"true\");\r\n\r\n      return true;\r\n    }).catch(function () {\r\n      removeRecoTile(tileEl);\r\n      if (typeof onTileChange === \"function\") onTileChange();\r\n      return false;\r\n    });\r\n  }\r\n\r\n  /* ========================= Threshold Checks ====================== */\r\n  function getMiniQty() {\r\n    var el = document.querySelector(\".minicart__quantity, .header__minicart-count, .js-minicart-quantity\");\r\n    var n = el ? parseInt((el.textContent || \"\").replace(/\\D+/g, \"\"), 10) || 0 : 0;\r\n    return n;\r\n  }\r\n\r\nvar SHIRT_MULTIBUY_THRESHOLD = 4;\r\n\r\nfunction isS101Promo(promo) {\r\n  if (!promo) return false;\r\n\r\n  if (typeof promo === \"string\") {\r\n    return promo.indexOf(\"S101\") \u003e -1;\r\n  }\r\n\r\n  if (Array.isArray(promo)) {\r\n    return promo.some(function (x) {\r\n      return String(x).indexOf(\"S101\") \u003e -1;\r\n    });\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\nfunction getQualifyingMultibuyCount() {\r\n  var bag = Array.isArray(utag_data_safe.bag) ? utag_data_safe.bag : [];\r\n  var count = 0;\r\n\r\n  for (var i = 0; i \u003c bag.length; i++) {\r\n    var item = bag[i] || {};\r\n    var qty = Number(item.quantity) || 0;\r\n\r\n    if (isS101Promo(item.promotion_active)) {\r\n      count += qty;\r\n    }\r\n  }\r\n\r\n  return count;\r\n}\r\n\r\nfunction hasAchievedMultibuy() {\r\n  return getQualifyingMultibuyCount() \u003e= SHIRT_MULTIBUY_THRESHOLD;\r\n}\r\n\r\n  /* ========================== Eligibility Gates ==================== */\r\n  function dlContainsShirts() {\r\n    var cat = String(utag_page.category || utag_page.department || \"\");\r\n    var re = /(shirt|hemd|chemise|camicia|camisa)/i;\r\n    return re.test(cat);\r\n  }\r\nfunction isMultibuyUiActive() {\r\n  return isSurfaceEnabled() \u0026\u0026 hasAchievedMultibuy();\r\n}\r\n\r\nfunction dlProductEligibleS101() {\r\n  var p0 = utag_prods[0] || {};\r\n  return isS101Promo(p0.eligible_promotion);\r\n}\r\n\r\n function priceChangeAllowed() {\r\n  var active = isMultibuyUiActive();\r\n  return active \u0026\u0026 ((IS_PLP \u0026\u0026 dlContainsShirts()) || (IS_PDP \u0026\u0026 dlProductEligibleS101()));\r\n}\r\n\r\n  /* ============================ Styles ============================= */\r\n  function injectStyles() {\r\n    if (document.getElementById(\"mb-slideout-styles\")) return;\r\n\r\n    var css = \"\"\r\n      + \".mb-banner{background-color:#1e6a60;color:#fff;padding:0.6rem 1rem;font-size:1.4rem;font-family:Futura !important;width:100%;position:sticky;top:0;z-index:3;display:flex;align-items:center;justify-content:center;cursor:pointer;background-image:linear-gradient(90deg,#1e6a60 0%,#2d8a7d 50%,#1e6a60 100%);background-size:200% 100%;animation:mbshimmer 4s linear infinite;}\"\r\n      + \".mb-banner svg{width:24px;height:24px;margin-right:8px;flex:0 0 auto;display:block;overflow:visible;}\"\r\n      + \".mb-banner .bold{font-weight:700;}.mb-banner .underline{text-decoration:underline;}\"\r\n      + \"@keyframes mbshimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}\"\r\n      + \"html.mb-no-scroll,body.mb-no-scroll{overflow:hidden;height:100%;}\"\r\n      + \".custom-slideout-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(186,186,186,0.75);z-index:9998;display:none;}\"\r\n      + \".custom-slideout-overlay.show{display:block;}\"\r\n      + \".custom-slideout{position:fixed;background:#fff;box-shadow:-2px 0 8px rgba(0,0,0,.2);z-index:9999;display:flex;flex-direction:column;transition:transform .6s cubic-bezier(0.34,1.56,0.64,1);}\"\r\n      + (IS_MOBILE\r\n        ? \".custom-slideout{left:0;right:0;bottom:0;height:95%;transform:translateY(100%);border-top-left-radius:8px;border-top-right-radius:8px;}\"\r\n        : \".custom-slideout{top:0;right:0;height:100%;width:700px;transform:translateX(100%);}@media (max-width:1200px){.custom-slideout{width:40vw;}}@media (max-width:768px){.custom-slideout{width:100%;}}\")\r\n      + (IS_MOBILE ? \".custom-slideout.open{transform:translateY(0);}\" : \".custom-slideout.open{transform:translateX(0);}\")\r\n      + \".custom-slideout-header{background:#fff;height:0px;display:flex;align-items:center;position:relative;padding:0 20px;border-top-left-radius:8px;border-top-right-radius:8px;font-weight:600;}\"\r\n      + \".custom-slideout-header .title{font-size:3.2rem;color:#373737;position:absolute;left:20px;top:18px;}\"\r\n      + \".custom-slideout-close{position:absolute;right:15px;top:15px;width:32px;height:32px;background:transparent url(https://www.charlestyrwhitt.com/on/demandware.static/Sites-CTShirts-UK-Site/-/en_GB/v1754633077563/images/svg-icons/cross.svg) center no-repeat;background-size:18px;border:none;cursor:pointer;}\"\r\n      + \"#\" + RECO_CONTAINER_ID + \"{flex:1;overflow-y:auto;padding:16px;}\"\r\n      + \".reco-row{font-size:0;}\"\r\n      + \".reco-tile{display:inline-block;vertical-align:top;width:33.333%;padding:0 0.2rem 24px;box-sizing:border-box;}\"\r\n      + \"@media (max-width:1200px){.reco-tile{width:50%;}}@media (max-width:768px){.reco-tile{width:50%;}}\"\r\n      + \".savings-pill{display:inline-block;background:#116a60;color:#fff;font-size:13px;margin-top:5px;padding:4px 8px;font-weight:600;border-radius:6px;white-space:nowrap;opacity:0;transform:translateY(-5px);transition:opacity .4s ease,transform .4s ease;}\"\r\n      + \".savings-pill.show{opacity:1;transform:translateY(0);}\"\r\n      + \".reco-tile .product-tile__img-link{display:block;}\"\r\n      + \".reco-tile img{width:100%;display:block;background:#fff;object-fit:cover;}\"\r\n      + \".reco-tile .js-product-tile-name{font-family:Futura,sans-serif;font-size:1.6rem;color:#373737;margin:5px 0 2px;line-height:1.2;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}\"\r\n      + \".reco-tile .tile__pricing{font-family:Futura,sans-serif;font-size:1.6rem;line-height:1.2;color:#373737;}\"\r\n      + \".reco-tile .product-tile__promo{font-family:Futura,sans-serif;font-size:1.4rem;line-height:1.2;margin-top:4px;}\"\r\n      + \".ct-reco-price-was{text-decoration:line-through;opacity:.7;margin-right:.4rem;color:#8a8a8a;}\"\r\n      + \".ct-reco-price-now{font-weight:600;color:#373737;}\"\r\n      + \".product-tile__collar-label{line-height:normal;font-size:1.2rem;padding:.3rem;border-radius:0 0 .5rem .5rem;z-index:1;bottom:-2.2rem;left:0;}\"\r\n      + \".reco-tile [data-ct-collar-wrap]{position:relative;display:block;}\"\r\n      + \".reco-tile .product-tile__collar-label{position:absolute;width:100%;}\"\r\n      + \".reco-tile [data-ct-collar-wrap].ct-reco-has-collar + .js-tile-info-wrapper\";\r\n\r\n    var style = document.createElement(\"style\");\r\n    style.id = \"mb-slideout-styles\";\r\n    style.appendChild(document.createTextNode(css));\r\n    document.head.appendChild(style);\r\n  }\r\n\r\n  function ensureBanner() {\r\n    if (document.querySelector(\".mb-banner\")) return;\r\n    var banner = document.createElement(\"div\");\r\n    banner.className = \"mb-banner\";\r\n    var svg = '' +\r\n      '\u003csvg width=\"24\" height=\"25\" viewBox=\"0 0 24 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"\u003e' +\r\n      '\u003cg clip-path=\"url(#clip0_3002_3927)\"\u003e' +\r\n      '\u003cpath d=\"M22.3649 17.0517H21.6149C21.7499 11.8467 20.2499 8.54668 19.6949 7.70668C19.3349 7.21168 17.3624 6.60418 16.0799 6.34168L15.8549 6.28918L15.3749 4.54168C14.2937 4.0782 13.123 3.86047 11.9474 3.90418C10.7646 3.86086 9.5867 4.07851 8.49744 4.54168L8.02494 6.27418L7.79994 6.32668C6.50994 6.58918 4.53744 7.19668 4.18494 7.69168C3.70494 8.37418 2.37744 11.8617 2.37744 17.0292H1.62744C1.62744 11.7792 2.96244 8.12668 3.56994 7.27918C4.17744 6.43168 6.56994 5.84668 7.42494 5.65168L7.85994 4.06168L7.97994 3.98668C9.20405 3.37545 10.5663 3.09369 11.9324 3.16918C13.3013 3.08992 14.6669 3.37184 15.8924 3.98668L16.0199 4.06168L16.4549 5.65168C17.3324 5.84668 19.7174 6.44668 20.3024 7.27918C20.8874 8.11168 22.5374 11.6667 22.3649 17.0517Z\" fill=\"white\"/\u003e' +\r\n      '\u003cpath d=\"M15 10.8717L14.6625 10.2117C14.01 8.9517 12.75 7.1667 12 7.1667V6.4167C12.0375 6.4167 15.1875 6.1617 15.3525 4.2717L16.1025 4.3317C15.96 5.9667 14.385 6.6642 13.245 6.9642C13.9438 7.61614 14.5338 8.37575 14.9925 9.2142C15.2588 8.37374 15.4816 7.52011 15.66 6.6567L15.825 5.9067L16.5 6.0417L16.3275 6.7917C16.1206 7.96636 15.7809 9.11371 15.315 10.2117L15 10.8717Z\" fill=\"white\"/\u003e' +\r\n      '\u003cpath d=\"M12.0001 8.54669C12.2776 8.54669 12.5026 8.32171 12.5026 8.04419C12.5026 7.76666 12.2776 7.54169 12.0001 7.54169C11.7225 7.54169 11.4976 7.76666 11.4976 8.04419C11.4976 8.32171 11.7225 8.54669 12.0001 8.54669Z\" fill=\"white\"/\u003e' +\r\n      '\u003cpath d=\"M12.5025 11.5467C12.78 11.5467 13.005 11.3217 13.005 11.0442C13.005 10.7667 12.78 10.5417 12.5025 10.5417C12.225 10.5417 12 10.7667 12 11.0442C12 11.3217 12.225 11.5467 12.5025 11.5467Z\" fill=\"white\"/\u003e' +\r\n      '\u003cpath d=\"M12.5025 14.0442C12.78 14.0442 13.005 13.8192 13.005 13.5417C13.005 13.2642 12.78 13.0392 12.5025 13.0392C12.225 13.0392 12 13.2642 12 13.5417C12 13.8192 12.225 14.0442 12.5025 14.0442Z\" fill=\"white\"/\u003e' +\r\n      '\u003cpath d=\"M12.335 15.0417C12.52 15.0417 12.67 14.8917 12.67 14.7067C12.67 14.5217 12.52 14.3717 12.335 14.3717C12.15 14.3717 12 14.5217 12 14.7067C12 14.8917 12.15 15.0417 12.335 15.0417Z\" fill=\"white\"/\u003e' +\r\n      '\u003cpath d=\"M12.335 16.7117C12.52 16.7117 12.67 16.5617 12.67 16.3767C12.67 16.1917 12.52 16.0417 12.335 16.0417C12.15 16.0417 12 16.1917 12 16.3767C12 16.5617 12.15 16.7117 12.335 16.7117Z\" fill=\"white\"/\u003e' +\r\n      '\u003cpath d=\"M4.62744 19.0092C4.68361 18.0036 4.79628 17.0021 4.96494 16.0092C5.11494 15.0192 5.29494 14.0217 5.49744 13.0092C5.54244 14.0217 5.54994 15.0267 5.53494 16.0092C5.53641 17.0115 5.48132 18.0131 5.36994 19.0092H4.62744Z\" fill=\"white\"/\u003e' +\r\n      '\u003cpath d=\"M18.6299 19.0692C18.5185 18.0731 18.4634 17.0715 18.4649 16.0692C18.4649 15.0642 18.4649 14.0592 18.5024 13.0692C18.7049 14.0592 18.8849 15.0567 19.0349 16.0692C19.2035 17.0621 19.3162 18.0636 19.3724 19.0692H18.6299Z\" fill=\"white\"/\u003e' +\r\n      '\u003cpath d=\"M9.00006 10.8867L8.66256 10.2117C8.19007 9.15245 7.83058 8.04633 7.59006 6.91169L7.37256 6.04169L8.12256 5.84669L8.34756 6.70169C8.55452 7.5342 8.80486 8.35532 9.09756 9.16169C9.5494 8.32282 10.1345 7.56292 10.8301 6.91169C9.68256 6.61919 8.10006 5.92169 7.86756 4.30919L8.61756 4.20419C8.82756 6.16919 12.0001 6.41669 12.0001 6.41669V7.16669C11.1976 7.16669 9.96006 8.94419 9.33756 10.2042L9.00006 10.8867Z\" fill=\"white\"/\u003e' +\r\n      '\u003cpath d=\"M12.0001 9.9192C11.114 9.9061 10.2374 9.73334 9.4126 9.4092L9.6901 8.7117C10.4265 9.00129 11.2089 9.15625 12.0001 9.1692C12.7879 9.14788 13.5665 8.99319 14.3026 8.7117L14.5651 9.4167C13.7434 9.72364 12.8769 9.89341 12.0001 9.9192Z\" fill=\"white\"/\u003e' +\r\n      '\u003cpath d=\"M11.3774 9.4317H10.6274V20.0367H11.3774V9.4317Z\" fill=\"white\"/\u003e' +\r\n      \"\u003c/g\u003e\" +\r\n      '\u003cdefs\u003e\u003cclipPath id=\"clip0_3002_3927\"\u003e\u003crect width=\"24\" height=\"24\" fill=\"white\" transform=\"translate(0 0.041687)\"/\u003e\u003c/clipPath\u003e\u003c/defs\u003e' +\r\n      \"\u003c/svg\u003e\";\r\n    var text = COPY[LANG].banner;\r\n    banner.innerHTML = svg + text;\r\n    (document.querySelector(\"#header\") || document.body).appendChild(banner);\r\n  }\r\n\r\n  function removeBanner() {\r\n    var b = document.querySelector(\".mb-banner\");\r\n    if (b \u0026\u0026 b.parentNode) b.parentNode.removeChild(b);\r\n  }\r\n\r\n\r\n  /* ========================= Slideout / Recs ======================= */\r\n  function renderRecommendationTile(item) {\r\n    var extraClasses = IS_BASKET ? \" \" : \"\";\r\n    var url = buildFrontEndProductUrl(item);\r\n    var pid = item.id || item.item_id || \"\";\r\n\r\n    return (\r\n      '\u003cdiv class=\"reco-tile position-relative plp-grid__container--tile m-bottom-xl\" data-prod-id=\"' + escapeHtml(pid) + '\"\u003e' +\r\n        '\u003cdiv class=\"position-relative product-tile js-product-tile-container js-product-tile' + extraClasses + '\" data-prod-id=\"' + escapeHtml(pid) + '\" data-tagg-processed=\"true\"\u003e' +\r\n          '\u003cdiv class=\"product-tile__img text-center position-relative\" data-ct-collar-wrap\u003e' +\r\n            '\u003ca class=\"thumb-link js-thumb-link js-product-tile-image product-tile__img-link d-block keyboard-focus-outline\" href=\"' + escapeHtml(url) + '\"\u003e' +\r\n              '\u003cpicture class=\"d-block bg-white\" style=\"aspect-ratio:430/538;\"\u003e' +\r\n                '\u003cimg data-ct-img alt=\"\" style=\"aspect-ratio:430/538;\"\u003e' +\r\n              '\u003c/picture\u003e' +\r\n            '\u003c/a\u003e' +\r\n          '\u003c/div\u003e' +\r\n          '\u003cdiv class=\"js-tile-info-wrapper text-left product-tile__info-wrapper\"\u003e' +\r\n            '\u003cdiv class=\"js-tile-info product-tile__info bg-white overflow-hidden position-relative\"\u003e' +\r\n              '\u003cdiv\u003e' +\r\n                '\u003ca class=\"js-thumb-link outline-offset-1 product-tile__name-link h4 h4__regular grey1 d-block js-product-tile-name p-top-s\" href=\"' + escapeHtml(url) + '\"\u003e' +\r\n                  '\u003cspan class=\"js-thumb-name font__secondary\" data-ct-title\u003e\u003c/span\u003e' +\r\n                '\u003c/a\u003e' +\r\n              '\u003c/div\u003e' +\r\n              '\u003cdiv\u003e' +\r\n                '\u003cdiv class=\"h5\"\u003e' +\r\n                  '\u003cdiv class=\"js-tile-pricing tile__pricing text-left grey1 font__secondary m-top-xs normal\" data-ct-price\u003e\u003c/div\u003e' +\r\n                '\u003c/div\u003e' +\r\n                '\u003cp class=\"product-tile__promo h5 capitalize grey2 m-top-xs font__secondary\" data-ct-mb\u003e' +\r\n                  '\u003cspan aria-hidden=\"true\"\u003e\u003c/span\u003e' +\r\n                  '\u003cspan class=\"accessibility-hidden\"\u003e\u003c/span\u003e' +\r\n                '\u003c/p\u003e' +\r\n              '\u003c/div\u003e' +\r\n            '\u003c/div\u003e' +\r\n          '\u003c/div\u003e' +\r\n        '\u003c/div\u003e' +\r\n      '\u003c/div\u003e'\r\n    );\r\n  }\r\n\r\n  function onRecommendationsLoaded(data) {\r\n    try {\r\n      var container = document.getElementById(RECO_CONTAINER_ID);\r\n      if (!container) return;\r\n\r\n      if (Array.isArray(data) \u0026\u0026 data.length) {\r\n        var out = ['\u003cdiv class=\"reco-row\"\u003e'];\r\n        for (var i = 0; i \u003c data.length; i++) out.push(renderRecommendationTile(data[i]));\r\n        out.push(\"\u003c/div\u003e\");\r\n        container.innerHTML = out.join(\"\");\r\n\r\n        var tiles = container.querySelectorAll(\".reco-tile[data-prod-id]\");\r\n\r\n        function refreshEmptyState() {\r\n          var row = container.querySelector(\".reco-row\");\r\n          if (!row) return;\r\n\r\n          var liveTiles = row.querySelectorAll(\".reco-tile[data-prod-id]\");\r\n          if (!liveTiles.length) {\r\n            container.innerHTML = '\u003cdiv class=\"reco-row\"\u003eNo recommendations available!\u003c/div\u003e';\r\n          }\r\n        }\r\n\r\n        Array.prototype.forEach.call(tiles, function (tile) {\r\n          var pid = tile.getAttribute(\"data-prod-id\");\r\n          if (pid) applyEndpointDataToRecoTile(pid, tile, refreshEmptyState);\r\n        });\r\n      } else {\r\n        container.innerHTML = '\u003cdiv class=\"reco-row\"\u003eNo recommendations available!\u003c/div\u003e';\r\n      }\r\n\r\n      if (priceChangeAllowed()) applyPlpFormattingEverywhere();\r\n      else revertPlpFormattingEverywhere();\r\n    } catch (e) {\r\n      console.error(TAG, \"onRecommendationsLoaded error:\", e);\r\n    }\r\n  }\r\n\r\n  function openSlideout() {\r\n    var overlay = document.querySelector(\".custom-slideout-overlay\");\r\n    if (!overlay) {\r\n      overlay = document.createElement(\"div\");\r\n      overlay.className = \"custom-slideout-overlay\";\r\n      document.body.appendChild(overlay);\r\n      overlay.addEventListener(\"click\", closeSlideout);\r\n    }\r\n\r\n    var slideout = document.querySelector(\".custom-slideout\");\r\n    if (!slideout) {\r\n      slideout = document.createElement(\"div\");\r\n      slideout.className = \"custom-slideout\";\r\n     slideout.innerHTML =\r\n  '\u003cdiv class=\"custom-slideout-header\"\u003e' +\r\n    '\u003cbutton class=\"custom-slideout-close\" aria-label=\"Close\"\u003e\u003c/button\u003e' +\r\n  '\u003c/div\u003e' +\r\n\r\n  '\u003cdiv class=\"p-ends-m p-sides-m col-100 text-left overflow-hidden\"\u003e' +\r\n    '\u003cp id=\"ct-for-you-heading\" class=\"m-ends-m col-100 grey1 p-sides-z font__secondary medium\" style=\"display:flex;align-items:center;gap:.6rem;\"\u003e' +\r\n      escapeHtml(MB_SLIDEOUT_COPY.heading) +\r\n    '\u003c/p\u003e' +\r\n\r\n    '\u003cdiv class=\"js-tib-id top-info__banner--text col-100 p-sides-z position-relative\"\u003e' +\r\n      '\u003cp class=\"ct-for-you-grid-copy\"\u003e' + escapeHtml(MB_SLIDEOUT_COPY.subheading) +'\u003c/p\u003e' +\r\n    '\u003c/div\u003e' +\r\n  '\u003c/div\u003e' +\r\n\r\n  '\u003cdiv id=\"' + RECO_CONTAINER_ID + '\"\u003e\u003cdiv class=\"reco-row\"\u003eLoading...\u003c/div\u003e\u003c/div\u003e';\r\n      document.body.appendChild(slideout);\r\n\r\n      slideout.querySelector(\".custom-slideout-close\").addEventListener(\"click\", closeSlideout);\r\n      slideout.addEventListener(\"click\", function (e) {\r\n        if (IS_BASKET \u0026\u0026 closest(e.target, \".product-tile a\")) closeSlideout();\r\n      });\r\n\r\n      try {\r\n        if (window.exponea \u0026\u0026 exponea.getRecommendation) {\r\n          exponea.getRecommendation({\r\n            recommendationId: RECOMMENDATION_ID,\r\n            size: 21,\r\n            fillWithRandom: true,\r\n            catalogAttributesWhitelist: [\r\n              \"title\", \"url\", \"price\",\r\n              \"mbuy_price_uk\", \"mbuy_price_au\", \"mbuy_price_eu\",\r\n              \"thumb_image\", \"image\", \"id\",\r\n              \"orig_price_us\", \"product_name_us\", \"url_us\"\r\n            ],\r\n            callback: onRecommendationsLoaded\r\n          });\r\n        } else {\r\n          throw new Error(\"Exponea unavailable\");\r\n        }\r\n      } catch (e) {\r\n        var container = document.getElementById(RECO_CONTAINER_ID);\r\n        if (container) container.innerHTML = '\u003cdiv class=\"reco-row\"\u003eRecommendations unavailable.\u003c/div\u003e';\r\n        console.error(TAG, \"Slideout recs error:\", e);\r\n      }\r\n    }\r\n\r\n    if (IS_MOBILE) {\r\n      document.documentElement.classList.add(\"mb-no-scroll\");\r\n      document.body.classList.add(\"mb-no-scroll\");\r\n    }\r\n\r\n    slideout.classList.add(\"open\");\r\n    overlay.classList.add(\"show\");\r\n\r\n    if (!KEYDOWN_BOUND) {\r\n      KEYDOWN_BOUND = true;\r\n      document.addEventListener(\"keydown\", function (e) {\r\n        if (e.key === \"Escape\") closeSlideout();\r\n      }, true);\r\n    }\r\n  }\r\n\r\n  function closeSlideout() {\r\n    var slideout = document.querySelector(\".custom-slideout\");\r\n    var overlay = document.querySelector(\".custom-slideout-overlay\");\r\n    if (slideout) slideout.classList.remove(\"open\");\r\n    if (overlay) overlay.classList.remove(\"show\");\r\n    document.documentElement.classList.remove(\"mb-no-scroll\");\r\n    document.body.classList.remove(\"mb-no-scroll\");\r\n  }\r\n\r\n  function triggerPopup() {\r\n  if (!isMultibuyUiActive()) return;\r\n  openSlideout();\r\n}\r\n\r\n  /* ========================= Price Formatting ====================== */\r\n  function ensureWasWrap(container, nowWrap) {\r\n    var wasWrap = container.querySelector(\".js-thumb-was-price\");\r\n    if (wasWrap) return wasWrap;\r\n    wasWrap = document.createElement(\"span\");\r\n    wasWrap.className = \"js-thumb-was-price was-price text-decoration-line-through grey1 position-relative col-100 m-right-xs\";\r\n    wasWrap.innerHTML = '\u003cspan class=\"accessibility-hidden\"\u003ewas \u003c/span\u003e\u003cspan aria-hidden=\"true\"\u003e\u003c/span\u003e';\r\n    nowWrap.parentNode.insertBefore(wasWrap, nowWrap);\r\n    wasWrap.dataset.mbWasCreated = \"1\";\r\n    return wasWrap;\r\n  }\r\n\r\n  function setWasPrice(wasWrap, money) {\r\n    if (!wasWrap || !money) return;\r\n    wasWrap.classList.remove(\"hide\");\r\n    wasWrap.style.fontWeight = \"400\";\r\n    var a11y = wasWrap.querySelector(\".accessibility-hidden\");\r\n    var vis = wasWrap.querySelector('[aria-hidden=\"true\"]') || wasWrap;\r\n    if (a11y) a11y.textContent = \"was \" + money.display;\r\n    vis.textContent = money.display;\r\n  }\r\n\r\n  function setNowPrice(nowWrap, money, makeGreen) {\r\n    if (!nowWrap || !money) return;\r\n    var a11y = nowWrap.querySelector(\".accessibility-hidden\");\r\n    var vis = getVisNode(nowWrap);\r\n\r\n    if (!nowWrap.dataset.mbOrigNow) {\r\n      nowWrap.dataset.mbOrigNow = (vis.textContent || \"\").trim();\r\n      nowWrap.dataset.mbOrigColor = nowWrap.style.color || \"\";\r\n    }\r\n\r\n    var desired = (COPY[LANG].now ? COPY[LANG].now + \" \" : \"\") + money.display\r\n    if ((vis.textContent || \"\").trim() !== desired) {\r\n      if (a11y) a11y.textContent = (COPY[LANG].now ? COPY[LANG].now + \" \" : \"\") + money.display;\r\n      vis.textContent = desired;\r\n    }\r\n    nowWrap.style.color = makeGreen ? \"#1e6a60\" : (nowWrap.dataset.mbOrigColor || \"\");\r\n  }\r\n\r\n  function revertNowPrice(nowWrap) {\r\n    if (!nowWrap) return;\r\n    var vis = getVisNode(nowWrap);\r\n    if (nowWrap.dataset.mbOrigNow) {\r\n      vis.textContent = nowWrap.dataset.mbOrigNow;\r\n      delete nowWrap.dataset.mbOrigNow;\r\n    }\r\n    if (\"mbOrigColor\" in nowWrap.dataset) {\r\n      nowWrap.style.color = nowWrap.dataset.mbOrigColor || \"\";\r\n      delete nowWrap.dataset.mbOrigColor;\r\n    } else {\r\n      nowWrap.style.color = \"\";\r\n    }\r\n    var a11y = nowWrap.querySelector(\".accessibility-hidden\");\r\n    if (a11y \u0026\u0026 vis.textContent) a11y.textContent = \"now \" + vis.textContent;\r\n  }\r\n\r\n  function updateHiddenInputs(scope, wasMoney, nowMoney) {\r\n    var wasInput = scope.querySelector(\"#productWasPrice\");\r\n    var nowInput = scope.querySelector(\"#productNowPrice\");\r\n    if (wasInput \u0026\u0026 wasMoney) wasInput.value = wasMoney.value;\r\n    if (nowInput \u0026\u0026 nowMoney) nowInput.value = nowMoney.value;\r\n  }\r\n\r\n  function processTileEnable(tile) {\r\n    try {\r\n      if (!tile) return;\r\n      var promoEl = tile.querySelector(\".product-tile__promo\");\r\n      var nowWrap = tile.querySelector(\".js-thumb-now-price\");\r\n      if (!promoEl || !nowWrap) return;\r\n\r\n      var mbMoney = parseMoney(promoEl.textContent);\r\n      var visNowNode = tile.querySelector(\".js-thumb-now-price [aria-hidden='true']\") || nowWrap;\r\n      var fullMoney = parseMoney(visNowNode.textContent);\r\n      if (!mbMoney || !fullMoney) return;\r\n\r\n      var visText = (getVisNode(nowWrap).textContent || \"\").trim();\r\n      var visVal = parseMoney(visText);\r\n      if (/^now\\s+/i.test(visText) \u0026\u0026 visVal \u0026\u0026 visVal.display === mbMoney.display) {\r\n        promoEl.style.display = \"none\";\r\n        tile.dataset.mbPlpApplied = \"1\";\r\n        return;\r\n      }\r\n\r\n      var wasWrap = ensureWasWrap(tile, nowWrap);\r\n      if (!tile.dataset.mbHadWas) tile.dataset.mbHadWas = wasWrap.dataset.mbWasCreated === \"1\" ? \"0\" : \"1\";\r\n\r\n      setWasPrice(wasWrap, fullMoney);\r\n      setNowPrice(nowWrap, mbMoney, true);\r\n      promoEl.style.display = \"none\";\r\n      updateHiddenInputs(tile, fullMoney, mbMoney);\r\n\r\n      tile.dataset.mbPlpApplied = \"1\";\r\n    } catch (e) {\r\n      console.error(TAG, \"processTileEnable error:\", e, tile);\r\n    }\r\n  }\r\n\r\n  function processTileDisable(tile) {\r\n    try {\r\n      if (!tile || tile.dataset.mbPlpApplied !== \"1\") return;\r\n\r\n      var promoEl = tile.querySelector(\".product-tile__promo\");\r\n      var nowWrap = tile.querySelector(\".js-thumb-now-price\");\r\n      var wasWrap = tile.querySelector(\".js-thumb-was-price\");\r\n\r\n      revertNowPrice(nowWrap);\r\n\r\n      if (wasWrap) {\r\n        if (wasWrap.dataset.mbWasCreated === \"1\") wasWrap.remove();\r\n        else wasWrap.classList.add(\"hide\");\r\n      }\r\n      if (promoEl) promoEl.style.display = \"\";\r\n\r\n      delete tile.dataset.mbPlpApplied;\r\n    } catch (e) {\r\n      console.error(TAG, \"processTileDisable error:\", e, tile);\r\n    }\r\n  }\r\n\r\n  function applyPlpFormattingEverywhere() {\r\n    document.querySelectorAll(\".product-tile.js-product-tile, .js-product-tile-container\").forEach(processTileEnable);\r\n  }\r\n\r\n  function revertPlpFormattingEverywhere() {\r\n    document.querySelectorAll(\".product-tile.js-product-tile, .js-product-tile-container\").forEach(processTileDisable);\r\n  }\r\n\r\n  /* ====================== PDP main / slider pricing ====================== */\r\n  function getMbMoneyFromPDP() {\r\n    var scope = document.querySelector(\".pdp-main__inner-details\");\r\n    if (!scope) {\r\n      return null;\r\n    }\r\n\r\n    var mbNode = scope.querySelector(\".js-multibuy-price\");\r\n    var mb = parseMoney(mbNode ? mbNode.textContent : \"\");\r\n    if (!mb) {\r\n      var fb = Array.from(scope.querySelectorAll(\".grey2, .h5, .font__secondary\"))\r\n        .find(function (el) { return /multibuy/i.test(el.textContent || \"\"); });\r\n      if (fb) mb = parseMoney(fb.textContent);\r\n    }\r\n    return mb;\r\n  }\r\n\r\n  function hidePdpMultibuy(scope) {\r\n    var mbNode = scope.querySelector(\".js-multibuy-price\");\r\n    if (mbNode) {\r\n      var block = mbNode.closest(\".grey2\") || mbNode.parentElement;\r\n      if (block) block.style.display = \"none\";\r\n      return;\r\n    }\r\n    var fallback = Array.from(scope.querySelectorAll(\".grey2, .h5, .font__secondary\"))\r\n      .find(function (el) { return /multibuy/i.test(el.textContent || \"\"); });\r\n    if (fallback) fallback.style.display = \"none\";\r\n  }\r\n\r\n  function applyPdpFormatting() {\r\n    try {\r\n      if (!(IS_PDP \u0026\u0026 dlProductEligibleS101() \u0026\u0026 hasAchievedMultibuy())) return;\r\n\r\n      var scope = document.querySelector(\".pdp-main__inner-details\");\r\n      if (!scope) return;\r\n\r\n      var priceBlock = scope.querySelector(\".price.price__display\") || scope;\r\n      var nowWrap = priceBlock.querySelector(\".js-thumb-now-price\");\r\n      if (!nowWrap) return;\r\n\r\n      if (!nowWrap.dataset.mbOrigNow) {\r\n        var vis = getVisNode(nowWrap);\r\n        nowWrap.dataset.mbOrigNow = (vis.textContent || \"\").trim();\r\n        nowWrap.dataset.mbOrigColor = nowWrap.style.color || \"\";\r\n      }\r\n      var orig = parseMoney(nowWrap.dataset.mbOrigNow || \"\");\r\n      var mbMoney = getMbMoneyFromPDP();\r\n      if (!orig || !mbMoney) return;\r\n\r\n      var wasWrap = ensureWasWrap(priceBlock, nowWrap);\r\n      setWasPrice(wasWrap, orig);\r\n      setNowPrice(nowWrap, mbMoney, true);\r\n      hidePdpMultibuy(scope);\r\n      updateHiddenInputs(priceBlock, orig, mbMoney);\r\n\r\n      var sum = document.querySelector(\"#productNowPriceForSummary\");\r\n      if (sum) sum.value = mbMoney.value;\r\n\r\n      document.querySelectorAll(\".terminal\").forEach(function (el) {\r\n        var vis = getVisNode(el);\r\n        if (!el.dataset.mbOrigTerminal) {\r\n          el.dataset.mbOrigTerminal = (vis.textContent || \"\").trim();\r\n          el.dataset.mbOrigColor = el.style.color || \"\";\r\n        }\r\n        var desired = mbMoney.display;\r\n        if ((vis.textContent || \"\").trim() !== desired) {\r\n          vis.textContent = desired;\r\n        }\r\n        el.style.color = \"#1e6a60\";\r\n      });\r\n    } catch (e) {\r\n      console.error(TAG, \"applyPdpFormatting error:\", e);\r\n    }\r\n  }\r\n\r\n  function revertPdpFormatting() {\r\n    try {\r\n      var scope = document.querySelector(\".pdp-main__inner-details\");\r\n      if (!scope) return;\r\n      var priceBlock = scope.querySelector(\".price.price__display\") || scope;\r\n      var nowWrap = priceBlock.querySelector(\".js-thumb-now-price\");\r\n      var wasWrap = priceBlock.querySelector(\".js-thumb-was-price\");\r\n\r\n      if (nowWrap) revertNowPrice(nowWrap);\r\n      if (wasWrap) {\r\n        if (wasWrap.dataset.mbWasCreated === \"1\") wasWrap.remove();\r\n        else wasWrap.classList.add(\"hide\");\r\n      }\r\n\r\n      var mbNode = scope.querySelector(\".js-multibuy-price\");\r\n      if (mbNode) {\r\n        var block = mbNode.closest(\".grey2\") || mbNode.parentElement;\r\n        if (block) block.style.display = \"\";\r\n      }\r\n\r\n      document.querySelectorAll(\".terminal\").forEach(function (el) {\r\n        var vis = getVisNode(el);\r\n        if (el.dataset.mbOrigTerminal) {\r\n          vis.textContent = el.dataset.mbOrigTerminal;\r\n          delete el.dataset.mbOrigTerminal;\r\n        }\r\n        if (\"mbOrigColor\" in el.dataset) {\r\n          el.style.color = el.dataset.mbOrigColor || \"\";\r\n          delete el.dataset.mbOrigColor;\r\n        } else {\r\n          el.style.color = \"\";\r\n        }\r\n      });\r\n    } catch (e) {\r\n      console.error(TAG, \"revertPdpFormatting error:\", e);\r\n    }\r\n  }\r\n\r\n  function updateJsProductPriceNode(el, mbMoney) {\r\n    try {\r\n      var vis = getVisNode(el);\r\n      if (!el.dataset.mbOrigSliderPrice) el.dataset.mbOrigSliderPrice = (vis.textContent || \"\").trim();\r\n      var desired = mbMoney ? mbMoney.display : el.dataset.mbOrigSliderPrice;\r\n      var current = (vis.textContent || \"\").trim();\r\n      if (current === desired) return;\r\n      vis.textContent = desired;\r\n      el.style.color = \"\";\r\n    } catch (e) {\r\n      console.error(TAG, \"updateJsProductPriceNode error:\", e, el);\r\n    }\r\n  }\r\n\r\n  function attachJsProductPriceObserver(el) {\r\n    if (!el || PRICE_OBSERVED.has(el)) return;\r\n    var reentrant = false;\r\n    var obs = new MutationObserver(function () {\r\n      if (reentrant) return;\r\n      reentrant = true;\r\n      try {\r\n        var allowed = priceChangeAllowed();\r\n        var mb = (allowed \u0026\u0026 IS_PDP) ? getMbMoneyFromPDP() : null;\r\n        updateJsProductPriceNode(el, mb);\r\n      } catch (e) {\r\n        console.error(TAG, \"price observer error:\", e);\r\n      } finally {\r\n        setTimeout(function () { reentrant = false; }, 0);\r\n      }\r\n    });\r\n    obs.observe(el, { childList: true, subtree: true, characterData: true });\r\n    PRICE_OBSERVED.add(el);\r\n    dbg(\"Observer attached to .js-product-price\", el);\r\n  }\r\n\r\n  function initJsProductPriceObservers() {\r\n    if (!(IS_PDP \u0026\u0026 dlProductEligibleS101() \u0026\u0026 hasAchievedMultibuy())) return;\r\n    document.querySelectorAll(\".js-product-price\").forEach(function (el) {\r\n      var mb = getMbMoneyFromPDP();\r\n      updateJsProductPriceNode(el, mb);\r\n      attachJsProductPriceObserver(el);\r\n    });\r\n  }\r\n\r\n  function revertSliderPrices() {\r\n    document.querySelectorAll(\".js-product-price\").forEach(function (el) {\r\n      updateJsProductPriceNode(el, null);\r\n    });\r\n  }\r\n\r\n  function revertAllFormatting() {\r\n    revertPlpFormattingEverywhere();\r\n    revertPdpFormatting();\r\n    revertSliderPrices();\r\n  }\r\n\r\n  /* ============================= Sync UI =========================== */\r\n  function teardownMultibuyUI() {\r\n    closeSlideout();\r\n    removeBanner();\r\n    document.documentElement.classList.remove(\"mb-no-scroll\");\r\n    document.body.classList.remove(\"mb-no-scroll\");\r\n    MB_INIT_DONE = false;\r\n  }\r\n\r\n  function syncMultibuyUI() {\r\n  try {\r\n    var uiActive = isMultibuyUiActive();\r\n\r\n    if (uiActive) {\r\n      injectStyles();\r\n      ensureBanner();\r\n      MB_INIT_DONE = true;\r\n\r\n      if (IS_PLP) {\r\n        injectPagingbarOverride();\r\n      } else {\r\n        removePagingbarOverride();\r\n      }\r\n\r\n      // pricing override intentionally disabled\r\n      revertAllFormatting();\r\n    } else {\r\n      teardownMultibuyUI();\r\n      removePagingbarOverride();\r\n      revertAllFormatting();\r\n    }\r\n  } catch (e) {\r\n    console.error(TAG, \"syncMultibuyUI error:\", e);\r\n  }\r\n}\r\n\r\n  function scheduleSync(delay) {\r\n    if (SYNC_DEBOUNCE) clearTimeout(SYNC_DEBOUNCE);\r\n    SYNC_DEBOUNCE = setTimeout(syncMultibuyUI, delay || 150);\r\n  }\r\n\r\n  function observeBasketChanges() {\r\n    if (BASKET_OBSERVER) {\r\n      try { BASKET_OBSERVER.disconnect(); } catch (e) {}\r\n    }\r\n    BASKET_OBSERVER = new MutationObserver(function () {\r\n      if (SYNC_DEBOUNCE) clearTimeout(SYNC_DEBOUNCE);\r\n      SYNC_DEBOUNCE = setTimeout(syncMultibuyUI, 300);\r\n    });\r\n    var target = document.getElementById(\"mini-cart\");\r\n    if (target) BASKET_OBSERVER.observe(target, { childList: true, subtree: true });\r\n  }\r\n\r\n  var DOM_OBS = new MutationObserver(function (muts) {\r\n    var allow = priceChangeAllowed();\r\n    var seenTiles = false, seenPrice = false, seenPdp = false;\r\n    for (var i = 0; i \u003c muts.length; i++) {\r\n      var list = muts[i].addedNodes;\r\n      if (!list) continue;\r\n      for (var j = 0; j \u003c list.length; j++) {\r\n        var n = list[j];\r\n        if (!(n instanceof HTMLElement)) continue;\r\n        if ((n.matches \u0026\u0026 n.matches(\".product-tile.js-product-tile, .js-product-tile-container\")) || (n.querySelector \u0026\u0026 n.querySelector(\".product-tile.js-product-tile, .js-product-tile-container\"))) seenTiles = true;\r\n        if ((n.matches \u0026\u0026 n.matches(\".js-product-price\")) || (n.querySelector \u0026\u0026 n.querySelector(\".js-product-price\"))) seenPrice = true;\r\n        if ((n.matches \u0026\u0026 n.matches(\".pdp-main__inner-details\")) || (n.querySelector \u0026\u0026 n.querySelector(\".pdp-main__inner-details\"))) seenPdp = true;\r\n      }\r\n    }\r\n  });\r\n\r\n  if (document.body) {\r\n    DOM_OBS.observe(document.body, { childList: true, subtree: true });\r\n  } else {\r\n    window.addEventListener(\"DOMContentLoaded\", function () {\r\n      DOM_OBS.observe(document.body, { childList: true, subtree: true });\r\n    });\r\n  }\r\n\r\n  /* =============================== Events ========================== */\r\n  document.addEventListener(\"click\", function (e) {\r\n    if (closest(e.target, \".mb-banner\")) {\r\n      e.preventDefault();\r\n      if (hasAchievedMultibuy()) triggerPopup();\r\n    }\r\n\r\n    var t = e.target;\r\n    if (t \u0026\u0026 t.closest \u0026\u0026 t.closest(\"[name='addToCart'], .js-add-to-basket, .add-to-basket, #add-to-cart\")) {\r\n      setTimeout(function () {\r\n        revertAllFormatting();\r\n      }, 150);\r\n    }\r\n  });\r\n\r\n  /* ================================ Init =========================== */\r\n  (function init() {\r\n    try {\r\n      syncMultibuyUI();\r\n      observeBasketChanges();\r\n      var attempts = 0;\r\n      RECHECK_TIMER = setInterval(function () {\r\n        attempts++;\r\n        syncMultibuyUI();\r\n        if (attempts \u003e 10) {\r\n          clearInterval(RECHECK_TIMER);\r\n          RECHECK_TIMER = null;\r\n        }\r\n      }, 1000);\r\n    } catch (e) {\r\n      console.error(TAG, \"init error:\", e);\r\n    }\r\n  })();\r\n\r\n  setInterval(function () {\r\n    if (document.querySelector(\".pdp-main__inner-details\")) priceChangeAllowed();\r\n  }, 3000);\r\n\r\n})();","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":[{"url":"dwcont","type":"contains"},{"url":"/ch/","type":"contains"}]},"_id":"693332cfbe73ed65a0453cd7"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function () {\n  \"use strict\";\n\n  // ---------- run once per page ----------\n  var RUN_FLAG = \"__BR_SIV_PIXEL_US_ONLY__\";\n  if (window[RUN_FLAG]) return;\n  window[RUN_FLAG] = true;\n\n  var PIXEL_SRC = \"https://cdn.brcdn.com/v1/siv/br-trk-8125-wrapper.js\";\n\n  function hasScript(src) {\n    return !!document.querySelector('script[src=\"' + src + '\"]');\n  }\n\n  function waitForUtag(cb, maxTries) {\n    maxTries--;\n    if (window.utag_data \u0026\u0026 utag_data.global \u0026\u0026 typeof utag_data.global.sfcc_country === \"string\") {\n      cb();\n    } else if (maxTries \u003e 0) {\n      setTimeout(function () { waitForUtag(cb, maxTries); }, 50);\n    }\n  }\n\n  waitForUtag(function () {\n    // ---------- US-only gate ----------\n    if (utag_data.global.sfcc_country !== \"US\") return;\n\n    // ---------- belt \u0026 braces: don't double-insert ----------\n    if (hasScript(PIXEL_SRC)) return;\n\n    var s = document.createElement(\"script\");\n    s.async = true;\n    s.type = \"text/javascript\";\n    s.src = PIXEL_SRC;\n\n    (document.head || document.documentElement).appendChild(s);\n  }, 100);\n})();\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"695f78b9d84be51e1c8bc6ef"},{"uses_overlay":false,"type":"js","parametrized_definition":"(() =\u003e {\r\n  \"use strict\";\r\n\r\n  // Guard: homepage only\r\n  if (\r\n    !window.utag_data ||\r\n    window.utag_data?.page?.name !== \"Homepage\"\r\n  ) {\r\n    return;\r\n  }\r\n\r\n  const SVG_SRC =\r\n    \"https://www.charlestyrwhitt.com/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/dwf32243ec/merchAssets/content/All-Svg-Icons/tyrhwitt-takeback-Logo.svg\";\r\n\r\n  const LINK_HREF =\r\n    \"https://www.charlestyrwhitt.com/uk/tyrwhitt-takeback-scheme.html\";\r\n\r\n  // Covers \u003cimg src=\"...svg\"\u003e and any odd \u003csvg src=\"...\"\u003e cases\r\n  const icons = document.querySelectorAll(\r\n    `img[src=\"${SVG_SRC}\"], svg[src=\"${SVG_SRC}\"]`\r\n  );\r\n\r\n  icons.forEach((icon) =\u003e {\r\n    // Don’t double-wrap\r\n    if (icon.closest(\"a\")) return;\r\n\r\n    const link = document.createElement(\"a\");\r\n    link.href = LINK_HREF;\r\n    link.setAttribute(\"aria-label\", \"Tyrwhitt Takeback Scheme\");\r\n\r\n    icon.parentNode.insertBefore(link, icon);\r\n    link.appendChild(icon);\r\n  });\r\n})();\r\n","trigger":{"include_pages":[{"url":"home","type":"contains"}],"exclude_pages":null},"_id":"696e9065dc027424c39feb69"},{"uses_overlay":false,"type":"html","parametrized_definition":"\u003cscript\u003e\n(function () {\n  \"use strict\";\n\n  const RUN_FLAG = \"__CT_MENTION_ME_PDP__\";\n  if (window[RUN_FLAG]) return;\n  window[RUN_FLAG] = true;\n\n  // Hard guard: only run on PDP\n  if (!window.utag_data || utag_data.page?.type !== \"product\") return;\n\n  const productId = String(utag_data.products?.[0]?.id || \"\").trim();\n  if (!productId) return;\n\n  const script = document.createElement(\"script\");\n  script.type = \"text/javascript\";\n  script.async = true;\n  script.src =\n    \"https://tag.mention-me.com/api/v2/product/mme5bcd07b\" +\n    \"?situation=product\" +\n    \"\u0026implementation=sharelink\" +\n    \"\u0026locale=en_GB\" +\n    \"\u0026product_id=\" + encodeURIComponent(productId);\n\n  document.head.appendChild(script);\n})();\n\u003c/script\u003e\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"69945a5bbd3fb93768250079"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function () {\n  \"use strict\";\n\n  if (!window.exponea) return;\n  if (!window.webxpClient || typeof window.webxpClient.reset !== \"function\") return;\n  if (window.utag_data?.global?.sfcc_country !== \"US\") return;\n  if (window.utag_data?.bloomreach_tests) return;\n\n  var SPLIT_KEY = \"ct_us_site_split_v1\";            // persistent bucket\n  var ASSIGNED_KEY = \"ct_us_block_assigned_v1\";     // marks Bloomreach update/track completed\n\n  var storage;\n  try {\n    storage = window.localStorage;\n    storage.setItem(\"__t\", \"1\");\n    storage.removeItem(\"__t\");\n  } catch (e) {\n    return;\n  }\n\n  var alreadyAssigned = false;\n  try {\n    alreadyAssigned = storage.getItem(ASSIGNED_KEY) === \"1\";\n  } catch (e) {\n    return;\n  }\n\n  // If already assigned once for this customer/browser, do nothing forever\n  if (alreadyAssigned) return;\n\n  // Get or create persistent split\n  var split = null;\n  try { split = storage.getItem(SPLIT_KEY); } catch (e) {}\n\n  if (split == null || split === \"\") {\n    split = String(Math.floor(Math.random() * 100));\n    try { storage.setItem(SPLIT_KEY, split); } catch (e) {}\n  }\n\n  var splitNum = Number(split);\n\n  // Mark before sending to reduce double-fire risk\n  try { storage.setItem(ASSIGNED_KEY, \"1\"); } catch (e) {}\n\n  try {\n    window.exponea.update({\n      us_site_split: splitNum\n    });\n  } catch (e) {}\n\n  try {\n  \tconsole.log('Assign block');\n    window.exponea.track(\"us_block_assign\", {\n      us_site_split: splitNum\n    });\n  } catch (e) {}\n\n  // Re-init experiment once so first page can qualify without refresh\n  setTimeout(function () {\n    try {\n    \tconsole.log('Force assign');\n      window.webxpClient.reset();\n      console.debug(\"[CT] Split assigned once and experiment reset:\", splitNum);\n    } catch (e) {}\n  }, 2000);\n})();","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"699c661cd6ccf39bc176de34"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function () {\n\tconsole.log('Go');\n  \"use strict\";\n  console.log('Here', !window.exponea,!window.webxpClient || typeof window.webxpClient.reset !== \"function\",  window.utag_data?.global?.sfcc_country !== \"UK\", window.utag_data?.bloomreach_tests);\n\n  if (!window.exponea) return;\n  if (window.utag_data?.global?.sfcc_country !== \"UK\") return;\n  if (window.utag_data?.bloomreach_tests) return;\n  \n  console.log('Here2');\n\n  var SPLIT_KEY = \"ct_uk_site_split_v1\";            // persistent bucket\n  var ASSIGNED_KEY = \"ct_uk_block_assigned_v1\";     // marks Bloomreach update/track completed\n\n  var storage;\n  try {\n    storage = window.localStorage;\n    storage.setItem(\"__t\", \"1\");\n    storage.removeItem(\"__t\");\n  } catch (e) {\n    return;\n  }\n\n  var alreadyAssigned = false;\n  try {\n    alreadyAssigned = storage.getItem(ASSIGNED_KEY) === \"1\";\n  } catch (e) {\n    return;\n  }\n  \n  console.log('Here3', alreadyAssigned);\n\n  // If already assigned once for this customer/browser, do nothing forever\n  if (alreadyAssigned) return;\n\n  // Get or create persistent split\n  var split = null;\n  try { split = storage.getItem(SPLIT_KEY); } catch (e) {}\n\n  if (split == null || split === \"\") {\n    split = String(Math.floor(Math.random() * 100));\n    try { storage.setItem(SPLIT_KEY, split); } catch (e) {}\n  }\n\n  var splitNum = Number(split);\n\n  // Mark before sending to reduce double-fire risk\n  try { storage.setItem(ASSIGNED_KEY, \"1\"); } catch (e) {}\n\n  try {\n    window.exponea.update({\n      uk_site_split: splitNum\n    });\n  } catch (e) {}\n\n  try {\n  \tconsole.log('Assign block');\n    window.exponea.track(\"uk_block_assign\", {\n      uk_site_split: splitNum\n    });\n  } catch (e) {}\n\n  // Re-init experiment once so first page can qualify without refresh\n  setTimeout(function () {\n    try {\n    \tconsole.log('Force reset');\n      window.webxpClient.reset();\n      console.debug(\"[CT] Split assigned once and experiment reset:\", splitNum);\n    } catch (e) {}\n  }, 2000);\n})();","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"69a96b3c045149338993efcd"},{"uses_overlay":false,"type":"js","parametrized_definition":"(function () {\n  \"use strict\";\n\n  if (!window.exponea) return;\n  if (!window.webxpClient || typeof window.webxpClient.reset !== \"function\") return;\n  if (window.utag_data?.global?.sfcc_country !== \"DE\") return;\n  if (window.utag_data?.bloomreach_tests) return;\n\n  var SPLIT_KEY = \"ct_de_site_split_v1\";            // persistent bucket\n  var ASSIGNED_KEY = \"ct_de_block_assigned_v1\";     // marks Bloomreach update/track completed\n\n  var storage;\n  try {\n    storage = window.localStorage;\n    storage.setItem(\"__t\", \"1\");\n    storage.removeItem(\"__t\");\n  } catch (e) {\n    return;\n  }\n\n  var alreadyAssigned = false;\n  try {\n    alreadyAssigned = storage.getItem(ASSIGNED_KEY) === \"1\";\n  } catch (e) {\n    return;\n  }\n\n  // If already assigned once for this customer/browser, do nothing forever\n  if (alreadyAssigned) return;\n\n  // Get or create persistent split\n  var split = null;\n  try { split = storage.getItem(SPLIT_KEY); } catch (e) {}\n\n  if (split == null || split === \"\") {\n    split = String(Math.floor(Math.random() * 100));\n    try { storage.setItem(SPLIT_KEY, split); } catch (e) {}\n  }\n\n  var splitNum = Number(split);\n\n  // Mark before sending to reduce double-fire risk\n  try { storage.setItem(ASSIGNED_KEY, \"1\"); } catch (e) {}\n\n  try {\n    window.exponea.update({\n      de_site_split: splitNum\n    });\n  } catch (e) {}\n\n  try {\n    window.exponea.track(\"de_block_assign\", {\n      de_site_split: splitNum\n    });\n  } catch (e) {}\n\n  // Re-init experiment once so first page can qualify without refresh\n  setTimeout(function () {\n    try {\n      window.webxpClient.reset();\n      console.debug(\"[CT] Split assigned once and experiment reset:\", splitNum);\n    } catch (e) {}\n  }, 2000);\n})();","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"69a99d5d9a386d6c7480e5f1"}],"vars":{"data":[{"id":"6862a355ce623f4f19e39fc9","name":"Global Tracker Object","variable":{"type":"custom_function","custom_function":{"body":"const globalTrackerObj = {\r\n    shirts: {\r\n        en_GB: {\r\n            Copy: 'Shirts \u0026 Polos',\r\n            NumberOfProductsToActivateMb: 4,\r\n            AcqNumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/uk/mens-shirts/',\r\n            MbPrice: '£33',\r\n        },\r\n        en_US: {\r\n            Copy: 'Shirts \u0026 Polos',\r\n            NumberOfProductsToActivateMb: 4,\r\n            AcqNumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/us/mens-shirts/',\r\n            MbPrice: '$49.75',\r\n        },\r\n        en_CA: {\r\n            Copy: 'Shirts \u0026 Polos',\r\n            NumberOfProductsToActivateMb: 4,\r\n            AcqNumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/en_CA/mens-shirts/',\r\n            MbPrice: 'C$99.75',\r\n        },\r\n        en_CH: {\r\n            Copy: 'Shirts \u0026 Polos',\r\n            NumberOfProductsToActivateMb: 4,\r\n            AcqNumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/en_CH/mens-shirts/',\r\n            MbPrice: 'CHF 62,25',\r\n        },\r\n        en_IE: {\r\n            Copy: 'Shirts \u0026 Polos',\r\n            NumberOfProductsToActivateMb: 4,\r\n            AcqNumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/eu/mens-shirts/',\r\n            MbPrice: '49.75 €',\r\n        },\r\n        nl_NL: {\r\n            Copy: 'Shirts \u0026 Polos',\r\n            NumberOfProductsToActivateMb: 4,\r\n            AcqNumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/nl/en_NL/mens-shirts/',\r\n            MbPrice: '49.75 €',\r\n        },\r\n        fr_CH: {\r\n            Copy: 'Chemises ou Polos',\r\n            NumberOfProductsToActivateMb: 4,\r\n            AcqNumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/fr_CH/mens-shirts/',\r\n            MbPrice: 'CHF 62,25',\r\n        },\r\n        de_CH: {\r\n            Copy: 'Hemden \u0026 Polos',\r\n            NumberOfProductsToActivateMb: 4,\r\n            AcqNumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/de_CH/mens-shirts/',\r\n            MbPrice: 'CHF 62,25',\r\n        },\r\n        fr_CA: {\r\n            Copy: 'Chemises ou Polos',\r\n            NumberOfProductsToActivateMb: 4,\r\n            AcqNumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/fr_CA/mens-shirts/',\r\n            MbPrice: 'C$99.75',\r\n        },\r\n        de_DE: {\r\n            Copy: 'Hemden \u0026 Polos',\r\n            NumberOfProductsToActivateMb: 4,\r\n            AcqNumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/de/herren-hemden/',\r\n            MbPrice: '49.75 €',\r\n        },\r\n        fr_FR: {\r\n            Copy: 'Chemises ou Polos',\r\n            NumberOfProductsToActivateMb: 4,\r\n            AcqNumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/fr/chemises-homme/',\r\n            MbPrice: '49.75 €',\r\n        },\r\n        en_AU: {\r\n            Copy: 'Shirts \u0026 Polos',\r\n            NumberOfProductsToActivateMb: 4,\r\n            AcqNumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/au/mens-shirts/',\r\n            MbPrice: '$74.75',\r\n        },\r\n        en: {\r\n            Copy: 'Shirts \u0026 Polos',\r\n            NumberOfProductsToActivateMb: 4,\r\n            PlpLink: '/intl/mens-shirts/',\r\n            mbSavings: ['10% off', '15% off', '20% off'],\r\n        },\r\n        Icon: '/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/mb-tracker/shirt-icon-default.svg',\r\n    },\r\n\r\n    trousers: {\r\n        en_GB: {\r\n            Copy: 'Trousers \u0026 Shorts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/uk/mens-trousers/',\r\n            MbPrice: '£39.95',\r\n        },\r\n        en_CH: {\r\n            Copy: 'Trousers \u0026 Shorts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/en_CH/mens-trousers/',\r\n            MbPrice: 'CHF 64,00',\r\n        },\r\n        en_US: {\r\n            Copy: 'Pants \u0026 Shorts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/us/mens-pants/',\r\n            MbPrice: '$59.00',\r\n        },\r\n        en_CA: {\r\n            Copy: 'Pants \u0026 Shorts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/en_CA/mens-pants/',\r\n            MbPrice: 'C$169.00',\r\n        },\r\n        en_IE: {\r\n            Copy: 'Trousers \u0026 Shorts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/eu/mens-trousers/',\r\n            MbPrice: '€49.95',\r\n        },\r\n        nl_NL: {\r\n            Copy: 'Trousers \u0026 Shorts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/nl/en_NL/mens-trousers/',\r\n            MbPrice: '€49.95',\r\n        },\r\n        fr_CH: {\r\n            Copy: 'Pantalons et Shorts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/fr_CH/mens-trousers/',\r\n            MbPrice: 'CHF 64,00',\r\n        },\r\n        de_CH: {\r\n            Copy: 'Hosen \u0026 Shorts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/de_CH/mens-trousers/',\r\n            MbPrice: 'CHF 64,00',\r\n        },\r\n        fr_CA: {\r\n            Copy: 'Pantalons et Shorts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/fr_CA/mens-trousers/',\r\n            MbPrice: 'C$169.00',\r\n        },\r\n        de_DE: {\r\n            Copy: 'Hosen \u0026 Shorts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/de/herren-hosen/',\r\n            MbPrice: '€49.95',\r\n        },\r\n        fr_FR: {\r\n            Copy: 'Pantalons et Shorts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/fr/pantalons-homme/',\r\n            MbPrice: '€49.95',\r\n        },\r\n        en_AU: {\r\n            Copy: 'Pants \u0026 Shorts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/au/mens-pants/',\r\n            MbPrice: '$59.00',\r\n        },\r\n        en: {\r\n            Copy: 'Trousers \u0026 Shorts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: '/intl/mens-trousers/',\r\n            mbSavings: ['20% off'],\r\n        },\r\n        Icon: '/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/mb-tracker/pants-icon-default.svg',\r\n    },\r\n\r\n\r\n    knitwear: {\r\n        en_GB: {\r\n            Copy: 'Jumpers \u0026 Cardigans',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/uk/mens-knitwear/',\r\n            MbPrice: '£59.95',\r\n        },\r\n        en_CH: {\r\n            Copy: 'Jumpers \u0026 Cardigans',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/en_CH/mens-knitwear/',\r\n            MbPrice: 'CHF 104,00',\r\n        },\r\n        en_US: {\r\n            Copy: 'Sweaters \u0026 Cardigans',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/us/mens-sweaters/',\r\n            MbPrice: '$79.00',\r\n        },\r\n        en_CA: {\r\n            Copy: 'Sweaters \u0026 Cardigans',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/en_CA/mens-sweaters/',\r\n            MbPrice: 'C$149.00',\r\n        },\r\n        en_IE: {\r\n            Copy: 'Jumpers \u0026 Cardigans',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/eu/mens-knitwear/',\r\n            MbPrice: '€79.95',\r\n        },\r\n        nl_NL: {\r\n            Copy: 'Jumpers \u0026 Cardigans',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/nl/en_NL/mens-knitwear/',\r\n            MbPrice: '€79.95',\r\n        },\r\n        fr_CH: {\r\n            Copy: 'Pulls et Cardigans',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/fr_CH/mens-knitwear/',\r\n            MbPrice: 'CHF 104,00',\r\n        },\r\n        de_CH: {\r\n            Copy: 'Pullover \u0026 Strickjacken',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/de_CH/mens-knitwear/',\r\n            MbPrice: 'CHF 104,00',\r\n        },\r\n        fr_CA: {\r\n            Copy: 'Pulls et Cardigans',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/fr_CA/mens-knitwear/',\r\n            MbPrice: 'C$149.00',\r\n        },\r\n        de_DE: {\r\n            Copy: 'Pullover \u0026 Strickjacken',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/de/herren-strickwaren/',\r\n            MbPrice: '€79.95',\r\n        },\r\n        fr_FR: {\r\n            Copy: 'Pulls et Cardigans',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/fr/mailles-homme/',\r\n            MbPrice: '€79.95',\r\n        },\r\n        en_AU: {\r\n            Copy: 'Jumpers \u0026 Cardigans',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/au/mens-knitwear/',\r\n            MbPrice: '$79.00',\r\n        },\r\n        en: {\r\n            Copy: 'Jumpers \u0026 Cardigans',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: '/intl/mens-knitwear/',\r\n            mbSavings: ['20% off'],\r\n        },\r\n        Icon: '/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/mb-tracker/knitwear-icon-default.svg',\r\n    },\r\n\r\n\r\n    ties: {\r\n        NumberOfProductsToActivateMb: 2,\r\n        en_GB: {\r\n            Copy: 'Ties',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/uk/mens-ties/',\r\n            MbPrice: '£29.95',\r\n        },\r\n        en_US: {\r\n            Copy: 'Ties',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/us/mens-ties/',\r\n            MbPrice: '$34.00',\r\n        },\r\n        en_CH: {\r\n            Copy: 'Ties',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/en_CH/mens-ties/',\r\n            MbPrice: 'CHF 44,00',\r\n        },\r\n        en_CA: {\r\n            Copy: 'Ties',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/en_CA/mens-ties/',\r\n            MbPrice: 'C$64.00',\r\n        },\r\n        en_IE: {\r\n            Copy: 'Ties',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/eu/mens-ties/',\r\n            MbPrice: '€29.95',\r\n        },\r\n        nl_NL: {\r\n            Copy: 'Ties',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/nl/en_NL/mens-ties/',\r\n            MbPrice: '€29.95',\r\n        },\r\n        fr_CH: {\r\n            Copy: 'Cravates',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/fr_CH/mens-ties/',\r\n            MbPrice: 'CHF 44,00',\r\n        },\r\n        de_CH: {\r\n            Copy: 'Krawatten',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/de_CH/mens-ties/',\r\n            MbPrice: 'CHF 44,00',\r\n        },\r\n        fr_CA: {\r\n            Copy: 'Cravates',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/fr_CA/mens-ties/',\r\n            MbPrice: 'C$64.00',\r\n        },\r\n        de_DE: {\r\n            Copy: 'Krawatten',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/de/herren-krawatten/',\r\n            MbPrice: '€29.95',\r\n        },\r\n        fr_FR: {\r\n            Copy: 'Cravates',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/fr/accessoires-homme/cravate/',\r\n            MbPrice: '€29.95',\r\n        },\r\n        en_AU: {\r\n            Copy: 'Ties',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/au/mens-ties/',\r\n            MbPrice: '$45.00',\r\n        },\r\n        en: {\r\n            Copy: 'Ties',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: '/intl/mens-ties/',\r\n            mbSavings: ['15% off'],\r\n        },\r\n        Icon: '/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/mb-tracker/ties-icon-default.svg',\r\n    },\r\n\r\n\r\n    belts: {\r\n        en_GB: {\r\n            Copy: 'Belts \u0026 Braces',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/uk/mens-accessories/belts/',\r\n            MbPrice: '£32.45',\r\n        },\r\n        en_CH: {\r\n            Copy: 'Belts \u0026 Braces',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/en_CH/mens-accessories/belts/',\r\n            MbPrice: 'CHF 79,00',\r\n        },\r\n        en_US: {\r\n            Copy: 'Belts \u0026 Suspenders',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/us/mens-accessories/belts/',\r\n            MbPrice: '$40.00',\r\n        },\r\n        en_CA: {\r\n            Copy: 'Belts \u0026 Suspenders',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/en_CA/mens-accessories/belts/',\r\n            MbPrice: 'C$64.00',\r\n        },\r\n        en_IE: {\r\n            Copy: 'Belts \u0026 Braces',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/eu/mens-accessories/belts/',\r\n            MbPrice: '€32.45',\r\n        },\r\n        nl_NL: {\r\n            Copy: 'Belts \u0026 Braces',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/nl/en_NL/mens-accessories/belts/',\r\n            MbPrice: '€32.45',\r\n        },\r\n        fr_CH: {\r\n            Copy: 'Ceintures et Bretelles',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/fr_CH/mens-accessories/belts/',\r\n            MbPrice: 'CHF 79,00',\r\n        },\r\n        de_CH: {\r\n            Copy: 'Gürtel \u0026 Hosenträger',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/de_CH/mens-accessories/belts/',\r\n            MbPrice: 'CHF 79,00',\r\n        },\r\n        fr_CA: {\r\n            Copy: 'Ceintures et Bretelles',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/fr_CA/mens-accessories/belts/',\r\n            MbPrice: 'C$64.00',\r\n        },\r\n        de_DE: {\r\n            Copy: 'Gürtel \u0026 Hosenträger',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/de/herren-accessoires/guertel/',\r\n            MbPrice: '€32.45',\r\n        },\r\n        fr_FR: {\r\n            Copy: 'Ceintures et Bretelles',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/fr/accessoires-homme/ceintures-bretelles/',\r\n            MbPrice: '€32.45',\r\n        },\r\n        en_AU: {\r\n            Copy: 'Belts \u0026 Braces',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/au/mens-accessories/belts/',\r\n            MbPrice: '$40.00',\r\n        },\r\n        en: {\r\n            Copy: 'Belts \u0026 Braces',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: '/intl/mens-accessories/belts/',\r\n            mbSavings: ['20% off'],\r\n        },\r\n        Icon: '/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/mb-tracker/belt-icon-default.svg',\r\n    },\r\n\r\n\r\n    pocketsquares: {\r\n        en_GB: {\r\n            Copy: 'Pocket Squares',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/uk/mens-accessories/pocket-squares/',\r\n            MbPrice: '£19.95',\r\n        },\r\n        en_CH: {\r\n            Copy: 'Pocket Squares',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/en_CH/mens-accessories/pocket-squares/',\r\n            MbPrice: 'CHF 16,95',\r\n        },\r\n        en_US: {\r\n            Copy: 'Pocket Squares',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/us/mens-accessories/pocket-squares/',\r\n            MbPrice: '$22.50',\r\n        },\r\n        en_CA: {\r\n            Copy: 'Pocket Squares',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/en_CA/mens-accessories/pocket-squares/',\r\n            MbPrice: 'C$39.00',\r\n        },\r\n        en_IE: {\r\n            Copy: 'Pocket Squares',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/eu/mens-accessories/pocket-squares/',\r\n            MbPrice: '€24.95',\r\n        },\r\n        nl_NL: {\r\n            Copy: 'Pocket Squares',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/nl/en_NL/mens-accessories/pocket-squares/',\r\n            MbPrice: '€24.95',\r\n        },\r\n        fr_CH: {\r\n            Copy: 'Pochettes de Costume',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/fr_CH/mens-accessories/pocket-squares/',\r\n            MbPrice: 'CHF 16,95',\r\n        },\r\n        de_CH: {\r\n            Copy: 'Einstecktücher',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/de_CH/mens-accessories/pocket-squares/',\r\n            MbPrice: 'CHF 16,95',\r\n        },\r\n        fr_CA: {\r\n            Copy: 'Pochettes de Costume',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/fr_CA/mens-accessories/pocket-squares/',\r\n            MbPrice: 'C$39.00',\r\n        },\r\n        de_DE: {\r\n            Copy: 'Einstecktücher',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/de/herren-accessoires/einstecktuecher/',\r\n            MbPrice: '€24.95',\r\n        },\r\n        fr_FR: {\r\n            Copy: 'Pochettes de Costume',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/fr/accessoires-homme/pochettes-costume/',\r\n            MbPrice: '€24.95',\r\n        },\r\n        en_AU: {\r\n            Copy: 'Pocket Squares',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/au/mens-accessories/pocket-squares/',\r\n            MbPrice: '$27.50',\r\n        },\r\n        en: {\r\n            Copy: 'Pocket Squares',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: '/intl/mens-accessories/pocket-squares/',\r\n            mbSavings: ['15% off'],\r\n        },\r\n        Icon: '/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/mb-tracker/pocketsquare-icon-default.svg',\r\n\r\n    },\r\n\r\n    socks: {\r\n        en_GB: {\r\n            Copy: 'Socks',\r\n            NumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/uk/mens-accessories/socks/',\r\n            MbPrice: '£9.50',\r\n        },\r\n        en_CH: {\r\n            Copy: 'Socks',\r\n            NumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/en_CH/mens-accessories/socks/',\r\n            MbPrice: 'CHF 20,00',\r\n        },\r\n        en_US: {\r\n            Copy: 'Socks',\r\n            NumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/us/mens-accessories/socks/',\r\n            MbPrice: '$13.00',\r\n        },\r\n        en_CA: {\r\n            Copy: 'Socks',\r\n            NumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/en_CA/mens-accessories/socks/',\r\n            MbPrice: 'C$22.00',\r\n        },\r\n        en_IE: {\r\n            Copy: 'Socks',\r\n            NumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/eu/mens-accessories/socks/',\r\n            MbPrice: '€12.50',\r\n        },\r\n        nl_NL: {\r\n            Copy: 'Socks',\r\n            NumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/nl/en_NL/mens-accessories/socks/',\r\n            MbPrice: '€12.50',\r\n        },\r\n        fr_CH: {\r\n            Copy: 'Chaussettes',\r\n            NumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/fr_CH/mens-accessories/socks/',\r\n            MbPrice: 'CHF 20,00',\r\n        },\r\n        de_CH: {\r\n            Copy: 'Socken',\r\n            NumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/de_CH/mens-accessories/socks/',\r\n            MbPrice: 'CHF 20,00',\r\n        },\r\n        fr_CA: {\r\n            Copy: 'Chaussettes',\r\n            NumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/fr_CA/mens-accessories/socks/',\r\n            MbPrice: 'C$22.00',\r\n        },\r\n        de_DE: {\r\n            Copy: 'Socken',\r\n            NumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/de/herren-accessoires/socken/',\r\n            MbPrice: '€12.50',\r\n        },\r\n        fr_FR: {\r\n            Copy: 'Chaussettes',\r\n            NumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/fr/accessoires-homme/chaussettes/',\r\n            MbPrice: '€12.50',\r\n        },\r\n        en_AU: {\r\n            Copy: 'Socks',\r\n            NumberOfProductsToActivateMb: 3,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/au/mens-accessories/socks/',\r\n            MbPrice: '$17.00',\r\n        },\r\n        en: {\r\n            Copy: 'Socks',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: '/intl/mens-accessories/socks/',\r\n            mbSavings: ['10% off'],\r\n        },\r\n        Icon: '/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/mb-tracker/socks-icon-default.svg'\r\n    },\r\n\r\n    underwear: {\r\n        en_GB: {\r\n            Copy: 'Underwear',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/uk/mens-underwear/',\r\n            MbPrice: '£19.95',\r\n        },\r\n        en_CH: {\r\n            Copy: 'Underwear',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/en_CH/mens-accessories/boxer-shorts/',\r\n            MbPrice: 'CHF 40,00',\r\n        },\r\n        en_US: {\r\n            Copy: 'Underwear',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/us/mens-accessories/boxer-shorts/',\r\n            MbPrice: '$39.00',\r\n        },\r\n        en_CA: {\r\n            Copy: 'Underwear',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/en_CA/mens-accessories/boxer-shorts/',\r\n            MbPrice: 'C$64.00',\r\n        },\r\n        en_IE: {\r\n            Copy: 'Underwear',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/eu/mens-accessories/boxer-shorts/',\r\n            MbPrice: '€24.95',\r\n        },\r\n        nl_NL: {\r\n            Copy: 'Underwear',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/nl/en_NL/mens-accessories/boxer-shorts/',\r\n            MbPrice: '€24.95',\r\n        },\r\n        fr_CH: {\r\n            Copy: 'Sous-vêtements',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/fr_CH/mens-accessories/boxer-shorts/',\r\n            MbPrice: 'CHF 40,00',\r\n        },\r\n        de_CH: {\r\n            Copy: 'Unterwäsche',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/de_CH/mens-accessories/boxer-shorts/',\r\n            MbPrice: 'CHF 40,00',\r\n        },\r\n        fr_CA: {\r\n            Copy: 'Sous-vêtements',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/fr_CA/mens-accessories/boxer-shorts/',\r\n            MbPrice: 'C$64.00',\r\n        },\r\n        de_DE: {\r\n            Copy: 'Unterwäsche',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/de/herren-accessoires/boxer-shorts/',\r\n            MbPrice: '€24.95',\r\n        },\r\n        fr_FR: {\r\n            Copy: 'Sous-vêtements',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/fr/accessoires-homme/boxers/',\r\n            MbPrice: '€24.95',\r\n        },\r\n        en_AU: {\r\n            Copy: 'Underwear',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/au/mens-accessories/boxer-shorts/',\r\n            MbPrice: '$39.00',\r\n        },\r\n        en: {\r\n            Copy: 'Underwear',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: '/intl/mens-accessories/boxer-shorts/',\r\n            mbSavings: ['15% off'],\r\n        },\r\n        Icon: '/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/mb-tracker/underwear-icon-default.svg',\r\n    },\r\n\r\n    cufflinks: {\r\n        NumberOfProductsToActivateMb: 2,\r\n        en_GB: {\r\n            Copy: 'Cufflinks',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/uk/mens-accessories/cufflinks/',\r\n            MbPrice: '£22.45',\r\n        },\r\n        en_CH: {\r\n            Copy: 'Cufflinks',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/en_CH/mens-accessories/cufflinks/',\r\n            MbPrice: 'CHF 39,00',\r\n        },\r\n        en_US: {\r\n            Copy: 'Cufflinks',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/us/mens-accessories/cufflinks/',\r\n            MbPrice: '$39.00',\r\n        },\r\n        en_CA: {\r\n            Copy: 'Cufflinks',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/en_CA/mens-accessories/cufflinks/',\r\n            MbPrice: 'C$74.00',\r\n        },\r\n        en_IE: {\r\n            Copy: 'Cufflinks',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/eu/mens-accessories/cufflinks/',\r\n            MbPrice: '€32.45',\r\n        },\r\n        nl_NL: {\r\n            Copy: 'Cufflinks',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/nl/en_NL/mens-accessories/cufflinks/',\r\n            MbPrice: '€32.45',\r\n        },\r\n        fr_CH: {\r\n            Copy: 'Boutons de manchette',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/fr_CH/mens-accessories/cufflinks/',\r\n            MbPrice: 'CHF 39,00',\r\n        },\r\n        de_CH: {\r\n            Copy: 'Manschettenknöpfe',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/de_CH/mens-accessories/cufflinks/',\r\n            MbPrice: 'CHF 39,00',\r\n        },\r\n        fr_CA: {\r\n            Copy: 'Boutons de manchette',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/fr_CA/mens-accessories/cufflinks/',\r\n            MbPrice: 'C$74.00',\r\n        },\r\n        de_DE: {\r\n            Copy: 'Manschettenknöpfe',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/de/herren-accessoires/manschettenknoepfe/',\r\n            MbPrice: '€32.95',\r\n        },\r\n        fr_FR: {\r\n            Copy: 'Boutons de manchette',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/fr/accessoires-homme/boutons-manchette/',\r\n            MbPrice: '€32.95',\r\n        },\r\n        en_AU: {\r\n            Copy: 'Cufflinks',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/au/mens-accessories/cufflinks/',\r\n            MbPrice: '$79.00',\r\n        },\r\n        Icon: '/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/mb-tracker/cufflinks-icon-default.svg',\r\n    },\r\n    tshirts: {\r\n        NumberOfProductsToActivateMb: 2,\r\n\r\n        en_GB: {\r\n            Copy: 'T-Shirts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/uk/mens-shirts/t-shirts/',\r\n            MbPrice: '£24.95',\r\n        },\r\n        en_US: {\r\n            Copy: 'T-Shirts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/us/mens-shirts/t-shirts/',\r\n            MbPrice: '$39',\r\n        },\r\n        en_CA: {\r\n            Copy: 'T-Shirts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/en_CA/mens-shirts/t-shirts/',\r\n            MbPrice: 'C$64',\r\n        },\r\n        en_CH: {\r\n            Copy: 'T-Shirts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/en_CH/mens-shirts/t-shirts/',\r\n            MbPrice: 'CHF 44',\r\n        },\r\n        en_IE: {\r\n            Copy: 'T-Shirts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/eu/mens-shirts/t-shirts/',\r\n            MbPrice: '34,95 €',\r\n        },\r\n        nl_NL: {\r\n            Copy: 'T-Shirts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/nl/en_NL/mens-shirts/t-shirts/',\r\n            MbPrice: '€34,95',\r\n        },\r\n        fr_CH: {\r\n            Copy: 'T-Shirts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/fr_CH/mens-shirts/t-shirts/',\r\n            MbPrice: 'CHF 44',\r\n        },\r\n        de_CH: {\r\n            Copy: 'T-Shirts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ch/de_CH/mens-shirts/t-shirts',\r\n            MbPrice: 'CHF 44',\r\n        },\r\n        fr_CA: {\r\n            Copy: 'T-Shirts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/ca/fr_CA/mens-shirts/t-shirts/',\r\n            MbPrice: 'C$64',\r\n        },\r\n        de_DE: {\r\n            Copy: 'T-Shirts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/de/herren-hemden/t-shirts',\r\n            MbPrice: '€34,95',\r\n        },\r\n        fr_FR: {\r\n            Copy: 'T-Shirts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/fr/chemises-homme/t-shirts/',\r\n            MbPrice: '€34,95',\r\n        },\r\n        en_AU: {\r\n            Copy: 'T-Shirts',\r\n            NumberOfProductsToActivateMb: 2,\r\n            PlpLink: 'https://www.charlestyrwhitt.com/au/mens-shirts/t-shirts/',\r\n            MbPrice: '$39',\r\n        },\r\n        Icon: '/on/demandware.static/-/Library-Sites-CTShirtsSharedLibrary/default/mb-tracker/t-shirt-icon-default.svg'\r\n    }\r\n}\r\n\r\nwindow.globalTrackerObj = globalTrackerObj;\r\nreturn true;"}}},{"id":"686bda9631a9bc8251208077","name":"BR Site Language","variable":{"type":"global_variable","global_variable":{"name":"utag_data.global.site_language"}}},{"id":"6870cfc582729abfafd29d0c","name":"BR Country Site","variable":{"type":"global_variable","global_variable":{"name":"utag_data.global.sfcc_country"}}},{"id":"6870cfc682729abfafd29d10","name":"BR Device View","variable":{"type":"global_variable","global_variable":{"name":"utag_data.page.responsive_design_type"}}},{"id":"687777bbd6d560fc90693882","name":"BR Page Type","variable":{"type":"global_variable","global_variable":{"name":"utag_data.page.type"}}},{"id":"687777bbd6d560fc90693886","name":"BR Campaign Site","variable":{"type":"global_variable","global_variable":{"name":"utag_data.global.campaign_site"}}},{"id":"687e48e9e79652fed545563f","name":"Product ID","variable":{"type":"global_variable","global_variable":{"name":"utag_data.products[0].id"}}},{"id":"687f5904f7fcebf3eaf07fef","name":"Products Array","variable":{"type":"global_variable","global_variable":{"name":"utag_data.products"}}},{"id":"687f9ebffac7bd3683754786","name":"Bag","variable":{"type":"global_variable","global_variable":{"name":"utag_data.bag"}}},{"id":"687f9ebffac7bd368375478a","name":"Bag_IDs","variable":{"type":"custom_function","custom_function":{"body":"if (utag_data.bag){\n\tvar ids=[];\n\tfor(let i=0;i\u003cutag_data.bag.length;i++){\n\t\tids.push(utag_data.bag[i].id);\n\t}\n\twindow.bagIds=ids;\n} \nreturn ids;"}}},{"id":"689254c63d8b6aa8df033691","name":"BR Page Type","variable":{"type":"global_variable","global_variable":{"name":"utag_data.page.type"}}},{"id":"689468c1181a7ca4ed37e2c4","name":"BR Page Category","variable":{"type":"global_variable","global_variable":{"name":"utag_data.page.category"}}},{"id":"689498bd181a7ca4ed37ef90","name":"BR Product ID (PDP Only)","variable":{"type":"global_variable","global_variable":{"name":"utag_data.products[0].id"}}},{"id":"68a88a1b00c874c8b139e49a","name":"Recommendations Social Proof Array (Top Sellers 22/8/25)","variable":{"type":"custom_function","custom_function":{"body":"[\r\n  \"CSB0255SKY\",\"CSB0255WHT\",\"CSH0013AFB\",\"CSH0015AQA\",\"CSH0015COB\",\"CSH0015LLC\",\"CSH0015MCA\",\r\n  \"CSH0015NAV\",\"CSH0015OAT\",\"CSH0015OCE\",\"CSH0015OLV\",\"CSH0015WHT\",\"CSR0906BWT\",\"CSR2089OAT\",\r\n  \"CSR2111MCA\",\"CSR2111SKY\",\"FOA0004IDG\",\"FOA0004LLC\",\"FOA0004SKY\",\"FOA0004WHT\",\"FOA0009CFW\",\r\n  \"FOA0009SKY\",\"FOA0009WHT\",\"FOB0188WHT\",\"FOB0636COB\",\"FOB0785WHT\",\"FON0216WHT\",\"FON0219WHT\",\r\n  \"FON0409SKY\",\"FON0409WHT\",\"FON0410RYL\",\"FON0410SKY\",\"FON0412WSK\",\"FON0413RYL\",\"FON0540SKY\",\r\n  \"FON0540WHT\",\"FON0671WHT\",\"FON0677WHT\",\"FON0740SKY\",\"FON2613SKY\",\"FON2628CFW\",\"FON2631SKY\",\r\n  \"FON2647DPK\",\"FON2648GRN\",\"FON2648LLC\",\"FOR2362WHT\",\"FOR2406SKY\",\"JEP0317NAV\",\"JEP0317WHT\",\r\n  \"TRC0270NAV\",\"CLX0027NON\",\"CLX0028NON\",\"CSH0018NAV\",\"CSR0806WHT\",\"CSR0905WHT\",\"CSR0968WHT\",\r\n  \"CSR2052OLV\",\"CSR2056COB\",\"CSR2056NAV\",\"CSR2056WHT\",\"CSR2114OLV\",\"FOA0005OCE\",\"FOA0009LLC\",\r\n  \"FOA0009PNK\",\"FOA0009SLV\",\"FOB0188SKY\",\"FOB0765DEN\",\"FOB0806TPE\",\"FOB0815IDG\",\"FOB0824RYL\",\r\n  \"FON0219BLU\",\"FON0409NAV\"\r\n]\r\n"}}},{"id":"68c91ba91c00bfc935319bd9","name":"Page Name","variable":{"type":"global_variable","global_variable":{"name":"utag_data.page.name"}}},{"id":"68fb434029827191de90a56e","name":"Page Type","variable":{"type":"global_variable","global_variable":{"name":"utag_data.page.type"}}},{"id":"68fb434029827191de90a572","name":"Country Site","variable":{"type":"global_variable","global_variable":{"name":"utag_data.global.sfcc_country"}}},{"id":"69b7e0c02a7591e216cdb2da","name":"BR Site Language","variable":{"type":"global_variable","global_variable":{"name":"utag_data.global.site_language"}}},{"id":"69b7e0c12a7591e216cdb2de","name":"BR Country Site","variable":{"type":"global_variable","global_variable":{"name":"utag_data.global.sfcc_country"}}},{"id":"69b7e0c12a7591e216cdb2e2","name":"BR Page Type","variable":{"type":"global_variable","global_variable":{"name":"utag_data.page.type"}}},{"id":"69b7e0c12a7591e216cdb2e6","name":"Product ID","variable":{"type":"global_variable","global_variable":{"name":"utag_data.products[0].id"}}},{"id":"69b7e0c12a7591e216cdb2ea","name":"Products Array","variable":{"type":"global_variable","global_variable":{"name":"utag_data.products"}}}]}}