Mudanças entre as edições de "Widget:VisnoTeste"

De Wiki Gla
Ir para navegação Ir para pesquisar
Linha 1: Linha 1:
<div class="full-receitas">
<!DOCTYPE html>
<div class="receitas-wrapper">
<html lang="pt-BR">
   <div style="font-size: 180%; font-weight: bold; border-bottom: 1px solid #aaa; margin-bottom: 0.5em;">» <span style="color:#4393ff">Receitas Aliança</span></div>
<head>
  <div id="receitas-alianca" class="receitas-container"></div>
  <meta charset="UTF-8">
   <title>Mapa Interativo com Caveiras</title>
  <style>
    body {
      margin: 0;
      background: #0d0d0d;
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
      font-family: sans-serif;
    }


  <div style="font-size: 180%; font-weight: bold; border-bottom: 1px solid #aaa; margin-bottom: 0.5em;">» <span style="color:#4393ff">Receitas Baratie</span></div>
    .map-container {
  <div id="receitas-baratie" class="receitas-container"></div>
      position: relative;
</div>
      width: 811px;
<div id="carrinho-container"></div>
      height: 554px;
</div>
      background: url('sabaodyMap.png') no-repeat center center;
      background-size: cover;
    }


    .skull-icon {
      position: absolute;
      width: 24px;
      height: 24px;
      cursor: pointer;
      transition: transform 0.2s, filter 0.2s;
    }


<script>
    .heart-icon {
let receitasSelecionadas = {
      position: absolute;
  0: null,
      width: 26px;
  1: null
      height: 26px;
};
      padding: 1px;
let receitas = {};
      cursor: pointer;
const berryGif = "/images/thumb/d/d1/Berrynewgif.gif/32px-Berrynewgif.gif";
      transition: transform 0.2s, filter 0.2s;
    }


function selecionarReceita(id) {
    .skull-icon:hover,
  const receita = encontrarReceita(id);
    .heart-icon:hover,
  if (!receita) return;
    .puzzle-button:hover {
      transform: scale(1.3);
      filter: brightness(1.5);
    }


  if (Object.values(receitasSelecionadas).some(r => r && r.id === id)) return;
    .popup {
      position: absolute;
      background: #1e1e1e;
      color: #fff;
      padding: 10px 14px;
      border-radius: 8px;
      border: 1px solid #444;
      box-shadow: 0 0 10px rgba(255, 255, 255, 0.1);
      display: none;
      z-index: 10;
      max-width: 500px;
      font-size: 14px;
      animation: fadeIn 0.3s ease-out;
    }


  for (let i = 0; i < 2; i++) {
     .popup iframe {
     if (!receitasSelecionadas[i]) {
       border-radius: 6px;
       receitasSelecionadas[i] = {
      margin-top: 6px;
        id: receita.id,
       max-width: 100%;
        nome: receita.nome,
        preco: receita.preco,
        img: receita.img,
        ingredientes: receita.ingredientes,
        lvl: receita.lvl,
        tempo: receita.tempo,
        descricao: receita.descricao,
        quantidade: 1
      };
       break;
     }
     }
  }


  renderizarSelecao();
     .puzzle-button {
}
       position: absolute;
 
       cursor: pointer;
 
       z-index: 999;
// Função para carregar as receitas a partir do JSON
       width: 28px;
async function cargarReceitas() {
       height: 28px;
  try {
       transition: transform 0.2s, filter 0.2s;
     const response = await fetch('https://wiki.gla.com.br/index.php?title=Receitas.json&action=raw');
     }
    const data = await response.json();
   
    receitas = {
       baratie: Object.entries(data.baratie).map(([id, item]) => ({
        id,
        nome: item.nome,
        preco: item.cost,
        img: item.thumb,
        ingredientes: item.ingredients || [],
        lvl: item.lvl,
        tempo: item.time,
        descricao: item.description
       })),
      alianca: Object.entries(data.alianca).map(([id, item]) => ({
        id,
        nome: item.nome,
        preco: item.cost,
        img: item.thumb,
        ingredientes: item.ingredients || [],
        lvl: item.lvl,
        tempo: item.time,
        descricao: item.description
       }))
    };
   
    renderizarReceitas();
  } catch (error) {
    console.error('Error al cargar las receitas:', error);
    alert('No se pudieron cargar las receitas. Por favor, inténtalo más tarde.');
  }
}
 
