<!DOCTYPE html><!-- Last Published: Tue Jul 21 2026 05:48:58 GMT+0000 (Coordinated Universal Time) --><!--$-->
<html data-wf-domain="www.napster.com" data-wf-page="6a2ad426365d3290a62eaded" data-wf-site="69ae6251111a514c4038172a" lang="en"><!--$--><head><meta charset="utf-8"/><!--$--><link href="https://cdn.prod.website-files.com" rel="preconnect" crossorigin="anonymous"/><!--/$--><title>Napster | Visible AI Agents with Voice, Video and Memory</title><meta content="Create, deploy and talk to lifelike AI agents with voice, video presence, memory and real-time utility across apps, websites and workplaces." name="description"/><meta content="Napster is an AI agent platform that enables organizations and individuals to deploy specialized AI companions with persistent memory, video presence, and real-time voice capabilities." property="og:title"/><meta content="Create, deploy and talk to lifelike AI agents with voice, video presence, memory and real-time utility across apps, websites and workplaces." property="og:description"/><meta content="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ae7637393b1f52d86dd343_opengraph.png" property="og:image"/><meta content="Napster is an AI agent platform that enables organizations and individuals to deploy specialized AI companions with persistent memory, video presence, and real-time voice capabilities." name="twitter:title"/><meta content="Create, deploy and talk to lifelike AI agents with voice, video presence, memory and real-time utility across apps, websites and workplaces." name="twitter:description"/><meta content="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ae7637393b1f52d86dd343_opengraph.png" name="twitter:image"/><meta property="og:type" content="website"/><meta content="summary_large_image" name="twitter:card"/><meta content="width=device-width, initial-scale=1" name="viewport"/><!--$--><link href="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/css/napsternew.shared.fa4ac570f.min.css" rel="stylesheet" type="text/css" integrity="sha384-+krFcPQnvBd8Q0tts8CuNXx4Mm40ON4RTMF5zTuHg2WSniVoTBmlgUE1+5jWFLry" crossorigin="anonymous"/><!--/$--><!--$--><link href="https://fonts.googleapis.com" rel="preconnect"/><!--/$--><!--$--><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin="anonymous"/><!--/$--><script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js" type="text/javascript"></script><script type="text/javascript">WebFont.load({  google: {    families: ["Inter:300,400,500,600,700"]  }});</script><script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script><!--$--><link href="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b162fe58ef2659030d9f17_favicon.png" rel="shortcut icon" type="image/x-icon"/><!--/$--><!--$--><link href="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b162f5db8482341a9f75f0_webclip-napster.png" rel="apple-touch-icon"/><!--/$--><!--$--><link href="https://www.napster.com" rel="canonical"/><!--/$--><script type="application/ld+json">
{
  "@context": "https://schema.org",
  "video": {
    "@type": "VideoObject",
    "name": "Napster AI agents", 
    "description": "AI agents you can see, talk to, and create with.",
    "thumbnailUrl": [
      "https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69afcd061331a30366d33fc7_bg-hero1.avif"
    ],
    "uploadDate": "2026-04-01",
    "duration": "PT0M46S",
    "embedUrl": "https://www.napster.com/station",
    "contentUrl": "https://demoassets.touchcast.com/webflow-assets/videos/napster-intro-new_1.webm"
  }
}
</script><!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-DCKSBF6366"></script>
<script defer src="https://cdn.jsdelivr.net/npm/swiper@12/swiper-bundle.min.js"></script>
<script defer>
  window.dataLayer = window.dataLayer || [];
  function gtag() {
    dataLayer.push(arguments);
  }
  gtag('js', new Date());

  gtag('config', 'G-DCKSBF6366');
</script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-18191336479"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'AW-18191336479');
</script>
<!-- ============================================================
     SCHEMA 1: ORGANIZATION (Global)
     ============================================================ -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Napster",
  "legalName": "Napster Corporation",
  "url": "https://www.napster.com",
  "logo": "https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b2676cfaca4a559c6d5fcc_napster-logo.svg",
  "description": "Napster is an AI agent platform that enables organizations and individuals to deploy specialized AI companions with persistent memory, video presence, and real-time voice capabilities.",
  "foundingDate": "1999",
  "sameAs": [
    "https://www.linkedin.com/company/napstercorp/",
    "https://www.youtube.com/@napstercorp",
    "https://www.instagram.com/napstercorp/",
    "https://x.com/napster_corp",
    "https://www.facebook.com/napstercorp/"
  ],
  "contactPoint": [
    {
      "@type": "ContactPoint",
      "contactType": "sales",
      "url": "https://www.napster.com/contact"
    },
    {
      "@type": "ContactPoint",
      "contactType": "customer support",
      "url": "https://help.napster.com/hc/en-us"
    }
  ],
  "address": {
    "@type": "PostalAddress",
    "addressCountry": "US"
  }
}
</script>
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "Napster",
  "url": "https://www.napster.com",
  "description": "AI companions with video presence, persistent memory, and real-time voice. For consumers, enterprises, and developers.",
  "publisher": {
    "@type": "Organization",
    "name": "Napster",
    "url": "https://www.napster.com"
  }
}
</script>

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css" />
<script type="text/javascript">
  +(function (a, p, P, b, y) {
    a.braze = {};
    a.brazeQueue = [];
    for (var s = 'BrazeSdkMetadata DeviceProperties Card Card.prototype.dismissCard Card.prototype.removeAllSubscriptions Card.prototype.removeSubscription Card.prototype.subscribeToClickedEvent Card.prototype.subscribeToDismissedEvent Card.fromContentCardsJson ImageOnly CaptionedImage ClassicCard ControlCard ContentCards ContentCards.prototype.getUnviewedCardCount ControlMessage InAppMessage InAppMessage.SlideFrom InAppMessage.ClickAction InAppMessage.DismissType InAppMessage.OpenTarget InAppMessage.ImageStyle InAppMessage.Orientation InAppMessage.TextAlignment InAppMessage.CropType InAppMessage.prototype.closeMessage InAppMessage.prototype.removeAllSubscriptions InAppMessage.prototype.removeSubscription InAppMessage.prototype.subscribeToClickedEvent InAppMessage.prototype.subscribeToDismissedEvent InAppMessage.fromJson FullScreenMessage ModalMessage HtmlMessage SlideUpMessage User User.Genders User.NotificationSubscriptionTypes User.prototype.addAlias User.prototype.addToCustomAttributeArray User.prototype.addToSubscriptionGroup User.prototype.getUserId User.prototype.getUserId User.prototype.incrementCustomUserAttribute User.prototype.removeFromCustomAttributeArray User.prototype.removeFromSubscriptionGroup User.prototype.setCountry User.prototype.setCustomLocationAttribute User.prototype.setCustomUserAttribute User.prototype.setDateOfBirth User.prototype.setEmail User.prototype.setEmailNotificationSubscriptionType User.prototype.setFirstName User.prototype.setGender User.prototype.setHomeCity User.prototype.setLanguage User.prototype.setLastKnownLocation User.prototype.setLastName User.prototype.setPhoneNumber User.prototype.setPushNotificationSubscriptionType User.prototype.setLineId InAppMessageButton InAppMessageButton.prototype.removeAllSubscriptions InAppMessageButton.prototype.removeSubscription InAppMessageButton.prototype.subscribeToClickedEvent FeatureFlag FeatureFlag.prototype.getStringProperty FeatureFlag.prototype.getNumberProperty FeatureFlag.prototype.getBooleanProperty FeatureFlag.prototype.getImageProperty FeatureFlag.prototype.getJsonProperty FeatureFlag.prototype.getTimestampProperty Banner Banner.prototype.getStringProperty Banner.prototype.getNumberProperty Banner.prototype.getBooleanProperty Banner.prototype.getImageProperty Banner.prototype.getJsonProperty Banner.prototype.getTimestampProperty automaticallyShowInAppMessages hideContentCards showContentCards showInAppMessage deferInAppMessage toggleContentCards changeUser destroy getDeviceId getDeviceId initialize isPushBlocked isPushPermissionGranted isPushSupported logCardDismissal logContentCardImpressions logContentCardClick logBannerImpressions logBannerClick logCustomEvent logInAppMessageButtonClick logInAppMessageClick logInAppMessageHtmlClick logInAppMessageImpression logPurchase openSession requestPushPermission removeAllSubscriptions removeSubscription requestContentCardsRefresh refreshFeatureFlags requestImmediateDataFlush enableSDK isDisabled setLogger setSdkAuthenticationSignature addSdkMetadata disableSDK subscribeToContentCardsUpdates subscribeToInAppMessage subscribeToSdkAuthenticationFailures toggleLogging unregisterPush wipeData handleBrazeAction subscribeToFeatureFlagsUpdates getAllFeatureFlags logFeatureFlagImpression requestBannersRefresh insertBanner getAllBanners subscribeToBannersUpdates isInitialized'.split(' '), i = 0; i < s.length; i++) {
      for (var m = s[i], k = a.braze, l = m.split('.'), j = 0; j < l.length - 1; j++) k = k[l[j]];
      k[l[j]] = new Function('return function ' + m.replace(/\./g, '_') + '(){window.brazeQueue.push(arguments); return true}')();
    }
    window.braze.getDeferredInAppMessage = function () {
      return new window.braze.InAppMessage();
    };
    window.braze.getCachedContentCards = function () {
      return new window.braze.ContentCards();
    };
    window.braze.getUser = function () {
      return new window.braze.User();
    };
    window.braze.getFeatureFlag = function () {
      return new window.braze.FeatureFlag();
    };
    window.braze.getBanner = function () {
      return new window.braze.Banner();
    };
    window.braze.newBannerFromJson = function () {
      return new window.braze.Banner();
    };
    (y = p.createElement(P)).type = 'text/javascript';
    y.src = 'https://js.appboycdn.com/web-sdk/6.6/braze.min.js';
    y.async = 1;
    (b = p.getElementsByTagName(P)[0]).parentNode.insertBefore(y, b);
  })(window, document, 'script');
</script>
<script>
  // initialize the SDK
  braze.initialize('c961373b-492e-44e6-80b8-01a6ff13e9d5', {
    baseUrl: 'https://sdk.iad-01.braze.com/',
    enableLogging: false,
    allowUserSuppliedJavascript: false,
  });
