1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1"> 6 <meta name="author" content="Sound of Life"> 7 <meta name="csrf-token" content="9QayxHcXKBjrRpc5DgmArLYfkZ0BUU2C0QjnhOKV"> 8 <title>Sound of Life | Powered by KEF</title> 9 <meta name="description" content="Explore the conduit of sound and how it inspires people, places, design and experiences â from far-flung fringes to new frontiers. The best stories for the curi..." /> 10 <meta property="fb:app_id" content="978087529319798" /> 11 <meta property="og:site_name" content="Sound of Life" /> 12 <meta property="og:url" content="https://www.soundoflife.com" /> 13 <meta property="og:title" content="Sound of Life | Powered by KEF" /> 14 <meta property="og:description" content="Explore the conduit of sound and how it inspires people, places, design and experiences â from far-flung fringes to new frontiers. The best stories for the curi..." /> 15 <meta property="og:image" content="https://www.soundoflife.com/images/sol-logo-og-tag.png" /> 16 <meta property="og:image:url" content="https://www.soundoflife.com/images/sol-logo-og-tag.png" /> 17 <meta property="og:image:secure_url" content="https://www.soundoflife.com/images/sol-logo-og-tag.png" /> 18 <meta property="og:image:type" content="image/png" /> 19 <meta property="og:image:width" content="512" /> 20 <meta property="og:image:height" content="512" /> 21 <meta property="og:image:alt" content="" /> 22 <meta property="og:type" content="website" /> 23 <meta property="og:locale" content="en_GB" /> 24 <meta property="twitter:card" content="summary_large_image" /> 25 <meta property="twitter:site" content="@SOL_SoundOfLife" /> 26 <meta property="twitter:title" content="Sound of Life | Powered by KEF" /> 27 <meta property="twitter:description" content="Explore the conduit of sound and how it inspires people, places, design and experiences â from far-flung fringes to new frontiers. The best stories for the curi..." /> 28 <meta property="twitter:image" content="https://www.soundoflife.com/images/sol-logo-og-tag.png" /> 29 <link rel="shortcut icon" href="/images/icon/favicon.ico"> 30 <link rel="apple-touch-icon" sizes="180x180" href="/images/icon/apple-touch-icon.png"> 31 <link rel="icon" type="image/png" sizes="32x32" href="/images/icon/favicon-32x32.png"> 32 <link rel="icon" type="image/png" sizes="16x16" href="/images/icon/favicon-16x16.png"> 33 34 <meta name="msapplication-TileColor" content="#000000"> 35 <meta name="theme-color" content="#000000"> 36 <link rel="preconnect" href="https://fonts.bunny.net"> 37
37<script> 38 window.sol = JSON.parse('{\n \u0022domain\u0022: \u0022soundoflife.com\u0022,\n \u0022site_host\u0022: \u0022www_soundoflife_com\u0022,\n \u0022pathname\u0022: \u0022\\\/\u0022,\n \u0022lang_locale\u0022: \u0022en\u0022,\n \u0022og_locale\u0022: \u0022en_GB\u0022,\n \u0022locale\u0022: \u0022en\u0022,\n \u0022body_before_scripts\u0022: \u0022\u0022,\n \u0022body_after_scripts\u0022: \u0022\u0022\n}') 39 </script>
39 40 41
41<script> 42 function CookiebotCallback_CheckCategories() { 43 if (!window['google_tag_data']) { 44 return; 45 } 46 l = s => s == undefined ? "" : s ? "granted" : "denied"; 47 var g = "ics" in google_tag_data ? google_tag_data.ics.entries : null, 48 marketing = 3, 49 functional = 2, 50 analytics = 1; 51 for (var a in g) { 52 i = l(g[a]['default']); 53 u = l(g[a]['update']); 54 if (i == 'granted') { 55 if (a == 'ad_storage' || a == 'ad_user_data' || a == 'ad_personalization') { 56 marketing--; 57 } else if (a == 'personalization_storage' || a == 'functionality_storage') { 58 functional--; 59 } else if (a == 'analytics_storage') { 60 analytics--; 61 } else if (a == 'security_storage') { 62 // necessary 63 } 64 } 65 } 66 67 if (marketing == 0) { 68 $('input#CybotCookiebotDialogBodyLevelButtonMarketingInline').trigger('click'); 69 } 70 if (functional == 0) { 71 $('input#CybotCookiebotDialogBodyLevelButtonPreferencesInline').trigger('click'); 72 } 73 if (analytics == 0) { 74 $('input#CybotCookiebotDialogBodyLevelButtonStatisticsInline').trigger('click'); 75 } 76 } 77 function CookiebotCallback_OnAccept() { 78 document.body.classList.remove('cookie-active') 79 } 80 function CookiebotCallback_OnDecline() { 81 document.body.classList.remove('cookie-active') 82 } 83 window.addEventListener('CookiebotOnDialogInit', (e) => { 84 CookiebotCallback_CheckCategories() 85 CookiebotDialog.loiAllowAllText = "Accept" 86 CookiebotDialog.loiAllowSelectionText = "Allow selection" 87 CookiebotDialog.acceptText = "Accept all" 88 CookiebotDialog.declineText = "Reject" 89 CookiebotDialog.showDetailsText = "Manage choices" 90 CookiebotDialog.lastUpdatedText = `Cookie declaration last updated on {0} by <a href="https://www.cookiebot.com" target="_blank" rel="noopener" title="Cookiebot">Cookiebot</a>` 91 CookiebotDialog.providerLinkText = "Learn more about this provider" 92 }, false) 93 window.addEventListener('CookiebotOnDialogDisplay', (e) => { 94 CookiebotCallback_CheckCategories() 95 if (CookiebotDialog.template.includes('popup')) { 96 document.getElementById('CybotCookiebotDialogBodyButtonDecline').innerHTML = "Deny" 97 document.getElementById('CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll').innerHTML = "Allow all" 98 document.querySelectorAll('.CybotCookiebotDialogNavItem').forEach((el) => { 99 let span = document.createElement('span') 100 el.appendChild(span) 101 }) 102 } 103 104 setTimeout(() => { 105 106 107 }, 300) 108 109 document.getElementById('CybotCookiebotDialogBodyEdgeMoreDetailsLink').addEventListener('click', (e) => { 110 document.getElementById('CybotCookiebotDialogBodyButtonDecline').innerHTML = "Deny" 111 document.getElementById('CybotCookiebotDialogBodyLevelButtonLevelOptinAllowallSelection').innerHTML = "Allow selection" 112 document.getElementById('CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll').innerHTML = "Allow all" 113 document.querySelectorAll('.CybotCookiebotDialogNavItem').forEach((el) => { 114 let span = document.createElement('span') 115 el.appendChild(span) 116 }) 117 118 document.getElementById('CybotCookiebotDialogDetailBodyContentCookieContainerUnclassifiedCard').parentNode.remove() 119 120 document.body.classList.add('cookie-active') 121 }) 122 }, false) 123 </script>
123 124 125 <meta name="google-site-verification" content="gAGp-5xzZSeJQBqIs4M2yKMuB1P0mhyoT0kEfdU9iHg" /> 126 <!-- Google Tag Manager --> 127
127<script data-cookieconsent="ignore"> 128 if (window.navigator.userAgent.toLowerCase().indexOf('cookiebot') < 0) {
vendor: 388 bytes, lines 128-133
128 129 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 130 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 131 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 132 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 133 })(window,document,'script','dataLayer','
133GTM-M278XRP
vendor: 12 bytes, lines 133-134
133'); 134
134} 135 </script>
135 136 <!-- End Google Tag Manager --> 137 <!-- Start gtm.js --> 138
138<script src="/js/gtm.js" data-cookieconsent="ignore"></script>
138 139 <!-- End gtm.js --> <link rel="preload" as="style" href="https://www.soundoflife.com/build/assets/app-977f5b8a.css" /><link rel="preload" as="style" href="https://www.soundoflife.com/build/assets/client-07044c0d.css" /><link rel="modulepreload" href="https://www.soundoflife.com/build/assets/client-b229ac8c.js" /><link rel="modulepreload" href="https://www.soundoflife.com/build/assets/vue-i18n.esm-bundler-19961703.js" /><link rel="modulepreload" href="https://www.soundoflife.com/build/assets/advancedFormat-bb2b954a.js" /><link rel="modulepreload" href="https://www.soundoflife.com/build/assets/utc-83009787.js" /><link rel="stylesheet" href="https://www.soundoflife.com/build/assets/app-977f5b8a.css" /><link rel="stylesheet" href="https://www.soundoflife.com/build/assets/client-07044c0d.css" />
139<script type="module" src="https://www.soundoflife.com/build/assets/client-b229ac8c.js"></script>
139</head> 140<body class="antialiased"> 141 <div id="app"></div> 142</body> 143</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.