function renderizarReceitas() {
  renderizarSecao('baratie');
  renderizarSecao('alianca');
}
 
function renderizarSecao(secao) {
  const container = document.getElementById(`receitas-${secao}`);
  if (!container) return;
 
  container.innerHTML = '';
 
  receitas[secao].forEach(receita => {
    const card = document.createElement('div');
    card.className = 'receita-card';
    card.setAttribute('data-id', receita.id);
    card.innerHTML = `
       <button class="info-btn" onclick="mostrarModalReceita(this)"
        data-descricao="${encodeURIComponent(receita.descricao)}"
        data-lvl="${receita.lvl}"
        data-tempo="${receita.tempo}">i</button>
      <img src="${receita.img}" width="48" height="48" />
      <div class="receita-nome">${receita.nome}</div>
       <div class="receita-preco">${receita.preco.toLocaleString()} <img src="${berryGif}" alt="Berry" width="25" height="25" style="transform: translateY(-1px);"/></div>
      <button class="add-to-cart-btn" onclick="selecionarReceita('${receita.id}')">Selecionar</button>
    `;
    container.appendChild(card);
  });
}
 
function mostrarModalReceita(button) {
  const descricao = decodeURIComponent(button.getAttribute('data-descricao'));
  const lvl = button.getAttribute('data-lvl');
  const tempo = button.getAttribute('data-tempo');
  const descricaoFormatada = descricao
    .replace(/\n/g, '<br>')
    .replace(/Tempo de recarga/g, '<br><strong>Tempo de recarga</strong>');
 
  const modalHTML = `
    <div class="modal-overlay active" onclick="cerrarModal(event)">
       <div class="modal-content" onclick="event.stopPropagation()">
        <button class="close-modal" onclick="cerrarModal(event)">×</button>
        <p><strong>Nível:</strong> ${lvl}</p>
        <p><strong>Tempo de preparo:</strong> ${tempo} min</p>
        <p><strong>Descrição:</strong><br>${descricaoFormatada}</p>
      </div>
    </div>
  `;
 
  document.body.insertAdjacentHTML('beforeend', modalHTML);
  document.addEventListener('keydown', (e) => e.key === 'Escape' && cerrarModal(e));
}
 
function cerrarModal(event) {
  event.preventDefault();
  const modal = document.querySelector('.modal-overlay');
  if (modal) {
    modal.classList.remove('active');
     setTimeout(() => modal.remove(), 300);
  }
}
 
function encontrarReceita(id) {
  for (const secao in receitas) {
    const receita = receitas[secao].find(r => r.id === id);
    if (receita) return receita;
  }
  return null;
}
 