</script>
<style>
  strong {
    font-weight: 600;
  }
  body {
    overflow-x: hidden;
    color:#ffffff;
  }
  .hide-overflow {
    height: 100% !important;
    overflow-y: hidden !important;
    touch-action: none;
    -ms-touch-action: none;
  }
  .napster-header.sticky{
    background: #000 !important;
  }
  .napster-sm-header.sticky{
    background: #000 !important;
  }
  .napster-nav-menu::before {
    content: '';
    top: 0;
    left: 0;
    position: absolute;
    width: 100%;
    height: 100%;
    backdrop-filter: blur(75px);
    border-radius: 8px;
  }

  .napster-trusted-scroll-1 .slick-track {
    display: flex;
    align-items: center;
  }

  .napster-trusted-logos::before,
  .napster-trusted-logos::after {
    position: absolute;
    background-image: linear-gradient(to right, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 0) 100%);
    content: '';
    height: 100%;
    width: 15%;
    z-index: 2;
    pointer-events: none;
  }
  .napster-trusted-logos::before {
    left: 0;
    top: 0;
  }
  .napster-trusted-logos::after {
    right: -1px;
    top: 0;
    transform: rotateZ(180deg);
  }

  .npr-learn-btn::before,
  .nprlrn-twin-btn::before {
    content: '';
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    right: 0;
    background: url(https://cdn.prod.website-files.com/686e1da81a9a9b6c64c7a164/69b0e5776239e47c140a0520_btn-border.png) no-repeat right center;
    background-size: contain;
  }

  .npr-global-trans-btn:hover img {
    transform: translateX(4px);
    transition: all 0.5s ease;
  }
  @media (max-width: 991px) {
    .napster-sm-menu-open {
      display: block;
    }
    .napster-sm-dropdown-list.w--open {
      position: static;
    }
  }
  
  body {
    text-rendering: optimizeLegibility;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
  }

  /* Hide br tags on screens smaller than 500px, text format */
  [data-brake] br {
    display: none;
  }

  @media (min-width: 501px) {
    [data-brake] br {
      display: inline;
    }
  }

#CookiebotWidgetIcon,
.coookie-icon-img{
  width:48px;
  height:48px;
  position: fixed;
  bottom:10px;
  left:10px;
  min-height: 48px;
  min-width: 48px;
  transition: all .2s ease-in;
  cursor: pointer;
  z-index: 999999;
  opacity: 1;
}  
.ask-to-agent {
    position: fixed;
    bottom: 28px;
    right: 28px;
    z-index: 999;
    display: flex;
    align-items: center;
    gap: 10px;
    background: #be369d;
    color: #fff;
    border: none;
    cursor: pointer;
    padding: 12px 20px 12px 14px;
    border-radius: 999px;
    font-size: .92rem;
    font-weight: 700;
    letter-spacing: .01em;
    box-shadow: 0 0 32px rgba(240, 4, 127, .55), 0 4px 24px rgba(0, 0, 0, .5);
    transition: transform .2s, box-shadow .2s;
    white-space: nowrap;
}
.ask-to-agent:hover{
  transform:translateY(-3px);
  box-shadow:0 0 48px rgba(240,4,127,.75),0 8px 32px rgba(0,0,0,.5);
}
.ask-to-agent:active{transform:translateY(-1px)}
.kai-avatar{
  border-radius:50%;
  overflow:hidden;
  flex-shrink:0;
  display:flex;
  align-items:center;
  justify-content:center;
}
.kai-avatar svg{
  width:18px;
  height:18px;
  opacity:.95
  }

.ask-to-agent::before{
  content:'';
  position:absolute;
  inset:-4px;
  border-radius:999px;
  border:2px solid rgba(240,4,127,.5);
  animation:pulse-ring 2.4s ease-out infinite;
  pointer-events:none;
}
@keyframes pulse-ring{
  0%{transform:scale(1);opacity:.7}
  70%{transform:scale(1.12);opacity:0}
  100%{transform:scale(1.12);opacity:0}
}
</style>
<meta name="twitter:site" content="@napster_corp"> 
<style>
.transition-fade {
  opacity: 1;
  transition: 0.4s;
}

html.is-animating .transition-fade {
  opacity: 0;
} 
</style><meta property="og:url" content="https://www.napster.com">
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css" />
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick-theme.css" />
<style>
  .napster-banner-video::before {
    width: 100%;
    height: 100%;
    content: '';
    position: absolute;
    bottom: -1px;
    left: 0;
    background: linear-gradient(to top, rgba(0, 0, 0, 1) 10%, rgba(0, 0, 0, 0.4) 20%, rgba(0, 0, 0, 0) 50%);
    z-index: 1;
  }

  .nnw-get-crew-section::before {
    width: 100%;
    height: 100%;
    content: '';
    position: absolute;
    bottom: -1px;
    left: 0;
    background: linear-gradient(to top, rgba(0, 0, 0, 1) 10%, rgba(0, 0, 0, 0.4) 20%, rgba(0, 0, 0, 0) 50%);
    z-index: 1;
  }

  .nnw-get-crew-section::after {
    width: 100%;
    height: 70%;
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    background: linear-gradient(180deg, #0d0215 0%, rgba(7, 1, 19, 0) 50%);
    z-index: 1;
  }

  /*.nnw-btm-cta-overlay {
    position: absolute;
    inset: 0;
    z-index: 1;
    pointer-events: none;
    transform: translateZ(0);
    will-change: opacity;
    background: linear-gradient(to bottom, #0d0215 0%, rgba(7, 1, 19, 0) 50%), linear-gradient(to top, #000000 0%, rgba(7, 1, 19, 0) 50%);
}*/

  .getstart-btn {
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.5) 1%, rgba(0, 0, 0, 0.5) 101%), #be369d;
    background-blend-mode: overlay, normal;
  }

  .getstart-btn:hover {
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.5) 1%, rgba(0, 0, 0, 0.7) 101%), #be369d;
  }

  .pink-btn:hover {
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.5) 1%, rgba(0, 0, 0, 0.7) 101%), #be369d;
  }

  .transparent-button:hover img {
    transform: translateX(4px);
    transition: all 0.5s ease;
  }
  a.transparent-button.np-lightbox-close img{
    transform:none !important;
    transition: none !importsnt;
  }

  .special-heading-span {
    background: var(--1, linear-gradient(90deg, #fff 0%, #ea2dd2 71.63%, #ffa1f3 87.98%));
    background-clip: text;
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
  }

  .npr-product-head-span {
    background: linear-gradient(90deg, #fff 0%, #ea2dd2 71.63%, #ffa1f3 87.98%);
    background-clip: text;
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
  }

  .mayli-speech-dialog {
    background: linear-gradient(180deg, rgba(161, 44, 137, 0) 0%, rgba(161, 44, 137, 0.2) 100%), rgba(190, 54, 157, 0.4);
    box-shadow:
      0 12.01px 17.47px -8.735px rgba(123, 36, 105, 0.26),
      0 4.367px 21.837px 0 rgba(161, 44, 137, 0.4) inset;
  }

  .npr-learn-btn::before {
    content: '';
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    right: 0;
    background: url(https://cdn.prod.website-files.com/686e1da81a9a9b6c64c7a164/69b0e5776239e47c140a0520_btn-border.png) no-repeat right center;
    background-size: contain;
  }

  /* .napster-products-slide .slick-list {
    padding: 0 5% 0 0;
  }*/
  /*.npr-prducts-nav-list-item.active::before{
   content: '';
   width: 30px;
   height: 4px;
   background: #EA2DD2;
   position: absolute;
   left: 0;
   bottom: -4px;
   border-radius: 4px;
}*/

  .npr-prducts-nav-list-item::before {
    content: '';
    width: 0px;
    height: 2px;
    background: #ea2dd2;
    position: absolute;
    bottom: -4px;
    left: 0;
  }

  .npr-prducts-nav-list-item.active::before {
    animation: progressBar 12s linear forwards;
    animation-play-state: running;
  }

  .npr-prducts-nav-list-item.active.paused::before {
    animation-play-state: paused;
  }

  @keyframes progressBar {
    from {
      width: 0%;
    }
    to {
      width: 100%;
    }
  }

  .npr-products-nav-btn.disabled {
    background: rgba(255, 255, 255, 0.1);
    pointer-events: none;
  }

  .npr-products-nav-btn.disabled .npr-products-nav-img {
    filter: invert(0);
  }

  .napster-products-slide .slick-slide {
    transition: all 0.4s ease;
  }

  
  @media screen and (min-width: 479px) {
    .napster-products-slide .slick-slide {
      opacity: 0.25;
      transition: all 0.4s ease;
    }

    .napster-products-slide .slick-active {
      opacity: 0.6;
    }
  }

  .napster-products-slide .slick-center {
    opacity: 1;
  }

  .create-digital-twin-btn {
    background:
      linear-gradient(#4e1640, #4e1640) padding-box,
      linear-gradient(90deg, rgba(234, 45, 210, 0), rgba(234, 45, 210, 1)) border-box;
  }

  .digital-twin-head-span {
    background: linear-gradient(90deg, #fff 0%, #ea2dd2 71.63%, #ffa1f3 87.98%);
    background-clip: text;
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
  }

  .trustby-span-text {
    background: linear-gradient(90deg, #fff 0%, #ea2dd2 71.63%, #ffa1f3 87.98%);
    background-clip: text;
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
  }

  .nnw-footer-cta-tag-grd {
    background: linear-gradient(90deg, #fff 0%, #ea2dd2 71.63%, #ffa1f3 87.98%);
    background-clip: text;
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
  }

  .nnw-download-app-btn {
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.5) 1%, rgba(0, 0, 0, 0.5) 101%), #be369d;
    background-blend-mode: overlay, normal;
    box-shadow: 1px 2px 10px 0 rgba(0, 0, 0, 0.25);
  }

  .nnw-subscribe-btn {
    box-shadow: 1px 2px 10px 0 rgba(0, 0, 0, 0.25);
  }

  .footer-right-img {
    fill: linear-gradient(180deg, #2e0833 5.29%, #000 100%);
    opacity: 0.8;
    box-shadow: 0 3.213px 3.213px 0 rgba(255, 255, 255, 0.02) inset;
  }

  .nnw-getstart-btn {
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.5) 1%, rgba(0, 0, 0, 0.5) 101%), #be369d;
    background-blend-mode: overlay, normal;
    box-shadow: 1px 2px 10px 0 rgba(0, 0, 0, 0.25);
  }

  .digital-twin-tagline {
    background: linear-gradient(91deg, #dd52cb 0.01%, #601656 99.79%);
    background-clip: text;
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
  }

  @media (min-width: 1280px) {
    .napster-products-info {
      left: calc((100% - 90%) / 2);
    }
  }

  @media (min-width: 1920px) {
    .napster-products-info {
      left: calc((100% - 72%) / 2);
    }
  }

  @media (min-width: 2200px) {
    .napster-special-vdo-avatar {
      max-width: 818px;
    }
    .napster-products-info {
      left: calc((100% - 81%) / 2);
    }
  }

  @media screen and (device-width: 1024px) and (device-height: 1366px) and (orientation: portrait) {
  }

  @media (min-width: 480px) {
    .slick-slide img.napster-products-sm-img {
      display: none;
    }
  }

  @media (max-width: 1100px) {
    .napster-products-nav {
      max-width: 980px;
    }
    .npr-prducts-nav-list {
      grid-column-gap: 10px;
      grid-row-gap: 10px;
    }
  }

  @media (max-width: 480px) {
    .napster-banner-video::before {
      background: linear-gradient(to top, rgba(0, 0, 0, 1) 10%, rgba(0, 0, 0, 1) 30%, rgba(0, 0, 0, 0) 50%);
    }

    .slick-slide img.napster-products-img {
      display: none;
    }

    .napster-hero-video video {
      object-position: right;
    }

    .napster-banner-video::after {
      width: 100%;
      height: 100%;
      content: '';
      position: absolute;
      top: 0px;
      left: 0;
      background: linear-gradient(to bottom, rgba(0, 0, 0, 1) 10%, rgba(0, 0, 0, 1) 22%, rgba(0, 0, 0, 0) 50%);
      z-index: 1;
      display: none;
    }
  }

  @media (max-height: 480px) and (orientation: landscape) {
      .spaces-banner-section.is-home{
        height: 120vh;  
    }
    .napster-banner-section {
      height: 100%;
    }

    .napster-banner-bottom {
      margin-top: 32px;
    }
}

.overflow-hidden{
	overflow: hidden
}
</style></head><!--/$--><body class="home"><div class="napster-header"><div class="napster-header-container"><div data-animation="default" data-collapse="medium" data-duration="400" data-easing="ease" data-easing2="ease" role="banner" class="napster-navbar w-nav"><div class="napster-nav-container w-container"><div class="napster-nav-wrapper"><div class="napster-nav-lt"><a href="/" aria-current="page" class="napster-logo w-nav-brand w--current"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b2676cfaca4a559c6d5fcc_napster-logo.svg" alt="Napster logo"/></a><nav role="navigation" class="napster-nav-menu w-nav-menu"><div data-delay="0" data-hover="true" class="napster-nav-menu-links w-dropdown"><div class="dropdowntoggle w-dropdown-toggle"><div class="napster-dropdown-txt">Products</div><div class="napster-nav-arrow"></div></div><nav class="napster-dropdown-list w-dropdown-list"><a href="/consumer" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">Napster App</div></div></a><a href="/napster-for-mac" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">Napster for Mac</div></div></a><a href="/view" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">Napster View</div></div></a><a href="/station" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">Napster Station</div></div></a><a href="/learn-for-enterprise" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">Napster Learn: Enterprise</div></div></a><a href="/learn-for-higher-education" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">Napster Learn: Higher Ed</div></div></a><a href="/spaces" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">Napster Spaces</div></div></a></nav></div><div data-delay="0" data-hover="true" class="napster-nav-menu-links w-dropdown"><div class="dropdowntoggle w-dropdown-toggle"><div class="napster-dropdown-txt">Solutions</div><div class="napster-nav-arrow"></div></div><nav class="napster-dropdown-list w-dropdown-list"><a href="/enterprise" data-target="automotive" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">For Enterprise</div></div></a><a href="/developer" data-target="ecommerce" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">For Developers</div></div></a><a href="/partners" data-target="ecommerce" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">For Partners</div></div></a><a href="/case-studies" data-target="ecommerce" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">Case Studies</div></div></a></nav></div><div data-delay="0" data-hover="true" class="napster-nav-menu-links w-dropdown"><div class="dropdowntoggle w-dropdown-toggle"><div class="napster-dropdown-txt">For Developers</div><div class="napster-nav-arrow"></div></div><nav class="napster-dropdown-list w-dropdown-list"><a href="/developer" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">Napster  API</div></div></a><a href="https://developers.napster.com/docs" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">Documentation</div></div></a><a href="/hackathon-finalists" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">Hackathons</div></div></a><a href="#" class="napster-dropdown-block hidden w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">API status</div></div></a></nav></div></nav></div><div class="napster-nav-rt"><div data-delay="0" data-hover="true" class="napster-nav-menu-links w-dropdown"><div class="dropdowntoggle w-dropdown-toggle"><div class="napster-dropdown-txt">COMPANY</div><div class="napster-nav-arrow"></div></div><nav class="napster-dropdown-list w-dropdown-list"><a href="/about" data-target="fsi" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">About</div></div></a><a href="/news" data-target="automotive" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">Newsroom</div></div></a><a href="/security" data-target="ecommerce" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">Security</div></div></a><a href="/careers" data-target="ecommerce" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">Careers</div></div></a><a href="/blog" data-target="ecommerce" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">Blog</div></div></a><a href="#" data-target="ecommerce" class="napster-dropdown-block hidden w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">Investor Relations</div></div></a><a href="/contact" data-target="ecommerce" class="napster-dropdown-block w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">Contact Us</div></div></a><a href="/ethics" data-target="ecommerce" class="napster-dropdown-block hidden w-inline-block"><div class="napster-dropdown-nav-block"><div class="napster-dropdown-links">AI Principles</div></div></a></nav></div><a href="https://help.napster.com/hc/en-us" class="napster-nav-links w-inline-block"><div class="napster-nav-txt">Support</div></a></div></div><div class="w-nav-button"><div class="w-icon-nav-menu"></div></div></div></div></div></div><div class="napster-mobile-nav"><div id="tch-mob-header-id" class="napster-sm-header"><div class="napster-sm-header-logo"><a href="/" aria-current="page" class="napster-sm-logo w-inline-block w--current"><img fetchpriority="high" loading="lazy" alt="" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b2676cfaca4a559c6d5fcc_napster-logo.svg"/></a></div><div class="napster-sm-hamberger"><img src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69dc9bb7fffa6e774d60cc2f_hamburger.avif" loading="lazy" alt=""/></div></div><div class="napster-sm-menu"><div class="napster-sm-header2"><a href="/drafts/old-home" class="w-inline-block"><div class="napster-sm-logo"><img fetchpriority="high" loading="lazy" alt="" src="https://cdn.prod.website-files.com/686e1da81a9a9b6c64c7a164/69ae79b43abc115ce1220222_napster-logo.svg"/></div></a><div class="napster-sm-close"><img src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69dc9bb72920c590a6eea3bf_9e0aa69d72a3598cd6d08bc33d48e736_close.avif" loading="lazy" alt=""/></div></div><div class="napster-sm-menu-wrapper"><div data-delay="0" data-hover="false" class="napster-sm-menu-links w-dropdown"><div class="dropdowntoggle-sm sm-drop-toggle w-dropdown-toggle"><div class="drop-sm-txt-block sm-drop-txt">Products</div><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b2676cfaca4a559c6d5fcd_chev-down-small.svg" alt="" class="drop-sm-arrrows"/></div><nav class="napster-sm-dropdown-list sm-dropdown-list w-dropdown-list"><a href="/consumer" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">Napster App</div></div></a><a href="/napster-for-mac" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">Napster for Mac</div></div></a><a href="/view" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">Napster View</div></div></a><a href="/station" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">Napster Station</div></div></a><a href="/learn-for-enterprise" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">Napster Learn: Enterprise</div></div></a><a href="/learn-for-higher-education" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">Napster Learn: Higher Ed</div></div></a><a href="/spaces" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">Napster Spaces</div></div></a></nav></div><div data-delay="0" data-hover="false" class="napster-sm-menu-links w-dropdown"><div class="dropdowntoggle-sm sm-drop-toggle w-dropdown-toggle"><div class="drop-sm-txt-block sm-drop-txt">Solutions</div><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b2676cfaca4a559c6d5fcd_chev-down-small.svg" alt="" class="drop-sm-arrrows"/></div><nav class="napster-sm-dropdown-list sm-dropdown-list w-dropdown-list"><a href="/developer" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">For Developers</div></div></a><a href="/enterprise" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">For Enterprise</div></div></a><a href="/partners" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">For Partners</div></div></a><a href="/case-studies" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">Case Studies</div></div></a></nav></div><div data-delay="0" data-hover="false" class="napster-sm-menu-links w-dropdown"><div class="dropdowntoggle-sm sm-drop-toggle w-dropdown-toggle"><div class="drop-sm-txt-block sm-drop-txt">For Developers</div><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b2676cfaca4a559c6d5fcd_chev-down-small.svg" alt="" class="drop-sm-arrrows"/></div><nav class="napster-sm-dropdown-list sm-dropdown-list w-dropdown-list"><a href="/developer" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">Napster API</div></div></a><a href="https://developers.napster.com/docs" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">Documentation</div></div></a><a href="/hackathon-finalists" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">Hackathons</div></div></a><a href="#" class="napster-sm-dropdown-block hidden w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">API status</div></div></a></nav></div><div data-delay="0" data-hover="false" class="napster-sm-menu-links w-dropdown"><div class="dropdowntoggle-sm sm-drop-toggle w-dropdown-toggle"><div class="drop-sm-txt-block sm-drop-txt">Company</div><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b2676cfaca4a559c6d5fcd_chev-down-small.svg" alt="" class="drop-sm-arrrows"/></div><nav class="napster-sm-dropdown-list sm-dropdown-list w-dropdown-list"><a href="/about" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">About</div></div></a><a href="/news" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">Newsroom</div></div></a><a href="/security" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">Security</div></div></a><a href="/careers" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">Careers</div></div></a><a href="/blog" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">Blog</div></div></a><a href="#" class="napster-sm-dropdown-block hidden w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">Investor Relations</div></div></a><a href="/contact" class="napster-sm-dropdown-block w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">Contact Us</div></div></a><a href="/ethics" class="napster-sm-dropdown-block hidden w-inline-block"><div class="napster-sm-drop-nav-block"><div class="napster-sm-dropdown-links">AI Principles</div></div></a></nav></div><a href="https://help.napster.com/hc/en-us" class="napster-sm-nav-links w-inline-block"><div class="napster-sm-nav-tx">Support</div></a></div></div></div><div id="main-content"><section class="spaces-banner-section is-hone"><div class="banner-overlay"><div class="banner-top-overlay"></div><div class="banner-bottom-overlay"></div><div class="banner-overlay-blur"></div></div><div class="napster-banner-video"><div class="napster-video-overlay-frame"><div class="napster-video-holder"><div class="w-embed"><style>
  .napster-hero-video-bg {
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
    object-fit: cover;
  }
  @media (max-width: 480px) {
    .napster-hero-video-bg {
      object-fit: contain;
    }
  }
</style>
<video class="napster-hero-video-bg" preload="metadata" autoplay loop muted playsinline webkit-playsinline poster="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69afcd061331a30366d33fc7_bg-hero1.avif">
  <source src="https://demoassets.touchcast.com/webflow-assets/videos/Hero-Header-new.webm" data-wf-ignore="true" type="video/webm" />
  <source src="https://demoassets.touchcast.com/webflow-assets/videos/Hero-Header-new_2.mp4" data-wf-ignore="true"  type="video/mp4"/>
</video></div></div></div></div><div class="napster-banner-top"><div class="napster-banner-crew"><h4 class="crew-heading">MEET YOUR CREW</h4></div><div class="napster-banner-main-content"><h1 class="hero-h1-heading">AI agents you can see, talk to, and create with.</h1></div><div class="napster-banner-button is-home"><a href="/consumer" class="pink-button">Get Started Now</a><a id="watch-film" data-video="https://demoassets.touchcast.com/webflow-assets/videos/napster-intro-new_1.mp4" data-lightbox-button="" href="#" class="transparent-button is-home w-inline-block"><div>Watch the Film</div></a></div></div><div class="trusted-logo-scroll_indent-wrap"><section data-reveal="" class="napster-trusted-section"><div class="trusted-overlay"></div><div class="w-layout-blockcontainer napster-trusted w-container"><div class="napster-trusted-content"><div class="trusted-heading">Trusted by</div><div id="clientContainer" class="napster-trusted-logos"><div id="clientScroll" class="napster-trusted-scroll-1"><div class="napster-trusted-img-1"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ccd5e84b95bf2943b191d2_trust1.svg" alt="Accenture logo" class="npr-trusted-logo-1"/></div><div class="napster-trusted-img-1"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ccd5e8ded73c5482821024_trust2.svg" alt="" class="npr-trusted-logo-1"/></div><div class="napster-trusted-img-1"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ccd5ebf37f6b61ccf52fa8_trust13.svg" alt="Warner bros logo" class="npr-trusted-logo-1"/></div><div class="napster-trusted-img-1"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ccd5ecb2718f98f98aec0f_trust14.svg" alt="UAE mof logo" class="npr-trusted-logo-1"/></div><div class="napster-trusted-img-1"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ccd5e843f54f08871a87ca_trust5.svg" alt="Dick&#x27;s sporting goods logo" class="npr-trusted-logo-1"/></div><div class="napster-trusted-img-1"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ccd5e8d3aa999284de5ffb_trust6.svg" alt="DMCC logo" class="npr-trusted-logo-1"/></div><div class="napster-trusted-img-1"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ccd5e8ec78e37bebbe14d0_trust7.svg" alt="Imperial logo" class="npr-trusted-logo-1"/></div><div class="napster-trusted-img-1"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ccd5e8f9b72c085fc43894_trust8.svg" alt="Fenerbache logo" class="npr-trusted-logo-1"/></div><div class="napster-trusted-img-1"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ccd5eb5f856d67bd80c84c_trust9.svg" alt="Leading results logo" class="npr-trusted-logo-1"/></div><div class="napster-trusted-img-1"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ccd5ea660eeb68bb93ae8d_trust10.svg" alt="Microsoft logo" class="npr-trusted-logo-1"/></div><div class="napster-trusted-img-1"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ccd5eb4ed27f57fae4ffd0_trust11.svg" alt="PIF logo" class="npr-trusted-logo-1"/></div><div class="napster-trusted-img-1"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ccd5eba36acb92eeb7e631_trust12.svg" alt="" class="npr-trusted-logo-1"/></div><div class="napster-trusted-img-1"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69e5e584a521d142dbe6e6f8_Lenovo-new.svg" alt="Lenovo logo" class="npr-trusted-logo-1"/></div></div></div></div></div></section></div></section><section class="napster-special-section"><div class="napster-special-container"><div class="napster-special-lt"><div class="napster-special-lt-inner"><div class="napster-special-content"><h3 class="expertise-heading">Expertise on demand.</h3><h2 class="special-heading">A specialist <!--$--><br/><!--/$--><span class="special-heading-span">for every moment.</span></h2><p class="special-desc">Say goodbye to AI chatbots and hello to a collaborator with video presence and memory.</p></div><div class="napster-special-list"><div class="special-list-item"><div class="special-list-content"><p class="special-list-desc">Persistent memory that makes every conversation better over time.</p></div></div><div class="special-list-item"><div class="special-list-content"><p class="special-list-desc">The right expert right when you need them.</p></div></div><div class="special-list-item"><div class="special-list-content"><p class="special-list-desc">Turn conversations into drafts, plans, decisions, and outputs you can share, ship, or send.</p></div></div></div></div></div><div class="napster-special-rt"><div class="napster-special-video-wrap"><div class="w-embed"><style>
  .napster-special-video {
    width: 100%;
    height: 100%;
    position: absolute;
    top: 50%;
    right: 0;
    transform: translate(-50%, -50%);
    aspect-ratio: 1 / 1;
    border-radius: 24px;
    object-fit: cover;
  }
  @media (max-width: 480px) {
    .napster-special-video {
      right: inherit;
      left: 50%;
      max-width: 380px;
      border-radius: 12px;
    }
  }
</style>
<video class="napster-special-video" preload="metadata" autoplay loop muted playsinline webkit-playsinline>
  <source src="https://demoassets.touchcast.com/webflow-assets/videos/2nd%20Section_1_new.webm" data-wf-ignore="true" type="video/webm" />
<source src="https://demoassets.touchcast.com/webflow-assets/videos/2nd%20Section_1_new_2.mp4" data-wf-ignore="true"  type="video/mp4"/>
</video></div></div><div class="napster-special-vdo-avatar"><img src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69e7265ee1a53a477366be85_mayli-creative-ring.avif" loading="lazy" alt="Mayli, an AI music producer in the Napster App"/></div></div></div></section><section class="napster-products-section"><div class="napster-products-container"><div class="napster-products-title"><h3 class="platform-heading">Products</h3><h2 class="npr-products-heading">One platform.<!--$--><br/><!--/$--><span class="npr-product-head-span">Many doors.</span></h2><div class="npr-products-desc">For you, for teams, for developers. Same mission. Same system.</div></div><div class="napster-products-wrapper"><div class="napster-products-wrapper-in"><div class="napster-products-slide"><div class="napster-products-item"><div class="napster-products-bg"><img sizes="(max-width: 2183px) 100vw, 2183px" srcset="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3c937afa684be9500eb52_napster-app-slide-new-p-500.avif 500w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3c937afa684be9500eb52_napster-app-slide-new-p-800.avif 800w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3c937afa684be9500eb52_napster-app-slide-new-p-1080.avif 1080w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3c937afa684be9500eb52_napster-app-slide-new.avif 2183w" alt="napster-app-slide" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3c937afa684be9500eb52_napster-app-slide-new.avif" loading="lazy" class="napster-products-img"/><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3c9e339d6a111aba9f34c_30aed3e32c06c22b7cf3c11060743843_napster-app-slide-new-sm.avif" alt="Napster App" class="napster-products-sm-img"/></div><div class="napster-products-info"><h3 class="npr-products-caption">NAPSTER APP</h3><h2 class="npr-products-title">Meet <!--$--><br/><!--/$-->the Napster App.</h2><p class="npr-products-descs">Your own music production crew. Thousands of specialists. All with video, memory, and real personality. Write a song in minutes.</p><a href="/consumer" class="npr-learn-btn">Learn More</a></div></div><div class="napster-products-item"><div class="napster-products-bg"><img sizes="(max-width: 2183px) 100vw, 2183px" srcset="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b80d77c562423d5511cc5f_napster-mac-slide-p-500.avif 500w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b80d77c562423d5511cc5f_napster-mac-slide-p-800.avif 800w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b80d77c562423d5511cc5f_napster-mac-slide-p-1080.avif 1080w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b80d77c562423d5511cc5f_napster-mac-slide.avif 2183w" alt="napster-mac-slide" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b80d77c562423d5511cc5f_napster-mac-slide.avif" loading="lazy" class="napster-products-img"/><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69dc91557f588cc446e0e359_napster-mac-slide-sm.avif" alt="Napster for mac" class="napster-products-sm-img"/></div><div class="napster-products-info"><h3 class="npr-products-caption">NAPSTER FOR MAC</h3><h2 class="npr-products-title">Meet <!--$--><br/><!--/$-->Napster for Mac.</h2><p class="npr-products-descs">Thousands of specialists who stop procrastination, fix bugs, prep interviews, build prototypes, decode taxes, and make you unstoppable, straight from your Mac.</p><a href="/napster-for-mac" class="npr-learn-btn">Learn More</a></div></div><div class="napster-products-item"><div class="napster-products-bg"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69d6130f6399f432c2270a3f_bg-image%20(3).avif" alt="napster-spaces-slide" class="napster-products-img"/><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69dc918098835137ee1d7cbf_napster-space-slide-new-sm.avif" alt="Napster spaces" class="napster-products-sm-img"/></div><div class="napster-products-info"><h3 class="npr-products-caption">NAPSTER Spaces</h3><h2 class="npr-products-title">Meet <!--$--><br/><!--/$-->Napster Spaces.</h2><p class="npr-products-descs">Napster Spaces adds an AI specialist to your website that knows your business, responds in real time, and moves visitors to take action.</p><a href="/spaces" class="npr-learn-btn">Learn More</a></div></div><div class="napster-products-item"><div class="napster-products-bg"><img sizes="(max-width: 2183px) 100vw, 2183px" srcset="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3d5e2cbbfeb5e81e54b4d_napster-learn-slide-new-p-500.avif 500w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3d5e2cbbfeb5e81e54b4d_napster-learn-slide-new-p-800.avif 800w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3d5e2cbbfeb5e81e54b4d_napster-learn-slide-new-p-1080.avif 1080w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3d5e2cbbfeb5e81e54b4d_napster-learn-slide-new.avif 2183w" alt="napster-learn-slide" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3d5e2cbbfeb5e81e54b4d_napster-learn-slide-new.avif" loading="lazy" class="napster-products-img"/><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69dc919ee70fd49638bddeae_napster-learn-slide-new-sm.avif" alt="Napster Learn" class="napster-products-sm-img"/></div><div class="napster-products-info"><h3 class="npr-products-caption">NAPSTER Learn</h3><h2 class="npr-products-title">Meet <!--$--><br/><!--/$-->Napster Learn.</h2><p class="npr-products-descs">Napster Learn turns expertise into AI agents that train, coach, and assess your progress.</p><a href="/learn-for-enterprise" class="npr-learn-btn">Learn More</a></div></div><div class="napster-products-item"><div class="napster-products-bg"><img sizes="(max-width: 2183px) 100vw, 2183px" srcset="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3c938fedfd9a6203f4aa8_napster-view-slide-new-p-500.avif 500w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3c938fedfd9a6203f4aa8_napster-view-slide-new-p-800.avif 800w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3c938fedfd9a6203f4aa8_napster-view-slide-new-p-1080.avif 1080w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3c938fedfd9a6203f4aa8_napster-view-slide-new.avif 2183w" alt="napster-view-slide" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3c938fedfd9a6203f4aa8_napster-view-slide-new.avif" loading="lazy" class="napster-products-img"/><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69dc91b998835137ee1d82e5_napster-view-slide-new-sm.avif" alt="Napster View" class="napster-products-sm-img"/></div><div class="napster-products-info"><h3 class="npr-products-caption">NAPSTER View</h3><h2 class="npr-products-title">Meet <!--$--><br/><!--/$-->Napster View.</h2><p class="npr-products-descs">A 3D holographic display for your AI.</p><a href="/view" class="npr-learn-btn">Learn More</a></div></div><div class="napster-products-item"><div class="napster-products-bg"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/6a1d239eb3db01579666e3a7_napster-station-slide.avif" alt="napster-station-slide" class="napster-products-img"/><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69dc91d54e9497d73a3ff2d4_napster-station-slide-sm.avif" alt="Napster Station" class="napster-products-sm-img"/></div><div class="napster-products-info"><h3 class="npr-products-caption">NAPSTER STATION</h3><h2 class="npr-products-title">Meet <!--$--><br/><!--/$-->Napster Station.</h2><p class="npr-products-descs">The first AI concierge built for noisy, chaotic, real-world spaces. It sees you. It hears you. It handles everything.</p><a href="/station" class="npr-learn-btn">Learn More</a></div></div><div class="napster-products-item"><div class="napster-products-bg"><img sizes="(max-width: 2183px) 100vw, 2183px" srcset="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3c93897d124f0b2fedda6_napster-companion-slide-new-p-500.avif 500w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3c93897d124f0b2fedda6_napster-companion-slide-new-p-800.avif 800w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3c93897d124f0b2fedda6_napster-companion-slide-new-p-1080.avif 1080w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3c93897d124f0b2fedda6_napster-companion-slide-new.avif 2183w" alt="omniagent-api-slide" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69c3c93897d124f0b2fedda6_napster-companion-slide-new.avif" loading="lazy" class="napster-products-img"/><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69dc91f27f588cc446e0fc93_napster-companion-slide-sm.avif" alt="" class="napster-products-sm-img"/></div><div class="napster-products-info"><h3 class="npr-products-caption">Napster API</h3><h2 class="npr-products-title">Meet <!--$--><br/><!--/$-->Napster API.</h2><p class="npr-products-descs">Deploy AI agents with lifelike video presence, real-time voice, and persistent memory - from only $0.01/minute.</p><a href="/developer" class="npr-learn-btn">Learn More</a></div></div></div><div class="napster-products-nav"><div class="napster-products-nav-content"><div class="npr-products-nav-btn disabled"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69aecb352f6cac3b2a827eab_arrow-right.svg" alt="" class="npr-products-nav-img"/></div><div class="napr-prodcuts-nav-links"><ul role="list" class="npr-prducts-nav-list"><li class="npr-prducts-nav-list-item active"><div>Napster App</div></li><li class="npr-prducts-nav-list-item"><div>Napster For Mac</div></li><li class="npr-prducts-nav-list-item"><div>Napster Spaces</div></li><li class="npr-prducts-nav-list-item"><div>Napster Learn</div></li><li class="npr-prducts-nav-list-item"><div>Napster View</div></li><li class="npr-prducts-nav-list-item"><div>Napster Station</div></li><li class="npr-prducts-nav-list-item"><div>Napster API</div></li></ul></div><div class="npr-products-nav-btn"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69aecb352f6cac3b2a827eab_arrow-right.svg" alt="" class="npr-products-nav-img right"/></div></div></div></div></div></div></section><div class="napster-digital"><div class="npr-wrapper"><div class="npren-container"><div class="big-gap"></div><div class="container-regular"><div class="napster-digital-content"><div class="napster-digital-content-lt"><div class="napster-digital-contents"><div class="label-gradient">Your Digital Twin</div><h2 class="h3 is-white line-h-100">Be in two<span class="text-gradient-white-pink-white is-block"> places at once.</span></h2></div><a id="downloadApp" href="/napster-for-mac" target="_blank" class="create-digital-twin-btn w-button">Get Napster for Mac</a></div><div class="napster-digital-content-rt"><div class="napster-digital-content-desc">Turn your expertise into something people can access anytime.</div><div class="napster-digital-content-desc1">Stay focused on what you do best. Your twin handles the rest.</div><ul role="list" class="digital-list"><li class="digital-list-item"><div>Your twin takes the meeting you couldn&#x27;t make.</div></li><li class="digital-list-item"><div>Answers the questions you&#x27;ve answered a hundred times.</div></li><li class="digital-list-item"><div>Knows your voice, your priorities, your limits.</div></li></ul></div></div></div><div class="small-gap"></div><div class="digital-video-holder"><div class="w-embed"><style>
  .digital-video {
    width: 100%;
    height: 100%;
    object-fit: cover;
    border-radius: 16px;
  }
  @media (max-width: 480px) {
    .digital-video{
      border-radius: 9px;
    }
  }
</style>
<video class="digital-video" preload="metadata" autoplay loop muted playsinline webkit-playsinline>
  <source src="https://demoassets.touchcast.com/webflow-assets/videos/Digital-Twin_1_new.webm" data-wf-ignore="true" type="video/webm" />
<source src="https://demoassets.touchcast.com/webflow-assets/videos/Digital-Twin_1_new_2.mp4" data-wf-ignore="true"  type="video/mp4"/>
</video></div></div></div></div></div><section class="nnw-trustby-section grd"><div class="big-gap"></div><div class="trustby-heading-wraper"><h2 class="trustby-heading">Trusted by teams <span class="trustby-span-text">building what&#x27;s next.</span></h2></div><div class="nnw-trustby-image-div"><img src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ccff4e3d2f20bbbe9b77e7_home-trust-new.avif" loading="lazy" sizes="100vw" srcset="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ccff4e3d2f20bbbe9b77e7_home-trust-new-p-500.png 500w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ccff4e3d2f20bbbe9b77e7_home-trust-new-p-800.png 800w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ccff4e3d2f20bbbe9b77e7_home-trust-new-p-1080.png 1080w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69ccff4e3d2f20bbbe9b77e7_home-trust-new.avif 2560w" alt="trusted-brands-logo" class="trustby-img"/><img src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69cd0025672b1cc07b1381b6_home-trust-new-mobile.avif" loading="lazy" alt="" class="image-13"/></div></section><div class="nnw-latest-news-section"><div class="section_press-release"><div class="padding-global"><div class="container-regular"><div class="latest-new-head-wrap"><div class="latest-news-tag-line">Latest News</div><h2 class="latest-news-heading">Stories worth <span class="trustby-span-text">covering.</span></h2></div><div class="tiny-gap mobile-bottom"><div class="div-block-209"><a href="/news-type/press-release" class="pink-button v2 w-inline-block"><div class="flex-row gap-12"><div class="label-text">More Releases</div><div class="background-dark-pink"></div><!--$--><svg width="12" height="13" viewbox="0 0 13 12" class="svg-next margin-0"><!--$--><path d="M0.21967 4.99262C-0.0732231 5.28551 -0.0732232 5.76038 0.21967 6.05328L4.99264 10.8262C5.28553 11.1191 5.76041 11.1191 6.0533 10.8262C6.34619 10.5334 6.34619 10.0585 6.0533 9.76559L1.81066 5.52295L6.0533 1.28031C6.3462 0.987414 6.3462 0.512541 6.0533 0.219647C5.76041 -0.0732463 5.28554 -0.0732464 4.99264 0.219647L0.21967 4.99262ZM12.75 5.52295L12.75 4.77295L0.750001 4.77295L0.750001 5.52295L0.750001 6.27295L12.75 6.27295L12.75 5.52295Z" fill="currentColor"></path><!--/$--></svg><!--/$--></div></a><div class="w-embed"><style>
.pink-button.v2 {
  border: 1px solid transparent;
  border-radius: 8px;
  background:
    linear-gradient(#000, #000) padding-box,
    linear-gradient(90deg, rgba(234,45,210,0) 0%, #EA2DD2 100%) border-box;
}

</style></div></div></div><div class="press-release"><div class="posts-three-col w-dyn-list"><div role="list" class="posts-three-col_list w-dyn-items"><div role="listitem" class="posts-three-col_item w-dyn-item"><div class="post-item-link h-100"><div class="post-item-link_img-wrap aspect-ratio-10-8"><img src="https://cdn.prod.website-files.com/69afddf56ce54da131973b12/6a26c164c89e3bd7e055e915_NV2-Blog.png" loading="lazy" alt="" sizes="100vw" srcset="https://cdn.prod.website-files.com/69afddf56ce54da131973b12/6a26c164c89e3bd7e055e915_NV2-Blog-p-500.png 500w, https://cdn.prod.website-files.com/69afddf56ce54da131973b12/6a26c164c89e3bd7e055e915_NV2-Blog-p-800.png 800w, https://cdn.prod.website-files.com/69afddf56ce54da131973b12/6a26c164c89e3bd7e055e915_NV2-Blog-p-1080.png 1080w, https://cdn.prod.website-files.com/69afddf56ce54da131973b12/6a26c164c89e3bd7e055e915_NV2-Blog-p-1600.png 1600w, https://cdn.prod.website-files.com/69afddf56ce54da131973b12/6a26c164c89e3bd7e055e915_NV2-Blog.png 2000w" class="post-item-link_img cover-full"/></div><div class="block-gap-16 indent-8"><div class="flex-row gap-8"><div class="label-gradient is-white-50">June 8, 2026</div><div class="dot-devider"></div><div class="label-gradient is-white-50">5 min read</div></div><h3 class="h6 medium">Napster Launches NV2: A Real-Time Conversational Video Model That Democratizes Access To Multimodal Agents</h3></div><a href="/news/napster-launches-nv2-realtime-conversational-ai-video-that-costs-just-one-cent-per-minute" class="post-item-link_link w-inline-block"></a><div class="categories-div align-right"><div class="cagegories-div_wrap flex-left"><a href="/news-type/press-release" class="category-link w-inline-block"><div class="category-item-small">Press Release</div></a></div></div></div></div><div role="listitem" class="posts-three-col_item w-dyn-item"><div class="post-item-link h-100"><div class="post-item-link_img-wrap aspect-ratio-10-8"><img src="https://cdn.prod.website-files.com/69afddf56ce54da131973b12/6a1f366f309b305e9f32e059_jack.png" loading="lazy" alt="" sizes="100vw" srcset="https://cdn.prod.website-files.com/69afddf56ce54da131973b12/6a1f366f309b305e9f32e059_jack-p-500.png 500w, https://cdn.prod.website-files.com/69afddf56ce54da131973b12/6a1f366f309b305e9f32e059_jack-p-800.png 800w, https://cdn.prod.website-files.com/69afddf56ce54da131973b12/6a1f366f309b305e9f32e059_jack-p-1080.png 1080w, https://cdn.prod.website-files.com/69afddf56ce54da131973b12/6a1f366f309b305e9f32e059_jack-p-1600.png 1600w, https://cdn.prod.website-files.com/69afddf56ce54da131973b12/6a1f366f309b305e9f32e059_jack.png 1624w" class="post-item-link_img cover-full"/></div><div class="block-gap-16 indent-8"><div class="flex-row gap-8"><div class="label-gradient is-white-50">June 2, 2026</div><div class="dot-devider"></div><div class="label-gradient is-white-50">5 min read</div></div><h3 class="h6 medium">Napster Partners with Spa Grand Prix to Launch  AI Concierge for Formula 1 Fans</h3></div><a href="/news/napster-partners-with-spa-grand-prix-to-launch-ai-concierge-for-formula-1-fans" class="post-item-link_link w-inline-block"></a><div class="categories-div align-right"><div class="cagegories-div_wrap flex-left"><a href="/news-type/press-release" class="category-link w-inline-block"><div class="category-item-small">Press Release</div></a></div></div></div></div><div role="listitem" class="posts-three-col_item w-dyn-item"><div class="post-item-link h-100"><div class="post-item-link_img-wrap aspect-ratio-10-8"><img src="https://cdn.prod.website-files.com/69afddf56ce54da131973b12/6a15f05ebf65c5ebe1a42654_Thunder-Logo_WHT-Vertical.png" loading="lazy" alt="" sizes="100vw" srcset="https://cdn.prod.website-files.com/69afddf56ce54da131973b12/6a15f05ebf65c5ebe1a42654_Thunder-Logo_WHT-Vertical-p-500.png 500w, https://cdn.prod.website-files.com/69afddf56ce54da131973b12/6a15f05ebf65c5ebe1a42654_Thunder-Logo_WHT-Vertical-p-800.png 800w, https://cdn.prod.website-files.com/69afddf56ce54da131973b12/6a15f05ebf65c5ebe1a42654_Thunder-Logo_WHT-Vertical-p-1080.png 1080w, https://cdn.prod.website-files.com/69afddf56ce54da131973b12/6a15f05ebf65c5ebe1a42654_Thunder-Logo_WHT-Vertical.png 1271w" class="post-item-link_img cover-full"/></div><div class="block-gap-16 indent-8"><div class="flex-row gap-8"><div class="label-gradient is-white-50">May 26, 2026</div><div class="dot-devider"></div><div class="label-gradient is-white-50">5 min read</div></div><h3 class="h6 medium">Thunder Studios Forms Originals Division, Names Diana Mejia-Jones Head </h3></div><a href="/news/thunder-studios-forms-originals-division-names-diana-mejia-jones-head" class="post-item-link_link w-inline-block"></a><div class="categories-div align-right"><div class="cagegories-div_wrap flex-left"><a href="/news-type/press-release" class="category-link w-inline-block"><div class="category-item-small">Press Release</div></a></div></div></div></div></div></div></div></div></div></div></div><div class="nnw-get-crew-section"><div class="nnw-btm-cta-overlay"></div><div class="code-embed-5 w-embed"><style>
  .crew-video {
    width: 100%;
    /*height: 100%;*/
    max-height: 1844px;
    object-fit: cover;
    border-top-left-radius: 24px;
    border-top-right-radius: 24px;
  }
  @media (max-width: 768px) {
    .crew-video {
      object-fit: contain;
      position: relative;
      border-top-left-radius: 12px;
      border-top-right-radius: 12px;
    }
  }
</style>

<video class="crew-video" id="crewVideo" preload="metadata" muted playsinline loop poster="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69e086da2d9db260df097c19_footer-cta-poster.avif">
  <source src="https://demoassets.touchcast.com/webflow-assets/videos/Companions_SittingLongSofa_1x1.webm" type="video/webm" />
  <source src="https://demoassets.touchcast.com/webflow-assets/videos/Companions_SittingLongSofa.mp4" type="video/mp4" />
</video></div><div class="get-crew-content-wraper"><div class="nnw-footer-cta-tag-line"><div class="nnw-footer-cta-tag-line-txt">Start free.</div><div class="nnw-footer-cta-tag-grd">Upgrade when you&#x27;re ready.</div></div><h2 class="nnw-footer-cta-heading">Get your crew.</h2><div class="hero_buttons"><a href="/consumer" class="pink-button w-inline-block"><div>Get Started Now</div></a><a href="/napster-for-mac" class="transparent-button is-home w-inline-block"><div>Get Napster for Mac</div></a></div></div><img src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b3b60dc32dfba08ebbc09b_home-mobile.avif" loading="lazy" alt="" class="image-56"/></div><div class="np-lightbox"><div class="np-lightbox-script w-embed"></div><div class="np-lightbox-video"><a href="#" class="transparent-button np-lightbox-close w-inline-block"><img src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69cb93537f2a658350da4519_x-close.svg" loading="lazy" alt="" class="btn-arro-rt"/></a></div></div></div><section class="nnw-footer-section"><div class="footer-cta-btn-div"><div class="nnw-footer-cta-img-below-section"></div></div><div class="nnw-footer-item-form sm"><div class="nnw-footer-item-form-head">Sign up to receive the latest product news, stories, and innovations worth your time.</div><a href="#" class="nnw-getstart-btn hidden w-button">Get Started</a><div class="code-embed-4 w-embed w-script"><style>
  #subscribe-form .hsfc-Step__Content {
    padding: 0;
    display: flex;
    justify-content: center;
    align-items: start;
  }
  #subscribe-form input,
  #newsletter-form2 input {
    min-height: 59px;
    margin-right: 0;
    padding: 20px 0 20px 14px;
    font-size: 16px;
    font-weight: 400;
    color: #fff;
    background-color: #ffffff0d;
    border: 1px solid #ffffff0d;
    border-radius: 10px;
    font-family: Inter, sans-serif;
    margin-right: 0;
    box-shadow: none;
    width: 70%;
  }
  input:focus-visible {
    outline: none;
  }
  #subscribe-form .hsfc-NavigationRow {
    margin-top: 0;
  }
  #subscribe-form button,
  #newsletter-form2 button {
    color: #be369d;
    background-color: #be369d05;
    border: 2px solid #be369d;
    border-radius: 10px;
    min-height: 59px;
    padding: 18px 20px;
    font-family: Inter, sans-serif;
    font-size: 12px;
    font-weight: 600;
    line-height: 100%;
    box-shadow: 1px 2px 10px 0 rgba(0, 0, 0, 0.25);
    word-break: normal;
    overflow-wrap: normal;
    width: 110px;
    margin-left: 12px;
    transition: none;
    transform: none;
  }
  #subscribe-form .hsfc-NavigationRow__Buttons {
    justify-content: start;
  }
  #subscribe-form .hsfc-NavigationRow__Alerts {
    margin-bottom: 0;
  }
  #subscribe-form .hsfc-FieldLabel {
    /* color: #FFF;
  font-family: Inter;
  font-size: 14px;
  font-style: normal;
  font-weight: 600;
  line-height: 100%;
  margin-bottom: 12px;*/
    display: none;
  }
  #subscribe-form .hsfc-FieldLabel__RequiredIndicator {
    color: #dd52cb !important;
    margin-left: 2px;
  }
  #subscribe-form p {
    color: rgba(255, 255, 255, 0.6);
    font-family: Inter;
    font-size: 12px;
    font-style: normal;
    font-weight: 400;
    line-height: 140%;
  }
  #subscribe-form .hsfc-NavigationRow__Alerts .hsfc-ErrorAlert {
    display: none;
  }

  #subscribe-form input::placeholder,
  #newsletter-form2 input::placeholder {
    color: #fff;
  }
  #subscribe-form input::-webkit-input-placeholder,
  #newsletter-form2 input::-webkit-input-placeholder {
    color: #fff;
  }

  #subscribe-form input::-moz-placeholder,
  #newsletter-form2 input::-moz-placeholder {
    color: #fff;
  }

  #subscribe-form input:-ms-input-placeholder,
  #newsletter-form2 input:-ms-input-placeholder {
    color: #fff;
  }

  #subscribe-form input::placeholder,
  #newsletter-form2 input::placeholder {
    color: #fff;
  }
  #newsletter-form2 input.input-error {
    border-color: #ff4d6d;
  }
  .email-error2 {
    display: none;
    font-size: 0.72rem;
    color: #ff4d6d;
    margin-top: 6px;
    padding-left: 40px;
  }
  .email-error2.show {
    display: block;
  }
  .nl-success {
    display: none;
    margin-top: 0px;
    text-align: center;
  }
  .nl-success.show {
    display: block;
  }
  .nl-success h3 {
    font-size: 41px;
    font-weight: 700;
    color: #dd52cb;
    margin-bottom: 4px;
    margin-top: 0px;
  }
  .nl-success p {
    font-size: 24px;
    color: #dd52cb;
  }
  #newsletter-form2 {
    display: flex;
    justify-content: center;
  }
  @media (max-width: 768px) {
    #newsletter-form2 input {
      width: 60% !important;
    }
  }
  @media screen and (max-width: 479px) {
    .email-error2 {
      padding-left: 20px;
    }
  }
