{"id":7907,"date":"2025-10-15T19:21:46","date_gmt":"2025-10-15T19:21:46","guid":{"rendered":"https:\/\/edcelulares.com.br\/?page_id=7907"},"modified":"2025-11-05T16:23:35","modified_gmt":"2025-11-05T16:23:35","slug":"7907-2","status":"publish","type":"page","link":"https:\/\/edcelulares.com.br\/pt\/7907-2\/","title":{"rendered":"Postagens"},"content":{"rendered":"\n<!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,maximum-scale=1.0,user-scalable=no\" \/>\n<title>Feed ED Celulares<\/title>\n<style>\nhtml, body { margin:0; padding:0; overflow-x:hidden; overflow-y:auto; font-family:\"Poppins\",sans-serif; background:inherit; color:#fff; -webkit-overflow-scrolling:touch;}\n.feed { display:flex; flex-direction:column; gap:0; max-width:100%; margin:0 auto; scroll-snap-type: y mandatory; overflow-y: scroll; height:100vh; }\n.player-text-section { height:100vh; position:relative; scroll-snap-align:start; }\n.player-wrapper{ height:100vh; overflow:hidden; }\n.player-wrapper video{ width:100%; height:100vh; object-fit:cover; display:block; }\n.text-wrapper{ position:absolute; left:0; right:0; bottom:0; z-index:40; padding:12px 16px; text-shadow:0 2px 10px rgba(0,0,0,0.6); background: linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.35) 35%, rgba(0,0,0,0.55) 100%); transition: max-height 0.3s ease; }\n.text-wrapper .meta{ font-size:15px; line-height:1.3; max-height:calc(1.3em*2); overflow:hidden; transition:max-height 0.3s ease; }\n.text-wrapper .meta.expanded{ max-height:400px; }\n.readmore-link{ display:inline; margin-top:8px; font-weight:700; color:#FFD700; cursor:pointer; text-decoration:underline; background:transparent; border:none; padding:0; }\n.post-actions-vertical{ position:absolute; right:12px; bottom:18%; display:flex; flex-direction:column; gap:18px; z-index:50; }\n.post-actions-vertical img{ width:40px; height:40px; cursor:pointer; user-select:none; transition:0.2s; opacity:0.85; }\n.post-actions-vertical img:hover{ opacity:1; transform:scale(1.1); }\n.post-actions-vertical .like img.active{ filter: invert(38%) sepia(51%) saturate(746%) hue-rotate(1deg) brightness(1.1) contrast(0.9); animation: pulse 0.3s ease; }\n@keyframes pulse{ 0%{transform:scale(1);} 50%{transform:scale(1.3);} 100%{transform:scale(1);} }\n.likes-avatars{ position:absolute; left:12px; bottom:20%; display:flex; flex-direction:column-reverse; gap:8px; pointer-events:none; z-index:45; }\n.heart-tiktok{ position:absolute; width:32px; height:32px; background-image:url('https:\/\/edcelulares.com.br\/wp-content\/uploads\/2025\/10\/coracao1.png'); background-size:cover; opacity:0; pointer-events:none; filter:drop-shadow(0 0 6px gold) brightness(1.2); animation:heartMove 2800ms ease-in forwards; }\n@keyframes heartMove{ 0%{opacity:0; transform:translateY(0) scale(.6)} 15%{opacity:1} 50%{transform:translateY(-120px) scale(1)} 100%{opacity:0; transform:translateY(-160px) scale(1.1)} }\n.comments-modal{ position:fixed; left:0; right:0; bottom:-100%; height:70%; max-height:80%; background: rgba(255,255,255,0.98); border-top-left-radius:16px; border-top-right-radius:16px; z-index:9999; box-shadow:0 -8px 30px rgba(0,0,0,0.18); transform:translateY(0); transition: transform 0.3s cubic-bezier(.22,.9,.28,1), bottom 0.3s; display:flex; flex-direction:column; overflow:hidden; }\n.comments-modal.open{ bottom:0; transform:translateY(0); }\n.comments-modal .handle{ width:56px; height:6px; background:#ddd; border-radius:4px; margin:10px auto; opacity:.9; }\n.comments-body{ flex:1; overflow:auto; padding:12px 16px; }\n.comment-row{ display:flex; gap:10px; align-items:flex-start; padding:8px 0; border-bottom:1px solid rgba(0,0,0,0.03); }\n.comment-row img.avatar{ width:36px; height:36px; border-radius:50%; object-fit:cover; border:2px solid #fff; }\n.comment-row .txt{ font-size:14px; color:#111; }\n.comments-composer{ padding:10px; border-top:1px solid rgba(0,0,0,0.06); display:flex; gap:8px; align-items:center; }\n.comments-composer input{ flex:1; padding:10px 12px; border-radius:12px; border:1px solid rgba(0,0,0,0.08); font-size:14px; }\n.comments-composer button{ padding:10px 12px; border-radius:10px; background:#D4AF37; border:none; color:#fff; font-weight:700; cursor:pointer; }\n.count { font-size:12px; text-align:center; margin-top:4px; }\n.icon { display:flex; flex-direction:column; align-items:center; gap:2px; }\n<\/style>\n<\/head>\n<body>\n\n<div class=\"feed\"><\/div>\n\n<!-- COMMENTS MODAL -->\n<div id=\"commentsModal\" class=\"comments-modal\" aria-hidden=\"true\">\n  <div class=\"handle\"><\/div>\n  <div class=\"comments-body\"><\/div>\n  <div class=\"comments-composer\">\n    <input type=\"text\" id=\"commentInput\" placeholder=\"Digite seu coment\u00e1rio...\">\n    <button id=\"commentSendBtn\">Enviar<\/button>\n  <\/div>\n<\/div>\n\n<!-- Firebase compat -->\n<script src=\"https:\/\/www.gstatic.com\/firebasejs\/9.23.0\/firebase-app-compat.js\"><\/script>\n<script src=\"https:\/\/www.gstatic.com\/firebasejs\/9.23.0\/firebase-database-compat.js\"><\/script>\n<script>\nconst firebaseConfig = {\n  apiKey: \"AIzaSyDRccnEaoqitXhs6FR6JbWxqi2yVmzs528\",\n  authDomain: \"dados-tempo-real.firebaseapp.com\",\n  databaseURL: \"https:\/\/dados-tempo-real-default-rtdb.firebaseio.com\",\n  projectId: \"dados-tempo-real\",\n  storageBucket: \"dados-tempo-real.firebasestorage.app\",\n  messagingSenderId: \"7340009587\",\n  appId: \"1:7340009587:web:5a8c900015909423512206\"\n};\nif(!firebase.apps.length) firebase.initializeApp(firebaseConfig);\nconst database = firebase.database();\n\n(function(){\n  const feed = document.querySelector('.feed');\n  const postsRef = database.ref('posts');\n\n  postsRef.once('value').then(snap=>{\n    const postsObj = snap.val() || {};\n    \/\/ \u2705 Inverte a ordem: \u00faltimo post vem primeiro\n    const entries = Object.keys(postsObj).sort((a,b)=>Number(b)-Number(a)).map(k => ({ key: k, post: postsObj[k] }));\n\n    entries.forEach(({key, post: p})=>{\n      const section = document.createElement('div');\n      section.className = 'player-text-section';\n      section.dataset.postId = key;\n\n      section.innerHTML = `\n        <div class=\"player-wrapper\" data-video-src=\"${escapeHtmlAttr(p.video||'')}\"><\/div>\n        <div class=\"post-actions-vertical\">\n          <div class=\"icon like\" role=\"button\" aria-label=\"Curtir\">\n            <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/edcelulares.com.br\/wp-content\/uploads\/2025\/10\/coracao1.png\">\n            <div class=\"count like-count\">${p.likes||0}<\/div>\n          <\/div>\n          <div class=\"icon comment\" role=\"button\" aria-label=\"Comentar\">\n            <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/edcelulares.com.br\/wp-content\/uploads\/2025\/10\/balao.png\">\n            <div class=\"count comment-count\">${p.comments ? Object.keys(p.comments).length : 0}<\/div>\n          <\/div>\n          <div class=\"icon share\" role=\"button\" aria-label=\"Compartilhar\">\n            <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/edcelulares.com.br\/wp-content\/uploads\/2025\/10\/aviao.png\">\n            <div class=\"count share-count\">${p.shares||0}<\/div>\n          <\/div>\n        <\/div>\n        <div class=\"text-wrapper\">\n          <div class=\"meta\">${escapeHtml(p.text||'')}<\/div>\n          <span class=\"readmore-link\" aria-expanded=\"false\">Leia mais<\/span>\n        <\/div>\n        <div class=\"likes-avatars\"><\/div>\n      `;\n      feed.appendChild(section);\n\n      const lsKey = 'liked-post-' + key;\n      const likeImg = section.querySelector('.icon.like img');\n      if(localStorage.getItem(lsKey) === '1') likeImg.classList.add('active');\n      else likeImg.classList.remove('active');\n    });\n\n    \/\/ Inicializa v\u00eddeos (lazy load)\n    const videoWrappers = document.querySelectorAll('.player-wrapper');\n    const videos = [];\n    videoWrappers.forEach(wrapper=>{\n      const src = wrapper.dataset.videoSrc;\n      if(!src) return;\n      const video = document.createElement('video');\n      video.muted = true;\n      video.loop = true;\n      video.playsInline = true;\n      video.preload = 'metadata'; \/\/ \u2705 melhora performance\n      video.dataset.src = src;\n      wrapper.appendChild(video);\n      videos.push(video);\n    });\n\n    let currentPlaying = null;\n    const observer = new IntersectionObserver(entries=>{\n      entries.forEach(entry=>{\n        const v = entry.target;\n        if(entry.isIntersecting){\n          if(!v.src) v.src = v.dataset.src;\n          if(currentPlaying && currentPlaying !== v) currentPlaying.pause();\n          try{ v.play(); }catch(e){}\n          currentPlaying = v;\n        } else {\n          try{ v.pause(); }catch(e){}\n        }\n      });\n    }, {threshold:0.5, rootMargin:\"100px\"});\n    videos.forEach(v=>observer.observe(v));\n    videos.forEach(v=>v.addEventListener('click', ()=>{ v.muted = !v.muted; }));\n\n    \/\/ Leia mais\n    const lineHeight = 1.3 * 15; \/\/ px (para meta)\n    document.querySelectorAll('.player-text-section').forEach(section=>{\n      const meta = section.querySelector('.meta');\n      const link = section.querySelector('.readmore-link');\n      if(!meta || !link) return;\n      const maxHeight = lineHeight * 2;\n      if(meta.scrollHeight <= maxHeight){ link.style.display='none'; }\n      link.addEventListener('click', ()=>{\n        meta.classList.toggle('expanded');\n        link.setAttribute('aria-expanded', meta.classList.contains('expanded'));\n      });\n    });\n  });\n\n  \/\/ ===== Coment\u00e1rios e intera\u00e7\u00f5es =====\n  const modal=document.getElementById('commentsModal');\n  const body=modal.querySelector('.comments-body');\n  const composerInput=document.getElementById('commentInput');\n  const composerBtn=document.getElementById('commentSendBtn');\n  let currentPostId=null;\n\n  function openModal(postId){\n    currentPostId=postId;\n    modal.classList.add('open');\n    modal.setAttribute('aria-hidden','false');\n    composerInput.value='';\n    loadCommentsRealtime(postId);\n  }\n  function closeModal(){ modal.classList.remove('open'); modal.setAttribute('aria-hidden','true'); currentPostId=null; body.innerHTML=''; }\n  modal.querySelector('.handle').addEventListener('click', ()=> closeModal());\n  window.addEventListener('keydown', e=>{ if(e.key==='Escape') closeModal(); });\n\n  let startY=0, currentY=0, isDragging=false, maxDrag=window.innerHeight*0.6;\n  modal.addEventListener('touchstart', e=>{ isDragging=true; startY=e.touches[0].clientY; modal.style.transition='none'; }, {passive:true});\n  modal.addEventListener('touchmove', e=>{ if(!isDragging) return; currentY=e.touches[0].clientY-startY; if(currentY>0) modal.style.transform=`translateY(${currentY}px)`; }, {passive:true});\n  modal.addEventListener('touchend', e=>{ isDragging=false; if(currentY>(maxDrag*0.35)) closeModal(); else { modal.style.transition='transform 0.3s'; modal.style.transform='translateY(0)'; } currentY=0; });\n  window.addEventListener('resize', ()=> { maxDrag = window.innerHeight*0.6; });\n\n  const postListeners={};\n  function loadCommentsRealtime(postId){\n    body.innerHTML = '<p style=\"opacity:.6;font-size:13px;padding:12px;\">Carregando coment\u00e1rios...<\/p>';\n    if(postListeners[postId] && postListeners[postId].ref){ postListeners[postId].ref.off('value', postListeners[postId].fn); }\n    const ref = database.ref('posts\/'+postId);\n    const cb = snap=>{\n      const data = snap.val()||{};\n      body.innerHTML='';\n      const commentsObj = data.comments||{};\n      const arr = Object.values(commentsObj);\n      if(arr.length===0){ body.innerHTML = '<p style=\"opacity:.6;padding:12px;\">Seja o primeiro a comentar.<\/p>'; }\n      else{\n        arr.forEach(c=>{\n          const row=document.createElement('div');\n          row.className='comment-row';\n          const avatar=c.avatar||'https:\/\/edcelulares.com.br\/wp-content\/uploads\/2025\/10\/coracao1.png';\n          row.innerHTML=`<img decoding=\"async\" class=\"avatar\" loading=\"lazy\" src=\"${avatar}\" alt=\"a\"><div class=\"txt\">${escapeHtml(c.text)}<\/div>`;\n          body.appendChild(row);\n        });\n      }\n      const section=document.querySelector('.player-text-section[data-post-id=\"'+postId+'\"]');\n      if(section){ const cc=section.querySelector('.icon.comment .count'); cc.textContent=arr.length; }\n    };\n    ref.on('value', cb);\n    postListeners[postId]={ref:ref, fn:cb};\n  }\n\n  composerBtn.addEventListener('click', sendComment);\n  composerInput.addEventListener('keypress', ev=>{ if(ev.key==='Enter') sendComment(); });\n  function sendComment(){\n    if(!currentPostId) return;\n    const text = composerInput.value.trim();\n    if(!text) return;\n    const commentObj = { text:text, avatar:'https:\/\/edcelulares.com.br\/wp-content\/uploads\/2025\/10\/coracao1.png', ts:Date.now() };\n    database.ref('posts\/'+currentPostId+'\/comments').push(commentObj).then(()=>{ composerInput.value=''; }).catch(err=>{ console.error(err); alert('Erro ao enviar coment\u00e1rio.'); });\n  }\n\n  \/\/ ===== Clique nos \u00edcones =====\n  feed.addEventListener('click', e=>{\n    const section = e.target.closest('.player-text-section'); if(!section) return;\n    const postId = section.dataset.postId;\n    const icon = e.target.closest('.icon'); if(!icon) return;\n    const postRef = database.ref('posts\/' + postId);\n\n    if(icon.classList.contains('like')){\n      const likeImg = icon.querySelector('img');\n      const likeCountEl = icon.querySelector('.like-count');\n      const lsKey = 'liked-post-' + postId;\n      const prevLiked = localStorage.getItem(lsKey) === '1';\n      let displayed = parseInt(likeCountEl.textContent||'0',10);\n      displayed = prevLiked ? Math.max(0, displayed-1) : displayed+1;\n      likeCountEl.textContent = displayed;\n      if(prevLiked) likeImg.classList.remove('active'); else likeImg.classList.add('active');\n      if(prevLiked) localStorage.removeItem(lsKey); else localStorage.setItem(lsKey, '1');\n      postRef.child('likes').transaction(cur=> prevLiked ? ((cur&&cur>0)?cur-1:0) : (cur||0)+1).catch(()=>{});\n    }\n\n    if(icon.classList.contains('comment')){ openModal(postId); }\n\n    if(icon.classList.contains('share')){\n      const title = section.querySelector('.meta')?.textContent || document.title;\n      window.open('https:\/\/api.whatsapp.com\/send?text=' + encodeURIComponent(title + ' ' + window.location.href), '_blank', 'noopener');\n      const shareCountEl = icon.querySelector('.share-count');\n      shareCountEl.textContent = (parseInt(shareCountEl.textContent||'0',10) + 1);\n      postRef.child('shares').transaction(cur => (cur||0)+1).catch(()=>{});\n    }\n  });\n\n  \/\/ ===== Atualiza\u00e7\u00e3o em tempo real =====\n  postsRef.on('value', snap=>{\n    const postsObj = snap.val() || {};\n    Object.keys(postsObj).forEach(key=>{\n      const p = postsObj[key];\n      const section = document.querySelector('.player-text-section[data-post-id=\"'+key+'\"]');\n      if(!section) return;\n      const likeEl = section.querySelector('.icon.like .like-count');\n      const commentEl = section.querySelector('.icon.comment .comment-count');\n      const shareEl = section.querySelector('.icon.share .share-count');\n      if(likeEl) likeEl.textContent = (p.likes || 0);\n      if(commentEl) commentEl.textContent = (p.comments ? Object.keys(p.comments).length : 0);\n      if(shareEl) shareEl.textContent = (p.shares || 0);\n      const likeImg = section.querySelector('.icon.like img');\n      const lsKey = 'liked-post-' + key;\n      if(localStorage.getItem(lsKey) === '1') likeImg.classList.add('active'); else likeImg.classList.remove('active');\n    });\n  });\n\n  function escapeHtml(str){ return String(str||'').replace(\/[&<>\"']\/g,m=>({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[m])); }\n  function escapeHtmlAttr(str){ return (str||'').replace(\/\"\/g,'&quot;'); }\n})();\n<\/script>\n\n<\/body>\n<\/html>\n\n\n\n\n<!-- Bot\u00e3o do Sino Flutuante -->\n<div id=\"ed-bell-root\"><\/div>\n\n<script type=\"module\">\nimport { initializeApp } from \"https:\/\/www.gstatic.com\/firebasejs\/9.23.0\/firebase-app.js\";\nimport { getMessaging, getToken } from \"https:\/\/www.gstatic.com\/firebasejs\/9.23.0\/firebase-messaging.js\";\n\n\/\/ Configura\u00e7\u00e3o do Firebase\nconst firebaseConfig = {\n  apiKey: \"AIzaSyDRccnEaoqitXhs6FR6JbWxqi2yVmzs528\",\n  authDomain: \"dados-tempo-real.firebaseapp.com\",\n  databaseURL: \"https:\/\/dados-tempo-real-default-rtdb.firebaseio.com\",\n  projectId: \"dados-tempo-real\",\n  storageBucket: \"dados-tempo-real.appspot.com\",\n  messagingSenderId: \"7340009587\",\n  appId: \"1:7340009587:web:5a8c900015909423512206\"\n};\n\nconst app = initializeApp(firebaseConfig);\nconst messaging = getMessaging(app);\n\n(function() {\n  const css = `\n    #ed-bell-container {\n      position: fixed;\n      left: 20px;\n      bottom: 60px;\n      z-index: 99999;\n    }\n    #ed-bell-btn {\n      width: 48px;\n      height: 48px;\n      padding: 0;\n      border: none;\n      background: transparent;\n      cursor: pointer;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      transition: transform .2s ease;\n    }\n    #ed-bell-btn:hover { transform: scale(1.08); }\n    #ed-bell-btn:active { transform: scale(0.96); }\n\n    #ed-bell-btn img {\n      width: 100%;\n      height: 100%;\n      object-fit: contain; \/* garante que o sino preencha o bot\u00e3o *\/\n    }\n  `;\n  const style = document.createElement('style');\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  const root = document.getElementById('ed-bell-root');\n  root.innerHTML = `\n    <div id=\"ed-bell-container\">\n      <button id=\"ed-bell-btn\">\n        <img decoding=\"async\" src=\"https:\/\/edcelulares.com.br\/wp-content\/uploads\/2025\/10\/ChatGPT-Image-21-de-out.-de-2025-18_35_56.png\" alt=\"Notifica\u00e7\u00f5es Push\" \/>\n      <\/button>\n    <\/div>\n  `;\n\n  const bellBtn = document.getElementById('ed-bell-btn');\n  bellBtn.addEventListener('click', async () => {\n    try {\n      const permission = await Notification.requestPermission();\n      if (permission !== 'granted') return console.error('Permiss\u00e3o negada pelo usu\u00e1rio.');\n\n      const token = await getToken(messaging, {\n        vapidKey: 'N1CaAtt72Ure-GlJg_a4_ndt_H18aYNk7zRdP9KAhvA'\n      });\n\n      console.log('Usu\u00e1rio registrado para push, token:', token);\n      alert('Voc\u00ea foi inscrito nas notifica\u00e7\u00f5es push!');\n      \n    } catch (err) {\n      console.error('Erro ao registrar usu\u00e1rio no push:', err);\n    }\n  });\n})();\n<\/script>\n\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Feed ED Celulares Enviar<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-page-centered-fullwidth.php","meta":{"_acf_changed":false,"om_disable_all_campaigns":false,"pagelayer_contact_templates":[],"_pagelayer_content":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"class_list":["post-7907","page","type-page","status-publish","hentry"],"acf":{"css_classes":""},"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/edcelulares.com.br\/pt\/wp-json\/wp\/v2\/pages\/7907","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/edcelulares.com.br\/pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/edcelulares.com.br\/pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/edcelulares.com.br\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/edcelulares.com.br\/pt\/wp-json\/wp\/v2\/comments?post=7907"}],"version-history":[{"count":377,"href":"https:\/\/edcelulares.com.br\/pt\/wp-json\/wp\/v2\/pages\/7907\/revisions"}],"predecessor-version":[{"id":8448,"href":"https:\/\/edcelulares.com.br\/pt\/wp-json\/wp\/v2\/pages\/7907\/revisions\/8448"}],"wp:attachment":[{"href":"https:\/\/edcelulares.com.br\/pt\/wp-json\/wp\/v2\/media?parent=7907"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}