<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>https://wiki.gla.com.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yawn</id>
	<title>Wiki Gla - Contribuições do usuário [pt-br]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.gla.com.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yawn"/>
	<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php/Especial:Contribui%C3%A7%C3%B5es/Yawn"/>
	<updated>2026-05-21T00:38:56Z</updated>
	<subtitle>Contribuições do usuário</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45929</id>
		<title>Widget:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45929"/>
		<updated>2026-04-10T00:51:30Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class=&amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 class=&amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, m =&amp;gt; ({ '&amp;amp;': '&amp;amp;amp;', '&amp;lt;': '&amp;amp;lt;', '&amp;gt;': '&amp;amp;gt;' }[m]));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function bossRender(root, diff) {&lt;br /&gt;
        try {&lt;br /&gt;
            const data = JSON.parse(root.dataset.json);&lt;br /&gt;
            const d = data[diff];&lt;br /&gt;
            const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            if (!content || !d) return;&lt;br /&gt;
&lt;br /&gt;
            const titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;);&lt;br /&gt;
            if (data.nome &amp;amp;&amp;amp; titulo) titulo.textContent = data.nome;&lt;br /&gt;
&lt;br /&gt;
            let html = `&amp;lt;div class=&amp;quot;boss-content-grid&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Requisitos&lt;br /&gt;
            html += `&amp;lt;div class=&amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
            (d.requisitos || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
            if (!(d.requisitos || []).length) html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Grid recompensas&lt;br /&gt;
            html += `&amp;lt;div class=&amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Garantidas&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
            let divOculta = root.querySelector(`.boss-html-recompensas[data-diff=&amp;quot;${diff}&amp;quot;]`);&lt;br /&gt;
            if (divOculta) {&lt;br /&gt;
                html += divOculta.innerHTML; // Pega o HTML processado pela Wiki perfeitamente!&lt;br /&gt;
            } else {&lt;br /&gt;
                html += `&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // Possíveis Recompensas&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            &lt;br /&gt;
            // Em vez de pegar do JSON, o JS &amp;quot;pesca&amp;quot; o HTML da div invisível&lt;br /&gt;
            divOculta = root.querySelector(`.boss-html-recompensas-possiveis[data-diff=&amp;quot;${diff}&amp;quot;]`);&lt;br /&gt;
            if (divOculta) {&lt;br /&gt;
                html += divOculta.innerHTML; // Pega o HTML processado pela Wiki perfeitamente!&lt;br /&gt;
            } else {&lt;br /&gt;
                html += `&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            html += `&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
            content.innerHTML = html;&lt;br /&gt;
&lt;br /&gt;
            // Atualiza o CSS do botão clicado&lt;br /&gt;
            root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.classList.toggle('active', btn.dataset.diff === diff);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
        } catch (error) {&lt;br /&gt;
            console.error(&amp;quot;Erro ao renderizar o Boss:&amp;quot;, error);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.addEventListener('click', (e) =&amp;gt; {&lt;br /&gt;
                    const diff = e.currentTarget.dataset.diff;&lt;br /&gt;
                    bossRender(root, diff);&lt;br /&gt;
                });&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            // Inicia na aba normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    justify-content: space-around;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
    width: 90%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45928</id>
		<title>Widget:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45928"/>
		<updated>2026-04-10T00:51:04Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class=&amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 class=&amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, m =&amp;gt; ({ '&amp;amp;': '&amp;amp;amp;', '&amp;lt;': '&amp;amp;lt;', '&amp;gt;': '&amp;amp;gt;' }[m]));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function bossRender(root, diff) {&lt;br /&gt;
        try {&lt;br /&gt;
            const data = JSON.parse(root.dataset.json);&lt;br /&gt;
            const d = data[diff];&lt;br /&gt;
            const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            if (!content || !d) return;&lt;br /&gt;
&lt;br /&gt;
            const titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;);&lt;br /&gt;
            if (data.nome &amp;amp;&amp;amp; titulo) titulo.textContent = data.nome;&lt;br /&gt;
&lt;br /&gt;
            let html = `&amp;lt;div class=&amp;quot;boss-content-grid&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Requisitos&lt;br /&gt;
            html += `&amp;lt;div class=&amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
            (d.requisitos || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
            if (!(d.requisitos || []).length) html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Grid recompensas&lt;br /&gt;
            html += `&amp;lt;div class=&amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Garantidas&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
            let divOculta = root.querySelector(`.boss-html-recompensas[data-diff=&amp;quot;${diff}&amp;quot;]`);&lt;br /&gt;
            if (divOculta) {&lt;br /&gt;
                html += divOculta.innerHTML; // Pega o HTML processado pela Wiki perfeitamente!&lt;br /&gt;
            } else {&lt;br /&gt;
                html += `&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // Possíveis Recompensas&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            &lt;br /&gt;
            // Em vez de pegar do JSON, o JS &amp;quot;pesca&amp;quot; o HTML da div invisível&lt;br /&gt;
            divOculta = root.querySelector(`.boss-html-recompensas-possiveis[data-diff=&amp;quot;${diff}&amp;quot;]`);&lt;br /&gt;
            if (divOculta) {&lt;br /&gt;
                html += divOculta.innerHTML; // Pega o HTML processado pela Wiki perfeitamente!&lt;br /&gt;
            } else {&lt;br /&gt;
                html += `&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            html += `&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
            content.innerHTML = html;&lt;br /&gt;
&lt;br /&gt;
            // Atualiza o CSS do botão clicado&lt;br /&gt;
            root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.classList.toggle('active', btn.dataset.diff === diff);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
        } catch (error) {&lt;br /&gt;
            console.error(&amp;quot;Erro ao renderizar o Boss:&amp;quot;, error);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.addEventListener('click', (e) =&amp;gt; {&lt;br /&gt;
                    const diff = e.currentTarget.dataset.diff;&lt;br /&gt;
                    bossRender(root, diff);&lt;br /&gt;
                });&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            // Inicia na aba normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
    width: 90%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45927</id>
		<title>Widget:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45927"/>
		<updated>2026-04-10T00:47:38Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class=&amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 class=&amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, m =&amp;gt; ({ '&amp;amp;': '&amp;amp;amp;', '&amp;lt;': '&amp;amp;lt;', '&amp;gt;': '&amp;amp;gt;' }[m]));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function bossRender(root, diff) {&lt;br /&gt;
        try {&lt;br /&gt;
            const data = JSON.parse(root.dataset.json);&lt;br /&gt;
            const d = data[diff];&lt;br /&gt;
            const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            if (!content || !d) return;&lt;br /&gt;
&lt;br /&gt;
            const titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;);&lt;br /&gt;
            if (data.nome &amp;amp;&amp;amp; titulo) titulo.textContent = data.nome;&lt;br /&gt;
&lt;br /&gt;
            let html = `&amp;lt;div class=&amp;quot;boss-content-grid&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Requisitos&lt;br /&gt;
            html += `&amp;lt;div class=&amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
            (d.requisitos || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
            if (!(d.requisitos || []).length) html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Grid recompensas&lt;br /&gt;
            html += `&amp;lt;div class=&amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Garantidas&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
            let divOculta = root.querySelector(`.boss-html-recompensas[data-diff=&amp;quot;${diff}&amp;quot;]`);&lt;br /&gt;
            if (divOculta) {&lt;br /&gt;
                html += divOculta.innerHTML; // Pega o HTML processado pela Wiki perfeitamente!&lt;br /&gt;
            } else {&lt;br /&gt;
                html += `&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // Possíveis Recompensas&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            &lt;br /&gt;
            // Em vez de pegar do JSON, o JS &amp;quot;pesca&amp;quot; o HTML da div invisível&lt;br /&gt;
            divOculta = root.querySelector(`.boss-html-recompensas-possiveis[data-diff=&amp;quot;${diff}&amp;quot;]`);&lt;br /&gt;
            if (divOculta) {&lt;br /&gt;
                html += divOculta.innerHTML; // Pega o HTML processado pela Wiki perfeitamente!&lt;br /&gt;
            } else {&lt;br /&gt;
                html += `&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            html += `&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
            content.innerHTML = html;&lt;br /&gt;
&lt;br /&gt;
            // Atualiza o CSS do botão clicado&lt;br /&gt;
            root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.classList.toggle('active', btn.dataset.diff === diff);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
        } catch (error) {&lt;br /&gt;
            console.error(&amp;quot;Erro ao renderizar o Boss:&amp;quot;, error);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.addEventListener('click', (e) =&amp;gt; {&lt;br /&gt;
                    const diff = e.currentTarget.dataset.diff;&lt;br /&gt;
                    bossRender(root, diff);&lt;br /&gt;
                });&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            // Inicia na aba normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
    width: 90%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45925</id>
		<title>Módulo:Barbarossa/data</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45925"/>
		<updated>2026-04-10T00:46:29Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local bossData = {&lt;br /&gt;
    -- Dados gerais do boss&lt;br /&gt;
    nome = &amp;quot;Barbarossa&amp;quot;,&lt;br /&gt;
    introducao = &amp;quot;Derrote Barbarossa, o implacável líder dos Sand Sailors, em Yuba - Alabasta West.&amp;quot;,&lt;br /&gt;
    localizacao = {&lt;br /&gt;
        descricao = &amp;quot;Vá até Alabasta West e pegue o camelo em direção à Yuba.&amp;quot;,&lt;br /&gt;
        caminho = &amp;quot;CaminhoBarbarossa.png&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    -- Dificuldades&lt;br /&gt;
    normal = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 110&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;Berry:10000&amp;quot;,&amp;quot;Cristal do Sábio:2&amp;quot;,&amp;quot;Cristal do Céu:3&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {}&lt;br /&gt;
    },&lt;br /&gt;
    elite = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 140&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;Cristal Carmesim:2&amp;quot;, &amp;quot;Berry:20000&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {}&lt;br /&gt;
    },&lt;br /&gt;
    hard = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 180&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;Berry:60000&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Casaco do Law;1&amp;quot;,&amp;quot;Calça do Law;1&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
}&lt;br /&gt;
return bossData&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio:Yawn&amp;diff=45924</id>
		<title>Usuário:Yawn</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio:Yawn&amp;diff=45924"/>
		<updated>2026-04-10T00:45:49Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:TesteBossYawnv2 | render | boss=barbarossa }}&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45923</id>
		<title>Widget:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45923"/>
		<updated>2026-04-10T00:45:22Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class=&amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 class=&amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, m =&amp;gt; ({ '&amp;amp;': '&amp;amp;amp;', '&amp;lt;': '&amp;amp;lt;', '&amp;gt;': '&amp;amp;gt;' }[m]));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function bossRender(root, diff) {&lt;br /&gt;
        try {&lt;br /&gt;
            const data = JSON.parse(root.dataset.json);&lt;br /&gt;
            const d = data[diff];&lt;br /&gt;
            const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            if (!content || !d) return;&lt;br /&gt;
&lt;br /&gt;
            const titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;);&lt;br /&gt;
            if (data.nome &amp;amp;&amp;amp; titulo) titulo.textContent = data.nome;&lt;br /&gt;
&lt;br /&gt;
            let html = `&amp;lt;div class=&amp;quot;boss-content-grid&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Requisitos&lt;br /&gt;
            html += `&amp;lt;div class=&amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
            (d.requisitos || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
            if (!(d.requisitos || []).length) html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Grid recompensas&lt;br /&gt;
            html += `&amp;lt;div class=&amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Garantidas&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
            let divOculta = root.querySelector(`.boss-html-recompensas[data-diff=&amp;quot;${diff}&amp;quot;]`);&lt;br /&gt;
            if (divOculta) {&lt;br /&gt;
                html += divOculta.innerHTML; // Pega o HTML processado pela Wiki perfeitamente!&lt;br /&gt;
            } else {&lt;br /&gt;
                html += `&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // Possíveis Recompensas&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            &lt;br /&gt;
            // Em vez de pegar do JSON, o JS &amp;quot;pesca&amp;quot; o HTML da div invisível&lt;br /&gt;
            divOculta = root.querySelector(`.boss-html-recompensas-possiveis[data-diff=&amp;quot;${diff}&amp;quot;]`);&lt;br /&gt;
            if (divOculta) {&lt;br /&gt;
                html += divOculta.innerHTML; // Pega o HTML processado pela Wiki perfeitamente!&lt;br /&gt;
            } else {&lt;br /&gt;
                html += `&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            html += `&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
            content.innerHTML = html;&lt;br /&gt;
&lt;br /&gt;
            // Atualiza o CSS do botão clicado&lt;br /&gt;
            root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.classList.toggle('active', btn.dataset.diff === diff);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
        } catch (error) {&lt;br /&gt;
            console.error(&amp;quot;Erro ao renderizar o Boss:&amp;quot;, error);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.addEventListener('click', (e) =&amp;gt; {&lt;br /&gt;
                    const diff = e.currentTarget.dataset.diff;&lt;br /&gt;
                    bossRender(root, diff);&lt;br /&gt;
                });&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            // Inicia na aba normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45922</id>
		<title>Widget:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45922"/>
		<updated>2026-04-10T00:42:46Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class=&amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 class=&amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, m =&amp;gt; ({ '&amp;amp;': '&amp;amp;amp;', '&amp;lt;': '&amp;amp;lt;', '&amp;gt;': '&amp;amp;gt;' }[m]));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function bossRender(root, diff) {&lt;br /&gt;
        try {&lt;br /&gt;
            const data = JSON.parse(root.dataset.json);&lt;br /&gt;
            const d = data[diff];&lt;br /&gt;
            const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            if (!content || !d) return;&lt;br /&gt;
&lt;br /&gt;
            const titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;);&lt;br /&gt;
            if (data.nome &amp;amp;&amp;amp; titulo) titulo.textContent = data.nome;&lt;br /&gt;
&lt;br /&gt;
            let html = `&amp;lt;div class=&amp;quot;boss-content-grid&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Requisitos&lt;br /&gt;
            html += `&amp;lt;div class=&amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
            (d.requisitos || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
            if (!(d.requisitos || []).length) html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Grid recompensas&lt;br /&gt;
            html += `&amp;lt;div class=&amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Garantidas&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
            const divOculta = root.querySelector(`.boss-html-recompensas[data-diff=&amp;quot;${diff}&amp;quot;]`);&lt;br /&gt;
            if (divOculta) {&lt;br /&gt;
                html += divOculta.innerHTML; // Pega o HTML processado pela Wiki perfeitamente!&lt;br /&gt;
            } else {&lt;br /&gt;
                html += `&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // Possíveis Recompensas&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            &lt;br /&gt;
            // Em vez de pegar do JSON, o JS &amp;quot;pesca&amp;quot; o HTML da div invisível&lt;br /&gt;
            divOculta = root.querySelector(`.boss-html-recompensas-possiveis[data-diff=&amp;quot;${diff}&amp;quot;]`);&lt;br /&gt;
            if (divOculta) {&lt;br /&gt;
                html += divOculta.innerHTML; // Pega o HTML processado pela Wiki perfeitamente!&lt;br /&gt;
            } else {&lt;br /&gt;
                html += `&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            html += `&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
            content.innerHTML = html;&lt;br /&gt;
&lt;br /&gt;
            // Atualiza o CSS do botão clicado&lt;br /&gt;
            root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.classList.toggle('active', btn.dataset.diff === diff);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
        } catch (error) {&lt;br /&gt;
            console.error(&amp;quot;Erro ao renderizar o Boss:&amp;quot;, error);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.addEventListener('click', (e) =&amp;gt; {&lt;br /&gt;
                    const diff = e.currentTarget.dataset.diff;&lt;br /&gt;
                    bossRender(root, diff);&lt;br /&gt;
                });&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            // Inicia na aba normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45921</id>
		<title>Módulo:Barbarossa/data</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45921"/>
		<updated>2026-04-10T00:40:44Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local bossData = {&lt;br /&gt;
    -- Dados gerais do boss&lt;br /&gt;
    nome = &amp;quot;Barbarossa&amp;quot;,&lt;br /&gt;
    introducao = &amp;quot;Derrote Barbarossa, o implacável líder dos Sand Sailors, em Yuba - Alabasta West.&amp;quot;,&lt;br /&gt;
    localizacao = {&lt;br /&gt;
        descricao = &amp;quot;Vá até Alabasta West e pegue o camelo em direção à Yuba.&amp;quot;,&lt;br /&gt;
        caminho = &amp;quot;CaminhoBarbarossa.png&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    -- Dificuldades&lt;br /&gt;
    normal = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 110&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;Berry:10000&amp;quot;,&amp;quot;Cristal do Sábio:2&amp;quot;,&amp;quot;Cristal do Céu:3&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {}&lt;br /&gt;
    },&lt;br /&gt;
    elite = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 140&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;Cristal Carmesim:2&amp;quot;, &amp;quot;Berry:20000&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Cristal Carmesim:2&amp;quot;, &amp;quot;Berry:20000&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    hard = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 180&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;Berry:60000&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Casaco do Law;1&amp;quot;,&amp;quot;Calça do Law;1&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
}&lt;br /&gt;
return bossData&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45920</id>
		<title>Módulo:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45920"/>
		<updated>2026-04-10T00:39:06Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.loadBossData(bossName)&lt;br /&gt;
    local normalizedName = bossName:gsub(&amp;quot;^%l&amp;quot;, string.upper)&lt;br /&gt;
    local success, bossData = pcall(function()&lt;br /&gt;
        return require(&amp;quot;Módulo:&amp;quot; .. normalizedName .. &amp;quot;/data&amp;quot;)&lt;br /&gt;
    end)&lt;br /&gt;
    return success and bossData or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local bossName = frame.args.boss&lt;br /&gt;
    if not bossName or bossName == &amp;quot;&amp;quot; then return &amp;quot;Erro: Boss não especificado.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local bossData = p.loadBossData(bossName)&lt;br /&gt;
    if not bossData then return &amp;quot;Erro: Dados não encontrados.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local diffs = {&amp;quot;normal&amp;quot;, &amp;quot;elite&amp;quot;, &amp;quot;hard&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    -- Aqui vamos guardar os HTMLs gerados fora do JSON&lt;br /&gt;
    local elementosOcultosRecompensas = &amp;quot;&amp;quot;&lt;br /&gt;
    local elementosOcultosRecompensasPos = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    for _, diffKey in ipairs(diffs) do&lt;br /&gt;
        local diffData = bossData[diffKey]&lt;br /&gt;
        if diffData then&lt;br /&gt;
            local strRecompensas = table.concat(diffData.recompensas, &amp;quot;,&amp;quot;)&lt;br /&gt;
            local strRecompensasPossiveis = table.concat(diffData.recompensasPossiveis, &amp;quot;,&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            local wikiTextRecompensas = &amp;quot;{{Reward|itens=&amp;quot; .. strRecompensas .. &amp;quot;}}&amp;quot;&lt;br /&gt;
            local wikiTextRecompensasPossiveis = &amp;quot;{{Reward|itens=&amp;quot; .. strRecompensasPossiveis .. &amp;quot;}}&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
            local htmlRenderRecompensas = frame:preprocess(wikiTextRecompensas)&lt;br /&gt;
            local htmlRenderRecompensasPos = frame:preprocess(wikiTextRecompensasPossiveis)&lt;br /&gt;
            &lt;br /&gt;
            -- Em vez de por no JSON, usa uma div oculta com o HTML pronto&lt;br /&gt;
            elementosOcultosRecompensas = elementosOcultosRecompensas .. '&amp;lt;div class=&amp;quot;boss-html-recompensas&amp;quot; data-diff=&amp;quot;' .. diffKey .. '&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;' .. htmlRenderRecompensas .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
            elementosOcultosRecompensasPos = elementosOcultosRecompensasPos .. '&amp;lt;div class=&amp;quot;boss-html-recompensas-possiveis&amp;quot; data-diff=&amp;quot;' .. diffKey .. '&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;' .. htmlRenderRecompensasPos .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local jsonData = mw.text.jsonEncode(bossData)&lt;br /&gt;
    -- Escapa aspas para o HTML de forma segura&lt;br /&gt;
    local safeJson = mw.text.encode(jsonData)&lt;br /&gt;
    -- Carrega o Widget&lt;br /&gt;
    local widgetHTML = frame:preprocess(&amp;quot;{{#widget:TesteBossYawnv2}}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    -- Monta a estrutura final: A div principal contém o JSON leve, as divs ocultas e o Widget&lt;br /&gt;
    return '&amp;lt;div class=&amp;quot;boss-component&amp;quot; data-json=&amp;quot;' .. safeJson .. '&amp;quot;&amp;gt;' .. elementosOcultosRecompensas .. elementosOcultosRecompensasPos .. widgetHTML .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45919</id>
		<title>Widget:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45919"/>
		<updated>2026-04-10T00:37:30Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class=&amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 class=&amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, m =&amp;gt; ({ '&amp;amp;': '&amp;amp;amp;', '&amp;lt;': '&amp;amp;lt;', '&amp;gt;': '&amp;amp;gt;' }[m]));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function bossRender(root, diff) {&lt;br /&gt;
        try {&lt;br /&gt;
            const data = JSON.parse(root.dataset.json);&lt;br /&gt;
            const d = data[diff];&lt;br /&gt;
            const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            if (!content || !d) return;&lt;br /&gt;
&lt;br /&gt;
            const titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;);&lt;br /&gt;
            if (data.nome &amp;amp;&amp;amp; titulo) titulo.textContent = data.nome;&lt;br /&gt;
&lt;br /&gt;
            let html = `&amp;lt;div class=&amp;quot;boss-content-grid&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Requisitos&lt;br /&gt;
            html += `&amp;lt;div class=&amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
            (d.requisitos || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
            if (!(d.requisitos || []).length) html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Grid recompensas&lt;br /&gt;
            html += `&amp;lt;div class=&amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Garantidas&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
            (d.recompensas || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
            if (!(d.recompensas || []).length) html += `&amp;lt;li&amp;gt;Nenhuma recompensa garantida&amp;lt;/li&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Possíveis Recompensas&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            &lt;br /&gt;
            // Em vez de pegar do JSON, o JS &amp;quot;pesca&amp;quot; o HTML da div invisível&lt;br /&gt;
            const divOculta = root.querySelector(`.boss-html-recompensas-possiveis[data-diff=&amp;quot;${diff}&amp;quot;]`);&lt;br /&gt;
            if (divOculta) {&lt;br /&gt;
                html += divOculta.innerHTML; // Pega o HTML processado pela Wiki perfeitamente!&lt;br /&gt;
            } else {&lt;br /&gt;
                html += `&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            html += `&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
            content.innerHTML = html;&lt;br /&gt;
&lt;br /&gt;
            // Atualiza o CSS do botão clicado&lt;br /&gt;
            root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.classList.toggle('active', btn.dataset.diff === diff);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
        } catch (error) {&lt;br /&gt;
            console.error(&amp;quot;Erro ao renderizar o Boss:&amp;quot;, error);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.addEventListener('click', (e) =&amp;gt; {&lt;br /&gt;
                    const diff = e.currentTarget.dataset.diff;&lt;br /&gt;
                    bossRender(root, diff);&lt;br /&gt;
                });&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            // Inicia na aba normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45918</id>
		<title>Módulo:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45918"/>
		<updated>2026-04-10T00:35:23Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.loadBossData(bossName)&lt;br /&gt;
    local normalizedName = bossName:gsub(&amp;quot;^%l&amp;quot;, string.upper)&lt;br /&gt;
    local success, bossData = pcall(function()&lt;br /&gt;
        return require(&amp;quot;Módulo:&amp;quot; .. normalizedName .. &amp;quot;/data&amp;quot;)&lt;br /&gt;
    end)&lt;br /&gt;
    return success and bossData or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local bossName = frame.args.boss&lt;br /&gt;
    if not bossName or bossName == &amp;quot;&amp;quot; then return &amp;quot;Erro: Boss não especificado.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local bossData = p.loadBossData(bossName)&lt;br /&gt;
    if not bossData then return &amp;quot;Erro: Dados não encontrados.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local diffs = {&amp;quot;normal&amp;quot;, &amp;quot;elite&amp;quot;, &amp;quot;hard&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    -- Aqui vamos guardar os HTMLs gerados fora do JSON&lt;br /&gt;
    local elementosOcultos = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    for _, diffKey in ipairs(diffs) do&lt;br /&gt;
        local diffData = bossData[diffKey]&lt;br /&gt;
        if diffData then&lt;br /&gt;
            local strRecompensas = table.concat(diffData.recompensas, &amp;quot;,&amp;quot;)&lt;br /&gt;
            local strRecompensasPossiveis = table.concat(diffData.recompensasPossiveis, &amp;quot;,&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            local wikiTextRecompensas = &amp;quot;{{Reward|itens=&amp;quot; .. strRecompensas .. &amp;quot;}}&amp;quot;&lt;br /&gt;
            local wikiTextRecompensasPossiveis = &amp;quot;{{Reward|itens=&amp;quot; .. strRecompensasPossiveis .. &amp;quot;}}&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
            local htmlRenderRecompensas = frame:preprocess(wikiTextRecompensas)&lt;br /&gt;
            local htmlRenderRecompensasPos = frame:preprocess(wikiTextRecompensasPossiveis)&lt;br /&gt;
            &lt;br /&gt;
            -- Em vez de por no JSON, usa uma div oculta com o HTML pronto&lt;br /&gt;
            elementosOcultosRecompensas = elementosOcultosRecompensas .. '&amp;lt;div class=&amp;quot;boss-html-recompensas&amp;quot; data-diff=&amp;quot;' .. diffKey .. '&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;' .. htmlRenderRecompensas .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
            elementosOcultosRecompensasPos = elementosOcultosRecompensasPos .. '&amp;lt;div class=&amp;quot;boss-html-recompensas-possiveis&amp;quot; data-diff=&amp;quot;' .. diffKey .. '&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;' .. htmlRenderRecompensasPos .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local jsonData = mw.text.jsonEncode(bossData)&lt;br /&gt;
    -- Escapa aspas para o HTML de forma segura&lt;br /&gt;
    local safeJson = mw.text.encode(jsonData)&lt;br /&gt;
    -- Carrega o Widget&lt;br /&gt;
    local widgetHTML = frame:preprocess(&amp;quot;{{#widget:TesteBossYawnv2}}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    -- Monta a estrutura final: A div principal contém o JSON leve, as divs ocultas e o Widget&lt;br /&gt;
    return '&amp;lt;div class=&amp;quot;boss-component&amp;quot; data-json=&amp;quot;' .. safeJson .. '&amp;quot;&amp;gt;' .. elementosOcultosRecompensas .. elementosOcultosRecompensasPos .. widgetHTML .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45917</id>
		<title>Módulo:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45917"/>
		<updated>2026-04-10T00:33:59Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.loadBossData(bossName)&lt;br /&gt;
    local normalizedName = bossName:gsub(&amp;quot;^%l&amp;quot;, string.upper)&lt;br /&gt;
    local success, bossData = pcall(function()&lt;br /&gt;
        return require(&amp;quot;Módulo:&amp;quot; .. normalizedName .. &amp;quot;/data&amp;quot;)&lt;br /&gt;
    end)&lt;br /&gt;
    return success and bossData or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local bossName = frame.args.boss&lt;br /&gt;
    if not bossName or bossName == &amp;quot;&amp;quot; then return &amp;quot;Erro: Boss não especificado.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local bossData = p.loadBossData(bossName)&lt;br /&gt;
    if not bossData then return &amp;quot;Erro: Dados não encontrados.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local diffs = {&amp;quot;normal&amp;quot;, &amp;quot;elite&amp;quot;, &amp;quot;hard&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    -- Aqui vamos guardar os HTMLs gerados fora do JSON&lt;br /&gt;
    local elementosOcultos = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    for _, diffKey in ipairs(diffs) do&lt;br /&gt;
        local diffData = bossData[diffKey]&lt;br /&gt;
        if diffData then&lt;br /&gt;
            local strRecompensas = table.concat(diffData.recompensas, &amp;quot;,&amp;quot;)&lt;br /&gt;
            local strRecompensasPossiveis = table.concat(diffData.recompensasPossiveis, &amp;quot;,&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            local wikiTextRecompensas = &amp;quot;{{Reward|itens=&amp;quot; .. strRecompensas .. &amp;quot;}}&amp;quot;&lt;br /&gt;
            local wikiTextRecompensasPossiveis = &amp;quot;{{Reward|itens=&amp;quot; .. strRecompensasPossiveis .. &amp;quot;}}&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
            local htmlRenderRecompensas = frame:preprocess(wikiTextRecompensas)&lt;br /&gt;
            local htmlRenderRecompensasPos = frame:preprocess(wikiTextRecompensasPossiveis)&lt;br /&gt;
            &lt;br /&gt;
            -- Em vez de por no JSON, usa uma div oculta com o HTML pronto&lt;br /&gt;
            elementosOcultosRecompensas = elementosOcultosRecompensas .. '&amp;lt;div class=&amp;quot;boss-html-recompensas&amp;quot; data-diff=&amp;quot;' .. diffKey .. '&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;' .. htmlRenderRecompensas .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
            elementosOcultosRecompensasPos = elementosOcultosRecompensasPos .. '&amp;lt;div class=&amp;quot;boss-html-recompensas&amp;quot; data-diff=&amp;quot;' .. diffKey .. '&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;' .. htmlRenderRecompensasPos .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local jsonData = mw.text.jsonEncode(bossData)&lt;br /&gt;
    -- Escapa aspas para o HTML de forma segura&lt;br /&gt;
    local safeJson = mw.text.encode(jsonData)&lt;br /&gt;
    -- Carrega o Widget&lt;br /&gt;
    local widgetHTML = frame:preprocess(&amp;quot;{{#widget:TesteBossYawnv2}}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    -- Monta a estrutura final: A div principal contém o JSON leve, as divs ocultas e o Widget&lt;br /&gt;
    return '&amp;lt;div class=&amp;quot;boss-component&amp;quot; data-json=&amp;quot;' .. safeJson .. '&amp;quot;&amp;gt;' .. elementosOcultosRecompensas .. elementosOcultosRecompensasPos .. widgetHTML .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45915</id>
		<title>Módulo:Barbarossa/data</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45915"/>
		<updated>2026-04-10T00:18:21Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local bossData = {&lt;br /&gt;
    -- Dados gerais do boss&lt;br /&gt;
    nome = &amp;quot;Barbarossa&amp;quot;,&lt;br /&gt;
    introducao = &amp;quot;Derrote Barbarossa, o implacável líder dos Sand Sailors, em Yuba - Alabasta West.&amp;quot;,&lt;br /&gt;
    localizacao = {&lt;br /&gt;
        descricao = &amp;quot;Vá até Alabasta West e pegue o camelo em direção à Yuba.&amp;quot;,&lt;br /&gt;
        caminho = &amp;quot;CaminhoBarbarossa.png&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    -- Dificuldades&lt;br /&gt;
    normal = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 110&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;10k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Cristal do Sábio:2&amp;quot;,&amp;quot;Cristal do Céu:3&amp;quot;, &amp;quot;Berry:10000&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    elite = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 140&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;20k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Cristal Carmesim:2&amp;quot;, &amp;quot;Berry:20000&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    hard = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 180&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;40k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Casaco do Law&amp;quot;,&amp;quot;Calça do Law&amp;quot;,&amp;quot;Berry:60000&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
}&lt;br /&gt;
return bossData&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45914</id>
		<title>Módulo:Barbarossa/data</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45914"/>
		<updated>2026-04-10T00:17:17Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local bossData = {&lt;br /&gt;
    -- Dados gerais do boss&lt;br /&gt;
    nome = &amp;quot;Barbarossa&amp;quot;,&lt;br /&gt;
    introducao = &amp;quot;Derrote Barbarossa, o implacável líder dos Sand Sailors, em Yuba - Alabasta West.&amp;quot;,&lt;br /&gt;
    localizacao = {&lt;br /&gt;
        descricao = &amp;quot;Vá até Alabasta West e pegue o camelo em direção à Yuba.&amp;quot;,&lt;br /&gt;
        caminho = &amp;quot;CaminhoBarbarossa.png&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    -- Dificuldades&lt;br /&gt;
    normal = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 110&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;10k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Cristal do Sábio:2&amp;quot;,&amp;quot;Cristal do Céu:3&amp;quot;, &amp;quot;Berry:10k&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    elite = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 140&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;20k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Cristal Carmesim:2&amp;quot;, &amp;quot;Berry:20000&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    hard = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 180&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;40k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Casaco do Law&amp;quot;,&amp;quot;Calça do Law&amp;quot;,&amp;quot;Berry:60000&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
}&lt;br /&gt;
return bossData&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45913</id>
		<title>Módulo:Barbarossa/data</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45913"/>
		<updated>2026-04-10T00:16:47Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local bossData = {&lt;br /&gt;
    -- Dados gerais do boss&lt;br /&gt;
    nome = &amp;quot;Barbarossa&amp;quot;,&lt;br /&gt;
    introducao = &amp;quot;Derrote Barbarossa, o implacável líder dos Sand Sailors, em Yuba - Alabasta West.&amp;quot;,&lt;br /&gt;
    localizacao = {&lt;br /&gt;
        descricao = &amp;quot;Vá até Alabasta West e pegue o camelo em direção à Yuba.&amp;quot;,&lt;br /&gt;
        caminho = &amp;quot;CaminhoBarbarossa.png&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    -- Dificuldades&lt;br /&gt;
    normal = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 110&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;10k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Cristal do Sábio:2&amp;quot;,&amp;quot;Cristal do Céu:3&amp;quot;, &amp;quot;Berry:10k&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    elite = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 140&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;20k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Cristal Carmesin:2&amp;quot;, &amp;quot;Berry:20000&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    hard = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 180&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;40k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Casaco do Law&amp;quot;,&amp;quot;Calça do Law&amp;quot;,&amp;quot;Berry:60000&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
}&lt;br /&gt;
return bossData&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45912</id>
		<title>Módulo:Barbarossa/data</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45912"/>
		<updated>2026-04-10T00:15:58Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local bossData = {&lt;br /&gt;
    -- Dados gerais do boss&lt;br /&gt;
    nome = &amp;quot;Barbarossa&amp;quot;,&lt;br /&gt;
    introducao = &amp;quot;Derrote Barbarossa, o implacável líder dos Sand Sailors, em Yuba - Alabasta West.&amp;quot;,&lt;br /&gt;
    localizacao = {&lt;br /&gt;
        descricao = &amp;quot;Vá até Alabasta West e pegue o camelo em direção à Yuba.&amp;quot;,&lt;br /&gt;
        caminho = &amp;quot;CaminhoBarbarossa.png&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    -- Dificuldades&lt;br /&gt;
    normal = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 110&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;10k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Cristal do Sábio:2&amp;quot;,&amp;quot;Cristal do Céu:3&amp;quot;, &amp;quot;Berry:10k&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    elite = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 140&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;20k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Cristal Carmesin:2&amp;quot;, &amp;quot;Berry:20k&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    hard = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 180&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;40k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Casaco do Law&amp;quot;,&amp;quot;Calça do Law&amp;quot;,&amp;quot;Berry:20k&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
}&lt;br /&gt;
return bossData&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45911</id>
		<title>Módulo:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45911"/>
		<updated>2026-04-10T00:12:57Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.loadBossData(bossName)&lt;br /&gt;
    local normalizedName = bossName:gsub(&amp;quot;^%l&amp;quot;, string.upper)&lt;br /&gt;
    local success, bossData = pcall(function()&lt;br /&gt;
        return require(&amp;quot;Módulo:&amp;quot; .. normalizedName .. &amp;quot;/data&amp;quot;)&lt;br /&gt;
    end)&lt;br /&gt;
    return success and bossData or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local bossName = frame.args.boss&lt;br /&gt;
    if not bossName or bossName == &amp;quot;&amp;quot; then return &amp;quot;Erro: Boss não especificado.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local bossData = p.loadBossData(bossName)&lt;br /&gt;
    if not bossData then return &amp;quot;Erro: Dados não encontrados.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local diffs = {&amp;quot;normal&amp;quot;, &amp;quot;elite&amp;quot;, &amp;quot;hard&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    -- Aqui vamos guardar os HTMLs gerados fora do JSON&lt;br /&gt;
    local elementosOcultos = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    for _, diffKey in ipairs(diffs) do&lt;br /&gt;
        local diffData = bossData[diffKey]&lt;br /&gt;
        if diffData and diffData.recompensasPossiveis then&lt;br /&gt;
            local itensStr = table.concat(diffData.recompensasPossiveis, &amp;quot;,&amp;quot;)&lt;br /&gt;
            local wikiText = &amp;quot;{{Reward|itens=&amp;quot; .. itensStr .. &amp;quot;}}&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
            -- Processa o HTML das imagens e tooltips&lt;br /&gt;
            local htmlRenderizado = frame:preprocess(wikiText)&lt;br /&gt;
            &lt;br /&gt;
            -- O SEGREDO: Em vez de por no JSON, criamos uma div oculta com o HTML pronto!&lt;br /&gt;
            elementosOcultos = elementosOcultos .. '&amp;lt;div class=&amp;quot;boss-html-recompensas&amp;quot; data-diff=&amp;quot;' .. diffKey .. '&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;' .. htmlRenderizado .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Gera o JSON (agora ele está minúsculo e inofensivo, contendo apenas os textos básicos)&lt;br /&gt;
    local jsonData = mw.text.jsonEncode(bossData)&lt;br /&gt;
    &lt;br /&gt;
    -- Escapa aspas para o HTML de forma segura&lt;br /&gt;
    local safeJson = mw.text.encode(jsonData)&lt;br /&gt;
    &lt;br /&gt;
    -- Carrega o Widget&lt;br /&gt;
    local widgetHTML = frame:preprocess(&amp;quot;{{#widget:TesteBossYawnv2}}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    -- Monta a estrutura final: A div principal contém o JSON leve, as divs ocultas e o Widget&lt;br /&gt;
    return '&amp;lt;div class=&amp;quot;boss-component&amp;quot; data-json=&amp;quot;' .. safeJson .. '&amp;quot;&amp;gt;' .. elementosOcultos .. widgetHTML .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45910</id>
		<title>Módulo:Barbarossa/data</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45910"/>
		<updated>2026-04-10T00:12:33Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local bossData = {&lt;br /&gt;
    -- Dados gerais do boss&lt;br /&gt;
    nome = &amp;quot;Barbarossa&amp;quot;,&lt;br /&gt;
    introducao = &amp;quot;Derrote Barbarossa, o implacável líder dos Sand Sailors, em Yuba - Alabasta West.&amp;quot;,&lt;br /&gt;
    localizacao = {&lt;br /&gt;
        descricao = &amp;quot;Vá até Alabasta West e pegue o camelo em direção à Yuba.&amp;quot;,&lt;br /&gt;
        caminho = &amp;quot;CaminhoBarbarossa.png&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    -- Dificuldades&lt;br /&gt;
    normal = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 110&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;10k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Cristal do Sábio:2&amp;quot;,&amp;quot;Cristal do Céu:3&amp;quot;, &amp;quot;Berry:10&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    elite = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 140&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;20k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Kit de Reparo 2.0&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    hard = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 180&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;40k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Kit de Reparo 2.0&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
}&lt;br /&gt;
return bossData&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45909</id>
		<title>Módulo:Barbarossa/data</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45909"/>
		<updated>2026-04-10T00:12:04Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local bossData = {&lt;br /&gt;
    -- Dados gerais do boss&lt;br /&gt;
    nome = &amp;quot;Barbarossa&amp;quot;,&lt;br /&gt;
    introducao = &amp;quot;Derrote Barbarossa, o implacável líder dos Sand Sailors, em Yuba - Alabasta West.&amp;quot;,&lt;br /&gt;
    localizacao = {&lt;br /&gt;
        descricao = &amp;quot;Vá até Alabasta West e pegue o camelo em direção à Yuba.&amp;quot;,&lt;br /&gt;
        caminho = &amp;quot;CaminhoBarbarossa.png&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    -- Dificuldades&lt;br /&gt;
    normal = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 110&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;10k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Cristal do Sábio:2&amp;quot;,&amp;quot;Cristal do Céu:3&amp;quot;, &amp;quot;Berry:10k&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    elite = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 140&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;20k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Kit de Reparo 2.0&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    hard = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 180&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;40k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Kit de Reparo 2.0&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
}&lt;br /&gt;
return bossData&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45908</id>
		<title>Módulo:Barbarossa/data</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45908"/>
		<updated>2026-04-10T00:11:08Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local bossData = {&lt;br /&gt;
    -- Dados gerais do boss&lt;br /&gt;
    nome = &amp;quot;Barbarossa&amp;quot;,&lt;br /&gt;
    introducao = &amp;quot;Derrote Barbarossa, o implacável líder dos Sand Sailors, em Yuba - Alabasta West.&amp;quot;,&lt;br /&gt;
    localizacao = {&lt;br /&gt;
        descricao = &amp;quot;Vá até Alabasta West e pegue o camelo em direção à Yuba.&amp;quot;,&lt;br /&gt;
        caminho = &amp;quot;CaminhoBarbarossa.png&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    -- Dificuldades&lt;br /&gt;
    normal = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 110&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;10k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Cristal do Sábio:2&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    elite = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 140&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;20k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Kit de Reparo 2.0&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    hard = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 180&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;40k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Kit de Reparo 2.0&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
}&lt;br /&gt;
return bossData&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45907</id>
		<title>Módulo:Barbarossa/data</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:Barbarossa/data&amp;diff=45907"/>
		<updated>2026-04-10T00:09:49Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local bossData = {&lt;br /&gt;
    -- Dados gerais do boss&lt;br /&gt;
    nome = &amp;quot;Barbarossa&amp;quot;,&lt;br /&gt;
    introducao = &amp;quot;Derrote Barbarossa, o implacável líder dos Sand Sailors, em Yuba - Alabasta West.&amp;quot;,&lt;br /&gt;
    localizacao = {&lt;br /&gt;
        descricao = &amp;quot;Vá até Alabasta West e pegue o camelo em direção à Yuba.&amp;quot;,&lt;br /&gt;
        caminho = &amp;quot;CaminhoBarbarossa.png&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    -- Dificuldades&lt;br /&gt;
    normal = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 110&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;10k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Cristal do Sábio;2&amp;quot;,&amp;quot;Cristal do Céu;3&amp;quot;, &amp;quot;Berry;10k&amp;quot; }&lt;br /&gt;
    },&lt;br /&gt;
    elite = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 140&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;20k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Kit de Reparo 2.0&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    hard = {&lt;br /&gt;
        requisitos = {&amp;quot;Lvl 180&amp;quot;},&lt;br /&gt;
        recompensas = {&amp;quot;40k berries&amp;quot;},&lt;br /&gt;
        recompensasPossiveis = {&amp;quot;Kit de Reparo 2.0&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
}&lt;br /&gt;
return bossData&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45906</id>
		<title>Módulo:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45906"/>
		<updated>2026-04-10T00:03:04Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.loadBossData(bossName)&lt;br /&gt;
    local normalizedName = bossName:gsub(&amp;quot;^%l&amp;quot;, string.upper)&lt;br /&gt;
    local success, bossData = pcall(function()&lt;br /&gt;
        return require(&amp;quot;Módulo:&amp;quot; .. normalizedName .. &amp;quot;/data&amp;quot;)&lt;br /&gt;
    end)&lt;br /&gt;
    return success and bossData or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local bossName = frame.args.boss&lt;br /&gt;
    if not bossName or bossName == &amp;quot;&amp;quot; then return &amp;quot;Erro: Boss não especificado.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local bossData = p.loadBossData(bossName)&lt;br /&gt;
    if not bossData then return &amp;quot;Erro: Dados não encontrados.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local diffs = {&amp;quot;normal&amp;quot;, &amp;quot;elite&amp;quot;, &amp;quot;hard&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    -- Aqui vamos guardar os HTMLs gerados fora do JSON&lt;br /&gt;
    local elementosOcultos = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    for _, diffKey in ipairs(diffs) do&lt;br /&gt;
        local diffData = bossData[diffKey]&lt;br /&gt;
        if diffData and diffData.recompensasPossiveis then&lt;br /&gt;
            local itensStr = table.concat(diffData.recompensasPossiveis, &amp;quot;;&amp;quot;)&lt;br /&gt;
            local wikiText = &amp;quot;{{Reward|itens=&amp;quot; .. itensStr .. &amp;quot;}}&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
            -- Processa o HTML das imagens e tooltips&lt;br /&gt;
            local htmlRenderizado = frame:preprocess(wikiText)&lt;br /&gt;
            &lt;br /&gt;
            -- O SEGREDO: Em vez de por no JSON, criamos uma div oculta com o HTML pronto!&lt;br /&gt;
            elementosOcultos = elementosOcultos .. '&amp;lt;div class=&amp;quot;boss-html-recompensas&amp;quot; data-diff=&amp;quot;' .. diffKey .. '&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;' .. htmlRenderizado .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Gera o JSON (agora ele está minúsculo e inofensivo, contendo apenas os textos básicos)&lt;br /&gt;
    local jsonData = mw.text.jsonEncode(bossData)&lt;br /&gt;
    &lt;br /&gt;
    -- Escapa aspas para o HTML de forma segura&lt;br /&gt;
    local safeJson = mw.text.encode(jsonData)&lt;br /&gt;
    &lt;br /&gt;
    -- Carrega o Widget&lt;br /&gt;
    local widgetHTML = frame:preprocess(&amp;quot;{{#widget:TesteBossYawnv2}}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    -- Monta a estrutura final: A div principal contém o JSON leve, as divs ocultas e o Widget&lt;br /&gt;
    return '&amp;lt;div class=&amp;quot;boss-component&amp;quot; data-json=&amp;quot;' .. safeJson .. '&amp;quot;&amp;gt;' .. elementosOcultos .. widgetHTML .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45905</id>
		<title>Widget:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45905"/>
		<updated>2026-04-09T23:48:26Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class=&amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 class=&amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, m =&amp;gt; ({ '&amp;amp;': '&amp;amp;amp;', '&amp;lt;': '&amp;amp;lt;', '&amp;gt;': '&amp;amp;gt;' }[m]));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function bossRender(root, diff) {&lt;br /&gt;
        try {&lt;br /&gt;
            // O JSON voltou a ser limpo e fácil de ler&lt;br /&gt;
            const data = JSON.parse(root.dataset.json);&lt;br /&gt;
            const d = data[diff];&lt;br /&gt;
            const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            if (!content || !d) return;&lt;br /&gt;
&lt;br /&gt;
            const titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;);&lt;br /&gt;
            if (data.nome &amp;amp;&amp;amp; titulo) titulo.textContent = data.nome;&lt;br /&gt;
&lt;br /&gt;
            let html = `&amp;lt;div class=&amp;quot;boss-content-grid&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Requisitos&lt;br /&gt;
            html += `&amp;lt;div class=&amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
            (d.requisitos || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
            if (!(d.requisitos || []).length) html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Grid recompensas&lt;br /&gt;
            html += `&amp;lt;div class=&amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Garantidas&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
            (d.recompensas || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
            if (!(d.recompensas || []).length) html += `&amp;lt;li&amp;gt;Nenhuma recompensa garantida&amp;lt;/li&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Possíveis Recompensas&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            &lt;br /&gt;
            // O PULO DO GATO: Em vez de pegar do JSON, o JS &amp;quot;pesca&amp;quot; o HTML da div invisível&lt;br /&gt;
            const divOculta = root.querySelector(`.boss-html-recompensas[data-diff=&amp;quot;${diff}&amp;quot;]`);&lt;br /&gt;
            if (divOculta) {&lt;br /&gt;
                html += divOculta.innerHTML; // Pega o HTML processado pela Wiki perfeitamente!&lt;br /&gt;
            } else {&lt;br /&gt;
                html += `&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            html += `&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
            content.innerHTML = html;&lt;br /&gt;
&lt;br /&gt;
            // Atualiza o CSS do botão clicado&lt;br /&gt;
            root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.classList.toggle('active', btn.dataset.diff === diff);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
        } catch (error) {&lt;br /&gt;
            console.error(&amp;quot;Erro ao renderizar o Boss:&amp;quot;, error);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.addEventListener('click', (e) =&amp;gt; {&lt;br /&gt;
                    const diff = e.currentTarget.dataset.diff;&lt;br /&gt;
                    bossRender(root, diff);&lt;br /&gt;
                });&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            // Inicia na aba normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45904</id>
		<title>Módulo:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45904"/>
		<updated>2026-04-09T23:47:58Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.loadBossData(bossName)&lt;br /&gt;
    local normalizedName = bossName:gsub(&amp;quot;^%l&amp;quot;, string.upper)&lt;br /&gt;
    local success, bossData = pcall(function()&lt;br /&gt;
        return require(&amp;quot;Módulo:&amp;quot; .. normalizedName .. &amp;quot;/data&amp;quot;)&lt;br /&gt;
    end)&lt;br /&gt;
    return success and bossData or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local bossName = frame.args.boss&lt;br /&gt;
    if not bossName or bossName == &amp;quot;&amp;quot; then return &amp;quot;Erro: Boss não especificado.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local bossData = p.loadBossData(bossName)&lt;br /&gt;
    if not bossData then return &amp;quot;Erro: Dados não encontrados.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local diffs = {&amp;quot;normal&amp;quot;, &amp;quot;elite&amp;quot;, &amp;quot;hard&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    -- Aqui vamos guardar os HTMLs gerados fora do JSON&lt;br /&gt;
    local elementosOcultos = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    for _, diffKey in ipairs(diffs) do&lt;br /&gt;
        local diffData = bossData[diffKey]&lt;br /&gt;
        if diffData and diffData.recompensasPossiveis then&lt;br /&gt;
            local itensStr = table.concat(diffData.recompensasPossiveis, &amp;quot;;&amp;quot;)&lt;br /&gt;
            local wikiText = &amp;quot;{{Reward|t|itens=&amp;quot; .. itensStr .. &amp;quot;;1}}&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
            -- Processa o HTML das imagens e tooltips&lt;br /&gt;
            local htmlRenderizado = frame:preprocess(wikiText)&lt;br /&gt;
            &lt;br /&gt;
            -- O SEGREDO: Em vez de por no JSON, criamos uma div oculta com o HTML pronto!&lt;br /&gt;
            elementosOcultos = elementosOcultos .. '&amp;lt;div class=&amp;quot;boss-html-recompensas&amp;quot; data-diff=&amp;quot;' .. diffKey .. '&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;' .. htmlRenderizado .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Gera o JSON (agora ele está minúsculo e inofensivo, contendo apenas os textos básicos)&lt;br /&gt;
    local jsonData = mw.text.jsonEncode(bossData)&lt;br /&gt;
    &lt;br /&gt;
    -- Escapa aspas para o HTML de forma segura&lt;br /&gt;
    local safeJson = mw.text.encode(jsonData)&lt;br /&gt;
    &lt;br /&gt;
    -- Carrega o Widget&lt;br /&gt;
    local widgetHTML = frame:preprocess(&amp;quot;{{#widget:TesteBossYawnv2}}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    -- Monta a estrutura final: A div principal contém o JSON leve, as divs ocultas e o Widget&lt;br /&gt;
    return '&amp;lt;div class=&amp;quot;boss-component&amp;quot; data-json=&amp;quot;' .. safeJson .. '&amp;quot;&amp;gt;' .. elementosOcultos .. widgetHTML .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45903</id>
		<title>Widget:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45903"/>
		<updated>2026-04-09T23:45:06Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class=&amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 class=&amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, m =&amp;gt; ({ '&amp;amp;': '&amp;amp;amp;', '&amp;lt;': '&amp;amp;lt;', '&amp;gt;': '&amp;amp;gt;' }[m]));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function bossRender(root, diff) {&lt;br /&gt;
        try {&lt;br /&gt;
            // 1. DESCODIFICA o JSON seguro que veio do Lua&lt;br /&gt;
            const rawJson = decodeURIComponent(root.dataset.json);&lt;br /&gt;
            &lt;br /&gt;
            // 2. Transforma de volta em um Objeto&lt;br /&gt;
            const data = JSON.parse(rawJson);&lt;br /&gt;
            const d = data[diff];&lt;br /&gt;
            const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            if (!content || !d) return;&lt;br /&gt;
&lt;br /&gt;
            const titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;);&lt;br /&gt;
            if (data.nome &amp;amp;&amp;amp; titulo) titulo.textContent = data.nome;&lt;br /&gt;
&lt;br /&gt;
            let html = `&amp;lt;div class=&amp;quot;boss-content-grid&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Requisitos&lt;br /&gt;
            html += `&amp;lt;div class=&amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
            (d.requisitos || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
            if (!(d.requisitos || []).length) html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Grid recompensas&lt;br /&gt;
            html += `&amp;lt;div class=&amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Garantidas&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
            (d.recompensas || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
            if (!(d.recompensas || []).length) html += `&amp;lt;li&amp;gt;Nenhuma recompensa garantida&amp;lt;/li&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
            // Possíveis (Inserido direto, sem dar escape, porque queremos o HTML da Wiki)&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            if (d.recompensasRenderizadas) {&lt;br /&gt;
                html += d.recompensasRenderizadas;&lt;br /&gt;
            } else {&lt;br /&gt;
                html += `&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            html += `&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
            content.innerHTML = html;&lt;br /&gt;
&lt;br /&gt;
            // Atualiza o CSS do botão clicado&lt;br /&gt;
            root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.classList.toggle('active', btn.dataset.diff === diff);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
        } catch (error) {&lt;br /&gt;
            console.error(&amp;quot;Erro ao processar as recompensas do Boss:&amp;quot;, error);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.addEventListener('click', (e) =&amp;gt; {&lt;br /&gt;
                    const diff = e.currentTarget.dataset.diff;&lt;br /&gt;
                    bossRender(root, diff);&lt;br /&gt;
                });&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            // Carrega a aba 'normal' assim que o componente entra na tela&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45902</id>
		<title>Módulo:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45902"/>
		<updated>2026-04-09T23:44:33Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.loadBossData(bossName)&lt;br /&gt;
    local normalizedName = bossName:gsub(&amp;quot;^%l&amp;quot;, string.upper)&lt;br /&gt;
    local success, bossData = pcall(function()&lt;br /&gt;
        return require(&amp;quot;Módulo:&amp;quot; .. normalizedName .. &amp;quot;/data&amp;quot;)&lt;br /&gt;
    end)&lt;br /&gt;
    return success and bossData or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local bossName = frame.args.boss&lt;br /&gt;
    if not bossName or bossName == &amp;quot;&amp;quot; then return &amp;quot;Erro: Boss não especificado.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local bossData = p.loadBossData(bossName)&lt;br /&gt;
    if not bossData then return &amp;quot;Erro: Dados não encontrados.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local diffs = {&amp;quot;normal&amp;quot;, &amp;quot;elite&amp;quot;, &amp;quot;hard&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, diffKey in ipairs(diffs) do&lt;br /&gt;
        local diffData = bossData[diffKey]&lt;br /&gt;
        if diffData and diffData.recompensasPossiveis then&lt;br /&gt;
            local itensStr = table.concat(diffData.recompensasPossiveis, &amp;quot;;&amp;quot;)&lt;br /&gt;
            local wikiText = &amp;quot;{{Reward|t|itens=&amp;quot; .. itensStr .. &amp;quot;;1}}&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
            -- Processa o HTML e remove as quebras de linha que quebram o JSON&lt;br /&gt;
            local html = frame:preprocess(wikiText)&lt;br /&gt;
            html = html:gsub(&amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;):gsub(&amp;quot;\r&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            diffData.recompensasRenderizadas = html&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Gera o JSON em texto&lt;br /&gt;
    local jsonData = mw.text.jsonEncode(bossData)&lt;br /&gt;
    &lt;br /&gt;
    -- A SOLUÇÃO DEFINITIVA: Codifica o JSON inteiro no formato URL.&lt;br /&gt;
    -- Isso transforma todos os caracteres especiais (&amp;quot;, &amp;lt;, &amp;gt;) em códigos seguros (%22, %3C).&lt;br /&gt;
    -- O MediaWiki será incapaz de quebrar a página porque não verá nenhum HTML aqui.&lt;br /&gt;
    local safeJson = mw.uri.encode(jsonData, &amp;quot;PATH&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    local widgetHTML = frame:preprocess(&amp;quot;{{#widget:TesteBossYawnv2}}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    return '&amp;lt;div class=&amp;quot;boss-component&amp;quot; data-json=&amp;quot;' .. safeJson .. '&amp;quot;&amp;gt;' .. widgetHTML .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45901</id>
		<title>Módulo:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45901"/>
		<updated>2026-04-09T23:41:49Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.loadBossData(bossName)&lt;br /&gt;
    local normalizedName = bossName:gsub(&amp;quot;^%l&amp;quot;, string.upper)&lt;br /&gt;
    local success, bossData = pcall(function()&lt;br /&gt;
        return require(&amp;quot;Módulo:&amp;quot; .. normalizedName .. &amp;quot;/data&amp;quot;)&lt;br /&gt;
    end)&lt;br /&gt;
    return success and bossData or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local bossName = frame.args.boss&lt;br /&gt;
    if not bossName or bossName == &amp;quot;&amp;quot; then return &amp;quot;Erro: Boss não especificado.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local bossData = p.loadBossData(bossName)&lt;br /&gt;
    if not bossData then return &amp;quot;Erro: Dados não encontrados.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local diffs = {&amp;quot;normal&amp;quot;, &amp;quot;elite&amp;quot;, &amp;quot;hard&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, diffKey in ipairs(diffs) do&lt;br /&gt;
        local diffData = bossData[diffKey]&lt;br /&gt;
        if diffData and diffData.recompensasPossiveis then&lt;br /&gt;
            local itensStr = table.concat(diffData.recompensasPossiveis, &amp;quot;;&amp;quot;)&lt;br /&gt;
            local wikiText = &amp;quot;{{Reward|t|itens=&amp;quot; .. itensStr .. &amp;quot;;1}}&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
            -- 1. Processa o HTML&lt;br /&gt;
            local html = frame:preprocess(wikiText)&lt;br /&gt;
            &lt;br /&gt;
            -- 2. REMOVE QUEBRAS DE LINHA (Crucial para não quebrar o JSON)&lt;br /&gt;
            -- Isso remove os &amp;quot;enters&amp;quot; que o MediaWiki coloca entre as divs&lt;br /&gt;
            html = html:gsub(&amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;):gsub(&amp;quot;\r&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            diffData.recompensasRenderizadas = html&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Gera o JSON&lt;br /&gt;
	local jsonData = mw.text.jsonEncode(bossData)&lt;br /&gt;
    &lt;br /&gt;
    -- Escapa aspas&lt;br /&gt;
    local safeJson = mw.text.encode(jsonData)&lt;br /&gt;
    &lt;br /&gt;
    -- Preprocessa o Widget separadamente&lt;br /&gt;
    local widgetHTML = frame:preprocess(&amp;quot;{{#widget:TesteBossYawnv2}}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    -- O SEGREDO: Usamos extensionTag para criar um &amp;quot;nowiki&amp;quot; que protege o JSON.&lt;br /&gt;
    -- Isso garante que o MediaWiki ignore o conteúdo do data-json durante o parsing da página.&lt;br /&gt;
    local jsonProtegido = frame:extensionTag('nowiki', safeJson)&lt;br /&gt;
    &lt;br /&gt;
    return '&amp;lt;div class=&amp;quot;boss-component&amp;quot; data-json=&amp;quot;' .. jsonProtegido .. '&amp;quot;&amp;gt;' .. widgetHTML .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45900</id>
		<title>Widget:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45900"/>
		<updated>2026-04-09T23:41:14Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class=&amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 class=&amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, m =&amp;gt; ({&lt;br /&gt;
            '&amp;amp;': '&amp;amp;amp;',&lt;br /&gt;
            '&amp;lt;': '&amp;amp;lt;',&lt;br /&gt;
            '&amp;gt;': '&amp;amp;gt;'&lt;br /&gt;
        }[m]));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Note: Removi o &amp;quot;async&amp;quot; pois agora tudo é síncrono e instantâneo&lt;br /&gt;
    function bossRender(root, diff) {&lt;br /&gt;
    // Remove os marcadores de nowiki que o MediaWiki possa ter inserido&lt;br /&gt;
        let rawData = root.dataset.json.replace(/(\/\* UNIQ\w+ \*\/|UNIQ\w+)/g, &amp;quot;&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
        const data = JSON.parse(rawData);&lt;br /&gt;
        const d = data[diff];&lt;br /&gt;
        const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
        if (!content || !d) return;&lt;br /&gt;
&lt;br /&gt;
        // Atualiza o título apenas se necessário&lt;br /&gt;
        const titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;);&lt;br /&gt;
        if (data.nome &amp;amp;&amp;amp; titulo) titulo.textContent = data.nome;&lt;br /&gt;
&lt;br /&gt;
        let html = `&amp;lt;div class=&amp;quot;boss-content-grid&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Requisitos&lt;br /&gt;
        html += `&amp;lt;div class=&amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        (d.requisitos || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        if (!(d.requisitos || []).length) html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Grid recompensas&lt;br /&gt;
        html += `&amp;lt;div class=&amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Recompensas Garantidas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        (d.recompensas || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        if (!(d.recompensas || []).length) html += `&amp;lt;li&amp;gt;Nenhuma recompensa garantida&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Possíveis Recompensas (O HTML já vem pronto do Módulo Lua)&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
        if (d.recompensasRenderizadas) {&lt;br /&gt;
            // Inserimos o HTML direto (imagens e tooltips processados pela Wiki)&lt;br /&gt;
            html += d.recompensasRenderizadas;&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        content.innerHTML = html;&lt;br /&gt;
&lt;br /&gt;
        // Atualiza botão ativo&lt;br /&gt;
        root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
            btn.classList.toggle('active', btn.dataset.diff === diff);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        console.log(&amp;quot;Dados do Boss carregados:&amp;quot;, JSON.parse(root.dataset.json));&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.addEventListener('click', (e) =&amp;gt; {&lt;br /&gt;
                    const diff = e.currentTarget.dataset.diff;&lt;br /&gt;
                    bossRender(root, diff);&lt;br /&gt;
                });&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            // Renderização inicial&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Inicialização padrão do MediaWiki&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45899</id>
		<title>Módulo:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45899"/>
		<updated>2026-04-09T23:40:02Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.loadBossData(bossName)&lt;br /&gt;
    local normalizedName = bossName:gsub(&amp;quot;^%l&amp;quot;, string.upper)&lt;br /&gt;
    local success, bossData = pcall(function()&lt;br /&gt;
        return require(&amp;quot;Módulo:&amp;quot; .. normalizedName .. &amp;quot;/data&amp;quot;)&lt;br /&gt;
    end)&lt;br /&gt;
    return success and bossData or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local bossName = frame.args.boss&lt;br /&gt;
    if not bossName or bossName == &amp;quot;&amp;quot; then return &amp;quot;Erro: Boss não especificado.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local bossData = p.loadBossData(bossName)&lt;br /&gt;
    if not bossData then return &amp;quot;Erro: Dados não encontrados.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local diffs = {&amp;quot;normal&amp;quot;, &amp;quot;elite&amp;quot;, &amp;quot;hard&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, diffKey in ipairs(diffs) do&lt;br /&gt;
        local diffData = bossData[diffKey]&lt;br /&gt;
        if diffData and diffData.recompensasPossiveis then&lt;br /&gt;
            local itensStr = table.concat(diffData.recompensasPossiveis, &amp;quot;;&amp;quot;)&lt;br /&gt;
            local wikiText = &amp;quot;{{Reward|t|itens=&amp;quot; .. itensStr .. &amp;quot;;1}}&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
            -- 1. Processa o HTML&lt;br /&gt;
            local html = frame:preprocess(wikiText)&lt;br /&gt;
            &lt;br /&gt;
            -- 2. REMOVE QUEBRAS DE LINHA (Crucial para não quebrar o JSON)&lt;br /&gt;
            -- Isso remove os &amp;quot;enters&amp;quot; que o MediaWiki coloca entre as divs&lt;br /&gt;
            html = html:gsub(&amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;):gsub(&amp;quot;\r&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            diffData.recompensasRenderizadas = html&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Gera o JSON&lt;br /&gt;
	local jsonData = mw.text.jsonEncode(bossData)&lt;br /&gt;
    &lt;br /&gt;
    -- Escapa aspas&lt;br /&gt;
    local safeJson = mw.text.encode(jsonData)&lt;br /&gt;
    &lt;br /&gt;
    -- Preprocessa o Widget separadamente&lt;br /&gt;
    local widgetHTML = frame:preprocess(&amp;quot;{{#widget:TesteBossYawnv3}}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    -- O SEGREDO: Usamos extensionTag para criar um &amp;quot;nowiki&amp;quot; que protege o JSON.&lt;br /&gt;
    -- Isso garante que o MediaWiki ignore o conteúdo do data-json durante o parsing da página.&lt;br /&gt;
    local jsonProtegido = frame:extensionTag('nowiki', safeJson)&lt;br /&gt;
    &lt;br /&gt;
    return '&amp;lt;div class=&amp;quot;boss-component&amp;quot; data-json=&amp;quot;' .. jsonProtegido .. '&amp;quot;&amp;gt;' .. widgetHTML .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45898</id>
		<title>Módulo:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45898"/>
		<updated>2026-04-09T23:37:53Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.loadBossData(bossName)&lt;br /&gt;
    local normalizedName = bossName:gsub(&amp;quot;^%l&amp;quot;, string.upper)&lt;br /&gt;
    local success, bossData = pcall(function()&lt;br /&gt;
        return require(&amp;quot;Módulo:&amp;quot; .. normalizedName .. &amp;quot;/data&amp;quot;)&lt;br /&gt;
    end)&lt;br /&gt;
    return success and bossData or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local bossName = frame.args.boss&lt;br /&gt;
    if not bossName or bossName == &amp;quot;&amp;quot; then return &amp;quot;Erro: Boss não especificado.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local bossData = p.loadBossData(bossName)&lt;br /&gt;
    if not bossData then return &amp;quot;Erro: Dados não encontrados.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local diffs = {&amp;quot;normal&amp;quot;, &amp;quot;elite&amp;quot;, &amp;quot;hard&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, diffKey in ipairs(diffs) do&lt;br /&gt;
        local diffData = bossData[diffKey]&lt;br /&gt;
        if diffData and diffData.recompensasPossiveis then&lt;br /&gt;
            local itensStr = table.concat(diffData.recompensasPossiveis, &amp;quot;;&amp;quot;)&lt;br /&gt;
            local wikiText = &amp;quot;{{Reward|t|itens=&amp;quot; .. itensStr .. &amp;quot;;1}}&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
            -- 1. Processa o HTML&lt;br /&gt;
            local html = frame:preprocess(wikiText)&lt;br /&gt;
            &lt;br /&gt;
            -- 2. REMOVE QUEBRAS DE LINHA (Crucial para não quebrar o JSON)&lt;br /&gt;
            -- Isso remove os &amp;quot;enters&amp;quot; que o MediaWiki coloca entre as divs&lt;br /&gt;
            html = html:gsub(&amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;):gsub(&amp;quot;\r&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            diffData.recompensasRenderizadas = html&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Gera o JSON&lt;br /&gt;
    local jsonData = mw.text.jsonEncode(bossData)&lt;br /&gt;
    &lt;br /&gt;
    -- Escapa para o HTML (transforma &amp;quot; em &amp;amp;quot;)&lt;br /&gt;
    local safeJson = mw.text.encode(jsonData)&lt;br /&gt;
    &lt;br /&gt;
    -- Preprocessa o Widget separadamente para evitar conflitos de parser&lt;br /&gt;
    local widgetHTML = frame:preprocess(&amp;quot;{{#widget:TesteBossYawnv3}}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    -- Retorno manual concatenado (evita que o parser tente renderizar o interior do JSON)&lt;br /&gt;
    return '&amp;lt;div class=&amp;quot;boss-component&amp;quot; data-json=&amp;quot;' .. safeJson .. '&amp;quot;&amp;gt;' .. widgetHTML .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45897</id>
		<title>Widget:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45897"/>
		<updated>2026-04-09T23:36:25Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class=&amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 class=&amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, m =&amp;gt; ({&lt;br /&gt;
            '&amp;amp;': '&amp;amp;amp;',&lt;br /&gt;
            '&amp;lt;': '&amp;amp;lt;',&lt;br /&gt;
            '&amp;gt;': '&amp;amp;gt;'&lt;br /&gt;
        }[m]));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Note: Removi o &amp;quot;async&amp;quot; pois agora tudo é síncrono e instantâneo&lt;br /&gt;
    function bossRender(root, diff) {&lt;br /&gt;
        const data = JSON.parse(root.dataset.json);&lt;br /&gt;
        const d = data[diff];&lt;br /&gt;
        const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
        if (!content || !d) return;&lt;br /&gt;
&lt;br /&gt;
        // Atualiza o título apenas se necessário&lt;br /&gt;
        const titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;);&lt;br /&gt;
        if (data.nome &amp;amp;&amp;amp; titulo) titulo.textContent = data.nome;&lt;br /&gt;
&lt;br /&gt;
        let html = `&amp;lt;div class=&amp;quot;boss-content-grid&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Requisitos&lt;br /&gt;
        html += `&amp;lt;div class=&amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        (d.requisitos || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        if (!(d.requisitos || []).length) html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Grid recompensas&lt;br /&gt;
        html += `&amp;lt;div class=&amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Recompensas Garantidas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        (d.recompensas || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        if (!(d.recompensas || []).length) html += `&amp;lt;li&amp;gt;Nenhuma recompensa garantida&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Possíveis Recompensas (O HTML já vem pronto do Módulo Lua)&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
        if (d.recompensasRenderizadas) {&lt;br /&gt;
            // Inserimos o HTML direto (imagens e tooltips processados pela Wiki)&lt;br /&gt;
            html += d.recompensasRenderizadas;&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        content.innerHTML = html;&lt;br /&gt;
&lt;br /&gt;
        // Atualiza botão ativo&lt;br /&gt;
        root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
            btn.classList.toggle('active', btn.dataset.diff === diff);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        console.log(&amp;quot;Dados do Boss carregados:&amp;quot;, JSON.parse(root.dataset.json));&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.addEventListener('click', (e) =&amp;gt; {&lt;br /&gt;
                    const diff = e.currentTarget.dataset.diff;&lt;br /&gt;
                    bossRender(root, diff);&lt;br /&gt;
                });&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            // Renderização inicial&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Inicialização padrão do MediaWiki&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45896</id>
		<title>Módulo:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45896"/>
		<updated>2026-04-09T23:33:58Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.loadBossData(bossName)&lt;br /&gt;
    -- Garante que a primeira letra seja maiúscula para o require&lt;br /&gt;
    local normalizedName = bossName:gsub(&amp;quot;^%l&amp;quot;, string.upper)&lt;br /&gt;
    &lt;br /&gt;
    local success, bossData = pcall(function()&lt;br /&gt;
        return require(&amp;quot;Módulo:&amp;quot; .. normalizedName .. &amp;quot;/data&amp;quot;)&lt;br /&gt;
    end)&lt;br /&gt;
    &lt;br /&gt;
    if not success then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return bossData&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local bossName = frame.args.boss&lt;br /&gt;
    if not bossName or bossName == &amp;quot;&amp;quot; then &lt;br /&gt;
        return &amp;quot;&amp;lt;b&amp;gt;Erro:&amp;lt;/b&amp;gt; Parâmetro 'boss' não especificado.&amp;quot; &lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local bossData = p.loadBossData(bossName)&lt;br /&gt;
    if not bossData then&lt;br /&gt;
        return &amp;quot;&amp;lt;b&amp;gt;Erro:&amp;lt;/b&amp;gt; Módulo de dados para '&amp;quot; .. bossName .. &amp;quot;' não encontrado.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Lista das chaves de dificuldade para iterar&lt;br /&gt;
    local diffs = {&amp;quot;normal&amp;quot;, &amp;quot;elite&amp;quot;, &amp;quot;hard&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, diffKey in ipairs(diffs) do&lt;br /&gt;
        local diffData = bossData[diffKey]&lt;br /&gt;
        &lt;br /&gt;
        if diffData and diffData.recompensasPossiveis then&lt;br /&gt;
            -- 1. Transforma a lista de itens em string separada por ponto e vírgula&lt;br /&gt;
            local itensStr = table.concat(diffData.recompensasPossiveis, &amp;quot;;&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            -- 2. Monta o Wikitexto da predefinição Reward&lt;br /&gt;
            local wikiText = &amp;quot;{{Reward|t|itens=&amp;quot; .. itensStr .. &amp;quot;;1}}&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
            -- 3. PROCESSAMENTO CRUCIAL:&lt;br /&gt;
            -- Usamos o frame do módulo para expandir a predefinição em HTML real.&lt;br /&gt;
            -- Adicionamos uma string vazia para garantir que o parser trate como conteúdo de bloco se necessário.&lt;br /&gt;
            diffData.recompensasRenderizadas = frame:preprocess(wikiText)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Transforma a tabela bossData (agora com o HTML das recompensas) em JSON&lt;br /&gt;
    local jsonData = mw.text.jsonEncode(bossData)&lt;br /&gt;
    &lt;br /&gt;
    -- Escapa o JSON para que as aspas internas não fechem o atributo data-json=&amp;quot;&lt;br /&gt;
    local safeJson = mw.text.encode(jsonData)&lt;br /&gt;
    &lt;br /&gt;
    -- Processa o Widget separadamente&lt;br /&gt;
    local widgetHTML = frame:preprocess(&amp;quot;{{#widget:TesteBossYawnv3}}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    -- RETORNO FINAL:&lt;br /&gt;
    -- Montamos a string manualmente CONCATENANDO.&lt;br /&gt;
    -- IMPORTANTE: Não use frame:preprocess() aqui no retorno final, &lt;br /&gt;
    -- caso contrário o Parser da Wiki tentará ler o que está dentro do data-json e causará o erro da imagem.&lt;br /&gt;
    return '&amp;lt;div class=&amp;quot;boss-component&amp;quot; data-json=&amp;quot;' .. safeJson .. '&amp;quot;&amp;gt;' .. widgetHTML .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45895</id>
		<title>Widget:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45895"/>
		<updated>2026-04-09T23:31:37Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class=&amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 class=&amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, m =&amp;gt; ({&lt;br /&gt;
            '&amp;amp;': '&amp;amp;amp;',&lt;br /&gt;
            '&amp;lt;': '&amp;amp;lt;',&lt;br /&gt;
            '&amp;gt;': '&amp;amp;gt;'&lt;br /&gt;
        }[m]));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Note: Removi o &amp;quot;async&amp;quot; pois agora tudo é síncrono e instantâneo&lt;br /&gt;
    function bossRender(root, diff) {&lt;br /&gt;
        const data = JSON.parse(root.dataset.json);&lt;br /&gt;
        const d = data[diff];&lt;br /&gt;
        const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
        if (!content || !d) return;&lt;br /&gt;
&lt;br /&gt;
        // Atualiza o título apenas se necessário&lt;br /&gt;
        const titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;);&lt;br /&gt;
        if (data.nome &amp;amp;&amp;amp; titulo) titulo.textContent = data.nome;&lt;br /&gt;
&lt;br /&gt;
        let html = `&amp;lt;div class=&amp;quot;boss-content-grid&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Requisitos&lt;br /&gt;
        html += `&amp;lt;div class=&amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        (d.requisitos || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        if (!(d.requisitos || []).length) html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Grid recompensas&lt;br /&gt;
        html += `&amp;lt;div class=&amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Recompensas Garantidas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        (d.recompensas || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        if (!(d.recompensas || []).length) html += `&amp;lt;li&amp;gt;Nenhuma recompensa garantida&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Possíveis Recompensas (O HTML já vem pronto do Módulo Lua)&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
        if (d.recompensasRenderizadas) {&lt;br /&gt;
            // Inserimos o HTML direto (imagens e tooltips processados pela Wiki)&lt;br /&gt;
            html += d.recompensasRenderizadas;&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        content.innerHTML = html;&lt;br /&gt;
&lt;br /&gt;
        // Atualiza botão ativo&lt;br /&gt;
        root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
            btn.classList.toggle('active', btn.dataset.diff === diff);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.addEventListener('click', (e) =&amp;gt; {&lt;br /&gt;
                    const diff = e.currentTarget.dataset.diff;&lt;br /&gt;
                    bossRender(root, diff);&lt;br /&gt;
                });&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            // Renderização inicial&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Inicialização padrão do MediaWiki&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio:Yawn&amp;diff=45894</id>
		<title>Usuário:Yawn</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio:Yawn&amp;diff=45894"/>
		<updated>2026-04-09T23:29:23Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:TesteBossYawnv2 | render | boss=barbarossa }}&lt;br /&gt;
{{Reward|t|itens=Kit de Reparo 2.0;1}}&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45893</id>
		<title>Widget:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45893"/>
		<updated>2026-04-09T23:29:00Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class = &amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 class = &amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, function(m) {&lt;br /&gt;
            if (m === '&amp;amp;') return '&amp;amp;amp;';&lt;br /&gt;
            if (m === '&amp;lt;') return '&amp;amp;lt;';&lt;br /&gt;
            if (m === '&amp;gt;') return '&amp;amp;gt;';&lt;br /&gt;
            return m;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    async function bossRender(root, diff) {&lt;br /&gt;
        const data = JSON.parse(root.dataset.json);&lt;br /&gt;
    const d = data[diff];&lt;br /&gt;
    const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
    if (!content) return;&lt;br /&gt;
&lt;br /&gt;
    let html = `&amp;lt;div class=&amp;quot;boss-content-grid&amp;quot;&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
    // Requisitos&lt;br /&gt;
    html += `&amp;lt;div class=&amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
    (d.requisitos || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
    html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
    // Grid Recompensas&lt;br /&gt;
    html += `&amp;lt;div class=&amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`;&lt;br /&gt;
    &lt;br /&gt;
    // Garantidas&lt;br /&gt;
    html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
    (d.recompensas || []).forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
    html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
    // Possíveis (HTML já processado pelo Lua)&lt;br /&gt;
    html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
    if (d.recompensasRenderizadas) {&lt;br /&gt;
        // IMPORTANTE: Aqui NÃO usamos escapeHtml, pois queremos renderizar o HTML da Wiki&lt;br /&gt;
        html += d.recompensasRenderizadas;&lt;br /&gt;
    } else {&lt;br /&gt;
        html += `&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    html += `&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
    content.innerHTML = html;&lt;br /&gt;
        &lt;br /&gt;
        // Atualiza botão ativo&lt;br /&gt;
        root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
            const diffBtn = btn.dataset.diff;&lt;br /&gt;
            if (diffBtn === diff) {&lt;br /&gt;
                btn.classList.add('active');&lt;br /&gt;
            } else {&lt;br /&gt;
                btn.classList.remove('active');&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
            &lt;br /&gt;
            // Adiciona event listeners nos botões&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.removeEventListener('click', handleClick);&lt;br /&gt;
                btn.addEventListener('click', handleClick);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            // Renderiza dificuldade normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function handleClick(e) {&lt;br /&gt;
        const btn = e.currentTarget;&lt;br /&gt;
        const root = btn.closest('.boss-component');&lt;br /&gt;
        const diff = btn.dataset.diff;&lt;br /&gt;
        if (root &amp;amp;&amp;amp; diff) {&lt;br /&gt;
            bossRender(root, diff);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    async function processReward(itemString) {&lt;br /&gt;
    const wikiText = `{{Reward|itens=${itemString};1}}`;&lt;br /&gt;
    const apiUrl = `https://wiki.gla.com.br/api.php?action=parse&amp;amp;text=${encodeURIComponent(wikiText)}&amp;amp;format=json&amp;amp;origin=*`;&lt;br /&gt;
    //expandtemplates&lt;br /&gt;
    try {&lt;br /&gt;
        const response = await fetch(apiUrl);&lt;br /&gt;
        const data = await response.json();&lt;br /&gt;
        return data.parse.text['*'].replace(/&amp;lt;p[^&amp;gt;]*&amp;gt;[\s\S]*?&amp;lt;\/p&amp;gt;/g, '');&lt;br /&gt;
    } catch(e) {&lt;br /&gt;
        console.error('Erro ao processar reward:', e);&lt;br /&gt;
        return '';&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45891</id>
		<title>Módulo:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawnv2&amp;diff=45891"/>
		<updated>2026-04-09T23:27:11Z</updated>

		<summary type="html">&lt;p&gt;Yawn: Criou página com 'local p = {}  function p.loadBossData(bossName) 	local normalizedName = bossName:gsub(&amp;quot;^%l&amp;quot;, string.upper) 	     local success, bossData = pcall(function()         return requ...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.loadBossData(bossName)&lt;br /&gt;
	local normalizedName = bossName:gsub(&amp;quot;^%l&amp;quot;, string.upper)&lt;br /&gt;
	&lt;br /&gt;
    local success, bossData = pcall(function()&lt;br /&gt;
        return require(&amp;quot;Módulo:&amp;quot;..normalizedName..&amp;quot;/data&amp;quot;)&lt;br /&gt;
    end)&lt;br /&gt;
    if not success then&lt;br /&gt;
        return normalizedName .. &amp;quot; nao encontrado&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return bossData&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local bossName = frame.args.boss&lt;br /&gt;
    if not bossName or bossName == &amp;quot;&amp;quot; then return &amp;quot;Erro: Boss não especificado.&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local bossData = p.loadBossData(bossName)&lt;br /&gt;
    &lt;br /&gt;
    -- Lista das chaves de dificuldade para iterar&lt;br /&gt;
    local diffs = {&amp;quot;normal&amp;quot;, &amp;quot;elite&amp;quot;, &amp;quot;hard&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, diffKey in ipairs(diffs) do&lt;br /&gt;
        local diffData = bossData[diffKey]&lt;br /&gt;
        &lt;br /&gt;
        if diffData and diffData.recompensasPossiveis then&lt;br /&gt;
            -- 1. Transforma {&amp;quot;Item A&amp;quot;, &amp;quot;Item B&amp;quot;} em &amp;quot;Item A;Item B&amp;quot;&lt;br /&gt;
            local itensStr = table.concat(diffData.recompensasPossiveis, &amp;quot;;&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            -- 2. Monta o Wikitexto para esta dificuldade específica&lt;br /&gt;
            local wikiText = &amp;quot;{{Reward|t|itens=&amp;quot; .. itensStr .. &amp;quot;;1}}&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
            -- 3. Processa e guarda o HTML final (com imagens e tooltips da Wiki)&lt;br /&gt;
            -- Usamos frame:getParent() caso o preprocess precise do contexto da página&lt;br /&gt;
            diffData.recompensasRenderizadas = frame:preprocess(wikiText)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Agora o bossData contém o HTML pronto em cada dificuldade&lt;br /&gt;
    local jsonData = mw.text.jsonEncode(bossData)&lt;br /&gt;
    local safeJson = mw.text.encode(jsonData)&lt;br /&gt;
    &lt;br /&gt;
    -- Carrega o widget&lt;br /&gt;
    local widget = frame:preprocess(&amp;quot;{{#widget:TesteBossYawnv3}}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    return '&amp;lt;div class=&amp;quot;boss-component&amp;quot; data-json=&amp;quot;' .. safeJson .. '&amp;quot;&amp;gt;' .. widget .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45890</id>
		<title>Widget:TesteBossYawnv2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv2&amp;diff=45890"/>
		<updated>2026-04-09T23:26:10Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class = &amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 class = &amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, function(m) {&lt;br /&gt;
            if (m === '&amp;amp;') return '&amp;amp;amp;';&lt;br /&gt;
            if (m === '&amp;lt;') return '&amp;amp;lt;';&lt;br /&gt;
            if (m === '&amp;gt;') return '&amp;amp;gt;';&lt;br /&gt;
            return m;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    async function bossRender(root, diff) {&lt;br /&gt;
        const data = JSON.parse(root.dataset.json);&lt;br /&gt;
        const d = data[diff];&lt;br /&gt;
        const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
        console.log(d.recompensasHTML);&lt;br /&gt;
&lt;br /&gt;
        if (!content) return;&lt;br /&gt;
        &lt;br /&gt;
        let html = '';&lt;br /&gt;
&lt;br /&gt;
        // Nome do boss&lt;br /&gt;
        if (data.nome) {&lt;br /&gt;
            titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;)&lt;br /&gt;
            titulo.innerHTML = escapeHtml(data.nome);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Introdução&lt;br /&gt;
        //if (data.introducao) {&lt;br /&gt;
        //    html += `&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;${escapeHtml(data.introducao)}&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        //}&lt;br /&gt;
&lt;br /&gt;
        /* Localização&lt;br /&gt;
        if (data.localizacao) {&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Localização&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;p&amp;gt;${escapeHtml(data.localizacao.descricao)}&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        }*/&lt;br /&gt;
        &lt;br /&gt;
        //Grid de requisitos e recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Requisitos&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.requisitos &amp;amp;&amp;amp; d.requisitos.length) {&lt;br /&gt;
            d.requisitos.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
        &lt;br /&gt;
        //Grid recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Recompensas Garantidas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensas &amp;amp;&amp;amp; d.recompensas.length) {&lt;br /&gt;
            d.recompensas.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa garantida&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Possíveis Recompensas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensasPossiveis &amp;amp;&amp;amp; d.recompensasPossiveis.length) {&lt;br /&gt;
            html += await processReward(d.recompensasPossiveis);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
  &lt;br /&gt;
        //Fim da grid&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        content.innerHTML = html;&lt;br /&gt;
        &lt;br /&gt;
        // Atualiza botão ativo&lt;br /&gt;
        root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
            const diffBtn = btn.dataset.diff;&lt;br /&gt;
            if (diffBtn === diff) {&lt;br /&gt;
                btn.classList.add('active');&lt;br /&gt;
            } else {&lt;br /&gt;
                btn.classList.remove('active');&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
            &lt;br /&gt;
            // Adiciona event listeners nos botões&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.removeEventListener('click', handleClick);&lt;br /&gt;
                btn.addEventListener('click', handleClick);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            // Renderiza dificuldade normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function handleClick(e) {&lt;br /&gt;
        const btn = e.currentTarget;&lt;br /&gt;
        const root = btn.closest('.boss-component');&lt;br /&gt;
        const diff = btn.dataset.diff;&lt;br /&gt;
        if (root &amp;amp;&amp;amp; diff) {&lt;br /&gt;
            bossRender(root, diff);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    async function processReward(itemString) {&lt;br /&gt;
    const wikiText = `{{Reward|itens=${itemString};1}}`;&lt;br /&gt;
    const apiUrl = `https://wiki.gla.com.br/api.php?action=parse&amp;amp;text=${encodeURIComponent(wikiText)}&amp;amp;format=json&amp;amp;origin=*`;&lt;br /&gt;
    //expandtemplates&lt;br /&gt;
    try {&lt;br /&gt;
        const response = await fetch(apiUrl);&lt;br /&gt;
        const data = await response.json();&lt;br /&gt;
        return data.parse.text['*'].replace(/&amp;lt;p[^&amp;gt;]*&amp;gt;[\s\S]*?&amp;lt;\/p&amp;gt;/g, '');&lt;br /&gt;
    } catch(e) {&lt;br /&gt;
        console.error('Erro ao processar reward:', e);&lt;br /&gt;
        return '';&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawn&amp;diff=45889</id>
		<title>Módulo:TesteBossYawn</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawn&amp;diff=45889"/>
		<updated>2026-04-09T23:11:20Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.loadBossData(bossName)&lt;br /&gt;
	local normalizedName = bossName:gsub(&amp;quot;^%l&amp;quot;, string.upper)&lt;br /&gt;
	&lt;br /&gt;
    local success, bossData = pcall(function()&lt;br /&gt;
        return require(&amp;quot;Módulo:&amp;quot;..normalizedName..&amp;quot;/data&amp;quot;)&lt;br /&gt;
    end)&lt;br /&gt;
    if not success then&lt;br /&gt;
        return normalizedName .. &amp;quot; nao encontrado&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return bossData&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local bossName = frame.args.boss&lt;br /&gt;
    &lt;br /&gt;
    if not bossName or bossName == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;lt;b&amp;gt;Erro:&amp;lt;/b&amp;gt; Parâmetro 'boss' não especificado.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local bossData = p.loadBossData(bossName)&lt;br /&gt;
    if not bossData then&lt;br /&gt;
        return &amp;quot;&amp;lt;b&amp;gt;Erro:&amp;lt;/b&amp;gt; Boss '&amp;quot; .. bossName .. &amp;quot;' não encontrado.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local skillsWikiText = &amp;quot;{{Reward|t|itens=14;1}}&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    -- Usa o parser completo&lt;br /&gt;
    local skillsHTML = frame:preprocess(skillsWikiText)&lt;br /&gt;
    bossData.recompensasHTML = skillsHTML;&lt;br /&gt;
    &lt;br /&gt;
	local jsonData = mw.text.jsonEncode(bossData)&lt;br /&gt;
	jsonData = mw.text.encode(jsonData)&lt;br /&gt;
    return frame:preprocess([[&lt;br /&gt;
        &amp;lt;div class=&amp;quot;boss-component&amp;quot; data-json=&amp;quot;]] .. jsonData .. [[&amp;quot;&amp;gt;&lt;br /&gt;
            {{#widget:TesteBossYawnv3}}&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    ]])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45888</id>
		<title>Widget:TesteBossYawnv3</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45888"/>
		<updated>2026-04-09T23:00:13Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class = &amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 class = &amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, function(m) {&lt;br /&gt;
            if (m === '&amp;amp;') return '&amp;amp;amp;';&lt;br /&gt;
            if (m === '&amp;lt;') return '&amp;amp;lt;';&lt;br /&gt;
            if (m === '&amp;gt;') return '&amp;amp;gt;';&lt;br /&gt;
            return m;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    async function bossRender(root, diff) {&lt;br /&gt;
        const data = JSON.parse(root.dataset.json);&lt;br /&gt;
        const d = data[diff];&lt;br /&gt;
        const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
        console.log(d.recompensasHTML);&lt;br /&gt;
&lt;br /&gt;
        if (!content) return;&lt;br /&gt;
        &lt;br /&gt;
        let html = '';&lt;br /&gt;
&lt;br /&gt;
        // Nome do boss&lt;br /&gt;
        if (data.nome) {&lt;br /&gt;
            titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;)&lt;br /&gt;
            titulo.innerHTML = escapeHtml(data.nome);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Introdução&lt;br /&gt;
        //if (data.introducao) {&lt;br /&gt;
        //    html += `&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;${escapeHtml(data.introducao)}&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        //}&lt;br /&gt;
&lt;br /&gt;
        /* Localização&lt;br /&gt;
        if (data.localizacao) {&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Localização&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;p&amp;gt;${escapeHtml(data.localizacao.descricao)}&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        }*/&lt;br /&gt;
        &lt;br /&gt;
        //Grid de requisitos e recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Requisitos&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.requisitos &amp;amp;&amp;amp; d.requisitos.length) {&lt;br /&gt;
            d.requisitos.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
        &lt;br /&gt;
        //Grid recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Recompensas Garantidas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensas &amp;amp;&amp;amp; d.recompensas.length) {&lt;br /&gt;
            d.recompensas.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa garantida&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Possíveis Recompensas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensasPossiveis &amp;amp;&amp;amp; d.recompensasPossiveis.length) {&lt;br /&gt;
            html += await processReward(d.recompensasPossiveis);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
  &lt;br /&gt;
        //Fim da grid&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        content.innerHTML = html;&lt;br /&gt;
        &lt;br /&gt;
        // Atualiza botão ativo&lt;br /&gt;
        root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
            const diffBtn = btn.dataset.diff;&lt;br /&gt;
            if (diffBtn === diff) {&lt;br /&gt;
                btn.classList.add('active');&lt;br /&gt;
            } else {&lt;br /&gt;
                btn.classList.remove('active');&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
            &lt;br /&gt;
            // Adiciona event listeners nos botões&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.removeEventListener('click', handleClick);&lt;br /&gt;
                btn.addEventListener('click', handleClick);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            // Renderiza dificuldade normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function handleClick(e) {&lt;br /&gt;
        const btn = e.currentTarget;&lt;br /&gt;
        const root = btn.closest('.boss-component');&lt;br /&gt;
        const diff = btn.dataset.diff;&lt;br /&gt;
        if (root &amp;amp;&amp;amp; diff) {&lt;br /&gt;
            bossRender(root, diff);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    async function processReward(itemString) {&lt;br /&gt;
    const wikiText = `{{Reward|itens=${itemString};1}}`;&lt;br /&gt;
    const apiUrl = `https://wiki.gla.com.br/api.php?action=parse&amp;amp;text=${encodeURIComponent(wikiText)}&amp;amp;format=json&amp;amp;origin=*`;&lt;br /&gt;
    //expandtemplates&lt;br /&gt;
    try {&lt;br /&gt;
        const response = await fetch(apiUrl);&lt;br /&gt;
        const data = await response.json();&lt;br /&gt;
        return data.parse.text['*'].replace(/&amp;lt;p[^&amp;gt;]*&amp;gt;[\s\S]*?&amp;lt;\/p&amp;gt;/g, '');&lt;br /&gt;
    } catch(e) {&lt;br /&gt;
        console.error('Erro ao processar reward:', e);&lt;br /&gt;
        return '';&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45887</id>
		<title>Widget:TesteBossYawnv3</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45887"/>
		<updated>2026-04-09T22:59:14Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class = &amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 class = &amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, function(m) {&lt;br /&gt;
            if (m === '&amp;amp;') return '&amp;amp;amp;';&lt;br /&gt;
            if (m === '&amp;lt;') return '&amp;amp;lt;';&lt;br /&gt;
            if (m === '&amp;gt;') return '&amp;amp;gt;';&lt;br /&gt;
            return m;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    async function bossRender(root, diff) {&lt;br /&gt;
        const data = JSON.parse(root.dataset.json);&lt;br /&gt;
        const d = data[diff];&lt;br /&gt;
        const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
        console.log(d.recompensasHTML);&lt;br /&gt;
&lt;br /&gt;
        if (!content) return;&lt;br /&gt;
        &lt;br /&gt;
        let html = '';&lt;br /&gt;
&lt;br /&gt;
        // Nome do boss&lt;br /&gt;
        if (data.nome) {&lt;br /&gt;
            titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;)&lt;br /&gt;
            titulo.innerHTML = escapeHtml(data.nome);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Introdução&lt;br /&gt;
        //if (data.introducao) {&lt;br /&gt;
        //    html += `&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;${escapeHtml(data.introducao)}&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        //}&lt;br /&gt;
&lt;br /&gt;
        /* Localização&lt;br /&gt;
        if (data.localizacao) {&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Localização&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;p&amp;gt;${escapeHtml(data.localizacao.descricao)}&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        }*/&lt;br /&gt;
        &lt;br /&gt;
        //Grid de requisitos e recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Requisitos&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.requisitos &amp;amp;&amp;amp; d.requisitos.length) {&lt;br /&gt;
            d.requisitos.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
        &lt;br /&gt;
        //Grid recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Recompensas Garantidas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensas &amp;amp;&amp;amp; d.recompensas.length) {&lt;br /&gt;
            d.recompensas.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa garantida&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Possíveis Recompensas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensasPossiveis &amp;amp;&amp;amp; d.recompensasPossiveis.length) {&lt;br /&gt;
            html += await processReward(d.recompensasPossiveis);&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;${d.recompensasPossiveis }&amp;lt;/li&amp;gt;`&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
  &lt;br /&gt;
        //Fim da grid&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        content.innerHTML = html;&lt;br /&gt;
        &lt;br /&gt;
        // Atualiza botão ativo&lt;br /&gt;
        root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
            const diffBtn = btn.dataset.diff;&lt;br /&gt;
            if (diffBtn === diff) {&lt;br /&gt;
                btn.classList.add('active');&lt;br /&gt;
            } else {&lt;br /&gt;
                btn.classList.remove('active');&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
            &lt;br /&gt;
            // Adiciona event listeners nos botões&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.removeEventListener('click', handleClick);&lt;br /&gt;
                btn.addEventListener('click', handleClick);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            // Renderiza dificuldade normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function handleClick(e) {&lt;br /&gt;
        const btn = e.currentTarget;&lt;br /&gt;
        const root = btn.closest('.boss-component');&lt;br /&gt;
        const diff = btn.dataset.diff;&lt;br /&gt;
        if (root &amp;amp;&amp;amp; diff) {&lt;br /&gt;
            bossRender(root, diff);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    async function processReward(itemString) {&lt;br /&gt;
    const wikiText = `{{Reward|itens=${itemString};1}}`;&lt;br /&gt;
    const apiUrl = `https://wiki.gla.com.br/api.php?action=parse&amp;amp;text=${encodeURIComponent(wikiText)}&amp;amp;format=json&amp;amp;origin=*`;&lt;br /&gt;
    //expandtemplates&lt;br /&gt;
    try {&lt;br /&gt;
        const response = await fetch(apiUrl);&lt;br /&gt;
        const data = await response.json();&lt;br /&gt;
        return data.parse.text['*'].replace(/&amp;lt;p[^&amp;gt;]*&amp;gt;[\s\S]*?&amp;lt;\/p&amp;gt;/g, '');&lt;br /&gt;
    } catch(e) {&lt;br /&gt;
        console.error('Erro ao processar reward:', e);&lt;br /&gt;
        return '';&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45886</id>
		<title>Widget:TesteBossYawnv3</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45886"/>
		<updated>2026-04-09T22:57:35Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class = &amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 class = &amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, function(m) {&lt;br /&gt;
            if (m === '&amp;amp;') return '&amp;amp;amp;';&lt;br /&gt;
            if (m === '&amp;lt;') return '&amp;amp;lt;';&lt;br /&gt;
            if (m === '&amp;gt;') return '&amp;amp;gt;';&lt;br /&gt;
            return m;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    async function bossRender(root, diff) {&lt;br /&gt;
        const data = JSON.parse(root.dataset.json);&lt;br /&gt;
        const d = data[diff];&lt;br /&gt;
        const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
        console.log(d.recompensasHTML);&lt;br /&gt;
&lt;br /&gt;
        if (!content) return;&lt;br /&gt;
        &lt;br /&gt;
        let html = '';&lt;br /&gt;
&lt;br /&gt;
        // Nome do boss&lt;br /&gt;
        if (data.nome) {&lt;br /&gt;
            titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;)&lt;br /&gt;
            titulo.innerHTML = escapeHtml(data.nome);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Introdução&lt;br /&gt;
        //if (data.introducao) {&lt;br /&gt;
        //    html += `&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;${escapeHtml(data.introducao)}&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        //}&lt;br /&gt;
&lt;br /&gt;
        /* Localização&lt;br /&gt;
        if (data.localizacao) {&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Localização&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;p&amp;gt;${escapeHtml(data.localizacao.descricao)}&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        }*/&lt;br /&gt;
        &lt;br /&gt;
        //Grid de requisitos e recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Requisitos&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.requisitos &amp;amp;&amp;amp; d.requisitos.length) {&lt;br /&gt;
            d.requisitos.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
        &lt;br /&gt;
        //Grid recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Recompensas Garantidas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensas &amp;amp;&amp;amp; d.recompensas.length) {&lt;br /&gt;
            d.recompensas.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa garantida&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Possíveis Recompensas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensasPossiveis &amp;amp;&amp;amp; d.recompensasPossiveis.length) {&lt;br /&gt;
            html += await processReward(d.recompensasPossiveis);&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;${d.recompensasPossiveis }&amp;lt;/li&amp;gt;`&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
  &lt;br /&gt;
        //Fim da grid&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        content.innerHTML = html;&lt;br /&gt;
        &lt;br /&gt;
        // Atualiza botão ativo&lt;br /&gt;
        root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
            const diffBtn = btn.dataset.diff;&lt;br /&gt;
            if (diffBtn === diff) {&lt;br /&gt;
                btn.classList.add('active');&lt;br /&gt;
            } else {&lt;br /&gt;
                btn.classList.remove('active');&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
            &lt;br /&gt;
            // Adiciona event listeners nos botões&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.removeEventListener('click', handleClick);&lt;br /&gt;
                btn.addEventListener('click', handleClick);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            // Renderiza dificuldade normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function handleClick(e) {&lt;br /&gt;
        const btn = e.currentTarget;&lt;br /&gt;
        const root = btn.closest('.boss-component');&lt;br /&gt;
        const diff = btn.dataset.diff;&lt;br /&gt;
        if (root &amp;amp;&amp;amp; diff) {&lt;br /&gt;
            bossRender(root, diff);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    async function processReward(itemString) {&lt;br /&gt;
    const wikiText = `{{Reward|itens=${itemString};1}}`;&lt;br /&gt;
    const apiUrl = `https://wiki.gla.com.br/api.php?action=parse&amp;amp;text=${encodeURIComponent(wikiText)}&amp;amp;format=json&amp;amp;origin=*`;&lt;br /&gt;
    //expandtemplates&lt;br /&gt;
    try {&lt;br /&gt;
        const response = await fetch(apiUrl);&lt;br /&gt;
        const data = await response.json();&lt;br /&gt;
        return data.parse.text['*'].replace(/&amp;lt;p[^&amp;gt;]*&amp;gt;&amp;lt;\/p&amp;gt;/g, '');;&lt;br /&gt;
    } catch(e) {&lt;br /&gt;
        console.error('Erro ao processar reward:', e);&lt;br /&gt;
        return '';&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawn&amp;diff=45885</id>
		<title>Módulo:TesteBossYawn</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawn&amp;diff=45885"/>
		<updated>2026-04-09T22:52:36Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.loadBossData(bossName)&lt;br /&gt;
	local normalizedName = bossName:gsub(&amp;quot;^%l&amp;quot;, string.upper)&lt;br /&gt;
	&lt;br /&gt;
    local success, bossData = pcall(function()&lt;br /&gt;
        return require(&amp;quot;Módulo:&amp;quot;..normalizedName..&amp;quot;/data&amp;quot;)&lt;br /&gt;
    end)&lt;br /&gt;
    if not success then&lt;br /&gt;
        return normalizedName .. &amp;quot; nao encontrado&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return bossData&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local bossName = frame.args.boss&lt;br /&gt;
    &lt;br /&gt;
    if not bossName or bossName == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;lt;b&amp;gt;Erro:&amp;lt;/b&amp;gt; Parâmetro 'boss' não especificado.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local bossData = p.loadBossData(bossName)&lt;br /&gt;
    if not bossData then&lt;br /&gt;
        return &amp;quot;&amp;lt;b&amp;gt;Erro:&amp;lt;/b&amp;gt; Boss '&amp;quot; .. bossName .. &amp;quot;' não encontrado.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
	local jsonData = mw.text.jsonEncode(bossData)&lt;br /&gt;
	jsonData = mw.text.encode(jsonData)&lt;br /&gt;
    return frame:preprocess([[&lt;br /&gt;
        &amp;lt;div class=&amp;quot;boss-component&amp;quot; data-json=&amp;quot;]] .. jsonData .. [[&amp;quot;&amp;gt;&lt;br /&gt;
            {{#widget:TesteBossYawnv3}}&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    ]])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawn&amp;diff=45884</id>
		<title>Módulo:TesteBossYawn</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawn&amp;diff=45884"/>
		<updated>2026-04-09T22:51:20Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.loadBossData(bossName)&lt;br /&gt;
	local normalizedName = bossName:gsub(&amp;quot;^%l&amp;quot;, string.upper)&lt;br /&gt;
	&lt;br /&gt;
    local success, bossData = pcall(function()&lt;br /&gt;
        return require(&amp;quot;Módulo:&amp;quot;..normalizedName..&amp;quot;/data&amp;quot;)&lt;br /&gt;
    end)&lt;br /&gt;
    if not success then&lt;br /&gt;
        return normalizedName .. &amp;quot; nao encontrado&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return bossData&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local bossName = frame.args.boss&lt;br /&gt;
    &lt;br /&gt;
    if not bossName or bossName == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;lt;b&amp;gt;Erro:&amp;lt;/b&amp;gt; Parâmetro 'boss' não especificado.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local bossData = p.loadBossData(bossName)&lt;br /&gt;
    if not bossData then&lt;br /&gt;
        return &amp;quot;&amp;lt;b&amp;gt;Erro:&amp;lt;/b&amp;gt; Boss '&amp;quot; .. bossName .. &amp;quot;' não encontrado.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local recompensas = &amp;quot;{{Reward|t|itens=14;1}}&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    -- Usa o parser completo&lt;br /&gt;
    local recompensasHTML = frame:parse(recompensas)&lt;br /&gt;
    &lt;br /&gt;
    -- Agora skillsHTML já tem as imagens processadas!&lt;br /&gt;
    bossData.recompensasHTML = recompensasHTML&lt;br /&gt;
    &lt;br /&gt;
	local jsonData = mw.text.jsonEncode(bossData)&lt;br /&gt;
	jsonData = mw.text.encode(jsonData)&lt;br /&gt;
    return frame:preprocess([[&lt;br /&gt;
        &amp;lt;div class=&amp;quot;boss-component&amp;quot; data-json=&amp;quot;]] .. jsonData .. [[&amp;quot;&amp;gt;&lt;br /&gt;
            {{#widget:TesteBossYawnv3}}&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    ]])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45883</id>
		<title>Widget:TesteBossYawnv3</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45883"/>
		<updated>2026-04-09T22:49:29Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class = &amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 class = &amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, function(m) {&lt;br /&gt;
            if (m === '&amp;amp;') return '&amp;amp;amp;';&lt;br /&gt;
            if (m === '&amp;lt;') return '&amp;amp;lt;';&lt;br /&gt;
            if (m === '&amp;gt;') return '&amp;amp;gt;';&lt;br /&gt;
            return m;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    async function bossRender(root, diff) {&lt;br /&gt;
        const data = JSON.parse(root.dataset.json);&lt;br /&gt;
        const d = data[diff];&lt;br /&gt;
        const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
        console.log(d.recompensasHTML);&lt;br /&gt;
&lt;br /&gt;
        if (!content) return;&lt;br /&gt;
        &lt;br /&gt;
        let html = '';&lt;br /&gt;
&lt;br /&gt;
        // Nome do boss&lt;br /&gt;
        if (data.nome) {&lt;br /&gt;
            titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;)&lt;br /&gt;
            titulo.innerHTML = escapeHtml(data.nome);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Introdução&lt;br /&gt;
        //if (data.introducao) {&lt;br /&gt;
        //    html += `&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;${escapeHtml(data.introducao)}&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        //}&lt;br /&gt;
&lt;br /&gt;
        /* Localização&lt;br /&gt;
        if (data.localizacao) {&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Localização&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;p&amp;gt;${escapeHtml(data.localizacao.descricao)}&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        }*/&lt;br /&gt;
        &lt;br /&gt;
        //Grid de requisitos e recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Requisitos&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.requisitos &amp;amp;&amp;amp; d.requisitos.length) {&lt;br /&gt;
            d.requisitos.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
        &lt;br /&gt;
        //Grid recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Recompensas Garantidas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensas &amp;amp;&amp;amp; d.recompensas.length) {&lt;br /&gt;
            d.recompensas.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa garantida&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Possíveis Recompensas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensasPossiveis &amp;amp;&amp;amp; d.recompensasPossiveis.length) {&lt;br /&gt;
            html += await processReward(d.recompensasPossiveis);&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;${d.recompensasPossiveis }&amp;lt;/li&amp;gt;`&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
  &lt;br /&gt;
        //Fim da grid&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        content.innerHTML = html;&lt;br /&gt;
        &lt;br /&gt;
        // Atualiza botão ativo&lt;br /&gt;
        root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
            const diffBtn = btn.dataset.diff;&lt;br /&gt;
            if (diffBtn === diff) {&lt;br /&gt;
                btn.classList.add('active');&lt;br /&gt;
            } else {&lt;br /&gt;
                btn.classList.remove('active');&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
            &lt;br /&gt;
            // Adiciona event listeners nos botões&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.removeEventListener('click', handleClick);&lt;br /&gt;
                btn.addEventListener('click', handleClick);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            // Renderiza dificuldade normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function handleClick(e) {&lt;br /&gt;
        const btn = e.currentTarget;&lt;br /&gt;
        const root = btn.closest('.boss-component');&lt;br /&gt;
        const diff = btn.dataset.diff;&lt;br /&gt;
        if (root &amp;amp;&amp;amp; diff) {&lt;br /&gt;
            bossRender(root, diff);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    async function processReward(itemString) {&lt;br /&gt;
    const wikiText = `{{Reward|itens=${itemString};1}}`;&lt;br /&gt;
    const apiUrl = `https://wiki.gla.com.br/api.php?action=parse&amp;amp;text=${encodeURIComponent(wikiText)}&amp;amp;format=json&amp;amp;origin=*`;&lt;br /&gt;
    //expandtemplates&lt;br /&gt;
    try {&lt;br /&gt;
        const response = await fetch(apiUrl);&lt;br /&gt;
        const data = await response.json();&lt;br /&gt;
        console.log(&amp;quot;HTML BRUTO RETORNADO:&amp;quot;, data.parse.text['*']);&lt;br /&gt;
        return data.parse.text['*'];&lt;br /&gt;
    } catch(e) {&lt;br /&gt;
        console.error('Erro ao processar reward:', e);&lt;br /&gt;
        return '';&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawn&amp;diff=45882</id>
		<title>Módulo:TesteBossYawn</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=M%C3%B3dulo:TesteBossYawn&amp;diff=45882"/>
		<updated>2026-04-09T22:48:47Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.loadBossData(bossName)&lt;br /&gt;
	local normalizedName = bossName:gsub(&amp;quot;^%l&amp;quot;, string.upper)&lt;br /&gt;
	&lt;br /&gt;
    local success, bossData = pcall(function()&lt;br /&gt;
        return require(&amp;quot;Módulo:&amp;quot;..normalizedName..&amp;quot;/data&amp;quot;)&lt;br /&gt;
    end)&lt;br /&gt;
    if not success then&lt;br /&gt;
        return normalizedName .. &amp;quot; nao encontrado&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return bossData&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local bossName = frame.args.boss&lt;br /&gt;
    &lt;br /&gt;
    if not bossName or bossName == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;lt;b&amp;gt;Erro:&amp;lt;/b&amp;gt; Parâmetro 'boss' não especificado.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local bossData = p.loadBossData(bossName)&lt;br /&gt;
    if not bossData then&lt;br /&gt;
        return &amp;quot;&amp;lt;b&amp;gt;Erro:&amp;lt;/b&amp;gt; Boss '&amp;quot; .. bossName .. &amp;quot;' não encontrado.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local recompensas = &amp;quot;{{Reward|t|itens=14;1}}&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    -- Usa o parser completo&lt;br /&gt;
    local recompensasHTML = frame:preprocess(recompensas)&lt;br /&gt;
    &lt;br /&gt;
    -- Agora skillsHTML já tem as imagens processadas!&lt;br /&gt;
    bossData.recompensasHTML = recompensasHTML&lt;br /&gt;
    &lt;br /&gt;
	local jsonData = mw.text.jsonEncode(bossData)&lt;br /&gt;
	jsonData = mw.text.encode(jsonData)&lt;br /&gt;
    return frame:preprocess([[&lt;br /&gt;
        &amp;lt;div class=&amp;quot;boss-component&amp;quot; data-json=&amp;quot;]] .. jsonData .. [[&amp;quot;&amp;gt;&lt;br /&gt;
            {{#widget:TesteBossYawnv3}}&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    ]])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45881</id>
		<title>Widget:TesteBossYawnv3</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45881"/>
		<updated>2026-04-09T22:44:26Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class = &amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 class = &amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, function(m) {&lt;br /&gt;
            if (m === '&amp;amp;') return '&amp;amp;amp;';&lt;br /&gt;
            if (m === '&amp;lt;') return '&amp;amp;lt;';&lt;br /&gt;
            if (m === '&amp;gt;') return '&amp;amp;gt;';&lt;br /&gt;
            return m;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    async function bossRender(root, diff) {&lt;br /&gt;
        const data = JSON.parse(root.dataset.json);&lt;br /&gt;
        const d = data[diff];&lt;br /&gt;
        const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        if (!content) return;&lt;br /&gt;
        &lt;br /&gt;
        let html = '';&lt;br /&gt;
&lt;br /&gt;
        // Nome do boss&lt;br /&gt;
        if (data.nome) {&lt;br /&gt;
            titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;)&lt;br /&gt;
            titulo.innerHTML = escapeHtml(data.nome);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Introdução&lt;br /&gt;
        //if (data.introducao) {&lt;br /&gt;
        //    html += `&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;${escapeHtml(data.introducao)}&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        //}&lt;br /&gt;
&lt;br /&gt;
        /* Localização&lt;br /&gt;
        if (data.localizacao) {&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Localização&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;p&amp;gt;${escapeHtml(data.localizacao.descricao)}&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        }*/&lt;br /&gt;
        &lt;br /&gt;
        //Grid de requisitos e recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Requisitos&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.requisitos &amp;amp;&amp;amp; d.requisitos.length) {&lt;br /&gt;
            d.requisitos.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
        &lt;br /&gt;
        //Grid recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Recompensas Garantidas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensas &amp;amp;&amp;amp; d.recompensas.length) {&lt;br /&gt;
            d.recompensas.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa garantida&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Possíveis Recompensas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensasPossiveis &amp;amp;&amp;amp; d.recompensasPossiveis.length) {&lt;br /&gt;
            html += await processReward(d.recompensasPossiveis);&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;${d.recompensasPossiveis }&amp;lt;/li&amp;gt;`&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
  &lt;br /&gt;
        //Fim da grid&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        content.innerHTML = html;&lt;br /&gt;
        &lt;br /&gt;
        // Atualiza botão ativo&lt;br /&gt;
        root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
            const diffBtn = btn.dataset.diff;&lt;br /&gt;
            if (diffBtn === diff) {&lt;br /&gt;
                btn.classList.add('active');&lt;br /&gt;
            } else {&lt;br /&gt;
                btn.classList.remove('active');&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
            &lt;br /&gt;
            // Adiciona event listeners nos botões&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.removeEventListener('click', handleClick);&lt;br /&gt;
                btn.addEventListener('click', handleClick);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            // Renderiza dificuldade normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function handleClick(e) {&lt;br /&gt;
        const btn = e.currentTarget;&lt;br /&gt;
        const root = btn.closest('.boss-component');&lt;br /&gt;
        const diff = btn.dataset.diff;&lt;br /&gt;
        if (root &amp;amp;&amp;amp; diff) {&lt;br /&gt;
            bossRender(root, diff);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    async function processReward(itemString) {&lt;br /&gt;
    const wikiText = `{{Reward|itens=${itemString};1}}`;&lt;br /&gt;
    const apiUrl = `https://wiki.gla.com.br/api.php?action=parse&amp;amp;text=${encodeURIComponent(wikiText)}&amp;amp;format=json&amp;amp;origin=*`;&lt;br /&gt;
    //expandtemplates&lt;br /&gt;
    try {&lt;br /&gt;
        const response = await fetch(apiUrl);&lt;br /&gt;
        const data = await response.json();&lt;br /&gt;
        console.log(&amp;quot;HTML BRUTO RETORNADO:&amp;quot;, data.parse.text['*']);&lt;br /&gt;
        return data.parse.text['*'];&lt;br /&gt;
    } catch(e) {&lt;br /&gt;
        console.error('Erro ao processar reward:', e);&lt;br /&gt;
        return '';&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45880</id>
		<title>Widget:TesteBossYawnv3</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45880"/>
		<updated>2026-04-09T22:42:38Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class = &amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 class = &amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, function(m) {&lt;br /&gt;
            if (m === '&amp;amp;') return '&amp;amp;amp;';&lt;br /&gt;
            if (m === '&amp;lt;') return '&amp;amp;lt;';&lt;br /&gt;
            if (m === '&amp;gt;') return '&amp;amp;gt;';&lt;br /&gt;
            return m;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    async function bossRender(root, diff) {&lt;br /&gt;
        const data = JSON.parse(root.dataset.json);&lt;br /&gt;
        const d = data[diff];&lt;br /&gt;
        const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        if (!content) return;&lt;br /&gt;
        &lt;br /&gt;
        let html = '';&lt;br /&gt;
&lt;br /&gt;
        // Nome do boss&lt;br /&gt;
        if (data.nome) {&lt;br /&gt;
            titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;)&lt;br /&gt;
            titulo.innerHTML = escapeHtml(data.nome);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Introdução&lt;br /&gt;
        //if (data.introducao) {&lt;br /&gt;
        //    html += `&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;${escapeHtml(data.introducao)}&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        //}&lt;br /&gt;
&lt;br /&gt;
        /* Localização&lt;br /&gt;
        if (data.localizacao) {&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Localização&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;p&amp;gt;${escapeHtml(data.localizacao.descricao)}&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        }*/&lt;br /&gt;
        &lt;br /&gt;
        //Grid de requisitos e recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Requisitos&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.requisitos &amp;amp;&amp;amp; d.requisitos.length) {&lt;br /&gt;
            d.requisitos.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
        &lt;br /&gt;
        //Grid recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Recompensas Garantidas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensas &amp;amp;&amp;amp; d.recompensas.length) {&lt;br /&gt;
            d.recompensas.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa garantida&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Possíveis Recompensas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensasPossiveis &amp;amp;&amp;amp; d.recompensasPossiveis.length) {&lt;br /&gt;
            html += await processReward(d.recompensasPossiveis);&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;${d.recompensasPossiveis }&amp;lt;/li&amp;gt;`&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
  &lt;br /&gt;
        //Fim da grid&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        content.innerHTML = html;&lt;br /&gt;
        &lt;br /&gt;
        // Atualiza botão ativo&lt;br /&gt;
        root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
            const diffBtn = btn.dataset.diff;&lt;br /&gt;
            if (diffBtn === diff) {&lt;br /&gt;
                btn.classList.add('active');&lt;br /&gt;
            } else {&lt;br /&gt;
                btn.classList.remove('active');&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
            &lt;br /&gt;
            // Adiciona event listeners nos botões&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.removeEventListener('click', handleClick);&lt;br /&gt;
                btn.addEventListener('click', handleClick);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            // Renderiza dificuldade normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function handleClick(e) {&lt;br /&gt;
        const btn = e.currentTarget;&lt;br /&gt;
        const root = btn.closest('.boss-component');&lt;br /&gt;
        const diff = btn.dataset.diff;&lt;br /&gt;
        if (root &amp;amp;&amp;amp; diff) {&lt;br /&gt;
            bossRender(root, diff);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    async function processReward(itemString) {&lt;br /&gt;
    const wikiText = `{{Reward|t|itens=${itemString};1}}`;&lt;br /&gt;
    const apiUrl = `https://wiki.gla.com.br/api.php?action=parse&amp;amp;text=${encodeURIComponent(wikiText)}&amp;amp;format=json&amp;amp;origin=*`;&lt;br /&gt;
    //expandtemplates&lt;br /&gt;
    try {&lt;br /&gt;
        const response = await fetch(apiUrl);&lt;br /&gt;
        const data = await response.json();&lt;br /&gt;
        console.log(&amp;quot;HTML BRUTO RETORNADO:&amp;quot;, data.parse.text['*']);&lt;br /&gt;
        return data.parse.text['*'];&lt;br /&gt;
    } catch(e) {&lt;br /&gt;
        console.error('Erro ao processar reward:', e);&lt;br /&gt;
        return '';&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45879</id>
		<title>Widget:TesteBossYawnv3</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45879"/>
		<updated>2026-04-09T22:42:16Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class = &amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 class = &amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, function(m) {&lt;br /&gt;
            if (m === '&amp;amp;') return '&amp;amp;amp;';&lt;br /&gt;
            if (m === '&amp;lt;') return '&amp;amp;lt;';&lt;br /&gt;
            if (m === '&amp;gt;') return '&amp;amp;gt;';&lt;br /&gt;
            return m;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    async function bossRender(root, diff) {&lt;br /&gt;
        const data = JSON.parse(root.dataset.json);&lt;br /&gt;
        const d = data[diff];&lt;br /&gt;
        const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        if (!content) return;&lt;br /&gt;
        &lt;br /&gt;
        let html = '';&lt;br /&gt;
&lt;br /&gt;
        // Nome do boss&lt;br /&gt;
        if (data.nome) {&lt;br /&gt;
            titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;)&lt;br /&gt;
            titulo.innerHTML = escapeHtml(data.nome);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Introdução&lt;br /&gt;
        //if (data.introducao) {&lt;br /&gt;
        //    html += `&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;${escapeHtml(data.introducao)}&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        //}&lt;br /&gt;
&lt;br /&gt;
        /* Localização&lt;br /&gt;
        if (data.localizacao) {&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Localização&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;p&amp;gt;${escapeHtml(data.localizacao.descricao)}&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        }*/&lt;br /&gt;
        &lt;br /&gt;
        //Grid de requisitos e recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Requisitos&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.requisitos &amp;amp;&amp;amp; d.requisitos.length) {&lt;br /&gt;
            d.requisitos.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
        &lt;br /&gt;
        //Grid recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Recompensas Garantidas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensas &amp;amp;&amp;amp; d.recompensas.length) {&lt;br /&gt;
            d.recompensas.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa garantida&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Possíveis Recompensas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensasPossiveis &amp;amp;&amp;amp; d.recompensasPossiveis.length) {&lt;br /&gt;
            html += await processReward(d.recompensasPossiveis);&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;${d.recompensasPossiveis }&amp;lt;/li&amp;gt;`&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
  &lt;br /&gt;
        //Fim da grid&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        content.innerHTML = html;&lt;br /&gt;
        &lt;br /&gt;
        // Atualiza botão ativo&lt;br /&gt;
        root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
            const diffBtn = btn.dataset.diff;&lt;br /&gt;
            if (diffBtn === diff) {&lt;br /&gt;
                btn.classList.add('active');&lt;br /&gt;
            } else {&lt;br /&gt;
                btn.classList.remove('active');&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
            &lt;br /&gt;
            // Adiciona event listeners nos botões&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.removeEventListener('click', handleClick);&lt;br /&gt;
                btn.addEventListener('click', handleClick);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            // Renderiza dificuldade normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function handleClick(e) {&lt;br /&gt;
        const btn = e.currentTarget;&lt;br /&gt;
        const root = btn.closest('.boss-component');&lt;br /&gt;
        const diff = btn.dataset.diff;&lt;br /&gt;
        if (root &amp;amp;&amp;amp; diff) {&lt;br /&gt;
            bossRender(root, diff);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    async function processReward(itemString) {&lt;br /&gt;
    const wikiText = `{{Reward|t|itens=${itemString};1}}`;&lt;br /&gt;
    const apiUrl = `https://wiki.gla.com.br/api.php?action=parse&amp;amp;text=${encodeURIComponent(wikiText)}&amp;amp;format=json&amp;amp;origin=*`;&lt;br /&gt;
    //expandtemplates&lt;br /&gt;
    try {&lt;br /&gt;
        const response = await fetch(apiUrl);&lt;br /&gt;
        const data = await response.json();&lt;br /&gt;
        console.log(&amp;quot;HTML BRUTO RETORNADO:&amp;quot;, data.expandtemplates['*']);&lt;br /&gt;
        return data.parse.text['*'];&lt;br /&gt;
    } catch(e) {&lt;br /&gt;
        console.error('Erro ao processar reward:', e);&lt;br /&gt;
        return '';&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45878</id>
		<title>Widget:TesteBossYawnv3</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45878"/>
		<updated>2026-04-09T22:35:11Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class = &amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 class = &amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, function(m) {&lt;br /&gt;
            if (m === '&amp;amp;') return '&amp;amp;amp;';&lt;br /&gt;
            if (m === '&amp;lt;') return '&amp;amp;lt;';&lt;br /&gt;
            if (m === '&amp;gt;') return '&amp;amp;gt;';&lt;br /&gt;
            return m;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    async function bossRender(root, diff) {&lt;br /&gt;
        const data = JSON.parse(root.dataset.json);&lt;br /&gt;
        const d = data[diff];&lt;br /&gt;
        const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        if (!content) return;&lt;br /&gt;
        &lt;br /&gt;
        let html = '';&lt;br /&gt;
&lt;br /&gt;
        // Nome do boss&lt;br /&gt;
        if (data.nome) {&lt;br /&gt;
            titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;)&lt;br /&gt;
            titulo.innerHTML = escapeHtml(data.nome);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Introdução&lt;br /&gt;
        //if (data.introducao) {&lt;br /&gt;
        //    html += `&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;${escapeHtml(data.introducao)}&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        //}&lt;br /&gt;
&lt;br /&gt;
        /* Localização&lt;br /&gt;
        if (data.localizacao) {&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Localização&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;p&amp;gt;${escapeHtml(data.localizacao.descricao)}&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        }*/&lt;br /&gt;
        &lt;br /&gt;
        //Grid de requisitos e recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Requisitos&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.requisitos &amp;amp;&amp;amp; d.requisitos.length) {&lt;br /&gt;
            d.requisitos.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
        &lt;br /&gt;
        //Grid recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Recompensas Garantidas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensas &amp;amp;&amp;amp; d.recompensas.length) {&lt;br /&gt;
            d.recompensas.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa garantida&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Possíveis Recompensas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensasPossiveis &amp;amp;&amp;amp; d.recompensasPossiveis.length) {&lt;br /&gt;
            html += await processReward(d.recompensasPossiveis);&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;${d.recompensasPossiveis }&amp;lt;/li&amp;gt;`&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
  &lt;br /&gt;
        //Fim da grid&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        content.innerHTML = html;&lt;br /&gt;
        &lt;br /&gt;
        // Atualiza botão ativo&lt;br /&gt;
        root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
            const diffBtn = btn.dataset.diff;&lt;br /&gt;
            if (diffBtn === diff) {&lt;br /&gt;
                btn.classList.add('active');&lt;br /&gt;
            } else {&lt;br /&gt;
                btn.classList.remove('active');&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
            &lt;br /&gt;
            // Adiciona event listeners nos botões&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.removeEventListener('click', handleClick);&lt;br /&gt;
                btn.addEventListener('click', handleClick);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            // Renderiza dificuldade normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function handleClick(e) {&lt;br /&gt;
        const btn = e.currentTarget;&lt;br /&gt;
        const root = btn.closest('.boss-component');&lt;br /&gt;
        const diff = btn.dataset.diff;&lt;br /&gt;
        if (root &amp;amp;&amp;amp; diff) {&lt;br /&gt;
            bossRender(root, diff);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    async function processReward(itemString) {&lt;br /&gt;
    const wikiText = `{{Reward|t|itens=${itemString};1}}`;&lt;br /&gt;
    const apiUrl = `https://wiki.gla.com.br/api.php?action=expandtemplates&amp;amp;text=${encodeURIComponent(wikiText)}&amp;amp;format=json&amp;amp;origin=*`;&lt;br /&gt;
    &lt;br /&gt;
    try {&lt;br /&gt;
        const response = await fetch(apiUrl);&lt;br /&gt;
        const data = await response.json();&lt;br /&gt;
        console.log(&amp;quot;HTML BRUTO RETORNADO:&amp;quot;, data.expandtemplates['*']);&lt;br /&gt;
        return data.expandtemplates['*'];&lt;br /&gt;
    } catch(e) {&lt;br /&gt;
        console.error('Erro ao processar reward:', e);&lt;br /&gt;
        return '';&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45847</id>
		<title>Widget:TesteBossYawnv3</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Widget:TesteBossYawnv3&amp;diff=45847"/>
		<updated>2026-04-09T19:12:34Z</updated>

		<summary type="html">&lt;p&gt;Yawn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;main class = &amp;quot;boss-container-teste&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 class = &amp;quot;boss-titulo&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-diff-buttons&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn active&amp;quot; data-diff=&amp;quot;normal&amp;quot;&amp;gt;NORMAL&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;elite&amp;quot;&amp;gt;ELITE&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button class=&amp;quot;boss-diff-btn&amp;quot; data-diff=&amp;quot;hard&amp;quot;&amp;gt;HARD&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;boss-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/main&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function escapeHtml(str) {&lt;br /&gt;
        if (!str) return '';&lt;br /&gt;
        return str.replace(/[&amp;amp;&amp;lt;&amp;gt;]/g, function(m) {&lt;br /&gt;
            if (m === '&amp;amp;') return '&amp;amp;amp;';&lt;br /&gt;
            if (m === '&amp;lt;') return '&amp;amp;lt;';&lt;br /&gt;
            if (m === '&amp;gt;') return '&amp;amp;gt;';&lt;br /&gt;
            return m;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    async function bossRender(root, diff) {&lt;br /&gt;
        const data = JSON.parse(root.dataset.json);&lt;br /&gt;
        const d = data[diff];&lt;br /&gt;
        const content = root.querySelector(&amp;quot;.boss-content&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        if (!content) return;&lt;br /&gt;
        &lt;br /&gt;
        let html = '';&lt;br /&gt;
&lt;br /&gt;
        // Nome do boss&lt;br /&gt;
        if (data.nome) {&lt;br /&gt;
            titulo = root.querySelector(&amp;quot;.boss-titulo&amp;quot;)&lt;br /&gt;
            titulo.innerHTML = escapeHtml(data.nome);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Introdução&lt;br /&gt;
        //if (data.introducao) {&lt;br /&gt;
        //    html += `&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;${escapeHtml(data.introducao)}&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        //}&lt;br /&gt;
&lt;br /&gt;
        /* Localização&lt;br /&gt;
        if (data.localizacao) {&lt;br /&gt;
            html += `&amp;lt;h3&amp;gt;Localização&amp;lt;/h3&amp;gt;`;&lt;br /&gt;
            html += `&amp;lt;p&amp;gt;${escapeHtml(data.localizacao.descricao)}&amp;lt;/p&amp;gt;`;&lt;br /&gt;
        }*/&lt;br /&gt;
        &lt;br /&gt;
        //Grid de requisitos e recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Requisitos&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-requisitos&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Requisitos&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.requisitos &amp;amp;&amp;amp; d.requisitos.length) {&lt;br /&gt;
            d.requisitos.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhum requisito&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;`;&lt;br /&gt;
        &lt;br /&gt;
        //Grid recompensas&lt;br /&gt;
        html += `&amp;lt;div class = &amp;quot;boss-content-grid-recompensas&amp;quot;&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
        // Recompensas Garantidas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Recompensas Garantidas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensas &amp;amp;&amp;amp; d.recompensas.length) {&lt;br /&gt;
            d.recompensas.forEach(r =&amp;gt; html += `&amp;lt;li&amp;gt;${escapeHtml(r)}&amp;lt;/li&amp;gt;`);&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa garantida&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        // Possíveis Recompensas&lt;br /&gt;
        html += `&amp;lt;h3&amp;gt;Possíveis Recompensas&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;`;&lt;br /&gt;
        if (d.recompensasPossiveis &amp;amp;&amp;amp; d.recompensasPossiveis.length) {&lt;br /&gt;
            html += await processReward(d.recompensasPossiveis);&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;${d.recompensasPossiveis }&amp;lt;/li&amp;gt;`&lt;br /&gt;
        } else {&lt;br /&gt;
            html += `&amp;lt;li&amp;gt;Nenhuma recompensa possível&amp;lt;/li&amp;gt;`;&lt;br /&gt;
        }&lt;br /&gt;
        html += `&amp;lt;/ul&amp;gt;`;&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
  &lt;br /&gt;
        //Fim da grid&lt;br /&gt;
        html += `&amp;lt;/div&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
        content.innerHTML = html;&lt;br /&gt;
        &lt;br /&gt;
        // Atualiza botão ativo&lt;br /&gt;
        root.querySelectorAll('.boss-diff-btn').forEach(btn =&amp;gt; {&lt;br /&gt;
            const diffBtn = btn.dataset.diff;&lt;br /&gt;
            if (diffBtn === diff) {&lt;br /&gt;
                btn.classList.add('active');&lt;br /&gt;
            } else {&lt;br /&gt;
                btn.classList.remove('active');&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        document.querySelectorAll('.boss-component').forEach(root =&amp;gt; {&lt;br /&gt;
            if (root.dataset.initialized === 'true') return;&lt;br /&gt;
            root.dataset.initialized = 'true';&lt;br /&gt;
            &lt;br /&gt;
            // Adiciona event listeners nos botões&lt;br /&gt;
            const buttons = root.querySelectorAll('.boss-diff-btn');&lt;br /&gt;
            buttons.forEach(btn =&amp;gt; {&lt;br /&gt;
                btn.removeEventListener('click', handleClick);&lt;br /&gt;
                btn.addEventListener('click', handleClick);&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            // Renderiza dificuldade normal&lt;br /&gt;
            bossRender(root, 'normal');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function handleClick(e) {&lt;br /&gt;
        const btn = e.currentTarget;&lt;br /&gt;
        const root = btn.closest('.boss-component');&lt;br /&gt;
        const diff = btn.dataset.diff;&lt;br /&gt;
        if (root &amp;amp;&amp;amp; diff) {&lt;br /&gt;
            bossRender(root, diff);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === 'loading') {&lt;br /&gt;
        document.addEventListener('DOMContentLoaded', init);&lt;br /&gt;
    } else {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== 'undefined' &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook('wikipage.content').add(init);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    async function processReward(itemString) {&lt;br /&gt;
    const wikiText = `{{Reward|t|itens=${itemString};1}}`;&lt;br /&gt;
    const apiUrl = `https://wiki.gla.com.br/api.php?action=expandtemplates&amp;amp;text=${encodeURIComponent(wikiText)}&amp;amp;format=json&amp;amp;origin=*`;&lt;br /&gt;
    &lt;br /&gt;
    try {&lt;br /&gt;
        const response = await fetch(apiUrl);&lt;br /&gt;
        const data = await response.json();&lt;br /&gt;
        return data.expandtemplates['*'];&lt;br /&gt;
    } catch(e) {&lt;br /&gt;
        console.error('Erro ao processar reward:', e);&lt;br /&gt;
        return '';&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.boss-container-teste {&lt;br /&gt;
    font-family: 'Segoe UI', Roboto, Arial, sans-serif;&lt;br /&gt;
    max-width: 900px;&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
    background-color: #3a3a3c;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Título do boss */&lt;br /&gt;
.boss-titulo {&lt;br /&gt;
    font-size: 42px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 0 0 12px 0;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Botões de dificuldade */&lt;br /&gt;
.boss-diff-buttons {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    border-bottom: 2px solid #3a3a3c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn {&lt;br /&gt;
    background: #3a3a3c;&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #e0e0e0;&lt;br /&gt;
    padding: 10px 28px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: all 0.2s;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn:hover {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-diff-btn.active {&lt;br /&gt;
    background: #5488ad;&lt;br /&gt;
    color: white;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(84, 136, 173, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Conteúdo principal */&lt;br /&gt;
.boss-content {&lt;br /&gt;
    padding: 24px 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Introdução */&lt;br /&gt;
.boss-content em {&lt;br /&gt;
    color: #a0a0a0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    border-bottom: 1px solid #3a3a3c;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Subtítulos (Localização, Requisitos, etc) */&lt;br /&gt;
.boss-content h3 {&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    margin: 24px 0 12px 0;&lt;br /&gt;
    font-size: 16px;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content h3:first-of-type {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Grid */&lt;br /&gt;
.boss-content-grid {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Requisitos */&lt;br /&gt;
.boss-content-requisitos{&lt;br /&gt;
    background-color: #1f1f20;&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Recompensas */&lt;br /&gt;
&lt;br /&gt;
/* Listas */&lt;br /&gt;
.boss-content ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding-left: 24px;&lt;br /&gt;
    list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li {&lt;br /&gt;
    margin: 10px 0;&lt;br /&gt;
    color: #d0d0d0;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.boss-content li::before {&lt;br /&gt;
    content: &amp;quot;▸&amp;quot;;&lt;br /&gt;
    color: #5488ad;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Linha divisória entre seções */&lt;br /&gt;
.boss-content hr {&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-top: 1px solid #3a3a3c;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsivo */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .boss-diff-buttons {&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        gap: 8px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-diff-btn {&lt;br /&gt;
        padding: 8px 20px;&lt;br /&gt;
        font-size: 12px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content {&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h2 {&lt;br /&gt;
        font-size: 24px;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .boss-content h3 {&lt;br /&gt;
        font-size: 14px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yawn</name></author>
	</entry>
</feed>