</style>

<form class="newsletter-form2" id="newsletter-form2" novalidate>
  <input type="email" placeholder="Enter email address" aria-label="Email" id="newsletter-email2" required />
  <button type="submit">Submit</button>
</form>
<p class="email-error2" id="email-error2"></p>
<div class="nl-success" id="nl-success2" style="text-align: center"><p>Thank you, we'll be in touch soon.</p></div>

<script>
  document.getElementById('newsletter-form2').addEventListener('submit', function (e) {
    e.preventDefault();
    var emailInput = document.getElementById('newsletter-email2');
    var errorEl = document.getElementById('email-error2');
    var email = emailInput.value.trim();
    // Reset previous error state
    emailInput.classList.remove('input-error');
    errorEl.textContent = '';
    errorEl.classList.remove('show');
    // 1. Empty field validation
    if (email === '') {
      emailInput.classList.add('input-error');
      errorEl.textContent = 'Email address is required.';
      errorEl.classList.add('show');
      return;
    }
    // 2. Email format validation
    if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
      emailInput.classList.add('input-error');
      errorEl.textContent = 'Please enter a valid email address.';
      errorEl.classList.add('show');
      return;
    }
    // Valid — fire Braze
    braze.getUser().setEmail(email);
    braze.getUser().setEmailNotificationSubscriptionType('opted_in');
    braze.getUser().addToSubscriptionGroup('20e7612e-55f2-4c1b-a46f-95b99c0cfcc1');
    braze.getUser().addToCustomAttributeArray('product_ids', 'website');
    braze.requestImmediateDataFlush();

    // Fire custom event after 2s delay, then flush again
    setTimeout(function () {
      braze.logCustomEvent('newsletter_signup_marketing_website');
      braze.requestImmediateDataFlush();
    }, 2000);

    // Show success message, hide form
    document.getElementById('newsletter-form2').style.display = 'none';
    document.getElementById('email-error2').classList.remove('show');
    document.getElementById('nl-success2').classList.add('show');
  });
