{"product_id":"starborne-digital-album","title":"STARBORNE - Digital Album","description":"\u003cp\u003eThe first EP \"STARBORNE\" digital album has arrived!\u003cstrong\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cdiv class=\"lightjourner-product-player\"\u003e\n  \u003ch2 style=\"text-align:center; margin:40px 0 20px; color:#111827; font-size:1.8rem;\"\u003e\n    💫 Preview the Full Album 🎧\n  \u003c\/h2\u003e\n\u003cp style=\"text-align: center;\"\u003ePress play to begin\u003cstrong\u003e\u003c\/strong\u003e\u003c\/p\u003e\n  \n  \u003cul id=\"track-list\" style=\"list-style:none; padding:0; max-width:800px; margin:0 auto 30px;\"\u003e\u003c\/ul\u003e\n\n  \u003cdiv id=\"lightjourner-player\" class=\"amazing-bar-player\"\u003e\n    \u003cdiv class=\"player-bar\"\u003e\n      \u003cbutton id=\"prev-btn\" class=\"player-btn\"\u003e⏮\u003c\/button\u003e\n      \u003cbutton id=\"play-pause-btn\" class=\"player-btn play\"\u003e▶\u003c\/button\u003e\n      \u003cbutton id=\"next-btn\" class=\"player-btn\"\u003e⏭\u003c\/button\u003e\n      \u003cdiv class=\"track-info\"\u003e\n        \u003cdiv id=\"track-title\" class=\"track-title\"\u003eLoading track...\u003c\/div\u003e\n        \u003cdiv id=\"track-artist\" class=\"track-artist\"\u003eLightJourner\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"progress-container\"\u003e\n        \u003cspan id=\"current-time\" class=\"time\"\u003e0:00\u003c\/span\u003e\n        \u003cprogress id=\"progress-bar\" class=\"progress-bar\" value=\"0\" max=\"100\"\u003e\u003c\/progress\u003e\n        \u003cspan id=\"total-time\" class=\"time\"\u003e0:00\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003caudio id=\"audio-player\" preload=\"metadata\"\u003e\u003c\/audio\u003e\n\u003c\/div\u003e\n\n\u003cstyle\u003e\n  .amazing-bar-player { margin: 0 auto; max-width: 1000px; }\n  .player-bar { background:#111827; border-radius:9999px; padding:14px 24px; display:flex; align-items:center; gap:18px; box-shadow:0 10px 25px -5px rgb(0 0 0 \/ 0.3); color:white; }\n  .player-btn { background:none; border:none; color:#fbbf24; font-size:28px; width:44px; height:44px; display:flex; align-items:center; justify-content:center; cursor:pointer; transition:all 0.2s; }\n  .player-btn:hover { color:#fefce8; transform:scale(1.15); }\n  .track-info { flex:1; min-width:0; }\n  .track-title { font-weight:600; font-size:15px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }\n  .track-artist { font-size:13px; opacity:0.75; }\n  .progress-container { flex:2; display:flex; align-items:center; gap:12px; }\n  \n  .progress-bar {\n    flex: 1; height: 14px; appearance: none; background: #374151; border-radius: 9999px; overflow: hidden;\n  }\n  .progress-bar::-webkit-progress-bar { background: #374151; }\n  .progress-bar::-webkit-progress-value { background: #fbbf24; box-shadow: 0 0 15px 5px #fbbf24; }\n  .progress-bar::-moz-progress-bar { background: #fbbf24; box-shadow: 0 0 15px 5px #fbbf24; }\n  \n  .time { font-size:13px; font-family:monospace; min-width:40px; }\n  .lightjourner-product-player ul li { padding:16px 20px; margin-bottom:6px; background:#f8fafc; border-radius:12px; cursor:pointer; display:flex; align-items:center; gap:16px; transition:all 0.2s; }\n  .lightjourner-product-player ul li:hover { background:#f1f5f9; }\n  .lightjourner-product-player ul li.active { background:#111827; color:white; }\n  .lightjourner-product-player ul li span.track-number { font-weight:700; width:28px; font-size:1.1rem; }\n\u003c\/style\u003e\n\n\u003cscript\u003e\n  function initLightjournerPlayer() {\n    const playlist = [\n      { title: \"STARBREATH\",    artist: \"LightJourner\", url: \"https:\/\/cdn.shopify.com\/s\/files\/1\/0727\/5292\/2853\/files\/1.STARBREATH_PREVIEW.mp3?v=1775627876\" },\n      { title: \"STARFALL\",      artist: \"LightJourner\", url: \"https:\/\/cdn.shopify.com\/s\/files\/1\/0727\/5292\/2853\/files\/2.STARFALL_PREVIEW.mp3?v=1775628485\" },\n      { title: \"STARSTATIC\",    artist: \"LightJourner\", url: \"https:\/\/cdn.shopify.com\/s\/files\/1\/0727\/5292\/2853\/files\/3.STARSTATIC_PREVIEW.mp3?v=1775628505\" },\n      { title: \"STARTORN\",      artist: \"LightJourner\", url: \"https:\/\/cdn.shopify.com\/s\/files\/1\/0727\/5292\/2853\/files\/4.STARTORN_PREVIEW.mp3?v=1775628914\" },\n      { title: \"STARHELD\",      artist: \"LightJourner\", url: \"https:\/\/cdn.shopify.com\/s\/files\/1\/0727\/5292\/2853\/files\/5.STARHELD_PREVIEW.mp3?v=1775629573\" },\n      { title: \"STARBURST\",     artist: \"LightJourner\", url: \"https:\/\/cdn.shopify.com\/s\/files\/1\/0727\/5292\/2853\/files\/6.STARBURST_PREVIEW.mp3?v=1775629587\" },\n      { title: \"STARJOINED\",    artist: \"LightJourner\", url: \"https:\/\/cdn.shopify.com\/s\/files\/1\/0727\/5292\/2853\/files\/7.STARJOINED_PREVIEW.mp3?v=1775629602\" }\n    ];\n\n    const audio = document.getElementById('audio-player');\n    const progressBar = document.getElementById('progress-bar');\n    if (!audio || !progressBar) return false;\n\n    const playPauseBtn = document.getElementById('play-pause-btn');\n    const prevBtn = document.getElementById('prev-btn');\n    const nextBtn = document.getElementById('next-btn');\n    const titleEl = document.getElementById('track-title');\n    const currentTimeEl = document.getElementById('current-time');\n    const totalTimeEl = document.getElementById('total-time');\n    const trackListEl = document.getElementById('track-list');\n\n    let currentTrack = 0;\n    let progressInterval = null;\n\n    function loadTrack(index) {\n      currentTrack = index;\n      audio.src = playlist[index].url;\n      titleEl.textContent = `${playlist[index].title} — ${playlist[index].artist}`;\n      renderPlaylist();\n    }\n\n    function renderPlaylist() {\n      trackListEl.innerHTML = '';\n      playlist.forEach((track, index) =\u003e {\n        const li = document.createElement('li');\n        li.className = index === currentTrack ? 'active' : '';\n        li.innerHTML = `\u003cspan class=\"track-number\"\u003e${index + 1}\u003c\/span\u003e\u003cdiv style=\"flex:1\"\u003e\u003cstrong\u003e${track.title}\u003c\/strong\u003e\u003cbr\u003e\u003csmall\u003e${track.artist}\u003c\/small\u003e\u003c\/div\u003e`;\n        li.addEventListener('click', () =\u003e { loadTrack(index); audio.play(); playPauseBtn.innerHTML = '❚❚'; });\n        trackListEl.appendChild(li);\n      });\n    }\n\n    function updateProgress() {\n      if (!audio.duration) return;\n      const percent = (audio.currentTime \/ audio.duration) * 100;\n      progressBar.value = percent;\n      currentTimeEl.textContent = formatTime(audio.currentTime);\n      totalTimeEl.textContent = formatTime(audio.duration);\n    }\n\n    function formatTime(seconds) {\n      const min = Math.floor(seconds \/ 60);\n      const sec = Math.floor(seconds % 60);\n      return `${min}:${sec \u003c 10 ? '0' : ''}${sec}`;\n    }\n\n    function startProgress() {\n      if (progressInterval) clearInterval(progressInterval);\n      progressInterval = setInterval(updateProgress, 200);\n    }\n\n    function stopProgress() {\n      if (progressInterval) clearInterval(progressInterval);\n    }\n\n    function playPause() {\n      if (audio.paused) {\n        audio.play();\n        playPauseBtn.innerHTML = '❚❚';\n        startProgress();\n      } else {\n        audio.pause();\n        playPauseBtn.innerHTML = '▶';\n        stopProgress();\n      }\n    }\n\n    progressBar.addEventListener('click', e =\u003e {\n      const rect = progressBar.getBoundingClientRect();\n      const pos = (e.clientX - rect.left) \/ rect.width;\n      audio.currentTime = pos * audio.duration;\n    });\n\n    playPauseBtn.addEventListener('click', playPause);\n    prevBtn.addEventListener('click', () =\u003e { currentTrack = (currentTrack - 1 + playlist.length) % playlist.length; loadTrack(currentTrack); audio.play(); });\n    nextBtn.addEventListener('click', () =\u003e { currentTrack = (currentTrack + 1) % playlist.length; loadTrack(currentTrack); audio.play(); });\n\n    audio.onended = () =\u003e {\n      currentTrack = (currentTrack + 1) % playlist.length;\n      loadTrack(currentTrack);\n      audio.play();\n    };\n\n    loadTrack(0);\n    return true;\n  }\n\n  let attempts = 0;\n  const interval = setInterval(() =\u003e {\n    attempts++;\n    if (initLightjournerPlayer() || attempts \u003e= 30) clearInterval(interval);\n  }, 200);\n\u003c\/script\u003e\n","brand":"LightJourner ","offers":[{"title":"Default Title","offer_id":48758491119845,"sku":null,"price":9.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0727\/5292\/2853\/files\/starbornedressfinal_upscayl_4x_upscayl-standard-4x_abf07f07-2410-479f-8bda-bc5392de8a51.png?v=1775826693","url":"https:\/\/lightjourner.com\/zh\/products\/starborne-digital-album","provider":"LightJourner ","version":"1.0","type":"link"}