1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <title>Drowned in Sound - Championing Independent Music</title> 5 <meta charset="utf-8" /> 6 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 7 <meta name="HandheldFriendly" content="True" /> 8 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 9 10 <link rel="preconnect" href="https://fonts.googleapis.com"> 11 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 12 <link href="https://fonts.googleapis.com/css2?family=Montserrat&display=swap" rel="stylesheet"> 13 <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet"> 14
14<script src="https://www.drownedinsound.org/assets/js/global.js?v=kNRfD9v-88Y5vLSb"></script>
14 15 16 <link rel="stylesheet" type="text/css" href="https://www.drownedinsound.org/assets/css/global.css?v=zypZlIhrOXf6VBGG" /> 17 18 <style> 19 :root { 20 --background-color: #ffffff; 21 --text-color: #1b1b1b; 22 --text-60-opac: #767676; 23 --text-color-lower-opac: #a4a4a4; 24 --placeholder-color: #f5f5f5; 25 } 26 </style> 27 28 29 30 <style> 31 :root{ 32 --font1: var(--gh-font-heading, 'Butler'); 33 --font2: var(--gh-font-body, 'Montserrat'); 34 --font3: var(--gh-font-body, 'Roboto'); 35 --logo-scale: 1; 36 --heading-one-scale: 1; 37 } 38 39 @media (min-width: 1920px) { 40 :root{ 41 --scale: 0.8; 42 } 43 } 44 </style> 45 46 <meta name="description" content="For 25 years our publication and podcast has recommended music. We now also spark conversations and create resources to help music fans discover their collective power."> 47 <link rel="icon" href="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w256h256/2024/01/DiS-waves-600px--2-.png" type="image/png"> 48 <link rel="canonical" href="https://www.drownedinsound.org/"> 49 <meta name="referrer" content="no-referrer-when-downgrade"> 50 <link rel="next" href="https://www.drownedinsound.org/page/2/"> 51 52 <meta property="og:site_name" content="Drowned in Sound"> 53 <meta property="og:type" content="website"> 54 <meta property="og:title" content="Drowned in Sound"> 55 <meta property="og:description" content="For 25 years our publication and podcast has recommended music. We now also spark conversations and create resources to help music fans discover their collective power."> 56 <meta property="og:url" content="https://www.drownedinsound.org/"> 57 <meta property="og:image" content="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2025/07/DiS-waves-1-1.png"> 58 <meta property="article:publisher" content="https://www.facebook.com/drownedinsounduk"> 59 <meta name="twitter:card" content="summary_large_image"> 60 <meta name="twitter:title" content="Drowned in Sound"> 61 <meta name="twitter:description" content="For 25 years our publication and podcast has recommended music. We now also spark conversations and create resources to help music fans discover their collective power."> 62 <meta name="twitter:url" content="https://www.drownedinsound.org/"> 63 <meta name="twitter:image" content="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2025/07/DiS-waves-1-1.png"> 64 <meta property="og:image:width" content="1200"> 65 <meta property="og:image:height" content="675"> 66 67
67<script type="application/ld+json"> 68{ 69 "@context": "https://schema.org", 70 "@type": "WebSite", 71 "publisher": { 72 "@type": "Organization", 73 "name": "Drowned in Sound", 74 "url": "https://www.drownedinsound.org/", 75 "logo": { 76 "@type": "ImageObject", 77 "url": "https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/2025/07/Untitled-July-18-2025.png" 78 } 79 }, 80 "url": "https://www.drownedinsound.org/", 81 "name": "Drowned in Sound", 82 "image": { 83 "@type": "ImageObject", 84 "url": "https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2025/07/DiS-waves-1-1.png", 85 "width": 1200, 86 "height": 675 87 }, 88 "mainEntityOfPage": "https://www.drownedinsound.org/", 89 "description": "For 25 years our publication and podcast has recommended music. We now also spark conversations and create resources to help music fans discover their collective power." 90} 91 </script>
91 92 93 <meta name="generator" content="Ghost 6.68"> 94 <link rel="alternate" type="application/rss+xml" title="Drowned in Sound" href="https://www.drownedinsound.org/rss/"> 95
95<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.71/umd/portal.min.js" data-i18n="true" data-ghost="https://www.drownedinsound.org/" data-key="f0fecc3cbf50327e087b5577f7" data-api="https://drowned-in-sound.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script>
95<style id="gh-members-styles">.gh-post-upgrade-cta-content, 96.gh-post-upgrade-cta { 97 display: flex; 98 flex-direction: column; 99 align-items: center; 100 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; 101 text-align: center; 102 width: 100%; 103 color: #ffffff; 104 font-size: 16px; 105} 106 107.gh-post-upgrade-cta-content { 108 border-radius: 8px; 109 padding: 40px 4vw; 110} 111 112.gh-post-upgrade-cta h2 { 113 color: #ffffff; 114 font-size: 28px; 115 letter-spacing: -0.2px; 116 margin: 0; 117 padding: 0; 118} 119 120.gh-post-upgrade-cta p { 121 margin: 20px 0 0; 122 padding: 0; 123} 124 125.gh-post-upgrade-cta small { 126 font-size: 16px; 127 letter-spacing: -0.2px; 128} 129 130.gh-post-upgrade-cta a { 131 color: #ffffff; 132 cursor: pointer; 133 font-weight: 500; 134 box-shadow: none; 135 text-decoration: underline; 136} 137 138.gh-post-upgrade-cta a:hover { 139 color: #ffffff; 140 opacity: 0.8; 141 box-shadow: none; 142 text-decoration: underline; 143} 144 145.gh-post-upgrade-cta a.gh-btn { 146 display: block; 147 background: #ffffff; 148 text-decoration: none; 149 margin: 28px 0 0; 150 padding: 8px 18px; 151 border-radius: 4px; 152 font-size: 16px; 153 font-weight: 600; 154} 155 156.gh-post-upgrade-cta a.gh-btn:hover { 157 opacity: 0.92; 158}</style>
158<script async src="https://js.stripe.com/v3/"></script>
158 159
159<script defer src="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/sodo-search.min.js" data-key="f0fecc3cbf50327e087b5577f7" data-styles="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/main.css" data-sodo-search="https://drowned-in-sound.ghost.io/" data-locale="en" crossorigin="anonymous"></script>
159 160
160<script defer src="https://cdn.jsdelivr.net/ghost/announcement-bar@~1.1/umd/announcement-bar.min.js" data-announcement-bar="https://www.drownedinsound.org/" data-api-url="https://www.drownedinsound.org/members/api/announcement/" crossorigin="anonymous"></script>
160 161 <link href="https://www.drownedinsound.org/webmentions/receive/" rel="webmention"> 162
162<script defer src="/public/cards.min.js?v=3VmbfVx_4GrHkd6m"></script>
162 163 <link rel="stylesheet" type="text/css" href="/public/cards.min.css?v=-nD-PvLcSEpXvK2-"> 164
164<script defer src="/public/comment-counts.min.js?v=oFYkaGLdiMqB8VN9" data-ghost-comments-counts-api="https://www.drownedinsound.org/members/api/comments/counts/"></script>
164 165
165<script defer src="/public/member-attribution.min.js?v=AKG4hWena9j3yX3I"></script>
165 166
166<script defer src="/public/ghost-stats.min.js?v=vFcCUf6ZQ0Hyhc8h" data-stringify-payload="false" data-datasource="analytics_events" data-storage="localStorage" data-host="https://www.drownedinsound.org/.ghost/analytics/api/v1/page_hit" tb_site_uuid="f85aaacd-e9e1-4577-9f78-c62a1ee936d4" tb_post_uuid="undefined" tb_post_type="null" tb_member_uuid="undefined" tb_member_status="undefined" tb_gift_link=""></script>
166<style>:root {--ghost-accent-color: #f307b0;}</style> 167
167<script src="https://analytics.ahrefs.com/analytics.js" data-key="pM8CCQGtNbcULxoNSnL+cw" async></script>
167 168</head> 169<body> 170<div class="viewport"> 171 <div class="site-content"> 172 <link rel="stylesheet" type="text/css" href="https://www.drownedinsound.org/assets/css/navbar.css?v=eryeKW4XIypwXwWM" /> 173<link rel="stylesheet" type="text/css" href="https://www.drownedinsound.org/assets/css/section-header.css?v=rV91iBuiCdM77aXl" /> 174<link rel="stylesheet" type="text/css" href="https://www.drownedinsound.org/assets/css/card.css?v=mAuVmg3ah5DstO44" /> 175 176<custom-header id="header" data-content-api-key=""> 177 <div class="menu" isopen="false"> 178 <div class="menu-top"> 179 <a class="mobile-logo" href="https://www.drownedinsound.org"> 180 <img src="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/2025/07/Untitled-July-18-2025.png" alt="Drowned in Sound"> 181 </a> 182 <div class="menu-and-search-wrapper"> 183 <button class="search-icon-wrapper-mobile" data-ghost-search aria-label="Search button"> 184 <svg class="search-icon" width="100%" height="100%" viewBox="0 0 29 29" fill="none" xmlns="http://www.w3.org/2000/svg"> 185 <path d="M23.6833 25.375L16.0708 17.7625C15.4667 18.2458 14.7719 18.6285 13.9865 18.9104C13.201 19.1924 12.3653 19.3333 11.4792 19.3333C9.28403 19.3333 7.42642 18.5729 5.90633 17.052C4.38625 15.5311 3.62581 13.6735 3.625 11.4792C3.625 9.28403 4.38544 7.42642 5.90633 5.90633C7.42722 4.38625 9.28483 3.62581 11.4792 3.625C13.6743 3.625 15.5319 4.38544 17.052 5.90633C18.5721 7.42722 19.3325 9.28483 19.3333 11.4792C19.3333 12.3653 19.1924 13.201 18.9104 13.9865C18.6285 14.7719 18.2458 15.4667 17.7625 16.0708L25.375 23.6833L23.6833 25.375ZM11.4792 16.9167C12.9896 16.9167 14.2736 16.3878 15.3313 15.3301C16.389 14.2724 16.9175 12.9888 16.9167 11.4792C16.9167 9.96875 16.3878 8.68469 15.3301 7.627C14.2724 6.56931 12.9888 6.04086 11.4792 6.04167C9.96875 6.04167 8.68469 6.57051 7.627 7.62821C6.56931 8.6859 6.04086 9.96956 6.04167 11.4792C6.04167 12.9896 6.57051 14.2736 7.62821 15.3313C8.6859 16.389 9.96956 16.9175 11.4792 16.9167Z" fill="var(--text-color)"/> 186</svg> 187 </button> 188 <button class="menu-button" aria-label="Menu button"> 189 <div class="menu-line first-line"></div> 190 <div class="menu-line mobile-line"></div> 191 <div class="menu-line second-line"></div> 192 </button> 193 </div> 194 </div> 195 <div class="menu-content"> 196 <div class="menu-links"> 197 198 <ul class="nav"> 199 <li class="nav-home nav-current" data-label="Home"> 200 <a class="nav-link" href="https://www.drownedinsound.org/">Home</a> 201 </li> 202 <li class="nav-newsletter" data-label="Newsletter"> 203 <a class="nav-link" href="https://www.drownedinsound.org/tag/newsletter/">Newsletter</a> 204 </li> 205 <li class="nav-features" data-label="Features"> 206 <a class="nav-link" href="https://www.drownedinsound.org/tag/essay/">Features</a> 207 </li> 208 <li class="nav-podcasts" data-label="Podcasts"> 209 <a class="nav-link" href="https://www.drownedinsound.org/podcasts/">Podcasts</a> 210 </li> 211 <li class="nav-playlists" data-label="Playlists"> 212 <a class="nav-link" href="https://www.drownedinsound.org/playlists/">Playlists</a> 213 </li> 214 <li class="nav-magazine" data-label="Magazine"> 215 <a class="nav-link" href="https://www.drownedinsound.org/shownotes/">Magazine</a> 216 </li> 217 <li class="nav-community" data-label="Community"> 218 <a class="nav-link" href="https://community.drownedinsound.com/">Community</a> 219 </li> 220 </ul> 221 222 </div> 223 <div class="mobile-menu-cta"> 224 <a href="#/portal/signin" class="light-button signin-button button">Sign in</a> 225 <a href="#/portal/signup" class="button">Subscribe</a> 226 </div> 227 <div class="sidebar"> 228 <a class="logo" href="https://www.drownedinsound.org"> 229 <img src="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/2025/07/Untitled-July-18-2025.png" alt="Drowned in Sound"> 230 </a> 231 </div> 232 </div> 233 </div> 234 <div class="navbar"> 235 <div class="search-bar-wrapper"> 236 <input type="text" class="search-input" placeholder="Search" data-ghost-search /> 237 <div class="search-icon-wrapper">
238 <span class="search-icon-open"> 239 <svg class="search-icon" width="100%" height="100%" viewBox="0 0 29 29" fill="none" xmlns="http://www.w3.org/2000/svg"> 240 <path d="M23.6833 25.375L16.0708 17.7625C15.4667 18.2458 14.7719 18.6285 13.9865 18.9104C13.201 19.1924 12.3653 19.3333 11.4792 19.3333C9.28403 19.3333 7.42642 18.5729 5.90633 17.052C4.38625 15.5311 3.62581 13.6735 3.625 11.4792C3.625 9.28403 4.38544 7.42642 5.90633 5.90633C7.42722 4.38625 9.28483 3.62581 11.4792 3.625C13.6743 3.625 15.5319 4.38544 17.052 5.90633C18.5721 7.42722 19.3325 9.28483 19.3333 11.4792C19.3333 12.3653 19.1924 13.201 18.9104 13.9865C18.6285 14.7719 18.2458 15.4667 17.7625 16.0708L25.375 23.6833L23.6833 25.375ZM11.4792 16.9167C12.9896 16.9167 14.2736 16.3878 15.3313 15.3301C16.389 14.2724 16.9175 12.9888 16.9167 11.4792C16.9167 9.96875 16.3878 8.68469 15.3301 7.627C14.2724 6.56931 12.9888 6.04086 11.4792 6.04167C9.96875 6.04167 8.68469 6.57051 7.627 7.62821C6.56931 8.6859 6.04086 9.96956 6.04167 11.4792C6.04167 12.9896 6.57051 14.2736 7.62821 15.3313C8.6859 16.389 9.96956 16.9175 11.4792 16.9167Z" fill="var(--text-color)"/> 241</svg> 242 </span> 243 <span class="search-icon-close"> 244 <div class="search-icon-close-line"></div> 245 <div class="search-icon-close-line search-icon-close-line-second"></div> 246 </span> 247 </div> 248 </div> 249 <a href="#/portal/signin" class="light-button signin-button navbar-button button">Sign in</a> 250 <a href="#/portal/signup" class="signin-button button navbar-button">Subscribe</a> 251 </div> 252 <div class="blur"></div> 253 254 <span id="navbar-texts" style="display: none; width: 0px; height: 0px;" data-no-results="0 results" data-results="results"></span> 255</custom-header> 256 <div class="site-main"> 257 258<main> 259 260<section class="hero "> 261 <div class="hero-content"> 262 <div class="heading-1-wrapper"> 263 <h1>Surfacing Music's Collective Power for Change</h1> 264 </div> 265 <div class="hero-description-wrapper "> 266 <p> 267 For 25 years our publication and podcast has recommended music. We now also spark conversations and create resources to help music fans discover their collective power. 268 </p> 269 </div> 270 271 <div class="action-wrapper"> 272 <form data-members-form="subscribe" class="subscribe-form"> 273 <div class="subscribe-with-alerts"> 274 <div class="subscribe-wrapper"> 275 <input data-members-email type="email" required="true" placeholder="[email protected]" class="subscribe-input"/> 276 <button type="submit">Subscribe</button> 277 </div> 278 <div class="subscribe-alerts"> 279 <small class="subscribe-alert loading-alert">Processing your request...</small> 280 <small class="subscribe-alert success-alert">Please check your inbox and click the link to confirm your subscription.</small> 281 <small class="subscribe-alert error-alert" data-members-error></small> 282 </div> 283 </div> 284 </form> 285 </div> 286 </div> 287</section> <link rel="stylesheet" type="text/css" href="https://www.drownedinsound.org/assets/css/latest-post.css?v=-JQL0FbYBMZm-zhL" /> 288 289 <section class="latest-post"> 290 <custom-card class="latest-post-content" data-chars="150"> 291 <div class="latest-post-top"> 292 <a href="https://www.drownedinsound.org/tag/newsletter/" class="latest-post-tag medium-text">Newsletter</a> 293 <a class="latest-post-title" href="/theres-comfort-in-rage-but-rage-is-not-enough/"> 294 <h2>Thereâs comfort in rage â but rage is not enough</h2> 295 </a> 296 </div> 297 <div class="latest-post-bottom"> 298 <div class="latest-post-paragraph"> 299 <p class="truncate"> 300 Slipknot and Manson. The Cornell 7. The resulting rage is a reminder that weâve not been desensitised to violence against women â but when will this lead to change? 301 </p> 302 </div> 303 304 <a class="plus-button" href="https://www.drownedinsound.org/theres-comfort-in-rage-but-rage-is-not-enough/" aria-label="link to: https://www.drownedinsound.org/theres-comfort-in-rage-but-rage-is-not-enough/"> 305 <div class="vertical-line"></div> 306 <div class="horizontal-line"></div> 307 </a> 308 </div> 309 </custom-card> 310 <a class="latest-post-image-link" href="/theres-comfort-in-rage-but-rage-is-not-enough/"> 311 <figure> 312 <img 313 srcset="https://images.unsplash.com/photo-1485113771930-4e8b61c60d64?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE2fHxmZW1pbmlzbXxlbnwwfHx8fDE3OTA3OTMzMjB8MA&ixlib=rb-4.1.0&q=80&w=300 300w, 314 https://images.unsplash.com/photo-1485113771930-4e8b61c60d64?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE2fHxmZW1pbmlzbXxlbnwwfHx8fDE3OTA3OTMzMjB8MA&ixlib=rb-4.1.0&q=80&w=720 720w, 315 https://images.unsplash.com/photo-1485113771930-4e8b61c60d64?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE2fHxmZW1pbmlzbXxlbnwwfHx8fDE3OTA3OTMzMjB8MA&ixlib=rb-4.1.0&q=80&w=960 960w, 316 https://images.unsplash.com/photo-1485113771930-4e8b61c60d64?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE2fHxmZW1pbmlzbXxlbnwwfHx8fDE3OTA3OTMzMjB8MA&ixlib=rb-4.1.0&q=80&w=1200 1200w, 317 https://images.unsplash.com/photo-1485113771930-4e8b61c60d64?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE2fHxmZW1pbmlzbXxlbnwwfHx8fDE3OTA3OTMzMjB8MA&ixlib=rb-4.1.0&q=80&w=2000 2000w" 318 src="https://images.unsplash.com/photo-1485113771930-4e8b61c60d64?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE2fHxmZW1pbmlzbXxlbnwwfHx8fDE3OTA3OTMzMjB8MA&ixlib=rb-4.1.0&q=80&w=1200" 319 alt="Thereâs comfort in rage â but rage is not enough" 320 > 321 </figure> 322 </a> 323 </section> 324 325 <section class="featured-stories"> 326 327<section-header class="section-header" id="featured-stories-slider-controller" > 328 <div class="section-header-heading-link"> 329 <h2>Featured stories</h2> 330 </div> 331 332 <div class="section-header-arrows"> 333 <button class="arrow-button unstyled-button" aria-label="Button left" name="left">
334 <svg width="100%" height="100%" viewBox="0 0 80 22" fill="none" xmlns="http://www.w3.org/2000/svg"> 335 <path d="M0 11L79 11" stroke="var(--text-color)" stroke-width="1.5"/> 336 <path d="M58.0026 21.0625C58.0026 21.0625 57.3026 11.2875 79.0026 11" stroke="var(--text-color)" stroke-width="1.5"/> 337 <path d="M58.0026 1C58.0026 1 57.3026 10.775 79.0026 11.0625" stroke="var(--text-color)" stroke-width="1.5"/> 338</svg> 339 340 </button> 341 <button class="arrow-button unstyled-button" aria-label="Button right" name="right"> 342 <svg width="100%" height="100%" viewBox="0 0 80 22" fill="none" xmlns="http://www.w3.org/2000/svg"> 343 <path d="M0 11L79 11" stroke="var(--text-color)" stroke-width="1.5"/> 344 <path d="M58.0026 21.0625C58.0026 21.0625 57.3026 11.2875 79.0026 11" stroke="var(--text-color)" stroke-width="1.5"/> 345 <path d="M58.0026 1C58.0026 1 57.3026 10.775 79.0026 11.0625" stroke="var(--text-color)" stroke-width="1.5"/> 346</svg> 347 348 </button> 349 </div> 350</section-header> 351<custom-slider class="slider" id="featured-stories-slider"> 352 <div class="slider-inner"> 353 <custom-card class="card" data-chars="100"> 354 <div class="card-link-category-link"> 355 <a href="https://www.drownedinsound.org/tag/newsletter/" class="category-link">Newsletter</a> 356 </div> 357 <a href="/hello-the-cd-resurgence-weve-been-expecting-you/" class="card-title-link"> 358 <h3>Hello the CD resurgence, we've been expecting you...</h3> 359 </a> 360 <a href="/hello-the-cd-resurgence-weve-been-expecting-you/" class="card-image-link"> 361 <figure> 362 <img 363 srcset="https://images.unsplash.com/photo-1605286111427-67133b091012?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fENEc3xlbnwwfHx8fDE3ODQ2NTU2NjF8MA&ixlib=rb-4.1.0&q=80&w=300 300w, 364 https://images.unsplash.com/photo-1605286111427-67133b091012?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fENEc3xlbnwwfHx8fDE3ODQ2NTU2NjF8MA&ixlib=rb-4.1.0&q=80&w=720 720w, 365 https://images.unsplash.com/photo-1605286111427-67133b091012?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fENEc3xlbnwwfHx8fDE3ODQ2NTU2NjF8MA&ixlib=rb-4.1.0&q=80&w=960 960w, 366 https://images.unsplash.com/photo-1605286111427-67133b091012?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fENEc3xlbnwwfHx8fDE3ODQ2NTU2NjF8MA&ixlib=rb-4.1.0&q=80&w=1200 1200w, 367 https://images.unsplash.com/photo-1605286111427-67133b091012?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fENEc3xlbnwwfHx8fDE3ODQ2NTU2NjF8MA&ixlib=rb-4.1.0&q=80&w=2000 2000w" 368 src="https://images.unsplash.com/photo-1605286111427-67133b091012?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fENEc3xlbnwwfHx8fDE3ODQ2NTU2NjF8MA&ixlib=rb-4.1.0&q=80&w=1200" 369 alt="Hello the CD resurgence, we've been expecting you..." 370 > 371 </figure> 372 </a> 373 <div class="card-lower-part"> 374 <div class="card-text-with-button"> 375 <p class="truncate"> 376 A report has confirmed that the growth in CD sales is outpacing that of vinyl - Emma Wilkes unpicks this (with some help from her sister). 377 </p> 378 379 <a class="plus-button" href="https://www.drownedinsound.org/hello-the-cd-resurgence-weve-been-expecting-you/" aria-label="link to: https://www.drownedinsound.org/hello-the-cd-resurgence-weve-been-expecting-you/"> 380 <div class="vertical-line"></div> 381 <div class="horizontal-line"></div> 382 </a> 383 </div> 384 </div> 385</custom-card> 386 <custom-card class="card" data-chars="100"> 387 <div class="card-link-category-link"> 388 <a href="https://www.drownedinsound.org/tag/newsletter/" class="category-link">Newsletter</a> 389 </div> 390 <a href="/james-blake-smears-music-critics/" class="card-title-link"> 391 <h3>James Blake Smears Music Critics</h3> 392 </a> 393 <a href="/james-blake-smears-music-critics/" class="card-image-link"> 394 <figure> 395 <img 396 srcset="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w300/2026/06/Untitled---September-30--2025-at-16.28.37-68.png 300w, 397 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w720/2
397026/06/Untitled---September-30--2025-at-16.28.37-68.png 720w, 398 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2026/06/Untitled---September-30--2025-at-16.28.37-68.png 960w, 399 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2026/06/Untitled---September-30--2025-at-16.28.37-68.png 1200w, 400 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w2000/2026/06/Untitled---September-30--2025-at-16.28.37-68.png 2000w" 401 src="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2026/06/Untitled---September-30--2025-at-16.28.37-68.png" 402 alt="James Blake Smears Music Critics" 403 > 404 </figure> 405 </a> 406 <div class="card-lower-part"> 407 <div class="card-text-with-button"> 408 <p class="truncate"> 409 An open invitation to James Blake to retract his comments about music journalism. 410 </p> 411 412 <a class="plus-button" href="https://www.drownedinsound.org/james-blake-smears-music-critics/" aria-label="link to: https://www.drownedinsound.org/james-blake-smears-music-critics/"> 413 <div class="vertical-line"></div> 414 <div class="horizontal-line"></div> 415 </a> 416 </div> 417 </div> 418</custom-card> 419 <custom-card class="card" data-chars="100"> 420 <div class="card-link-category-link"> 421 <a href="https://www.drownedinsound.org/tag/newsletter/" class="category-link">Newsletter</a> 422 </div> 423 <a href="/squeaky-bum-time-for-live-nation-again/" class="card-title-link"> 424 <h3>Squeaky bum time for Live Nation... again?</h3> 425 </a> 426 <a href="/squeaky-bum-time-for-live-nation-again/" class="card-image-link"> 427 <figure> 428 <img 429 srcset="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w300/2026/05/gaga-live-nation-ticket-1.jpg 300w, 430 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w720/2026/05/gaga-live-nation-ticket-1.jpg 720w, 431 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2026/05/gaga-live-nation-ticket-1.jpg 960w, 432 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2026/05/gaga-live-nation-ticket-1.jpg 1200w, 433 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w2000/2026/05/gaga-live-nation-ticket-1.jpg 2000w" 434 src="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2026/05/gaga-live-nation-ticket-1.jpg" 435 alt="Squeaky bum time for Live Nation... again?" 436 > 437 </figure> 438 </a> 439 <div class="card-lower-part"> 440 <div class="card-text-with-button"> 441 <p class="truncate"> 442 MPs in the UK say Live Nation has created a "climate of fear" whilst their data says they have a 58% grip on UK ticketing. Here's what else the Committee found. 443 </p> 444 445 <a class="plus-button" href="https://www.drownedinsound.org/squeaky-bum-time-for-live-nation-again/" aria-label="link to: https://www.drownedinsound.org/squeaky-bum-time-for-live-nation-again/"> 446 <div class="vertical-line"></div> 447 <div class="horizontal-line"></div> 448 </a> 449 </div> 450 </div> 451</custom-card> 452 <custom-card class="card" data-chars="100"> 453 <div class="card-link-category-link"> 454 <a href="https://www.drownedinsound.org/tag/newsletter/" class="category-link">Newsletter</a> 455 </div> 456 <a href="/five-new-artists-one-cool-thing-in-common/" class="card-title-link"> 457 <h3>Five new artists, one cool thing in common</h3> 458 </a> 459 <a href="/five-new-artists-one-cool-thing-in-common/" class="card-image-link"> 460 <figure> 461 <img 462 srcset="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w300/2026/05/yakkie-press-pic.jpg 300w, 463 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w720/2
463026/05/yakkie-press-pic.jpg 720w, 464 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2026/05/yakkie-press-pic.jpg 960w, 465 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2026/05/yakkie-press-pic.jpg 1200w, 466 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w2000/2026/05/yakkie-press-pic.jpg 2000w" 467 src="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2026/05/yakkie-press-pic.jpg" 468 alt="Five new artists, one cool thing in common" 469 > 470 </figure> 471 </a> 472 <div class="card-lower-part"> 473 <div class="card-text-with-button"> 474 <p class="truncate"> 475 Emma Wilkes recommends 5 emerging names you need to see live + our weekly music news round up. 476 </p> 477 478 <a class="plus-button" href="https://www.drownedinsound.org/five-new-artists-one-cool-thing-in-common/" aria-label="link to: https://www.drownedinsound.org/five-new-artists-one-cool-thing-in-common/"> 479 <div class="vertical-line"></div> 480 <div class="horizontal-line"></div> 481 </a> 482 </div> 483 </div> 484</custom-card> 485 <custom-card class="card" data-chars="100"> 486 <div class="card-link-category-link"> 487 <a href="https://www.drownedinsound.org/tag/newsletter/" class="category-link">Newsletter</a> 488 </div> 489 <a href="/are-phone-free-events-the-way-forward-for-live-music/" class="card-title-link"> 490 <h3>Are phone-free events the way forward for live music?</h3> 491 </a> 492 <a href="/are-phone-free-events-the-way-forward-for-live-music/" class="card-image-link"> 493 <figure> 494 <img 495 srcset="https://images.unsplash.com/photo-1737107917737-27f5530650db?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHBob25lJTIwZ2lnfGVufDB8fHx8MTc3ODYwNjg0NXww&ixlib=rb-4.1.0&q=80&w=300 300w, 496 https://images.unsplash.com/photo-1737107917737-27f5530650db?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHBob25lJTIwZ2lnfGVufDB8fHx8MTc3ODYwNjg0NXww&ixlib=rb-4.1.0&q=80&w=720 720w, 497 https://images.unsplash.com/photo-1737107917737-27f5530650db?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHBob25lJTIwZ2lnfGVufDB8fHx8MTc3ODYwNjg0NXww&ixlib=rb-4.1.0&q=80&w=960 960w, 498 https://images.unsplash.com/photo-1737107917737-27f5530650db?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHBob25lJTIwZ2lnfGVufDB8fHx8MTc3ODYwNjg0NXww&ixlib=rb-4.1.0&q=80&w=1200 1200w, 499 https://images.unsplash.com/photo-1737107917737-27f5530650db?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHBob25lJTIwZ2lnfGVufDB8fHx8MTc3ODYwNjg0NXww&ixlib=rb-4.1.0&q=80&w=2000 2000w" 500 src="https://images.unsplash.com/photo-1737107917737-27f5530650db?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHBob25lJTIwZ2lnfGVufDB8fHx8MTc3ODYwNjg0NXww&ixlib=rb-4.1.0&q=80&w=1200" 501 alt="Are phone-free events the way forward for live music?" 502 > 503 </figure> 504 </a> 505 <div class="card-lower-part"> 506 <div class="card-text-with-button"> 507 <p class="truncate"> 508 Plus a new UK-wide music festival, our emergency podcast, Eurovision, and more. 509 </p> 510 511 <a class="plus-button" href="https://www.drownedinsound.org/are-phone-free-events-the-way-forward-for-live-music/" aria-label="link to: https://www.drownedinsound.org/are-phone-free-events-the-way-forward-for-live-music/"> 512 <div class="vertical-line"></div> 513 <div class="horizontal-line"></div> 514 </a> 515 </div> 516 </div> 517</custom-card> 518 <custom-card class="card" data-chars="100"> 519 <div class="card-link-category-link"> 520 <a href="https://www.drownedinsound.org/tag/essay/" class="category-link">Essay</a> 521 <div class="restricted-access-icon">
522 <svg width="100%" height="100%" viewBox="0 0 96 113" fill="none" xmlns="http://www.w3.org/2000/svg"> 523 <path d="M16 42.9997V33.6663C16 15.5063 29.3493 0.333008 48 0.333008C66.6507 0.333008 80 15.5063 80 33.6663V42.9997H82.6667C86.2029 42.9997 89.5943 44.4044 92.0948 46.9049C94.5952 49.4054 96 52.7968 96 56.333V98.9997C96 102.536 94.5952 105.927 92.0948 108.428C89.5943 110.928 86.2029 112.333 82.6667 112.333H13.3333C9.79711 112.333 6.40573 110.928 3.90524 108.428C1.40476 105.927 0 102.536 0 98.9997V56.333C0 52.7968 1.40476 49.4054 3.90524 46.9049C6.40573 44.4044 9.79711 42.9997 13.3333 42.9997H16ZM8 56.333V98.9997C8 100.414 8.5619 101.771 9.5621 102.771C10.5623 103.771 11.9188 104.333 13.3333 104.333H82.6667C84.0812 104.333 85.4377 103.771 86.4379 102.771C87.4381 101.771 88 100.414 88 98.9997V56.333C88 54.9185 87.4381 53.562 86.4379 52.5618C85.4377 51.5616 84.0812 50.9997 82.6667 50.9997H13.3333C11.9188 50.9997 10.5623 51.5616 9.5621 52.5618C8.5619 53.562 8 54.9185 8 56.333ZM24 33.6663V42.9997H72V33.6663C72 19.4263 61.7493 8.33301 48 8.33301C34.2507 8.33301 24 19.4263 24 33.6663Z" fill="var(--text-color)"/> 524</svg> 525 </div> 526 </div> 527 <a href="/gene-simmons-the-last-gasp-of-an-old-order/" class="card-title-link"> 528 <h3>Gene Simmons & The Last Gasp of an Old Order</h3> 529 </a> 530 <a href="/gene-simmons-the-last-gasp-of-an-old-order/" class="card-image-link"> 531 <figure> 532 <img 533 srcset="https://images.unsplash.com/photo-1485504750689-aa2121ffe6c6?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDEyfHwlMjBidXJuaW5nfGVufDB8fHx8MTc3Mzc3MjI3MHww&ixlib=rb-4.1.0&q=80&w=300 300w, 534 https://images.unsplash.com/photo-1485504750689-aa2121ffe6c6?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDEyfHwlMjBidXJuaW5nfGVufDB8fHx8MTc3Mzc3MjI3MHww&ixlib=rb-4.1.0&q=80&w=720 720w, 535 https://images.unsplash.com/photo-1485504750689-aa2121ffe6c6?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDEyfHwlMjBidXJuaW5nfGVufDB8fHx8MTc3Mzc3MjI3MHww&ixlib=rb-4.1.0&q=80&w=960 960w, 536 https://images.unsplash.com/photo-1485504750689-aa2121ffe6c6?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDEyfHwlMjBidXJuaW5nfGVufDB8fHx8MTc3Mzc3MjI3MHww&ixlib=rb-4.1.0&q=80&w=1200 1200w, 537 https://images.unsplash.com/photo-1485504750689-aa2121ffe6c6?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDEyfHwlMjBidXJuaW5nfGVufDB8fHx8MTc3Mzc3MjI3MHww&ixlib=rb-4.1.0&q=80&w=2000 2000w" 538 src="https://images.unsplash.com/photo-1485504750689-aa2121ffe6c6?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDEyfHwlMjBidXJuaW5nfGVufDB8fHx8MTc3Mzc3MjI3MHww&ixlib=rb-4.1.0&q=80&w=1200" 539 alt="Gene Simmons & The Last Gasp of an Old Order" 540 > 541 </figure> 542 </a> 543 <div class="card-lower-part"> 544 <div class="card-text-with-button"> 545 <p class="truncate"> 546 An old world is dying, a new world is waiting to be born. What we see in politics, we sometimes see in music too⦠547 </p> 548 549 <a class="plus-button" href="https://www.drownedinsound.org/gene-simmons-the-last-gasp-of-an-old-order/" aria-label="link to: https://www.drownedinsound.org/gene-simmons-the-last-gasp-of-an-old-order/"> 550 <div class="vertical-line"></div> 551 <div class="horizontal-line"></div> 552 </a> 553 </div> 554 </div> 555</custom-card> 556 </div> 557</custom-slider> 558 </section> 559 560 <section class="latest-stories"> 561 562<section-header class="section-header" id="latest-stories-header" > 563 <div class="section-header-heading-link"> 564 <h2>Latest stories</h2> 565 </div> 566 567 <div class="section-header-number"> 568 <div class="big-text">223 posts</div> 569 </div> 570</section-header> <div class="grid pagination-grid" id="latest-stories-grid"> 571 <custom-card class="card" data-chars="100"> 572 <div class="card-link-category-link"> 573 <a href="https://www.drownedinsound.org/tag/newsletter/" class="category-link">Newsletter</a> 574 </div> 575 <a href="/theres-comfort-in-rage-but-rage-is-not-enough/" class="card-title-link"> 576 <h3>Thereâs comfort in rage â but rage is not enough</h3> 577 </a> 578 <a href="/theres-comfort-in-rage-but-rage-is-not-enough/" class="card-image-link"> 579 <figure> 580 <img 581 srcset="https://images.unsplash.com/photo-1485113771930-4e8b61c60d64?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE2fHxmZW1pbmlzbXxlbnwwfHx8fDE3OTA3OTMzMjB8MA&ixlib=rb-4.1.0&q=80&w=300 300w, 582 https://images.unsplash.com/photo-1485113771930-4e8b61c60d64?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE2fHxmZW1pbmlzbXxlbnwwfHx8fDE3OTA3OTMzMjB8MA&ixlib=rb-4.1.0&q=80&w=720 720w, 583 https://images.unsplash.com/photo-1485113771930-4e8b61c60d64?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE2fHxmZW1pbmlzbXxlbnwwfHx8fDE3OTA3OTMzMjB8MA&ixlib=rb-4.1.0&q=80&w=960 960w, 584 https://images.unsplash.com/photo-1485113771930-4e8b61c60d64?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE2fHxmZW1pbmlzbXxlbnwwfHx8fDE3OTA3OTMzMjB8MA&ixlib=rb-4.1.0&q=80&w=1200 1200w, 585 https://images.unsplash.com/photo-1485113771930-4e8b61c60d64?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE2fHxmZW1pbmlzbXxlbnwwfHx8fDE3OTA3OTMzMjB8MA&ixlib=rb-4.1.0&q=80&w=2000 2000w" 586 src="https://images.unsplash.com/photo-1485113771930-4e8b61c60d64?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE2fHxmZW1pbmlzbXxlbnwwfHx8fDE3OTA3OTMzMjB8MA&ixlib=rb-4.1.0&q=80&w=1200" 587 alt="Thereâs comfort in rage â but rage is not enough" 588 > 589 </figure> 590 </a> 591 <div class="card-lower-part"> 592 <div class="card-text-with-button"> 593 <p class="truncate"> 594 Slipknot and Manson. The Cornell 7. The resulting rage is a reminder that weâve not been desensitised to violence against women â but when will this lead to change? 595 </p> 596 597 <a class="plus-button" href="https://www.drownedinsound.org/theres-comfort-in-rage-but-rage-is-not-enough/" aria-label="link to: https://www.drownedinsound.org/theres-comfort-in-rage-but-rage-is-not-enough/"> 598 <div class="vertical-line"></div> 599 <div class="horizontal-line"></div> 600 </a> 601 </div> 602 </div> 603</custom-card> 604 <custom-card class="card" data-chars="100"> 605 <div class="card-link-category-link"> 606 <a href="https://www.drownedinsound.org/tag/newsletter/" class="category-link">Newsletter</a> 607 </div> 608 <a href="/26-lessons-from-26-years-of-drowned-in-sound/" class="card-title-link"> 609 <h3>26 Lessons from 26 Years of Drowned in Sound</h3> 610 </a> 611 <a href="/26-lessons-from-26-years-of-drowned-in-sound/" class="card-image-link"> 612 <figure> 613 <img 614 srcset="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w300/2026/10/Untitled---September-30--2025-at-16.28.37-67--1-.png 300w, 615 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w720/2
615026/10/Untitled---September-30--2025-at-16.28.37-67--1-.png 720w, 616 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2026/10/Untitled---September-30--2025-at-16.28.37-67--1-.png 960w, 617 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2026/10/Untitled---September-30--2025-at-16.28.37-67--1-.png 1200w, 618 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w2000/2026/10/Untitled---September-30--2025-at-16.28.37-67--1-.png 2000w" 619 src="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2026/10/Untitled---September-30--2025-at-16.28.37-67--1-.png" 620 alt="26 Lessons from 26 Years of Drowned in Sound" 621 > 622 </figure> 623 </a> 624 <div class="card-lower-part"> 625 <div class="card-text-with-button"> 626 <p class="truncate"> 627 Being called a "gobsh*te" by Liam Gallagher and the things I wish I knew 26 years ago. 628 </p> 629 630 <a class="plus-button" href="https://www.drownedinsound.org/26-lessons-from-26-years-of-drowned-in-sound/" aria-label="link to: https://www.drownedinsound.org/26-lessons-from-26-years-of-drowned-in-sound/"> 631 <div class="vertical-line"></div> 632 <div class="horizontal-line"></div> 633 </a> 634 </div> 635 </div> 636</custom-card> 637 <custom-card class="card" data-chars="100"> 638 <div class="card-link-category-link"> 639 <a href="https://www.drownedinsound.org/tag/newsletter/" class="category-link">Newsletter</a> 640 </div> 641 <a href="/burnout-is-not-brat-charli-xcxs-struggles-with-touring-are-just-the-tip-of-the-iceberg/" class="card-title-link"> 642 <h3>Burnout is not brat: Charli xcxâs struggles with touring are just the tip of the iceberg</h3> 643 </a> 644 <a href="/burnout-is-not-brat-charli-xcxs-struggles-with-touring-are-just-the-tip-of-the-iceberg/" class="card-image-link"> 645 <figure> 646 <img 647 srcset="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w300/2026/09/photo-1620820890113-d23d17e54643.jpeg 300w, 648 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w720/2026/09/photo-1620820890113-d23d17e54643.jpeg 720w, 649 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2026/09/photo-1620820890113-d23d17e54643.jpeg 960w, 650 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2026/09/photo-1620820890113-d23d17e54643.jpeg 1200w, 651 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w2000/2026/09/photo-1620820890113-d23d17e54643.jpeg 2000w" 652 src="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2026/09/photo-1620820890113-d23d17e54643.jpeg" 653 alt="Burnout is not brat: Charli xcxâs struggles with touring are just the tip of the iceberg" 654 > 655 </figure> 656 </a> 657 <div class="card-lower-part"> 658 <div class="card-text-with-button"> 659 <p class="truncate"> 660 Emma Wilkes asks - if one of the biggest popstars in the world is struggling, what must it be like for everyone else? 661 </p> 662 663 <a class="plus-button" href="https://www.drownedinsound.org/burnout-is-not-brat-charli-xcxs-struggles-with-touring-are-just-the-tip-of-the-iceberg/" aria-label="link to: https://www.drownedinsound.org/burnout-is-not-brat-charli-xcxs-struggles-with-touring-are-just-the-tip-of-the-iceberg/"> 664 <div class="vertical-line"></div> 665 <div class="horizontal-line"></div> 666 </a> 667 </div> 668 </div> 669</custom-card> 670 <custom-card class="card" data-chars="100"> 671 <div class="card-link-category-link"> 672 <a href="https://www.drownedinsound.org/tag/essay/" class="category-link">Essay</a> 673 <div class="restricted-access-icon">
674 <svg width="100%" height="100%" viewBox="0 0 96 113" fill="none" xmlns="http://www.w3.org/2000/svg"> 675 <path d="M16 42.9997V33.6663C16 15.5063 29.3493 0.333008 48 0.333008C66.6507 0.333008 80 15.5063 80 33.6663V42.9997H82.6667C86.2029 42.9997 89.5943 44.4044 92.0948 46.9049C94.5952 49.4054 96 52.7968 96 56.333V98.9997C96 102.536 94.5952 105.927 92.0948 108.428C89.5943 110.928 86.2029 112.333 82.6667 112.333H13.3333C9.79711 112.333 6.40573 110.928 3.90524 108.428C1.40476 105.927 0 102.536 0 98.9997V56.333C0 52.7968 1.40476 49.4054 3.90524 46.9049C6.40573 44.4044 9.79711 42.9997 13.3333 42.9997H16ZM8 56.333V98.9997C8 100.414 8.5619 101.771 9.5621 102.771C10.5623 103.771 11.9188 104.333 13.3333 104.333H82.6667C84.0812 104.333 85.4377 103.771 86.4379 102.771C87.4381 101.771 88 100.414 88 98.9997V56.333C88 54.9185 87.4381 53.562 86.4379 52.5618C85.4377 51.5616 84.0812 50.9997 82.6667 50.9997H13.3333C11.9188 50.9997 10.5623 51.5616 9.5621 52.5618C8.5619 53.562 8 54.9185 8 56.333ZM24 33.6663V42.9997H72V33.6663C72 19.4263 61.7493 8.33301 48 8.33301C34.2507 8.33301 24 19.4263 24 33.6663Z" fill="var(--text-color)"/> 676</svg> 677 </div> 678 </div> 679 <a href="/id-like-to-thank-chino-moreno/" class="card-title-link"> 680 <h3>Iâd like to thank Chino Morenoâ¦</h3> 681 </a> 682 <a href="/id-like-to-thank-chino-moreno/" class="card-image-link"> 683 <figure> 684 <img 685 srcset="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w300/2026/09/deftones-press-photo.jpg 300w, 686 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w720/2026/09/deftones-press-photo.jpg 720w, 687 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2026/09/deftones-press-photo.jpg 960w, 688 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2026/09/deftones-press-photo.jpg 1200w, 689 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w2000/2026/09/deftones-press-photo.jpg 2000w" 690 src="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2026/09/deftones-press-photo.jpg" 691 alt="Iâd like to thank Chino Morenoâ¦" 692 > 693 </figure> 694 </a> 695 <div class="card-lower-part"> 696 <div class="card-text-with-button"> 697 <p class="truncate"> 698 Emma Wilkes' DiS essay Deftones is for the girls won at the IMJAs at Reeperbahn Festival in Hamburg. She recounts how her prize-winning essay came together... 699 </p> 700 701 <a class="plus-button" href="https://www.drownedinsound.org/id-like-to-thank-chino-moreno/" aria-label="link to: https://www.drownedinsound.org/id-like-to-thank-chino-moreno/"> 702 <div class="vertical-line"></div> 703 <div class="horizontal-line"></div> 704 </a> 705 </div> 706 </div> 707</custom-card> 708 <custom-card class="card" data-chars="100"> 709 <div class="card-link-category-link"> 710 <a href="https://www.drownedinsound.org/tag/shownotes/" class="category-link">SHOWNOTES</a> 711 </div> 712 <a href="/introducing-shownotes/" class="card-title-link"> 713 <h3>Introducing... SHOWNOTES</h3> 714 </a> 715 <a href="/introducing-shownotes/" class="card-image-link"> 716 <figure> 717 <img 718 srcset="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w300/2026/09/Untitled---September-21--2026-at-14.23.13-1.png 300w, 719 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w720/2026/09/Untitled---September-21--2026-at-14.23.13-1.png 720w, 720 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2026/09/Untitled---September-21--2026-at-14.23.13-1.png 960w, 721 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2026/09/Untitled---September-21--2026-at-14.23.13-1.png 1200w, 722 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w2000/2026/09/Untitled---September-21--2026-at-14.23.13-1.png 2000w" 723 src="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2026/09/Untitled---September-21--2026-at-14.23.13-1.png" 724 alt="Introducing... SHOWNOTES" 725 > 726 </figure> 727 </a> 728 <div class="card-lower-part"> 729 <div class="card-text-with-button"> 730 <p class="truncate"> 731 We're thrilled to share details about our new print publication. 732 </p> 733 734 <a class="plus-button" href="https://www.drownedinsound.org/introducing-shownotes/" aria-label="link to: https://www.drownedinsound.org/introducing-shownotes/"> 735 <div class="vertical-line"></div> 736 <div class="horizontal-line"></div> 737 </a> 738 </div> 739 </div> 740</custom-card> 741 <custom-card class="card" data-chars="100"> 742 <div class="card-link-category-link"> 743 <a href="https://www.drownedinsound.org/tag/newsletter/" class="category-link">Newsletter</a> 744 </div> 745 <a href="/drowned-in-sound-news-update-september-2026/" class="card-title-link"> 746 <h3>From Ed Sheeran to streaming emissions: All the news you might have missed</h3> 747 </a> 748 <a href="/drowned-in-sound-news-update-september-2026/" class="card-image-link"> 749 <figure> 750 <img 751 srcset="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w300/2026/09/Untitled---September-30--2025-at-16.28.37-67.jpeg 300w, 752 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w720/2
752026/09/Untitled---September-30--2025-at-16.28.37-67.jpeg 720w, 753 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2026/09/Untitled---September-30--2025-at-16.28.37-67.jpeg 960w, 754 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2026/09/Untitled---September-30--2025-at-16.28.37-67.jpeg 1200w, 755 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w2000/2026/09/Untitled---September-30--2025-at-16.28.37-67.jpeg 2000w" 756 src="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w1200/2026/09/Untitled---September-30--2025-at-16.28.37-67.jpeg" 757 alt="From Ed Sheeran to streaming emissions: All the news you might have missed" 758 > 759 </figure> 760 </a> 761 <div class="card-lower-part"> 762 <div class="card-text-with-button"> 763 <p class="truncate"> 764 Summer's over, autumn's here, and the news cycle just keeps running. Emma Wilkes rounds up all you need to know. 765 </p> 766 767 <a class="plus-button" href="https://www.drownedinsound.org/drowned-in-sound-news-update-september-2026/" aria-label="link to: https://www.drownedinsound.org/drowned-in-sound-news-update-september-2026/"> 768 <div class="vertical-line"></div> 769 <div class="horizontal-line"></div> 770 </a> 771 </div> 772 </div> 773</custom-card> 774</div> 775 776 <custom-pagination> 777 <nav> 778 <button id="load-more-btn" data-current-page="1" class="pagination-button button">Load more</button> 779 </nav> 780 </custom-pagination> 781 </section> 782 783 <section class="browse-by-tags"> 784 785<section-header class="section-header" id="browse-by-tags-slider-controller" style="border-bottom: none;"> 786 <div class="section-header-heading-link"> 787 <h2>Browse by tags</h2> 788 </div> 789 790 <div class="section-header-arrows"> 791 <button class="arrow-button unstyled-button" aria-label="Button left" name="left"> 792 <svg width="100%" height="100%" viewBox="0 0 80 22" fill="none" xmlns="http://www.w3.org/2000/svg"> 793 <path d="M0 11L79 11" stroke="var(--text-color)" stroke-width="1.5"/> 794 <path d="M58.0026 21.0625C58.0026 21.0625 57.3026 11.2875 79.0026 11" stroke="var(--text-color)" stroke-width="1.5"/> 795 <path d="M58.0026 1C58.0026 1 57.3026 10.775 79.0026 11.0625" stroke="var(--text-color)" stroke-width="1.5"/> 796</svg> 797 798 </button> 799 <button class="arrow-button unstyled-button" aria-label="Button right" name="right"> 800 <svg width="100%" height="100%" viewBox="0 0 80 22" fill="none" xmlns="http://www.w3.org/2000/svg"> 801 <path d="M0 11L79 11" stroke="var(--text-color)" stroke-width="1.5"/> 802 <path d="M58.0026 21.0625C58.0026 21.0625 57.3026 11.2875 79.0026 11" stroke="var(--text-color)" stroke-width="1.5"/> 803 <path d="M58.0026 1C58.0026 1 57.3026 10.775 79.0026 11.0625" stroke="var(--text-color)" stroke-width="1.5"/> 804</svg> 805 806 </button> 807 </div> 808</section-header> 809<custom-slider class="slider" id="browse-by-tags-slider"> 810 <div class="slider-inner"> 811 812<div class="tag-card"> 813 <a href="/tag/essay/" class="card-image-link" aria-label="link to: "> 814 <figure> 815 <img 816 srcset="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w150/2025/07/Untitled-July-02-2025.png 150w, 817 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w300/2025/07/Untitled-July-02-2025.png 300w, 818 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w720/2025/07/Untitled-July-02-2025.png 720w, 819 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2025/07/Untitled-July-02-2025.png 960w" 820 src="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2025/07/Untitled-July-02-2025.png" 821 alt="" 822 > 823 </figure> 824 </a> 825 <a class="tag-heading-link" href="/tag/essay/"> 826 <div class="big-text">Essay</div> 827 </a> 828</div> 829<div class="tag-card"> 830 <a href="/tag/interview/" class="card-image-link" aria-label="link to: "> 831 <figure> 832 <img 833 srcset="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w150/2025/07/Untitled-July-2-2025--27-.png 150w, 834 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w300/2025/07/Untitled-July-2-2025--27-.png 300w, 835 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w720/2
835025/07/Untitled-July-2-2025--27-.png 720w, 836 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2025/07/Untitled-July-2-2025--27-.png 960w" 837 src="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2025/07/Untitled-July-2-2025--27-.png" 838 alt="" 839 > 840 </figure> 841 </a> 842 <a class="tag-heading-link" href="/tag/interview/"> 843 <div class="big-text">Interview</div> 844 </a> 845</div> 846<div class="tag-card"> 847 <a href="/tag/newsletter/" class="card-image-link" aria-label="link to: "> 848 <figure> 849 <img 850 srcset="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w150/2025/07/Untitled-July-02-2025--4-.png 150w, 851 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w300/2025/07/Untitled-July-02-2025--4-.png 300w, 852 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w720/2025/07/Untitled-July-02-2025--4-.png 720w, 853 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2025/07/Untitled-July-02-2025--4-.png 960w" 854 src="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2025/07/Untitled-July-02-2025--4-.png" 855 alt="" 856 > 857 </figure> 858 </a> 859 <a class="tag-heading-link" href="/tag/newsletter/"> 860 <div class="big-text">Newsletter</div> 861 </a> 862</div> 863<div class="tag-card"> 864 <a href="/tag/offers/" class="card-image-link" aria-label="link to: "> 865 <figure> 866 <img 867 srcset="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w150/2025/07/Untitled-July-02-2025--5-.png 150w, 868 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w300/2025/07/Untitled-July-02-2025--5-.png 300w, 869 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w720/2025/07/Untitled-July-02-2025--5-.png 720w, 870 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2025/07/Untitled-July-02-2025--5-.png 960w" 871 src="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2025/07/Untitled-July-02-2025--5-.png" 872 alt="" 873 > 874 </figure> 875 </a> 876 <a class="tag-heading-link" href="/tag/offers/"> 877 <div class="big-text">Offers</div> 878 </a> 879</div> 880<div class="tag-card"> 881 <a href="/tag/podcast-2/" class="card-image-link" aria-label="link to: "> 882 <figure> 883 <img 884 srcset="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w150/2026/03/DiS-Artwork-04.jpg 150w, 885 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w300/2026/03/DiS-Artwork-04.jpg 300w, 886 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w720/2026/03/DiS-Artwork-04.jpg 720w, 887 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2026/03/DiS-Artwork-04.jpg 960w" 888 src="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2026/03/DiS-Artwork-04.jpg" 889 alt="" 890 > 891 </figure> 892 </a> 893 <a class="tag-heading-link" href="/tag/podcast-2/"> 894 <div class="big-text">
894Podcast</div> 895 </a> 896</div> 897<div class="tag-card"> 898 <a href="/tag/recommendations/" class="card-image-link" aria-label="link to: "> 899 <figure> 900 <img 901 srcset="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w150/2025/07/Untitled-July-2-2025--28-.png 150w, 902 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w300/2025/07/Untitled-July-2-2025--28-.png 300w, 903 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w720/2025/07/Untitled-July-2-2025--28-.png 720w, 904 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2025/07/Untitled-July-2-2025--28-.png 960w" 905 src="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2025/07/Untitled-July-2-2025--28-.png" 906 alt="" 907 > 908 </figure> 909 </a> 910 <a class="tag-heading-link" href="/tag/recommendations/"> 911 <div class="big-text">Recommended</div> 912 </a> 913</div> 914<div class="tag-card"> 915 <a href="/tag/resources/" class="card-image-link" aria-label="link to: "> 916 <figure> 917 <img 918 srcset="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w150/2025/12/Screenshot-2025-12-04-at-17.40.22.png 150w, 919 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w300/2025/12/Screenshot-2025-12-04-at-17.40.22.png 300w, 920 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w720/2025/12/Screenshot-2025-12-04-at-17.40.22.png 720w, 921 https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2025/12/Screenshot-2025-12-04-at-17.40.22.png 960w" 922 src="https://storage.ghost.io/c/f8/5a/f85aaacd-e9e1-4577-9f78-c62a1ee936d4/content/images/size/w960/2025/12/Screenshot-2025-12-04-at-17.40.22.png" 923 alt="" 924 > 925 </figure> 926 </a> 927 <a class="tag-heading-link" href="/tag/resources/"> 928 <div class="big-text">Resources</div> 929 </a> 930</div> </div> 931</custom-slider> 932 </section> 933</main> 934 935 <link rel="stylesheet" type="text/css" href="https://www.drownedinsound.org/assets/css/footer.css?v=waZfg0ug1NlkszVw" /> 936 937<custom-footer> 938 <nav class="footer-navigation"> 939 940 <ul class="footer-nav" > 941 <li class="footer-nav-about-us" data-label="About Us"> 942 <a class="footer-nav-link" href="https://www.drownedinsound.org/about/">About Us</a> 943 </li> 944 <li class="footer-nav-subscribe" data-label="Subscribe"> 945 <a class="footer-nav-link" href="#/portal/">Subscribe</a> 946 </li> 947 <li class="footer-nav-archive" data-label="Archive"> 948 <a class="footer-nav-link" href="https://www.drownedinsound.org/tag/archive/">Archive</a> 949 </li> 950 <li class="footer-nav-resources" data-label="Resources"> 951 <a class="footer-nav-link" href="https://www.drownedinsound.org/resources/">Resources</a> 952 </li> 953 <li class="footer-nav-faqs" data-label="FAQs"> 954 <a class="footer-nav-link" href="https://www.drownedinsound.org/faqs/">FAQs</a> 955 </li> 956 <li class="footer-nav-contact" data-label="Contact"> 957 <a class="footer-nav-link" href="https://www.drownedinsound.org/contact-us/">Contact</a> 958 </li> 959 </ul> 960 961 </nav> 962 963 <div class="footer-socials"> 964 <h2 class="footer-subscribe-heading">Subscribe to our newsletter</h2> 965 <div class="action-wrapper"> 966 <form data-members-form="subscribe" class="subscribe-form"> 967 <div class="subscribe-with-alerts"> 968 <div class="subscribe-wrapper"> 969 <input data-members-email type="email" required="true" placeholder="[email protected]" class="subscribe-input"/> 970 <button type="submit">Subscribe</button> 971 </div> 972 <div class="subscribe-alerts"> 973 <small class="subscribe-alert loading-alert">Processing your request...</small> 974 <small class="subscribe-alert success-alert">Please check your inbox and click the link to confirm your subscription.</small> 975 <small class="subscribe-alert error-alert" data-members-error></small> 976 </div> 977 </div> 978 </form> 979 </div> 980 <div class="footer-socials-inner"> 981 <a href="https://www.facebook.com/drownedinsounduk" target="_blank" class="social" aria-label="Facebook"> 982 <div class="social-inner">
983 <svg width="100%" height="100%" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg"> 984 <path d="M33 18C33 9.72 26.28 3 18 3C9.72 3 3 9.72 3 18C3 25.26 8.16 31.305 15 32.7V22.5H12V18H15V14.25C15 11.355 17.355 9 20.25 9H24V13.5H21C20.175 13.5 19.5 14.175 19.5 15V18H24V22.5H19.5V32.925C27.075 32.175 33 25.785 33 18Z" fill="var(--text-color)"/> 985</svg> 986 </div> 987 </a> 988 989 <a href="" class="social" target="_blank" aria-label="Twitter"> 990 <div class="social-inner"> 991 <svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 992 <path d="M17.1763 4L12.6289 9.11194L8.69691 4H3L9.80552 12.7505L3.35589 20H6.11742L11.0953 14.4056L15.446 20H21L13.9059 10.7768L19.936 4H17.1763ZM16.2078 18.3754L6.22391 5.53869H7.86499L17.737 18.3745L16.2078 18.3754Z" fill="var(--text-color)"/> 993</svg> 994 </div> 995 </a> 996 997 998 </div> 999 </div> 1000 1001 <div class="footer-credits"> 1002 <span>© 2026 </span><a href="https://www.drownedinsound.org">Drowned in Sound</a><span> - Published with </span><a href="https://ghost.org/" target="_blank">Ghost</a><span> & </span><a href="https://www.kusa-projects.com/" target="_blank">Drowned in Sound</a> 1003 </div> 1004 <span id="no-footer-form-text" style="display: none; width: 0px; height: 0px;" data-no-footer-form-text="Follow us on social media"></span> 1005</custom-footer> </div> 1006 </div> 1007</div> 1008 1009 1010<div class="global-notifications"> 1011 <div class="notification subscribe-false"> 1012 <svg class="notification-icon" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 1013 <path d="M9.9987 0.833496C4.9387 0.833496 0.832031 4.94016 0.832031 10.0002C0.832031 15.0602 4.9387 19.1668 9.9987 19.1668C15.0587 19.1668 19.1654 15.0602 19.1654 10.0002C19.1654 4.94016 15.0587 0.833496 9.9987 0.833496ZM10.9154 14.5835H9.08203V12.7502H10.9154V14.5835ZM10.9154 10.9168H9.08203V5.41683H10.9154V10.9168Z" fill="var(--error-color)"/> 1014</svg> 1015 1016 <small>Your link has expired. Please request a new one.</small> 1017 </div> 1018 <div class="notification signup-false"> 1019 <svg class="notification-icon" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 1020 <path d="M9.9987 0.833496C4.9387 0.833496 0.832031 4.94016 0.832031 10.0002C0.832031 15.0602 4.9387 19.1668 9.9987 19.1668C15.0587 19.1668 19.1654 15.0602 19.1654 10.0002C19.1654 4.94016 15.0587 0.833496 9.9987 0.833496ZM10.9154 14.5835H9.08203V12.7502H10.9154V14.5835ZM10.9154 10.9168H9.08203V5.41683H10.9154V10.9168Z" fill="var(--error-color)"/> 1021</svg> 1022 1023 <small>Your link has expired. Please request a new one.</small> 1024 </div> 1025 <div class="notification signin-false"> 1026 <svg class="notification-icon" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 1027 <path d="M9.9987 0.833496C4.9387 0.833496 0.832031 4.94016 0.832031 10.0002C0.832031 15.0602 4.9387 19.1668 9.9987 19.1668C15.0587 19.1668 19.1654 15.0602 19.1654 10.0002C19.1654 4.94016 15.0587 0.833496 9.9987 0.833496ZM10.9154 14.5835H9.08203V12.7502H10.9154V14.5835ZM10.9154 10.9168H9.08203V5.41683H10.9154V10.9168Z" fill="var(--error-color)"/> 1028</svg> 1029 1030 <small>Your link has expired. Please request a new one.</small> 1031 </div> 1032 <div class="notification subscribe-true"> 1033 <svg class="notification-icon" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 1034 <path d="M10 0.375C12.5527 0.375 15.0009 1.38906 16.8059 3.1941C18.6109 4.99913 19.625 7.44729 19.625 10C19.625 12.5527 18.6109 15.0009 16.8059 16.8059C15.0009 18.6109 12.5527 19.625 10 19.625C7.44729 19.625 4.99913 18.6109 3.1941 16.8059C1.38906 15.0009 0.375 12.5527 0.375 10C0.375 7.44729 1.38906 4.99913 3.1941 3.1941C4.99913 1.38906 7.44729 0.375 10 0.375ZM8.801 11.8989L6.66288 9.75937C6.58622 9.68272 6.49523 9.62192 6.39508 9.58044C6.29493 9.53895 6.18759 9.5176 6.07919 9.5176C5.97079 9.5176 5.86345 9.53895 5.7633 9.58044C5.66315 9.62192 5.57215 9.68272 5.4955 9.75937C5.3407 9.91418 5.25373 10.1241 5.25373 10.3431C5.25373 10.562 5.3407 10.7719 5.4955 10.9268L8.218 13.6493C8.29444 13.7263 8.38536 13.7874 8.48554 13.8292C8.58572 13.8709 8.69317 13.8924 8.80169 13.8924C8.91021 13.8924 9.01765 13.8709 9.11783 13.8292C9.21801 13.7874 9.30894 13.7263 9.38538 13.6493L15.0229 8.01038C15.1005 7.93404 15.1623 7.84309 15.2047 7.74275C15.247 7.64242 15.2691 7.53469 15.2696 7.42579C15.2701 7.31689 15.2491 7.20896 15.2076 7.10824C15.1662 7.00751 15.1053 6.91599 15.0283 6.83893C14.9514 6.76188 14.8599 6.70083 14.7592 6.6593C14.6586 6.61
1034777 14.5507 6.59658 14.4418 6.59696C14.3328 6.59734 14.2251 6.61927 14.1247 6.6615C14.0243 6.70373 13.9333 6.76542 13.8569 6.843L8.801 11.8989Z" fill="var(--success-color)"/> 1035</svg> 1036 <small>Great! You've successfully signed up.</small> 1037 </div> 1038 <div class="notification signup-true"> 1039 <svg class="notification-icon" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 1040 <path d="M10 0.375C12.5527 0.375 15.0009 1.38906 16.8059 3.1941C18.6109 4.99913 19.625 7.44729 19.625 10C19.625 12.5527 18.6109 15.0009 16.8059 16.8059C15.0009 18.6109 12.5527 19.625 10 19.625C7.44729 19.625 4.99913 18.6109 3.1941 16.8059C1.38906 15.0009 0.375 12.5527 0.375 10C0.375 7.44729 1.38906 4.99913 3.1941 3.1941C4.99913 1.38906 7.44729 0.375 10 0.375ZM8.801 11.8989L6.66288 9.75937C6.58622 9.68272 6.49523 9.62192 6.39508 9.58044C6.29493 9.53895 6.18759 9.5176 6.07919 9.5176C5.97079 9.5176 5.86345 9.53895 5.7633 9.58044C5.66315 9.62192 5.57215 9.68272 5.4955 9.75937C5.3407 9.91418 5.25373 10.1241 5.25373 10.3431C5.25373 10.562 5.3407 10.7719 5.4955 10.9268L8.218 13.6493C8.29444 13.7263 8.38536 13.7874 8.48554 13.8292C8.58572 13.8709 8.69317 13.8924 8.80169 13.8924C8.91021 13.8924 9.01765 13.8709 9.11783 13.8292C9.21801 13.7874 9.30894 13.7263 9.38538 13.6493L15.0229 8.01038C15.1005 7.93404 15.1623 7.84309 15.2047 7.74275C15.247 7.64242 15.2691 7.53469 15.2696 7.42579C15.2701 7.31689 15.2491 7.20896 15.2076 7.10824C15.1662 7.00751 15.1053 6.91599 15.0283 6.83893C14.9514 6.76188 14.8599 6.70083 14.7592 6.6593C14.6586 6.61777 14.5507 6.59658 14.4418 6.59696C14.3328 6.59734 14.2251 6.61927 14.1247 6.6615C14.0243 6.70373 13.9333 6.76542 13.8569 6.843L8.801 11.8989Z" fill="var(--success-color)"/> 1041</svg> 1042 <small>Great! You've successfully signed up.</small> 1043 </div> 1044 <div class="notification signin-true"> 1045 <svg class="notification-icon" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 1046 <path d="M10 0.375C12.5527 0.375 15.0009 1.38906 16.8059 3.1941C18.6109 4.99913 19.625 7.44729 19.625 10C19.625 12.5527 18.6109 15.0009 16.8059 16.8059C15.0009 18.6109 12.5527 19.625 10 19.625C7.44729 19.625 4.99913 18.6109 3.1941 16.8059C1.38906 15.0009 0.375 12.5527 0.375 10C0.375 7.44729 1.38906 4.99913 3.1941 3.1941C4.99913 1.38906 7.44729 0.375 10 0.375ZM8.801 11.8989L6.66288 9.75937C6.58622 9.68272 6.49523 9.62192 6.39508 9.58044C6.29493 9.53895 6.18759 9.5176 6.07919 9.5176C5.97079 9.5176 5.86345 9.53895 5.7633 9.58044C5.66315 9.62192 5.57215 9.68272 5.4955 9.75937C5.3407 9.91418 5.25373 10.1241 5.25373 10.3431C5.25373 10.562 5.3407 10.7719 5.4955 10.9268L8.218 13.6493C8.29444 13.7263 8.38536 13.7874 8.48554 13.8292C8.58572 13.8709 8.69317 13.8924 8.80169 13.8924C8.91021 13.8924 9.01765 13.8709 9.11783 13.8292C9.21801 13.7874 9.30894 13.7263 9.38538 13.6493L15.0229 8.01038C15.1005 7.93404 15.1623 7.84309 15.2047 7.74275C15.247 7.64242 15.2691 7.53469 15.2696 7.42579C15.2701 7.31689 15.2491 7.20896 15.2076 7.10824C15.1662 7.00751 15.1053 6.91599 15.0283 6.83893C14.9514 6.76188 14.8599 6.70083 14.7592 6.6593C14.6586 6.61777 14.5507 6.59658 14.4418 6.59696C14.3328 6.59734 14.2251 6.61927 14.1247 6.6615C14.0243 6.70373 13.9333 6.76542 13.8569 6.843L8.801 11.8989Z" fill="var(--success-color)"/> 1047</svg> 1048 <small>Welcome back! You've successfully signed in.</small> 1049 </div> 1050 <div class="notification stripe-success"> 1051 <svg class="notification-icon" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 1052 <path d="M10 0.375C12.5527 0.375 15.0009 1.38906 16.8059 3.1941C18.6109 4.99913 19.625 7.44729 19.625 10C19.625 12.5527 18.6109 15.0009 16.8059 16.8059C15.0009 18.6109 12.5527 19.625 10 19.625C7.44729 19.625 4.99913 18.6109 3.1941 16.8059C1.38906 15.0009 0.375 12.5527 0.375 10C0.375 7.44729 1.38906 4.99913 3.1941 3.1941C4.99913 1.38906 7.44729 0.375 10 0.375ZM8.801 11.8989L6.66288 9.75937C6.58622 9.68272 6.49523 9.62192 6.39508 9.58044C6.29493 9.53895 6.18759 9.5176 6.07919 9.5176C5.97079 9.5176 5.86345 9.53895 5.7633 9.58044C5.66315 9.62192 5.57215 9.68272 5.4955 9.75937C5.3407 9.91418 5.25373 10.1241 5.25373 10.3431C5.25373 10.562 5.3407 10.7719 5.4955 10.9268L8.218 13.6493C8.29444 13.7263 8.38536 13.7874 8.48554 13.8292C8.58572 13.8709 8.69317 13.8924 8.80169 13.8924C8.91021 13.8924 9.01765 13.8709 9.11783 13.8292C9.21801 13.7874 9.30894 13.7263 9.38538 13.6493L15.0229 8.01038C15.1005 7.93404 15.1623 7.84309 15.2047 7.74275C15.247 7.64242 15.2691 7.53469 15.2696 7.42579C15.2701 7.31689 15.2491 7.20896 15.2076 7.10824C15.1662 7.00751 15.1053 6.91599 15.0283 6.83893C14.9514 6.76188 14.8599 6.70083 14.7592 6.6593C14.6586 6.61
1052777 14.5507 6.59658 14.4418 6.59696C14.3328 6.59734 14.2251 6.61927 14.1247 6.6615C14.0243 6.70373 13.9333 6.76542 13.8569 6.843L8.801 11.8989Z" fill="var(--success-color)"/> 1053</svg> 1054 <small>Success! You now have access to additional content.</small> 1055 </div> 1056</div> 1057 1058 1059
1060<script src="https://www.drownedinsound.org/assets/js/custom-elements.js?v=yKrWd1sGyKzE3iEF"></script>
1060 1061 1062<!-- ======================== Drowned In Sound â Global Injection (clean + stable) ======================== --> 1063 1064<!-- ========== Global tokens & small layout tweaks ========== --> 1065<style> 1066 /* Your current overrides */ 1067 .dis-podcasts-section .section-header-arrows { padding-right: 12px !important; } 1068 .dis-podcasts-section[data-pb-ready] .ls-rail { padding-top: 20px; } 1069 1070 .dis-podcast-title { 1071 margin: 0px 0 -50px !important; 1072 padding-bottom: 0px !important; 1073 font-size: clamp(1.8rem, 5vw, 4rem) !important; 1074 } 1075 1076 a.navbar-button.dis-subscribe-btn, 1077 .mobile-menu-cta a.button.dis-subscribe-btn, 1078 a.navbar-button.signin-button, 1079 .mobile-menu-cta a.button.signin-button, 1080 a.dis-subscribe-btn, 1081 .signin-button { border-radius: 0px !important; } 1082 1083 .latest-stories[data-ls-ready] .ls-item { border-radius: 0 !important; } 1084 1085 .post-content a:not([class*="button"]):not(.kg-bookmark-container), 1086 .post-excerpt a, 1087 article p a, 1088 .hero-description-wrapper a { color: white !important; } 1089 1090 :root{ 1091 --dis-tag-scale: .7; 1092 1093 --dis-pink: #f307b0; 1094 --dis-social-scale: .86; 1095 --dis-header-font: "Francois One", system-ui, sans-serif; 1096 1097 --ls-gap: 0px; 1098 --ls-gap-sm: 0px; 1099 --ls-w: clamp(320px, 30vw + 140px, 520px); 1100 --ls-w-sm: min(92vw, 520px); 1101 --ls-divider: rgba(255,255,255); 1102 --ls-match-shadow: inset 0 0 0 1px var(--ls-divider); 1103 --ls-match-radius: 0px; 1104 --ls-match-bg: transparent; 1105 1106 --yt-gap: var(--ls-gap); 1107 --yt-gap-sm: var(--ls-gap-sm); 1108 --yt-w: var(--ls-w); 1109 --yt-w-sm: var(--ls-w-sm); 1110 --pb-gap: var(--ls-gap); 1111 --pb-gap-sm: var(--ls-gap-sm); 1112 --pb-w: var(--ls-w); 1113 --pb-w-sm: var(--ls-w-sm); 1114 } 1115 1116 .section-header-number{ margin-top:auto; display:none; } 1117 section.browse-by-tags .slider-inner{ gap:0px; } 1118 custom-pagination nav{ display:none; } 1119 1120 @media (min-width:1439px){ 1121 .logo img{ height:calc(2.5vw * var(--scale) * var(--logo-scale)); } 1122 } 1123 .logo img{ height:calc(36px * var(--logo-scale)); width:auto; } 1124 1125 .big-text{ font-size:200% !important; font-family:'Francois One' !important; } 1126 .dis-podcasts-section .pb-thumb{ padding:5%; } 1127 .search-input{ font-family:'Francois One'; } 1128 button, .kg-btn, .kg-header-card-button, .button{ 1129 font-family:'Francois One'; 1130 font-size:26px; 1131 font-weight:600; 1132 } 1133 1134 section.browse-by-tags .tag-card{ 1135 transform:scale(var(--dis-tag-scale)); 1136 transform-origin:top left; 1137 } 1138 section.browse-by-tags .slider-inner{ 1139 gap:calc(var(--dis-tag-scale) * var(--tags-gap, 24px)); 1140 } 1141</style> 1142 1143<!-- ================================ Podcasts section shell (after Latest) ================================ --> 1144<style> 1145 .dis-podcast-stack{ 1146 display:flex !important; 1147 flex-direction:column !important; 1148 gap:12px; 1149 width:100%; 1150 grid-column:1 / -1 !important; 1151 } 1152 .dis-podcasts-section{ position:relative; } 1153</style> 1154
1155<script> 1156(function(){ 1157 const ready = (fn) => 1158 document.readyState !== 'loading' ? fn() : document.addEventListener('DOMContentLoaded', fn, { once:true }); 1159 1160 ready(function(){ 1161 const onlyHome = true; 1162 if (onlyHome && location.pathname.replace(/\/+$/,'/') !== '/') return; 1163 1164 const latest = document.querySelector('.latest-stories'); 1165 if (!latest || document.querySelector('.dis-podcasts-section')) return; 1166 1167 const section = document.createElement(latest.tagName); 1168 section.className = (latest.className || '') + ' dis-podcasts-section'; 1169 1170 const innerRef = latest.firstElementChild; 1171 let inner = section; 1172 1173 if (innerRef){ 1174 inner = document.createElement(innerRef.tagName); 1175 inner.className = innerRef.className || ''; 1176 section.appendChild(inner); 1177 } 1178 1179 const stack = document.createElement('div'); 1180 stack.className = 'dis-podcast-stack'; 1181 inner.appendChild(stack); 1182 1183 const ref = latest.querySelector('h1,h2,h3,.section-title,[class*="title"]'); 1184 const h = document.createElement(ref?.tagName || 'h2'); 1185 h.className = ref?.className || 'dis-podcast-title'; 1186 h.textContent = 'Podcasts'; 1187 if (!/^H[1-6]$/.test(h.tagName)) h.setAttribute('role','heading'); 1188 stack.appendChild(h); 1189 1190 latest.insertAdjacentElement('afterend', section); 1191 }); 1192})(); 1193</script>
1193 1194 1195<!-- ================================= Header CTAs (Subscribe/Sign in) ================================= --> 1196<style> 1197 a.navbar-button.dis-subscribe-btn, 1198 .mobile-menu-cta a.button.dis-subscribe-btn, 1199 a.navbar-button.signin-button, 1200 .mobile-menu-cta a.button.signin-button, 1201 a.dis-subscribe-btn, 1202 .signin-button{ 1203 font-family:var(--dis-header-font) !important; 1204 border-radius:4px; 1205 display:inline-flex; 1206 align-items:center; 1207 gap:8px; 1208 text-transform:capitalize; 1209 letter-spacing:.02em; 1210 font-weight:600; 1211 padding:.3em .85em; 1212 } 1213 a.dis-subscribe-btn{ background:var(--dis-pink); color:#fff !important; } 1214 .signin-button{ background:rgba(0,0,0,.5); color:#fff !important; } 1215 a.dis-subscribe-btn{ 1216 font-size:1.5rem; 1217 line-height:1; 1218 padding:.65em 1.1em; 1219 text-decoration:none !important; 1220 } 1221 a.dis-subscribe-btn:hover, a.dis-subscribe-btn:focus{ 1222 filter:brightness(1.05); 1223 text-decoration:none !important; 1224 } 1225</style>
1226<script> 1227(function(){ 1228 const ready = (fn) => 1229 document.readyState !== 'loading' ? fn() : document.addEventListener('DOMContentLoaded', fn, { once:true }); 1230 1231 ready(function(){ 1232 const isMember = !!document.querySelector('a[href="#/portal/account"]'); 1233 document.querySelectorAll('a.navbar-button, .mobile-menu-cta a.button').forEach(a=>{ 1234 const label = (a.textContent||'').trim().toLowerCase(); 1235 if (label === 'subscribe' && !isMember){ 1236 a.href = '#/portal/signup'; 1237 a.classList.add('dis-subscribe-btn'); 1238 } 1239 if (label === 'sign in'){ 1240 a.classList.add('signin-button'); 1241 } 1242 }); 1243 }); 1244})(); 1245</script>
1245 1246 1247<!-- ================================= Open community links in a new tab ================================= -->
1248<script> 1249(function(){ 1250 const ready = (fn) => 1251 document.readyState !== 'loading' ? fn() : document.addEventListener('DOMContentLoaded', fn, { once:true }); 1252 1253 ready(function(){ 1254 document.querySelectorAll('a[href*="community.drownedinsound.com"]').forEach(a=>{ 1255 a.target = '_blank'; 1256 a.rel = 'noopener noreferrer'; 1257 }); 1258 }); 1259})(); 1260</script>
1260 1261 1262<!-- ================================= Footer socials (inject icons; remove white tiles) ================================= --> 1263<style> 1264 custom-footer .footer-socials-inner a.social[aria-label="X" i], 1265 custom-footer .footer-socials-inner a.social[aria-label*="twitter" i], 1266 custom-footer .footer-socials-inner a.social[aria-label="Instagram" i]:not([data-injected]), 1267 custom-footer .footer-socials-inner a.social[aria-label*="instagram" i]:not([data-injected]), 1268 custom-footer .footer-socials-inner a.social[aria-label="Facebook" i]:not([data-injected]), 1269 custom-footer .footer-socials-inner a.social[aria-label*="facebook" i]:not([data-injected]){ display:none !important; } 1270 1271 custom-footer .footer-socials-inner a.social[data-injected] .social-inner{ 1272 display:flex; align-items:center; justify-content:center; background:none !important; 1273 } 1274 custom-footer .footer-socials-inner a.social[data-injected] .social-inner svg{ 1275 width:100% !important; height:100% !important; display:block; margin:auto; 1276 transform:scale(var(--dis-social-scale)); 1277 transform-origin:50% 50%; 1278 } 1279 custom-footer .footer-socials-inner a.social[data-injected]::before, 1280 custom-footer .footer-socials-inner a.social[data-injected]::after{ content:none !important; } 1281 1282 custom-footer .footer-socials-inner a.social[data-injected="Podbean"] .social-inner svg { transform: scale(1.10); } 1283 custom-footer .footer-socials-inner a.social[data-injected="Facebook"] .social-inner svg { transform: scale(1.10); } 1284</style>
1285<script> 1286(function(){ 1287 const LINKS={ 1288 Podbean:"https://drownedinsound.podbean.com/", 1289 YouTube:"https://www.youtube.com/@drownedinsound", 1290 Instagram:"https://www.instagram.com/drownedinsound", 1291 TikTok:"https://www.tiktok.com/@drownedinsounduk", 1292 Facebook:"https://www.facebook.com/drownedinsound" 1293 }; 1294 const ICONS={ 1295 Podbean:`<svg viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M12 5c-4.418 0-8 3.582-8 8h2a6 6 0 0 1 12 0h2c0-4.418-3.582-8-8-8z"/><rect x="4.5" y="12" width="3" height="5" rx="1.2" ry="1.2" fill="currentColor"/><rect x="16.5" y="12" width="3" height="5" rx="1.2" ry="1.2" fill="currentColor"/><circle cx="12" cy="15" r="1.7" fill="currentColor"/></svg>`, 1296 YouTube:`<svg viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M23.5 6.2a3.1 3.1 0 0 0-2.2-2.2C19.9 3.5 12 3.5 12 3.5s-7.9 0-9.3.5A3.1 3.1 0 0 0 .5 6.2 32.7 32.7 0 0 0 0 12c0 2 .1 3.9.5 5.8a3.1 3.1 0 0 0 2.2 2.2c1.4.4 9.3.5 9.3.5s7.9 0 9.3-.5a3.1 3.1 0 0 0 2.2-2.2c.3-1.9.5-3.8.5-5.8s-.2-3.9-.5-5.8zM9.7 15.6V8.4L15.6 12l-5.9 3.6z"/></svg>`, 1297 Instagram:`<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="4" ry="4" fill="none" stroke="currentColor" stroke-width="2"/><circle cx="12" cy="12" r="4.5" fill="none" stroke="currentColor" stroke-width="2"/><circle cx="17.5" cy="6.5" r="1.5" fill="currentColor"/></svg>`, 1298 TikTok:`<svg viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M21 8.1a6.9 6.9 0 0 1-4.3-1.5v8.4A8 8 0 1 1 9 7.3v3.4a4.6 4.6 0 1 0 3.3 4.4V2h3.3a6.9 6.9 0 0 0 4.4 4v2.1z"/></svg>`, 1299 Facebook:`<svg viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.878v-6.988H7.898v-2.89h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.772-1.63 1.562v1.875h2.773l-.443 2.89h-2.33v6.988C18.343 21.128 22 16.991 22 12z"/></svg>` 1300 }; 1301 1302 const ready = (fn) => 1303 document.readyState !== 'loading' ? fn() : document.addEventListener('DOMContentLoaded', fn, { once:true }); 1304 1305 ready(function(){ 1306 const wrap = document.querySelector('custom-footer .footer-socials-inner'); 1307 if(!wrap) return; 1308 1309 const ensure=(label)=>{ 1310 const existing = 1311 wrap.querySelector(`a.social[data-injected="${label}"]`) || 1312 [...wrap.querySelectorAll('a.social')].find(a => (a.getAttribute('aria-label')||'') === label); 1313 1314 const a = existing || document.createElement('a'); 1315 a.className='social'; 1316 a.setAttribute('data-injected',label); 1317 a.setAttribute('aria-label',label); 1318 a.href=LINKS[label]; 1319 a.target='_blank'; 1320 a.rel='noopener noreferrer'; 1321 1322 let inner=a.querySelector('.social-inner'); 1323 if(!inner){ 1324 inner=document.createElement('div'); 1325 inner.className='social-inner'; 1326 a.appendChild(inner); 1327 } 1328 inner.style.background='none'; 1329 inner.innerHTML=ICONS[label]; 1330 return a; 1331 }; 1332 1333 const frag=document.createDocumentFragment(); 1334 ['Podbean','YouTube','Instagram','TikTok','Facebook'].forEach(l=>frag.appendChild(ensure(l))); 1335 wrap.appendChild(frag); 1336 }); 1337})(); 1338</script>
1338 1339 1340<!-- ================================= Replace newsletter forms with Portal CTA ================================= -->
1341<script> 1342(function(){ 1343 const ready = (fn) => 1344 document.readyState !== 'loading' ? fn() : document.addEventListener('DOMContentLoaded', fn, { once:true }); 1345 1346 ready(function(){ 1347 const isMember=!!document.querySelector('a[href="#/portal/account"]'); 1348 const selectors=[ 1349 '.footer-newsletter','.footer-subscribe','.subscribe-cta','.home-subscribe', 1350 '.homepage .newsletter','.site-footer .subscribe','.newsletter', 1351 'form[data-members-form="subscribe"]' 1352 ]; 1353 const nodes=new Set(); 1354 selectors.forEach(s=>document.querySelectorAll(s).forEach(n=>nodes.add(n))); 1355 document.querySelectorAll('form').forEach(f=>{ 1356 if(f.querySelector('input[type="email"], [data-members-email]')) nodes.add(f); 1357 }); 1358 1359 nodes.forEach(node=>{ 1360 if(isMember){ 1361 if(node.tagName==='FORM') node.remove(); 1362 else node.style.display='none'; 1363 return; 1364 } 1365 if(node.querySelector('.dis-subscribe-btn')) return; 1366 1367 const btn=document.createElement('a'); 1368 btn.href='#/portal/signup'; 1369 btn.className='dis-subscribe-btn'; 1370 btn.textContent='Subscribe now'; 1371 1372 const wrap=document.createElement('div'); 1373 wrap.style.textAlign='center'; 1374 wrap.appendChild(btn); 1375 1376 if(node.tagName==='FORM') node.replaceWith(wrap); 1377 else { node.innerHTML=''; node.appendChild(wrap); } 1378 }); 1379 }); 1380})(); 1381</script>
1381 1382 1383<!-- ================================= Footer legal links (above credits) ================================= --> 1384<style> 1385 .footer-credits{ font-size:.85rem; opacity:.85; } 1386 .footer-legal{ 1387 display:flex; 1388 flex-wrap:wrap; 1389 gap:18px; 1390 justify-content:center; 1391 align-items:center; 1392 margin:14px 0 4px; 1393 font-size:.95rem; 1394 opacity:.9; 1395 } 1396 .footer-legal a{ color:var(--text-color,#fff); text-decoration:none; } 1397 .footer-legal a:hover,.footer-legal a:focus{ text-decoration:underline; } 1398</style>
1399<script> 1400(function(){ 1401 const ready = (fn) => 1402 document.readyState !== 'loading' ? fn() : document.addEventListener('DOMContentLoaded', fn, { once:true }); 1403 1404 ready(function(){ 1405 if(document.querySelector('.footer-legal')) return; 1406 const credits=document.querySelector('.footer-credits'); 1407 const nav=document.createElement('nav'); 1408 nav.className='footer-legal'; 1409 nav.innerHTML=`<a href="/privacy">Privacy Policy</a><a href="/cookies">Cookie Policy</a><a href="/terms-of-service">Terms of Service</a>`; 1410 if(credits && credits.parentNode) credits.parentNode.insertBefore(nav,credits); 1411 else (document.querySelector('.footer-socials-inner')||document.querySelector('custom-footer')||document.querySelector('footer'))?.appendChild(nav); 1412 }); 1413})(); 1414</script>
1414 1415 1416<!-- ================================= Latest Stories â carousel scaffold ================================= --> 1417<style> 1418 .latest-stories{ position:relative; } 1419 .latest-stories[data-ls-ready] .ls-rail{ 1420 display:flex !important; 1421 flex-wrap:nowrap !important; 1422 gap:var(--ls-gap); 1423 overflow-x:auto; 1424 overflow-y:visible; 1425 scroll-snap-type:x mandatory; 1426 scroll-behavior:smooth; 1427 -webkit-overflow-scrolling:touch; 1428 padding-bottom:8px; 1429 scrollbar-width:none; 1430 touch-action: pan-x pan-y; 1431 } 1432 .latest-stories[data-ls-ready] .ls-rail::-webkit-scrollbar{ display:none; height:0; } 1433 @media (max-width:920px){ .latest-stories[data-ls-ready] .ls-rail{ gap:var(--ls-gap-sm); } } 1434 1435 .latest-stories[data-ls-ready] .ls-item{ 1436 flex:0 0 var(--ls-w) !important; 1437 max-width:var(--ls-w) !important; 1438 scroll-snap-align:start; 1439 box-shadow:var(--ls-match-shadow); 1440 border-radius:var(--ls-match-radius); 1441 background:var(--ls-match-bg); 1442 overflow:hidden; 1443 border:0 !important; 1444 outline:0 !important; 1445 margin:0 !important; 1446 } 1447 @media (max-width:920px){ 1448 .latest-stories[data-ls-ready] .ls-item{ 1449 flex-basis:var(--ls-w-sm) !important; 1450 max-width:var(--ls-w-sm) !important; 1451 } 1452 } 1453 .latest-stories[data-ls-ready] .ls-item > *{ border:0 !important; outline:0 !important; box-shadow:none !important; } 1454 1455 .latest-stories .ls-nav{ 1456 position:absolute; 1457 inset-block-start:24px; 1458 inset-inline-end:max(24px, 2.5vw); 1459 display:inline-flex; 1460 gap:12px; 1461 z-index:3; 1462 pointer-events:auto; 1463 } 1464 @media (max-width:920px){ 1465 .latest-stories .ls-nav{ 1466 position:static; 1467 display:flex; 1468 justify-content:flex-end; 1469 gap:12px; 1470 margin:12px 0 18px; 1471 } 1472 } 1473 .latest-stories .ls-nav button{ 1474 inline-size:48px; 1475 block-size:36px; 1476 padding:0 10px; 1477 border-radius:9px; 1478 border:1px solid rgba(255,255,255,.88); 1479 background:rgba(255,255,255,.06); 1480 color:var(--text-color,#fff); 1481 display:inline-flex; 1482 align-items:center; 1483 justify-content:center; 1484 transition:background .14s ease, transform .14s ease, opacity .12s ease; 1485 backdrop-filter:saturate(120%) blur(2px); 1486 } 1487 .latest-stories .ls-nav button:hover{ background:rgba(255,255,255,.12); transform:translateY(-1px); } 1488 .latest-stories .ls-nav button[disabled]{ opacity:.4; transform:none; } 1489 .latest-stories .ls-nav svg{ inline-size:18px; block-size:18px; display:block; } 1490 1491 .latest-stories [class*="posts"]{ margin-right: calc(48px * 2 + 24px); } 1492 @media (max-width:920px){ .latest-stories [class*="posts"]{ margin-right:0; } } 1493</style> 1494
1495<script> 1496(function(){ 1497 const ready = (fn) => 1498 document.readyState !== 'loading' ? fn() : document.addEventListener('DOMContentLoaded', fn, { once:true }); 1499 1500 function enableMouseDrag(rail){ 1501 // Mouse drag only (touch stays native swipe) 1502 let dragging=false, pid=null, startX=0, startY=0, startScroll=0; 1503 1504 rail.addEventListener('pointerdown', (e) => { 1505 if (e.pointerType !== 'mouse') return; 1506 if (e.button !== 0) return; 1507 dragging=false; 1508 pid=e.pointerId; 1509 startX=e.clientX||0; 1510 startY=e.clientY||0; 1511 startScroll=rail.scrollLeft; 1512 }, { passive:true }); 1513 1514 rail.addEventListener('pointermove', (e) => { 1515 if (pid == null || e.pointerId !== pid) return; 1516 const dx=(e.clientX||0)-startX; 1517 const dy=(e.clientY||0)-startY; 1518 1519 if(!dragging){ 1520 if (Math.abs(dx) > 7 && Math.abs(dx) > Math.abs(dy)){ 1521 dragging=true; 1522 rail.setPointerCapture(pid); 1523 } else { 1524 return; 1525 } 1526 } 1527 e.preventDefault(); 1528 rail.scrollLeft = startScroll - dx; 1529 }, { passive:false }); 1530 1531 rail.addEventListener('pointerup', ()=>{ dragging=false; pid=null; }); 1532 rail.addEventListener('pointercancel', ()=>{ dragging=false; pid=null; }); 1533 } 1534 1535 function buildLatestCarousel(){ 1536 const root=document.querySelector('.latest-stories'); 1537 if(!root || root.dataset.lsReady) return null; 1538 1539 const prefer='.posts, .post-feed, .cards, .cards-grid, .grid, .row, .items, .feed'; 1540 let rail=root.querySelector(prefer); 1541 const looksLikeCard=el=>el.matches('article, .post, [class*="post-card"], [class*="card"]'); 1542 1543 if(!rail){ 1544 const candidates=[...root.querySelectorAll(':scope *')]; 1545 rail=candidates.find(el=>{ 1546 const kids=[...el.children]; 1547 const count=kids.filter(looksLikeCard).length; 1548 return count>=3 && getComputedStyle(el).display!=='none'; 1549 })||root.firstElementChild||root; 1550 } 1551 1552 const direct=[...rail.children]; 1553 const directCards=direct.filter(looksLikeCard); 1554 if(directCards.length){ directCards.forEach(el=>el.classList.add('ls-item')); } 1555 else { direct.forEach(w=>[...w.children].forEach(c=>{ if(looksLikeCard(c)) c.classList.add('ls-item'); })); } 1556 1557 let railEl=rail; 1558 if(![...railEl.children].some(c=>c.classList?.contains('ls-item'))){ 1559 const wrapper=[...railEl.children].find(child=>child.querySelectorAll(':scope > .ls-item').length>=2); 1560 if(wrapper) railEl=wrapper; 1561 } 1562 railEl.classList.add('ls-rail'); 1563 1564 if (!root.querySelector('.ls-nav')){ 1565 const nav=document.createElement('div'); 1566 nav.className='ls-nav'; 1567 nav.innerHTML=` 1568 <button class="ls-prev" type="button" aria-label="Previous"> 1569 <svg viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M14.7 19.3a1 1 0 0 1-1.4 0l-6-6a1 1 0 0 1 0-1.4l6-6a1 1 0 1 1 1.4 1.4L9.41 12l5.3 5.3a1 1 0 0 1 0 1.4z"/></svg> 1570 </button> 1571 <button class="ls-next" type="button" aria-label="Next"> 1572 <svg viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M9.3 4.7a1 1 0 0 1 1.4 0l6 6a1 1 0 0 1 0 1.4l-6 6a1 1 0 1 1-1.4-1.4L14.59 12 9.3 6.7a1 1 0 0 1 0-1.4z"/></svg> 1573 </button>`; 1574 const postsCount=root.querySelector(':scope [class*="posts"]'); 1575 if(postsCount && postsCount.parentNode) postsCount.insertAdjacentElement('afterend',nav); 1576 else root.insertAdjacentElement('afterbegin',nav); 1577 1578 const prevBtn=nav.querySelector('.ls-prev'); 1579 const nextBtn=nav.querySelector('.ls-next'); 1580 const step=(dir)=> railEl.scrollBy({left:Math.max(railEl.clientWidth*0.9,280)*dir, behavior:'smooth'}); 1581 prevBtn.addEventListener('click',()=>step(-1)); 1582 nextBtn.addEventListener('click',()=>step(1)); 1583 } 1584 1585 // Shift+wheel horizontal helper (doesn't break touch) 1586 railEl.setAttribute('tabindex','0'); 1587 railEl.addEventListener('wheel',e=>{ 1588 if(!e.shiftKey) return; 1589 e.preventDefault(); 1590 railEl.scrollBy({left:e.deltaY,behavior:'smooth'}); 1591 },{passive:false}); 1592 1593 enableMouseDrag(railEl); 1594 1595 root.dataset.lsReady='1'; 1596 return { root, railEl }; 1597 } 1598 1599 ready(buildLatestCarousel); 1600})(); 1601</script>
1601 1602 1603<!-- ================================= Match Featured framing on Latest ================================= -->
1604<script> 1605(function(){ 1606 const ready = (fn) => 1607 document.readyState !== 'loading' ? fn() : document.addEventListener('DOMContentLoaded', fn, { once:true }); 1608 1609 function syncFeaturedFraming(){ 1610 const featured=document.querySelector('.featured-stories'); 1611 const latestRoot=document.querySelector('.latest-stories'); 1612 if(!featured || !latestRoot) return; 1613 const card=featured.querySelector('article, .post, [class*="post-card"], [class*="card"]'); 1614 if(!card) return; 1615 1616 const cs=getComputedStyle(card); 1617 const radius=cs.borderRadius && cs.borderRadius!=='0px' ? cs.borderRadius : '8px'; 1618 const bg=cs.backgroundColor || 'transparent'; 1619 const borderColor = cs.borderColor && cs.borderColor!=='rgba(0, 0, 0, 0)' ? cs.borderColor : 'rgba(255,255,255,.16)'; 1620 const shadow=(cs.boxShadow && cs.boxShadow!=='none') ? cs.boxShadow : `inset 0 0 0 1px ${borderColor}`; 1621 1622 latestRoot.style.setProperty('--ls-match-radius', radius); 1623 latestRoot.style.setProperty('--ls-match-bg', bg); 1624 latestRoot.style.setProperty('--ls-match-shadow', shadow); 1625 } 1626 1627 ready(syncFeaturedFraming); 1628 window.addEventListener('load',syncFeaturedFraming,{once:true}); 1629})(); 1630</script>
1630 1631 1632<!-- ================================= Podcasts (Podbean + YouTube) â carousel builders ================================= --> 1633<style> 1634 .dis-podcasts-section[data-yt-ready] .ls-rail, 1635 .dis-podcasts-section[data-pb-ready] .ls-rail{ 1636 display:flex !important; 1637 flex-wrap:nowrap !important; 1638 overflow-x:auto; 1639 overflow-y:visible; 1640 scroll-snap-type:x mandatory; 1641 scroll-behavior:smooth; 1642 -webkit-overflow-scrolling:touch; 1643 padding-bottom:8px; 1644 scrollbar-width:none; 1645 touch-action: pan-x pan-y; 1646 } 1647 .dis-podcasts-section .ls-rail::-webkit-scrollbar{ display:none; height:0; } 1648 1649 @media (max-width:920px){ 1650 .dis-podcasts-section[data-yt-ready] .ls-rail{ gap:var(--yt-gap-sm); } 1651 .dis-podcasts-section[data-pb-ready] .ls-rail{ gap:var(--pb-gap-sm); } 1652 } 1653 1654 .dis-podcasts-section[data-yt-ready] .ls-item{ 1655 flex:0 0 var(--yt-w) !important; 1656 max-width:var(--yt-w) !important; 1657 scroll-snap-align:start; 1658 box-shadow:var(--ls-match-shadow); 1659 border-radius:var(--ls-match-radius); 1660 background:var(--ls-match-bg); 1661 overflow:hidden; 1662 border:0 !important; 1663 outline:0 !important; 1664 margin:0 !important; 1665 } 1666 .dis-podcasts-section[data-pb-ready] .ls-item{ 1667 flex:0 0 var(--pb-w) !important; 1668 max-width:var(--pb-w) !important; 1669 scroll-snap-align:start; 1670 box-shadow: inset 0 0 0 1px rgba(255,255,255,.22) !important; 1671 border-radius:var(--ls-match-radius,12px); 1672 background:var(--ls-match-bg,transparent); 1673 overflow:hidden; 1674 border:0 !important; 1675 outline:0 !important; 1676 margin:0 !important; 1677 } 1678 @media (max-width:920px){ 1679 .dis-podcasts-section[data-yt-ready] .ls-item{ flex-basis:var(--yt-w-sm) !important; max-width:var(--yt-w-sm) !important; } 1680 .dis-podcasts-section[data-pb-ready] .ls-item{ flex-basis:var(--pb-w-sm) !important; max-width:var(--pb-w-sm) !important; } 1681 } 1682 1683 .yt-card{ display:block; color:inherit; text-decoration:none; } 1684 .yt-thumb{ aspect-ratio:16/9; width:100%; display:block; background:#111; object-fit:cover; object-position:center; } 1685 .yt-meta{ padding:12px 14px 14px; } 1686 .yt-title{ font-weight:800; line-height:1.2; font-size:clamp(1rem,1.1vw+.8rem,1.25rem); font-family:var(--dis-header-font); } 1687 1688 .dis-podcasts-section .pb-card{ position:relative; display:block; aspect-ratio:16/9; text-decoration:none; color:inherit; } 1689 .dis-podcasts-section .pb-thumb{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; object-position:center; transform:scale(1); transition:transform .28s ease; } 1690 .dis-podcasts-section .pb-card:hover .pb-thumb{ transform:scale(1.03); } 1691 .dis-podcasts-section .pb-card::before, .dis-podcasts-section .pb-card::after{ content:none !important; } 1692 1693 .dis-podcasts-section .pb-info{ padding:12px 14px 14px; display:grid; gap:6px; } 1694 .dis-podcasts-section .pb-title{ 1695 font-weight:800; 1696 line-height:1.18; 1697 font-size:clamp(1rem,1.1vw+.8rem,1.25rem); 1698 font-family:var(--dis-header-font); 1699 display:-webkit-box; 1700 -webkit-line-clamp:2; 1701 -webkit-box-orient:vertical; 1702 overflow:hidden; 1703 text-overflow:ellipsis; 1704 } 1705 .dis-podcasts-section .pb-time{ opacity:.8; font-size:.95rem; } 1706 1707 .dis-podcasts-section .pb-nav{ 1708 position:absolute; 1709 inset-block-start:24px; 1710 inset-inline-end:max(24px, 2.5vw); 1711 display:inline-flex; 1712 gap:12px; 1713 z-index:3; 1714 pointer-events:auto; 1715 } 1716 @media (max-width:920px){ 1717 .dis-podcasts-section .pb-nav{ position:static; justify-content:flex-end; margin:12px 0 10px; } 1718 } 1719 .dis-podcasts-section .pb-nav button{ 1720 inline-size:48px; block-size:36px; padding:0 10px; border-radius:9px; 1721 border:1px solid rgba(255,255,255,.88); 1722 background:rgba(255,255,255,.06); 1723 color:var(--text-color,#fff); 1724 display:inline-flex; align-items:center; justify-content:center; 1725 transition:background .14s ease, transform .14s ease, opacity .12s ease; 1726 backdrop-filter:saturate(120%) blur(2px); 1727 } 1728 .dis-podcasts-section .pb-nav button:hover{ background:rgba(255,255,255,.12); transform:translateY(-1px); } 1729 .dis-podcasts-section .pb-nav button[disabled]{ opacity:.4; transform:none; } 1730 .dis-podcasts-section .pb-nav svg{ inline-size:18px; block-size:18px; display:block; } 1731 1732 .dis-podcasts-section .pb-card, .dis-podcasts-section .yt-card{ aspect-ratio:1/1 !important; } 1733 .dis-podcasts-section .pb-thumb, .dis-podcasts-section .yt-thumb{ object-fit:cover !important; object-position:top center !important; } 1734 1735 .dis-podcasts-section{ 1736 --pod-scale: 0.9; 1737 --pb-w: calc(var(--ls-w) * var(--pod-scale)); 1738 --pb-w-sm: calc(var(--ls-w-sm) * var(--pod-scale)); 1739 --yt-w: calc(var(--ls-w) * var(--pod-scale)); 1740 --yt-w-sm: calc(var(--ls-w-sm) * var(--pod-scale)); 1741 } 1742 1743 .dis-podcasts-section .pb-title[role="link"]{ cursor:pointer; } 1744 .dis-podcasts-section .pb-title[role="link"]:hover, 1745 .dis-podcasts-section .pb-title[role="link"]:focus{ text-decoration:underline; } 1746</style> 1747
1748<script> 1749(function(){ 1750 const ready = (fn) => 1751 document.readyState !== 'loading' ? fn() : document.addEventListener('DOMContentLoaded', fn, { once:true }); 1752 1753 const MAX_ITEMS=12; 1754 const FEEDS=[ 1755 'https://drownedinsound.podbean.com/feed.xml', 1756 'https://feed.podbean.com/drownedinsound/feed.xml' 1757 ]; 1758 1759 const FALLBACK_IFRAME = ` 1760 <div class="pb-fallback" style="margin-top:8px;"> 1761 <div style="position:relative;padding-top:56.25%;border-radius:12px;overflow:hidden;box-shadow:inset 0 0 0 1px rgba(255,255,255,.22);background:var(--ls-match-bg);"> 1762 <iframe title="Drowned in Sound" allowtransparency="true" style="position:absolute;inset:0;border:0;width:100%;height:100%;" scrolling="no" loading="lazy" allowfullscreen 1763 src="https://www.podbean.com/player-v2/?i=uy8kj-1411062-pbblog-playlist&share=1&download=1&fonts=Arial&skin=1b1b1b&font-color=auto&rtl=0&logo_link=episode_page&btn-skin=fb0584&size=315"></iframe> 1764 </div> 1765 </div>`; 1766 1767 const h=(t,a={},k=[])=>{ 1768 const el=document.createElement(t); 1769 for(const [kk,v] of Object.entries(a)){ 1770 if(kk==='class') el.className=v; 1771 else if(kk==='html') el.innerHTML=v; 1772 else el.setAttribute(kk,v); 1773 } 1774 (Array.isArray(k)?k:[k]).forEach(c=> c!=null && el.appendChild(typeof c==='string'?document.createTextNode(c):c)); 1775 return el; 1776 }; 1777 1778 const fmtDate=s=> s? new Date(s).toLocaleDateString(undefined,{year:'numeric',month:'short',day:'numeric'}) : ''; 1779 1780 async function tryFetchFeed(){ 1781 for(const url of FEEDS){
1782 try{ 1783 const r=await fetch(url); 1784 if(!r.ok) continue; 1785 const xml=new DOMParser().parseFromString(await r.text(),'application/xml'); 1786 const items=[...xml.querySelectorAll('item')].slice(0,MAX_ITEMS).map(it=>{ 1787 const title=it.querySelector('title')?.textContent?.trim()||'Untitled'; 1788 const link=it.querySelector('link')?.textContent?.trim()||'#'; 1789 const pub=it.querySelector('pubDate')?.textContent||it.querySelector('published')?.textContent||''; 1790 const itunesImg=it.querySelector('itunes\\:image, image')?.getAttribute('href'); 1791 const mediaThumb=it.querySelector('media\\:thumbnail')?.getAttribute('url'); 1792 const img=itunesImg || mediaThumb || ''; 1793 return {title,link,image:img,date:pub}; 1794 }).filter(ep=>ep.link); 1795 if(items.length) return items; 1796 }catch(e){ /* try next */ } 1797 } 1798 return null; 1799 } 1800 1801 function enableMouseDrag(rail){ 1802 let dragging=false, pid=null, startX=0, startY=0, startScroll=0; 1803 1804 rail.addEventListener('pointerdown', (e) => { 1805 if (e.pointerType !== 'mouse') return; 1806 if (e.button !== 0) return; 1807 dragging=false; 1808 pid=e.pointerId; 1809 startX=e.clientX||0; 1810 startY=e.clientY||0; 1811 startScroll=rail.scrollLeft; 1812 }, { passive:true }); 1813 1814 rail.addEventListener('pointermove', (e) => { 1815 if (pid == null || e.pointerId !== pid) return; 1816 const dx=(e.clientX||0)-startX; 1817 const dy=(e.clientY||0)-startY; 1818 1819 if(!dragging){ 1820 if (Math.abs(dx) > 7 && Math.abs(dx) > Math.abs(dy)){ 1821 dragging=true; 1822 rail.setPointerCapture(pid); 1823 } else { 1824 return; 1825 } 1826 } 1827 e.preventDefault(); 1828 rail.scrollLeft = startScroll - dx; 1829 }, { passive:false }); 1830 1831 rail.addEventListener('pointerup', ()=>{ dragging=false; pid=null; }); 1832 rail.addEventListener('pointercancel', ()=>{ dragging=false; pid=null; }); 1833 } 1834 1835 function buildCarousel(stack, items){ 1836 stack.querySelector('.pb-strip')?.remove(); 1837 1838 const strip=h('div',{class:'pb-strip'}); 1839 const nav=h('div',{class:'pb-nav',html:` 1840 <button class="pb-prev" type="button" aria-label="Previous"> 1841 <svg viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M14.7 19.3a1 1 0 0 1-1.4 0l-6-6a1 1 0 0 1 0-1.4l6-6a1 1 0 1 1 1.4 1.4L9.41 12l5.3 5.3a1 1 0 0 1 0 1.4z"/></svg> 1842 </button> 1843 <button class="pb-next" type="button" aria-label="Next"> 1844 <svg viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M9.3 4.7a1 1 0 0 1 1.4 0l6 6a1 1 0 0 1 0 1.4l-6 6a1 1 0 1 1-1.4-1.4L14.59 12 9.3 6.7a1 1 0 0 1 0-1.4z"/></svg> 1845 </button>`}); 1846 1847 const rail=h('div',{class:'ls-rail'}); 1848 1849 items.forEach(ep=>{ 1850 const a=h('article',{class:'ls-item'}); 1851 1852 /* IMPORTANT FIX: correct target + rel at creation time */ 1853 const link=h('a',{ 1854 class:'pb-card', 1855 href:ep.link, 1856 target:'_blank', 1857 rel:'noopener noreferrer' 1858 }); 1859 1860 link.appendChild(h('img',{class:'pb-thumb',src:ep.image||'https://i.imgur.com/8Km9tLL.png',alt:ep.title})); 1861 1862 const info=h('div',{class:'pb-info'},[ 1863 h('div',{class:'pb-title'},ep.title), 1864 h('div',{class:'pb-time'},fmtDate(ep.date)) 1865 ]); 1866 1867 a.appendChild(link); 1868 a.appendChild(info); 1869 rail.appendChild(a); 1870 }); 1871 1872 strip.appendChild(nav); 1873 strip.appendChild(rail); 1874 1875 const titleEl=stack.querySelector('.dis-podcast-title, h1, h2, h3, [class*="title"]'); 1876 (titleEl||stack).insertAdjacentElement('afterend',strip); 1877 1878 const root=stack.closest('.dis-podcasts-section')||stack; 1879 root.setAttribute('data-pb-ready','1'); 1880 1881 const prevBtn=nav.querySelector('.pb-prev'); 1882 const nextBtn=nav.querySelector('.pb-next'); 1883 1884 const maxScroll=()=>Math.max(0, rail.scrollWidth - rail.clientWidth); 1885 const atStart=()=>rail.scrollLeft<=2; 1886 const atEnd=()=>(maxScroll()-rail.scrollLeft)<=2; 1887 1888 const update=()=>{ 1889 prevBtn.disabled=atStart(); 1890 nextBtn.disabled=atEnd(); 1891 nav.style.display=(maxScroll()>2)?'inline-flex':'none'; 1892 }; 1893 1894 const step=dir=>rail.scrollBy({left:Math.max(rail.clientWidth*.9,280)*dir,behavior:'smooth'}); 1895 1896 prevBtn.addEventListener('click',()=>step(-1)); 1897 nextBtn.addEventListener('click',()=>step(1)); 1898 1899 rail.setAttribute('tabindex','0'); 1900 rail.addEventListener('keydown',e=>{ 1901 if(e.key==='ArrowLeft'){e.preventDefault();step(-1);} 1902 if(e.key==='ArrowRight'){e.preventDefault();step(1);} 1903 }); 1904 1905 rail.addEventListener('wheel',e=>{ 1906 if(!e.shiftKey) return; 1907 e.preventDefault(); 1908 rail.scrollBy({left:e.deltaY,behavior:'smooth'}); 1909 },{passive:false}); 1910 1911 enableMouseDrag(rail); 1912 1913 if ('ResizeObserver' in window) new ResizeObserver(update).observe(rail); 1914 rail.addEventListener('scroll',update,{passive:true}); 1915 window.addEventListener('resize',()=>requestAnimationFrame(update)); 1916 requestAnimationFrame(update); 1917 1918 // Make titles clickable (kept exactly as before) 1919 document.querySelectorAll('.dis-podcasts-section .ls-rail .ls-item').forEach(item=>{ 1920 const link=item.querySelector('a.pb-card'); 1921 const title=item.querySelector('.pb-title'); 1922 if(!link || !title) return; 1923 if(title.dataset.clickBound) return; 1924 1925 title.dataset.clickBound='1'; 1926 title.setAttribute('role','link'); 1927 title.setAttribute('tabindex','0'); 1928 1929 const open=()=> window.open(link.href,'_blank','noopener'); 1930 title.addEventListener('click',open); 1931 title.addEventListener('keydown',e=>{ 1932 if(e.key==='Enter'||e.key===' '){ e.preventDefault(); open(); } 1933 }); 1934 }); 1935 } 1936 1937 ready(async function(){ 1938 const stack=document.querySelector('.dis-podcasts-section .dis-podcast-stack'); 1939 if(!stack) return; 1940 1941 const items = await tryFetchFeed(); 1942 if(items && items.length) buildCarousel(stack, items); 1943 else { 1944 if(!stack.querySelector('.pb-fallback')){ 1945 const wrap=document.createElement('div'); 1946 wrap.innerHTML = FALLBACK_IFRAME; 1947 stack.appendChild(wrap.firstElementChild); 1948 } 1949 } 1950 }); 1951})(); 1952</script>
1952 1953 1954<!-- ================================= Open specific support link in new tab ================================= -->
1955<script> 1956(function(){ 1957 const ready = (fn) => 1958 document.readyState !== 'loading' ? fn() : document.addEventListener('DOMContentLoaded', fn, { once:true }); 1959 1960 ready(function() { 1961 var specificLink = document.querySelector('a[href="https://www.drownedinsound.org/#/portal/support"]'); 1962 if (specificLink) { 1963 specificLink.setAttribute('target','_blank'); 1964 specificLink.setAttribute('rel','noopener noreferrer'); 1965 } 1966 }); 1967})(); 1968</script>
1968 1969 1970<!-- ================================= Podcasts page: replace â[embed player]â with Podbean iframe ================================= --> 1971<style> 1972 .podbean-embed{ position:relative;width:100%;max-width:100%;margin:16px 0; } 1973 .podbean-embed iframe{ display:block;width:100%;height:450px;border:0; } 1974</style>
1975<script> 1976(function(){ 1977 const ready = (fn) => 1978 document.readyState !== 'loading' ? fn() : document.addEventListener('DOMContentLoaded', fn, { once:true }); 1979 1980 ready(function(){ 1981 if(!/^\/podcasts\/?$/.test(location.pathname)) return; 1982 if(document.querySelector('.podbean-embed,[data-name="pb-iframe-player"]')) return; 1983 1984 const IFRAME_HTML = '<iframe title="Drowned in Sound" allowtransparency="true" height="450" width="100%" style="border:none;min-width:min(100%,430px);height:315px;" scrolling="no" data-name="pb-iframe-player" src="https://www.podbean.com/player-v2/?i=uy8kj-1411062-pbblog-playlist&share=1&download=1&fonts=Arial&skin=1b1b1b&font-color=&rtl=0&logo_link=&btn-skin=fb0584&size=315" loading="lazy" allowfullscreen></iframe>'; 1985 1986 const roots=document.querySelectorAll('.gh-content, .post-content, .page-content, article, main, .content, body'); 1987 let replaced=false; 1988 1989 for(const root of roots){ 1990 const target=[...root.querySelectorAll('p,div,span,em,strong,h1,h2,h3,h4,h5,li')] 1991 .find(el=>(el.textContent||'').trim().toLowerCase()==='[embed player]'); 1992 if(target){ 1993 target.outerHTML='<div class="podbean-embed">'+IFRAME_HTML+'</div>'; 1994 replaced=true; 1995 break; 1996 } 1997 } 1998 1999 if(!replaced){ 2000 const walker=document.createTreeWalker(document.body,NodeFilter.SHOW_TEXT,{ 2001 acceptNode:(n)=>/\[embed player\]/i.test(n.nodeValue||'')?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP 2002 }); 2003 const node=walker.nextNode(); 2004 if(node && node.parentNode){ 2005 const wrap=document.createElement('div'); 2006 wrap.className='podbean-embed'; 2007 wrap.innerHTML=IFRAME_HTML; 2008 node.parentNode.replaceChild(wrap,node); 2009 replaced=true; 2010 } 2011 } 2012 2013 if(!replaced){ 2014 const fall=document.querySelector('.gh-content, .post-content, .page-content, article, main, .content')||document.body; 2015 const wrap=document.createElement('div'); 2016 wrap.className='podbean-embed'; 2017 wrap.innerHTML=IFRAME_HTML; 2018 fall.appendChild(wrap); 2019 } 2020 }); 2021})(); 2022</script>
2022 2023 2024<!-- ================================= DIS Infinite Loader v7 â HP single-mount + strong dedupe ================================= --> 2025<style> 2026 .pagination, .load-more, a[rel="next"], button[rel="next"] { display:none !important; } 2027 2028 .dis-inf-sentinel { width:100%; height:1px; display:block; } 2029 .dis-inf-spinner { 2030 display:none; width:22px; height:22px; margin:18px auto; 2031 border-radius:50%; border:3px solid rgba(255,255,255,.25); border-top-color:#fff; 2032 animation:disSpin .8s linear infinite; 2033 } 2034 .dis-inf-sentinel[data-loading="1"] .dis-inf-spinner { display:block; } 2035 @keyframes disSpin { to { transform: rotate(360deg); } } 2036</style> 2037 2038<style> 2039/* Only the replacement tag-list control. Homepage/global typography is untouched. */ 2040#dis-tag-pagination { 2041 display: flex; 2042 flex-direction: column; 2043 align-items: center; 2044 gap: 16px; 2045 padding: 32px 24px; 2046 text-align: center; 2047 border-top: 1px solid var(--text-color); 2048} 2049#dis-tag-pagination button { 2050 min-height: 48px; 2051 padding: 12px 28px; 2052 border: 1px solid var(--text-color); 2053 background: transparent; 2054 color: var(--text-color); 2055 cursor: pointer; 2056} 2057#dis-tag-pagination button:hover:not(:disabled) { 2058 background: var(--text-color); 2059 color: var(--background-color); 2060} 2061#dis-tag-pagination button:disabled { opacity: .55; cursor: wait; } 2062#dis-tag-pagination p { margin: 0; font-size: 16px; line-height: 1.5; } 2063#dis-tag-pagination a { color: var(--text-color); text-decoration: underline; } 2064#dis-tag-pagination :is(a,button):focus-visible { outline: 2px solid #f307b0; outline-offset: 4px; } 2065#dis-tag-pagination [hidden] { display: none !important; } 2066 2067</style>
2068<script> 2069// Candidate for the existing footer injection, NOT deployed or added to the theme. 2070(function () { 2071 'use strict'; 2072 2073 function nextPageURL(value, current) { 2074 if (!value) return null; 2075 const here = new URL(current); 2076 const route = here.pathname.match(/^(.*\/tag\/[^/]+\/)(?:page\/(\d+)\/)?$/); 2077 if (!route) return null; 2078 const next = new URL(value, here); 2079 const page = Number(route[2] || 1) + 1; 2080 if (next.origin !== here.origin || next.username || next.password || next.search || next.hash || 2081 !['http:', 'https:'].includes(next.protocol) || 2082 next.pathname !== `${route[1]}page/${page}/`) { 2083 throw new Error('Unexpected listing page'); 2084 } 2085 return next.href; 2086 } 2087 2088 function mount(doc) { 2089 const grid = doc.querySelector('#tag-stories-grid'); 2090 if (!grid || !/\/tag\/[^/]+\/(?:page\/\d+\/)?$/.test(doc.location.pathname)) return false; 2091 if (doc.querySelector('#dis-tag-pagination')) return true; 2092 2093 const view = doc.defaultView; 2094 const nav = doc.createElement('nav'); 2095 nav.id = 'dis-tag-pagination'; 2096 nav.setAttribute('aria-label', 'More articles'); 2097 const button = doc.createElement('button'); 2098 button.type = 'button'; 2099 button.className = 'button'; 2100 button.textContent = 'Load more'; 2101 button.setAttribute('aria-controls', grid.id); 2102 const status = doc.createElement('p'); 2103 status.setAttribute('role', 'status'); 2104 status.setAttribute('aria-live', 'polite'); 2105 status.setAttribute('aria-atomic', 'true'); 2106 const fallback = doc.createElement('a'); 2107 fallback.textContent = 'Open next page'; 2108 fallback.hidden = true; 2109 nav.append(button, status, fallback); 2110 grid.insertAdjacentElement('afterend', nav); 2111 2112 // The old custom element stays out of the interaction path; no competing handler. 2113 const old = grid.parentElement.querySelector('custom-pagination'); 2114 if (old) old.remove(); 2115 const cardSelector = ':scope > custom-card.card'; 2116 const cardsIn = node => Array.from(node.querySelectorAll(cardSelector)); 2117 const cardURL = card => { 2118 const link = card.querySelector('a.card-title-link[href]'); 2119 if (!link) throw new Error('Article link missing'); 2120 const url = new URL(link.getAttribute('href'), doc.location.href); 2121 if (url.origin !== doc.location.origin || !['http:', 'https:'].includes(url.protocol)) { 2122 throw new Error('Unexpected article link'); 2123 } 2124 return url.origin + url.pathname; 2125 }; 2126 const seen = new Set(cardsIn(grid).map(cardURL)); 2127 let current = doc.location.href; 2128 let next; 2129 let busy = false; 2130 try { 2131 next = nextPageURL(doc.querySelector('link[rel="next"]')?.getAttribute('href'), current); 2132 } catch (_) { 2133 button.hidden = true; 2134 status.textContent = 'More articles are unavailable. Please reload this page.'; 2135 return true; // Never fall back to the automatic loader on configuration errors. 2136 } 2137 const update = () => { 2138 button.hidden = !next; 2139 button.disabled = busy; 2140 button.textContent = busy ? 'Loadingâ¦' : 'Load more'; 2141 grid.setAttribute('aria-busy', String(busy)); 2142 if (next) fallback.href = next; 2143 }; 2144 status.textContent = next ? 'More articles load only when you choose.' : 'You have reached the end of this listing.'; 2145 update(); 2146 2147 button.addEventListener('click', async () => { 2148 if (busy || !next) return; 2149 busy = true; 2150 fallback.hidden = true; 2151 status.textContent = 'Loading more articlesâ¦'; 2152 update(); 2153 const controller = new view.AbortController(); 2154 const timer = view.setTimeout(() => controller.abort(), 15000); 2155 try { 2156 const response = await view.fetch(next, { 2157 method: 'GET', credentials: 'omit', redirect: 'error', 2158 referrerPolicy: 'no-referrer', signal: controller.signal 2159 }); 2160 if (!response.ok) throw new Error('Listing unavailable'); 2161 const incoming = new view.DOMParser().parseFromString(await response.text(), 'text/html'); 2162 const incomingGrid = incoming.querySelector('#tag-stories-grid'); 2163 const cards = incomingGrid ? cardsIn(incomingGrid) : []; 2164 if (!cards.length) throw new Error('Listing missing'); 2165 // Validate the complete response before mutating the displayed grid. 2166 const following = nextPageURL(incoming.querySelector('link[rel="next"]')?.getAttribute('href'), next); 2167 const pending = new Set(); 2168 const fresh = cards.filter(card => {
2169 const key = cardURL(card); 2170 if (seen.has(key) || pending.has(key)) return false; 2171 pending.add(key); 2172 return true; 2173 }); 2174 const fragment = doc.createDocumentFragment(); 2175 let firstNewLink; 2176 fresh.forEach(card => { 2177 // Only import the article cards, never page scripts or active embeds. 2178 const copy = doc.importNode(card, true); 2179 copy.querySelectorAll('script,iframe,object,embed,form,link,style').forEach(el => el.remove()); 2180 [copy, ...copy.querySelectorAll('*')].forEach(el => { 2181 Array.from(el.attributes).forEach(attr => { 2182 if (/^on/i.test(attr.name) || attr.name === 'srcdoc') el.removeAttribute(attr.name); 2183 }); 2184 }); 2185 if (!firstNewLink) firstNewLink = copy.querySelector('a.card-title-link'); 2186 fragment.appendChild(copy); 2187 }); 2188 grid.appendChild(fragment); 2189 pending.forEach(key => seen.add(key)); 2190 current = next; 2191 next = following; 2192 status.textContent = `${fresh.length} more articles loaded. ${cardsIn(grid).length} shown.` + 2193 (!next ? ' You have reached the end of this listing.' : ''); 2194 if (typeof view.calculateTextHeight === 'function') view.calculateTextHeight(['tag-stories-grid']); 2195 if (firstNewLink) firstNewLink.focus({preventScroll: true}); 2196 else if (!next) { status.tabIndex = -1; status.focus({preventScroll: true}); } 2197 } catch (_) { 2198 status.textContent = 'Could not load more articles. Try again, or open the next page.'; 2199 fallback.hidden = false; // The URL is unchanged: retries cannot silently skip a page. 2200 } finally { 2201 view.clearTimeout(timer); 2202 busy = false; 2203 update(); 2204 } 2205 }); 2206 return true; 2207 } 2208 2209 if (typeof module === 'object' && module.exports) module.exports = {nextPageURL, mount}; 2210 else window.DiSManualTagPagination = {mount}; 2211})(); 2212 2213 2214(function(){ 2215 if (window.__DIS_GLOBAL_V7__) return; 2216 window.__DIS_GLOBAL_V7__ = true; 2217 2218 var onReady = function (fn){ 2219 if (document.readyState !== 'loading') fn(); 2220 else document.addEventListener('DOMContentLoaded', fn, {once:true}); 2221 }; 2222 2223 function $(sel, root){ return (root||document).querySelector(sel); } 2224 function $all(sel, root){ return Array.prototype.slice.call((root||document).querySelectorAll(sel)); } 2225 function looksLikeCard(el){ return el && el.matches('article, .post, [class*="post-card"], [class*="gh-card"], [class*="card"]'); } 2226 2227 function canonKey(href){ 2228 try{ 2229 var u=new URL(href, location.origin); 2230 var host=(u.hostname||'').toLowerCase().replace(/^www\./,''); 2231 var path=(u.pathname||'/').replace(/\/+/g,'/').replace(/\/amp\/?$/i,'/').toLowerCase(); 2232 return host + path; 2233 }catch(e){ return ''; } 2234 } 2235 2236 function primaryLinkFromCard(card){ 2237 var candidates = card.querySelectorAll('a[rel="bookmark"], a.post-card-content-link, h2 a, h3 a, a[href]'); 2238 for (var i=0;i<candidates.length;i++){ 2239 var a = candidates[i]; var href = a.getAttribute('href') || ''; 2240 var u; try{ u = new URL(href, location.origin); }catch(e){ continue; } 2241 var p = (u.pathname||'').replace(/\/+$/,'/').toLowerCase(); 2242 var h = (u.hostname||'').toLowerCase().replace(/^www\./,''); 2243 if (!p || p==='/' ) continue; 2244 if (h && h!==location.hostname.toLowerCase().replace(/^www\./,'')) continue; 2245 if (p.startsWith('/tag/') || p.startsWith('/author/') || p.startsWith('/page/') || p.startsWith('/search') || p.startsWith('/community') || p.startsWith('/topic/') || p.startsWith('/category/') || p.startsWith('/rss')) continue; 2246 return u.href; 2247 } 2248 return null; 2249 } 2250 2251 function findFeed(root){ 2252 root = root || document; 2253 2254 var rail = $('.latest-stories .ls-rail', root); 2255 if (rail) return rail; 2256 2257 var candidates = $all('.post-feed, .cards, .cards-grid, .gh-feed, .grid, .items, .feed, main, .content, section', root); 2258 var best=null, score=0; 2259
2260 candidates.forEach(function(el){ 2261 var kids = $all(':scope > *', el); 2262 var count = kids.filter(looksLikeCard).length; 2263 if (count>=2 && count>score){ score=count; best=el; } 2264 }); 2265 2266 if (!best){ 2267 var cards = $all('article, .post, [class*="post-card"], [class*="gh-card"], [class*="card"]', root); 2268 if (cards.length>=2) best = cards[0].parentElement; 2269 } 2270 return best; 2271 } 2272 2273 function extractCards(doc){ 2274 var feed = findFeed(doc); 2275 if (!feed) return []; 2276 var direct = $all(':scope > *', feed).filter(looksLikeCard); 2277 return direct.length ? direct : $all('article, .post, [class*="post-card"], [class*="gh-card"], [class*="card"]', feed); 2278 } 2279 2280 function ensureSlidesIntoLatest(targetFeed){ 2281 var root = $('.latest-stories'); 2282 if (!root || !root.dataset.lsReady) return; 2283 $all(':scope > *', targetFeed).forEach(function(el){ if (looksLikeCard(el)) el.classList.add('ls-item'); }); 2284 } 2285 2286 function splitPath(pathname){ 2287 var m = pathname.match(/^(.*?)(?:\/page\/(\d+)\/?)?$/); 2288 return { 2289 base: (m ? m[1] : pathname).replace(/\/?$/,'/'), 2290 page: m && m[2] ? parseInt(m[2],10) : 1 2291 }; 2292 } 2293 2294 function nextRelFrom(doc){ 2295 var ln = doc.querySelector && doc.querySelector('link[rel="next"]'); 2296 if (ln && ln.href) return ln.href; 2297 var a = doc.querySelector && doc.querySelector('.pagination a[rel="next"], a[aria-label*="Next" i], a.next, .load-more a'); 2298 return (a && a.href) ? a.href : null; 2299 } 2300 2301 function mountInfinite(scopeDoc){ 2302 if (window.__DIS_INF_MOUNTED__) return; 2303 window.__DIS_INF_MOUNTED__ = true; 2304 2305 var scope = scopeDoc || document; 2306 var feed = findFeed(scope); 2307 if (!feed) return; 2308 2309 var sentinel = (function(){ 2310 var s = feed.parentNode.querySelector('.dis-inf-sentinel'); 2311 if (s) return s; 2312 s = document.createElement('div'); 2313 s.className = 'dis-inf-sentinel'; 2314 s.innerHTML = '<div class="dis-inf-spinner" aria-hidden="true"></div>'; 2315 feed.parentNode.appendChild(s); 2316 return s; 2317 })(); 2318 2319 function setLoading(v){ if (!sentinel) return; if (v) sentinel.setAttribute('data-loading','1'); else sentinel.removeAttribute('data-loading'); } 2320 function hideSentinel(){ if (sentinel) sentinel.style.display='none'; } 2321 2322 var seen = new Set(); 2323 $all('article, .post, [class*="post-card"], [class*="gh-card"], [class*="card"]', document).forEach(function(c){ 2324 var href = primaryLinkFromCard(c); 2325 if (href) seen.add(canonKey(href)); 2326 }); 2327 2328 var baseInfo = splitPath(scope.location ? scope.location.pathname : location.pathname); 2329 var base = baseInfo.base; 2330 var currentPage = baseInfo.page; 2331 var nextURL = nextRelFrom(scope) || (location.origin + base + 'page/' + (currentPage + 1) + '/'); 2332 2333 var busy=false, done=false; 2334 var missRuns=0; 2335 var MAX_EMPTY_RUNS=2; 2336 var PAGE_HARD_CAP=1000; 2337 2338 function appendCards(cards){ 2339 var appended=0; 2340 if (!cards || !cards.length) return 0; 2341 2342 var frag = document.createDocumentFragment(); 2343 cards.forEach(function(c){ 2344 var href = primaryLinkFromCard(c); 2345 if (!href) return; 2346 var key = canonKey(href); 2347 if (seen.has(key)) return; 2348 seen.add(key); 2349 frag.appendChild(document.importNode(c, true)); 2350 appended++; 2351 }); 2352 2353 if (appended){ feed.appendChild(frag); ensureSlidesIntoLatest(feed); } 2354 return appended; 2355 } 2356 2357 function inferNextEnumerated(url){ 2358 try{ 2359 var u = new URL(url || (location.origin + base), location.origin); 2360 var bits = splitPath(u.pathname); 2361 var nextN = (bits.page || 1) + 1; 2362 return location.origin + bits.base + 'page/' + nextN + '/'; 2363 }catch(e){ return null; } 2364 } 2365 2366 function loadNext(){ 2367 if (busy || done) return; 2368 busy = true; setLoading(true); 2369 2370 if (!nextURL) nextURL = inferNextEnumerated(location.origin + base + 'page/' + (currentPage+1) + '/'); 2371 2372 fetch(nextURL, { credentials:'same-origin' }) 2373 .then(function(r){ 2374 if (!r.ok) throw new Error(r.status); 2375 return r.text(); 2376 }) 2377 .then(function(html){ 2378 var doc = new DOMParser().parseFromString(html, 'text/html'); 2379 var got = appendCards(extractCards(doc)); 2380 var rel = nextRelFrom(doc); 2381 nextURL = rel || inferNextEnumerated(nextURL); 2382 if (got>0){ missRuns=0; } else { missRuns++; } 2383 if (missRuns >= MAX_EMPTY_RUNS) { done=true; hideSentinel(); } 2384 }) 2385 .catch(function(){ 2386 missRuns++; 2387 if (missRuns >= MAX_EMPTY_RUNS){ done=true; hideSentinel(); } 2388 else { nextURL = inferNextEnumerated(nextURL); } 2389 }) 2390 .finally(function(){ busy=false;
2390 setLoading(false); }); 2391 } 2392 2393 loadNext(); 2394 2395 var io = new IntersectionObserver(function(entries){ 2396 entries.forEach(function(en){ if (en.isIntersecting) loadNext(); }); 2397 }, { rootMargin:'2000px 0px 2000px 0px', threshold:0 }); 2398 if (!done) io.observe(sentinel); 2399 2400 var isHomePath = location.pathname.replace(/\/+$/,'/') === '/'; 2401 var timer = null; 2402 2403 if (!isHomePath) { 2404 timer = setInterval(function(){ 2405 if (done) { clearInterval(timer); return; } 2406 loadNext(); 2407 }, 2500); 2408 } 2409 2410 var pageCounter=0; 2411 var capTimer=setInterval(function(){ 2412 if (done || ++pageCounter>PAGE_HARD_CAP){ clearInterval(capTimer); } 2413 }, 1000); 2414 } 2415 2416 onReady(function(){ 2417 if (window.DiSManualTagPagination.mount(document)) return; 2418 (function ensureLS(){ 2419 const root=document.querySelector('.latest-stories'); 2420 if (root && !root.dataset.lsReady){ 2421 const ev = new Event('DOMContentLoaded'); 2422 window.dispatchEvent ? window.dispatchEvent(ev) : document.dispatchEvent(ev); 2423 } 2424 })(); 2425 2426 const isHome = location.pathname.replace(/\/+$/,'/') === '/'; 2427 if (isHome && $('.latest-stories')) mountInfinite(document); 2428 else if (!isHome && findFeed(document)) mountInfinite(document); 2429 }); 2430})(); 2431 2432</script>
2432 2433 2434<!-- ================= DIS â Make Latest/Podcasts arrows match Featured/Tags (use arrow-button) ================= --> 2435<style> 2436 .latest-stories .ls-nav, 2437 .dis-podcasts-section .pb-nav{ 2438 display:none !important; 2439 } 2440 .latest-stories [class*="posts"]{ margin-right: 0 !important; } 2441 2442 .dis-injected-header-row{ 2443 display:flex; 2444 align-items:center; 2445 justify-content:space-between; 2446 gap:18px; 2447 } 2448 2449 /* Podcasts: keep your current âunder-title, right alignedâ placement */ 2450 .dis-podcasts-section .section-header-arrows[data-dis="podcasts"]{ 2451 display:flex !important; 2452 width:100% !important; 2453 justify-content:flex-end !important; 2454 align-items:center !important; 2455 gap:12px !important; 2456 margin-top:10px !important; 2457 } 2458</style> 2459
2460<script> 2461(function(){ 2462 const ready = (fn) => 2463 document.readyState !== 'loading' ? fn() : document.addEventListener('DOMContentLoaded', fn, { once:true }); 2464 2465 const DIS_ARROW_SVG = ` 2466 <svg width="100%" height="100%" viewBox="0 0 80 22" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> 2467 <path d="M0 11L79 11" stroke="var(--text-color)" stroke-width="1.5"></path> 2468 <path d="M58.0026 21.0625C58.0026 21.0625 57.3026 11.2875 79.0026 11" stroke="var(--text-color)" stroke-width="1.5"></path> 2469 <path d="M58.0026 1C58.0026 1 57.3026 10.775 79.0026 11.0625" stroke="var(--text-color)" stroke-width="1.5"></path> 2470 </svg> 2471 `; 2472 2473 function makeSectionHeaderArrows(mark){ 2474 const wrap = document.createElement('div'); 2475 wrap.className = 'section-header-arrows'; 2476 wrap.setAttribute('data-dis', mark); 2477 wrap.innerHTML = ` 2478 <button class="arrow-button unstyled-button" aria-label="Button left" name="left" disabled> 2479 ${DIS_ARROW_SVG} 2480 </button> 2481 <button class="arrow-button unstyled-button" aria-label="Button right" name="right"> 2482 ${DIS_ARROW_SVG} 2483 </button> 2484 `; 2485 return wrap; 2486 } 2487 2488 function bindArrowsToRail(arrowsWrap, rail){ 2489 const prev = arrowsWrap.querySelector('button[name="left"]'); 2490 const next = arrowsWrap.querySelector('button[name="right"]'); 2491 2492 const maxScroll = () => Math.max(0, rail.scrollWidth - rail.clientWidth); 2493 const atStart = () => rail.scrollLeft <= 2; 2494 const atEnd = () => (maxScroll() - rail.scrollLeft) <= 2; 2495 2496 const step = (dir) => { 2497 rail.scrollBy({ left: Math.max(rail.clientWidth * 0.9, 280) * dir, behavior: 'smooth' }); 2498 }; 2499 2500 const update = () => { 2501 const m = maxScroll(); 2502 prev.disabled = (m <= 2) || atStart(); 2503 next.disabled = (m <= 2) || atEnd(); 2504 arrowsWrap.style.display = (m > 2) ? '' : 'none'; 2505 }; 2506 2507 prev.addEventListener('click', () => step(-1)); 2508 next.addEventListener('click', () => step(1)); 2509 2510 rail.addEventListener('scroll', update, { passive:true }); 2511 window.addEventListener('resize', () => requestAnimationFrame(update)); 2512 if ('ResizeObserver' in window) new ResizeObserver(update).observe(rail); 2513 2514 requestAnimationFrame(update); 2515 } 2516 2517 function ensureHeaderRow(sectionRoot, titleEl){ 2518 const existingHeader = 2519 (titleEl && titleEl.closest('.section-header')) || 2520 (sectionRoot && sectionRoot.querySelector('.section-header')) || 2521 null; 2522 2523 if (existingHeader) return existingHeader; 2524 2525 const row = document.createElement('div'); 2526 row.className = 'dis-injected-header-row'; 2527 if (titleEl && titleEl.parentNode) { 2528 titleEl.parentNode.insertBefore(row, titleEl); 2529 row.appendChild(titleEl); 2530 } else if (sectionRoot) { 2531 sectionRoot.insertAdjacentElement('afterbegin', row); 2532 } 2533 return row; 2534 } 2535 2536 function installLatestArrows(){ 2537 const root = document.querySelector('.latest-stories'); 2538 if (!root) return; 2539 2540 const rail = root.querySelector('.ls-rail'); 2541 if (!rail) return; 2542 2543 const title = root.querySelector('h1,h2,h3,.section-title,[class*="title"]') || null; 2544 const headerRow = ensureHeaderRow(root, title); 2545 2546 if (headerRow.querySelector('.section-header-arrows[data-dis="latest"]')) return; 2547 2548 const arrows = makeSectionHeaderArrows('latest'); 2549 headerRow.appendChild(arrows); 2550 bindArrowsToRail(arrows, rail); 2551 } 2552 2553 function installPodcastArrows(){ 2554 const sec = document.querySelector('.dis-podcasts-section'); 2555 if (!sec) return; 2556 2557 const rail = sec.querySelector('.ls-rail'); 2558 if (!rail) return; 2559 2560 const stack = sec.querySelector('.dis-podcast-stack') || sec; 2561 const title = stack.querySelector('.dis-podcast-title') || sec.querySelector('h1,h2,h3,.section-title,[class*="title"]'); 2562 if (!title) return; 2563 2564 // Under-title placement (your current working layout) 2565 if (!stack.querySelector('.section-header-arrows[data-dis="podcasts"]')) { 2566 const arrows = makeSectionHeaderArrows('podcasts'); 2567 title.insertAdjacentElement('afterend', arrows); 2568 bindArrowsToRail(arrows, rail); 2569 } 2570 } 2571 2572 ready(function(){ 2573 installLatestArrows(); 2574 installPodcastArrows(); 2575 2576 // Minimal observer: only to catch async podcast build (feed fetch) 2577 const mo = new MutationObserver(() => { 2578 installLatestArrows(); 2579 installPodcastArrows(); 2580 }); 2581 mo.observe(document.documentElement, { childList:true, subtree:true }); 2582 }); 2583})(); 2584</script>
2584 2585
2586<script> 2587document.addEventListener("DOMContentLoaded", function() { 2588 const links = document.querySelectorAll("a"); 2589 links.forEach(function(link) { 2590 if (link.host !== window.location.host) { 2591 link.setAttribute("target", "_blank"); 2592 link.setAttribute("rel", "noopener noreferrer"); 2593 } 2594 }); 2595}); 2596</script>
2596 2597</body> 2598</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.