</script></div></div><div class="div-block-6"></div><div class="w-layout-grid nnw-footer-grid top-padding-0"><div class="nnw-footer-item"><div class="nnw-footer-item-head">Products</div><div class="w-dyn-list"><div role="list" class="w-dyn-items"><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/consumer" class="nnw-footer-item-txt no-capitalize">Napster App</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/napster-for-mac" class="nnw-footer-item-txt no-capitalize">Napster for Mac</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/view" class="nnw-footer-item-txt no-capitalize">Napster View</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/station" class="nnw-footer-item-txt no-capitalize">Napster Station</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/learn-for-enterprise" class="nnw-footer-item-txt no-capitalize">Napster Learn: Enterprise</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/learn-for-higher-education" class="nnw-footer-item-txt no-capitalize">Napster Learn: Higher Ed</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/spaces" class="nnw-footer-item-txt no-capitalize">Napster Spaces</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/developer" class="nnw-footer-item-txt no-capitalize">Napster API</a></div></div></div></div><div class="nnw-footer-item"><div class="nnw-footer-item-head">Solutions</div><div class="w-dyn-list"><div role="list" class="w-dyn-items"><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/enterprise" class="nnw-footer-item-txt">For Enterprise</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/developer" class="nnw-footer-item-txt">For Developers</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/partners" class="nnw-footer-item-txt">For Partners</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/case-studies" class="nnw-footer-item-txt">Case Studies</a></div></div></div></div><div class="nnw-footer-item"><div class="nnw-footer-item-head">Company</div><div class="w-dyn-list"><div role="list" class="w-dyn-items"><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/about" class="nnw-footer-item-txt">About</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/news" class="nnw-footer-item-txt">Newsroom</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/careers" class="nnw-footer-item-txt">Careers</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/blog" class="nnw-footer-item-txt">Blog</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/references" class="nnw-footer-item-txt">Reference</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/contact" class="nnw-footer-item-txt">Contact Us</a></div></div></div></div><div class="nnw-footer-item"><div class="nnw-footer-item-head">Resources</div><div class="w-dyn-list"><div role="list" class="w-dyn-items"><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/security" class="nnw-footer-item-txt">Security</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/news#mediakit" class="nnw-footer-item-txt">Media Kit</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="https://help.napster.com/hc/en-us" class="nnw-footer-item-txt">Help Center</a></div><div role="listitem" class="nnw-footer-links w-dyn-item"><a href="/ethics" class="nnw-footer-item-txt">Ethics</a></div></div></div></div><div class="nnw-footer-qr-section"><div class="nnw-footer-playstore-actions"><a href="https://apps.apple.com/us/app/napster-ai-music-experts/id584557117" class="nnw-footer-google-playstore w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b1135306dd6512a006cdb6_Store%20download%20button.avif" alt="Download APP Store" class="image-3"/></a><a href="https://companiondesktop.blob.core.windows.net/application/builds/Napster.dmg" class="nnw-footer-appstore w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b11341694e9bd68e16868c_Store%20download%20button.avif" alt="Download for MacOs" class="image-14"/></a><a href="https://play.google.com/store/apps/details?id=com.rhapsody.napster&amp;pcampaignid=web_share" class="nnw-footer-appstore w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b11362422a5f9268c4c252_Store%20download%20button.avif" alt="Get it on Google Play" class="image-15"/></a><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/6a0478ac72a3abe2d14a47e1_qrcode-url-consumer.avif" alt="Scan QR Code" class="nnw-footer-qr"/></div></div></div><div class="nnw-footer-social-wraper"><div class="nnw-footer-qr-section sm"><div class="nnw-footer-playstore-actions"><a href="#" class="nnw-footer-google-playstore w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b1135306dd6512a006cdb6_Store%20download%20button.avif" alt="Download on App Store" class="image-3"/></a><a href="#" class="nnw-footer-appstore w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b11341694e9bd68e16868c_Store%20download%20button.avif" alt="Download for MacOs" class="image-14"/></a><a href="#" class="nnw-footer-appstore w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b11362422a5f9268c4c252_Store%20download%20button.avif" alt="Get it on Google Play" class="image-15"/></a></div><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b113de93832f8a4f4c00b1_QR%20Code.avif" alt="" class="nnw-footer-qr"/></div><div class="div-block-185"><div class="nnw-footer-item-form lg"><div class="nnw-footer-item-form-head">Sign up to receive the latest product news, stories, and innovations worth your time.</div><a href="#" class="nnw-getstart-btn hidden w-button">Get Started</a><div class="w-embed w-script"><style>
  #subscribe-form .hsfc-Step__Content {
    padding: 0;
    display: flex;
    justify-content: center;
    align-items: start;
  }
  #subscribe-form input,
  #newsletter-form input {
    min-height: 59px;
    margin-right: 0;
    padding: 20px 0 20px 14px;
    font-size: 16px;
    font-weight: 400;
    color: #fff;
    background-color: #ffffff0d;
    border: 1px solid #ffffff0d;
    border-radius: 10px;
    font-family: Inter, sans-serif;
    margin-right: 0;
    box-shadow: none;
    width: 70%;
  }
  input:focus-visible {
    outline: none;
  }
  #subscribe-form .hsfc-NavigationRow {
    margin-top: 0;
  }
  #subscribe-form button,
  #newsletter-form button {
    color: #be369d;
    background-color: #be369d05;
    border: 2px solid #be369d;
    border-radius: 10px;
    min-height: 59px;
    padding: 18px 20px;
    font-family: Inter, sans-serif;
    font-size: 12px;
    font-weight: 600;
    line-height: 100%;
    box-shadow: 1px 2px 10px 0 rgba(0, 0, 0, 0.25);
    word-break: normal;
    overflow-wrap: normal;
    width: 110px;
    margin-left: 12px;
    transition: none;
    transform: none;
  }
  #subscribe-form .hsfc-NavigationRow__Buttons {
    justify-content: start;
  }
  #subscribe-form .hsfc-NavigationRow__Alerts {
    margin-bottom: 0;
  }
  #subscribe-form .hsfc-FieldLabel {
    /* color: #FFF;
  font-family: Inter;
  font-size: 14px;
  font-style: normal;
  font-weight: 600;
  line-height: 100%;
  margin-bottom: 12px;*/
    display: none;
  }
  #subscribe-form .hsfc-FieldLabel__RequiredIndicator {
    color: #dd52cb !important;
    margin-left: 2px;
  }
  #subscribe-form p {
    color: rgba(255, 255, 255, 0.6);
    font-family: Inter;
    font-size: 12px;
    font-style: normal;
    font-weight: 400;
    line-height: 140%;
  }
  #subscribe-form .hsfc-NavigationRow__Alerts .hsfc-ErrorAlert {
    display: none;
  }

  #subscribe-form input::placeholder,
  #newsletter-form input::placeholder {
    color: #fff;
  }
  #subscribe-form input::-webkit-input-placeholder,
  #newsletter-form input::-webkit-input-placeholder {
    color: #fff;
  }

  #subscribe-form input::-moz-placeholder,
  #newsletter-form input::-moz-placeholder {
    color: #fff;
  }

  #subscribe-form input:-ms-input-placeholder,
  #newsletter-form input:-ms-input-placeholder {
    color: #fff;
  }

  #subscribe-form input::placeholder,
  #newsletter-form input::placeholder {
    color: #fff;
  }
  #newsletter-form input.input-error {
    border-color: #ff4d6d;
  }
  .email-error {
    display: none;
    font-size: 0.72rem;
    color: #ff4d6d;
    margin-top: 6px;
  }
  .email-error.show {
    display: block;
  }
  .nl-success {
    display: none;
    margin-top: 0px;
    text-align: left;
  }
  .nl-success.show {
    display: block;
  }
  .nl-success h3 {
    font-size: 41px;
    font-weight: 700;
    color: #dd52cb;
    margin-bottom: 4px;
    margin-top: 0px;
  }
  .nl-success p {
    font-size: 24px;
    color: #dd52cb;
  }