function renderizarSelecao() {
  const container = document.getElementById('carrinho-container');
  container.innerHTML = '';
 
  let totalSlots = 2;


  for (let i = 0; i < totalSlots; i++) {
     @keyframes fadeIn {
    const receita = receitasSelecionadas[i];
       from { opacity: 0; transform: translateY(-5px); }
 
       to { opacity: 1; transform: translateY(0); }
     const itemDiv = document.createElement('div');
    itemDiv.className = 'item-carrinho';
 
    if (receita) {
       const subtotal = receita.preco * receita.quantidade;
      tempo = formatarTempo(receita.tempo * receita.quantidade);
 
      const ingredientesHtml = receita.ingredientes.map(([nome, qtd]) => {
        const totalIngrediente = qtd * receita.quantidade;
        return `<div><img class="ingrediente-img" src="URL_DA_IMAGEM" alt="${nome}"/>${nome}: ${totalIngrediente}</div>`;
      }).join('');
 
       itemDiv.innerHTML = `
        <img src="${receita.img}" width="40" height="40" />
        <div class="info-carrinho">
          <div class="nome-item">${receita.nome}</div>
          <div class="atributes">
            <div class="">Level: ${receita.lvl}</div>
            <div class="">Time: ${tempo}</div>
            <p class="texto-centrado">${receita.descricao}</p>
          </div>
          <div class="controle-quantidade">
            <button onclick="alterarQuantidadeSelecionada(${i}, -1)">−</button>
            <input type="number" value="${receita.quantidade}" min="1"
                  onchange="atualizarQuantidadeManualSelecionada(${i}, event)">
            <button onclick="alterarQuantidadeSelecionada(${i}, 1)">+</button>
            <button class="btn-100" onclick="definir100Selecionada(${i})">x100</button>
          </div>
          <div class="ingredientes">
            ${ingredientesHtml}
          </div>
        </div>
        <div class="subtotal">${subtotal.toLocaleString()} <img src="${berryGif}" alt="Berry" width="25" height="25" style="transform: translateY(-1px);" /></div>
        <button class="remover-item" onclick="removerReceitaSelecionada(${i})">🗑️</button>
      `;
    } else {
      itemDiv.innerHTML = `<div class="placeholder">Selecione uma receita</div>`;
     }
     }
  </style>
</head>
<body>
  <div class="map-container" id="map">
    <!-- Caveiras e elementos serão inseridos via JS -->
  </div>


     container.appendChild(itemDiv);
  <script>
  }
     const skulls = [
}
      {
        x: 410, y: 220,
        title: "White Skull",
        desc: "Boss: White Skull<br>Área sombria, cuidado com os ataques surpresa!"
      },
      {
        x: 650, y: 125,
        title: "Red Fang",
        desc: "Boss: Red Fang<br>Possui resistência a fogo. Traga ataques de gelo!"
      },
      {
        x: 250, y: 410,
        title: "Void Wraith",
        desc: "Boss: Void Wraith<br>Evite ataques diretos. Usa magia de sombras."
      },
      {
        x: 248, y: 320,
        title: "Night Howler",
        desc: "Boss: Night Howler<br>Ataca com velocidade e confusão. Use proteção contra atordoamento!"
      }
    ];


function alterarQuantidadeSelecionada(index, alteracao) {
    const hearts = [
  const receita = receitasSelecionadas[index];
      { x: 280, y: 210, desc: "Cura escondida: Quebre a caixa para obter uma cura." },
  if (!receita) return;
      { x: 312, y: 196 },
  receita.quantidade += alteracao;
      { x: 245, y: 358, desc: "Após o chefe, o jogador com menos vida receberá uma cura automática." }
  if (receita.quantidade < 1) receita.quantidade = 1;
    ];
  renderizarSelecao();
}


function atualizarQuantidadeManualSelecionada(index, event) {
    const puzzleButton = {
  const valor = parseInt(event.target.value);
      x: 225,
  if (valor && valor >= 1) {
      y: 210,
    receitasSelecionadas[index].quantidade = valor;
      videoUrl: "https://www.youtube.com/embed/10rhyP32vdw"
     renderizarSelecao();
     };
  }
}


function definir100Selecionada(index) {
     const map = document.getElementById("map");
  if (receitasSelecionadas[index]) {
     receitasSelecionadas[index].quantidade = 100;
    renderizarSelecao();
  }
}


