diff --git a/assets/Cover.png b/assets/Cover.png new file mode 100644 index 0000000..3d22919 Binary files /dev/null and b/assets/Cover.png differ diff --git a/assets/WhatsApp Image 2025-04-21 at 15.01.32.jpeg b/assets/WhatsApp Image 2025-04-21 at 15.01.32.jpeg new file mode 100644 index 0000000..d3d0373 Binary files /dev/null and b/assets/WhatsApp Image 2025-04-21 at 15.01.32.jpeg differ diff --git a/assets/front.html b/assets/front.html index a01fca0..287dc35 100644 --- a/assets/front.html +++ b/assets/front.html @@ -3,7 +3,7 @@ - + LOOP @@ -18,7 +18,7 @@
- muddyfiles + muddyfiles

Muddy Files

Ely

@@ -26,15 +26,15 @@
- helleven + helleven

Hell Even

-

Ely feat. Jenny

+

Ely feat. JENNY

- - stamina + + stamina

Stamina

Corb Nurk

diff --git a/assets/hell even 5.png b/assets/hell even 5.png new file mode 100644 index 0000000..e014cf4 Binary files /dev/null and b/assets/hell even 5.png differ diff --git a/assets/hell_even.html b/assets/hell_even.html index f2231df..9c0de9c 100644 --- a/assets/hell_even.html +++ b/assets/hell_even.html @@ -1,30 +1,51 @@ - + + Hell Even - + -
- -
-
-
-
- Pochette de l'album + + + +
+ +
+ Pochette +
+ +

+ Hell Even
+ Ely feat. JENNY +

+ +
+ + +
+
0:00
+
3:28
+
+ + +
+ + +
-
- - - -
0:00 / 0:00
-
-
+ + - + diff --git a/assets/main.html b/assets/main.html index 81d8800..4c9fb90 100644 --- a/assets/main.html +++ b/assets/main.html @@ -3,7 +3,7 @@ - + LOOP @@ -11,22 +11,24 @@ -
+
-
- -

Let your favorite songs play on LOOP.

+

Let your favorite songs play on LOOP.

+
+

Don't have an account ? Sign up now.