</style>

<form class="newsletter-form" id="newsletter-form" novalidate>
  <input name="email" type="email" placeholder="Enter email address" aria-label="Email" id="newsletter-email" required />
  <button type="submit">Submit</button>
</form>
<p class="email-error" id="email-error"></p>
<div class="nl-success" id="nl-success"><p>Thank you, we'll be in touch soon.</p></div>

<script>
  document.getElementById('newsletter-form').addEventListener('submit', function (e) {
    e.preventDefault();
    var emailInput = document.getElementById('newsletter-email');
    var errorEl = document.getElementById('email-error');
    var email = emailInput.value.trim();
    // Reset previous error state
    emailInput.classList.remove('input-error');
    errorEl.textContent = '';
    errorEl.classList.remove('show');
    // 1. Empty field validation
    if (email === '') {
      emailInput.classList.add('input-error');
      errorEl.textContent = 'Email address is required.';
      errorEl.classList.add('show');
      return;
    }
    // 2. Email format validation
    if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
      emailInput.classList.add('input-error');
      errorEl.textContent = 'Please enter a valid email address.';
      errorEl.classList.add('show');
      return;
    }
    // Valid — fire Braze
    braze.getUser().setEmail(email);
    braze.getUser().setEmailNotificationSubscriptionType('opted_in');
    braze.getUser().addToSubscriptionGroup('20e7612e-55f2-4c1b-a46f-95b99c0cfcc1');
    braze.getUser().addToCustomAttributeArray('product_ids', 'website');
    braze.requestImmediateDataFlush();

    // Fire custom event after 2s delay, then flush again
    setTimeout(function () {
      braze.logCustomEvent('newsletter_signup_marketing_website');
      braze.requestImmediateDataFlush();
    }, 2000);

    // Show success message, hide form
    document.getElementById('newsletter-form').style.display = 'none';
    document.getElementById('email-error').classList.remove('show');
    document.getElementById('nl-success').classList.add('show');
  });
</script></div></div></div><div class="nnw-footer-social-inner-wraper"><div class="w-layout-grid nnw-footer-social-grid"><a href="https://www.linkedin.com/company/napstercorp/" class="nnw-footer-social-icon-link w-inline-block"><div class="nnw-footer-social-icon-div-wraper"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69aebbdd90c8dabba13b238b_ri_linkedin-fill.png" alt="Linkedin" class="image-6"/></div></a><a href="https://www.youtube.com/@napstercorp" class="nnw-footer-social-icon-link w-inline-block"><div class="nnw-footer-social-icon-div-wraper"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69b3ac3917215cd3868b5ca9_a.png" alt="Youtube" class="image-7"/></div></a><a href="https://www.instagram.com/napstercorp/" class="nnw-footer-social-icon-link w-inline-block"><div class="nnw-footer-social-icon-div-wraper"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69aeba543b33182de1a53414_mdi_instagram.png" alt="instagram" class="image-7"/></div></a><a href="https://x.com/napster_corp" class="nnw-footer-social-icon-link w-inline-block"><div class="nnw-footer-social-icon-div-wraper"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69aebc33516eac27a6293122_codicon_twitter.png" alt="Twitter" class="image-4"/></div></a><a href="https://www.facebook.com/napstercorp/" class="nnw-footer-social-icon-link w-inline-block"><div class="nnw-footer-social-icon-div-wraper"><img loading="lazy" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69aebbff17794fe4a3a06c54_ri_facebook-fill.png" alt="Facebook" class="image-5"/></div></a></div><div class="nnw-footer-copyright-section"><div class="nnw-footer-copyright-outer-div"><div class="nnw-footer-copyright-terms no-pointer"><div class="nnw-footer-copyright-terms-section"><div class="nnw-footer-copyright-terms-txt">© 2026 Napster</div></div></div><a href="/terms-of-service" class="nnw-footer-copyright-terms w-inline-block"><div class="nnw-footer-copyright-terms-section"><div class="nnw-footer-copyright-terms-txt">Terms of Service</div></div></a><a href="/privacy-policy" class="nnw-footer-copyright-terms w-inline-block"><div class="nnw-footer-copyright-terms-section"><div class="nnw-footer-copyright-terms-txt">Privacy Policy</div></div></a><a href="/ethics" class="nnw-footer-copyright-terms hide w-inline-block"><div class="nnw-footer-copyright-terms-section"><div class="nnw-footer-copyright-terms-txt">AI Principles</div></div></a><a href="#" class="nnw-footer-copyright-terms hide w-inline-block"><div class="nnw-footer-copyright-terms-section"><div class="nnw-footer-copyright-terms-txt">Accessibility</div></div></a><a href="/drafts/cookie-policy" class="nnw-footer-copyright-terms hide w-inline-block"><div class="nnw-footer-copyright-terms-section"><div class="nnw-footer-copyright-terms-txt">Cookie Policy</div></div></a></div></div></div></div><div class="nnw-footer-napster-img-div"><img sizes="100vw" srcset="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69aec7622df8100f2fb51f8a_svgviewer-png-output-p-500.avif 500w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69aec7622df8100f2fb51f8a_svgviewer-png-output-p-800.avif 800w, https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69aec7622df8100f2fb51f8a_svgviewer-png-output.avif 2400w" alt="Napster Footer Logo" src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/69aec7622df8100f2fb51f8a_svgviewer-png-output.avif" loading="lazy" class="nnw-footer-napster-img"/></div></section><script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=69ae6251111a514c4038172a" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script><script src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/js/napsternew.schunk.a643aa8ea17d1482.js" type="text/javascript" integrity="sha384-SNcahRi4XLTXOU8uOghaF0CVQluDik0spEaE0OmCqsQh+ntA42N48MfFeKXGs3zO" crossorigin="anonymous"></script><script src="https://cdn.prod.website-files.com/69ae6251111a514c4038172a/js/napsternew.c9f80112.b5126f0ca8b622fd.js" type="text/javascript" integrity="sha384-sOIiJX4tfaDrjKfE0Bid+UZnW0u6/tAhYob8jeR2ShIG6yjJ1PdOcshDtteV/I+a" crossorigin="anonymous"></script><!-- <div class="agent-wraper">
  <div id="avatar-container"></div>
  <button class="ask-to-agent" id="askAgentBtn" aria-label="Ask about Napster" aria-expanded="false">
    <span class="kai-avatar">
      <svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10" fill="#22C55E"></circle></svg>
    </span>
    Ask about Napster
  </button>
</div>
<script defer src="https://cdn.jsdelivr.net/npm/@touchcastllc/napster-companion-api@latest/lib/index.standalone.js"></script>
<script>
 // var instance = null;
 // var SESSION_KEY = 'napsterAgentActive';
 // document.getElementById('askAgentBtn').addEventListener('click', async function () {
  async function initAgent(){
    try {
      const askButton = document.getElementById('askAgentBtn');
      const response = await fetch('https://touchcast.touchcastmaas.dev/aix/api/agent/887d67ea-903f-4cbd-97f0-5f0a1b08ad4b/connections', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          channelType: 'webrtc',
        }),
      });
      const agentData = await response.json();
      const agentToken = agentData.token;
      const sdk = window.napsterCompanionApiSDK;

      sdk
        .init(agentToken, {
          mountContainer: '#avatar-container',
          position: 'bottom-right',
          onReady: () => {
           // console.log('SDK ready');
          },
          onAvatarReady: () => {
            // Realtime model won't speak until prompted, so kick it off ourselves.
            instance.sendCommand({
              type: "send_message",
              data: {
                text: "Greet the user warmly.",
                role: "system",
                trigger_response: true,
              },
            });
          },
          onError: (err) => {
            console.error('SDK Error:', err);
          },
          onInactivityStatusChange: (inactive) => {
            console.log('Inactive:', inactive);
          },
          onDestroy: () => {
            console.log('Companion closed');
            askButton.style.display = 'flex';
          // sessionStorage.removeItem(SESSION_KEY); // ← clear flag when user closes agent
            instance = null;
          },
          onData: (data) => {
            //console.log('event:', data);
          },
        })
        .then((sdkInstance) => {
          instance = sdkInstance;
          instance.showAvatar();
          askButton.style.display = 'none';
          //sessionStorage.setItem(SESSION_KEY, 'true'); // ← save "agent is open" flag
          console.log('Avatar initialized');
        })
        .catch((err) => {
          console.error('Init failed:', err);
          askButton.style.display = 'flex';
          //sessionStorage.removeItem(SESSION_KEY);
        });
    } catch (error) {
      console.error('Error:', error);
      document.getElementById('askAgentBtn').style.display = 'flex';
      //sessionStorage.removeItem(SESSION_KEY);
    }
  }
  document.getElementById('askAgentBtn').addEventListener('click', initAgent);

  // Auto-restore: if agent was open on a previous page, reopen it automatically
  /*if (sessionStorage.getItem(SESSION_KEY) === 'true') {
    initAgent();
  }*/
