{"id":13,"date":"2025-02-23T20:04:21","date_gmt":"2025-02-23T20:04:21","guid":{"rendered":"https:\/\/radio100fm.com.br\/radio\/?page_id=13"},"modified":"2026-03-23T18:24:56","modified_gmt":"2026-03-23T18:24:56","slug":"home","status":"publish","type":"page","link":"https:\/\/radio100fm.com.br\/radio\/","title":{"rendered":"HOME"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"13\" class=\"elementor elementor-13\">\n\t\t\t\t<div class=\"elementor-element elementor-element-92dc88e e-flex e-con-boxed e-con e-parent\" data-id=\"92dc88e\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3b05f03 elementor-widget elementor-widget-html\" data-id=\"3b05f03\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"pt-BR\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\/>\n  <title>R\u00e1dio F\u00e1cil - Player<\/title>\n\n  <link rel=\"manifest\" href=\"\/manifest.json\" \/>\n\n  <style>\n    * { box-sizing: border-box; }\n\n    :root{\n      --bg:#05070c;\n      --ink:#fff;\n      --muted:#cfd6e4;\n      --soft:rgba(255,255,255,.08);\n      --soft2:rgba(255,255,255,.12);\n      --line:rgba(255,255,255,.14);\n      --shadow:0 10px 30px rgba(0,0,0,.45);\n      --gold:#ffd35a;\n      --gold2:#ffea9c;\n    }\n\n    body {\n      margin: 0;\n      font-family: 'Roboto', sans-serif;\n      color: #fff;\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      justify-content: flex-start;\n      min-height: 100vh;\n      text-align: center;\n      padding: 20px;\n      position: relative;\n      background-image: url('https:\/\/glaudiotecnology.com.br\/GLLOGGER\/wp-content\/uploads\/2025\/06\/bg.gif');\n      background-repeat: no-repeat;\n      background-position: center center;\n      background-size: cover;\n      background-attachment: fixed;\n      background-color: rgba(0,0,0,0.85);\n      background-blend-mode: multiply;\n    }\n\n    body::before{\n      content:\"\";\n      position:fixed;\n      inset:0;\n      background:linear-gradient(180deg, rgba(2,5,15,.70), rgba(0,0,0,.82));\n      pointer-events:none;\n    }\n\n    #install-button {\n      position: fixed;\n      top: 15px;\n      right: 15px;\n      background: rgba(255,255,255,0.10);\n      border: 1px solid rgba(255,255,255,0.18);\n      color: white;\n      border-radius: 10px;\n      padding: 8px 12px;\n      font-size: 14px;\n      display: none;\n      align-items: center;\n      gap: 6px;\n      cursor: pointer;\n      z-index: 9999;\n      user-select: none;\n      transition: background 0.3s ease, transform .2s ease;\n      backdrop-filter: blur(10px);\n    }\n    #install-button:hover {\n      background: rgba(255,255,255,0.18);\n      transform: translateY(-1px);\n    }\n    #install-button svg {\n      width: 20px;\n      height: 20px;\n      fill: white;\n    }\n\n    #content {\n      position: relative;\n      z-index: 2;\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      gap: 18px;\n      max-width: 360px;\n      width: 100%;\n      background: rgba(0, 0, 0, 0.50);\n      border: 1px solid var(--line);\n      border-radius: 18px;\n      padding: 20px;\n      box-shadow: var(--shadow);\n      backdrop-filter: blur(10px);\n    }\n\n    #album-cover {\n      border-radius: 18px;\n      width: 100%;\n      max-width: 320px;\n      height: auto;\n      aspect-ratio: 1;\n      object-fit: cover;\n      box-shadow: 0 0 20px rgba(0,0,0,.65);\n      transition: transform 0.6s ease, opacity 0.5s ease;\n      background: rgba(255,255,255,.04);\n    }\n\n    .info {\n      width: 100%;\n    }\n\n    .info h4 {\n      font-size: 16px;\n      margin: 5px 0 4px;\n      color: #cfd6e4;\n      font-weight: 400;\n      word-break: break-word;\n    }\n\n    .info h3 {\n      font-size: 22px;\n      margin: 0;\n      font-weight: 700;\n      color: var(--gold);\n      line-height: 1.2;\n      word-break: break-word;\n    }\n\n    .play-btn {\n      background: rgba(255,255,255,0.10);\n      border: 1px solid rgba(255,255,255,0.16);\n      border-radius: 50%;\n      width: 82px;\n      height: 82px;\n      padding: 0;\n      cursor: pointer;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      transition: background 0.3s ease, transform .2s ease;\n      backdrop-filter: blur(8px);\n    }\n\n    .play-btn:hover {\n      background: rgba(255,255,255,0.18);\n      transform: translateY(-1px);\n    }\n\n    .play-btn svg {\n      width: 42px;\n      height: 42px;\n      fill: white;\n    }\n\n    .preview-box{\n      width:100%;\n      display:none;\n      flex-direction:column;\n      gap:10px;\n      text-align:left;\n      background:rgba(255,255,255,.04);\n      border:1px solid rgba(255,255,255,.10);\n      border-radius:14px;\n      padding:12px;\n    }\n\n    .preview-label{\n      font-size:12px;\n      color:rgba(255,255,255,.72);\n      margin-bottom:2px;\n    }\n\n    .preview-title{\n      font-size:13px;\n      line-height:1.35;\n      font-weight:700;\n      color:var(--gold2);\n      display:-webkit-box;\n      -webkit-line-clamp:2;\n      -webkit-box-orient:vertical;\n      overflow:hidden;\n    }\n\n    .mini-player{\n      display:flex;\n      align-items:center;\n      gap:12px;\n    }\n\n    .mini-play-btn{\n      width:44px;\n      height:44px;\n      border:none;\n      border-radius:50%;\n      background:linear-gradient(135deg, rgba(255,211,90,.22), rgba(255,234,156,.10));\n      border:1px solid rgba(255,234,156,.22);\n      color:#fff;\n      display:grid;\n      place-items:center;\n      cursor:pointer;\n      flex-shrink:0;\n      transition:transform .2s ease, filter .2s ease;\n    }\n\n    .mini-play-btn:hover{\n      transform:translateY(-1px);\n      filter:brightness(1.06);\n    }\n\n    .mini-play-btn svg{\n      width:18px;\n      height:18px;\n      fill:white;\n    }\n\n    .progress-wrap{\n      min-width:0;\n      flex:1;\n      display:flex;\n      flex-direction:column;\n      gap:6px;\n    }\n\n    .seek{\n      width:100%;\n      appearance:none;\n      height:4px;\n      border-radius:999px;\n      background:rgba(255,255,255,.16);\n      outline:none;\n      cursor:pointer;\n    }\n\n    .seek::-webkit-slider-thumb{\n      appearance:none;\n      width:12px;\n      height:12px;\n      border-radius:50%;\n      background:var(--gold);\n      border:none;\n    }\n\n    .seek::-moz-range-thumb{\n      width:12px;\n      height:12px;\n      border-radius:50%;\n      background:var(--gold);\n      border:none;\n    }\n\n    .time-row{\n      display:flex;\n      justify-content:space-between;\n      gap:8px;\n      font-size:11px;\n      color:rgba(255,255,255,.68);\n    }\n\n    #preview-audio{\n      display:none;\n    }\n\n    #lyrics-container {\n      position: relative;\n      z-index: 2;\n      margin-top: 20px;\n      max-height: 420px;\n      overflow-y: auto;\n      padding: 16px;\n      background: rgba(255, 255, 255, 0.05);\n      border: 1px solid var(--line);\n      border-radius: 12px;\n      font-size: 18px;\n      line-height: 1.6;\n      white-space: pre-wrap;\n      text-align: left;\n      color: #ddd;\n      width: 100%;\n      max-width: 700px;\n      user-select: text;\n      box-shadow: var(--shadow);\n      backdrop-filter: blur(8px);\n    }\n\n    .logo {\n      position: relative;\n      z-index: 2;\n      margin-top: 30px;\n      max-width: 150px;\n    }\n\n    footer {\n      position: relative;\n      z-index: 2;\n      margin-top: 34px;\n      text-align: center;\n      font-size: 14px;\n      color: #aaa;\n    }\n\n    footer a {\n      color: #aaa;\n      text-decoration: none;\n    }\n\n    footer a:hover {\n      color: #fff;\n      text-decoration: underline;\n    }\n\n    .hide{\n      display:none !important;\n    }\n  <\/style>\n<\/head>\n<body>\n  <div id=\"install-button\" title=\"Instalar aplicativo\">\n    <svg viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 48l240 240-48 48-144-144v272h-96V192L64 336 16 288z\"\/><\/svg>\n    <span>Instalar App<\/span>\n  <\/div>\n\n  <div id=\"content\">\n    <img\n      decoding=\"async\"\n      id=\"album-cover\"\n      src=\"https:\/\/img.radios.com.br\/radio\/lg\/radio158034_1600349106.png\"\n      alt=\"Capa do \u00c1lbum\"\n    \/>\n\n    <button id=\"togglePlay\" class=\"play-btn\" aria-label=\"Tocar ou pausar\">\n      <svg id=\"play-icon\" viewBox=\"0 0 64 64\"><polygon points=\"24,16 56,32 24,48\"\/><\/svg>\n      <svg id=\"pause-icon\" viewBox=\"0 0 64 64\" style=\"display:none;\">\n        <rect x=\"18\" y=\"16\" width=\"10\" height=\"32\"\/>\n        <rect x=\"36\" y=\"16\" width=\"10\" height=\"32\"\/>\n      <\/svg>\n    <\/button>\n\n    <audio id=\"audio\" crossorigin=\"anonymous\" preload=\"none\">\n      <source src=\"https:\/\/stm1.glaudiotecnology.uk:7118\/stream\" type=\"audio\/mpeg\" \/>\n      Seu navegador n\u00e3o suporta \u00e1udio.\n    <\/audio>\n\n    <div class=\"info\">\n      <h4 id=\"artist-name\">Carregando artista...<\/h4>\n      <h3 id=\"song-title\">Carregando m\u00fasica...<\/h3>\n    <\/div>\n\n    <div id=\"preview-box\" class=\"preview-box\">\n      <div>\n        <div class=\"preview-label\">Preview (iTunes)<\/div>\n        <div id=\"preview-title\" class=\"preview-title\">\u2014<\/div>\n      <\/div>\n\n      <div class=\"mini-player\">\n        <button id=\"preview-toggle\" class=\"mini-play-btn\" aria-label=\"Tocar preview\">\n          <svg id=\"preview-play-icon\" viewBox=\"0 0 64 64\"><polygon points=\"24,16 56,32 24,48\"\/><\/svg>\n          <svg id=\"preview-pause-icon\" class=\"hide\" viewBox=\"0 0 64 64\">\n            <rect x=\"18\" y=\"16\" width=\"10\" height=\"32\"\/>\n            <rect x=\"36\" y=\"16\" width=\"10\" height=\"32\"\/>\n          <\/svg>\n        <\/button>\n\n        <div class=\"progress-wrap\">\n          <input id=\"preview-seek\" class=\"seek\" type=\"range\" min=\"0\" max=\"30\" value=\"0\" step=\"0.1\">\n          <div class=\"time-row\">\n            <span id=\"preview-current\">0:00<\/span>\n            <span id=\"preview-duration\">0:30<\/span>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <audio id=\"preview-audio\" preload=\"none\"><\/audio>\n    <\/div>\n  <\/div>\n\n  <div id=\"lyrics-container\">Letra da m\u00fasica ser\u00e1 exibida aqui...<\/div>\n\n  <img decoding=\"async\" class=\"logo\" src=\"\" alt=\"\">\n\n  <footer>\n    <a href=\"https:\/\/glaudiotecnology.com.br\" target=\"_blank\" rel=\"noopener noreferrer\">\n      Player desenvolvido por Gabriel L. Garcia\n    <\/a>\n  <\/footer>\n\n  <script>\n    const STREAM_URL = \"https:\/\/stm1.glaudiotecnology.uk:7118\/stream\";\n    const DEFAULT_COVER = \"https:\/\/img.radios.com.br\/radio\/lg\/radio158034_1600349106.png\";\n\n    const METADATA_SOURCES = [\n      \"https:\/\/glaudiotecnology.uk\/api\/NzExOCsx\",\n      \"https:\/\/corsproxy.io\/?\" + encodeURIComponent(\"https:\/\/glaudiotecnology.uk\/api\/NzExOCsx\"),\n      \"https:\/\/corsproxy.io\/?\" + encodeURIComponent(\"http:\/\/glaudiotecnology.uk\/api\/NzExOCsx\")\n    ];\n\n    const audio = document.getElementById(\"audio\");\n    const playIcon = document.getElementById(\"play-icon\");\n    const pauseIcon = document.getElementById(\"pause-icon\");\n    const togglePlay = document.getElementById(\"togglePlay\");\n    const capaElemento = document.getElementById(\"album-cover\");\n    const artistNameElem = document.getElementById(\"artist-name\");\n    const songTitleElem = document.getElementById(\"song-title\");\n    const lyricsContainer = document.getElementById(\"lyrics-container\");\n\n    const previewBox = document.getElementById(\"preview-box\");\n    const previewAudio = document.getElementById(\"preview-audio\");\n    const previewTitle = document.getElementById(\"preview-title\");\n    const previewToggle = document.getElementById(\"preview-toggle\");\n    const previewPlayIcon = document.getElementById(\"preview-play-icon\");\n    const previewPauseIcon = document.getElementById(\"preview-pause-icon\");\n    const previewSeek = document.getElementById(\"preview-seek\");\n    const previewCurrent = document.getElementById(\"preview-current\");\n    const previewDuration = document.getElementById(\"preview-duration\");\n\n    audio.querySelector(\"source\").src = STREAM_URL;\n\n    function setMainPlayerUI(isPlaying){\n      playIcon.style.display = isPlaying ? \"none\" : \"block\";\n      pauseIcon.style.display = isPlaying ? \"block\" : \"none\";\n    }\n\n    togglePlay.addEventListener(\"click\", () => {\n      if (audio.paused) {\n        audio.load();\n        audio.play()\n          .then(() => setMainPlayerUI(true))\n          .catch((err) => {\n            console.error(\"Erro ao tentar reproduzir o \u00e1udio:\", err.message);\n            alert(\"N\u00e3o foi poss\u00edvel iniciar o \u00e1udio. Verifique se o stream est\u00e1 dispon\u00edvel.\");\n          });\n      } else {\n        audio.pause();\n        setMainPlayerUI(false);\n      }\n    });\n\n    audio.addEventListener(\"play\", () => setMainPlayerUI(true));\n    audio.addEventListener(\"pause\", () => setMainPlayerUI(false));\n\n    let ultimaMusica = \"\";\n\n    function decodeText(buffer){\n      try{\n        return new TextDecoder(\"iso-8859-1\").decode(buffer);\n      }catch(e){\n        return new TextDecoder(\"utf-8\").decode(buffer);\n      }\n    }\n\n    function getXmlValue(xmlDoc, tag){\n      return xmlDoc.querySelector(tag)?.textContent?.trim() || \"\";\n    }\n\n    function parseArtistTitle(text){\n      const raw = (text || \"\").trim();\n\n      if(!raw){\n        return { artista: \"Desconhecido\", musica: \"Ao vivo\" };\n      }\n\n      const partes = raw.split(\" - \");\n      if(partes.length >= 2){\n        return {\n          artista: partes.shift().trim() || \"Desconhecido\",\n          musica: partes.join(\" - \").trim() || \"Ao vivo\"\n        };\n      }\n\n      return {\n        artista: \"Desconhecido\",\n        musica: raw\n      };\n    }\n\n    async function fetchMetadataXML(){\n      let lastError = null;\n\n      for(const url of METADATA_SOURCES){\n        try{\n          const res = await fetch(url, { cache: \"no-store\" });\n          if(!res.ok) throw new Error(\"HTTP \" + res.status);\n\n          const buffer = await res.arrayBuffer();\n          const text = decodeText(buffer);\n          const parser = new DOMParser();\n          const xmlDoc = parser.parseFromString(text, \"application\/xml\");\n\n          const parserError = xmlDoc.querySelector(\"parsererror\");\n          if(parserError) throw new Error(\"XML inv\u00e1lido\");\n\n          return xmlDoc;\n        }catch(err){\n          lastError = err;\n        }\n      }\n\n      throw lastError || new Error(\"Falha ao carregar XML\");\n    }\n\n    function stripLRC(lrc){\n      return lrc\n        .replace(\/^\\s*\\[(?:ti|ar|al|by|length|offset|re|ve):.*?\\]\\s*$\/gmi,\"\")\n        .replace(\/\\s*\\[\\d{1,2}:\\d{2}(?:\\.\\d{1,3})?\\]\\s*\/g,\"\")\n        .trim();\n    }\n\n    async function buscarLetraLRCLIB(artista, musica){\n      const url = `https:\/\/lrclib.net\/api\/get?track_name=${encodeURIComponent(musica)}&artist_name=${encodeURIComponent(artista)}`;\n      const response = await fetch(url, { cache: \"no-store\" });\n      if (!response.ok) throw new Error(\"lrclib\");\n      const data = await response.json();\n      return (data?.plainLyrics || (data?.syncedLyrics ? stripLRC(data.syncedLyrics) : \"\") || \"\").trim();\n    }\n\n    async function buscarLetraOVH(artista, musica) {\n      const url = `https:\/\/api.lyrics.ovh\/v1\/${encodeURIComponent(artista)}\/${encodeURIComponent(musica)}`;\n      const response = await fetch(url, { cache: \"no-store\" });\n      if (!response.ok) throw new Error(\"ovh\");\n      const data = await response.json();\n      return (data?.lyrics || \"\").trim();\n    }\n\n    async function buscarLetra(artista, musica) {\n      try{\n        const letra = await buscarLetraLRCLIB(artista, musica);\n        if(letra) return letra;\n      }catch(e){}\n      try{\n        const letra = await buscarLetraOVH(artista, musica);\n        if(letra) return letra;\n      }catch(e){}\n      return \"Letra n\u00e3o dispon\u00edvel para esta m\u00fasica.\";\n    }\n\n    async function buscarNoITunes(artista, musica){\n      const rawTitle = `${artista} ${musica}`.trim();\n      const busca = await fetch(`https:\/\/itunes.apple.com\/search?term=${encodeURIComponent(rawTitle)}&entity=song&limit=1`, {\n        cache: \"no-store\"\n      });\n      const resultado = await busca.json();\n      return resultado?.results?.[0] || null;\n    }\n\n    function setPreviewUI(isPlaying){\n      previewPlayIcon.classList.toggle(\"hide\", isPlaying);\n      previewPauseIcon.classList.toggle(\"hide\", !isPlaying);\n    }\n\n    function formatTime(sec){\n      const s = Math.floor(sec || 0);\n      const m = Math.floor(s \/ 60);\n      const r = s % 60;\n      return `${m}:${String(r).padStart(2, \"0\")}`;\n    }\n\n    function resetPreview(){\n      previewAudio.pause();\n      previewAudio.removeAttribute(\"src\");\n      previewAudio.load();\n      previewSeek.value = 0;\n      previewSeek.max = 30;\n      previewCurrent.textContent = \"0:00\";\n      previewDuration.textContent = \"0:30\";\n      setPreviewUI(false);\n      previewBox.style.display = \"none\";\n    }\n\n    function normalizeCoverUrl(url){\n      if(!url) return \"\";\n      return url.replace(\/^http:\\\/\\\/\/i, \"https:\/\/\").trim();\n    }\n\n    function isValidCover(url){\n      if(!url) return false;\n\n      const u = url.trim().toLowerCase();\n\n      if(u.includes(\"img-capa-artista-padrao\")) return false;\n      if(u.includes(\"placeholder\")) return false;\n      if(u.includes(\"default\")) return false;\n\n      return true;\n    }\n\n    previewToggle.addEventListener(\"click\", async () => {\n      if(!previewAudio.src) return;\n\n      if(previewAudio.paused){\n        try{\n          await previewAudio.play();\n          setPreviewUI(true);\n        }catch(e){}\n      }else{\n        previewAudio.pause();\n        setPreviewUI(false);\n      }\n    });\n\n    previewAudio.addEventListener(\"loadedmetadata\", () => {\n      const dur = isFinite(previewAudio.duration) && previewAudio.duration > 0 ? previewAudio.duration : 30;\n      previewSeek.max = dur;\n      previewDuration.textContent = formatTime(dur);\n    });\n\n    previewAudio.addEventListener(\"timeupdate\", () => {\n      previewSeek.value = previewAudio.currentTime || 0;\n      previewCurrent.textContent = formatTime(previewAudio.currentTime || 0);\n    });\n\n    previewAudio.addEventListener(\"ended\", () => {\n      previewSeek.value = 0;\n      previewCurrent.textContent = \"0:00\";\n      setPreviewUI(false);\n    });\n\n    previewAudio.addEventListener(\"pause\", () => setPreviewUI(false));\n    previewAudio.addEventListener(\"play\", () => setPreviewUI(true));\n\n    previewSeek.addEventListener(\"input\", () => {\n      if(previewAudio.src){\n        previewAudio.currentTime = Number(previewSeek.value || 0);\n      }\n    });\n\n    async function atualizarMetadata() {\n      try {\n        const xmlDoc = await fetchMetadataXML();\n\n        const musicaAtual = getXmlValue(xmlDoc, \"musica_atual\");\n        const capaMusica = getXmlValue(xmlDoc, \"capa_musica\");\n        const tituloRadio = getXmlValue(xmlDoc, \"titulo\") || \"R\u00e1dio F\u00e1cil\";\n\n        const parsed = parseArtistTitle(musicaAtual);\n        const artista = parsed.artista || tituloRadio;\n        const musica = parsed.musica || \"Ao vivo\";\n\n        if (musicaAtual && musicaAtual !== ultimaMusica) {\n          ultimaMusica = musicaAtual;\n\n          artistNameElem.textContent = artista;\n          songTitleElem.textContent = musica;\n\n          resetPreview();\n\n          let itunes = null;\n          try{\n            itunes = await buscarNoITunes(artista, musica);\n          }catch(e){}\n\n          if(itunes?.previewUrl){\n            previewTitle.textContent = `${artista} \u2014 ${musica}`;\n            previewAudio.src = itunes.previewUrl;\n            previewBox.style.display = \"flex\";\n          }\n\n          let capaDoXML = normalizeCoverUrl(capaMusica);\n\n          let capaITunes = \"\";\n          if(itunes?.artworkUrl100){\n            capaITunes = itunes.artworkUrl100\n              .replace(\/100x100bb\\.jpg\/, \"600x600bb.jpg\")\n              .replace(\"100x100\", \"600x600\");\n          }\n\n          const novaCapa = isValidCover(capaDoXML)\n            ? capaDoXML\n            : (capaITunes || DEFAULT_COVER);\n\n          const imgTemp = new Image();\n          imgTemp.onload = () => {\n            capaElemento.style.opacity = 0;\n            capaElemento.style.transform = \"scale(0.96)\";\n            setTimeout(() => {\n              capaElemento.src = novaCapa;\n              capaElemento.style.opacity = 1;\n              capaElemento.style.transform = \"scale(1)\";\n            }, 100);\n          };\n          imgTemp.onerror = () => {\n            capaElemento.src = DEFAULT_COVER;\n          };\n          imgTemp.src = novaCapa;\n\n          lyricsContainer.innerText = \"Carregando letra...\";\n          const letra = await buscarLetra(artista, musica);\n          lyricsContainer.innerText = letra;\n        }\n      } catch (e) {\n        console.warn(\"Erro ao buscar metadados:\", e);\n      }\n    }\n\n    atualizarMetadata();\n    setInterval(atualizarMetadata, 20000);\n\n    if (\"serviceWorker\" in navigator) {\n      navigator.serviceWorker.register(\"\/service-worker.js\")\n        .then(() => console.log(\"Service Worker registrado com sucesso.\"))\n        .catch(err => console.error(\"Erro ao registrar o Service Worker:\", err));\n    }\n\n    let deferredPrompt;\n    const installBtn = document.getElementById(\"install-button\");\n\n    window.addEventListener(\"beforeinstallprompt\", (e) => {\n      e.preventDefault();\n      deferredPrompt = e;\n      installBtn.style.display = \"flex\";\n    });\n\n    installBtn.addEventListener(\"click\", async () => {\n      if (deferredPrompt) {\n        deferredPrompt.prompt();\n        const { outcome } = await deferredPrompt.userChoice;\n        if (outcome === \"accepted\") {\n          console.log(\"Usu\u00e1rio aceitou instalar o app\");\n        } else {\n          console.log(\"Usu\u00e1rio recusou instalar o app\");\n        }\n        deferredPrompt = null;\n        installBtn.style.display = \"none\";\n      } else {\n        alert(\"Para instalar o app no iPhone, abra no Safari, toque no \u00edcone de compartilhar e depois em 'Adicionar \u00e0 Tela de In\u00edcio'.\");\n      }\n    });\n  <\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>R\u00e1dio F\u00e1cil &#8211; Player Instalar App Seu navegador n\u00e3o suporta \u00e1udio. Carregando artista&#8230; Carregando m\u00fasica&#8230; Preview (iTunes) \u2014 0:00 0:30 Letra da m\u00fasica ser\u00e1 exibida aqui&#8230; Player desenvolvido por Gabriel L. Garcia<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-13","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/radio100fm.com.br\/radio\/index.php\/wp-json\/wp\/v2\/pages\/13","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/radio100fm.com.br\/radio\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/radio100fm.com.br\/radio\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/radio100fm.com.br\/radio\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/radio100fm.com.br\/radio\/index.php\/wp-json\/wp\/v2\/comments?post=13"}],"version-history":[{"count":91,"href":"https:\/\/radio100fm.com.br\/radio\/index.php\/wp-json\/wp\/v2\/pages\/13\/revisions"}],"predecessor-version":[{"id":115,"href":"https:\/\/radio100fm.com.br\/radio\/index.php\/wp-json\/wp\/v2\/pages\/13\/revisions\/115"}],"wp:attachment":[{"href":"https:\/\/radio100fm.com.br\/radio\/index.php\/wp-json\/wp\/v2\/media?parent=13"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}