function removerReceitaSelecionada(index) {
    // Adiciona as caveiras
  receitasSelecionadas[index] = null;
    skulls.forEach((skull, index) => {
  renderizarSelecao();
      const icon = document.createElement("img");
}
      icon.src = "Whiteskull.png";
      icon.className = "skull-icon";
      icon.style.left = skull.x + "px";
      icon.style.top = skull.y + "px";
      icon.dataset.index = index;


function formatarTempo(minutosDecimal) {
      const popup = document.createElement("div");
  const minutosInt = Math.floor(minutosDecimal);
      popup.className = "popup";
  const segundos = Math.round((minutosDecimal % 1) * 60);
      popup.innerHTML = `<strong>${skull.title}</strong><br>${skull.desc}`;
      popup.style.left = (skull.x + 30) + "px";
      popup.style.top = (skull.y - 10) + "px";


  if (minutosInt < 1) {
      icon.addEventListener("click", () => {
    return `${segundos}seg`;
        popup.style.display = popup.style.display === "block" ? "none" : "block";
  } else if (segundos === 0) {
      });
    return `${minutosInt}min`;
  } else {
    return `${minutosInt}min ${segundos.toString().padStart(2, '0')}seg`;
  }
}


document.addEventListener('DOMContentLoaded', () => {
      document.addEventListener("click", (e) => {
  renderizarSelecao();
        if (!icon.contains(e.target) && !popup.contains(e.target)) {
});
          popup.style.display = "none";
        }
      });


// CSS
      map.appendChild(icon);
document.head.insertAdjacentHTML('beforeend', `
      map.appendChild(popup);
<style>
    });
  @import url('https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;700&display=swap');


body, html {
    // Adiciona os corações
  font-family: 'Noto Sans', Arial, Helvetica, sans-serif;
    hearts.forEach((heart, index) => {
}
      const icon = document.createElement("img");
      const desc = heart.desc || "Pegue o coração para se curar";
      icon.src = "heart.png";
      icon.className = "heart-icon";
      icon.style.left = heart.x + "px";
      icon.style.top = heart.y + "px";
      icon.dataset.index = index;


  .receitas-container {
      const popup = document.createElement("div");
    display: flex;
      popup.className = "popup";
    flex-wrap: wrap;
      popup.innerHTML = `<strong>Cura</strong><br>${desc}`;
    gap: 18px;
      popup.style.left = (heart.x + 30) + "px";
    margin-bottom: 24px;
      popup.style.top = (heart.y - 10) + "px";
    justify-content: center;
    background: #f6f7fa;
    border-radius: 10px;
    padding: 10px 0;
  }
  .nome-item, .subtotal{
    user-select: none;
  }
 
  .receita-card {
    width: 150px;          /* aumente a largura */
    text-align: center;
    border: 1.5px solid #e0e0e0;
    border-radius: 12px;
    padding: 12px 8px;
    background: #fff;
    box-shadow: 0 2px 8px rgba(180,180,180,0.10);
    transition: transform 0.18s, box-shadow 0.18s, background 0.18s;
    user-select: none;
    position: relative;
  }
  .receita-card:hover {
    transform: translateY(-4px) scale(1.06);
    box-shadow: 0 8px 24px rgba(180,180,180,0.18);
    background: #f2f2f2;
  }


  .modal-overlay {
      icon.addEventListener("click", () => {
    position: fixed;
        popup.style.display = popup.style.display === "block" ? "none" : "block";
    top: 0; left: 0; right: 0; bottom: 0;
      });
    background-color: rgba(80, 80, 80, 0.18);
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 1000;
    opacity: 0;
    visibility: hidden;
    transition: all 0.3s ease;
  }


  .modal-overlay.active {
      document.addEventListener("click", (e) => {
    opacity: 1;
        if (!icon.contains(e.target) && !popup.contains(e.target)) {
    visibility: visible;
          popup.style.display = "none";
  }
        }
      });


  .modal-content {
      map.appendChild(icon);
    background: #fff;
      map.appendChild(popup);
    padding: 22px;
     });
     border-radius: 10px;
    width: 320px;
    position: relative;
    box-shadow: 0 4px 16px rgba(120,120,120,0.18);
  }


  .close-modal {
     // Ícone do Puzzle
     position: absolute;
     const button = document.createElement("img");
     top: 10px;
     button.className = "puzzle-button";
     right: 10px;
     button.src = "puzzle.png";
    font-size: 20px;
     button.alt = "Puzzle";
     cursor: pointer;
     button.style.left = puzzleButton.x + "px";
     background: none;
     button.style.top = puzzleButton.y + "px";
     border: none;
     color: #888;
  }


  .info-btn {
     const popup = document.createElement("div");
    position: absolute;
     popup.className = "popup";
    top: 5px;
     popup.style.left = (puzzleButton.x + 60) + "px";
    right: 5px;
     popup.style.top = (puzzleButton.y - 10) + "px";
    background: #e0e0e0;
     popup.innerHTML = `
    color: #333;
      <strong>Desafio Puzzle</strong><br>
    border: none;
      <iframe width="400" height="260"
    border-radius: 50%;
        src="${puzzleButton.videoUrl}"
    width: 22px;
        frameborder="0"
    height: 22px;
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
    font-size: 13px;
        allowfullscreen>
    cursor: pointer;
      </iframe>
    display: flex;
     `;
    justify-content: center;
    align-items: center;
    transition: background 0.2s;
  }
  .info-btn:hover {
    background: #bdbdbd;
  }
 
  .receita-nome {
    font-weight: bold;
    margin: 4px 0;
    min-height: 3em;
    max-height: 3em;
    line-height: 1.5em;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    align-items: center;
    justify-content: center;
    text-align: center;
    font-size: 80%;        /* pode aumentar ou diminuir conforme preferir */
    color: #222;
    overflow: hidden;
    text-overflow: ellipsis;
    word-break: break-word;
  }
  .nome-item{
     font-weight: bold;
    color: #222;
  }
 
  .ingredientes{
    display: grid;
    grid-template-columns: repeat(2, 1fr);
     gap: 8px;
     margin-top: 5px;
    margin-bottom: 10px;
  }
 
  .ingredientes div {
    background-color: #f3f3f3;
    border: 1px solid #e0e0e0;
    border-radius: 4px;
    padding: 5px 7px 5px 32px; /* espaço à esquerda para a imagem */
    font-size: 13px;
    text-align: left;
    color: #444;
    white-space: normal;
    overflow: hidden;
    text-overflow: unset;
    overflow-wrap: break-word;
    align-content: center;
    position: relative;
    min-height: 32px;
    display: flex;
    align-items: center;
  }
 
  /* Espaço reservado para a imagem do ingrediente */
.ingrediente-img {
  width: 24px;
  height: 24px;
  object-fit: contain;
  margin-right: 6px;
  margin-left: -24px;
  flex-shrink: 0;
  background: transparent;
  display: inline-block;
}
 
  .receita-preco {
    margin-bottom: 2px;
    color: #555;
  }
 
  .item-carrinho {
    display: flex;
    gap: 12px;
    padding: 12px;
    border: 1.5px solid #e0e0e0;
    border-radius: 12px;
    margin-bottom: 12px;
    width: 44.5%;
    margin-inline: 1%;
    flex-direction: column;
    align-items: center;
    background: #fafbfc;
    box-shadow: 0 2px 8px rgba(180,180,180,0.08);
     height: fit-content;
    min-height: 97%;
    transition: box-shadow 0.18s, background 0.18s;
  }
  .item-carrinho:hover {
    background: #f2f2f2;
    box-shadow: 0 8px 24px rgba(180,180,180,0.13);
  }
 
  .info-carrinho {
     flex: 1;
    justify-items: center;
  }
 
  .controle-quantidade {
    display: flex;
    align-items: center;
    gap: 4px;
    margin-top: 2%;
    margin-bottom: 5%;
  }
 
  .controle-quantidade input {
    width: 44px;
    text-align: center;
    padding: 2px;
    border: 1px solid #bbb;
    border-radius: 4px;
    background: #f7f7f7;
    color: #333;
  }
 
  .controle-quantidade button {
    width: 24px;
    height: 24px;
    background: #e0e0e0;
    border: none;
    border-radius: 4px;
    color: #222;
    cursor: pointer;
    transition: background 0.2s;
  }
  .controle-quantidade button:hover {
    background: #bdbdbd;
  }
 
  .btn-100 {
    width: auto !important;
    padding: 0 4px;
    margin-left: 4px;
    font-size: 12px;
    background: #d1d5db !important;
    color: #222;
  }
 
  .remover-item {
    background: none;
    border: none;
    cursor: pointer;
    font-size: 16px;
    color: #888;
    transition: color 0.2s;
  }
  .remover-item:hover {
    color: #d32f2f;
  }
 
  .acao-carrinho {
    padding: 8px 16px;
    background-color: #4393ff;
    color: white;
    border: none;
    border-radius: 4px;
    cursor: pointer;
  }
 
  .acao-carrinho:hover {
     background-color: #3275c7;
  }


  #carrinho-container {
    button.addEventListener("click", () => {
    display: flex;
      popup.style.display = popup.style.display === "block" ? "none" : "block";
     flex-direction: row;
     });
    flex-wrap: nowrap;
    justify-content: center;
    width: 69%;
  }


  .receita-card.highlighted {
     document.addEventListener("click", (e) => {
     background-color: #e8f5e9;
       if (!button.contains(e.target) && !popup.contains(e.target)) {
  }
        popup.style.display = "none";
 
       }
  .detalhe-receita ul {
     });
    padding-left: 20px;
  }
 
  .detalhe-receita li {
    margin-bottom: 3px;
  }
 
  .detalhe-receita {
    width: 16%;
    justify-items: anchor-center;
  }
 
  .receitas-wrapper{
    display: flex;
    flex-direction: column;
    width: 32.5%;
    position: static;
    max-height: 620px;
    overflow-y: auto;
    overflow-x: hidden;
    border: 1.5px solid #e0e0e0;
    padding: 10px;
    border-radius: 12px;
    background: #fafbfc;
  }
 
  .full-receitas {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    background: #f6f7fa;
  }
 
  @media screen and (max-width: 1366px) {
    .item-carrinho {
       width: 45%;
    }
    .receitas-wrapper{
      display: flex;
      flex-direction: column;
      width: 35.5vw;
    }
  }
  .atributes {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 8px;
    margin-top: 5px;
    margin-bottom: 10px;
    width: 80%;
    justify-items: center;
  }
  .texto-centrado {
    text-align: center;
    grid-column: 1 / -1;
  }
 
  @media (max-width: 768px) {
    .item-carrinho {
      width: 43%;
    }
  }
 
  @media only screen and (min-width: 1280px) and (max-width: 1280px) and (min-height: 1024px) and (max-height: 1024px) {
    .item-carrinho {
       width: 32%;
     }
  }
</style>
`);


// Carregar as receitas ao iniciar
    map.appendChild(button);
document.addEventListener('DOMContentLoaded', cargarReceitas);
    map.appendChild(popup);
</script>
  </script>
</body>
</html>

Edição das 23h18min de 8 de junho de 2025

<!DOCTYPE html> <html lang="pt-BR"> <head>

 <meta charset="UTF-8">
 <title>Mapa Interativo com Caveiras</title>
 <style>
   body {
     margin: 0;
     background: #0d0d0d;
     display: flex;
     justify-content: center;
     align-items: center;
     height: 100vh;
     font-family: sans-serif;
   }
   .map-container {
     position: relative;
     width: 811px;
     height: 554px;
     background: url('sabaodyMap.png') no-repeat center center;
     background-size: cover;
   }
   .skull-icon {
     position: absolute;
     width: 24px;
     height: 24px;
     cursor: pointer;
     transition: transform 0.2s, filter 0.2s;
   }
   .heart-icon {
     position: absolute;
     width: 26px;
     height: 26px;
     padding: 1px;
     cursor: pointer;
     transition: transform 0.2s, filter 0.2s;
   }
   .skull-icon:hover,
   .heart-icon:hover,
   .puzzle-button:hover {
     transform: scale(1.3);
     filter: brightness(1.5);
   }
   .popup {
     position: absolute;
     background: #1e1e1e;
     color: #fff;
     padding: 10px 14px;
     border-radius: 8px;
     border: 1px solid #444;
     box-shadow: 0 0 10px rgba(255, 255, 255, 0.1);
     display: none;
     z-index: 10;
     max-width: 500px;
     font-size: 14px;
     animation: fadeIn 0.3s ease-out;
   }
   .popup iframe {
     border-radius: 6px;
     margin-top: 6px;
     max-width: 100%;
   }
   .puzzle-button {
     position: absolute;
     cursor: pointer;
     z-index: 999;
     width: 28px;
     height: 28px;
     transition: transform 0.2s, filter 0.2s;
   }
   @keyframes fadeIn {
     from { opacity: 0; transform: translateY(-5px); }
     to { opacity: 1; transform: translateY(0); }
   }
 </style>

</head> <body>

 <script>
   const skulls = [
     {
       x: 410, y: 220,
       title: "White Skull",
       desc: "Boss: White Skull
Área sombria, cuidado com os ataques surpresa!" }, { x: 650, y: 125, title: "Red Fang", desc: "Boss: Red Fang
Possui resistência a fogo. Traga ataques de gelo!" }, { x: 250, y: 410, title: "Void Wraith", desc: "Boss: Void Wraith
Evite ataques diretos. Usa magia de sombras." }, { x: 248, y: 320, title: "Night Howler", desc: "Boss: Night Howler
Ataca com velocidade e confusão. Use proteção contra atordoamento!" } ];
   const hearts = [
     { x: 280, y: 210, desc: "Cura escondida: Quebre a caixa para obter uma cura." },
     { x: 312, y: 196 },
     { x: 245, y: 358, desc: "Após o chefe, o jogador com menos vida receberá uma cura automática." }
   ];
   const puzzleButton = {
     x: 225,
     y: 210,
     videoUrl: "https://www.youtube.com/embed/10rhyP32vdw"
   };
   const map = document.getElementById("map");
   // Adiciona as caveiras
   skulls.forEach((skull, index) => {
     const icon = document.createElement("img");
     icon.src = "Whiteskull.png";
     icon.className = "skull-icon";
     icon.style.left = skull.x + "px";
     icon.style.top = skull.y + "px";
     icon.dataset.index = index;
     const popup = document.createElement("div");
     popup.className = "popup";
     popup.innerHTML = `${skull.title}
${skull.desc}`; popup.style.left = (skull.x + 30) + "px"; popup.style.top = (skull.y - 10) + "px";
     icon.addEventListener("click", () => {
       popup.style.display = popup.style.display === "block" ? "none" : "block";
     });
     document.addEventListener("click", (e) => {
       if (!icon.contains(e.target) && !popup.contains(e.target)) {
         popup.style.display = "none";
       }
     });
     map.appendChild(icon);
     map.appendChild(popup);
   });
   // Adiciona os corações
   hearts.forEach((heart, index) => {
     const icon = document.createElement("img");
     const desc = heart.desc || "Pegue o coração para se curar";
     icon.src = "heart.png";
     icon.className = "heart-icon";
     icon.style.left = heart.x + "px";
     icon.style.top = heart.y + "px";
     icon.dataset.index = index;
     const popup = document.createElement("div");
     popup.className = "popup";
     popup.innerHTML = `Cura
${desc}`; popup.style.left = (heart.x + 30) + "px"; popup.style.top = (heart.y - 10) + "px";
     icon.addEventListener("click", () => {
       popup.style.display = popup.style.display === "block" ? "none" : "block";
     });
     document.addEventListener("click", (e) => {
       if (!icon.contains(e.target) && !popup.contains(e.target)) {
         popup.style.display = "none";
       }
     });
     map.appendChild(icon);
     map.appendChild(popup);
   });
   // Ícone do Puzzle
   const button = document.createElement("img");
   button.className = "puzzle-button";
   button.src = "puzzle.png";
   button.alt = "Puzzle";
   button.style.left = puzzleButton.x + "px";
   button.style.top = puzzleButton.y + "px";
   const popup = document.createElement("div");
   popup.className = "popup";
   popup.style.left = (puzzleButton.x + 60) + "px";
   popup.style.top = (puzzleButton.y - 10) + "px";
   popup.innerHTML = `
     Desafio Puzzle
<iframe width="400" height="260" src="${puzzleButton.videoUrl}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen> </iframe> `;
   button.addEventListener("click", () => {
     popup.style.display = popup.style.display === "block" ? "none" : "block";
   });
   document.addEventListener("click", (e) => {
     if (!button.contains(e.target) && !popup.contains(e.target)) {
       popup.style.display = "none";
     }
   });
   map.appendChild(button);
   map.appendChild(popup);
 </script>

</body> </html>