
{"id":364,"date":"2024-05-11T18:12:09","date_gmt":"2024-05-11T16:12:09","guid":{"rendered":"https:\/\/feflavisalsa.com\/?page_id=364"},"modified":"2026-03-25T00:49:24","modified_gmt":"2026-03-24T23:49:24","slug":"prueba","status":"publish","type":"page","link":"https:\/\/feflavisalsa.com\/","title":{"rendered":""},"content":{"rendered":"\t\t<!-- full-screen canvas for fireworks visible behind the shortcode player -->\n\t\t<canvas id=\"fx-canvas\" aria-hidden=\"true\" style=\"position:fixed;inset:0;width:100vw;height:100vh;z-index:0;pointer-events:none;mix-blend-mode:screen;\"><\/canvas>\n\n\t\t<div id=\"fefla-player-embed\" class=\"fefla-player\" style=\" --accent: #ff6b5f;\">\n\t\t  <div class=\"logo\" aria-hidden=\"true\" style=\"background-image:url(https:\/\/feflavisalsa.com\/wp-content\/uploads\/2024\/08\/nuevo-2-512-x-512.png);background-size:cover;background-position:center;display:block;margin-left:auto;margin-right:auto;\"><\/div>\n\n\t\t  <div class=\"row\" style=\"margin-top:8px\">\n\t\t    <div>\n\t\t      <div class=\"station\">feflavisalsa<\/div>\n\t\t      <div id=\"fefla-status\" class=\"status\">Listo<\/div>\n\t\t    <\/div>\n\t\t    <div style=\"text-align:right\">\n\t\t      <div id=\"fefla-now\" class=\"meta\" style=\"background:transparent;padding:0\">Escuchando en vivo \u2014 feflavisalsa<\/div>\n\t\t    <\/div>\n\t\t  <\/div>\n\n\t\t  <div class=\"controls\" style=\"margin-top:12px\">\n\n\n\t\t    <button id=\"fefla-play\" class=\"btn\" aria-pressed=\"false\" title=\"Reproducir \/ Pausar\">\n  <span class=\"icon play\" aria-hidden=\"true\">\n    <svg viewBox=\"0 0 24 24\" width=\"44\" height=\"44\" fill=\"currentColor\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M8 5v14l11-7z\"\/><\/svg>\n  <\/span>\n  <span class=\"icon stop\" aria-hidden=\"true\" style=\"display:none\">\n    <svg viewBox=\"0 0 24 24\" width=\"44\" height=\"44\" fill=\"currentColor\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\"\/><\/svg>\n  <\/span>\n<\/button>\n\n\t\t    <div class=\"vol\">\n\t\t      <button id=\"fefla-mute\" class=\"btn\" title=\"Silenciar\">\ud83d\udd0a<\/button>\n\t\t      <input id=\"fefla-volume\" type=\"range\" min=\"0\" max=\"1\" step=\"0.01\" value=\"1\" aria-label=\"Volumen\">\n\t\t    <\/div>\n\t\t  <\/div>\n\n\t\t  <div id=\"fefla-metadata\" class=\"meta\" aria-live=\"polite\" style=\"margin-top:10px\">\n\t\t    <div class=\"track-info\" style=\"width:100%\">\n\t\t      <div id=\"fefla-title\" class=\"track-title\">\n\t\t        <div class=\"marquee\"><span class=\"marquee-inner\">T\u00edtulo<\/span><\/div>\n\t\t      <\/div>\n\t\t      <div id=\"fefla-artist\" class=\"track-artist\">\n\t\t        <div class=\"marquee\"><span class=\"marquee-inner\">Artista<\/span><\/div>\n\t\t      <\/div>\n\t\t    <\/div>\n\t\t  <\/div>\n\n\t\t  <div id=\"fefla-error\" class=\"error\" role=\"status\" aria-live=\"polite\"><\/div>\n\t\t<\/div>\n\n\t\t<audio id=\"fefla-audio\" preload=\"none\" crossorigin=\"anonymous\">\n\t\t  <source src=\"https:\/\/feflavisalsaradio.com\/listen\/feflavisalsa_radio\/radio.mp3\" type=\"audio\/mpeg\">\n\t\t<\/audio>\n\n\t\t<script>\n\t\t\/\/ Ensure frontend options are available even if wp_localize_script didn't run (fallback)\n\t\twindow.FEFLA_RADIO_OPTS = window.FEFLA_RADIO_OPTS || { stream_url: \"https:\/\/feflavisalsaradio.com\/listen\/feflavisalsa_radio\/radio.mp3\", station_name: \"feflavisalsa\", logo_url: \"https:\/\/feflavisalsa.com\/wp-content\/uploads\/2024\/08\/nuevo-2-512-x-512.png\", accent_color: \"#ff6b5f\" };\n\n\t\t\/\/ Compact visualiser for shortcode: simple fireworks that spawn near the metadata area and behind the player.\n\t\t(function(){\n\t\t  const canvas = document.getElementById('fx-canvas');\n\t\t  if (!canvas) return;\n\t\t  const ctx = canvas.getContext && canvas.getContext('2d') ? canvas.getContext('2d') : null;\n\t\t  if (!ctx) return;\n\n\t\t  function resize() {\n\t\t    const dpr = Math.max(1, window.devicePixelRatio || 1);\n\t\t    canvas.width = Math.round(window.innerWidth * dpr);\n\t\t    canvas.height = Math.round(window.innerHeight * dpr);\n\t\t    canvas.style.width = window.innerWidth + 'px';\n\t\t    canvas.style.height = window.innerHeight + 'px';\n\t\t    ctx.setTransform(dpr,0,0,dpr,0,0);\n\t\t  }\n\t\t  window.addEventListener('resize', resize, {passive:true});\n\t\t  resize();\n\n\t\t  const particles = [];\n\t\t  function createFirework(x,y,hue,count=26,speed=2.4){\n\t\t    for(let i=0;i<count;i++){\n\t\t      const angle = (Math.PI*2)*(i\/count) + (Math.random()-0.5)*0.4;\n\t\t      const sp = speed * (0.6 + Math.random()*0.8);\n\t\t      particles.push({\n\t\t        x,y,\n\t\t        vx: Math.cos(angle)*sp,\n\t\t        vy: Math.sin(angle)*sp,\n\t\t        life: 48 + Math.round(Math.random()*36),\n\t\t        age:0,\n\t\t        hue: (hue + Math.random()*30 - 15)|0,\n\t\t        alpha:1,\n\t\t        size:1 + Math.random()*2\n\t\t      });\n\t\t    }\n\t\t  }\n\n\t\t  function render(){\n\t\t    \/\/ slight fade to create trails\n\t\t    ctx.fillStyle = 'rgba(4,6,8,0.18)';\n\t\t    ctx.fillRect(0,0,canvas.width,canvas.height);\n\n\t\t    for(let i=particles.length-1;i>=0;i--){\n\t\t      const p = particles[i];\n\t\t      p.vy += 0.02;\n\t\t      p.x += p.vx;\n\t\t      p.y += p.vy;\n\t\t      p.age++;\n\t\t      p.alpha = Math.max(0, 1 - p.age \/ p.life);\n\t\t      if (p.age >= p.life) { particles.splice(i,1); continue; }\n\t\t      ctx.beginPath();\n\t\t      ctx.fillStyle = `hsla(${p.hue},95%,60%,${p.alpha})`;\n\t\t      ctx.arc(p.x, p.y, p.size, 0, Math.PI*2);\n\t\t      ctx.fill();\n\t\t    }\n\n\t\t    requestAnimationFrame(render);\n\t\t  }\n\t\t  let raf = requestAnimationFrame(render);\n\n\t\t  \/\/ spawn helper that places fireworks near metadata bottom or randomly\n\t\t  function spawnRandom() {\n\t\t    const meta = document.getElementById('fefla-metadata');\n\t\t    let metaRect = null;\n\t\t    if (meta) {\n\t\t      try { metaRect = meta.getBoundingClientRect(); } catch(e){ metaRect = null; }\n\t\t    }\n\t\t    const w = window.innerWidth;\n\t\t    const h = window.innerHeight;\n\t\t    const spawnNearMeta = metaRect && Math.random() < 0.6;\n\t\t    let x = 80 + Math.random()*(Math.max(120, w-160));\n\t\t    let y = 60 + Math.random()*(h*0.45);\n\t\t    if (spawnNearMeta) {\n\t\t      const left = Math.max(40, metaRect.left + 8);\n\t\t      const right = Math.max(left + 12, metaRect.right - 8);\n\t\t      x = left + Math.random()*Math.max(1,(right-left));\n\t\t      y = Math.max(40, metaRect.bottom - Math.min(20, metaRect.height*0.15));\n\t\t    }\n\t\t    createFirework(x,y, (Math.random()*360)|0, 28 + Math.round(Math.random()*20), 2 + Math.random()*2.2);\n\t\t  }\n\n\t\t  \/\/ light heartbeat so visuals are visible only while playing (started\/stopped by audio events)\n\t\t  let heartbeatTimer = null;\n\n\t\t  \/\/ Hook into playback to increase spawn rate when playing\n\t\t  const audio = document.getElementById('fefla-audio');\n\t\t  if (audio) {\n\t\t    audio.addEventListener('playing', () => {\n\t\t      \/\/ more frequent bursts while playing\n\t\t      if (heartbeatTimer) clearInterval(heartbeatTimer);\n\t\t      heartbeatTimer = setInterval(() => {\n\t\t        spawnRandom();\n\t\t        if (Math.random() < 0.6) spawnRandom();\n\t\t      }, 700);\n\t\t    });\n\t\t    audio.addEventListener('pause', () => {\n\t\t      if (heartbeatTimer) clearInterval(heartbeatTimer);\n\t\t      heartbeatTimer = setInterval(() => { if (Math.random() < 0.5) spawnRandom(); }, 1200);\n\t\t    });\n\t\t    audio.addEventListener('ended', () => {\n\t\t      if (heartbeatTimer) clearInterval(heartbeatTimer);\n\t\t      heartbeatTimer = setInterval(() => { if (Math.random() < 0.5) spawnRandom(); }, 1200);\n\t\t    });\n\t\t  }\n\n\t\t  \/\/ ensure canvas is behind player but above page background\n\t\t  \/\/ player element already uses z-index:2 in plugin CSS; canvas inline style set z-index:0 above.\n\t\t})();\n\t\t<\/script>\n\t\t\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\" id=\"GRANDE\"><img decoding=\"async\" src=\"https:\/\/feflavisalsa.com\/wp-content\/uploads\/2024\/09\/dejanos-tus-comentarios-1024x382.png\" alt=\"\" style=\"width:684px\"\/><\/figure>\n<\/div>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-364","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"audioigniter_cover":false},"uagb_author_info":{"display_name":"kgdzlw","author_link":"https:\/\/feflavisalsa.com\/index.php\/author\/kgdzlw\/"},"uagb_comment_info":0,"uagb_excerpt":null,"_links":{"self":[{"href":"https:\/\/feflavisalsa.com\/index.php\/wp-json\/wp\/v2\/pages\/364","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/feflavisalsa.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/feflavisalsa.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/feflavisalsa.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/feflavisalsa.com\/index.php\/wp-json\/wp\/v2\/comments?post=364"}],"version-history":[{"count":42,"href":"https:\/\/feflavisalsa.com\/index.php\/wp-json\/wp\/v2\/pages\/364\/revisions"}],"predecessor-version":[{"id":850,"href":"https:\/\/feflavisalsa.com\/index.php\/wp-json\/wp\/v2\/pages\/364\/revisions\/850"}],"wp:attachment":[{"href":"https:\/\/feflavisalsa.com\/index.php\/wp-json\/wp\/v2\/media?parent=364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}