</script> -->
<!-- Cookiebot starts-->
<div id="CookiebotWidgetIcon">
  <img src="https://cdn.prod.website-files.com/682348580f8cbfc039aea6c4/688c9a149f137270dbe60463_cokkieImg1.svg" alt="Icon" class="coookie-icon-img"/>
</div>

<script id="Cookiebot" src="https://consent.cookiebot.com/uc.js" data-cbid="0951dec0-49ed-4518-9eb5-f9c113481d3b" type="text/javascript"></script>
<!-- Cookiebot Ends-->

<script defer type="text/javascript">
  $(document).ready(function () {
    $('.napster-sm-hamberger').on('click', function () {
      $('.napster-sm-menu').toggleClass('napster-sm-menu-open');
      $('body').addClass('hide-overflow');
    });
    $('.napster-sm-close').on('click', function () {
      $('.napster-sm-menu').removeClass('napster-sm-menu-open');
      $('body').removeClass('hide-overflow');
    });
    $('.napster-sm-dropdown-block').click(function () {
      $('.napster-sm-menu').removeClass('napster-sm-menu-open');
      $('body').removeClass('hide-overflow');
    });
    $(window).on('resize', function () {
      $('.napster-sm-menu').removeClass('napster-sm-menu-open');
      $('body').removeClass('hide-overflow');
    });
  });

  window.addEventListener('scroll', function () {
    const header = document.querySelector('.napster-header');
    header.classList.toggle('sticky', window.scrollY > 10);
  });
  window.addEventListener('scroll', function () {
    const header = document.querySelector('.napster-sm-header');
    header.classList.toggle('sticky', window.scrollY > 10);
  });
</script>

<!-- REVEAL ELEMENT ANIMATION -->

<style>
  .np-lightbox-video video {
    width: 100%;
    height: 100%;
  }
</style>

<script defer>
  $(document).ready(function () {
    // ============================================================
    // 1) np-lightbox — generic, reusable lightbox for video
    //    Trigger: any element with [data-lightbox-button]
    //    data-video = raw URL to video file
    // ============================================================
    function lightboxInit() {
      const overlay = document.querySelector('.np-lightbox');
      const closeBtn = document.querySelector('.np-lightbox-close');
      const lbContainer = document.querySelector('.np-lightbox-video');

      if (!overlay || !lbContainer) return;

      let lbVideo = null;

      // --- Create or reuse video for the given URL ---
      function loadVideo(url) {
        const existing = lbContainer.querySelector('video');

        if (existing && existing.src === url) {
          lbVideo = existing;
          return;
        }

        lbVideo = document.createElement('video');
        lbVideo.setAttribute('controls', '');
        lbVideo.setAttribute('playsinline', '');
        lbVideo.src = url;

        if (existing) {
          existing.replaceWith(lbVideo);
        } else {
          lbContainer.appendChild(lbVideo);
        }
      }

      // --- Open / close ---
      function openLightbox(url, startTime) {
        loadVideo(url);

        lbVideo.currentTime = startTime || 0;
        overlay.style.pointerEvents = 'auto';
        overlay.style.visibility = 'visible';
        overlay.style.opacity = '1';
        lbVideo.muted = false;
        lbVideo.play().catch(function () {});

        document.addEventListener('keydown', onEscape);
      }

      function closeLightbox() {
        if (!lbVideo) return;
        const time = lbVideo.currentTime;
        lbVideo.pause();
        overlay.style.opacity = '0';
        overlay.style.visibility = 'hidden';
        overlay.style.pointerEvents = 'none';

        overlay.dispatchEvent(
          new CustomEvent('np-lightbox-close', {
            detail: { currentTime: time },
          }),
        );

        document.removeEventListener('keydown', onEscape);
      }

      function onEscape(e) {
        if (e.key === 'Escape') closeLightbox();
      }

      // --- Bind all [data-lightbox-button] triggers ---
      document.querySelectorAll('[data-lightbox-button]').forEach(function (btn) {
        btn.addEventListener('click', function (e) {
          e.preventDefault();
          const url = btn.getAttribute('data-video');
          if (url) openLightbox(url);
        });
      });

      // --- Close via button / backdrop ---
      if (closeBtn) closeBtn.addEventListener('click', closeLightbox);
      overlay.addEventListener('click', function (e) {
        if (e.target === overlay) closeLightbox();
      });

      // Expose for other scripts
      window.npLightbox = {
        open: openLightbox,
        close: closeLightbox,
        getVideo: function () {
          return lbVideo;
        },
      };
    }
    lightboxInit();
  });
</script>
<!-- Cookiebot] Start-->
<script>
 // $(window).on('load', function () {
 //    const handleOpenCookiebot = () => {
 //      const cookieBot = window.Cookiebot;
 //      if (cookieBot && cookieBot.show) {
 //        cookieBot.renew();
 //      }
 //    };

 //    handleOpenCookiebot();
 //  });

  $(document).ready(function () {
    $('#CookiebotWidgetIcon img').on('click', function (e) {
      e.preventDefault();
      const cookieBot = window.Cookiebot;
      if (cookieBot && typeof cookieBot.show === 'function') {
        //cookieBot.show();
        cookieBot.renew();
      } else {
        console.warn('Cookiebot not ready or .show() function missing.');
      }
    });
  });
</script>
<!-- Cookiebot End-->
<!-- <script>
  /**
 * Napster SPA Router
 * Intercepts internal navigation, swaps page content without full reloads.
 * Inject via Webflow: Project Settings → Custom Code → Before </body>
 */
