{"title":"Musique","description":"\u003c!-- 🎥 VIDEO --\u003e\n\u003cdiv class=\"graux-video-container\"\u003e\u003ciframe src=\"https:\/\/www.youtube.com\/embed\/cgyMg5pZJUE?autoplay=0\u0026amp;mute=0\u0026amp;modestbranding=1\u0026amp;showinfo=0\u0026amp;rel=0\" title=\"GRAUX - Medley de performances en studio 2025\"\u003e\n\u003c\/iframe\u003e\u003c\/div\u003e\n\n\u003c!-- 🎧 PLAYER --\u003e\n\u003csection class=\"graux-player\"\u003e\n\u003cdiv class=\"graux-player-inner\"\u003e\n\n\u003cdiv class=\"graux-player-header\"\u003e\n\n\u003ch2 id=\"track-title\"\u003e Sélectionnez un morceau \u003c\/h2\u003e\n\n\u003cspan id=\"track-counter\"\u003e\u003c\/span\u003e\n\n\u003c\/div\u003e\n\n\u003cdiv id=\"waveform\" class=\"graux-waveform\"\u003e\u003c\/div\u003e\n\n\u003cdiv class=\"graux-controls\"\u003e\n\n \u003cbutton id=\"prev-track\" aria-label=\"Previous\"\u003e⏮\u003c\/button\u003e \u003cbutton id=\"play-pause\" aria-label=\"Play\"\u003e▶\u003c\/button\u003e \u003cbutton id=\"next-track\" aria-label=\"Next\"\u003e⏭\u003c\/button\u003e\n\n\u003c\/div\u003e\n\n\u003cdiv class=\"graux-timer\"\u003e\n\n \u003cspan id=\"current-time\"\u003e0:00\u003c\/span\u003e\n\u003cdiv class=\"graux-progress\"\u003e\n\n\u003cdiv id=\"progress\"\u003e\u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n \u003cspan id=\"duration\"\u003e0:00\u003c\/span\u003e \n\n\u003c\/div\u003e\n\n\u003cul class=\"graux-tracklist\" id=\"track-list\"\u003e\n\n\u003cli data-index=\"0\" data-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0522\/6220\/7680\/files\/GRAUX_Rouge_Noir_Ebmin_85_Master.mp3?v=1759865814\" data-title=\"Rouge Noir\"\u003e Rouge Noir \u003c\/li\u003e\n\n\u003cli data-index=\"1\" data-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0522\/6220\/7680\/files\/GRAUX_-_Mi_Diosa_Emin_123_Master.mp3?v=1759865852\" data-title=\"Mi Diosa\"\u003e Ma déesse \u003c\/li\u003e\n\n\u003cli data-index=\"2\" data-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0522\/6220\/7680\/files\/GRAUX_Adrenaline_C_min_93_Master.mp3?v=1759865815\" data-title=\"Adrenaline\"\u003e Adrénaline \u003c\/li\u003e\n\n\u003cli data-index=\"3\" data-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0522\/6220\/7680\/files\/GRAUX_-_Caramel.mp3?v=1759873437\" data-title=\"Caramel\"\u003e Caramel\u003c\/li\u003e\n\n \u003cli data-index=\"4\" data-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0522\/6220\/7680\/files\/GRAUX_Estrellas_en_LA_Ebmin_157_3_4_Master.mp3?v=1759865812\" data-title=\"Estrellas en LA\"\u003e Estrellas en LA \u003c\/li\u003e\n\n\u003cli data-index=\"5\" data-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0522\/6220\/7680\/files\/GRAUX_Petite_Mort_C_min_120_Master.mp3?v=1759865814\" data-title=\"Petite Mort\"\u003e Petite Mort \u003c\/li\u003e\n\n\n\u003c\/ul\u003e\n\n\n\u003c\/div\u003e\n\n\u003c\/section\u003e\n\u003c!-- 🎨 STYLE --\u003e\n\u003cstyle\u003e\n\/* --- Layout --- *\/\n.graux-video-container {\n  position: relative;\n  width: 100%;\n  max-width: 960px;\n  aspect-ratio: 16\/9;\n  margin: 0 auto 60px;\n  border-radius: 20px;\n  overflow: hidden;\n  box-shadow: 0 0 32px rgba(255, 100, 0, 0.25);\n}\n.graux-video-container iframe {\n  position: absolute; inset: 0;\n  width: 100%; height: 100%;\n}\n\n\/* --- Player --- *\/\n.graux-player {\n  background: linear-gradient(180deg, #0a0a0a 0%, #141010 100%);\n  border-radius: 20px;\n  max-width: 640px;\n  margin: 60px auto;\n  padding: 36px 28px;\n  color: #fff;\n  text-align: center;\n  box-shadow: 0 0 40px rgba(255, 80, 0, 0.18);\n  backdrop-filter: blur(12px);\n}\n.graux-player-header {\n  margin-bottom: 18px;\n}\n.graux-player-header h2 {\n  font-size: 19px;\n  font-weight: 600;\n  text-transform: uppercase;\n  color: #ff6930;\n  letter-spacing: 1px;\n  margin: 0;\n}\n#track-counter {\n  display: block;\n  font-size: 12px;\n  color: #c76d3a;\n  margin-top: 4px;\n}\n\n\/* --- Waveform --- *\/\n.graux-waveform {\n  height: 80px;\n  margin: 22px 0;\n  border-radius: 6px;\n  background: rgba(255, 255, 255, 0.02);\n  box-shadow: inset 0 0 15px rgba(255, 80, 0, 0.1);\n}\n\n\/* --- Controls --- *\/\n.graux-controls {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  gap: 26px;\n  margin-bottom: 20px;\n}\n.graux-controls button {\n  background: rgba(255, 255, 255, 0.06);\n  border: none;\n  color: #ff6930;\n  font-size: 22px;\n  border-radius: 50%;\n  width: 46px;\n  height: 46px;\n  cursor: pointer;\n  transition: all 0.25s ease;\n}\n.graux-controls button:hover {\n  background: linear-gradient(45deg, #ff6930, #ff3500);\n  color: #fff;\n  transform: scale(1.08);\n  box-shadow: 0 0 20px rgba(255, 80, 0, 0.4);\n}\n\n\/* --- Timer --- *\/\n.graux-timer {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 10px;\n  font-size: 12px;\n  color: #aaa;\n  margin-bottom: 18px;\n}\n.graux-progress {\n  flex: 1;\n  height: 3px;\n  background: rgba(255, 255, 255, 0.08);\n  border-radius: 2px;\n  overflow: hidden;\n}\n.graux-progress #progress {\n  width: 0;\n  height: 100%;\n  background: linear-gradient(90deg, #ff6930, #ff3500);\n  transition: width 0.1s linear;\n}\n\n\/* --- Tracklist --- *\/\n.graux-tracklist {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n.graux-tracklist li {\n  font-size: 14px;\n  padding: 10px 0;\n  color: #d6d6d6;\n  cursor: pointer;\n  transition: all 0.25s ease;\n  border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n}\n.graux-tracklist li:hover {\n  color: #ff6930;\n}\n.graux-tracklist li.active {\n  color: #fff;\n  font-weight: 600;\n  text-shadow: 0 0 10px rgba(255, 60, 0, 0.5);\n}\n\n\/* --- Responsive --- *\/\n@media (max-width: 480px) {\n  .graux-player { padding: 26px 18px; }\n  .graux-waveform { height: 60px; }\n  .graux-controls button { width: 42px; height: 42px; font-size: 20px; }\n}\n\u003c\/style\u003e\n\u003c!-- SCRIPT --\u003e\n\u003cp\u003e\u003cscript src=\"https:\/\/unpkg.com\/wavesurfer.js@7\"\u003e\u003c\/script\u003e\u003cscript\u003e\ndocument.addEventListener('DOMContentLoaded', function() {\n  const playPauseBtn = document.getElementById('play-pause');\n  const progress = document.getElementById('progress');\n  const currentTime = document.getElementById('current-time');\n  const durationEl = document.getElementById('duration');\n  const trackList = document.getElementById('track-list');\n  const trackTitle = document.getElementById('track-title');\n  const trackCounter = document.getElementById('track-counter');\n  const prevBtn = document.getElementById('prev-track');\n  const nextBtn = document.getElementById('next-track');\n  const tracks = Array.from(trackList.querySelectorAll('li'));\n  let wavesurfer = null;\n  let currentTrackIndex = 0;\n\n  const formatTime = s =\u003e {\n    const m = Math.floor(s \/ 60);\n    s = Math.floor(s % 60);\n    return `${m}:${s \u003c 10 ? '0' : ''}${s}`;\n  };\n\n  function loadTrack(index, playNow = false) {\n    const track = tracks[index];\n    if (!track) return;\n    const src = track.dataset.src;\n    const title = track.dataset.title;\n    tracks.forEach(t =\u003e t.classList.remove('active', 'playing'));\n    track.classList.add('active');\n    trackTitle.textContent = title.toUpperCase();\n    trackCounter.textContent = `${index + 1}\/${tracks.length}`;\n    if (wavesurfer) wavesurfer.destroy();\n    wavesurfer = WaveSurfer.create({\n      container: '#waveform',\n      waveColor: 'rgba(255, 100, 40, 0.35)',\n      progressColor: '#ff6930',\n      cursorColor: '#fff',\n      height: 70,\n      barWidth: 2,\n      barGap: 1,\n      responsive: true\n    });\n    wavesurfer.load(src);\n    wavesurfer.on('ready', () =\u003e {\n      durationEl.textContent = formatTime(wavesurfer.getDuration());\n      if (playNow) {\n        wavesurfer.play();\n        playPauseBtn.textContent = '⏸';\n        track.classList.add('playing');\n      } else {\n        playPauseBtn.textContent = '▶';\n      }\n    });\n    wavesurfer.on('audioprocess', () =\u003e {\n      const c = wavesurfer.getCurrentTime();\n      currentTime.textContent = formatTime(c);\n      progress.style.width = `${(c \/ wavesurfer.getDuration()) * 100}%`;\n    });\n    wavesurfer.on('finish', () =\u003e {\n      loadTrack((index + 1) % tracks.length, true);\n    });\n  }\n\n  playPauseBtn.onclick = () =\u003e {\n    if (!wavesurfer) return;\n    if (wavesurfer.isPlaying()) {\n      wavesurfer.pause();\n      playPauseBtn.textContent = '▶';\n    } else {\n      wavesurfer.play();\n      playPauseBtn.textContent = '⏸';\n      tracks[currentTrackIndex].classList.add('playing');\n    }\n  };\n\n  prevBtn.onclick = () =\u003e {\n    currentTrackIndex = (currentTrackIndex - 1 + tracks.length) % tracks.length;\n    loadTrack(currentTrackIndex, true);\n  };\n  nextBtn.onclick = () =\u003e {\n    currentTrackIndex = (currentTrackIndex + 1) % tracks.length;\n    loadTrack(currentTrackIndex, true);\n  };\n  tracks.forEach((t, i) =\u003e t.addEventListener('click', () =\u003e {\n    currentTrackIndex = i;\n    loadTrack(i, true);\n  }));\n\n  loadTrack(0, false);\n});\n\u003c\/script\u003e\u003c\/p\u003e","products":[{"product_id":"mi-diosa","title":"GRAUX - Mi Diosa (EP)","description":"\u003c!-- GRAUX — Mi Diosa Player + DSP Links --\u003e\n\u003csection class=\"graux-diosa\"\u003e\n\u003cstyle\u003e\n    .graux-diosa{\n      --brand:#ff7b4e; --bg:#0b0b0b; --fg:#f7f7f7; --muted:#b6b6b6;\n      --playing:#2a2a2a;\n      font-family:system-ui,-apple-system,Segoe UI,Roboto,Inter,Arial,sans-serif;\n      background:var(--bg); color:var(--fg);\n      padding:40px 16px; border-radius:18px; text-align:center;\n    }\n    .graux-diosa h2{margin:0 0 10px;font-size:clamp(22px,3vw,34px)}\n    .graux-diosa p{margin:0 0 18px;color:var(--muted)}\n    #waveform-diosa{width:100%;margin:0 auto 12px auto}\n    #playBtnDiosa{\n      border:none; border-radius:999px;\n      padding:10px 18px; font-weight:700; cursor:pointer; margin-bottom:22px;\n      transition:.25s ease; font-size:15px;\n    }\n    #playBtnDiosa.pause{\n      background:var(--brand); color:#0b0b0b;\n      box-shadow:0 6px 18px rgba(255,123,78,.35);\n    }\n    #playBtnDiosa.playing{\n      background:var(--playing); color:var(--fg);\n      box-shadow:0 6px 18px rgba(0,0,0,.45);\n    }\n    .note{margin-top:14px;font-size:14px;color:var(--muted);}\n    .platforms{display:grid;gap:14px;max-width:500px;margin:28px auto 0 auto}\n    @media(min-width:540px){.platforms{grid-template-columns:repeat(3,1fr)}}\n    .btn{\n      display:flex;justify-content:center;align-items:center;gap:10px;\n      padding:14px;background:#1f1f1f;border-radius:14px;text-decoration:none;\n      color:var(--fg);font-weight:600;transition:.2s ease\n    }\n    .btn:hover{background:#2a2a2a;transform:translateY(-1px)}\n    .dot{width:10px;height:10px;border-radius:50%}\n    .yt{background:#FF0000}.sp{background:#1DB954}.am{background:#FA233B}\n  \u003c\/style\u003e\n\n\u003ch2\u003e GRAUX — Mi Diosa (EP)\u003c\/h2\u003e\n\n\u003cp\u003e Écoutez un extrait et choisissez votre plateforme — ou soutenez l'artiste en achetant l'EP complet\u003c\/p\u003e\n\n\n\u003c!-- Waveform Player --\u003e\n\u003cdiv id=\"waveform-diosa\"\u003e\u003c\/div\u003e\n\n \u003cbutton id=\"playBtnDiosa\" class=\"pause\"\u003e▶ Jouer\u003c\/button\u003e\n\n\u003c!-- Extra Info --\u003e\n\u003cp class=\"note\"\u003e À l'achat, vous recevrez les 3 fichiers master WAV haute qualité (44,1 kHz \/ 24 bits, stéréo) :\u003cbr\u003e\n • Mi Diosa (original) – 15 h 15\u003cbr\u003e\n • Mi Diosa (acoustique) — 3:11\u003cbr\u003e\n • Mi Diosa (Remix Afro House) — 4:16\u003c\/p\u003e\n\n\n\u003c!-- DSP Buttons --\u003e\n\u003cdiv class=\"platforms\"\u003e\n\n \u003ca class=\"btn\" href=\"https:\/\/open.spotify.com\/album\/5ahl29cKelf0q0si8K6jR3?si=rpw1EcCKS6anDQEAyJKBkA\" target=\"_blank\" rel=\"noopener\"\u003e\n\u003cspan class=\"dot sp\"\u003e\u003c\/span\u003eSpotify\n\u003c\/a\u003e\n \u003ca class=\"btn\" href=\"https:\/\/music.apple.com\/tz\/album\/mi-diosa-single\/1842648768\" target=\"_blank\" rel=\"noopener\"\u003e\n\u003cspan class=\"dot am\"\u003e\u003c\/span\u003eApple Music\n\u003c\/a\u003e\n \u003ca class=\"btn\" href=\"https:\/\/www.youtube.com\/watch?v=Syp2_fmrmdU\" target=\"_blank\" rel=\"noopener\"\u003e\n\u003cspan class=\"dot yt\"\u003e\u003c\/span\u003eYouTube\n\u003c\/a\u003e\n\n\u003c\/div\u003e\n\n\n\u003c!-- Wavesurfer.js --\u003e\n\u003cscript src=\"https:\/\/unpkg.com\/wavesurfer.js\"\u003e\u003c\/script\u003e\n\u003cscript\u003e\n    const wavesurferDiosa = WaveSurfer.create({\n      container: '#waveform-diosa',\n      waveColor: '#ccc',\n      progressColor: '#ff7b4e',\n      cursorColor: '#fff',\n      height: 90,\n      barWidth: 2,\n      responsive: true\n    });\n\n    \/\/ Mi Diosa snippet hosted on Shopify\n    wavesurferDiosa.load('https:\/\/cdn.shopify.com\/s\/files\/1\/0522\/6220\/7680\/files\/GRAUX_-_Mi_Diosa_Snippet.mp3?v=1759135054');\n\n    const playBtnDiosa = document.getElementById('playBtnDiosa');\n\n    playBtnDiosa.onclick = () =\u003e {\n      wavesurferDiosa.playPause();\n    };\n\n    wavesurferDiosa.on('play', () =\u003e {\n      playBtnDiosa.textContent = '⏸ Pause';\n      playBtnDiosa.classList.remove('pause');\n      playBtnDiosa.classList.add('playing');\n    });\n\n    wavesurferDiosa.on('pause', () =\u003e {\n      playBtnDiosa.textContent = '▶ Play';\n      playBtnDiosa.classList.remove('playing');\n      playBtnDiosa.classList.add('pause');\n    });\n  \u003c\/script\u003e\n\u003c\/section\u003e\n","brand":"GRAUX Music","offers":[{"title":"Default Title","offer_id":52793990349130,"sku":null,"price":8.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0522\/6220\/7680\/files\/GRAUX-MiDiosa_Artwork.jpg?v=1757695401"}],"url":"https:\/\/grauxmusic.com\/fr\/collections\/music.oembed","provider":"GRAUX Guitar Loops","version":"1.0","type":"link"}