1 2 3<html> 4 5<head> 6 <meta charset="UTF-8"> 7 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 8 9 <!-- Google Tag Manager --> 10
10<script>
vendor: 433 bytes, lines 10-17
10(function (w, d, s, l, i) { 11 w[l] = w[l] || []; w[l].push({ 12 'gtm.start': 13 new Date().getTime(), event: 'gtm.js' 14 }); var f = d.getElementsByTagName(s)[0], 15 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 16 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); 17 })(window, document, 'script', 'dataLayer', '
17GTM-TG8L7C
vendor: 3 bytes, line 17
17');
17</script>
17 18 <!-- End Google Tag Manager --> 19 20 <title>Sports we cover | Insure4Sport</title> 21<meta name="description" content="Explore the list of the different types of sports you can insure through Insure4Sport. Sport not listed? Get a quote to see if you could get cover."/> 22<meta property="og:url" content="https://www.insure4sport.co.uk/sport/"/> 23<link rel="canonical" href="https://www.insure4sport.co.uk/sport/"/> 24 25 26 <link rel="preconnect" href="https://fonts.googleapis.com"> 27 <link rel="preconnect" crossorigin href="https://fonts.gstatic.com"> 28 29 <link rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'" href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&family=Ubuntu:ital,wght@0,300;0,400;0,500;0,700;1,300;1,400;1,500;1,700&display=swap"> 30 31 <noscript> 32 <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&family=Ubuntu:ital,wght@0,300;0,400;0,500;0,700;1,300;1,400;1,500;1,700&display=swap"> 33 </noscript> 34 35 <link rel="shortcut icon" href="/assets/favicon.ico"> 36 37 38 39 40 <style>*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}h1,h2,h3,h4{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}strong{font-weight:bolder}button{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button{text-transform:none}button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}h1,h2,h3,h4,p{margin:0}ul{list-style:none;margin:0;padding:0}img,svg,iframe{display:block;vertical-align:middle}img{max-width:100%;height:auto}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%;margin-right:auto;margin-left:auto}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.left-0{left:0}.right-0{right:0}.top-0{top:0}.top-\[-2px\]{top:-2px}.top-\[-50px\]{top:-50px}.top-full{top:100%}.z-10{z-index:10}.z-\[998\]{z-index:998}.z-\[999\]{z-index:999}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-last{order:9999}.m-0{margin:0}.m-auto{margin:auto}.mx-0{margin-left:0;margin-right:0}.mx-auto{margin-left:auto;margin-right:auto}.mb-10{margin-bottom:75px}.mb-2{margin-bottom:6px}.mb-4{margin-bottom:12px}.mb-6{margin-bottom:20px}.ml-2{margin-left:6px}.ml-6,.ml-\[20px\]{margin-left:20px}.mr-2{margin-right:6px}.mr-\[10px\]{margin-right:10px}.mr-\[15px\]{margin-right:15px}.mt-0{margin-top:0}.mt-10{margin-top:75px}.mt-6{margin-top:20px}.block{display:block}.inline-block{display:inline-block}
40.flex{display:flex}.inline-flex{display:inline-flex}.h-5{height:15px}.h-7{height:30px}.h-\[100px\]{height:100px}.h-\[calc\(100vh-100px\)\]{height:calc(100vh - 100px)}.w-28{width:7rem}.w-5{width:15px}.w-7{width:30px}.w-\[100\%\]{width:100%}.w-\[100px\]{width:100px}.w-full{width:100%}.max-w-\[200px\]{max-width:200px}.max-w-\[275px\]{max-width:275px}.max-w-\[90\%\]{max-width:90%}.max-w-screen-xl{max-width:1280px}.flex-1{flex:1 1 0%}.flex-grow{flex-grow:1}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-\[10deg\]{--tw-rotate: 10deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-\[5\%\]{gap:5%}.overflow-auto{overflow:auto}.rounded{border-radius:.25rem}.rounded-\[100\%\]{border-radius:100%}.border{border-width:1px}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-t-\[3px\]{border-top-width:3px}.border-solid{border-style:solid}.border-\[\#cadb36\]{--tw-border-opacity: 1;border-color:rgb(202 219 54 / var(--tw-border-opacity))}.border-\[\#cbcbcb\]{--tw-border-opacity: 1;border-color:rgb(203 203 203 / var(--tw-border-opacity))}.border-\[\#ff8200\]{--tw-border-opacity: 1;border-color:rgb(255 130 0 / var(--tw-border-opacity))}.border-\[\#ffffff8c\]{border-color:#ffffff8c}.border-t-\[\#838383\]{--tw-border-opacity: 1;border-top-color:rgb(131 131 131 / var(--tw-border-opacity))}.bg-\[\#434343\]{--tw-bg-opacity: 1;background-color:rgb(67 67 67 / var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity))}.bg-darkgrey{--tw-bg-opacity: 1;background-color:rgb(45 41 38 / var(--tw-bg-opacity))}.bg-primary{--tw-bg-opacity: 1;background-color:rgb(202 219 54 / var(--tw-bg-opacity))}.bg-redGradient{--tw-bg-opacity: 1;background-color:rgb(225 82 61 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-opacity-60{--tw-bg-opacity: .6}.bg-cover{background-size:cover}.fill-current{fill:currentColor}.fill-primary{fill:#cadb36}.p-0{padding:0}.p-2{padding:6px}.p-4{padding:12px}.p-5{padding:15px}.px-1{padding-left:4px;padding-right:4px}.px-2{padding-left:6px;padding-right:6px}.px-6{padding-left:20px;padding-right:20px}.px-8{padding-left:40px;padding-right:40px}.px-\[15px\]{padding-left:15px;padding-right:15px}.py-1{padding-top:4px;padding-bottom:4px}.py-2{padding-top:6px;padding-bottom:6px}.py-3{padding-top:10px;padding-bottom:10px}.py-6{padding-top:20px;padding-bottom:20px}.py-8{padding-top:40px;padding-bottom:40px}.pb-5{padding-bottom:15px}.pb-\[100px\]{padding-bottom:100px}.pl-0{padding-left:0}.pr-3{padding-right:10px}.pt-4{padding-top:12px}.pt-\[20px\]{padding-top:20px}.pt-\[75px\]{padding-top:75px}.text-center{text-align:center}.text-\[1\.5em\]{font-size:1.5em}.text-\[11px\]{font-size:11px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[1em\]{font-size:1em}.text-\[22px\]{font-size:22px}.text-\[46px\]{font-size:46px}.text-md{font-size:18px;line-height:26px}.font-\[600\]{font-weight:600}.font-bold{font-weight:700}.font-normal{font-weight:400}.uppercase{text-transform:uppercase}.leading-5{line-height:1.25rem}.leading-\[0\.8\]{line-height:.8}.leading-\[1\]{line-height:1}.text-\[\#333\]{--tw-text-opacity: 1;color:rgb(51 51 51 / var(--tw-text-opacity))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.text-primary{--tw-text-opacity: 1;color:rgb(202 219 54 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.no-underline{text-decoration-line:none}.shadow-\[0_2px_10px_0px_\#0000001f\]{--tw-shadow: 0 2px 10px 0px #0000001f;
40--tw-shadow-colored: 0 2px 10px 0px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}[x-cloak]{display:none!important}body{font-family:Ubuntu,sans-serif;font-optical-sizing:auto;font-style:normal}.content p{margin:0 0 1em;padding:0;width:100%;color:#333}.content a:not([class]){text-decoration:underline;color:#cadb36}.content p:last-child{margin-bottom:0}.hero-block .trustpilot-widget{margin-top:25px}.menu-column-title{position:relative}.menu-column-title:before{content:"";width:100%;height:2px;background-color:#d8d8d875;position:absolute;bottom:-10px}.hero-block h1{text-shadow:2px 2px 0px rgba(0,0,0,.3);line-height:1.25}.hero-block__main-content h2{font-size:28px;margin:0 0 15px;line-height:1.25}.card-title:before{content:"";width:100%;height:2px;background-color:#d8d8d875;position:absolute;bottom:-5px}@media (max-width:767px){.main-menu-column{background-color:transparent;border-top:0}.main-menu-column-inner{flex-direction:column}.main-menu-column-inner h3:before{display:none}.menu-column-title{padding:10px 20px;margin-bottom:0}.main-menu-column-item{background-color:#292929;padding:8px 0}.main-menu-sub-item{margin:0}.main-menu-sub-item a{padding:8px 20px}.main-menu-sub-item svg{display:none}.card-item{width:calc(100% - 40px);margin:10px 20px}.main-menu{display:flex;flex-direction:column-reverse}.single-menu-item{padding-top:30px}.single-menu-item .main-menu-column{padding-top:0}}.\[\&\>li\:last-child\>a\]\:border-b-0>li:last-child>a{border-bottom-width:0px}.\[\&\>li\>a\]\:block>li>a{display:block}.\[\&\>li\>a\]\:border-r-\[\#d8d8d894\]>li>a{border-right-color:#d8d8d894}.\[\&\>li\>a\]\:px-3>li>a{padding-left:10px;padding-right:10px}.\[\&\>li\>a\]\:py-2>li>a{padding-top:6px;padding-bottom:6px}.\[\&\>li\>a\]\:text-\[13px\]>li>a{font-size:13px}.\[\&\>p\]\:text-sm>p{font-size:14px;line-height:20px}.\[\&\>p\]\:text-\[color\:var\(--mainTitle\)\]>p{color:var(--mainTitle)}</style> 41 42 43 <link rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'" href="/style.css"> 44 <noscript> 45 <link rel="stylesheet" href="/style.css"> 46 </noscript> 47 <link rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'" href="/css/rte.css"> 48 <noscript> 49 <link rel="stylesheet" href="/css/rte.css"> 50 </noscript> 51 <link rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'" href="/css/secondaryContent.css"> 52 <noscript> 53 <link rel="stylesheet" href="/css/secondaryContent.css"> 54 </noscript> 55
55<script type="module" src="/main.js"></script>
55 56 57 58</head> 59 60 61<body> 62 <!-- Google Tag Manager (noscript) -->
vendor: 71 bytes, lines 62-63
62 63 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
63GTM-TG8L7C
vendor: 93 bytes, lines 63-65
63" height="0" width="0" 64 style="display:none;visibility:hidden"></iframe></noscript> 65
65<!-- End Google Tag Manager (noscript) --> 66 <header x-data="{ 67 mobileMenuOpen: false, 68 isMobile: window.innerWidth < 768, 69 updateMobileState() { 70 const wasMobile = this.isMobile; 71 this.isMobile = window.innerWidth < 768; 72 if (wasMobile && !this.isMobile) { 73 this.mobileMenuOpen = false; 74 document.body.classList.remove('no-scroll'); 75 } 76 }, 77 toggleMobileMenu() { 78 this.mobileMenuOpen = !this.mobileMenuOpen; 79 document.body.classList.toggle('no-scroll', this.mobileMenuOpen); 80 }, 81 handleScroll() { 82 this.isFixed = window.pageYOffset > 300; 83 } 84 }" x-init=" 85 updateMobileState(); 86 window.addEventListener('resize', () => updateMobileState()); 87 " 88 class="bg-black border-t-[3px] border-[#ff8200] px-6 pt-4 pb-5 flex relative sticky z-[999] top-0 shadow-[0_2px_10px_0px_#0000001f] h-[100px] md:h-auto"> 89 90 <div x-ref="header" class="container flex mx-auto items-center justify-between"> 91 <logo class="flex items-center md:mr-auto mr-[10px]"> 92 <a href="/" class="max-w-[200px] md:max-w-full"> 93 <img src="/assets/logo.svg" alt="Insure4Sport Logo" /> 94 </a> 95 </logo> 96 <!-- Mobile chat button placeholder --> 97 <div x-show="isMobile" id="mobileChatButtonPlaceholder" class="mr-[15px] ml-[20px]"></div> 98 <!-- Mobile chat button placeholder --> 99 <button @click="toggleMobileMenu()" class="md:hidden text-primary"> 100 <svg class="w-7 h-7 text-primary" fill="none" stroke="currentColor" viewBox="0 0 24 24" 101 xmlns="http://www.w3.org/2000/svg"> 102 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path> 103 </svg> 104 </button> 105 106 <nav x-cloak 107 x-bind:class="{'opacity-0 -translate-x-full': !mobileMenuOpen, 'opacity-100 translate-x-0': mobileMenuOpen}" 108 class="flex flex-col z-[998] top-full overflow-auto p-0 border-t border-solid border-[#ffffff8c] md:border-0 md:pt-2 absolute h-[calc(100vh-100px)] pb-[100px] md:overflow-visible md:top-auto md:p-0 md:h-auto md:static left-0 w-[100%] md:w-auto bg-white md:bg-transparent md:block transition-all duration-300 ease-in-out transform md:transform-none md:opacity-100 md:border-none"> 109 110 111<style> 112 [x-cloak] { 113 display: none !important; 114 } 115</style> 116 117<ul 118 class="md:ml-[70px] relative md:justify-end bg-darkgrey p-5 md:border-none border-t border-solid border-t-[#838383] md:p-0 md:bg-transparent md:rounded-none order-last md:order2 flex flex-col md:flex-row [&>li>a]:block [&>li>a]:py-2 md:[&>li>a]:py-0 [&>li>a]:px-3 md:[&>li>a]:border-r-[1px] [&>li:last-child>a]:border-b-0 md:[&>li:last-child>a]:border-r-0 [&>li>a]:border-r-[#d8d8d894] [&>li>a]:text-[13px] font-bold text-white [&>li>a:hover]:underline"> 119 <li class="main-menu-top-item"> 120 <a href="https://www.insure4sport.co.uk/contact-us/" class="text-white flex items-center"> 121 Contact 122 </a> 123 </li> 124 <li class="main-menu-top-item"> 125 <a href="https://account.ripeinsurance.co.uk/login/" class="text-white flex items-center"> 126 Renew 127 </a> 128 </li> 129 <li class="main-menu-top-item"> 130 <a href="https://account.ripeinsurance.co.uk/login/" class="text-white flex items-center"> 131 Login 132 </a> 133 </li> 134</ul> 135 136<div class="order-3 bg-black" x-data="{ 137 showForMobile: false, 138 activeAccordion: null, 139 isDesktop: window.innerWidth >= 768, 140 dropdownOpen: false, 141 closeAllAccordions() { 142 this.activeAccordion = null; 143 } 144 }" x-init=" 145 $watch('isDesktop', value => { 146 if (value) { 147 activeAccordion = null; 148 } 149 }); 150 window.addEventListener('resize', () => { 151 isDesktop = window.innerWidth >= 768; 152 }); 153 window.addEventListener('click', (e) => { 154 if (!$el.contains(e.target)) { 155 closeAllAccordions(); 156 } 157 }); 158 "> 159 <nav 160 class="main-menu container mx-auto md:flex md:flex-row md:items-end md:justify-end md:items-center pt-[20px] border border-solid border-[#cadb36] md:border-none single-menu-item"> 161 <ul class="md:flex justify-end [&>li>a:hover]:text-white"> 162 <li x-data="{dropdownOpen: false, hasMenuColumns: true}" 163 class="main-menu-top-item"> 164 <a @click="isDesktop ? (hasMenuColumns ? dropdownOpen = !dropdownOpen : null) : (hasMenuColumns ? (dropdownOpen = !dropdownOpen, $event.preventDefault()) : null)" 165 class="text-white font-normal flex items-center" 166 :class="{'hidden': !isDesktop && true}" 167 href='#'> 168 <svg class="w-5 h-5 text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none"
169 viewBox="0 0 17 14"> 170 <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 171 d="M1 1h15M1 7h15M1 13h15"></path> 172 </svg> 173 <span class="ml-2">Menu</span> 174 </a> 175 176 <div x-cloak 177 x-show="(isDesktop && dropdownOpen) || (!isDesktop && ((dropdownOpen && hasMenuColumns) || true))" 178 :class="{'relative': !isDesktop, 'absolute z-[999]': isDesktop}" @click.away="dropdownOpen = false" 179 class="main-menu-column left-0 right-0 bg-darkgrey py-6 md:pt-8 md:pb-11 md:px-5 md:mt-[22px] lg:shadow-ul w-full border-t-2 border-[#cbcbcb]" 180 x-transition:enter="transition ease-out duration-200 transform" 181 x-transition:enter-start="opacity-0 -translate-y-2" 182 x-transition:enter-end="opacity-100 translate-y-0" 183 x-transition:leave="transition ease-out duration-200" x-transition:leave-start="opacity-100" 184 x-transition:leave-end="opacity-0"> 185 <div class=" main-menu-column-inner flex flex-wrap container mx-auto gap-[5%]"> 186 187 <!-- ------RENDER MENU COLUMNS------ --> 188 189 <div class="flex-1 md:max-w-[500px]"> 190 <h3 191 class="menu-column-title text-white font-bold mb-6 text-[16px] md:cursor-default flex justify-between items-center md:leading-normal"> 192 <a href="/sport/" 193 class="text-white hover:text-white transition duration-300 ease-in-out flex-grow hover:text-white"> 194 Who we insure 195 </a> 196 <button 197 @click="!isDesktop && (activeAccordion = activeAccordion === '12a8c8f3-d877-44d7-92d0-13d0a698f447' ? null : '12a8c8f3-d877-44d7-92d0-13d0a698f447')" 198 class="p-2 md:hidden focus:outline-none" aria-label="Toggle menu"> 199 <svg class="w-7 h-7 fill-current text-white transition-all duration-300 ease-in-out" 200 :class="{'rotate-180': activeAccordion === '12a8c8f3-d877-44d7-92d0-13d0a698f447'}" 201 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"> 202 <path 203 d="M9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z" /> 204 </svg> 205 </button> 206 </h3> 207 <div x-show="isDesktop || activeAccordion === '12a8c8f3-d877-44d7-92d0-13d0a698f447'" x-collapse.duration.300ms 208 class="md:!block main-menu-column-item"> 209 210 <!-- ------RENDER SUB MENU ITEMS------ --> 211 212 <ul class="main-menu-sub-item-wrapper"> 213 <li class="mb-2 main-menu-sub-item"> 214 <a href="/personal-trainer-insurance/" 215 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 216 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 217 width="12" height="12"> 218 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 219 </svg> 220 Personal Trainers 221 </a> 222 </li> 223 <li class="mb-2 main-menu-sub-item"> 224 <a href="/fitness-instructor-insurance/" 225 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 226 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 227 width="12" height="12"> 228 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 229 </svg> 230 Fitness Instru
230ctors 231 </a> 232 </li> 233 <li class="mb-2 main-menu-sub-item"> 234 <a href="/players-insurance/" 235 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 236 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 237 width="12" height="12"> 238 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 239 </svg> 240 Players & participants 241 </a> 242 </li> 243 <li class="mb-2 main-menu-sub-item"> 244 <a href="/sports-coaching-insurance/" 245 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 246 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 247 width="12" height="12"> 248 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 249 </svg> 250 Sports coaches 251 </a> 252 </li> 253 <li class="mb-2 main-menu-sub-item"> 254 <a href="/sports-team-insurance/" 255 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 256 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 257 width="12" height="12"> 258 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 259 </svg> 260 Sports teams 261 </a> 262 </li> 263 <li class="mb-2 main-menu-sub-item"> 264 <a href="/gym-studio-insurance/" 265 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 266 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 267 width="12" height="12"> 268 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 269 </svg> 270 Gym & fitness studios 271 </a> 272 </li> 273 <li class="mb-2 main-menu-sub-item"> 274 <a href="/sports-club-insurance/" 275 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 276 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 277 width="12" height="12"> 278 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 279 </svg> 280 Sports clubs 281 </a> 282 </li> 283 </ul> 284 285 <!-- ------RENDER MENU CARD ITEMS------ --> 286 287 </div> 288 289 </div> 290 <div class="flex-1 md:max-w-[500px]"> 291 <h3 292 class="menu-column-title text-white font-bold mb-6 text-[16px] md:cursor-default flex justify-between items-center md:leading-normal"> 293 <a href="/sport/" 294 class="text-white hover:text-white transition duration-300 ease-in-out flex-grow hover:text-white"> 295 Sports we cover 296 </a> 297 <button 298 @click="!isDesktop && (activeAccordion = activeAccordion === 'a9224e33-42ec-4ffc-a5d4-4fe7227b5f63' ? null : 'a9224e33-42ec-4ffc-a5d4-4fe7227b5f63')" 299 class="p-2 md:hidden focu
299s:outline-none" aria-label="Toggle menu"> 300 <svg class="w-7 h-7 fill-current text-white transition-all duration-300 ease-in-out" 301 :class="{'rotate-180': activeAccordion === 'a9224e33-42ec-4ffc-a5d4-4fe7227b5f63'}" 302 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"> 303 <path 304 d="M9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z" /> 305 </svg> 306 </button> 307 </h3> 308 <div x-show="isDesktop || activeAccordion === 'a9224e33-42ec-4ffc-a5d4-4fe7227b5f63'" x-collapse.duration.300ms 309 class="md:!block main-menu-column-item"> 310 311 <!-- ------RENDER SUB MENU ITEMS------ --> 312 313 <ul class="main-menu-sub-item-wrapper"> 314 <li class="mb-2 main-menu-sub-item"> 315 <a href="/sport/yoga-insurance/" 316 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 317 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 318 width="12" height="12"> 319 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 320 </svg> 321 Yoga 322 </a> 323 </li> 324 <li class="mb-2 main-menu-sub-item"> 325 <a href="/sport/football-insurance/" 326 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 327 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 328 width="12" height="12"> 329 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 330 </svg> 331 Football 332 </a> 333 </li> 334 <li class="mb-2 main-menu-sub-item"> 335 <a href="/sport/dance-insurance/" 336 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 337 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 338 width="12" height="12"> 339 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 340 </svg> 341 Dance 342 </a> 343 </li> 344 <li class="mb-2 main-menu-sub-item"> 345 <a href="/sport/pilates-insurance/" 346 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 347 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 348 width="12" height="12"> 349 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 350 </svg> 351 Pilates 352 </a> 353 </li> 354 <li class="mb-2 main-menu-sub-item"> 355 <a href="/fitness-class-insurance/" 356 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 357 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 358 width="12" height="12"> 359 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 360 </svg> 361 Fitness class 362 </a> 363 </li> 364 <li class="mb-2 main-menu-sub-item"> 365 <a href="/sport/gym-member-insurance/" 366 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 367 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 368 width="12" height="12"> 369 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 370 </svg> 371 Gym member 372 </a> 373 </li> 374 <li class="mb-2 main-menu-sub-item"> 375 <a href="/multi-sports-cover/" 376 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 377 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 378 width="12" height="12"> 379 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 380 </svg> 381 Multi-sports cover 382 </a> 383 </li> 384 <li class="mb-2 main-menu-sub-item"> 385 <a href="/sport/golf-insurance/" 386 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 387 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 388 width="12" height="12"> 389 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 390 </svg> 391 Golf 392 </a> 393 </li> 394 </ul> 395 396 <!-- ------RENDER MENU CARD ITEMS------ --> 397 398 </div> 399 400 </div> 401 <div class="flex-1 md:max-w-[500px]"> 402 <h3 403 class="menu-column-title text-white font-bold mb-6 text-[16px] md:cursor-default flex justify-between items-center md:leading-normal"> 404 <a href="/about/" 405 class="text-white hover:text-white transition duration-300 ease-in-out flex-grow hover:text-white"> 406 About us 407 </a> 408 <button 409 @click="!isDesktop && (activeAccordion = activeAccordion === '0ec4b790-b836-42b8-9333-ad842dd55404' ? null : '0ec4b790-b836-42b8-9333-ad842dd55404')" 410 class="p-2 md:hidden focu
410s:outline-none" aria-label="Toggle menu"> 411 <svg class="w-7 h-7 fill-current text-white transition-all duration-300 ease-in-out" 412 :class="{'rotate-180': activeAccordion === '0ec4b790-b836-42b8-9333-ad842dd55404'}" 413 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"> 414 <path 415 d="M9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z" /> 416 </svg> 417 </button> 418 </h3> 419 <div x-show="isDesktop || activeAccordion === '0ec4b790-b836-42b8-9333-ad842dd55404'" x-collapse.duration.300ms 420 class="md:!block main-menu-column-item"> 421 422 <!-- ------RENDER SUB MENU ITEMS------ --> 423 424 <ul class="main-menu-sub-item-wrapper"> 425 <li class="mb-2 main-menu-sub-item"> 426 <a href="/faqs/" 427 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 428 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 429 width="12" height="12"> 430 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 431 </svg> 432 FAQs 433 </a> 434 </li> 435 <li class="mb-2 main-menu-sub-item"> 436 <a href="/partners/" 437 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 438 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 439 width="12" height="12"> 440 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 441 </svg> 442 Partners 443 </a> 444 </li> 445 <li class="mb-2 main-menu-sub-item"> 446 <a href="/important-documents/" 447 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 448 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 449 width="12" height="12"> 450 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 451 </svg> 452 Important documents 453 </a> 454 </li> 455 <li class="mb-2 main-menu-sub-item"> 456 <a href="/insurance-summary/" 457 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 458 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 459 width="12" height="12"> 460 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 461 </svg> 462 Insurance summary 463 </a> 464 </li> 465 <li class="mb-2 main-menu-sub-item"> 466 <a href="/our-experts/" 467 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 468 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 469 width="12" height="12"> 470 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 471 </svg> 472 Our experts 473 </a> 474 </li> 475 </ul> 476 477 <!-- ------RENDER MENU CARD ITEMS------ --> 478 479 </div> 480 481 </div> 482 <div class="flex-1 md:max-w-[500px]"> 483 <h3 484 class="menu-column-title text-white font-bold mb-6 text-[16px] md:cursor-default flex justify-between items-center md:leading-normal">
485 <span class="flex-grow"> 486 Existing policyholders 487 </span> 488 <button 489 @click="!isDesktop && (activeAccordion = activeAccordion === 'bd4486fd-08a0-4d4c-a407-e890b1f8b2d3' ? null : 'bd4486fd-08a0-4d4c-a407-e890b1f8b2d3')" 490 class="p-2 md:hidden focus:outline-none" aria-label="Toggle menu"> 491 <svg class="w-7 h-7 fill-current text-white transition-all duration-300 ease-in-out" 492 :class="{'rotate-180': activeAccordion === 'bd4486fd-08a0-4d4c-a407-e890b1f8b2d3'}" 493 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"> 494 <path 495 d="M9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z" /> 496 </svg> 497 </button> 498 </h3> 499 <div x-show="isDesktop || activeAccordion === 'bd4486fd-08a0-4d4c-a407-e890b1f8b2d3'" x-collapse.duration.300ms 500 class="md:!block main-menu-column-item"> 501 502 <!-- ------RENDER SUB MENU ITEMS------ --> 503 504 <ul class="main-menu-sub-item-wrapper"> 505 <li class="mb-2 main-menu-sub-item"> 506 <a href="/log-in/" 507 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 508 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 509 width="12" height="12"> 510 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 511 </svg> 512 Login 513 </a> 514 </li> 515 <li class="mb-2 main-menu-sub-item"> 516 <a href="/refer-a-friend/" 517 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 518 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 519 width="12" height="12"> 520 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 521 </svg> 522 Refer a friend 523 </a> 524 </li> 525 <li class="mb-2 main-menu-sub-item"> 526 <a href="/how-to-claim/" 527 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 528 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 529 width="12" height="12"> 530 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 531 </svg> 532 How to claim 533 </a> 534 </li> 535 <li class="mb-2 main-menu-sub-item"> 536 <a href="/help-and-support/" 537 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 538 <svg class="fill-primary -rotate-90 mr-2" xmlns="http://www.w3.org/2000/svg" 539 width="12" height="12"> 540 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 541 </svg> 542 Help and support 543 </a> 544 </li> 545 </ul> 546 547 <!-- ------RENDER MENU CARD ITEMS------ --> 548 549 <div class="card-item mt-6 inline-block bg-[#434343] py-3 px-6 rounded"> 550 <h4 class="card-title text-white font-bold mb-4 relative text-[16px]"> 551 Sports news and advice </h4> 552 <ul> 553 <li class="mb-2"> 554 <a href="/blog/" 555 class="text-white hover:text-white transition duration-300 ease-in-out flex items-center text-[15px] hover:text-white"> 556 <svg class="fill-primary -rotate-90 mr-2" 557 xmlns="http://www.w3.org/2000/svg" width="12" height="12"> 558 <path d="M10 2.586 11.414 4 6 9.414.586 4 2 2.586l4 4z" /> 559 </svg> 560 Blog 561 </a> 562 </li> 563 </ul> 564 </div> 565 </div> 566 567 </div> 568 </div> 569 </div> 570 </li> 571 </ul> 572 573 574 <div class="ml-6"> 575 <a href="https://quote.insure4sport.co.uk/#/your-cover/select-cover-type" 576 class="updateUrl group inline-flex text-[14px] py-2 px-8 md:py-2 md:px-6 text-center uppercase font-[600] text-black no-underline bg-primary hover:bg-[#7fc142] hover:text-white"> 577 Get a quote 578 </a> 579 </div> 580 <div class="ml-6" x-data="{ isOpen: false }"> 581 <div id="desktopChatButton" x-data="{ 582 isOpen: false, 583 breakpoint: 540, 584 toggleWidget() { 585 if (window.innerWidth < this.breakpoint) { 586 this.openWidget(); 587 } else { 588 this.isOpen = !this.isOpen; 589 this.$nextTick(() => { 590 if (this.isOpen) { 591 this.openWidget(); 592 } else { 593 this.closeWidget(); 594 } 595 }); 596 } 597 }, 598 openWidget() { 599 try { 600 zE('messenger', 'open'); 601 } catch (e) { 602 try { 603 zE('webWidget', 'open'); 604 } catch (e2) { 605 console.error('Failed to open Zendesk widget:', e2); 606 } 607 } 608 }, 609 closeWidget() { 610 try { 611 zE('messenger', 'close'); 612 } catch (e) { 613 try { 614 zE('webWidget', 'close'); 615 } catch (e2) { 616 console.error('Failed to close Zendesk widget:', e2); 617 } 618 } 619 } 620 }"> 621 <a href="javascript:void(0)" @click="toggleWidget" 622 class="block font-bold group items-center gap-[5px] inline-flex border-solid border-2 border-[color:var(--text)] rounded-[100%] md:rounded-[35px] text-[14px] p-[8px] md:p-[5px_13px] text-center text-white no-underline transition ease-in-out duration-300 hover:border-primary hover:bg-primary hover:text-white group-hover:fill-primary"> 623 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="18" viewBox="0 0 20 18" fill="none"> 624 <path 625 d="M18.6606 3.81259C19.5535 4.90634 19.9999 6.10053 19.9999 7.39518C19.9999 8.68982 19.5535 9.88774 18.6606 10.9889C17.7677 12.0827 16.5549 12.9495 15.0222 13.5894C13.4895 14.2218
62511.8154 14.538 9.99988 14.538C9.47905 14.538 8.93961 14.5083 8.38157 14.4487C6.90836 15.7508 5.19705 16.6511 3.24765 17.1496C2.88306 17.2538 2.45896 17.3357 1.97532 17.3952C1.84884 17.4101 1.73351 17.3766 1.62934 17.2947C1.53262 17.2129 1.46937 17.105 1.43961 16.9711V16.9599C1.41729 16.9301 1.41357 16.8855 1.42845 16.826C1.45077 16.7665 1.45821 16.7293 1.45077 16.7144C1.45077 16.6995 1.46937 16.6623 1.50657 16.6028C1.54378 16.5507 1.5661 16.5172 1.57354 16.5023C1.58098 16.4949 1.60702 16.4651 1.65166 16.413C1.69631 16.3609 1.72607 16.3275 1.74095 16.3126C1.79303 16.2531 1.90836 16.1229 2.08693 15.922C2.2655 15.7285 2.39199 15.5871 2.4664 15.4979C2.54824 15.416 2.66357 15.2709 2.81238 15.0626C2.96863 14.8543 3.0914 14.6645 3.18068 14.4934C3.26997 14.3223 3.37041 14.1028 3.48202 13.8349C3.59363 13.5671 3.69035 13.2843 3.7722 12.9867C2.60404 12.3245 1.68143 11.506 1.00434 10.5313C0.334699 9.55664 -0.00012207 8.51125 -0.00012207 7.39518C-0.00012207 6.42791 0.264015 5.5053 0.792289 4.62732C1.32056 3.7419 2.03113 2.97925 2.92399 2.33937C3.81684 1.69949 4.88083 1.19354 6.11595 0.821515C7.35107 0.442051 8.64571 0.252319 9.99988 0.252319C11.8154 0.252319 13.4895 0.57226 15.0222 1.21214C16.5549 1.84458 17.7677 2.7114 18.6606 3.81259Z" 626 fill="#cadb36" class="transition ease-in-out duration-300 group-hover:fill-white" /> 627 </svg> 628 <span class="hidden md:block">Chat</span> 629 </a> 630 </div> 631 </div> 632 </nav> 633</div> 634
635<script> 636 document.addEventListener('DOMContentLoaded', function () { 637 const chatButton = document.getElementById('desktopChatButton'); 638 const mobilePlaceholder = document.getElementById('mobileChatButtonPlaceholder'); 639 const originalParent = chatButton ? chatButton.parentElement : null; 640 641 function moveChatButton() { 642 if (!chatButton || !mobilePlaceholder || !originalParent) return; 643 644 if (window.innerWidth < 768) { 645 mobilePlaceholder.appendChild(chatButton); 646 chatButton.style.display = 'block'; // Ensure the button is visible 647 } else { 648 originalParent.appendChild(chatButton); 649 chatButton.style.display = 'block'; // Ensure the button is visible 650 } 651 } 652 653 window.addEventListener('resize', moveChatButton); 654 moveChatButton(); 655 }); 656</script>
656 657 658 </nav> 659 </div> 660 </div> 661 </header> 662 663 664 665<div class="bg-lightgrey"> 666 <div class="container"> 667 668 669 <ul class="breadcrumb flex py-2 px-4 md:px-0"> 670 <li class="text-xs"> 671 <a class="text-xs text-primary" href="/">Home</a> 672 <span class="divider">></span> 673 </li> 674 675 <li class="text-xs active pl-2">Sport</li> 676 </ul> 677 678 </div> 679</div> 680 681 682<main> 683 684 685 686 687<style> 688 .hero-block.min-h-\[ 689 690 500 691 px\] { 692 min-height: 693 500px; 694 } 695 696 @media screen and (min-width: 1024px) { 697 .hero-block__content { 698 width: 699 80%; 700 } 701 702 .container__inner { 703 width: 80%; 704 max-width: 50%; 705 } 706 707 .hero-block__roundel { 708 width: 709 100%; 710 } 711 712 .hero-gc .hero-block__content { 713 width: 50%; 714 } 715 716 .hero-block__main-content .column { 717 padding: 0 !important; // negate column padding if used inside hero 718 } 719 } 720 721 .hero-block { 722 overflow: hidden; 723 } 724 725 .hero-block__media { 726 position: absolute; 727 inset: 0; 728 z-index: 0; 729 display: block; 730 } 731 732 .hero-block__media img { 733 display: block; 734 width: 100%; 735 height: 100%; 736 object-fit: cover; 737 object-position: top; 738 } 739 740 @media screen and (min-width: 1024px) { 741 .hero-block__media img { 742 object-position: center; 743 } 744 } 745 746 @media screen and (max-width: 768px) { 747 .hero-block__content { 748 width: 100% !important; 749 } 750 } 751 752 .hero-centralised .hero-block__content { 753 margin: 0 auto; 754 } 755 756 .hero-centralised h1 { 757 text-align: center; 758 } 759</style> 760 761 <style> 762 .heroBgDisplay { 763 background-position: top; 764 } 765 </style> 766 <style> 767 @media (min-width: 1024px) { 768 .heroBgDisplay { 769 background-position: center; 770 } 771 } 772 </style> 773 774 775<div class="heroBgDisplay hero-block hero-left bg-cover lg:bg-center relative pt-[75px]"> 776 <picture class="hero-block__media" aria-hidden="true"> 777 <source media="(max-width: 768px)" srcset="/media/zdxg5wgy/header-m-sportsteam.webp" /> 778 <img src="/media/05sfaprh/header-d-sportsteam.webp" alt="" fetchpriority="high" decoding="async" /> 779 </picture> 780 <div 781 class="z-10 px-1 md:px-[15px] absolute top-0 bg-white bg-opacity-60 w-full flex justify-center items-center py-3"> 782 <span class="text-[#333] font-bold text-[11px] md:text-sm leading-5 pr-3 py-1">Underwritten by Aviva Insurance 783 Limited</span> 784 <img src="/assets/aviva-logo.png" alt="" class="w-28 md:w-32"> 785 </div> 786 <div class="container relative z-[1] flex justify-between mx-auto mt-6"> 787 <div class="hero-block__content px-[15px]"> 788 <h1 789 class="text-center text-[46px] md:text-left md:text-[56px] lg:text-[64px] text-white font-bold mt-0 mx-0 mb-2 lg:mb-6"> 790 Sports we cover</h1> 791 </div> 792 </div> 793 <div class="container flex-wrap relative z-[1] flex justify-center md:justify-between mx-auto mt-10 lg:mt-5"> 794 <div class="px-[15px] order-2 lg:order-1 container__inner mb-10 relative lg:static"> 795 <div class="relative md:absolute top-[-50px] md:right-[-150px] lg:static lg:right-0 lg:top-0"> 796 <div 797 class="flex justify-center relative lg:absolute md:top-[15px] md:right-[15px] lg:top-[unset] lg:bottom-[30%] 2xl:right-[20px] 2xl:bottom-[50%]"> 798 <div class="bg-redGradient w-[100px] h-[100px] md:w-[130px] md:h-[130px] lg:w-[180px] lg:h-[180px] flex items-center justify-center rounded-[100%] rotate-[10deg] text-center" 799 x-data="{ 800 discountCode: null, 801 webCode: null, 802 fetchData() {
803 const urlParams = new URLSearchParams(window.location.search); 804 const explicitRef = urlParams.get('ref') || ''; 805 const fallbackWebCode = sessionStorage.getItem('webCode') || ''; 806 807 // ð pick product by current URL 808 const path = (window.location.pathname || '').toLowerCase(); 809 const product = path.includes('/sport/golf-insurance') ? 'Insure4SportGolf' : 'Insure4Sport2012'; 810 const assignedCampaignUniqueId = window.getAssignedCampaignUniqueId ? window.getAssignedCampaignUniqueId(product) : ''; 811 812 const sourceIdentifier = explicitRef || fallbackWebCode || 'default'; 813 const retryWithDefaultOn404 = !!assignedCampaignUniqueId; 814 815 window.fetchJuiceSource(product, sourceIdentifier, { 816 campaignUniqueId: assignedCampaignUniqueId, 817 retryWithDefaultOn404, 818 persistCampaignUniqueId: true 819 }) 820 .then(data => { 821 const discountPercentage = Number(data && data.discountPercentage); 822 823 this.discountCode = Number.isFinite(discountPercentage) && discountPercentage > 0 824 ? Math.round(discountPercentage) + '%' 825 : '0%'; 826 this.webCode = data && data.webCode ? data.webCode : ''; 827 828 if (this.webCode) { 829 sessionStorage.setItem('webCode', this.webCode); 830 } 831 832 updateRefCodesOnLinks(this.webCode, data && data.campaignUniqueId ? data.campaignUniqueId : ''); 833 }) 834 .catch(err => console.error('Error fetching data:', err)); 835 } 836 }" x-init="fetchData()" x-show="discountCode !== null && discountCode !== '0%'" x-cloak> 837 <span class="text-white text-[22px] md:text-[30px] lg:text-[45px] leading-[1] relative lg:top-0"> 838 <strong class="relative top-[-2px] block text-[1.5em]" x-text="discountCode"></strong> 839 <span class="text-[1em] leading-[0.8]">OFF!</span> 840 </span> 841 </div> 842 </div> 843 </div> 844 <div 845 class="text-primary"> 846 847 <div class="text-center md:text-left order-1 md:order-2 mt-6 md:mt-0"> 848 <a href="https://quote.insure4sport.co.uk/#/your-cover/select-cover-type" 849 class="updateUrl group inline-flex text-md lg:text-lg py-3 lg:py-5 px-8 text-center uppercase font-[600] text-black no-underline bg-primary hover:bg-[#7fc142] hover:text-white"> 850 Get A Quote 851 </a> 852 </div> 853
853<script id="trustpilot-bootstrap" type="text/javascript" src="//widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js"></script>
853 854 <div class="trustpilot__container max-w-[275px] mx-auto md:mx-0 order-3"> 855 <!-- TrustBox widget - Micro Star --> <div class="trustpilot-widget" data-locale="en-GB" data-template-id="5419b732fbfb950b10de65e5" data-businessunit-id="5167141d000064000525e73f" data-style-height="24px" data-style-width="100%" data-theme="dark" data-token="d5062227-3564-4945-98ed-362daa15514c"> <a href="https://uk.trustpilot.com/review/insure4sport.co.uk" target="_blank" rel="noopener">Trustpilot</a> </div> <!-- End TrustBox widget --> 856 </div> 857 </div> 858 </div> 859 </div> 860 861</div> 862 <style> 863 @media (min-width: 1024px) { 864 .block-d2c75b4e-a1c8-473f-ae5c-1fc6144ff973 .customWidth { 865 max-width: 1000px; 866 margin: 0 auto; 867 } 868 } 869 </style> 870 871<div class="content p-4 md:p-8 m-auto block-d2c75b4e-a1c8-473f-ae5c-1fc6144ff973 mt-0 py-8 bg-white" 872 > 873 874 <div class="customWidth bg-white px-6"> 875 <h2 style="text-align: center;">Sports covered through <span class="green-text">Insure4Sport</span></h2> 876<p style="text-align: center;">Insure4Sport arranges insurance for a wide range of sports and activities, for individuals, coaches and teams. Explore the list below to find out if your sport is covered. Sport not listed? Get a quote online to see if your sport is covered.</p> 877 <style> 878 .block-3b4adcf3-e8a2-49e9-91a5-fb90930c3904 a { 879 --text: #000; 880 --button: #cadb36; 881 --buttonBG: #cadb36; 882 --buttonBGHover: #7fc142; 883 --buttonTextHover: #FFF; 884 --buttonBorderHover: #cadb36; 885 --uspBG: #FFF; 886 --arrowColor: #000; 887 --arrowColorHover: #FFF; 888 } 889 890 </style> 891 892 893<p class="block-3b4adcf3-e8a2-49e9-91a5-fb90930c3904 text-center"> 894 <a href="https://quote.insure4sport.co.uk/#/your-cover/select-cover-type" class="group inline-flex text-sm py-4 px-6 text-center text-[color:var(--text)] no-underline uppercase font-[600] bg-[color:var(--buttonBG)] hover:bg-[color:var(--buttonBGHover)] hover:text-[color:var(--buttonTextHover)]" > 895 Get a quote 896 <span class="relative left-[5px] top-[5px] text-primary"> 897 <svg xmlns="http://www.w3.org/2000/svg" class="fill-[color:var(--arrowColor)] group-hover:fill-[color:var(--arrowColorHover)]" width="12" height="12"> 898 <path d="M2.586 2 L4 0.586 L9.414 6 L4 11.414 L2.586 10 L6.586 6 Z" /> 899 </svg> 900 </span> 901 </a> 902</p> 903 </div> 904 </div> 905<section x-data="sportsAccordion()" x-init="init()" class="max-w-screen-xl mx-auto my-8"> 906 <!-- AâZ jump bar --> 907 <div class="flex flex-wrap gap-2 mb-6 justify-center md:justify-start"> 908 <template x-for="L in letters" :key="L"> 909 <button type="button" 910 @click="has(L) && (open[L]=true); $nextTick(()=>document.getElementById('sec-'+L)?.scrollIntoView({behavior:'smooth', block:'start'}))" 911 :class="has(L) ? 'bg-primary text-dark' : 'bg-primary opacity-25 cursor-not-allowed'" 912 class="text-center mx-2 h-[35px] w-[35px] md:h-[50px] md:w-[50px] p-2 md:p-4 roun
912ded-[30px]" x-text="L"> 913 </button> 914 </template> 915 </div> 916 917 <!-- Info card 918 <div class="bg-lime-50 border border-lime-200 rounded p-4 mb-6 text-sm"> 919 <div class="font-medium mb-1">Need a bit more information?</div> 920 <a href="/insurance-scope" class="underline">View our Insurance Scope</a> 921 <div class="text-gray-600 mt-1"> 922 for details on which risk group your sports fit into and any relevant coach to participant ratios. 923 </div> 924 </div>--> 925 926 <!-- Accordion AâZ --> 927 <template x-for="L in letters" :key="'sec-'+L"> 928 <div :id="'sec-'+L" class="mb-3 border rounded overflow-hidden"> 929 <!-- Header --> 930 <button type="button" @click="has(L) && (open[L] = !open[L])" 931 :class="has(L) ? 'bg-primary text-black' : 'bg-gray-200 cursor-not-allowed'" 932 class="w-full flex items-center justify-between px-4 py-3 text-lg font-semibold"> 933 <span x-text="L"></span> 934 <svg class="w-5 h-5 transition-transform" :class="open[L] ? 'rotate-180' : ''" fill="none" viewBox="0 0 24 24" 935 stroke="currentColor"> 936 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7" /> 937 </svg> 938 </button> 939 940 <!-- Body --> 941 <div x-show="open[L]" x-collapse x-cloak class="bg-white"> 942 <div class="p-4 grid gap-3 sm:grid-cols-2 lg:grid-cols-3"> 943 <template x-for="sport in groups[L]" :key="sport.value"> 944 <!-- use pageSlug() & hasPageName() --> 945 <a :href="hasPageName(sport.displayText || sport.value) ? `/sport/${pageSlug(sport.displayText || sport.value)}-insurance/` : null" 946 :class="[ 947 'px-4 py-3 rounded bg-primary/30 font-medium inline-flex items-center justify-between', 948 hasPageName(sport.displayText || sport.value) ? 'hover:bg-primary/50 shadow-[inset_0_-2px_0_#cadb36]' : 'cursor-default' 949 ]"> 950 <span x-text="sport.displayText"></span> 951 </a> 952 </template> 953 </div> 954 </div> 955 </div> 956 </template> 957</section> 958
959<script> 960 function sportsAccordion() { 961 const API = 'https://proxy.ripethinking.co.uk/juicewebapi/lists/sports'; 962 return { 963 letters: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''), 964 groups: {}, 965 open: {}, 966 967 // â allow-list of actual page slugs you have 968 allowedSlugs: new Set([ 969 "personal-trainer","kayaking","yoga","football","dance","boot-camp","pilates","cycle","cheerleading","gym-member", 970 "paddleboarding","rugby","circuit-training","boxing","sports-massage","childrens-multi-sports","weight-lifting","weightlifting", 971 "muay-thai","field-sports","golf","swimming","winter-sports","netball","cricket","running","diving","referee", 972 "hockey","what-we-cover","gymnastics","outdoors-and-adventure-sports","watersports","fitness-instructor", 973 "dance-types","fitness-class","spinning","skydiving","martial-arts","aerobics","pole-fitness","basketball", 974 "mountain-biking","paragliding","rock-climbing","wind-surfing","sailing","archery","mountaineering","tennis", 975 "open-water-swimming","mma","acrobatics-and-circus-skills","aerial-dance","surfing","badminton","ski", 976 "athletics","canoeing","extreme-sports","les-mills","triathlon","fishing","roller-skating","abseiling", 977 "marathon-running","shooting","volleyball","padel-pickleball","american-football","snowboarding","rowing", 978 "squash","airsoft","baseball","darts","zumba", 979 // ð add the two you mentioned by name 980 "hockey-and-ice-hockey", 981 "scuba-diving", 982 "windsurfing-and-windfoiling" 983 ]), 984 985 // existing slug cleanups (slug -> canonical slug) 986 slugOverrides: { 987 "weight-lifting": "weightlifting", 988 "weight-lifiting": "weightlifting", 989 }, 990 991 // â NEW: map API display names to your page slugs (no "-insurance" suffix) 992 // keys are matched case-insensitively 993 nameToSlug: { 994 "aerial circus skills": "aerial-dance", 995 "aerial hoop dancing": "aerial-dance", 996 "boxing (amateur)": "boxing", 997 "children's multi-sports": "childrens-multi-sports", 998 "cycling": "cycle", 999 "diving (board)": "diving", 1000 "hockey (field)": "hockey", 1001 "hockey (inline)": "hockey", 1002 "hockey (roller)": "hockey", 1003 "swimming - open water": "open-water-swimming", 1004 // âmissing from listâ cases: map common variants to your Paddleboarding page 1005 "paddle boarding": "paddleboarding", 1006 "stand up paddleboarding": "paddleboarding", 1007 "stand-up paddleboarding": "paddleboarding", 1008 "sup": "paddleboarding", 1009 "padel tennis": "padel-pickleball", 1010 "pickleball": "padel-pickleball", 1011 "pilates (including reformer pilates)": "pilates", 1012 "pole fit": "pole-fitness", 1013 "referee (exc rugby and pro football)": "referee", 1014 "rugby 7s": "rugby", 1015 "rugby league": "rugby", 1016 "rugby union": "rugby", 1017 "running (indoor, cross country, path, road)": "running", 1018 "scuba diving": "scuba-diving", 1019 "skiing (on-piste)": "ski", 1020 "sky diving": "skydiving", 1021 "snowboarding (on-piste)": "snowboarding", 1022 "swimming classes pool": "swimming", 1023 "synchronised swimming": "swimming", 1024 "tennis (inc mini & short)": "tennis", 1025 "windsurfing": "windsurfing-and-windfoiling", 1026 "windfoiling": "windsurfing-and-windfoiling" 1027 }, 1028 1029 has(L) { return Array.isArray(this.groups[L]) && this.groups[L].length > 0; }, 1030 1031 // basic slug from name 1032 slug(s) { 1033 return encodeURIComponent((s || '').trim().toLowerCase().replace(/\s+/g, '-')); 1034 }, 1035 1036 // normalise API name for lookup 1037 normName(s) { 1038 return (s || '').trim().toLowerCase(); 1039 }, 1040 1041 // â final slug used in URL, applying nameâslug overrides first 1042 pageSlug(s) { 1043 const name = this.normName(s); 1044 const nameOverride = this.nameToSlug[name]; 1045 if (nameOverride) return nameOverride; 1046 1047 const raw = this.slug(s); 1048 return this.slugOverrides[raw] ?? raw; 1049 }, 1050 1051 // only enable link if we actually have that page 1052 hasPageName(s) { 1053 return this.allowedSlugs.has(this.pageSlug(s)); 1054 }, 1055
1056 async init() { 1057 try { 1058 const res = await fetch(API, { cache: 'no-store' }); 1059 const data = await res.json(); 1060 const items = (data || []) 1061 .map(s => ({ ...s, name: (s.displayText || s.value || '').trim() })) 1062 .filter(s => s.name) 1063 .sort((a, b) => a.name.localeCompare(b.name, 'en', { sensitivity: 'base' })); 1064 1065 const grouped = {}; 1066 this.letters.forEach(L => grouped[L] = []); 1067 for (const s of items) { 1068 const L = (s.name[0] || '').toUpperCase(); 1069 if (grouped[L]) grouped[L].push(s); 1070 } 1071 this.groups = grouped; 1072 1073 const firstOpen = this.letters.find(L => grouped[L]?.length) || 'A'; 1074 this.letters.forEach(L => this.open[L] = (L === firstOpen)); 1075 } catch (e) { 1076 console.error('Failed to load sports', e); 1077 this.letters.forEach(L => { this.groups[L] = []; this.open[L] = false; }); 1078 } 1079 } 1080 }; 1081 } 1082</script>
1082 1083 1084 1085</main> 1086 1087 1088 1089 <div class="bg-[#333]"> 1090 <div class="text-center pt-6 pb-2 md:pl-[100px]"> 1091 <p class="flex flex-col md:flex-row items-center justify-center space-x-3 space-y-3 md:space-y-0 [&>span]:text-white"> 1092 <span><strong>Insure4Sport</strong> is a</span> 1093 <img src="/assets/ripe.png" loading="lazy" decoding="async" class="w-[50px]" alt="" /> 1094 <span>Insurance Services product</span> 1095 </p> 1096 </div> 1097 1098 <div class="max-w-screen-xl m-auto p-4 pb-6 md:pb-4 grid grid-cols-1 md:grid-cols-12"> 1099 1100 <!-- Footer Links --> 1101 <div class="footer-links md:col-span-5 md:flex md:flex-row justify-center md:justify-end items-center space-y-3 md:space-y-0 order-1 md:order-none"> 1102 <ul class="flex flex-row items-center md:items-start md:flex-wrap justify-center pt-3 md:py-0 md:justify-end gap-x-4 [&>li>a]:text-white [&>li>a]:text-[12px] [&>li>a:hover]:underline"> 1103 <li><a href="/about/">About</a></li> 1104 <li><a href="/sitemap/">Sitemap</a></li> 1105 <li><a href="/how-to-claim/">How to claim</a></li> 1106 <li><a href="/how-to-complain/">How to complain</a></li> 1107 </ul> 1108 </div> 1109 1110 <div class="md:flex md:col-span-2 justify-center md:items-center text-center md:grid-cols-3 gap-3 [&>a>svg]:w-[30px] [&>a>img]:w-[30px] order-none md:order-1"> 1111 <!-- Social Media Icons for Desktop --> 1112 <a class="inline-block md:block" href="/blog/" target="_blank"> 1113 <img src="/assets/icon-blog.svg" loading="lazy" decoding="async" alt="" > 1114 </a> 1115 1116 <a class="inline-block md:block" href="https://www.facebook.com/insure4sport/" target="_blank"> 1117 <img src="/assets/icon-fb.svg" loading="lazy" decoding="async" alt="" > 1118 </a> 1119 1120 <a class="inline-block md:block" href="https://www.instagram.com/insure4sport/" target="_blank"> 1121 <img src="/assets/icon-insta.svg" loading="lazy" decoding="async" alt="" > 1122 </a> 1123 </div> 1124 1125 <div class="footer-links md:col-span-5 md:flex md:flex-row justify-center md:justify-start items-center md:space-y-0 order-2 md:order-2"> 1126 <ul class="flex flex-row items-center md:items-start flex-wrap justify-center pt-1 md:pb-0 md:justify-end gap-x-4 [&>li>a]:text-white [&>li>a]:text-[12px] [&>li>a:hover]:underline"> 1127 <li><a href="https://files.ripeinsurance.co.uk/Documents/TOBA/misc_print_14736_termsofbusiness_july2023.pdf">Terms of Business</a></li> 1128 <li><a href="/terms-of-use/">Terms of use</a></li> 1129 <li><a href="/privacy-policy/">Privacy policy</a></li> 1130 <li><a href="/cookies/">Cookie policy</a></li> 1131 </ul> 1132 </div> 1133 </div> 1134</div> 1135 1136 1137 <div class="max-w-screen-xl m-auto mb-[60px]"> 1138 <div class="py-6 [&>p]:text-[11px] [&>p]:mb-1 text-left [&>p]:text-[#2d2926]"> 1139 <p>©Copyright Ripe Thinking Limited 2026.</p> 1140 <p>Insure4Sport® is a registered trademark and a trading name of Ripe Insurance Services Limited which is Authorised and Regulated by the Financial Conduct Authority No.313411. Registered office: One Stockport Exchange, Railway Road, Stockport, United Kingdom, SK1 3SW. Registered in England No. 04507332.</p> 1141 </div> 1142</div> 1143 1144 1145
1145<script> 1146 var juiceUrl = "https://proxy.ripethinking.co.uk"; 1147 var quoteUrl = "https://quote.insure4sport.co.uk/#/your-cover/select-cover-type"; 1148 var quoteGolfUrl = "https://quote-golf.insure4sport.co.uk/#/your-cover/level-of-cover"; 1149 1150 const I4S_KEY = 'webCode_i4s'; 1151 const GOLF_KEY = 'webCode_i4sgolf'; 1152 const LEGACY_KEY = 'webCode'; // â legacy PPC key 1153 const ASSIGNED_CAMPAIGN_COOKIE_PREFIX = 'assignedCampaignUniqueId'; 1154 const ASSIGNED_CAMPAIGN_MAX_AGE_DAYS = 7; 1155 const juiceSourceRequests = new Map(); 1156 1157 function getCookieValue(name) { 1158 const encodedName = `${encodeURIComponent(name)}=`; 1159 const cookies = document.cookie ? document.cookie.split('; ') : []; 1160 1161 for (const cookie of cookies) { 1162 if (cookie.indexOf(encodedName) === 0) { 1163 return decodeURIComponent(cookie.substring(encodedName.length)); 1164 } 1165 } 1166 1167 return ''; 1168 } 1169 1170 function setCookieValue(name, value, days) { 1171 const expires = new Date(Date.now() + (days * 24 * 60 * 60 * 1000)).toUTCString(); 1172 document.cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}; expires=${expires}; path=/; SameSite=Lax`; 1173 } 1174 1175 function deleteCookieValue(name) { 1176 document.cookie = `${encodeURIComponent(name)}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; SameSite=Lax`; 1177 } 1178 1179 function getAssignedCampaignCookieName(product) { 1180 return `${ASSIGNED_CAMPAIGN_COOKIE_PREFIX}_${product}`; 1181 } 1182 1183 function productForThisPage() { 1184 return isGolfPage() ? 'Insure4SportGolf' : 'Insure4Sport2012'; 1185 } 1186 1187 function getAssignedCampaignUniqueId(product) { 1188 return getCookieValue(getAssignedCampaignCookieName(product || productForThisPage())); 1189 } 1190 1191 function syncAssignedCampaignUniqueId(product, uniqueId) { 1192 if (uniqueId) { 1193 setCookieValue(getAssignedCampaignCookieName(product), uniqueId, ASSIGNED_CAMPAIGN_MAX_AGE_DAYS); 1194 } 1195 } 1196 1197 async function fetchJuiceSource(product, sourceIdentifier, options = {}) { 1198 const { retryWithDefaultOn404 = false, campaignUniqueId = '', persistCampaignUniqueId = false } = options; 1199 1200 const buildRequestKey = (identifier, assignedCampaignUniqueId = '') => 1201 `${product}::${identifier || 'default'}::${assignedCampaignUniqueId || ''}`; 1202 1203 const requestSource = async (identifier, assignedCampaignUniqueId = '') => { 1204 const normalizedIdentifier = identifier || 'default'; 1205 const requestKey = buildRequestKey(normalizedIdentifier, assignedCampaignUniqueId); 1206 1207 if (!juiceSourceRequests.has(requestKey)) { 1208 const query = new URLSearchParams({ includeImage: 'false' }); 1209 1210 if (assignedCampaignUniqueId) { 1211 query.set('campaignUniqueId', assignedCampaignUniqueId); 1212 } 1213 1214 const requestPromise = fetch(`${juiceUrl}/juicewebapi/products/${product}/standard/sources/${normalizedIdentifier}?${query.toString()}`) 1215 .then(response => { 1216 if (!response.ok) { 1217 const error = new Error(`Juice source request failed with status ${response.status}`); 1218 error.status = response.status; 1219 throw error; 1220 } 1221 1222 return response.json(); 1223 }) 1224 .finally(() => { 1225 juiceSourceRequests.delete(requestKey); 1226 }); 1227 1228 juiceSourceRequests.set(requestKey, requestPromise); 1229 } 1230 1231 const data = await juiceSourceRequests.get(requestKey); 1232 if (persistCampaignUniqueId) { 1233 syncAssignedCampaignUniqueId(product, data && data.campaignUniqueId); 1234 } 1235 return data; 1236 }; 1237 1238 try { 1239 return await requestSource(sourceIdentifier || 'default', campaignUniqueId); 1240 } catch (error) { 1241 if (retryWithDefaultOn404 && campaignUniqueId && error.status === 404) { 1242 deleteCookieValue(getAssignedCampaignCookieName(product)); 1243 return requestSource(sourceIdentifier || 'default'); 1244 } 1245 1246 throw error; 1247 } 1248 } 1249 1250 window.getAssignedCampaignUniqueId = getAssignedCampaignUniqueId; 1251 window.fetchJuiceSource = fetchJuiceSource; 1252 1253 function isGolfPage() { 1254 return (window.location.pathname || '').toLowerCase().includes('/sport/golf-insurance'); 1255 } 1256 1257 function getUrlRef() { 1258 const q = new URLSearchParams(location.search); 1259 return q.get('ref') || ''; 1260 } 1261 1262 // Store ?ref= into legacy slot for precedence on non-golf pages 1263 function syncIncomingRefToSession() { 1264 const incoming = getUrlRef(); 1265 if (incoming) { 1266 sessionStorage.setItem(LEGACY_KEY, incoming); 1267 } 1268 } 1269 1270 // Fetch & cache defaults (but don't overwrite an existing legacy PPC code) 1271 async function ensureWebCodes() { 1272 const hasLegacy = !!sessionStorage.getItem(LEGACY_KEY); 1273 const hasI4S = !!sessionStorage.getItem(I4S_KEY); 1274 const hasGolf = !!sessionStorage.getItem(GOLF_KEY); 1275 1276 const fetchCode = (product) => 1277 fetchJuiceSource(product, 'default', {
1278 persistCampaignUniqueId: false 1279 }) 1280 .then(d => (d && d.webCode) ? d.webCode : '') 1281 .catch(() => ''); 1282 1283 const tasks = []; 1284 1285 // Only fetch the generic i4s default if we DON'T already have a legacy PPC code 1286 if (!hasLegacy && !hasI4S) { 1287 tasks.push(fetchCode('Insure4Sport2012').then(c => sessionStorage.setItem(I4S_KEY, c || ''))); 1288 } 1289 if (!hasGolf) { 1290 tasks.push(fetchCode('Insure4SportGolf').then(c => sessionStorage.setItem(GOLF_KEY, c || ''))); 1291 } 1292 1293 if (tasks.length) await Promise.all(tasks); 1294 } 1295 1296 // Decide which ref to use for current page 1297 function refForThisPage() { 1298 const urlRef = getUrlRef(); // highest precedence if present 1299 const legacy = sessionStorage.getItem(LEGACY_KEY) || ''; 1300 const i4s = sessionStorage.getItem(I4S_KEY) || ''; 1301 const golf = sessionStorage.getItem(GOLF_KEY) || ''; 1302 1303 if (isGolfPage()) { 1304 // Golf pages: prefer explicit ?ref= on the page, else golf default 1305 return urlRef || golf || legacy || i4s || ''; 1306 } 1307 // Non-golf pages: prefer legacy PPC webCode, then i4s default 1308 return urlRef || legacy || i4s || ''; 1309 } 1310 1311 function updateTrackedParams(target, code, campaignUniqueId) { 1312 let updatedTarget = target 1313 .replace(/([?&])ref=[^&]*/gi, '') 1314 .replace(/([?&])campaignUniqueId=[^&]*/gi, '') 1315 .replace(/[?&]$/, ''); 1316 1317 if (code) { 1318 updatedTarget += (updatedTarget.includes('?') ? '&' : '?') + 'ref=' + encodeURIComponent(code); 1319 } 1320 if (campaignUniqueId) { 1321 updatedTarget += (updatedTarget.includes('?') ? '&' : '?') + 'campaignUniqueId=' + encodeURIComponent(campaignUniqueId); 1322 } 1323 1324 return updatedTarget; 1325 } 1326 1327 // Append the chosen ref and campaignUniqueId to all .updateUrl anchors 1328 function updateRefCodesOnLinks(codeOverride, campaignUniqueIdOverride) { 1329 const code = codeOverride || refForThisPage(); 1330 const campaignUniqueId = campaignUniqueIdOverride || getAssignedCampaignUniqueId(productForThisPage()); 1331 1332 document.querySelectorAll('a.updateUrl').forEach(anchor => { 1333 const href = anchor.getAttribute('href') || ''; 1334 if (!href) return; 1335 1336 const hashIndex = href.indexOf('#'); 1337 if (hashIndex >= 0) { 1338 const prefix = href.substring(0, hashIndex + 1); 1339 const hashTarget = href.substring(hashIndex + 1); 1340 anchor.setAttribute('href', prefix + updateTrackedParams(hashTarget, code, campaignUniqueId)); 1341 return; 1342 } 1343 1344 anchor.setAttribute('href', updateTrackedParams(href, code, campaignUniqueId)); 1345 }); 1346 } 1347 1348 document.addEventListener('DOMContentLoaded', async () => { 1349 syncIncomingRefToSession(); // capture ?ref= to legacy slot 1350 await ensureWebCodes(); // make sure defaults exist (without clobbering legacy) 1351 updateRefCodesOnLinks(); // write hrefs 1352 }); 1353 </script>
1353 1354 1355 1356 1357</body> 1358 1359</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.