(function () {
  'use strict';

  // Prevent re-execution if runScripts() re-runs this file during SPA navigation.
  // Without this guard, every navigation creates a new router instance with its
  // own globalScriptTexts — breaking all deduplication and producing multiple
  // "[SPA] booted" messages (VM2376, VM2382, VM2396 etc. in the console).
  if (window.__spaRouterBooted) return;
  window.__spaRouterBooted = true;

  const PERSISTENT_SELECTORS = [
    'nav', '.w-nav', '.w-nav-bar', 'header', '.drawer',
    '#avatar-container', '.avatar-container', '.agent-wraper',
    // Napster's custom header and mobile nav are both direct <body> children
    // and are NOT <nav> or <header> elements, so they don't match the generic
    // selectors above.  Both must be listed so wrapContent() keeps them out of
    // #spa-content — otherwise content.innerHTML wipes their jQuery click
    // handlers (hamburger, close, dropdown links) on every navigation.
    '.napster-header',
    '.napster-mobile-nav',
  ];

  const TRANSITION_MS = 220;
  const cache = {};

  // ── Snapshot global scripts at boot time ─────────────────────────────────
  // Captured once from the initial page. Anything in these sets is a globally
  // loaded script that must NEVER be re-executed during SPA navigation.
  // Anything NOT in these sets is page-specific and must re-run on each visit.
  const globalScriptTexts = new Set();  // inline scripts
  const globalExternalSrcs = new Set(); // external scripts (jQuery, GTM, Braze…)

  // ── Finsweet Attributes v2 reload support ────────────────────────────────
  // The entire script element is captured at boot so we can clone ALL its
  // attributes (type="module", fs-list, async, etc.) on each reinsertion.
  // Without fs-list the fresh script has no module to activate; without
  // type="module" the ES module runs in the wrong context.
  let _fsEl = null;
  let _fsNavCount = 0;

  // ── Track page-level timers so we can clear before each navigation ────────
  const _setInterval = window.setInterval;
  const _setTimeout  = window.setTimeout;
  let pageIntervals = [];
  let pageTimeouts  = [];

  window.setInterval = function (fn, delay, ...args) {
    // Wrap the callback so that if it throws (e.g. references a DOM element
    // that no longer exists after a page swap), the interval self-clears
    // instead of spamming the console with repeated errors.
    const wrapped = typeof fn === 'function' ? function (...cbArgs) {
      try { fn.apply(this, cbArgs); }
      catch (e) {
        clearInterval(id);
        pageIntervals = pageIntervals.filter(i => i !== id);
        console.warn('[SPA] auto-cleared broken interval:', e.message);
      }
    } : fn;
    const id = _setInterval.call(this, wrapped, delay, ...args);
    pageIntervals.push(id);
    return id;
  };
  window.setTimeout = function (...args) {
    const id = _setTimeout.apply(this, args);
    pageTimeouts.push(id);
    return id;
  };

  function clearPageTimers() {
    pageIntervals.forEach(id => clearInterval(id));
    pageTimeouts.forEach(id => clearTimeout(id));
    pageIntervals = [];
    pageTimeouts  = [];
  }

  // ── Inject transition styles ──────────────────────────────────────────────
  const style = document.createElement('style');
  style.textContent = `
    #spa-content {
      transition: opacity ${TRANSITION_MS}ms ease, transform ${TRANSITION_MS}ms ease;
    }
    #spa-content.spa-leave { opacity: 0; transform: translateY(6px); }
    #spa-content.spa-enter { opacity: 0; transform: translateY(-6px); }
  `;
  document.head.appendChild(style);

  // ── Wrap page body content in #spa-content ────────────────────────────────
  function wrapContent() {
    if (document.getElementById('spa-content')) return;

    const wrapper = document.createElement('div');
    wrapper.id = 'spa-content';

    const persistentEls = new Set(
      PERSISTENT_SELECTORS.flatMap(sel => [...document.querySelectorAll(sel)])
    );

    [...document.body.children]
      .filter(el => !persistentEls.has(el))
      .forEach(el => wrapper.appendChild(el));

    document.body.appendChild(wrapper);
  }

  // ── Fetch a page ──────────────────────────────────────────────────────────
  async function fetchPage(url) {
    if (cache[url]) return cache[url];
    const res = await fetch(url, { credentials: 'same-origin' });
    if (!res.ok) throw new Error(`HTTP ${res.status}`);
    const doc = new DOMParser().parseFromString(await res.text(), 'text/html');
    cache[url] = doc;
    return doc;
  }

  // ── Extract swappable body content from a fetched document ───────────────
  function extractContent(doc) {
    const remote = doc.getElementById('spa-content');
    if (remote) return remote.innerHTML;

    const persistentEls = new Set(
      PERSISTENT_SELECTORS.flatMap(sel => [...doc.querySelectorAll(sel)])
    );
    return [...doc.body.children]
      .filter(el => !persistentEls.has(el))
      .map(el => el.outerHTML)
      .join('');
  }

  // ── Refine which scripts are truly global ────────────────────────────────
  // globalScriptTexts starts as ALL scripts from the first page (boot).
  // On each navigation, intersect it with the fetched page's scripts.
  // Scripts that don't appear on the new page were page-specific to the
  // previous page — remove them so they can run correctly on their own pages.
  // What remains after several navigations = scripts present on every page
  // = truly global project footer code (avatar init, analytics, etc.)
  function refineGlobalScripts(doc) {
    const fetchedTexts = new Set(
      [...doc.querySelectorAll('script:not([src])')].map(s => s.textContent.trim()).filter(Boolean)
    );
    globalScriptTexts.forEach(text => {
      if (!fetchedTexts.has(text)) globalScriptTexts.delete(text);
    });
  }

  // Scripts matching these patterns must always re-run on every navigation
  // even if they appear on multiple pages (and thus look "global").
  // They initialise per-page UI components that need a fresh start each time.
  const REINIT_PATTERNS = [
    /\.slick\s*\(\s*\{/,     // Slick carousel init — matches .slick({options}) only, NOT .slick("unslick")
    /new\s+Swiper\s*\(/,     // Swiper
    /new\s+Glide\s*\(/,      // Glide.js
    /\.flickity\s*\(/,       // Flickity
    /\.owlCarousel\s*\(/,    // Owl Carousel
    /\.carousel\s*\(/,       // Bootstrap / custom carousel
    /restartTimerBar/,       // custom tab timer
    /restartProgressBar/,    // custom progress bar
    /lightboxInit\s*\(/,     // np-lightbox: queries DOM elements at init time
    /npLightbox/,            // np-lightbox window export
    /data-lightbox-button/,  // np-lightbox trigger binding
    /detectUserCountry/,     // enterprise region script: queries DOM + async IP detection at init time
    /contentSets\s*=/,       // enterprise region content map — must re-run to re-bind new DOM elements
    /hbspt\.forms\.create/,  // HubSpot embed: must re-run to render form into new DOM container
    /hbspt\.forms/,          // HubSpot forms API (broader match for any hbspt call)
    /napster-sm-hamberger/,  // mobile hamburger handler: .napster-mobile-nav may be inside #spa-content
                             // on pages wrapped in div.main-wrapper, so the handler must re-bind on every nav
    /\[data-reveal\]/,       // scroll-reveal: adds is-visible class via IntersectionObserver; CSS starts
                             // [data-reveal]{opacity:0} so skipping this script leaves sections invisible
  ];

  function needsReinit(text) {
    return REINIT_PATTERNS.some(p => p.test(text));
  }

  // Scripts matching these patterns are ALWAYS skipped during SPA navigation,
  // even if they are NOT in globalScriptTexts (i.e. page-specific scripts).
  // These are Swup lifecycle orchestrators: `new Swup({containers: ["#swup"]})`
  // fires hooks that our router replaces.  With NoopSwup neutralised at boot,
  // every `new Swup()` call returns { hooks: { on: noop }, destroy: noop }.
  // Their `initPage()` helpers reference functions that are never globally
  // defined (initCountryTabs, initWorkSection, etc.) so they always throw a
  // ReferenceError that is silently caught — the scripts produce zero useful
  // work and must NOT re-run because they can interfere with slider init timing
  // on pages that share these scripts with the boot page (view, station,
  // partners, home).
  const SKIP_INLINE_PATTERNS = [
    /new\s+Swup\s*\(/,  // Swup lifecycle orchestrators — no-ops in our SPA context
  ];

  function shouldSkipInline(text) {
    return SKIP_INLINE_PATTERNS.some(p => p.test(text));
  }

  // ── Destroy existing slider/carousel instances before content swap ─────────
  // Prevents duplicate initialisation when the same init script runs again
  // on a page that shares it with the outgoing page.
  function destroySliders(container) {
    if (window.jQuery) {
      try { window.jQuery(container).find('.slick-initialized').slick('unslick'); } catch (_) {}
    }
    container.querySelectorAll('.swiper-initialized').forEach(el => {
      if (el.swiper) try { el.swiper.destroy(true, true); } catch (_) {}
    });
  }

  // ── Load page-specific external body scripts and wait ────────────────────
  // runScripts() skips <script src> tags because they're assumed globally
  // loaded. But some scripts (HubSpot embed, page-specific CDN libs) are only
  // present on certain pages. This function loads those missing scripts and
  // waits for them so inline init code (hbspt.forms.create, new Swiper) can
  // safely run immediately after.
  // Patterns that identify global/persistent scripts by URL.
  // These are never re-loaded even if their exact URL wasn't captured at boot
  // (e.g. the companion API CDN URL differs by version or query string).
  const GLOBAL_SCRIPT_PATTERNS = [
    /napster-companion-api/,
    /touchcastllc/,
    /touchcastmaas/,
    /\/swup[@/]/,           // Swup SPA router: conflicts with our router — never load
    /unpkg\.com\/swup/,     // Swup via unpkg CDN
  ];

  // Scripts that must be removed and re-executed on every SPA navigation to
  // the page that contains them. HubSpot's embed script tracks internally which
  // forms it has already created; calling hbspt.forms.create() on a stale
  // hbspt object silently no-ops. Removing the old <script> and inserting a
  // fresh one forces the browser to re-execute it (even from cache), which
  // resets hbspt's internal state so the form renders correctly.
  const REINIT_EXTERNAL_PATTERNS = [
    /hsforms\.net/,   // HubSpot form embed
    /js\.hs-scripts/, // HubSpot tracking (re-init for form context)
    // Finsweet Attributes v2 is NOT reloaded here — it exposes window.FinsweetAttributes
    // which is called with destroy()+load() after each content swap (see navigate()).
  ];

  function loadBodyExternalScripts(container) {
    const loads = [];

    container.querySelectorAll('script[src]').forEach(el => {
      const src = el.src;

      // Scripts that must always re-execute: remove old copy, re-insert fresh.
      if (REINIT_EXTERNAL_PATTERNS.some(p => p.test(src))) {
        document.querySelectorAll(`script[src="${src}"]`).forEach(s => s.remove());
        const p = new Promise(resolve => {
          const s = document.createElement('script');
          [...el.attributes].forEach(a => s.setAttribute(a.name, a.value));
          s.onload  = resolve;
          s.onerror = resolve;
          document.head.appendChild(s);
        });
        loads.push(p);
        return;
      }

      // Skip scripts present on the initial page (jQuery, GTM, Braze, etc.)
      if (globalExternalSrcs.has(src)) return;
      // Skip companion API / avatar scripts even if URL doesn't exactly match
      // the boot-time snapshot (CDN redirects, version pins, query strings).
      if (GLOBAL_SCRIPT_PATTERNS.some(p => p.test(src))) return;

      const p = new Promise(resolve => {
        const s = document.createElement('script');
        [...el.attributes].forEach(a => s.setAttribute(a.name, a.value));
        s.onload  = () => { globalExternalSrcs.add(src); resolve(); };
        s.onerror = () => { resolve(); };
        document.head.appendChild(s);
      });
      loads.push(p);
    });

    return Promise.all(loads);
  }

  // ── Re-execute page-specific inline scripts ───────────────────────────────
  // Rules:
  //  • External scripts (src)      → handled by loadBodyExternalScripts above
  //  • UI component scripts        → always run (sliders, timers, carousels)
  //  • Truly global footer scripts → skip (avatar init, analytics, Cookiebot)
  //
  // Event-listener shim: page scripts wrap init code in:
  //   document.addEventListener('DOMContentLoaded', fn)  — never fires in SPA
  //   $(document).ready(fn)                              — jQuery fires it now ✓
  // We intercept DOMContentLoaded and call fn() immediately so Swiper / other
  // libs initialise on the new content right away.
  // Scripts using top-level const/let throw SyntaxError on re-declaration.
  // Wrap them in an IIFE so each execution gets its own scope.
  // Pure init scripts (Swiper, jQuery plugins) are self-contained so IIFE is safe.
  function wrapIfNeeded(text) {
    // Reason 1: top-level const/let causes re-declaration SyntaxError on re-exec.
    const needsIife = /^\s*(const|let)\s/m.test(text);

    // Reason 2: a page boot script may declare `const $ = ...` at global scope.
    // const declarations at the top level of a classic <script> go into the shared
    // Global Declarative Environment, permanently shadowing jQuery's window.$
    // assignment for the lifetime of the realm.  Any subsequent script that calls
    // $(document).ready() or $(...) gets the page's getElementById wrapper instead
    // of jQuery → TypeError: null.ready / null.slick / etc.
    // Fix: pass ($=window.jQuery, jQuery=window.jQuery) as IIFE parameters so
    // each re-executed script sees the real jQuery regardless of outer pollution.
    // Exception: if the script itself declares `const $`, injecting a parameter
    // named $ would cause a SyntaxError ("$ already declared") — skip injection
    // for those scripts (they define their own $ and don't need jQuery anyway).
    const jqShadowed = window.jQuery && $ !== window.jQuery;
    const scriptHasOwnDollar = jqShadowed && /\bconst\s+\$\s*=/.test(text);
    const injectJq = jqShadowed && !scriptHasOwnDollar;

    if (!needsIife && !injectJq) return text;
    if (injectJq) {
      return `(function($,jQuery){\n${text}\n})(window.jQuery,window.jQuery);`;
    }
    return `(function(){\n${text}\n})();`;
  }

  function runScripts(container) {
    container.querySelectorAll('script').forEach(oldScript => {
      if (oldScript.src) return;
      const text = oldScript.textContent.trim();
      if (!text) return;
      if (shouldSkipInline(text)) return;
      if (globalScriptTexts.has(text) && !needsReinit(text)) return;
      try {
        const s = document.createElement('script');
        [...oldScript.attributes].forEach(a => s.setAttribute(a.name, a.value));
        s.textContent = wrapIfNeeded(text);
        oldScript.parentNode.replaceChild(s, oldScript);
      } catch (e) {
        console.warn('[SPA] skipped script error:', e.message);
      }
    });
  }

  // ── Swap per-page <head> assets and wait for new scripts to load ─────────
  // Returns a Promise that resolves only after every new external <script>
  // has loaded (or errored). This ensures libraries like Swiper/Slick are
  // available before runScripts() tries to call new Swiper() / .slick().
  function syncHeadAssets(doc) {
    // Remove previous page's assets
    document.querySelectorAll('[data-spa-page]').forEach(el => el.remove());

    const globalLinks = new Set(
      [...document.head.querySelectorAll('link[rel="stylesheet"]')].map(l => l.href)
    );
    const globalScriptSrcs = new Set(
      [...document.head.querySelectorAll('script[src]')].map(s => s.src)
    );
    // Finsweet is managed entirely by the lifecycle block in navigate().
    // Prevent syncHeadAssets from injecting the cached module here — the
    // cached module's onload may never fire reliably (browser-dependent),
    // and re-inserting it causes a race with the lifecycle block's own inject.
    if (_fsEl) globalScriptSrcs.add(_fsEl.src);

    // CSS / styles — fire and forget (non-blocking)
    doc.head.querySelectorAll('link[rel="stylesheet"]').forEach(el => {
      if (globalLinks.has(el.href)) return;
      const clone = el.cloneNode(true);
      clone.dataset.spaPage = '1';
      document.head.appendChild(clone);
    });

    doc.head.querySelectorAll('style').forEach(el => {
      const clone = el.cloneNode(true);
      clone.dataset.spaPage = '1';
      document.head.appendChild(clone);
    });

    // External scripts — load and WAIT before returning
    const scriptLoads = [];
    doc.head.querySelectorAll('script[src]').forEach(el => {
      // Scripts that must always re-execute: remove old copy, re-insert fresh.
      // Applies even if the script is already in <head> from boot (e.g. Finsweet
      // CMS Filter/Load — it fetches CMS items via AJAX on init and must re-run
      // so it rescans the new DOM and repopulates the collection list).
      if (REINIT_EXTERNAL_PATTERNS.some(p => p.test(el.src))) {
        document.querySelectorAll(`script[src="${el.src}"]`).forEach(s => s.remove());
        const p = new Promise(resolve => {
          const s = document.createElement('script');
          [...el.attributes].forEach(a => s.setAttribute(a.name, a.value));
          s.dataset.spaPage = '1';
          s.onload  = resolve;
          s.onerror = resolve;
          document.head.appendChild(s);
        });
        scriptLoads.push(p);
        return;
      }
      if (globalScriptSrcs.has(el.src)) return;
      const p = new Promise(resolve => {
        const s = document.createElement('script');
        [...el.attributes].forEach(a => s.setAttribute(a.name, a.value));
        s.dataset.spaPage = '1';
        s.onload = resolve;
        s.onerror = resolve; // don't block page on a failed load
        document.head.appendChild(s);
      });
      scriptLoads.push(p);
    });

    // Inline head scripts — run after external scripts have loaded
    // (handled after the await in navigate)
    doc.head.querySelectorAll('script:not([src])').forEach(el => {
      const text = el.textContent.trim();
      if (!text || globalScriptTexts.has(text)) return;
      const s = document.createElement('script');
      [...el.attributes].forEach(a => s.setAttribute(a.name, a.value));
      s.textContent = text;
      s.dataset.spaPage = '1';
      document.head.appendChild(s);
    });

    return Promise.all(scriptLoads);
  }

  // ── Navigate ──────────────────────────────────────────────────────────────
  let _navigating = false; // lock — prevents concurrent navigate() calls from racing

  async function navigate(url, push = true) {
    if (_navigating) return;
    console.log('[SPA] navigate:', url);
    const content = document.getElementById('spa-content');
    if (!content) { console.warn('[SPA] no #spa-content'); return; }
    if (url === window.location.href) return;

    // Same pathname, different hash (e.g. /enterprise#africa → /enterprise#india)
    // Don't do a full content swap — just update the URL and fire hashchange so
    // the page's own region/tab script can handle it. This also prevents the
    // video AbortError caused by reloading the same page repeatedly.
    try {
      const target  = new URL(url, location.origin);
      const current = new URL(location.href);
      if (target.pathname === current.pathname && target.hash !== current.hash) {
        if (push) history.pushState({ spaUrl: url }, document.title, url);
        window.dispatchEvent(new HashChangeEvent('hashchange', {
          oldURL: location.href, newURL: url
        }));
        return;
      }
    } catch (_) {}

    _navigating = true;
    clearPageTimers();
    // Fire a synthetic beforeunload so page scripts can disconnect their
    // MutationObservers, IntersectionObservers, and other cleanup handlers
    // registered via window.addEventListener('beforeunload', fn). Without
    // this, each SPA navigation stacks a new set of observers on top of the
    // old ones, causing double/triple init and broken animations on return.
    window.dispatchEvent(new Event('beforeunload'));

    // ── Phase 1: fetch + content swap ──────────────────────────────────────
    // Any error here (network failure, parse error) is fatal — hard redirect.
    let doc;
    try {
      [doc] = await Promise.all([
        fetchPage(url),
        (() => {
          content.classList.add('spa-leave');
          return new Promise(r => _setTimeout(r, TRANSITION_MS));
        })()
      ]);

      destroySliders(content);
      content.innerHTML = extractContent(doc);
      refineGlobalScripts(doc);
      // Reset Finsweet global state so its script re-initializes cleanly
      // when re-inserted by syncHeadAssets. Without this, Finsweet sees its
      // own already-processed queue and skips DOM scanning / CMS item fetching.
      // Shim DOMContentLoaded on both document and window for the entire
      // script-loading phase (syncHeadAssets → loadBodyExternalScripts →
      // runScripts). External scripts re-inserted during syncHeadAssets
      // (e.g. Finsweet CMS Load/Filter) may register DOMContentLoaded
      // listeners expecting it to fire on page ready — in SPA context
      // DOMContentLoaded never re-fires, so we call the handler immediately.
      // Previously the shim only wrapped runScripts(), leaving Finsweet's
      // script (loaded during syncHeadAssets) without the shim → its
      // DOMContentLoaded listener was registered as a real listener that
      // never fired → CMS items were never fetched.
      // Push URL NOW — before any scripts run — so that inline scripts
      // (e.g. the reference page's custom fetch script) and external scripts
      // (e.g. Finsweet CMS Load) read the correct window.location.pathname /
      // href when they initialise and fetch CMS items.
      document.title = doc.title || document.title;
      if (push) history.pushState({ spaUrl: url }, doc.title, url);

      // Detect Finsweet BEFORE syncHeadAssets so it can be excluded from the
      // head-sync loop on every navigation (including the very first one).
      // The boot page (e.g. homepage) may not have Finsweet; we capture it from
      // the first fetched page that does and reuse the element on later navigations.
      const _docFsEl = doc.head.querySelector('script[src*="finsweet"]') || null;
      if (_docFsEl && !_fsEl) _fsEl = _docFsEl;

      const _origDocAdd = document.addEventListener.bind(document);
      const _origWinAdd = window.addEventListener.bind(window);
      const _dclShim = (origFn) => function (type, fn, ...rest) {
        if (type === 'DOMContentLoaded' && typeof fn === 'function') {
          try { fn(); } catch (e) { console.warn('[SPA] DOMContentLoaded handler error:', e.message); }
          return;
        }
        return origFn(type, fn, ...rest);
      };
      document.addEventListener = _dclShim(_origDocAdd);
      window.addEventListener   = _dclShim(_origWinAdd);

      try {
        await syncHeadAssets(doc);
        await loadBodyExternalScripts(content);

        // Unbind hamburger click handlers before re-running the nav script.
        if (window.jQuery) {
          try {
            window.jQuery('.napster-sm-hamberger, .napster-sm-close, .napster-sm-dropdown-block').off('click');
          } catch (_) {}
        }

        runScripts(content);

        // Finsweet Attributes v2 lifecycle — kept INSIDE this try/finally block
        // so the DOMContentLoaded shim is still active when the fresh Finsweet
        // module loads. Finsweet registers a DOMContentLoaded listener during
        // module execution; without the shim that listener never fires and
        // Finsweet never initialises (explaining why filter works on first SPA
        // nav — boot Finsweet's MutationObserver picks up the DOM swap — but
        // breaks on every subsequent navigation where only the SPA-injected
        // ?_spa=N script is present).
        //
        // Some pages (e.g. /reference) manage their own CMS via disableFinsweet().
        // On those pages: destroy the old Finsweet instance (stops MutationObserver)
        // but skip the reload (Finsweet would interfere with the custom render()).
        // _docFsEl and _fsEl are already resolved above (before syncHeadAssets).
        const _activeFsEl = _docFsEl || _fsEl;  // element whose attributes we clone

        // Run Finsweet lifecycle if either the destination needs it OR an
        // instance is currently alive (need to destroy it when leaving a CMS page).
        if (_activeFsEl || window.FinsweetAttributes) {
          try {
            console.log('[FS-DBG] nav to:', url, '| destHasFs:', !!_docFsEl, '| activeFs:', typeof window.FinsweetAttributes);
            // Always destroy to stop the previous page's MutationObserver.
            if (window.FinsweetAttributes) {
              try { await window.FinsweetAttributes.destroy(); console.log('[FS-DBG] destroy() done'); } catch (de) { console.log('[FS-DBG] destroy() error:', de.message); }
              delete window.FinsweetAttributes;
            }

            // Detect pages that manage their own CMS list (like /reference).
            // Content-based detection is unreliable because disableFinsweet /
            // loadAllItems are defined in a global Webflow custom-code snippet
            // that appears on every page. Use the destination URL instead.
            const _destPath = new URL(url, location.origin).pathname;
            const hasCustomCmsScript = _docFsEl && _destPath.startsWith('/reference');
            console.log('[FS-DBG] hasCustomCmsScript:', hasCustomCmsScript, '| shim active:', document.addEventListener !== _origDocAdd);

            if (_docFsEl && hasCustomCmsScript) {
              // Reference page: remove any lingering SPA-injected Finsweet scripts.
              const fsSrc2 = _activeFsEl.src.split('?')[0];
              document.querySelectorAll('script[src][data-spa-page]').forEach(s => {
                if (s.src.split('?')[0] === fsSrc2) s.remove();
              });
            } else if (_docFsEl) {
              // Normal CMS page (blog, case-studies…): reload Finsweet with cache-buster.
              const fsSrc = _activeFsEl.src.split('?')[0];
              document.querySelectorAll('script[src]').forEach(s => {
                if (s.src.split('?')[0] === fsSrc) s.remove();
              });
              const injectedSrc = fsSrc + '?_spa=' + (++_fsNavCount);
              console.log('[FS-DBG] injecting:', injectedSrc);
              await new Promise(resolve => {
                const s = document.createElement('script');
                [..._activeFsEl.attributes].forEach(a => s.setAttribute(a.name, a.value));
                s.src = injectedSrc;
                s.dataset.spaPage = '1';
                s.onerror = () => { console.log('[FS-DBG] script onerror'); resolve(); };
                s.onload = () => {
                  console.log('[FS-DBG] onload fired. FinsweetAttributes:', typeof window.FinsweetAttributes);
                  console.log('[FS-DBG] modules:', JSON.stringify(window.FinsweetAttributes?.modules));
                  let attempts = 0;
                  const check = () => {
                    const ver = window.FinsweetAttributes?.modules?.list?.version;
                    if (ver || attempts++ > 30) {
                      console.log('[FS-DBG] poll done. version:', ver, 'attempts:', attempts);
                      resolve();
                    } else {
                      _setTimeout(check, 100);
                    }
                  };
                  check();
                };
                document.head.appendChild(s);
              });
              console.log('[FS-DBG] after await. version:', window.FinsweetAttributes?.modules?.list?.version);
            }
          } catch (e) {
            console.warn('[SPA] Finsweet reload error:', e.message);
          }
        }
      } finally {
        document.addEventListener = _origDocAdd;
        window.addEventListener   = _origWinAdd;
      }
    } catch (err) {
      console.error('[SPA] fetch/swap error, hard-redirecting:', err);
      _navigating = false;
      window.location.href = url;
      return;
    }

    // ── Phase 2: Webflow reinit ────────────────────────────────────────────
    // Errors here must NOT hard-redirect — content is already swapped and the
    // page is usable. Webflow state corruption after several navigations is the
    // most common source of spurious redirects after 2-3 page navigations.
    try {
      if (window.Webflow) {
        // Strip the existing Webflow nav click handler before ready() re-adds it.
        // Without this, each Webflow.ready() call adds another handler on top of
        // the previous one — double-toggling the menu so it opens then immediately
        // closes, making the hamburger appear broken after the first navigation.
        if (window.jQuery) window.jQuery('.w-nav-button').off('.w-nav');
        window.Webflow.ready();
      }
    } catch (e) {
      console.warn('[SPA] Webflow.ready() error (ignored):', e.message);
    }
    try {
      const ix2 = window.Webflow && window.Webflow.require('ix2');
      if (ix2) ix2.init();
    } catch (e) {
      console.warn('[SPA] ix2.init() error (ignored):', e.message);
    }


    window.dispatchEvent(new Event('resize'));

    // ── Phase 3: UI cleanup ────────────────────────────────────────────────
    const _hash = new URL(url, location.origin).hash;

    // Helper — find the hash target using id, name, or querySelector.
    // querySelector fails on IDs that start with a digit or contain special
    // characters, so getElementById is tried first.
    const scrollToHash = (_h) => {
      const id = _h.slice(1); // strip leading #
      const el = document.getElementById(id) ||
                 document.querySelector(`[name="${id}"]`) ||
                 (() => { try { return document.querySelector(_h); } catch (_) { return null; } })();
      if (el) el.scrollIntoView({ behavior: 'smooth' });
    };

    content.classList.remove('spa-leave');
    content.classList.add('spa-enter');

    if (_hash) {
      // Don't scroll to top at all — scroll to the hash element instead.
      // Try immediately after transition (rAF) and again after 350 ms in case
      // the target element is rendered asynchronously (e.g. by Finsweet).
      requestAnimationFrame(() => requestAnimationFrame(() => {
        content.classList.remove('spa-enter');
        scrollToHash(_hash);
      }));
      _setTimeout(() => scrollToHash(_hash), 350);
    } else {
      requestAnimationFrame(() => requestAnimationFrame(() => {
        content.classList.remove('spa-enter');
        // Nudge scroll by 1px so the browser re-evaluates IntersectionObservers.
        window.scrollTo({ top: 1, behavior: 'instant' });
        requestAnimationFrame(() => window.scrollTo({ top: 0, behavior: 'instant' }));
      }));
      window.scrollTo({ top: 0, behavior: 'instant' });
    }

    updateActiveLinks(url);

    _navigating = false;
  }

  // ── Active nav links ──────────────────────────────────────────────────────
  function updateActiveLinks(url) {
    const sel = PERSISTENT_SELECTORS.map(s => `${s} a`).join(', ');
    document.querySelectorAll(sel).forEach(a => {
      try {
        const href = a.getAttribute('href');
        if (!href) return;
        const active = new URL(href, location.origin).pathname === new URL(url, location.origin).pathname;
        a.classList.toggle('w--current', active);
        a.setAttribute('aria-current', active ? 'page' : 'false');
      } catch (_) {}
    });
  }


  function closeMobileNav() {

    document.querySelectorAll('.w-dropdown, .w-dropdown-toggle, .w-dropdown-list').forEach(el => {
      el.classList.remove('w--open');
    });
    document.querySelectorAll('.w-dropdown-toggle[aria-expanded="true"]').forEach(el => {
      el.setAttribute('aria-expanded', 'false');
    });
    // Standard Webflow mobile nav open state
    document.querySelectorAll('.w-nav-button, .w-nav-menu, .w-nav-overlay').forEach(el => {
      el.classList.remove('w--open');
    });
    document.querySelectorAll('.w-nav-button[aria-expanded="true"]').forEach(el => {
      el.setAttribute('aria-expanded', 'false');
    });
    // Napster custom mobile nav:
    //   $('.napster-sm-hamberger').click → $('.napster-sm-menu').toggleClass('napster-sm-menu-open')
    //                                      $('body').addClass('hide-overflow')
    //   $('.napster-sm-close').click    → remove 'napster-sm-menu-open' from .napster-sm-menu
    //                                      remove 'hide-overflow' from body
    // The open class lives on .napster-sm-menu, NOT on body.
    const smMenu = document.querySelector('.napster-sm-menu');
    if (smMenu) smMenu.classList.remove('napster-sm-menu-open');
    document.body.classList.remove(
      'hide-overflow', 'overflow-hidden', 'noscroll', 'no-scroll',
      'w-nav-overlay-open', 'nav-open'
    );
    document.body.style.overflow = '';
  }

  // ── Internal link check ───────────────────────────────────────────────────
  function isInternalLink(a) {
    if (!a || a.tagName !== 'A') return false;
    if (a.target === '_blank' || a.target === '_parent') return false;
    if (a.hasAttribute('download')) return false;
    const href = a.getAttribute('href');
    if (!href || href.startsWith('#') || href.startsWith('mailto:') || href.startsWith('tel:')) return false;
    try { return new URL(a.href, location.origin).origin === location.origin; }
    catch (_) { return false; }
  }

  document.addEventListener('click', e => {
    const a = e.target.closest('a');
    if (!isInternalLink(a)) return;
    // Same pathname but different query string = Finsweet/Webflow pagination.
    // Don't intercept — let Finsweet's own click handler manage it.
    try {
      const t = new URL(a.href, location.origin);
      const c = new URL(location.href);
      if (t.pathname === c.pathname && t.search !== c.search && !t.hash) return;
    } catch (_) {}
    e.preventDefault();
    e.stopImmediatePropagation();
    closeMobileNav();
    navigate(a.href);
  }, true);

  let _tapX = 0, _tapY = 0;
  document.addEventListener('touchstart', e => {
    _tapX = e.touches[0].clientX;
    _tapY = e.touches[0].clientY;
  }, { passive: true, capture: true });

  document.addEventListener('touchend', e => {
    if (Math.abs(e.changedTouches[0].clientX - _tapX) > 10 ||
        Math.abs(e.changedTouches[0].clientY - _tapY) > 10) return; // scroll
    const a = e.target.closest('a');
    if (!isInternalLink(a)) return;
    try {
      const t = new URL(a.href, location.origin);
      const c = new URL(location.href);
      if (t.pathname === c.pathname && t.search !== c.search && !t.hash) return;
    } catch (_) {}
    e.preventDefault(); // suppress the synthetic click that would fire next
    closeMobileNav();
    navigate(a.href);
  }, true);

  window.addEventListener('popstate', e => {
    navigate(e.state?.spaUrl || location.href, false);
  });

  // ── Bootstrap ─────────────────────────────────────────────────────────────
  function boot() {
    // Snapshot ALL scripts on the initial page — these are global assets that
    // must never be re-executed during SPA navigation.
    document.querySelectorAll('script:not([src])').forEach(s => {
      const t = s.textContent.trim();
      if (t) globalScriptTexts.add(t);
    });
    document.querySelectorAll('script[src]').forEach(s => {
      if (s.src) globalExternalSrcs.add(s.src);
    });
 
    globalExternalSrcs.add('https://cdn.jsdelivr.net/npm/@touchcastllc/napster-companion-api@latest/lib/index.standalone.js');


    const agentWrapper = document.querySelector('.agent-wraper');
    if (agentWrapper && agentWrapper.parentElement !== document.body) {
      document.body.appendChild(agentWrapper);
      console.log('[SPA] lifted .agent-wraper to body level');
    }


    if (window.Swup) {
      window.Swup = function NoopSwup() {
        return { hooks: { on: function () {} }, destroy: function () {} };
      };
      console.log('[SPA] neutralized Swup — prevented dual-router conflict');
    }

    // Capture the full Finsweet script element so all attributes
    // (type="module", fs-list, async…) are preserved on each reinsertion.
    _fsEl = document.querySelector('script[src*="finsweet"]') || null;

    history.replaceState({ spaUrl: location.href }, document.title, location.href);
    wrapContent();
    updateActiveLinks(location.href);
    console.log('[SPA] booted — global scripts snapshotted:', globalScriptTexts.size);

    // ── Boot-time $ pollution repair ──────────────────────────────────────────
    // If a page-specific script declared `const $ = ...` at the top level, it
    // permanently shadows jQuery's window.$ in the Global Declarative Environment.
    // jQuery fires $(document).ready() callbacks asynchronously (Promise microtask),
    // so by the time those callbacks run, const $ is already declared.
    // Every $(document).ready(fn) call threw "null.ready()" — fn was never even
    // passed to jQuery — so nothing got initialised (mobile menu, lightbox, etc.).
    //
    // Fix: re-run every jQuery-dependent inline script with ($=window.jQuery)
    // injected as a parameter.  This is safe because the original calls threw
    // before any side-effects, so there is no double-binding risk.
    // The polluting script itself (the one with `const $ = ...`) is skipped.
    if (window.jQuery && $ !== window.jQuery) {
      console.warn('[SPA] global $ is shadowed — re-running jQuery-dependent scripts at boot');
      document.querySelectorAll('script:not([src])').forEach(el => {
        const text = el.textContent.trim();
        if (!text) return;
        if (/\bconst\s+\$\s*=/.test(text)) return; // skip the polluting script
        if (!/\$\s*[.(]/.test(text)) return;        // skip non-jQuery scripts
        try {
          const s = document.createElement('script');
          s.textContent = `(function($,jQuery){\n${text}\n})(window.jQuery,window.jQuery);`;
          document.head.appendChild(s);
        } catch (e) {
          console.warn('[SPA] boot re-run error:', e.message);
        }
      });
    }
  }

  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', boot);
  } else {
    boot();
  }

})();

</script> --><script type="text/javascript" defer  src="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js"></script>
<script>
  document.addEventListener('DOMContentLoaded', function () {
    const btn = document.getElementById('downloadAppBtn');
    if (!btn) return;

    const ua = navigator.userAgent;
    const platform = navigator.platform;

    let link = 'https://companiondesktop.blob.core.windows.net/application/builds/Napster.dmg';

    // iOS (including iPadOS pretending to be Mac)
    if (/iPhone|iPad|iPod/.test(ua) || (platform === 'MacIntel' && navigator.maxTouchPoints > 1)) {
      link = 'https://apps.apple.com/us/app/napster-ai-music-experts/id584557117';

      // Mac (REAL Mac)
    } else if (platform.toUpperCase().includes('MAC')) {
      link = 'https://companiondesktop.blob.core.windows.net/application/builds/Napster.dmg';

      // Android (move LAST)
    } else if (/Android/.test(ua)) {
      link = 'https://play.google.com/store/apps/details?id=com.rhapsody.napster&pcampaignid=web_share';
    }

    btn.setAttribute('href', link);
  });

  $(document).ready(function () {
    let forward = true;
    var slider = $('.napster-products-slide');

    slider.slick({
      slidesToShow: 1,
      arrows: false,
      infinite: false,
      pauseOnHover: true,
      centerMode: true,
      centerPadding: '174px',
      autoplay: true,
      autoplaySpeed: 12000,
      initialSlide: 0,
      slidesToScroll: 1,
      slidesToShow: 1,
      responsive: [
        {
          breakpoint: 2100,
          settings: {
            centerPadding: '40px',
          },
        },
        {
          breakpoint: 1024,
          settings: {
            centerPadding: '40px',
          },
        },
        {
          breakpoint: 768,
          settings: {
            centerPadding: '20px',
          },
        },
        {
          breakpoint: 480,
          settings: {
            centerMode: false,
          },
        },
      ],
    });

    $('.npr-products-nav-btn .right')
      .closest('.npr-products-nav-btn')
      .click(function () {
        slider.slick('slickNext');
      });

    $('.npr-products-nav-btn')
      .first()
      .click(function () {
        slider.slick('slickPrev');
      });

    $('.npr-prducts-nav-list-item').click(function () {
      var index = $(this).index();
      slider.slick('slickGoTo', index);
    });

    slider.on('afterChange', function (event, slick, currentSlide) {
      // $('.npr-prducts-nav-list-item').removeClass('active');
      // $('.npr-prducts-nav-list-item').eq(currentSlide).addClass('active');
      restartProgressBar(currentSlide);
    });

    function restartProgressBar(index) {
      var items = $('.npr-prducts-nav-list-item');
      items.removeClass('active');
      var current = items.eq(index);
      // Force reflow to restart animation
      current.removeClass('active');
      void current[0].offsetWidth;
      current.addClass('active');
    }

    restartProgressBar(0);

    //timerstop
    var $sliderEl = $('.napster-products-slide');
    $sliderEl.on('mouseenter', function () {
      $('.npr-prducts-nav-list-item.active').addClass('paused');
    });
    $sliderEl.on('mouseleave', function () {
      $('.npr-prducts-nav-list-item.active').removeClass('paused');
    });

    slider.on('afterChange', function (event, slick, currentSlide) {
      if (currentSlide === 0) {
        $('.npr-products-nav-btn').first().addClass('disabled');
      } else {
        $('.npr-products-nav-btn').first().removeClass('disabled');
      }

      if (currentSlide === slick.slideCount - 1) {
        $('.npr-products-nav-btn').last().addClass('disabled');
      } else {
        $('.npr-products-nav-btn').last().removeClass('disabled');
      }
    });
    //
    $('.napster-products-slide').on('afterChange', function (event, slick, currentSlide) {
      const last = slick.slideCount - 1;

      if (forward && currentSlide === last) {
        forward = false; // switch direction to backward
      } else if (!forward && currentSlide === 0) {
        forward = true; // switch direction to forward
      }
    });

    $('.napster-trusted-scroll-1').slick({
      dots: false,
      arrows: false,
      infinite: true,
      autoplay: true,
      slidesToShow: 1,
      slidesToScroll: 1,
      speed: 12000,
      autoplaySpeed: 0,
      centerMode: true,
      cssEase: 'linear',
      variableWidth: true,
      initialSlide: 1,
      arrows: false,
      buttons: false,
      pauseOnFocus: false,
      pauseOnHover: false,
    });

    function initVideoObserver() {
      const videos = document.querySelectorAll('video');

      if (!videos.length) return;

      const observer = new IntersectionObserver(
        function (entries) {
          entries.forEach(function (entry) {
            if (entry.isIntersecting) {
              entry.target.setAttribute('autoplay', true);
              entry.target.play().catch(function () {});
            } else {
              entry.target.setAttribute('autoplay', false);
              entry.target.pause();
            }
          });
        },
        { threshold: 0.25 },
      );

      videos.forEach((video) => {
        if (video) observer.observe(video);
      });
    }

    initVideoObserver();
  });

$(document).ready(function () {

  // Open popup + play video
 /* $('#watch-film').on('click', function (e) {
    e.preventDefault();
	$('.home').addClass('overflow-hidden');
    $('.bg-video-popup-wraper').fadeIn();

    const video = $('#homeVideo')[0];
    video.currentTime = 0;
    $(video).html(
      `<source src="https://demoassets.touchcast.com/webflow-assets/videos/napster-intro-new_1.webm" type="video/webm">
      <source src="https://demoassets.touchcast.com/webflow-assets/videos/napster-intro-new_1.mp4" type="video/mp4">`
    );
    video.load();
    video.play();
  });*/

  // Close popup + pause video
 /* $('a#popupclose').on('click', function (e) {
    e.preventDefault();
    $('.bg-video-popup-wraper').fadeOut();
	$('.home').removeClass('overflow-hidden');
    const video = $('#homeVideo')[0];
    video.pause();
    video.currentTime = 0;
    $(video).find('source').remove(); 
    video.load();
  });*/

});

if ('mediaSession' in navigator) {
  var noop = function() {};
  var actions = [
    'play', 'pause', 'stop',
    'seekbackward', 'seekforward', 'seekto',
    'previoustrack', 'nexttrack',
    'skipad'
  ];
  actions.forEach(function(action) {
    try { navigator.mediaSession.setActionHandler(action, noop); } catch(e) {}
  });

  navigator.mediaSession.playbackState = 'none';
  var v = document.querySelector('video.station-film-secondary-img');
  if (v) {
    v.addEventListener('pause', function() {
      navigator.mediaSession.playbackState = 'none';
    });
    v.addEventListener('ended', function() {
      navigator.mediaSession.playbackState = 'none';
    });
    v.addEventListener('play', function() {
      navigator.mediaSession.playbackState = 'none';
    });
  }
}
  
</script></body></html><!--/$-->