{
  "version": 3,
  "sources": ["/cdn/shop/t/83/assets/laley-media-feature.js?lly=laley-custom-20260908-illustrations-v848"],
  "sourcesContent": ["if (!customElements.get('laley-media-feature')) {\n  customElements.define('laley-media-feature', class extends HTMLElement {\n    connectedCallback() {\n      this.video = this.querySelector('video');\n      this.toggle = this.querySelector('[data-laley-media-toggle]');\n      if (!this.video || this.dataset.laleyMediaReady === 'true') return;\n\n      this.dataset.laleyMediaReady = 'true';\n      this.lifecycle = {};\n      this.motionQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n      this.reduceMotion = this.motionQuery.matches;\n      this.userPaused = false;\n      this.userStarted = false;\n      this.pageVisible = true;\n      this.pendingPlay = null;\n      this.autoplayBlocked = false;\n      this.hasVideoFrame = !this.video.paused && this.video.readyState >= 2;\n      this.inView = this.isNearViewport();\n      this.externallyActive = this.closest('[data-laley-carousel-slide]')?.getAttribute('aria-hidden') !== 'true';\n\n      this.prepareVideo();\n      this.onReadiness = () => this.syncPlayback();\n      this.onVisibility = () => this.syncPlayback();\n      this.onPageShow = () => { this.pageVisible = true; this.syncPlayback(); };\n      this.onPageHide = () => { this.pageVisible = false; this.syncPlayback(); };\n      this.onMotionChange = () => {\n        this.reduceMotion = this.motionQuery.matches;\n        this.userStarted = false;\n        this.syncPlayback();\n      };\n      this.onStateChange = (event) => {\n        if ((event.type === 'play' || event.type === 'playing') && !this.shouldPlay()) this.video.pause();\n        if (event.type === 'playing') this.hasVideoFrame = true;\n        if (event.type === 'emptied') this.hasVideoFrame = false;\n        if (event.type === 'error') {\n          this.autoplayBlocked = true;\n          this.prepareVideo(false);\n        }\n        this.syncState();\n      };\n\n      ['loadedmetadata', 'loadeddata', 'canplay', 'canplaythrough'].forEach((eventName) => {\n        this.video.addEventListener(eventName, this.onReadiness);\n      });\n      ['play', 'playing', 'pause', 'waiting', 'ended', 'error', 'emptied'].forEach((eventName) => {\n        this.video.addEventListener(eventName, this.onStateChange);\n      });\n      document.addEventListener('visibilitychange', this.onVisibility);\n      window.addEventListener('pageshow', this.onPageShow);\n      window.addEventListener('pagehide', this.onPageHide);\n      this.motionQuery.addEventListener('change', this.onMotionChange);\n\n      if (this.toggle) {\n        this.onToggle = () => {\n          if (this.video.paused) {\n            this.userPaused = false;\n            this.userStarted = true;\n            this.autoplayBlocked = false;\n            if (this.video.error) this.video.load();\n          } else {\n            this.userPaused = true;\n          }\n          this.syncPlayback();\n        };\n        this.toggle.addEventListener('click', this.onToggle);\n      }\n\n      if ('IntersectionObserver' in window) {\n        this.observer = new window.IntersectionObserver(([entry]) => {\n          this.inView = entry.isIntersecting;\n          this.syncPlayback();\n        }, { threshold: 0 });\n        this.observer.observe(this);\n        // Give mobile connections a head start without playing off-screen.\n        this.preloadObserver = new window.IntersectionObserver(([entry]) => {\n          if (!entry.isIntersecting || this.reduceMotion || !this.externallyActive || document.hidden) return;\n          this.hydrateDeferredSource();\n          this.preloadObserver.disconnect();\n        }, { rootMargin: '700px 0px', threshold: 0 });\n        this.preloadObserver.observe(this);\n      } else {\n        this.onViewport = () => { this.inView = this.isNearViewport(); this.syncPlayback(); };\n        window.addEventListener('scroll', this.onViewport, { passive: true });\n        window.addEventListener('resize', this.onViewport, { passive: true });\n      }\n      this.syncPlayback();\n      this.syncState();\n    }\n\n    disconnectedCallback() {\n      this.lifecycle = null;\n      this.pendingPlay = null;\n      this.observer?.disconnect();\n      this.preloadObserver?.disconnect();\n      this.toggle?.removeEventListener('click', this.onToggle);\n      if (!this.video) return;\n\n      ['loadedmetadata', 'loadeddata', 'canplay', 'canplaythrough'].forEach((eventName) => {\n        this.video.removeEventListener(eventName, this.onReadiness);\n      });\n      ['play', 'playing', 'pause', 'waiting', 'ended', 'error', 'emptied'].forEach((eventName) => {\n        this.video.removeEventListener(eventName, this.onStateChange);\n      });\n      document.removeEventListener('visibilitychange', this.onVisibility);\n      window.removeEventListener('pageshow', this.onPageShow);\n      window.removeEventListener('pagehide', this.onPageHide);\n      this.motionQuery?.removeEventListener('change', this.onMotionChange);\n      if (this.onViewport) {\n        window.removeEventListener('scroll', this.onViewport);\n        window.removeEventListener('resize', this.onViewport);\n      }\n      this.prepareVideo(false);\n      this.video.pause();\n      delete this.dataset.laleyMediaReady;\n    }\n\n    prepareVideo(autoplay = false) {\n      this.video.muted = true;\n      this.video.defaultMuted = true;\n      this.video.autoplay = autoplay;\n      this.video.loop = true;\n      this.video.controls = false;\n      this.video.playsInline = true;\n      this.video.disablePictureInPicture = true;\n      this.video.setAttribute('muted', '');\n      this.video.toggleAttribute('autoplay', autoplay);\n      this.video.setAttribute('loop', '');\n      this.video.setAttribute('playsinline', '');\n      this.video.setAttribute('webkit-playsinline', '');\n      this.video.setAttribute('disablepictureinpicture', '');\n      this.video.removeAttribute('controls');\n    }\n\n    isNearViewport() {\n      const rect = this.getBoundingClientRect();\n      return rect.width > 0\n        && rect.height > 0\n        && rect.bottom > 0\n        && rect.top < window.innerHeight;\n    }\n\n    setActive(active, allowMotion = false) {\n      // A carousel resume/new active slide may try once again. Readiness\n      // events themselves never retry an autoplay rejection in a loop.\n      if (active && !this.externallyActive) this.autoplayBlocked = false;\n      this.externallyActive = Boolean(active);\n      if (allowMotion) this.userStarted = true;\n      if (!this.video) return;\n      this.syncPlayback();\n    }\n\n    shouldPlay() {\n      return this.externallyActive\n        && Boolean(this.lifecycle)\n        && this.pageVisible\n        && this.inView\n        && !document.hidden\n        && !this.userPaused\n        && (!this.reduceMotion || this.userStarted);\n    }\n\n    hydrateDeferredSource() {\n      if (!this.video || this.video.getAttribute('src')) return;\n      const candidates = [...this.video.querySelectorAll('source[data-laley-src]')];\n      if (!candidates.length) return;\n\n      const selected = candidates.find((source) => source.dataset.laleySrc.includes('SD-480p'))\n        || candidates.sort((first, second) => {\n          const firstHeight = Number(first.dataset.laleyHeight) || Number.POSITIVE_INFINITY;\n          const secondHeight = Number(second.dataset.laleyHeight) || Number.POSITIVE_INFINITY;\n          return firstHeight - secondHeight;\n        })[0];\n      if (!selected?.dataset.laleySrc) return;\n\n      this.video.preload = 'auto';\n      this.video.src = selected.dataset.laleySrc;\n      candidates.forEach((source) => source.remove());\n      this.video.load();\n    }\n\n    syncPlayback() {\n      if (!this.video) return;\n      const active = this.shouldPlay() && !this.autoplayBlocked;\n      if (active) this.hydrateDeferredSource();\n      this.prepareVideo(active);\n      if (!active) {\n        const pending = this.pendingPlay;\n        this.pendingPlay = null;\n        if (pending || !this.video.paused) this.video.pause();\n        this.syncState();\n        return;\n      }\n\n      this.tryPlay();\n    }\n\n    tryPlay() {\n      if (!this.shouldPlay() || this.autoplayBlocked || !this.video.paused || this.pendingPlay) return;\n      const lifecycle = this.lifecycle;\n      const request = {};\n      this.pendingPlay = request;\n      const settle = (failed = false) => {\n        if (this.lifecycle !== lifecycle) return;\n        if (this.pendingPlay === request) {\n          this.pendingPlay = null;\n          this.autoplayBlocked = failed && this.shouldPlay();\n          this.prepareVideo(this.shouldPlay() && !this.autoplayBlocked);\n        }\n        if (!this.shouldPlay()) this.video.pause();\n        this.syncState();\n      };\n      try {\n        const attempt = this.video.play();\n        if (attempt?.then) attempt.then(() => settle(), (error) => settle(error?.name !== 'AbortError'));\n        else settle();\n      } catch (_error) { settle(true); }\n    }\n\n    syncState() {\n      if (!this.video) return;\n      const isPaused = this.video.paused;\n      const isPlaying = !isPaused && !this.video.ended && this.video.readyState >= 2;\n      this.classList.toggle('is-video-playing', isPlaying);\n      // Once a frame is playing, keep it on pause/buffering/scroll-away.\n      // Returning to the original poster here creates a visible flash.\n      this.classList.toggle('has-video-frame', this.hasVideoFrame);\n      this.classList.toggle('is-video-fallback', !this.hasVideoFrame);\n      if (this.autoplayBlocked) this.dataset.laleyMediaAutoplayBlocked = 'true';\n      else delete this.dataset.laleyMediaAutoplayBlocked;\n      if (!this.toggle) return;\n      this.toggle.setAttribute('aria-pressed', String(!isPaused));\n      this.toggle.setAttribute('aria-label', isPaused ? 'Spill av video' : 'Sett video p\u00E5 pause');\n      this.toggle.querySelector('[data-laley-media-pause]')?.toggleAttribute('hidden', isPaused);\n      this.toggle.querySelector('[data-laley-media-play]')?.toggleAttribute('hidden', !isPaused);\n    }\n  });\n}\n"],
  "mappings": "AAAK,eAAe,IAAI,qBAAqB,GAC3C,eAAe,OAAO,sBAAuB,cAAc,WAAY,CACrE,mBAAoB,CAClB,KAAK,MAAQ,KAAK,cAAc,OAAO,EACvC,KAAK,OAAS,KAAK,cAAc,2BAA2B,EACxD,GAAC,KAAK,OAAS,KAAK,QAAQ,kBAAoB,UAEpD,KAAK,QAAQ,gBAAkB,OAC/B,KAAK,UAAY,CAAC,EAClB,KAAK,YAAc,OAAO,WAAW,kCAAkC,EACvE,KAAK,aAAe,KAAK,YAAY,QACrC,KAAK,WAAa,GAClB,KAAK,YAAc,GACnB,KAAK,YAAc,GACnB,KAAK,YAAc,KACnB,KAAK,gBAAkB,GACvB,KAAK,cAAgB,CAAC,KAAK,MAAM,QAAU,KAAK,MAAM,YAAc,EACpE,KAAK,OAAS,KAAK,eAAe,EAClC,KAAK,iBAAmB,KAAK,QAAQ,6BAA6B,GAAG,aAAa,aAAa,IAAM,OAErG,KAAK,aAAa,EAClB,KAAK,YAAc,IAAM,KAAK,aAAa,EAC3C,KAAK,aAAe,IAAM,KAAK,aAAa,EAC5C,KAAK,WAAa,IAAM,CAAE,KAAK,YAAc,GAAM,KAAK,aAAa,CAAG,EACxE,KAAK,WAAa,IAAM,CAAE,KAAK,YAAc,GAAO,KAAK,aAAa,CAAG,EACzE,KAAK,eAAiB,IAAM,CAC1B,KAAK,aAAe,KAAK,YAAY,QACrC,KAAK,YAAc,GACnB,KAAK,aAAa,CACpB,EACA,KAAK,cAAiB,OAAU,EACzB,MAAM,OAAS,QAAU,MAAM,OAAS,YAAc,CAAC,KAAK,WAAW,GAAG,KAAK,MAAM,MAAM,EAC5F,MAAM,OAAS,YAAW,KAAK,cAAgB,IAC/C,MAAM,OAAS,YAAW,KAAK,cAAgB,IAC/C,MAAM,OAAS,UACjB,KAAK,gBAAkB,GACvB,KAAK,aAAa,EAAK,GAEzB,KAAK,UAAU,CACjB,EAEA,CAAC,iBAAkB,aAAc,UAAW,gBAAgB,EAAE,QAAS,WAAc,CACnF,KAAK,MAAM,iBAAiB,UAAW,KAAK,WAAW,CACzD,CAAC,EACD,CAAC,OAAQ,UAAW,QAAS,UAAW,QAAS,QAAS,SAAS,EAAE,QAAS,WAAc,CAC1F,KAAK,MAAM,iBAAiB,UAAW,KAAK,aAAa,CAC3D,CAAC,EACD,SAAS,iBAAiB,mBAAoB,KAAK,YAAY,EAC/D,OAAO,iBAAiB,WAAY,KAAK,UAAU,EACnD,OAAO,iBAAiB,WAAY,KAAK,UAAU,EACnD,KAAK,YAAY,iBAAiB,SAAU,KAAK,cAAc,EAE3D,KAAK,SACP,KAAK,SAAW,IAAM,CAChB,KAAK,MAAM,QACb,KAAK,WAAa,GAClB,KAAK,YAAc,GACnB,KAAK,gBAAkB,GACnB,KAAK,MAAM,OAAO,KAAK,MAAM,KAAK,GAEtC,KAAK,WAAa,GAEpB,KAAK,aAAa,CACpB,EACA,KAAK,OAAO,iBAAiB,QAAS,KAAK,QAAQ,GAGjD,yBAA0B,QAC5B,KAAK,SAAW,IAAI,OAAO,qBAAqB,CAAC,CAAC,KAAK,IAAM,CAC3D,KAAK,OAAS,MAAM,eACpB,KAAK,aAAa,CACpB,EAAG,CAAE,UAAW,CAAE,CAAC,EACnB,KAAK,SAAS,QAAQ,IAAI,EAE1B,KAAK,gBAAkB,IAAI,OAAO,qBAAqB,CAAC,CAAC,KAAK,IAAM,CAC9D,CAAC,MAAM,gBAAkB,KAAK,cAAgB,CAAC,KAAK,kBAAoB,SAAS,SACrF,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,WAAW,EAClC,EAAG,CAAE,WAAY,YAAa,UAAW,CAAE,CAAC,EAC5C,KAAK,gBAAgB,QAAQ,IAAI,IAEjC,KAAK,WAAa,IAAM,CAAE,KAAK,OAAS,KAAK,eAAe,EAAG,KAAK,aAAa,CAAG,EACpF,OAAO,iBAAiB,SAAU,KAAK,WAAY,CAAE,QAAS,EAAK,CAAC,EACpE,OAAO,iBAAiB,SAAU,KAAK,WAAY,CAAE,QAAS,EAAK,CAAC,GAEtE,KAAK,aAAa,EAClB,KAAK,UAAU,EACjB,CAEA,sBAAuB,CACrB,KAAK,UAAY,KACjB,KAAK,YAAc,KACnB,KAAK,UAAU,WAAW,EAC1B,KAAK,iBAAiB,WAAW,EACjC,KAAK,QAAQ,oBAAoB,QAAS,KAAK,QAAQ,EAClD,KAAK,QAEV,CAAC,iBAAkB,aAAc,UAAW,gBAAgB,EAAE,QAAS,WAAc,CACnF,KAAK,MAAM,oBAAoB,UAAW,KAAK,WAAW,CAC5D,CAAC,EACD,CAAC,OAAQ,UAAW,QAAS,UAAW,QAAS,QAAS,SAAS,EAAE,QAAS,WAAc,CAC1F,KAAK,MAAM,oBAAoB,UAAW,KAAK,aAAa,CAC9D,CAAC,EACD,SAAS,oBAAoB,mBAAoB,KAAK,YAAY,EAClE,OAAO,oBAAoB,WAAY,KAAK,UAAU,EACtD,OAAO,oBAAoB,WAAY,KAAK,UAAU,EACtD,KAAK,aAAa,oBAAoB,SAAU,KAAK,cAAc,EAC/D,KAAK,aACP,OAAO,oBAAoB,SAAU,KAAK,UAAU,EACpD,OAAO,oBAAoB,SAAU,KAAK,UAAU,GAEtD,KAAK,aAAa,EAAK,EACvB,KAAK,MAAM,MAAM,EACjB,OAAO,KAAK,QAAQ,gBACtB,CAEA,aAAa,SAAW,GAAO,CAC7B,KAAK,MAAM,MAAQ,GACnB,KAAK,MAAM,aAAe,GAC1B,KAAK,MAAM,SAAW,SACtB,KAAK,MAAM,KAAO,GAClB,KAAK,MAAM,SAAW,GACtB,KAAK,MAAM,YAAc,GACzB,KAAK,MAAM,wBAA0B,GACrC,KAAK,MAAM,aAAa,QAAS,EAAE,EACnC,KAAK,MAAM,gBAAgB,WAAY,QAAQ,EAC/C,KAAK,MAAM,aAAa,OAAQ,EAAE,EAClC,KAAK,MAAM,aAAa,cAAe,EAAE,EACzC,KAAK,MAAM,aAAa,qBAAsB,EAAE,EAChD,KAAK,MAAM,aAAa,0BAA2B,EAAE,EACrD,KAAK,MAAM,gBAAgB,UAAU,CACvC,CAEA,gBAAiB,CACf,MAAM,KAAO,KAAK,sBAAsB,EACxC,OAAO,KAAK,MAAQ,GACf,KAAK,OAAS,GACd,KAAK,OAAS,GACd,KAAK,IAAM,OAAO,WACzB,CAEA,UAAU,OAAQ,YAAc,GAAO,CAGjC,QAAU,CAAC,KAAK,mBAAkB,KAAK,gBAAkB,IAC7D,KAAK,iBAAmB,EAAQ,OAC5B,cAAa,KAAK,YAAc,IAC/B,KAAK,OACV,KAAK,aAAa,CACpB,CAEA,YAAa,CACX,OAAO,KAAK,kBACP,EAAQ,KAAK,WACb,KAAK,aACL,KAAK,QACL,CAAC,SAAS,QACV,CAAC,KAAK,aACL,CAAC,KAAK,cAAgB,KAAK,YACnC,CAEA,uBAAwB,CACtB,GAAI,CAAC,KAAK,OAAS,KAAK,MAAM,aAAa,KAAK,EAAG,OACnD,MAAM,WAAa,CAAC,GAAG,KAAK,MAAM,iBAAiB,wBAAwB,CAAC,EAC5E,GAAI,CAAC,WAAW,OAAQ,OAExB,MAAM,SAAW,WAAW,KAAM,QAAW,OAAO,QAAQ,SAAS,SAAS,SAAS,CAAC,GACnF,WAAW,KAAK,CAAC,MAAO,SAAW,CACpC,MAAM,YAAc,OAAO,MAAM,QAAQ,WAAW,GAAK,OAAO,kBAC1D,aAAe,OAAO,OAAO,QAAQ,WAAW,GAAK,OAAO,kBAClE,OAAO,YAAc,YACvB,CAAC,EAAE,CAAC,EACD,UAAU,QAAQ,WAEvB,KAAK,MAAM,QAAU,OACrB,KAAK,MAAM,IAAM,SAAS,QAAQ,SAClC,WAAW,QAAS,QAAW,OAAO,OAAO,CAAC,EAC9C,KAAK,MAAM,KAAK,EAClB,CAEA,cAAe,CACb,GAAI,CAAC,KAAK,MAAO,OACjB,MAAM,OAAS,KAAK,WAAW,GAAK,CAAC,KAAK,gBAG1C,GAFI,QAAQ,KAAK,sBAAsB,EACvC,KAAK,aAAa,MAAM,EACpB,CAAC,OAAQ,CACX,MAAM,QAAU,KAAK,YACrB,KAAK,YAAc,MACf,SAAW,CAAC,KAAK,MAAM,SAAQ,KAAK,MAAM,MAAM,EACpD,KAAK,UAAU,EACf,MACF,CAEA,KAAK,QAAQ,CACf,CAEA,SAAU,CACR,GAAI,CAAC,KAAK,WAAW,GAAK,KAAK,iBAAmB,CAAC,KAAK,MAAM,QAAU,KAAK,YAAa,OAC1F,MAAM,UAAY,KAAK,UACjB,QAAU,CAAC,EACjB,KAAK,YAAc,QACnB,MAAM,OAAS,CAAC,OAAS,KAAU,CAC7B,KAAK,YAAc,YACnB,KAAK,cAAgB,UACvB,KAAK,YAAc,KACnB,KAAK,gBAAkB,QAAU,KAAK,WAAW,EACjD,KAAK,aAAa,KAAK,WAAW,GAAK,CAAC,KAAK,eAAe,GAEzD,KAAK,WAAW,GAAG,KAAK,MAAM,MAAM,EACzC,KAAK,UAAU,EACjB,EACA,GAAI,CACF,MAAM,QAAU,KAAK,MAAM,KAAK,EAC5B,SAAS,KAAM,QAAQ,KAAK,IAAM,OAAO,EAAI,OAAU,OAAO,OAAO,OAAS,YAAY,CAAC,EAC1F,OAAO,CACd,MAAiB,CAAE,OAAO,EAAI,CAAG,CACnC,CAEA,WAAY,CACV,GAAI,CAAC,KAAK,MAAO,OACjB,MAAM,SAAW,KAAK,MAAM,OACtB,UAAY,CAAC,UAAY,CAAC,KAAK,MAAM,OAAS,KAAK,MAAM,YAAc,EAC7E,KAAK,UAAU,OAAO,mBAAoB,SAAS,EAGnD,KAAK,UAAU,OAAO,kBAAmB,KAAK,aAAa,EAC3D,KAAK,UAAU,OAAO,oBAAqB,CAAC,KAAK,aAAa,EAC1D,KAAK,gBAAiB,KAAK,QAAQ,0BAA4B,OAC9D,OAAO,KAAK,QAAQ,0BACpB,KAAK,SACV,KAAK,OAAO,aAAa,eAAgB,OAAO,CAAC,QAAQ,CAAC,EAC1D,KAAK,OAAO,aAAa,aAAc,SAAW,iBAAmB,wBAAqB,EAC1F,KAAK,OAAO,cAAc,0BAA0B,GAAG,gBAAgB,SAAU,QAAQ,EACzF,KAAK,OAAO,cAAc,yBAAyB,GAAG,gBAAgB,SAAU,CAAC,QAAQ,EAC3F,CACF,CAAC",
  "names": []
}