- + diff --git a/assets/main.js b/assets/main.js new file mode 100644 index 0000000..a55f570 --- /dev/null +++ b/assets/main.js @@ -0,0 +1,18 @@ +document.getElementById('loginBtn').addEventListener('click', function(event) { + event.preventDefault(); // Empêche le bouton de recharger ou changer de page + + const username = document.getElementById('username').value.trim(); + const password = document.getElementById('password').value.trim(); + const errorMessage = document.getElementById('error-message'); + + // Identifiants valides en dur (à modifier selon ton besoin) + const validUsername = "ELY"; + const validPassword = "Bilan6"; + + if (username === validUsername && password === validPassword) { + window.location.href = "front.html"; // Redirige vers la page suivante + } else { + errorMessage.textContent = "Incorrect username or password."; + } + }); + \ No newline at end of file diff --git a/assets/muddy_files.html b/assets/muddy_files.html index a97d8ce..c2f6b25 100644 --- a/assets/muddy_files.html +++ b/assets/muddy_files.html @@ -1,30 +1,51 @@ - + + Muddy Files - + -
- -
-
-
-
- Pochette de l'album + + + +
+ +
+ Pochette +
+ +

+ Muddy Files
+ Ely +

+ +
+ + +
+
0:00
+
1:36
+
+ + +
+ + +
-
- - - -
0:00 / 0:00
-
-
+ + - + diff --git a/assets/script.js b/assets/script.js index b8d1d52..2d27620 100644 --- a/assets/script.js +++ b/assets/script.js @@ -1 +1,93 @@ -console.log( 'hello') \ No newline at end of file +// 1. Sélection des éléments du DOM +const vinyl = document.getElementById('vinyl'); +const audio = document.getElementById('audio'); +const progress = document.getElementById('progress'); +const currentTimeEl = document.getElementById('currentTime'); +const durationEl = document.getElementById('duration'); +const backwardBtn = document.getElementById('backward'); +const forwardBtn = document.getElementById('forward'); +const loopBtn = document.getElementById('loop'); + +// 2. Variables utiles +let isPlaying = false; +let isLooping = false; + +// 3. Fonctions + +// Fonction pour basculer la lecture +function togglePlay() { + if (isPlaying) { + audio.pause(); + vinyl.style.animationPlayState = 'paused'; + } else { + audio.play(); + vinyl.style.animationPlayState = 'running'; + } + isPlaying = !isPlaying; +} + +// Mise à jour de la barre de progression +function updateProgress() { + const progressPercent = (audio.currentTime / audio.duration) * 100; + progress.value = progressPercent; + currentTimeEl.textContent = formatTime(audio.currentTime); +} + +// Fonction pour formater le temps (min:sec) +function formatTime(time) { + const minutes = Math.floor(time / 60); + const seconds = Math.floor(time % 60); + return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`; +} + +// Fonction pour changer la position de lecture en cliquant sur la barre +function setProgress(e) { + const width = progress.clientWidth; + const clickX = e.offsetX; + const duration = audio.duration; + audio.currentTime = (clickX / width) * duration; +} + +// 4. Événements + +// Clique sur le vinyle pour basculer lecture +vinyl.addEventListener('click', togglePlay); + +// Mise à jour de la barre de progression à chaque changement de temps +audio.addEventListener('timeupdate', updateProgress); + +// Mise à jour de la durée du titre dès que l'audio est chargé +audio.addEventListener('loadedmetadata', () => { + durationEl.textContent = formatTime(audio.duration); +}); + +// Permet de cliquer sur la barre de progression +progress.addEventListener('click', setProgress); + +// Bouton reculer de 10s +backwardBtn.addEventListener('click', () => { + audio.currentTime = Math.max(0, audio.currentTime - 10); +}); + +// Bouton avancer de 10s +forwardBtn.addEventListener('click', () => { + audio.currentTime = Math.min(audio.duration, audio.currentTime + 10); +}); + +// Bouton pour activer/désactiver la boucle (LOOP) +loopBtn.addEventListener('click', () => { + isLooping = !isLooping; + loopBtn.style.backgroundColor = isLooping ? 'white' : 'transparent'; + loopBtn.style.color = isLooping ? '#18344b' : 'white'; +}); + +// Lorsque l'audio est terminé, on répète si la boucle est activée +audio.addEventListener('ended', () => { + if (isLooping) { + audio.currentTime = 0; + audio.play(); + } else { + vinyl.style.animationPlayState = 'paused'; + isPlaying = false; + } +}); diff --git a/assets/stamina-v17.mp3 b/assets/stamina-v17.mp3 new file mode 100644 index 0000000..21c1316 Binary files /dev/null and b/assets/stamina-v17.mp3 differ diff --git a/assets/stamina.html b/assets/stamina.html new file mode 100644 index 0000000..dbd4ab5 --- /dev/null +++ b/assets/stamina.html @@ -0,0 +1,51 @@ + + + + + + Stamina + + + + + + + +
+ +
+ Pochette +
+ +

+ Stamina
+ Corb Nurk +

+ +
+ + +
+
0:00
+
4:43
+
+
+ + +
+ + + +
+ + +
+ + + + diff --git a/assets/styles.css b/assets/styles.css index d904d19..81cf19c 100644 --- a/assets/styles.css +++ b/assets/styles.css @@ -31,27 +31,36 @@ } } - - -.logo{ - margin-top: 40px; - max-width: 280px; -} - -.container { + .header-container { display: flex; flex-direction: column; align-items: center; + margin-bottom: 30px; /* pour séparer du reste */ } -h1 { + .logo { + display: block; + margin-top: 40px; + margin-right: auto; + max-width: 200px; + } + + h1 { color: #ffffff; font-size: 70%; -} + margin-top: 10px; /* espace entre logo et h1 */ + } + h2 { color: #ffffff; - font-size: 40%; + font-size: 60%; +} + +.login-title { + color: black; + font-size: 24px; + margin-bottom: 20px; } .orange { @@ -82,22 +91,34 @@ h2 { font-size: 16px; } -.button { - width: 100%; - padding: 10px; - background-color:#ffa600; - color: white; - border: none; - border-radius: 50px; - font-size: 18px; - cursor: pointer; - transition: background 0.3s ease; - text-decoration: none; +.login-container input:focus { + border: 2px solid #ffa600; /* ou la couleur que tu veux */ + outline: none; /* enlève le contour bleu par défaut */ } +.button { + display: inline-block; + width: 100%; /* pareil que les input */ + padding: 12px; + margin-top: 40px; /* plus de marge */ + background-color:#ffa600; + color: white; + border: none; + border-radius: 50px; + font-size: 18px; + cursor: pointer; + transition: background 0.3s ease; + text-decoration: none; +} + + .button:hover { background-color: #dd3000; } - +.error-message { + color: red; + margin-top: 15px; + font-size: 14px; +} \ No newline at end of file diff --git a/assets/styleshe.css b/assets/styleshe.css index 05162f9..f4bced1 100644 --- a/assets/styleshe.css +++ b/assets/styleshe.css @@ -1,123 +1,196 @@ @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300&display=swap'); -* { - margin: 0; - padding: 0; - box-sizing: border-box; - font-family: 'Poppins', sans-serif; -} - body { - background: linear-gradient(to bottom, #500000, #000000); - color: white; - display: flex; - flex-direction: column; - align-items: center; - min-height: 100vh; -} + margin: 0; + padding: 0; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background: linear-gradient(to bottom, #500000, #000000); + font-family: sans-serif; + } + + header.page-header { + position: absolute; + top: 20px; + left: 0; + width: 100%; + display: flex; + align-items: center; + justify-content: center; + pointer-events: none; /* pour que seul le logo reste cliquable */ + } + + .logo-container { + position: absolute; + left: 20px; + pointer-events: auto; /* permet au logo d'être cliquable malgré pointer-events: none plus haut */ + } + + .logo { + width: 120px; + height: auto; + cursor: pointer; + } + + .title { + color: white; + font-size: 20px; + font-weight: 600; + margin: 0; + pointer-events: none; + } + -header { - width: 100%; - padding: 15px 30px; - display: flex; - justify-content: flex-start; - align-items: center; - position: absolute; - top: 0; - left: 0; -} + .vinyl-container { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + } + -.logo { - width: 100px; - height: auto; -} -.container { - margin-top: 120px; - display: flex; - flex-direction: column; - align-items: center; -} +/* Titre du bas avec un
stylé */ -.vinyl-wrapper { - width: 250px; - height: 250px; - margin-bottom: 30px; - position: relative; -} - -.vinyl { - width: 100%; - height: 100%; - border-radius: 50%; - background: black; - display: flex; - align-items: center; - justify-content: center; - animation: spin 5s linear infinite paused; - overflow: hidden; -} - -.vinyl img { - width: 100px; - height: 100px; - border-radius: 50%; - object-fit: cover; - z-index: 2; -} - -@keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } -} - -/* Bouton play/pause en blanc */ -#play-pause { - color: white; - font-size: 30px; - background: none; - border: none; - cursor: pointer; -} - -#play-pause:hover { - transform: scale(1.1); - transition: transform 0.2s ease; -} - -/* Barre de progression audio blanche */ -#progress { - -webkit-appearance: none; - width: 100%; - height: 6px; - background: white; - border-radius: 3px; - outline: none; - margin: 10px 0; -} - -/* Curseur (thumb) blanc */ -#progress::-webkit-slider-thumb { - -webkit-appearance: none; - appearance: none; - width: 15px; - height: 15px; - border-radius: 50%; - background: white; - cursor: pointer; - border: none; -} - -#progress::-moz-range-thumb { - width: 15px; - height: 15px; - border-radius: 50%; - background: white; - cursor: pointer; - border: none; -} - -/* Texte du timer blanc (déjà par défaut mais pour être sûr) */ -#time { - color: white; -} +.title-under { + text-align: center; + color: white; + margin-top: 20px; + } + + .song-title { + font-size: 30px; + font-weight: 600; + } + + .artist-name { + margin: none; + font-size: 22px; + font-weight: 400; + opacity: 0.8; + } + + .vinyl { + width: 600px; + height: 600px; + border-radius: 50%; + background: radial-gradient(circle at center, #444 0%, #111 60%, #000 100%); + animation: spin 5s linear infinite paused; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + cursor: pointer; + margin: 20px 0; + } + + .vinyl img { + width: 40%; + border-radius: 50%; + pointer-events: none; + } + + /* Style pour la barre de progression */ +.progress-container { + display: flex; + flex-direction: column; + align-items: center; + margin-top: 20px; + width: 80%; + max-width: 500px; + margin-inline: auto; + } + + #progress { + width: 100%; + height: 6px; + background: rgba(255, 255, 255, 0.3); + border-radius: 5px; + -webkit-appearance: none; + appearance: none; + } + + #progress::-webkit-slider-thumb { + -webkit-appearance: none; + height: 12px; + width: 12px; + border-radius: 50%; + background: white; + cursor: pointer; + } + + #progress::-moz-range-thumb { + height: 12px; + width: 12px; + border-radius: 50%; + background: white; + cursor: pointer; + } + + /* Position des timestamps */ + + .time-wrapper { + color: white; + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + padding: 0 20px; + margin-top: 10px; + margin-bottom: 10px; /* <-- ajoute ceci pour écarter duration du bouton */ + } + + + .buttons-container { + display: flex; + justify-content: space-between; + gap: 10px; + width: 80%; + max-width: 500px; + margin-top: 10px; + } + + button { + flex: 1; + font-size: 16px; + background: none; + border: 1px solid white; + color: white; + padding: 6px 14px; + border-radius: 8px; + cursor: pointer; + } + + + @keyframes spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } + } + + @media (max-width: 768px) { + .vinyl { + width: 70vw; + height: 70vw; + } + + .vinyl img { + width: 45%; + } + + #progress { + width: 85vw; + } + + .buttons-container { + width: 85vw; + } + } + + \ No newline at end of file diff --git a/assets/stylesmf.css b/assets/stylesmf.css index 022ce32..2dc7ebc 100644 --- a/assets/stylesmf.css +++ b/assets/stylesmf.css @@ -1,123 +1,196 @@ @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300&display=swap'); -* { - margin: 0; - padding: 0; - box-sizing: border-box; - font-family: 'Poppins', sans-serif; -} - body { - background: linear-gradient(to bottom, #316997, #18344b); - color: white; - display: flex; - flex-direction: column; - align-items: center; - min-height: 100vh; -} + margin: 0; + padding: 0; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background: linear-gradient(to bottom, #3d78a8, #19222b); + font-family: sans-serif; + } + + header.page-header { + position: absolute; + top: 20px; + left: 0; + width: 100%; + display: flex; + align-items: center; + justify-content: center; + pointer-events: none; /* pour que seul le logo reste cliquable */ + } + + .logo-container { + position: absolute; + left: 20px; + pointer-events: auto; /* permet au logo d'être cliquable malgré pointer-events: none plus haut */ + } + + .logo { + width: 120px; + height: auto; + cursor: pointer; + } + + .title { + color: white; + font-size: 20px; + font-weight: 600; + margin: 0; + pointer-events: none; + } + -header { - width: 100%; - padding: 15px 30px; - display: flex; - justify-content: flex-start; - align-items: center; - position: absolute; - top: 0; - left: 0; -} + .vinyl-container { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + } + -.logo { - width: 100px; - height: auto; -} -.container { - margin-top: 120px; - display: flex; - flex-direction: column; - align-items: center; -} +/* Titre du bas avec un
stylé */ -.vinyl-wrapper { - width: 250px; - height: 250px; - margin-bottom: 30px; - position: relative; -} - -.vinyl { - width: 100%; - height: 100%; - border-radius: 50%; - background: black; - display: flex; - align-items: center; - justify-content: center; - animation: spin 5s linear infinite paused; - overflow: hidden; -} - -.vinyl img { - width: 100px; - height: 100px; - border-radius: 50%; - object-fit: cover; - z-index: 2; -} - -@keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } -} - -/* Bouton play/pause en blanc */ -#play-pause { - color: white; - font-size: 30px; - background: none; - border: none; - cursor: pointer; -} - -#play-pause:hover { - transform: scale(1.1); - transition: transform 0.2s ease; -} - -/* Barre de progression audio blanche */ -#progress { - -webkit-appearance: none; - width: 100%; - height: 6px; - background: white; - border-radius: 3px; - outline: none; - margin: 10px 0; -} - -/* Curseur (thumb) blanc */ -#progress::-webkit-slider-thumb { - -webkit-appearance: none; - appearance: none; - width: 15px; - height: 15px; - border-radius: 50%; - background: white; - cursor: pointer; - border: none; -} - -#progress::-moz-range-thumb { - width: 15px; - height: 15px; - border-radius: 50%; - background: white; - cursor: pointer; - border: none; -} - -/* Texte du timer blanc (déjà par défaut mais pour être sûr) */ -#time { - color: white; -} +.title-under { + text-align: center; + color: white; + margin-top: 20px; + } + + .song-title { + font-size: 30px; + font-weight: 600; + } + + .artist-name { + margin: none; + font-size: 22px; + font-weight: 400; + opacity: 0.8; + } + + .vinyl { + width: 600px; + height: 600px; + border-radius: 50%; + background: radial-gradient(circle at center, #444 0%, #111 60%, #000 100%); + animation: spin 5s linear infinite paused; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + cursor: pointer; + margin: 20px 0; + } + + .vinyl img { + width: 40%; + border-radius: 50%; + pointer-events: none; + } + + /* Style pour la barre de progression */ +.progress-container { + display: flex; + flex-direction: column; + align-items: center; + margin-top: 20px; + width: 80%; + max-width: 500px; + margin-inline: auto; + } + + #progress { + width: 100%; + height: 6px; + background: rgba(255, 255, 255, 0.3); + border-radius: 5px; + -webkit-appearance: none; + appearance: none; + } + + #progress::-webkit-slider-thumb { + -webkit-appearance: none; + height: 12px; + width: 12px; + border-radius: 50%; + background: white; + cursor: pointer; + } + + #progress::-moz-range-thumb { + height: 12px; + width: 12px; + border-radius: 50%; + background: white; + cursor: pointer; + } + + /* Position des timestamps */ + + .time-wrapper { + color: white; + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + padding: 0 20px; + margin-top: 10px; + margin-bottom: 10px; /* <-- ajoute ceci pour écarter duration du bouton */ + } + + + .buttons-container { + display: flex; + justify-content: space-between; + gap: 10px; + width: 80%; + max-width: 500px; + margin-top: 10px; + } + + button { + flex: 1; + font-size: 16px; + background: none; + border: 1px solid white; + color: white; + padding: 6px 14px; + border-radius: 8px; + cursor: pointer; + } + + + @keyframes spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } + } + + @media (max-width: 768px) { + .vinyl { + width: 70vw; + height: 70vw; + } + + .vinyl img { + width: 45%; + } + + #progress { + width: 85vw; + } + + .buttons-container { + width: 85vw; + } + } + + \ No newline at end of file diff --git a/assets/stylestam.css b/assets/stylestam.css new file mode 100644 index 0000000..a0d7a4c --- /dev/null +++ b/assets/stylestam.css @@ -0,0 +1,196 @@ +@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300&display=swap'); + +body { + margin: 0; + padding: 0; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background: linear-gradient(to bottom, #000000, #4e4e4e); + font-family: sans-serif; + } + + header.page-header { + position: absolute; + top: 20px; + left: 0; + width: 100%; + display: flex; + align-items: center; + justify-content: center; + pointer-events: none; /* pour que seul le logo reste cliquable */ + } + + .logo-container { + position: absolute; + left: 20px; + pointer-events: auto; /* permet au logo d'être cliquable malgré pointer-events: none plus haut */ + } + + .logo { + width: 120px; + height: auto; + cursor: pointer; + } + + .title { + color: white; + font-size: 20px; + font-weight: 600; + margin: 0; + pointer-events: none; + } + + + .vinyl-container { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + } + + + +/* Titre du bas avec un
stylé */ + +.title-under { + text-align: center; + color: white; + margin-top: 20px; + } + + .song-title { + font-size: 30px; + font-weight: 600; + } + + .artist-name { + margin: none; + font-size: 22px; + font-weight: 400; + opacity: 0.8; + } + + .vinyl { + width: 600px; + height: 600px; + border-radius: 50%; + background: radial-gradient(circle at center, #444 0%, #111 60%, #000 100%); + animation: spin 5s linear infinite paused; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + cursor: pointer; + margin: 20px 0; + } + + .vinyl img { + width: 40%; + border-radius: 50%; + pointer-events: none; + } + + /* Style pour la barre de progression */ +.progress-container { + display: flex; + flex-direction: column; + align-items: center; + margin-top: 20px; + width: 80%; + max-width: 500px; + margin-inline: auto; + } + + #progress { + width: 100%; + height: 6px; + background: rgba(255, 255, 255, 0.3); + border-radius: 5px; + -webkit-appearance: none; + appearance: none; + } + + #progress::-webkit-slider-thumb { + -webkit-appearance: none; + height: 12px; + width: 12px; + border-radius: 50%; + background: white; + cursor: pointer; + } + + #progress::-moz-range-thumb { + height: 12px; + width: 12px; + border-radius: 50%; + background: white; + cursor: pointer; + } + + /* Position des timestamps */ + + .time-wrapper { + color: white; + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + padding: 0 20px; + margin-top: 10px; + margin-bottom: 10px; /* <-- ajoute ceci pour écarter duration du bouton */ + } + + + .buttons-container { + display: flex; + justify-content: space-between; + gap: 10px; + width: 80%; + max-width: 500px; + margin-top: 10px; + } + + button { + flex: 1; + font-size: 16px; + background: none; + border: 1px solid white; + color: white; + padding: 6px 14px; + border-radius: 8px; + cursor: pointer; + } + + + @keyframes spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } + } + + @media (max-width: 768px) { + .vinyl { + width: 70vw; + height: 70vw; + } + + .vinyl img { + width: 45%; + } + + #progress { + width: 85vw; + } + + .buttons-container { + width: 85vw; + } + } + + \ No newline at end of file