<!-- SOLID CITY · part 2862 -->
e.'; if (cur === s) el.lyr.textContent = lyrCache[s.n];
    }).catch(function () { el.lyr.textContent = 'Lyrics unavailable.'; });
  }

  /* ---------- UI ---------- */
  function fmt(s) { s = Math.max(0, Math.floor(s || 0)); return Math.floor(s / 60) + ':' + ('0' + (s % 60)).slice(-2); }
  function h(tag, cls, html) { var e = document.createElement(tag); if (cls) e.className = cls; if (html != null) e.innerHTML = html; return e; }
  var el = {}, tab = 'songs';
  function build(host) {
    var mini = el.mini = h('div', 'mp-mini');
    mini.innerHTML = '<div class="mp-eq"><i></i><i></i><i></i><i></i></div>' +
      '<button type="button" class="mp-meta" aria-label="Open music player"><b class="mp-mtitle">The King’s music</b><span class="mp-mkind">SOLIDBIGISLAND · TAP TO OPEN</span><em class="mp-boost" hidden>📡 STUDIO RADIO</em></button>' +
      '<button type="button" class="mp-ib mp-prev" aria-label="Previous">⏮</button><button type="button" class="mp-ib mp-play" aria-label="Play">▶</button><button type="button" class="mp-ib mp-next" aria-label="Next">⏭</button>' +
      '<div class="mp-mbar"><i></i></div>';
    host.appendChild(mini);
    var p = el.panel = h('div', 'mp-panel'); p.hidden = true;
    p.innerHTML =
      '<div class="mp-head"><img class="mp-thumb" alt=""><div class="mp-ht"><span class="mp-badge"></span><b class="mp-title">—</b><small class="mp-sub"></small></div><button type="button" class="mp-x" aria-label="Close player">✕</button></div>' +
      '<div class="mp-seek"><span class="mp-tc">0:00</span><input type="range" min="0" max="1000" value="0" class="mp-range" aria-label="Seek"><span class="mp-td">0:00</span></div>' +
      '<div class="mp-ctl"><button type="button" class="mp-cb mp-shuf" title="Shuffle">⤮</button><button type="button" class="mp-cb mp-prev">⏮</button><button type="button" class="mp-cb mp-big mp-play">▶</button><button type="button" class="mp-cb mp-next">⏭</button><button type="button" class="mp-cb mp-rep" title="Repeat">↻</button></div>' +
      '<div class="mp-vol"><span>🔈</span><input type="range" min="0" max="100" class="mp-range mp-volr" aria-label="Volume"><span>🔊</span></div>' +
      '<div class="mp-tabs"><button type="button" data-t="songs" class="is-on">SONGS</button><button type="button" data-t="lyrics">LYRICS</button></div>' +
      '<div class="mp-tab mp-songs"><input type="search" class="mp-q" placeholder="Search the King’s songs…" autocomplete="off"><div class="mp-filters"></div><div class="mp-list" role="list"></div><p class="mp-note"></p></div>' +
      '<div class="mp-tab mp-lyrics" hidden><b class="mp-lt"></b><pre class="mp-lyr"></pre><a class="mp-tt" target="_blank" rel="noopener" hidden>Watch on TikTok @solidbigisland ↗</a></div>';
    host.appendChild(p);
    var q = function (s, root) { return (root || p).querySelector(s); };
    el.mTitle = q('.mp-mtitle', mini); el.mKind = q('.mp-mkind', mini); el.mBar = q('.mp-mbar i', mini); el.boost = q('.mp-boost', mini);
    el.thumb = q('.mp-thumb'); el.badge = q('.mp-badge'); el.title = q('.mp-title'); el.sub = q('.mp-sub');
    el.seek = q('.mp-seek .mp-range'); el.tCur = q('.mp-tc'); el.tDur = q('.mp-td'); el.vol = q('.mp-volr');
    el.shuf = q('.mp-shuf'); el.rep = q('.mp-rep'); el.q = q('.mp-q'); el.filters = q('.mp-filters'); el.list = q('.mp-list'); el.note = q('.mp-note');
    el.lyr = q('.mp-lyr'); el.lyrTitle = q('.mp-lt'); el.lyrLink = q('.mp-tt');
    el.vol.value = Math.round(st.vol * 100);
    if (FIXED_VOL) { var vr = q('.mp-vol'); vr.classList.add('mp-vol-hw'); el.vol.hidden = true; var hint = document.createElement('small'); hint.className = 'mp-volhint'; hint.textContent = 'iPhone: use the side volume buttons. Music keeps playing when you lock the screen.'; vr.appendChild(hint); }
    [mini, p].forEach(function (root) {
      root.querySelectorAll('.mp-play').forEach(function (b) { b.addEventListener('click', function (e) { e.stopPropagation(); toggle(); }); });
      root.querySelectorAll('.mp-next').forEach(function (b) { b.addEventListener('click', function (e) { e.stopPropagation(); ensureCtx(); if (!data) load().then(function () { step(1); }); else step(1); }); });
      root.querySelectorAll('.mp-prev').forEach(function (b) { b.addEventListener('click', function (e) { e.stopPropagation(); ensureCtx(); if (data) prev(); }); });
    });
    q('.mp-meta', mini).addEventListener('click', function () { open(true); });
    q('.mp-x').addEventListener('click', function () { open(false); });
    el.seek.addEventListener('input', function () { seeking = true; var d = audio.duration || (cur && cur.dur) || 0; el.tCur.textContent = fmt(el.seek.value / 1000 * d); });
    el.seek.addEventListener('change', function () { var d = audio.duration || 0; if (d) audio.currentTime = el.seek.value / 1000 * d; seeking = false; save(); });
    el.vol.addEventListener('input', function () { st.vol = el.vol.value / 100; applyVol(); save(); });
    el.shuf.addEventListener('cl