<!doctype html>

<html lang="en">

<head>

<meta charset="utf-8" />

<meta name="viewport" content="width=device-width,initial-scale=1" />

<title>Your Artist Name — Official</title>

<meta name="description" content="Official site of Your Artist Name — singer-songwriter. Music, shows, press, and booking." />

<link rel="icon" href="assets/favicon.svg" />

<style>

  :root{

    --bg:#0f0f10;

    --card:#121214;

    --muted:#9aa0a6;

    --accent:#f36b6b;

    --glass: rgba(255,255,255,0.03);

    --maxw:1100px;

    font-family: Inter, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial;

    color: #eee;

  }

  *{box-sizing:border-box}

  html,body{height:100%}

  body{

    margin:0;

    background:linear-gradient(180deg,#071017 0%, #0f1113 60%);

    color:var(--muted);

    -webkit-font-smoothing:antialiased;

    -moz-osx-font-smoothing:grayscale;

    line-height:1.45;

  }

  .container{max-width:var(--maxw);margin:0 auto;padding:28px;}

  header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:8px 0}

  .logo{display:flex;align-items:center;gap:10px}

  .logo img{width:44px;height:44px;border-radius:6px;object-fit:cover}

  .site-title{font-weight:700;color:#fff}

  nav{display:flex;gap:12px;align-items:center}

  a.nav-link{color:var(--muted);text-decoration:none;padding:8px;border-radius:6px}

  a.nav-link:hover{color:#fff;background:var(--glass)}

  .hero{display:grid;grid-template-columns: 1fr 360px;gap:28px;align-items:center;padding:36px 0}

  @media (max-width:900px){ .hero{grid-template-columns:1fr;}}

  .hero-left h1{font-size:40px;margin:0 0 10px;color:#fff}

  .hero-left p{margin:0 0 18px;color:var(--muted)}

  .cta-row{display:flex;gap:12px;flex-wrap:wrap}

  .btn{background:var(--accent);color:#fff;padding:10px 14px;border-radius:8px;text-decoration:none;font-weight:600}

  .btn.ghost{background:transparent;border:1px solid rgba(255,255,255,0.06);color:var(--muted)}

  .cover{width:100%;max-width:360px;border-radius:12px;overflow:hidden;box-shadow:0 10px 30px rgba(0,0,0,0.6)}

  .cover img{display:block;width:100%;height:100%;object-fit:cover}

  .player{background:linear-gradient(180deg,rgba(255,255,255,0.02),transparent);padding:12px;border-radius:10px;margin-top:12px}

  .track{display:flex;gap:12px;align-items:center}

  .track .meta{flex:1}

  .controls{display:flex;gap:8px;align-items:center}

  .icon-btn{background:transparent;border:0;color:var(--muted);font-size:18px;padding:8px;border-radius:8px}

  .section{margin-top:40px}

  .grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}

  @media (max-width:900px){ .grid-3{grid-template-columns:repeat(1,1fr)}}

  .card{background:var(--card);padding:14px;border-radius:10px}

  h2{color:#fff;margin:0 0 12px}

  .muted{color:var(--muted)}

  .socials{display:flex;gap:10px}

  .socials a{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:8px;background:transparent;border:1px solid rgba(255,255,255,0.03);color:var(--muted);text-decoration:none}

  footer{margin:50px 0 30px;padding-top:24px;border-top:1px solid rgba(255,255,255,0.03);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px}

  .tour-list{list-style:none;padding:0;margin:0}

  .tour-item{display:flex;justify-content:space-between;padding:10px 0;border-bottom:1px dashed rgba(255,255,255,0.02)}

  .meta small{display:block;color:var(--muted)}

  form input, form textarea{width:100%;padding:10px;border-radius:8px;border:1px solid rgba(255,255,255,0.04);background:transparent;color:#fff;margin-top:8px}

  .badge{display:inline-block;padding:6px 10px;border-radius:999px;background:rgba(255,255,255,0.04);color:var(--muted);font-size:13px}

  /* audio timeline */

  .timeline{height:6px;background:rgba(255,255,255,0.04);border-radius:6px;position:relative;cursor:pointer;margin-top:10px}

  .timeline .progress{height:100%;width:0;background:linear-gradient(90deg,var(--accent),#ff9d9d);border-radius:6px}

  small.time{color:var(--muted);font-size:13px;margin-left:6px}

  /* simple responsive spacing */

  .spacer{height:8px}

</style>

</head>

<body>

  <div class="container">

    <header>

      <div class="logo">

        <img src="assets/cover.jpg" alt="Artist cover (replace)" />

        <div>

          <div class="site-title">YOUR ARTIST NAME</div>

          <div class="muted">Singer • Songwriter</div>

        </div>

      </div>

      <nav>

        <a class="nav-link" href="#music">Music</a>

        <a class="nav-link" href="#shows">Shows</a>

        <a class="nav-link" href="#about">About</a>

        <a class="nav-link" href="#contact">Contact</a>

      </nav>

    </header>


    <main>

      <section class="hero" id="top">

        <div class="hero-left">

          <h1>New single: "Title of Your Song"</h1>

          <p class="muted">Released: <span id="release-date">Jan 1, 2025</span> — Short teaser or one-line bio that hooks the listener.</p>

          <div class="cta-row">

            <a class="btn" href="#music">Listen</a>

            <a class="btn ghost" id="buy-link" href="#" target="_blank" rel="noopener">Buy / Stream</a>

            <a class="nav-link" href="assets/press-kit.pdf" download>Press Kit</a>

          </div>


          <div class="player" style="max-width:640px;">

            <div class="track">

              <img id="mini-cover" src="assets/cover.jpg" alt="cover" style="width:64px;height:64px;border-radius:8px;object-fit:cover" />

              <div class="meta">

                <div style="color:#fff;font-weight:700" id="track-title">Title of Your Song</div>

                <div class="muted" id="track-artist">Your Artist Name</div>

                <div class="timeline" id="timeline" title="Seek">

                  <div class="progress" id="progress"></div>

                </div>

                <div style="margin-top:8px;display:flex;align-items:center;gap:10px">

                  <div class="controls">

                    <button class="icon-btn" id="playpause" title="Play">►</button>

                    <button class="icon-btn" id="prev" title="Previous">«</button>

                    <button class="icon-btn" id="next" title="Next">»</button>

                  </div>

                  <small class="time" id="time">0:00 / 0:00</small>

                </div>

              </div>

            </div>


            <!-- Hidden native audio element; playlist loaded by JS -->

            <audio id="audio" preload="metadata"></audio>

          </div>


        </div>


        <div>

          <div class="cover">

            <img src="assets/cover.jpg" alt="Cover art — replace with your single/album art" />

          </div>

          <div style="margin-top:12px;display:flex;gap:8px">

            <a class="socials" aria-hidden="true" style="gap:8px">

              <a class="socials" href="#" title="Spotify (replace)"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" style="color:var(--muted)"><circle cx="12" cy="12" r="10" stroke="currentColor" stroke-opacity="0.25"/></svg></a>

            </a>

          </div>

        </div>

      </section>


      <section class="section" id="music">

        <h2>Music</h2>

        <div class="grid-3">

          <!-- Example track card (repeat for each release) -->

          <div class="card">

            <div style="display:flex;gap:12px;align-items:center">

              <img src="assets/cover.jpg" alt="" style="width:72px;height:72px;border-radius:8px;object-fit:cover" />

              <div>

                <div style="font-weight:700;color:#fff">Title of Your Song</div>

                <div class="muted">Single • 2025</div>

                <div style="margin-top:8px;display:flex;gap:8px">

                  <button class="btn" onclick="playTrack(0)">Play</button>

                  <a class="nav-link" href="#" onclick="openLink('https://open.spotify.com')" target="_blank" rel="noopener">Spotify</a>

                  <a class="nav-link" href="#" onclick="openLink('https://music.apple.com')" target="_blank" rel="noopener">Apple</a>

                </div>

              </div>

            </div>

          </div>


          <div class="card">

            <div style="display:flex;gap:12px;align-items:center">

              <img src="assets/cover2.jpg" alt="" style="width:72px;height:72px;border-radius:8px;object-fit:cover" />

              <div>

                <div style="font-weight:700;color:#fff">Another Track</div>

                <div class="muted">EP • 2024</div>

                <div style="margin-top:8px;display:flex;gap:8px">

                  <button class="btn" onclick="playTrack(1)">Play</button>

                  <a class="nav-link" href="#" onclick="openLink('https://bandcamp.com')" target="_blank">Bandcamp</a>

                </div>

              </div>

            </div>

          </div>


          <div class="card">

            <div style="display:flex;gap:12px;align-items:center">

              <img src="assets/cover3.jpg" alt="" style="width:72px;height:72px;border-radius:8px;object-fit:cover" />

              <div>

                <div style="font-weight:700;color:#fff">Live Session</div>

                <div class="muted">Live • 2023</div>

                <div style="margin-top:8px;display:flex;gap:8px">

                  <button class="btn" onclick="playTrack(2)">Play</button>

                  <a class="nav-link" href="#" onclick="openLink('https://soundcloud.com')" target="_blank">SoundCloud</a>

                </div>

              </div>

            </div>

          </div>


        </div>

      </section>


      <section class="section" id="shows">

        <h2>Shows</h2>

        <div class="card">

          <ul class="tour-list" id="tour-list">

            <li class="tour-item"><div><strong>Dec 20, 2025 — The Blue Room</strong><small>City, ST</small></div><div class="muted">Tickets</div></li>

            <li class="tour-item"><div><strong>Jan 10, 2026 — The Green Stage</strong><small>City, ST</small></div><div class="muted">Tickets</div></li>

          </ul>

          <p class="muted" style="margin-top:8px">To add a show: edit this HTML or manage via a light CMS.</p>

        </div>

      </section>


      <section class="section" id="about">

        <h2>About</h2>

        <div class="card">

          <p style="color:var(--muted)">Brief bio: Write a short paragraph about your musical background, influences, and achievements — keep it personal and specific. Replace this placeholder with 2–3 sentences about you and your music.</p>

          <div style="display:flex;gap:10px;margin-top:12px;flex-wrap:wrap">

            <a class="nav-link" href="assets/press-kit.pdf" download>Download Press Kit (PDF)</a>

            <a class="nav-link" href="mailto:booking@yourdomain.com">Booking: booking@yourdomain.com</a>

          </div>

        </div>

      </section>


      <section class="section" id="contact">

        <h2>Contact</h2>

        <div class="grid-3">

          <div class="card">

            <form id="contact-form" action="https://formspree.io/f/your-form-id" method="POST" target="_blank">

              <label class="badge">Contact / Booking</label>

              <input type="text" name="name" placeholder="Your name" required />

              <input type="email" name="email" placeholder="Email" required />

              <textarea name="message" rows="5" placeholder="Message" required></textarea>

              <div style="margin-top:8px">

                <button class="btn" type="submit">Send</button>

              </div>

              <p class="muted" style="margin-top:8px;font-size:13px">This form uses Formspree (replace with your endpoint).</p>

            </form>

          </div>


          <div class="card">

            <label class="badge">Mailing List</label>

            <p class="muted">Join the mailing list for new releases and tour announcements.</p>

            <form action="https://formspree.io/f/your-mailinglist-id" method="POST" target="_blank">

              <input type="email" name="email" placeholder="Your email" required />

              <div style="margin-top:8px"><button class="btn" type="submit">Subscribe</button></div>

            </form>

          </div>


          <div class="card">

            <label class="badge">Social</label>

            <div style="margin-top:12px;display:flex;gap:8px;flex-wrap:wrap">

              <a class="socials" href="#" target="_blank">Spotify</a>

              <a class="socials" href="#" target="_blank">Apple</a>

              <a class="socials" href="#" target="_blank">Instagram</a>

              <a class="socials" href="#" target="_blank">YouTube</a>

            </div>

            <div style="margin-top:12px" class="muted">Pro tip: link to artist profiles (not personal accounts).</div>

          </div>

        </div>

      </section>


      <footer>

        <div class="muted">© <span id="year"></span> Your Artist Name — All rights reserved.</div>

        <div style="display:flex;gap:8px;align-items:center">

          <a class="nav-link" href="mailto:press@yourdomain.com">Press</a>

          <a class="nav-link" href="#">Privacy</a>

        </div>

      </footer>


    </main>

  </div>


<script>

  // ====== Replace these with your hosted file URLs or streaming links ======

  const TRACKS = [

    { title: "Title of Your Song", artist: "Your Artist Name", src: "assets/track1.mp3", cover: "assets/cover.jpg" },

    { title: "Another Track", artist: "Your Artist Name", src: "assets/track2.mp3", cover: "assets/cover2.jpg" },

    { title: "Live Session", artist: "Your Artist Name", src: "assets/track3.mp3", cover: "assets/cover3.jpg" }

  ];

  // =======================================================================


  const audio = document.getElementById('audio');

  const playBtn = document.getElementById('playpause');

  const prevBtn = document.getElementById('prev');

  const nextBtn = document.getElementById('next');

  const progressEl = document.getElementById('progress');

  const timeline = document.getElementById('timeline');

  const timeEl = document.getElementById('time');

  const trackTitle = document.getElementById('track-title');

  const trackArtist = document.getElementById('track-artist');

  const miniCover = document.getElementById('mini-cover');


  let current = 0;

  let isPlaying = false;


  function loadTrack(i){

    const t = TRACKS[i];

    audio.src = t.src;

    trackTitle.textContent = t.title;

    trackArtist.textContent = t.artist;

    miniCover.src = t.cover || 'assets/cover.jpg';

    document.querySelector('.cover img').src = t.cover || 'assets/cover.jpg';

  }

  function playTrack(i){

    if (typeof i === 'number') current = i;

    loadTrack(current);

    audio.play().then(()=> {

      isPlaying = true;

      playBtn.textContent = "❚❚";

    }).catch(err => {

      // Autoplay might be blocked; change UI

      isPlaying = false;

      playBtn.textContent = "►";

      console.warn('Playback failed (user gesture needed?):', err);

    });

  }

  function togglePlay(){

    if(!audio.src) loadTrack(current);

    if(audio.paused){

      audio.play(); isPlaying = true; playBtn.textContent="❚❚";

    } else {

      audio.pause(); isPlaying = false; playBtn.textContent="►";

    }

  }

  function prev(){ current = (current - 1 + TRACKS.length) % TRACKS.length; playTrack(); }

  function next(){ current = (current + 1) % TRACKS.length; playTrack(); }


  playBtn.addEventListener('click', togglePlay);

  prevBtn.addEventListener('click', prev);

  nextBtn.addEventListener('click', next);


  audio.addEventListener('timeupdate', () => {

    if(audio.duration){

      const pct = (audio.currentTime / audio.duration) * 100;

      progressEl.style.width = pct + '%';

      timeEl.textContent = formatTime(audio.currentTime) + ' / ' + formatTime(audio.duration);

    }

  });

  audio.addEventListener('ended', () => {

    // auto next

    next();

  });


  timeline.addEventListener('click', (e) => {

    const rect = timeline.getBoundingClientRect();

    const pct = (e.clientX - rect.left) / rect.width;

    if(audio.duration) audio.currentTime = pct * audio.duration;

  });


  function formatTime(s){ s = Math.floor(s||0); const m = Math.floor(s/60); const sec = s%60; return m+':'+String(sec).padStart(2,'0'); }


  // small helpers

  function openLink(url){ window.open(url,'_blank','noopener'); }


  // init

  document.getElementById('year').textContent = new Date().getFullYear();


  // pre-load first track silently (no autoplay)

  loadTrack(0);


  // Optional: lightweight keyboard controls

  document.addEventListener('keydown', (e) => {

    if(e.code === 'Space') { e.preventDefault(); togglePlay(); }

    if(e.code === 'ArrowRight') next();

    if(e.code === 'ArrowLeft') prev();

  });


  // Example: dynamically populate tour list (if you want to update via JS)

  const tour = [

    { date: 'Dec 20, 2025', venue: 'The Blue Room', city: 'Austin, TX', link: '#' },

    { date: 'Jan 10, 2026', venue: 'Green Stage', city: 'Nashville, TN', link: '#' }

  ];

  const tourList = document.getElementById('tour-list');

  tourList.innerHTML = tour.map(t => `<li class="tour-item"><div><strong>${t.date} — ${t.venue}</strong><small>${t.city}</small></div><div><a class="nav-link" href="${t.link}">Tickets</a></div></li>`).join('');

</script>

</body>

</html>