<?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=Ttuzu</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=Ttuzu"/>
	<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php/Especial:Contribui%C3%A7%C3%B5es/Ttuzu"/>
	<updated>2026-04-04T09:22:02Z</updated>
	<subtitle>Contribuições do usuário</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio:Ttuzu&amp;diff=36728</id>
		<title>Usuário:Ttuzu</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio:Ttuzu&amp;diff=36728"/>
		<updated>2025-06-26T17:24:06Z</updated>

		<summary type="html">&lt;p&gt;Ttuzu: Limpou toda a página&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ttuzu</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio_Discuss%C3%A3o:Ttuzu&amp;diff=35217</id>
		<title>Usuário Discussão:Ttuzu</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio_Discuss%C3%A3o:Ttuzu&amp;diff=35217"/>
		<updated>2025-06-10T22:51:07Z</updated>

		<summary type="html">&lt;p&gt;Ttuzu: Limpou toda a página&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ttuzu</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio_Discuss%C3%A3o:Ttuzu&amp;diff=35214</id>
		<title>Usuário Discussão:Ttuzu</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio_Discuss%C3%A3o:Ttuzu&amp;diff=35214"/>
		<updated>2025-06-10T22:39:10Z</updated>

		<summary type="html">&lt;p&gt;Ttuzu: /* Personagem:Franky (Timeskip) */ nova seção&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(function () {&lt;br /&gt;
    const personaData = document.getElementById('persona-data');&lt;br /&gt;
    if (!personaData) {&lt;br /&gt;
        console.error('Persona widget: não se encontrou #persona-data!');&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Extração de dados&lt;br /&gt;
    const nome = personaData.dataset.nome || '';&lt;br /&gt;
    const tier = personaData.dataset.tier || '';&lt;br /&gt;
    const classe = personaData.dataset.classe || '';&lt;br /&gt;
    const image = personaData.dataset.image || '';&lt;br /&gt;
    let habilidades = [];&lt;br /&gt;
    let skins = [];&lt;br /&gt;
&lt;br /&gt;
    // Função auxiliar para parsear strings raw em objetos&lt;br /&gt;
    const parseRawString = (rawString) =&amp;gt; {&lt;br /&gt;
        const data = [];&lt;br /&gt;
        if (!rawString) return data;&lt;br /&gt;
&lt;br /&gt;
        const lines = rawString.split('||').map(line =&amp;gt; line.trim()).filter(Boolean);&lt;br /&gt;
&lt;br /&gt;
        lines.forEach(line =&amp;gt; {&lt;br /&gt;
            const parts = line.split('\n').map(p =&amp;gt; p.trim()).filter(Boolean);&lt;br /&gt;
            const item = {};&lt;br /&gt;
            parts.forEach(part =&amp;gt; {&lt;br /&gt;
                if (part.startsWith('')) {&lt;br /&gt;
                    // Ignorar comentários&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                const eqIndex = part.indexOf('=');&lt;br /&gt;
                if (eqIndex &amp;gt; -1) {&lt;br /&gt;
                    const key = part.substring(0, eqIndex).trim();&lt;br /&gt;
                    const value = part.substring(eqIndex + 1).trim();&lt;br /&gt;
                    item[key] = value;&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            if (Object.keys(item).length &amp;gt; 0) {&lt;br /&gt;
                data.push(item);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
        return data;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    habilidades = parseRawString(personaData.dataset.habilidadesraw);&lt;br /&gt;
    skins = parseRawString(personaData.dataset.skinsraw);&lt;br /&gt;
&lt;br /&gt;
    // Referências aos elementos HTML&lt;br /&gt;
    const tabBtns = document.querySelectorAll('.persona-tabs .tab-btn');&lt;br /&gt;
    const cuadrosContainer = document.querySelector('.cuadros-container');&lt;br /&gt;
    const abilityNameText = document.querySelector('.descripcion-container .ability-name-text');&lt;br /&gt;
    const abilityLevelText = document.querySelector('.descripcion-container .ability-level-text');&lt;br /&gt;
    const abilityDesc = document.querySelector('.descripcion-container .ability-desc');&lt;br /&gt;
    const abilityVideo = document.querySelector('.descripcion-container .ability-video');&lt;br /&gt;
    const abilityVideoSource = abilityVideo.querySelector('source');&lt;br /&gt;
    const abilityAttributesContainer = document.querySelector('.descripcion-container .ability-attributes');&lt;br /&gt;
    const artPersonagem = document.querySelector('.art-personagem');&lt;br /&gt;
    const personaName = document.querySelector('.persona-name');&lt;br /&gt;
    const personaTier = document.querySelector('.persona-tier');&lt;br /&gt;
    const personaClass = document.querySelector('.persona-class');&lt;br /&gt;
&lt;br /&gt;
    // Preencher informações do header do personagem&lt;br /&gt;
    if (artPersonagem) artPersonagem.src = image;&lt;br /&gt;
    if (personaName) personaName.textContent = nome;&lt;br /&gt;
    if (personaTier) personaTier.textContent = `Tier: ${tier}`;&lt;br /&gt;
    if (personaClass) personaClass.textContent = `Classe: ${classe}`;&lt;br /&gt;
&lt;br /&gt;
    // Estado atual&lt;br /&gt;
    let currentActiveTab = 'habilidades';&lt;br /&gt;
    let currentActiveIndex = 0; // Índice da habilidade/skin ativa&lt;br /&gt;
&lt;br /&gt;
    // Função para renderizar os ícones (habilidades ou skins)&lt;br /&gt;
    const renderIcons = (items, type) =&amp;gt; {&lt;br /&gt;
        cuadrosContainer.innerHTML = ''; // Limpar antes de renderizar&lt;br /&gt;
        items.forEach((item, index) =&amp;gt; {&lt;br /&gt;
            const cuadro = document.createElement('div');&lt;br /&gt;
            cuadro.classList.add('cuadro');&lt;br /&gt;
            cuadro.style.backgroundImage = `url('${item.icon || item.image}')`;&lt;br /&gt;
            cuadro.dataset.index = index;&lt;br /&gt;
            cuadro.dataset.type = type;&lt;br /&gt;
&lt;br /&gt;
            cuadro.addEventListener('click', () =&amp;gt; {&lt;br /&gt;
                selectItem(index, type);&lt;br /&gt;
            });&lt;br /&gt;
            cuadrosContainer.appendChild(cuadro);&lt;br /&gt;
        });&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Função para exibir detalhes da habilidade/skin&lt;br /&gt;
    const displayItemDetails = (item, type) =&amp;gt; {&lt;br /&gt;
        // Limpa atributos anteriores&lt;br /&gt;
        abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
&lt;br /&gt;
        if (type === 'habilidades') {&lt;br /&gt;
            abilityNameText.textContent = item.nome || '';&lt;br /&gt;
            abilityLevelText.textContent = `Level: ${item.level || ''}`;&lt;br /&gt;
            abilityDesc.textContent = item.desc || '';&lt;br /&gt;
&lt;br /&gt;
            // Renderizar atributos dinamicamente&lt;br /&gt;
            if (item.atr) {&lt;br /&gt;
                const atrParts = item.atr.split(',').map(p =&amp;gt; p.trim());&lt;br /&gt;
                for (let i = 0; i &amp;lt; atrParts.length; i += 2) {&lt;br /&gt;
                    const iconPath = atrParts[i];&lt;br /&gt;
                    const value = atrParts[i + 1];&lt;br /&gt;
&lt;br /&gt;
                    if (iconPath &amp;amp;&amp;amp; value !== undefined &amp;amp;&amp;amp; value !== null) { // Verifique se o valor não é null/undefined&lt;br /&gt;
                        const attributeDiv = document.createElement('div');&lt;br /&gt;
                        const attributeImg = document.createElement('img');&lt;br /&gt;
                        attributeImg.src = iconPath;&lt;br /&gt;
                        attributeImg.alt = &amp;quot;Atributo&amp;quot;;&lt;br /&gt;
                        attributeDiv.appendChild(attributeImg);&lt;br /&gt;
                        attributeDiv.appendChild(document.createTextNode(value));&lt;br /&gt;
                        abilityAttributesContainer.appendChild(attributeDiv);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (item.video) {&lt;br /&gt;
                abilityVideoSource.src = item.video;&lt;br /&gt;
                abilityVideo.load();&lt;br /&gt;
                abilityVideo.style.display = 'block';&lt;br /&gt;
            } else {&lt;br /&gt;
                abilityVideoSource.src = '';&lt;br /&gt;
                abilityVideo.style.display = 'none';&lt;br /&gt;
            }&lt;br /&gt;
        } else { // Skins&lt;br /&gt;
            abilityNameText.textContent = item.nome || '';&lt;br /&gt;
            abilityLevelText.textContent = '';&lt;br /&gt;
            abilityDesc.textContent = item.desc || '';&lt;br /&gt;
            abilityVideoSource.src = '';&lt;br /&gt;
            abilityVideo.style.display = 'none';&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Função para selecionar um item (habilidade ou skin)&lt;br /&gt;
    const selectItem = (index, type) =&amp;gt; {&lt;br /&gt;
        const items = type === 'habilidades' ? habilidades : skins;&lt;br /&gt;
        const selectedItem = items[index];&lt;br /&gt;
&lt;br /&gt;
        // Atualizar classe 'active' nos ícones&lt;br /&gt;
        document.querySelectorAll('.cuadro').forEach(cuadro =&amp;gt; {&lt;br /&gt;
            cuadro.classList.remove('active');&lt;br /&gt;
        });&lt;br /&gt;
        const activeCuadro = cuadrosContainer.querySelector(`.cuadro[data-index=&amp;quot;${index}&amp;quot;][data-type=&amp;quot;${type}&amp;quot;]`);&lt;br /&gt;
        if (activeCuadro) {&lt;br /&gt;
            activeCuadro.classList.add('active');&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        displayItemDetails(selectedItem, type);&lt;br /&gt;
        currentActiveIndex = index;&lt;br /&gt;
        currentActiveTab = type;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Event Listeners para as abas&lt;br /&gt;
    tabBtns.forEach(btn =&amp;gt; {&lt;br /&gt;
        btn.addEventListener('click', () =&amp;gt; {&lt;br /&gt;
            const tabType = btn.dataset.tab;&lt;br /&gt;
&lt;br /&gt;
            // Remover 'active' de todas as abas&lt;br /&gt;
            tabBtns.forEach(b =&amp;gt; b.classList.remove('active'));&lt;br /&gt;
            // Adicionar 'active' à aba clicada&lt;br /&gt;
            btn.classList.add('active');&lt;br /&gt;
&lt;br /&gt;
            if (tabType === 'habilidades') {&lt;br /&gt;
                renderIcons(habilidades, 'habilidades');&lt;br /&gt;
                if (habilidades.length &amp;gt; 0) {&lt;br /&gt;
                    selectItem(0, 'habilidades');&lt;br /&gt;
                } else {&lt;br /&gt;
                    abilityNameText.textContent = 'Nenhuma Habilidade';&lt;br /&gt;
                    abilityLevelText.textContent = '';&lt;br /&gt;
                    abilityDesc.textContent = '';&lt;br /&gt;
                    abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
                    abilityVideoSource.src = '';&lt;br /&gt;
                    abilityVideo.style.display = 'none';&lt;br /&gt;
                }&lt;br /&gt;
            } else { // Skins&lt;br /&gt;
                renderIcons(skins, 'skins');&lt;br /&gt;
                if (skins.length &amp;gt; 0) {&lt;br /&gt;
                    selectItem(0, 'skins');&lt;br /&gt;
                } else {&lt;br /&gt;
                    abilityNameText.textContent = 'Nenhuma Skin';&lt;br /&gt;
                    abilityLevelText.textContent = '';&lt;br /&gt;
                    abilityDesc.textContent = '';&lt;br /&gt;
                    abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
                    abilityVideoSource.src = '';&lt;br /&gt;
                    abilityVideo.style.display = 'none';&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Inicialização: renderizar habilidades e selecionar a primeira por padrão&lt;br /&gt;
    if (habilidades.length &amp;gt; 0) {&lt;br /&gt;
        renderIcons(habilidades, 'habilidades');&lt;br /&gt;
        selectItem(0, 'habilidades');&lt;br /&gt;
    } else if (skins.length &amp;gt; 0) {&lt;br /&gt;
        document.querySelector('.tab-btn[data-tab=&amp;quot;skins&amp;quot;]').click();&lt;br /&gt;
    } else {&lt;br /&gt;
        cuadrosContainer.innerHTML = '&amp;lt;p style=&amp;quot;color: #bbb; text-align: center; width: 100%;&amp;quot;&amp;gt;Nenhum conteúdo disponível.&amp;lt;/p&amp;gt;';&lt;br /&gt;
        abilityNameText.textContent = 'Nenhum Conteúdo';&lt;br /&gt;
        abilityLevelText.textContent = '';&lt;br /&gt;
        abilityDesc.textContent = '';&lt;br /&gt;
        abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
        abilityVideoSource.src = '';&lt;br /&gt;
        abilityVideo.style.display = 'none';&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
== Widget:Persona ==&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
    const personaData = document.getElementById('persona-data');&lt;br /&gt;
    if (!personaData) {&lt;br /&gt;
        console.error('Persona widget: não se encontrou #persona-data!');&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Extração de dados&lt;br /&gt;
    const nome = personaData.dataset.nome || '';&lt;br /&gt;
    const tier = personaData.dataset.tier || '';&lt;br /&gt;
    const classe = personaData.dataset.classe || '';&lt;br /&gt;
    const image = personaData.dataset.image || '';&lt;br /&gt;
    let habilidades = [];&lt;br /&gt;
    let skins = [];&lt;br /&gt;
&lt;br /&gt;
    // Função auxiliar para parsear strings raw em objetos&lt;br /&gt;
    const parseRawString = (rawString) =&amp;gt; {&lt;br /&gt;
        const data = [];&lt;br /&gt;
        if (!rawString) return data;&lt;br /&gt;
&lt;br /&gt;
        const lines = rawString.split('||').map(line =&amp;gt; line.trim()).filter(Boolean);&lt;br /&gt;
&lt;br /&gt;
        lines.forEach(line =&amp;gt; {&lt;br /&gt;
            const parts = line.split('\n').map(p =&amp;gt; p.trim()).filter(Boolean);&lt;br /&gt;
            const item = {};&lt;br /&gt;
            parts.forEach(part =&amp;gt; {&lt;br /&gt;
                if (part.startsWith('')) {&lt;br /&gt;
                    // Ignorar comentários&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                const eqIndex = part.indexOf('=');&lt;br /&gt;
                if (eqIndex &amp;gt; -1) {&lt;br /&gt;
                    const key = part.substring(0, eqIndex).trim();&lt;br /&gt;
                    const value = part.substring(eqIndex + 1).trim();&lt;br /&gt;
                    item[key] = value;&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            if (Object.keys(item).length &amp;gt; 0) {&lt;br /&gt;
                data.push(item);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
        return data;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    habilidades = parseRawString(personaData.dataset.habilidadesraw);&lt;br /&gt;
    skins = parseRawString(personaData.dataset.skinsraw);&lt;br /&gt;
&lt;br /&gt;
    // Referências aos elementos HTML&lt;br /&gt;
    const tabBtns = document.querySelectorAll('.persona-tabs .tab-btn');&lt;br /&gt;
    const cuadrosContainer = document.querySelector('.cuadros-container');&lt;br /&gt;
    const abilityNameText = document.querySelector('.descripcion-container .ability-name-text');&lt;br /&gt;
    const abilityLevelText = document.querySelector('.descripcion-container .ability-level-text');&lt;br /&gt;
    const abilityDesc = document.querySelector('.descripcion-container .ability-desc');&lt;br /&gt;
    const abilityVideo = document.querySelector('.descripcion-container .ability-video');&lt;br /&gt;
    const abilityVideoSource = abilityVideo.querySelector('source');&lt;br /&gt;
    const abilityAttributesContainer = document.querySelector('.descripcion-container .ability-attributes');&lt;br /&gt;
    const artPersonagem = document.querySelector('.art-personagem');&lt;br /&gt;
    const personaName = document.querySelector('.persona-name');&lt;br /&gt;
    const personaTier = document.querySelector('.persona-tier');&lt;br /&gt;
    const personaClass = document.querySelector('.persona-class');&lt;br /&gt;
&lt;br /&gt;
    // Preencher informações do header do personagem&lt;br /&gt;
    if (artPersonagem) artPersonagem.src = image;&lt;br /&gt;
    if (personaName) personaName.textContent = nome;&lt;br /&gt;
    if (personaTier) personaTier.textContent = `Tier: ${tier}`;&lt;br /&gt;
    if (personaClass) personaClass.textContent = `Classe: ${classe}`;&lt;br /&gt;
&lt;br /&gt;
    // Estado atual&lt;br /&gt;
    let currentActiveTab = 'habilidades';&lt;br /&gt;
    let currentActiveIndex = 0; // Índice da habilidade/skin ativa&lt;br /&gt;
&lt;br /&gt;
    // Função para renderizar os ícones (habilidades ou skins)&lt;br /&gt;
    const renderIcons = (items, type) =&amp;gt; {&lt;br /&gt;
        cuadrosContainer.innerHTML = ''; // Limpar antes de renderizar&lt;br /&gt;
        items.forEach((item, index) =&amp;gt; {&lt;br /&gt;
            const cuadro = document.createElement('div');&lt;br /&gt;
            cuadro.classList.add('cuadro');&lt;br /&gt;
            cuadro.style.backgroundImage = `url('${item.icon || item.image}')`;&lt;br /&gt;
            cuadro.dataset.index = index;&lt;br /&gt;
            cuadro.dataset.type = type;&lt;br /&gt;
&lt;br /&gt;
            cuadro.addEventListener('click', () =&amp;gt; {&lt;br /&gt;
                selectItem(index, type);&lt;br /&gt;
            });&lt;br /&gt;
            cuadrosContainer.appendChild(cuadro);&lt;br /&gt;
        });&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Função para exibir detalhes da habilidade/skin&lt;br /&gt;
    const displayItemDetails = (item, type) =&amp;gt; {&lt;br /&gt;
        // Limpa atributos anteriores&lt;br /&gt;
        abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
&lt;br /&gt;
        if (type === 'habilidades') {&lt;br /&gt;
            abilityNameText.textContent = item.nome || '';&lt;br /&gt;
            abilityLevelText.textContent = `Level: ${item.level || ''}`;&lt;br /&gt;
            abilityDesc.textContent = item.desc || '';&lt;br /&gt;
&lt;br /&gt;
            // Renderizar atributos dinamicamente&lt;br /&gt;
            if (item.atr) {&lt;br /&gt;
                const atrParts = item.atr.split(',').map(p =&amp;gt; p.trim());&lt;br /&gt;
                for (let i = 0; i &amp;lt; atrParts.length; i += 2) {&lt;br /&gt;
                    const iconPath = atrParts[i];&lt;br /&gt;
                    const value = atrParts[i + 1];&lt;br /&gt;
&lt;br /&gt;
                    if (iconPath &amp;amp;&amp;amp; value !== undefined &amp;amp;&amp;amp; value !== null) { // Verifique se o valor não é null/undefined&lt;br /&gt;
                        const attributeDiv = document.createElement('div');&lt;br /&gt;
                        const attributeImg = document.createElement('img');&lt;br /&gt;
                        attributeImg.src = iconPath;&lt;br /&gt;
                        attributeImg.alt = &amp;quot;Atributo&amp;quot;;&lt;br /&gt;
                        attributeDiv.appendChild(attributeImg);&lt;br /&gt;
                        attributeDiv.appendChild(document.createTextNode(value));&lt;br /&gt;
                        abilityAttributesContainer.appendChild(attributeDiv);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (item.video) {&lt;br /&gt;
                abilityVideoSource.src = item.video;&lt;br /&gt;
                abilityVideo.load();&lt;br /&gt;
                abilityVideo.style.display = 'block';&lt;br /&gt;
            } else {&lt;br /&gt;
                abilityVideoSource.src = '';&lt;br /&gt;
                abilityVideo.style.display = 'none';&lt;br /&gt;
            }&lt;br /&gt;
        } else { // Skins&lt;br /&gt;
            abilityNameText.textContent = item.nome || '';&lt;br /&gt;
            abilityLevelText.textContent = '';&lt;br /&gt;
            abilityDesc.textContent = item.desc || '';&lt;br /&gt;
            abilityVideoSource.src = '';&lt;br /&gt;
            abilityVideo.style.display = 'none';&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Função para selecionar um item (habilidade ou skin)&lt;br /&gt;
    const selectItem = (index, type) =&amp;gt; {&lt;br /&gt;
        const items = type === 'habilidades' ? habilidades : skins;&lt;br /&gt;
        const selectedItem = items[index];&lt;br /&gt;
&lt;br /&gt;
        // Atualizar classe 'active' nos ícones&lt;br /&gt;
        document.querySelectorAll('.cuadro').forEach(cuadro =&amp;gt; {&lt;br /&gt;
            cuadro.classList.remove('active');&lt;br /&gt;
        });&lt;br /&gt;
        const activeCuadro = cuadrosContainer.querySelector(`.cuadro[data-index=&amp;quot;${index}&amp;quot;][data-type=&amp;quot;${type}&amp;quot;]`);&lt;br /&gt;
        if (activeCuadro) {&lt;br /&gt;
            activeCuadro.classList.add('active');&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        displayItemDetails(selectedItem, type);&lt;br /&gt;
        currentActiveIndex = index;&lt;br /&gt;
        currentActiveTab = type;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Event Listeners para as abas&lt;br /&gt;
    tabBtns.forEach(btn =&amp;gt; {&lt;br /&gt;
        btn.addEventListener('click', () =&amp;gt; {&lt;br /&gt;
            const tabType = btn.dataset.tab;&lt;br /&gt;
&lt;br /&gt;
            // Remover 'active' de todas as abas&lt;br /&gt;
            tabBtns.forEach(b =&amp;gt; b.classList.remove('active'));&lt;br /&gt;
            // Adicionar 'active' à aba clicada&lt;br /&gt;
            btn.classList.add('active');&lt;br /&gt;
&lt;br /&gt;
            if (tabType === 'habilidades') {&lt;br /&gt;
                renderIcons(habilidades, 'habilidades');&lt;br /&gt;
                if (habilidades.length &amp;gt; 0) {&lt;br /&gt;
                    selectItem(0, 'habilidades');&lt;br /&gt;
                } else {&lt;br /&gt;
                    abilityNameText.textContent = 'Nenhuma Habilidade';&lt;br /&gt;
                    abilityLevelText.textContent = '';&lt;br /&gt;
                    abilityDesc.textContent = '';&lt;br /&gt;
                    abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
                    abilityVideoSource.src = '';&lt;br /&gt;
                    abilityVideo.style.display = 'none';&lt;br /&gt;
                }&lt;br /&gt;
            } else { // Skins&lt;br /&gt;
                renderIcons(skins, 'skins');&lt;br /&gt;
                if (skins.length &amp;gt; 0) {&lt;br /&gt;
                    selectItem(0, 'skins');&lt;br /&gt;
                } else {&lt;br /&gt;
                    abilityNameText.textContent = 'Nenhuma Skin';&lt;br /&gt;
                    abilityLevelText.textContent = '';&lt;br /&gt;
                    abilityDesc.textContent = '';&lt;br /&gt;
                    abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
                    abilityVideoSource.src = '';&lt;br /&gt;
                    abilityVideo.style.display = 'none';&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Inicialização: renderizar habilidades e selecionar a primeira por padrão&lt;br /&gt;
    if (habilidades.length &amp;gt; 0) {&lt;br /&gt;
        renderIcons(habilidades, 'habilidades');&lt;br /&gt;
        selectItem(0, 'habilidades');&lt;br /&gt;
    } else if (skins.length &amp;gt; 0) {&lt;br /&gt;
        document.querySelector('.tab-btn[data-tab=&amp;quot;skins&amp;quot;]').click();&lt;br /&gt;
    } else {&lt;br /&gt;
        cuadrosContainer.innerHTML = '&amp;lt;p style=&amp;quot;color: #bbb; text-align: center; width: 100%;&amp;quot;&amp;gt;Nenhum conteúdo disponível.&amp;lt;/p&amp;gt;';&lt;br /&gt;
        abilityNameText.textContent = 'Nenhum Conteúdo';&lt;br /&gt;
        abilityLevelText.textContent = '';&lt;br /&gt;
        abilityDesc.textContent = '';&lt;br /&gt;
        abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
        abilityVideoSource.src = '';&lt;br /&gt;
        abilityVideo.style.display = 'none';&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
== Predefinição:Persona ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{#tag:div|&lt;br /&gt;
&amp;lt;div class=&amp;quot;persona-container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;persona-header&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;img class=&amp;quot;art-personagem&amp;quot; src=&amp;quot;{{{image|}}}&amp;quot; alt=&amp;quot;Arte do personagem&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;persona-info&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 class=&amp;quot;persona-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
            &amp;lt;p class=&amp;quot;persona-tier&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
            &amp;lt;p class=&amp;quot;persona-class&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;persona-tabs&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;tab-btn active&amp;quot; data-tab=&amp;quot;habilidades&amp;quot;&amp;gt;Habilidades&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;tab-btn&amp;quot; data-tab=&amp;quot;skins&amp;quot;&amp;gt;Skins&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;persona-data&amp;quot;&lt;br /&gt;
         data-nome=&amp;quot;{{{Nome|}}}&amp;quot;&lt;br /&gt;
         data-tier=&amp;quot;{{{tier|}}}&amp;quot;&lt;br /&gt;
         data-classe=&amp;quot;{{{classe|}}}&amp;quot;&lt;br /&gt;
         data-image=&amp;quot;{{{image|}}}&amp;quot;&lt;br /&gt;
         data-habilidadesraw=&amp;quot;{{{habilidadesRaw|}}}&amp;quot;&lt;br /&gt;
         data-skinsraw=&amp;quot;{{{skinsRaw|}}}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;habilidades-details&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;cuadros-container habilidades-container&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;descripcion-container&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;ability-name-level&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;ability-name-text&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;ability-level-text&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;ability-attributes&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;p class=&amp;quot;ability-desc&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;ability-video-container&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;video class=&amp;quot;ability-video&amp;quot; controls poster=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;source src=&amp;quot;&amp;quot; type=&amp;quot;video/webm&amp;quot;&amp;gt;&lt;br /&gt;
                    Seu navegador não suporta o elemento de vídeo.&lt;br /&gt;
                &amp;lt;/video&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&amp;lt;templatestyles src=&amp;quot;Predefinição:Persona/styles.css&amp;quot; /&amp;gt;&amp;lt;widget name=&amp;quot;Persona&amp;quot; /&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentação da Predefinição 'Persona'}}&lt;br /&gt;
Esta predefinição gera uma ficha interativa de personagem, conectada a um widget em JavaScript que exibe habilidades e skins de forma dinâmica.&lt;br /&gt;
&lt;br /&gt;
== Exemplo para Copiar e Colar ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Persona&lt;br /&gt;
|Nome=Franky (Timeskip)&lt;br /&gt;
|tier=Diamante&lt;br /&gt;
|classe=Atirador/Tanque&lt;br /&gt;
|image=Caminho/Para/ImagemDoFranky.png&lt;br /&gt;
|habilidadesRaw=&amp;lt;nowiki&amp;gt;&lt;br /&gt;
nome=Rocket Launcher&lt;br /&gt;
icon=/caminho/para/icone_rocket_launcher.png&lt;br /&gt;
level=70&lt;br /&gt;
desc=Usando a tecnologia que adquiriu em Bajimroa Island, Franky usa seus grandes ombros, dos quais ele libera uma linha (Raffle Franky 1/?) revelando três pequenos, porém poderosos, mísseis que serão lançados no oponente. Causa dano em uma grande área e para o oponente. Oponentes que estiverem no caminho dos mísseis recebem apenas 75% de dano e não são punidos.&lt;br /&gt;
atr=/caminho/para/icone_cooldown.png,35 SEG,/caminho/para/icone_custo.png,-,/caminho/para/icone_alcance.png,40,/caminho/para/icone_dano.png,35&lt;br /&gt;
video=/caminho/para/video_rocket_launcher.webm&lt;br /&gt;
||&lt;br /&gt;
nome=Punch de Aço&lt;br /&gt;
icon=/caminho/para/icone_punch.png&lt;br /&gt;
level=60&lt;br /&gt;
desc=Franky desfere um soco poderoso, causando dano massivo e atordoando o alvo por um breve período.&lt;br /&gt;
atr=/caminho/para/icone_cooldown.png,20 SEG,/caminho/para/icone_custo.png,50,/caminho/para/icone_alcance.png,5,/caminho/para/icone_dano.png,120&lt;br /&gt;
video=/caminho/para/video_punch.webm&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|skinsRaw=&amp;lt;nowiki&amp;gt;&lt;br /&gt;
nome=Skin Padrão&lt;br /&gt;
image=/caminho/para/skin_padrao.png&lt;br /&gt;
desc=Aparência original de Franky.&lt;br /&gt;
||&lt;br /&gt;
nome=Skin de Férias&lt;br /&gt;
image=/caminho/para/skin_ferias.png&lt;br /&gt;
desc=Franky pronto para relaxar na praia.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Personagem:Franky (Timeskip) ==&lt;br /&gt;
&lt;br /&gt;
{{Persona&lt;br /&gt;
|Nome=Franky (Timeskip)&lt;br /&gt;
|tier=Diamante&lt;br /&gt;
|classe=Atirador/Tanque&lt;br /&gt;
|image=File:Franky_Timeskip_Art.png |habilidadesRaw=&amp;lt;nowiki&amp;gt;&lt;br /&gt;
nome=Rocket Launcher&lt;br /&gt;
icon=File:Icon_Rocket_Launcher.png level=70&lt;br /&gt;
desc=Usando a tecnologia que adquiriu em Bajimroa Island, Franky usa seus grandes ombros, dos quais ele libera uma linha (Raffle Franky 1/?) revelando três pequenos, porém poderosos, mísseis que serão lançados no oponente. Causa dano em uma grande área e para o oponente. Oponentes que estiverem no caminho dos mísseis recebem apenas 75% de dano e não são punidos.&lt;br /&gt;
atr=File:Icon_Cooldown.png,35 SEG,File:Icon_Cost.png,-,File:Icon_Range.png,40,File:Icon_Damage.png,35 video=File:Video_Rocket_Launcher.webm ||&lt;br /&gt;
nome=Punch de Aço&lt;br /&gt;
icon=File:Icon_Punch.png&lt;br /&gt;
level=60&lt;br /&gt;
desc=Franky desfere um soco poderoso, causando dano massivo e atordoando o alvo por um breve período.&lt;br /&gt;
atr=File:Icon_Cooldown.png,20 SEG,File:Icon_Cost.png,50,File:Icon_Range.png,5,File:Icon_Damage.png,120&lt;br /&gt;
video=File:Video_Punch.webm&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|skinsRaw=&amp;lt;nowiki&amp;gt;&lt;br /&gt;
nome=Skin Padrão&lt;br /&gt;
image=File:Skin_Franky_Default.png&lt;br /&gt;
desc=Aparência original de Franky.&lt;br /&gt;
||&lt;br /&gt;
nome=Skin de Férias&lt;br /&gt;
image=File:Skin_Franky_Vacation.png&lt;br /&gt;
desc=Franky pronto para relaxar na praia.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ttuzu</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio_Discuss%C3%A3o:Ttuzu&amp;diff=35213</id>
		<title>Usuário Discussão:Ttuzu</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio_Discuss%C3%A3o:Ttuzu&amp;diff=35213"/>
		<updated>2025-06-10T22:37:56Z</updated>

		<summary type="html">&lt;p&gt;Ttuzu: /* Predefinição:Persona */ nova seção&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(function () {&lt;br /&gt;
    const personaData = document.getElementById('persona-data');&lt;br /&gt;
    if (!personaData) {&lt;br /&gt;
        console.error('Persona widget: não se encontrou #persona-data!');&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Extração de dados&lt;br /&gt;
    const nome = personaData.dataset.nome || '';&lt;br /&gt;
    const tier = personaData.dataset.tier || '';&lt;br /&gt;
    const classe = personaData.dataset.classe || '';&lt;br /&gt;
    const image = personaData.dataset.image || '';&lt;br /&gt;
    let habilidades = [];&lt;br /&gt;
    let skins = [];&lt;br /&gt;
&lt;br /&gt;
    // Função auxiliar para parsear strings raw em objetos&lt;br /&gt;
    const parseRawString = (rawString) =&amp;gt; {&lt;br /&gt;
        const data = [];&lt;br /&gt;
        if (!rawString) return data;&lt;br /&gt;
&lt;br /&gt;
        const lines = rawString.split('||').map(line =&amp;gt; line.trim()).filter(Boolean);&lt;br /&gt;
&lt;br /&gt;
        lines.forEach(line =&amp;gt; {&lt;br /&gt;
            const parts = line.split('\n').map(p =&amp;gt; p.trim()).filter(Boolean);&lt;br /&gt;
            const item = {};&lt;br /&gt;
            parts.forEach(part =&amp;gt; {&lt;br /&gt;
                if (part.startsWith('')) {&lt;br /&gt;
                    // Ignorar comentários&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                const eqIndex = part.indexOf('=');&lt;br /&gt;
                if (eqIndex &amp;gt; -1) {&lt;br /&gt;
                    const key = part.substring(0, eqIndex).trim();&lt;br /&gt;
                    const value = part.substring(eqIndex + 1).trim();&lt;br /&gt;
                    item[key] = value;&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            if (Object.keys(item).length &amp;gt; 0) {&lt;br /&gt;
                data.push(item);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
        return data;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    habilidades = parseRawString(personaData.dataset.habilidadesraw);&lt;br /&gt;
    skins = parseRawString(personaData.dataset.skinsraw);&lt;br /&gt;
&lt;br /&gt;
    // Referências aos elementos HTML&lt;br /&gt;
    const tabBtns = document.querySelectorAll('.persona-tabs .tab-btn');&lt;br /&gt;
    const cuadrosContainer = document.querySelector('.cuadros-container');&lt;br /&gt;
    const abilityNameText = document.querySelector('.descripcion-container .ability-name-text');&lt;br /&gt;
    const abilityLevelText = document.querySelector('.descripcion-container .ability-level-text');&lt;br /&gt;
    const abilityDesc = document.querySelector('.descripcion-container .ability-desc');&lt;br /&gt;
    const abilityVideo = document.querySelector('.descripcion-container .ability-video');&lt;br /&gt;
    const abilityVideoSource = abilityVideo.querySelector('source');&lt;br /&gt;
    const abilityAttributesContainer = document.querySelector('.descripcion-container .ability-attributes');&lt;br /&gt;
    const artPersonagem = document.querySelector('.art-personagem');&lt;br /&gt;
    const personaName = document.querySelector('.persona-name');&lt;br /&gt;
    const personaTier = document.querySelector('.persona-tier');&lt;br /&gt;
    const personaClass = document.querySelector('.persona-class');&lt;br /&gt;
&lt;br /&gt;
    // Preencher informações do header do personagem&lt;br /&gt;
    if (artPersonagem) artPersonagem.src = image;&lt;br /&gt;
    if (personaName) personaName.textContent = nome;&lt;br /&gt;
    if (personaTier) personaTier.textContent = `Tier: ${tier}`;&lt;br /&gt;
    if (personaClass) personaClass.textContent = `Classe: ${classe}`;&lt;br /&gt;
&lt;br /&gt;
    // Estado atual&lt;br /&gt;
    let currentActiveTab = 'habilidades';&lt;br /&gt;
    let currentActiveIndex = 0; // Índice da habilidade/skin ativa&lt;br /&gt;
&lt;br /&gt;
    // Função para renderizar os ícones (habilidades ou skins)&lt;br /&gt;
    const renderIcons = (items, type) =&amp;gt; {&lt;br /&gt;
        cuadrosContainer.innerHTML = ''; // Limpar antes de renderizar&lt;br /&gt;
        items.forEach((item, index) =&amp;gt; {&lt;br /&gt;
            const cuadro = document.createElement('div');&lt;br /&gt;
            cuadro.classList.add('cuadro');&lt;br /&gt;
            cuadro.style.backgroundImage = `url('${item.icon || item.image}')`;&lt;br /&gt;
            cuadro.dataset.index = index;&lt;br /&gt;
            cuadro.dataset.type = type;&lt;br /&gt;
&lt;br /&gt;
            cuadro.addEventListener('click', () =&amp;gt; {&lt;br /&gt;
                selectItem(index, type);&lt;br /&gt;
            });&lt;br /&gt;
            cuadrosContainer.appendChild(cuadro);&lt;br /&gt;
        });&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Função para exibir detalhes da habilidade/skin&lt;br /&gt;
    const displayItemDetails = (item, type) =&amp;gt; {&lt;br /&gt;
        // Limpa atributos anteriores&lt;br /&gt;
        abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
&lt;br /&gt;
        if (type === 'habilidades') {&lt;br /&gt;
            abilityNameText.textContent = item.nome || '';&lt;br /&gt;
            abilityLevelText.textContent = `Level: ${item.level || ''}`;&lt;br /&gt;
            abilityDesc.textContent = item.desc || '';&lt;br /&gt;
&lt;br /&gt;
            // Renderizar atributos dinamicamente&lt;br /&gt;
            if (item.atr) {&lt;br /&gt;
                const atrParts = item.atr.split(',').map(p =&amp;gt; p.trim());&lt;br /&gt;
                for (let i = 0; i &amp;lt; atrParts.length; i += 2) {&lt;br /&gt;
                    const iconPath = atrParts[i];&lt;br /&gt;
                    const value = atrParts[i + 1];&lt;br /&gt;
&lt;br /&gt;
                    if (iconPath &amp;amp;&amp;amp; value !== undefined &amp;amp;&amp;amp; value !== null) { // Verifique se o valor não é null/undefined&lt;br /&gt;
                        const attributeDiv = document.createElement('div');&lt;br /&gt;
                        const attributeImg = document.createElement('img');&lt;br /&gt;
                        attributeImg.src = iconPath;&lt;br /&gt;
                        attributeImg.alt = &amp;quot;Atributo&amp;quot;;&lt;br /&gt;
                        attributeDiv.appendChild(attributeImg);&lt;br /&gt;
                        attributeDiv.appendChild(document.createTextNode(value));&lt;br /&gt;
                        abilityAttributesContainer.appendChild(attributeDiv);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (item.video) {&lt;br /&gt;
                abilityVideoSource.src = item.video;&lt;br /&gt;
                abilityVideo.load();&lt;br /&gt;
                abilityVideo.style.display = 'block';&lt;br /&gt;
            } else {&lt;br /&gt;
                abilityVideoSource.src = '';&lt;br /&gt;
                abilityVideo.style.display = 'none';&lt;br /&gt;
            }&lt;br /&gt;
        } else { // Skins&lt;br /&gt;
            abilityNameText.textContent = item.nome || '';&lt;br /&gt;
            abilityLevelText.textContent = '';&lt;br /&gt;
            abilityDesc.textContent = item.desc || '';&lt;br /&gt;
            abilityVideoSource.src = '';&lt;br /&gt;
            abilityVideo.style.display = 'none';&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Função para selecionar um item (habilidade ou skin)&lt;br /&gt;
    const selectItem = (index, type) =&amp;gt; {&lt;br /&gt;
        const items = type === 'habilidades' ? habilidades : skins;&lt;br /&gt;
        const selectedItem = items[index];&lt;br /&gt;
&lt;br /&gt;
        // Atualizar classe 'active' nos ícones&lt;br /&gt;
        document.querySelectorAll('.cuadro').forEach(cuadro =&amp;gt; {&lt;br /&gt;
            cuadro.classList.remove('active');&lt;br /&gt;
        });&lt;br /&gt;
        const activeCuadro = cuadrosContainer.querySelector(`.cuadro[data-index=&amp;quot;${index}&amp;quot;][data-type=&amp;quot;${type}&amp;quot;]`);&lt;br /&gt;
        if (activeCuadro) {&lt;br /&gt;
            activeCuadro.classList.add('active');&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        displayItemDetails(selectedItem, type);&lt;br /&gt;
        currentActiveIndex = index;&lt;br /&gt;
        currentActiveTab = type;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Event Listeners para as abas&lt;br /&gt;
    tabBtns.forEach(btn =&amp;gt; {&lt;br /&gt;
        btn.addEventListener('click', () =&amp;gt; {&lt;br /&gt;
            const tabType = btn.dataset.tab;&lt;br /&gt;
&lt;br /&gt;
            // Remover 'active' de todas as abas&lt;br /&gt;
            tabBtns.forEach(b =&amp;gt; b.classList.remove('active'));&lt;br /&gt;
            // Adicionar 'active' à aba clicada&lt;br /&gt;
            btn.classList.add('active');&lt;br /&gt;
&lt;br /&gt;
            if (tabType === 'habilidades') {&lt;br /&gt;
                renderIcons(habilidades, 'habilidades');&lt;br /&gt;
                if (habilidades.length &amp;gt; 0) {&lt;br /&gt;
                    selectItem(0, 'habilidades');&lt;br /&gt;
                } else {&lt;br /&gt;
                    abilityNameText.textContent = 'Nenhuma Habilidade';&lt;br /&gt;
                    abilityLevelText.textContent = '';&lt;br /&gt;
                    abilityDesc.textContent = '';&lt;br /&gt;
                    abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
                    abilityVideoSource.src = '';&lt;br /&gt;
                    abilityVideo.style.display = 'none';&lt;br /&gt;
                }&lt;br /&gt;
            } else { // Skins&lt;br /&gt;
                renderIcons(skins, 'skins');&lt;br /&gt;
                if (skins.length &amp;gt; 0) {&lt;br /&gt;
                    selectItem(0, 'skins');&lt;br /&gt;
                } else {&lt;br /&gt;
                    abilityNameText.textContent = 'Nenhuma Skin';&lt;br /&gt;
                    abilityLevelText.textContent = '';&lt;br /&gt;
                    abilityDesc.textContent = '';&lt;br /&gt;
                    abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
                    abilityVideoSource.src = '';&lt;br /&gt;
                    abilityVideo.style.display = 'none';&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Inicialização: renderizar habilidades e selecionar a primeira por padrão&lt;br /&gt;
    if (habilidades.length &amp;gt; 0) {&lt;br /&gt;
        renderIcons(habilidades, 'habilidades');&lt;br /&gt;
        selectItem(0, 'habilidades');&lt;br /&gt;
    } else if (skins.length &amp;gt; 0) {&lt;br /&gt;
        document.querySelector('.tab-btn[data-tab=&amp;quot;skins&amp;quot;]').click();&lt;br /&gt;
    } else {&lt;br /&gt;
        cuadrosContainer.innerHTML = '&amp;lt;p style=&amp;quot;color: #bbb; text-align: center; width: 100%;&amp;quot;&amp;gt;Nenhum conteúdo disponível.&amp;lt;/p&amp;gt;';&lt;br /&gt;
        abilityNameText.textContent = 'Nenhum Conteúdo';&lt;br /&gt;
        abilityLevelText.textContent = '';&lt;br /&gt;
        abilityDesc.textContent = '';&lt;br /&gt;
        abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
        abilityVideoSource.src = '';&lt;br /&gt;
        abilityVideo.style.display = 'none';&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
== Widget:Persona ==&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
    const personaData = document.getElementById('persona-data');&lt;br /&gt;
    if (!personaData) {&lt;br /&gt;
        console.error('Persona widget: não se encontrou #persona-data!');&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Extração de dados&lt;br /&gt;
    const nome = personaData.dataset.nome || '';&lt;br /&gt;
    const tier = personaData.dataset.tier || '';&lt;br /&gt;
    const classe = personaData.dataset.classe || '';&lt;br /&gt;
    const image = personaData.dataset.image || '';&lt;br /&gt;
    let habilidades = [];&lt;br /&gt;
    let skins = [];&lt;br /&gt;
&lt;br /&gt;
    // Função auxiliar para parsear strings raw em objetos&lt;br /&gt;
    const parseRawString = (rawString) =&amp;gt; {&lt;br /&gt;
        const data = [];&lt;br /&gt;
        if (!rawString) return data;&lt;br /&gt;
&lt;br /&gt;
        const lines = rawString.split('||').map(line =&amp;gt; line.trim()).filter(Boolean);&lt;br /&gt;
&lt;br /&gt;
        lines.forEach(line =&amp;gt; {&lt;br /&gt;
            const parts = line.split('\n').map(p =&amp;gt; p.trim()).filter(Boolean);&lt;br /&gt;
            const item = {};&lt;br /&gt;
            parts.forEach(part =&amp;gt; {&lt;br /&gt;
                if (part.startsWith('')) {&lt;br /&gt;
                    // Ignorar comentários&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                const eqIndex = part.indexOf('=');&lt;br /&gt;
                if (eqIndex &amp;gt; -1) {&lt;br /&gt;
                    const key = part.substring(0, eqIndex).trim();&lt;br /&gt;
                    const value = part.substring(eqIndex + 1).trim();&lt;br /&gt;
                    item[key] = value;&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            if (Object.keys(item).length &amp;gt; 0) {&lt;br /&gt;
                data.push(item);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
        return data;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    habilidades = parseRawString(personaData.dataset.habilidadesraw);&lt;br /&gt;
    skins = parseRawString(personaData.dataset.skinsraw);&lt;br /&gt;
&lt;br /&gt;
    // Referências aos elementos HTML&lt;br /&gt;
    const tabBtns = document.querySelectorAll('.persona-tabs .tab-btn');&lt;br /&gt;
    const cuadrosContainer = document.querySelector('.cuadros-container');&lt;br /&gt;
    const abilityNameText = document.querySelector('.descripcion-container .ability-name-text');&lt;br /&gt;
    const abilityLevelText = document.querySelector('.descripcion-container .ability-level-text');&lt;br /&gt;
    const abilityDesc = document.querySelector('.descripcion-container .ability-desc');&lt;br /&gt;
    const abilityVideo = document.querySelector('.descripcion-container .ability-video');&lt;br /&gt;
    const abilityVideoSource = abilityVideo.querySelector('source');&lt;br /&gt;
    const abilityAttributesContainer = document.querySelector('.descripcion-container .ability-attributes');&lt;br /&gt;
    const artPersonagem = document.querySelector('.art-personagem');&lt;br /&gt;
    const personaName = document.querySelector('.persona-name');&lt;br /&gt;
    const personaTier = document.querySelector('.persona-tier');&lt;br /&gt;
    const personaClass = document.querySelector('.persona-class');&lt;br /&gt;
&lt;br /&gt;
    // Preencher informações do header do personagem&lt;br /&gt;
    if (artPersonagem) artPersonagem.src = image;&lt;br /&gt;
    if (personaName) personaName.textContent = nome;&lt;br /&gt;
    if (personaTier) personaTier.textContent = `Tier: ${tier}`;&lt;br /&gt;
    if (personaClass) personaClass.textContent = `Classe: ${classe}`;&lt;br /&gt;
&lt;br /&gt;
    // Estado atual&lt;br /&gt;
    let currentActiveTab = 'habilidades';&lt;br /&gt;
    let currentActiveIndex = 0; // Índice da habilidade/skin ativa&lt;br /&gt;
&lt;br /&gt;
    // Função para renderizar os ícones (habilidades ou skins)&lt;br /&gt;
    const renderIcons = (items, type) =&amp;gt; {&lt;br /&gt;
        cuadrosContainer.innerHTML = ''; // Limpar antes de renderizar&lt;br /&gt;
        items.forEach((item, index) =&amp;gt; {&lt;br /&gt;
            const cuadro = document.createElement('div');&lt;br /&gt;
            cuadro.classList.add('cuadro');&lt;br /&gt;
            cuadro.style.backgroundImage = `url('${item.icon || item.image}')`;&lt;br /&gt;
            cuadro.dataset.index = index;&lt;br /&gt;
            cuadro.dataset.type = type;&lt;br /&gt;
&lt;br /&gt;
            cuadro.addEventListener('click', () =&amp;gt; {&lt;br /&gt;
                selectItem(index, type);&lt;br /&gt;
            });&lt;br /&gt;
            cuadrosContainer.appendChild(cuadro);&lt;br /&gt;
        });&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Função para exibir detalhes da habilidade/skin&lt;br /&gt;
    const displayItemDetails = (item, type) =&amp;gt; {&lt;br /&gt;
        // Limpa atributos anteriores&lt;br /&gt;
        abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
&lt;br /&gt;
        if (type === 'habilidades') {&lt;br /&gt;
            abilityNameText.textContent = item.nome || '';&lt;br /&gt;
            abilityLevelText.textContent = `Level: ${item.level || ''}`;&lt;br /&gt;
            abilityDesc.textContent = item.desc || '';&lt;br /&gt;
&lt;br /&gt;
            // Renderizar atributos dinamicamente&lt;br /&gt;
            if (item.atr) {&lt;br /&gt;
                const atrParts = item.atr.split(',').map(p =&amp;gt; p.trim());&lt;br /&gt;
                for (let i = 0; i &amp;lt; atrParts.length; i += 2) {&lt;br /&gt;
                    const iconPath = atrParts[i];&lt;br /&gt;
                    const value = atrParts[i + 1];&lt;br /&gt;
&lt;br /&gt;
                    if (iconPath &amp;amp;&amp;amp; value !== undefined &amp;amp;&amp;amp; value !== null) { // Verifique se o valor não é null/undefined&lt;br /&gt;
                        const attributeDiv = document.createElement('div');&lt;br /&gt;
                        const attributeImg = document.createElement('img');&lt;br /&gt;
                        attributeImg.src = iconPath;&lt;br /&gt;
                        attributeImg.alt = &amp;quot;Atributo&amp;quot;;&lt;br /&gt;
                        attributeDiv.appendChild(attributeImg);&lt;br /&gt;
                        attributeDiv.appendChild(document.createTextNode(value));&lt;br /&gt;
                        abilityAttributesContainer.appendChild(attributeDiv);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (item.video) {&lt;br /&gt;
                abilityVideoSource.src = item.video;&lt;br /&gt;
                abilityVideo.load();&lt;br /&gt;
                abilityVideo.style.display = 'block';&lt;br /&gt;
            } else {&lt;br /&gt;
                abilityVideoSource.src = '';&lt;br /&gt;
                abilityVideo.style.display = 'none';&lt;br /&gt;
            }&lt;br /&gt;
        } else { // Skins&lt;br /&gt;
            abilityNameText.textContent = item.nome || '';&lt;br /&gt;
            abilityLevelText.textContent = '';&lt;br /&gt;
            abilityDesc.textContent = item.desc || '';&lt;br /&gt;
            abilityVideoSource.src = '';&lt;br /&gt;
            abilityVideo.style.display = 'none';&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Função para selecionar um item (habilidade ou skin)&lt;br /&gt;
    const selectItem = (index, type) =&amp;gt; {&lt;br /&gt;
        const items = type === 'habilidades' ? habilidades : skins;&lt;br /&gt;
        const selectedItem = items[index];&lt;br /&gt;
&lt;br /&gt;
        // Atualizar classe 'active' nos ícones&lt;br /&gt;
        document.querySelectorAll('.cuadro').forEach(cuadro =&amp;gt; {&lt;br /&gt;
            cuadro.classList.remove('active');&lt;br /&gt;
        });&lt;br /&gt;
        const activeCuadro = cuadrosContainer.querySelector(`.cuadro[data-index=&amp;quot;${index}&amp;quot;][data-type=&amp;quot;${type}&amp;quot;]`);&lt;br /&gt;
        if (activeCuadro) {&lt;br /&gt;
            activeCuadro.classList.add('active');&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        displayItemDetails(selectedItem, type);&lt;br /&gt;
        currentActiveIndex = index;&lt;br /&gt;
        currentActiveTab = type;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Event Listeners para as abas&lt;br /&gt;
    tabBtns.forEach(btn =&amp;gt; {&lt;br /&gt;
        btn.addEventListener('click', () =&amp;gt; {&lt;br /&gt;
            const tabType = btn.dataset.tab;&lt;br /&gt;
&lt;br /&gt;
            // Remover 'active' de todas as abas&lt;br /&gt;
            tabBtns.forEach(b =&amp;gt; b.classList.remove('active'));&lt;br /&gt;
            // Adicionar 'active' à aba clicada&lt;br /&gt;
            btn.classList.add('active');&lt;br /&gt;
&lt;br /&gt;
            if (tabType === 'habilidades') {&lt;br /&gt;
                renderIcons(habilidades, 'habilidades');&lt;br /&gt;
                if (habilidades.length &amp;gt; 0) {&lt;br /&gt;
                    selectItem(0, 'habilidades');&lt;br /&gt;
                } else {&lt;br /&gt;
                    abilityNameText.textContent = 'Nenhuma Habilidade';&lt;br /&gt;
                    abilityLevelText.textContent = '';&lt;br /&gt;
                    abilityDesc.textContent = '';&lt;br /&gt;
                    abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
                    abilityVideoSource.src = '';&lt;br /&gt;
                    abilityVideo.style.display = 'none';&lt;br /&gt;
                }&lt;br /&gt;
            } else { // Skins&lt;br /&gt;
                renderIcons(skins, 'skins');&lt;br /&gt;
                if (skins.length &amp;gt; 0) {&lt;br /&gt;
                    selectItem(0, 'skins');&lt;br /&gt;
                } else {&lt;br /&gt;
                    abilityNameText.textContent = 'Nenhuma Skin';&lt;br /&gt;
                    abilityLevelText.textContent = '';&lt;br /&gt;
                    abilityDesc.textContent = '';&lt;br /&gt;
                    abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
                    abilityVideoSource.src = '';&lt;br /&gt;
                    abilityVideo.style.display = 'none';&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Inicialização: renderizar habilidades e selecionar a primeira por padrão&lt;br /&gt;
    if (habilidades.length &amp;gt; 0) {&lt;br /&gt;
        renderIcons(habilidades, 'habilidades');&lt;br /&gt;
        selectItem(0, 'habilidades');&lt;br /&gt;
    } else if (skins.length &amp;gt; 0) {&lt;br /&gt;
        document.querySelector('.tab-btn[data-tab=&amp;quot;skins&amp;quot;]').click();&lt;br /&gt;
    } else {&lt;br /&gt;
        cuadrosContainer.innerHTML = '&amp;lt;p style=&amp;quot;color: #bbb; text-align: center; width: 100%;&amp;quot;&amp;gt;Nenhum conteúdo disponível.&amp;lt;/p&amp;gt;';&lt;br /&gt;
        abilityNameText.textContent = 'Nenhum Conteúdo';&lt;br /&gt;
        abilityLevelText.textContent = '';&lt;br /&gt;
        abilityDesc.textContent = '';&lt;br /&gt;
        abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
        abilityVideoSource.src = '';&lt;br /&gt;
        abilityVideo.style.display = 'none';&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
== Predefinição:Persona ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{#tag:div|&lt;br /&gt;
&amp;lt;div class=&amp;quot;persona-container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;persona-header&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;img class=&amp;quot;art-personagem&amp;quot; src=&amp;quot;{{{image|}}}&amp;quot; alt=&amp;quot;Arte do personagem&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;persona-info&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 class=&amp;quot;persona-name&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
            &amp;lt;p class=&amp;quot;persona-tier&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
            &amp;lt;p class=&amp;quot;persona-class&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;persona-tabs&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;tab-btn active&amp;quot; data-tab=&amp;quot;habilidades&amp;quot;&amp;gt;Habilidades&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;button class=&amp;quot;tab-btn&amp;quot; data-tab=&amp;quot;skins&amp;quot;&amp;gt;Skins&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;persona-data&amp;quot;&lt;br /&gt;
         data-nome=&amp;quot;{{{Nome|}}}&amp;quot;&lt;br /&gt;
         data-tier=&amp;quot;{{{tier|}}}&amp;quot;&lt;br /&gt;
         data-classe=&amp;quot;{{{classe|}}}&amp;quot;&lt;br /&gt;
         data-image=&amp;quot;{{{image|}}}&amp;quot;&lt;br /&gt;
         data-habilidadesraw=&amp;quot;{{{habilidadesRaw|}}}&amp;quot;&lt;br /&gt;
         data-skinsraw=&amp;quot;{{{skinsRaw|}}}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;habilidades-details&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;cuadros-container habilidades-container&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;descripcion-container&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3 class=&amp;quot;ability-name-level&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;ability-name-text&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;ability-level-text&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;ability-attributes&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;p class=&amp;quot;ability-desc&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;ability-video-container&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;video class=&amp;quot;ability-video&amp;quot; controls poster=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;source src=&amp;quot;&amp;quot; type=&amp;quot;video/webm&amp;quot;&amp;gt;&lt;br /&gt;
                    Seu navegador não suporta o elemento de vídeo.&lt;br /&gt;
                &amp;lt;/video&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&amp;lt;templatestyles src=&amp;quot;Predefinição:Persona/styles.css&amp;quot; /&amp;gt;&amp;lt;widget name=&amp;quot;Persona&amp;quot; /&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentação da Predefinição 'Persona'}}&lt;br /&gt;
Esta predefinição gera uma ficha interativa de personagem, conectada a um widget em JavaScript que exibe habilidades e skins de forma dinâmica.&lt;br /&gt;
&lt;br /&gt;
== Exemplo para Copiar e Colar ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Persona&lt;br /&gt;
|Nome=Franky (Timeskip)&lt;br /&gt;
|tier=Diamante&lt;br /&gt;
|classe=Atirador/Tanque&lt;br /&gt;
|image=Caminho/Para/ImagemDoFranky.png&lt;br /&gt;
|habilidadesRaw=&amp;lt;nowiki&amp;gt;&lt;br /&gt;
nome=Rocket Launcher&lt;br /&gt;
icon=/caminho/para/icone_rocket_launcher.png&lt;br /&gt;
level=70&lt;br /&gt;
desc=Usando a tecnologia que adquiriu em Bajimroa Island, Franky usa seus grandes ombros, dos quais ele libera uma linha (Raffle Franky 1/?) revelando três pequenos, porém poderosos, mísseis que serão lançados no oponente. Causa dano em uma grande área e para o oponente. Oponentes que estiverem no caminho dos mísseis recebem apenas 75% de dano e não são punidos.&lt;br /&gt;
atr=/caminho/para/icone_cooldown.png,35 SEG,/caminho/para/icone_custo.png,-,/caminho/para/icone_alcance.png,40,/caminho/para/icone_dano.png,35&lt;br /&gt;
video=/caminho/para/video_rocket_launcher.webm&lt;br /&gt;
||&lt;br /&gt;
nome=Punch de Aço&lt;br /&gt;
icon=/caminho/para/icone_punch.png&lt;br /&gt;
level=60&lt;br /&gt;
desc=Franky desfere um soco poderoso, causando dano massivo e atordoando o alvo por um breve período.&lt;br /&gt;
atr=/caminho/para/icone_cooldown.png,20 SEG,/caminho/para/icone_custo.png,50,/caminho/para/icone_alcance.png,5,/caminho/para/icone_dano.png,120&lt;br /&gt;
video=/caminho/para/video_punch.webm&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|skinsRaw=&amp;lt;nowiki&amp;gt;&lt;br /&gt;
nome=Skin Padrão&lt;br /&gt;
image=/caminho/para/skin_padrao.png&lt;br /&gt;
desc=Aparência original de Franky.&lt;br /&gt;
||&lt;br /&gt;
nome=Skin de Férias&lt;br /&gt;
image=/caminho/para/skin_ferias.png&lt;br /&gt;
desc=Franky pronto para relaxar na praia.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ttuzu</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio_Discuss%C3%A3o:Ttuzu&amp;diff=35212</id>
		<title>Usuário Discussão:Ttuzu</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio_Discuss%C3%A3o:Ttuzu&amp;diff=35212"/>
		<updated>2025-06-10T22:31:41Z</updated>

		<summary type="html">&lt;p&gt;Ttuzu: /* Predefinição:Persona/styles.css */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(function () {&lt;br /&gt;
    const personaData = document.getElementById('persona-data');&lt;br /&gt;
    if (!personaData) {&lt;br /&gt;
        console.error('Persona widget: não se encontrou #persona-data!');&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Extração de dados&lt;br /&gt;
    const nome = personaData.dataset.nome || '';&lt;br /&gt;
    const tier = personaData.dataset.tier || '';&lt;br /&gt;
    const classe = personaData.dataset.classe || '';&lt;br /&gt;
    const image = personaData.dataset.image || '';&lt;br /&gt;
    let habilidades = [];&lt;br /&gt;
    let skins = [];&lt;br /&gt;
&lt;br /&gt;
    // Função auxiliar para parsear strings raw em objetos&lt;br /&gt;
    const parseRawString = (rawString) =&amp;gt; {&lt;br /&gt;
        const data = [];&lt;br /&gt;
        if (!rawString) return data;&lt;br /&gt;
&lt;br /&gt;
        const lines = rawString.split('||').map(line =&amp;gt; line.trim()).filter(Boolean);&lt;br /&gt;
&lt;br /&gt;
        lines.forEach(line =&amp;gt; {&lt;br /&gt;
            const parts = line.split('\n').map(p =&amp;gt; p.trim()).filter(Boolean);&lt;br /&gt;
            const item = {};&lt;br /&gt;
            parts.forEach(part =&amp;gt; {&lt;br /&gt;
                if (part.startsWith('')) {&lt;br /&gt;
                    // Ignorar comentários&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                const eqIndex = part.indexOf('=');&lt;br /&gt;
                if (eqIndex &amp;gt; -1) {&lt;br /&gt;
                    const key = part.substring(0, eqIndex).trim();&lt;br /&gt;
                    const value = part.substring(eqIndex + 1).trim();&lt;br /&gt;
                    item[key] = value;&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            if (Object.keys(item).length &amp;gt; 0) {&lt;br /&gt;
                data.push(item);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
        return data;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    habilidades = parseRawString(personaData.dataset.habilidadesraw);&lt;br /&gt;
    skins = parseRawString(personaData.dataset.skinsraw);&lt;br /&gt;
&lt;br /&gt;
    // Referências aos elementos HTML&lt;br /&gt;
    const tabBtns = document.querySelectorAll('.persona-tabs .tab-btn');&lt;br /&gt;
    const cuadrosContainer = document.querySelector('.cuadros-container');&lt;br /&gt;
    const abilityNameText = document.querySelector('.descripcion-container .ability-name-text');&lt;br /&gt;
    const abilityLevelText = document.querySelector('.descripcion-container .ability-level-text');&lt;br /&gt;
    const abilityDesc = document.querySelector('.descripcion-container .ability-desc');&lt;br /&gt;
    const abilityVideo = document.querySelector('.descripcion-container .ability-video');&lt;br /&gt;
    const abilityVideoSource = abilityVideo.querySelector('source');&lt;br /&gt;
    const abilityAttributesContainer = document.querySelector('.descripcion-container .ability-attributes');&lt;br /&gt;
    const artPersonagem = document.querySelector('.art-personagem');&lt;br /&gt;
    const personaName = document.querySelector('.persona-name');&lt;br /&gt;
    const personaTier = document.querySelector('.persona-tier');&lt;br /&gt;
    const personaClass = document.querySelector('.persona-class');&lt;br /&gt;
&lt;br /&gt;
    // Preencher informações do header do personagem&lt;br /&gt;
    if (artPersonagem) artPersonagem.src = image;&lt;br /&gt;
    if (personaName) personaName.textContent = nome;&lt;br /&gt;
    if (personaTier) personaTier.textContent = `Tier: ${tier}`;&lt;br /&gt;
    if (personaClass) personaClass.textContent = `Classe: ${classe}`;&lt;br /&gt;
&lt;br /&gt;
    // Estado atual&lt;br /&gt;
    let currentActiveTab = 'habilidades';&lt;br /&gt;
    let currentActiveIndex = 0; // Índice da habilidade/skin ativa&lt;br /&gt;
&lt;br /&gt;
    // Função para renderizar os ícones (habilidades ou skins)&lt;br /&gt;
    const renderIcons = (items, type) =&amp;gt; {&lt;br /&gt;
        cuadrosContainer.innerHTML = ''; // Limpar antes de renderizar&lt;br /&gt;
        items.forEach((item, index) =&amp;gt; {&lt;br /&gt;
            const cuadro = document.createElement('div');&lt;br /&gt;
            cuadro.classList.add('cuadro');&lt;br /&gt;
            cuadro.style.backgroundImage = `url('${item.icon || item.image}')`;&lt;br /&gt;
            cuadro.dataset.index = index;&lt;br /&gt;
            cuadro.dataset.type = type;&lt;br /&gt;
&lt;br /&gt;
            cuadro.addEventListener('click', () =&amp;gt; {&lt;br /&gt;
                selectItem(index, type);&lt;br /&gt;
            });&lt;br /&gt;
            cuadrosContainer.appendChild(cuadro);&lt;br /&gt;
        });&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Função para exibir detalhes da habilidade/skin&lt;br /&gt;
    const displayItemDetails = (item, type) =&amp;gt; {&lt;br /&gt;
        // Limpa atributos anteriores&lt;br /&gt;
        abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
&lt;br /&gt;
        if (type === 'habilidades') {&lt;br /&gt;
            abilityNameText.textContent = item.nome || '';&lt;br /&gt;
            abilityLevelText.textContent = `Level: ${item.level || ''}`;&lt;br /&gt;
            abilityDesc.textContent = item.desc || '';&lt;br /&gt;
&lt;br /&gt;
            // Renderizar atributos dinamicamente&lt;br /&gt;
            if (item.atr) {&lt;br /&gt;
                const atrParts = item.atr.split(',').map(p =&amp;gt; p.trim());&lt;br /&gt;
                for (let i = 0; i &amp;lt; atrParts.length; i += 2) {&lt;br /&gt;
                    const iconPath = atrParts[i];&lt;br /&gt;
                    const value = atrParts[i + 1];&lt;br /&gt;
&lt;br /&gt;
                    if (iconPath &amp;amp;&amp;amp; value !== undefined &amp;amp;&amp;amp; value !== null) { // Verifique se o valor não é null/undefined&lt;br /&gt;
                        const attributeDiv = document.createElement('div');&lt;br /&gt;
                        const attributeImg = document.createElement('img');&lt;br /&gt;
                        attributeImg.src = iconPath;&lt;br /&gt;
                        attributeImg.alt = &amp;quot;Atributo&amp;quot;;&lt;br /&gt;
                        attributeDiv.appendChild(attributeImg);&lt;br /&gt;
                        attributeDiv.appendChild(document.createTextNode(value));&lt;br /&gt;
                        abilityAttributesContainer.appendChild(attributeDiv);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (item.video) {&lt;br /&gt;
                abilityVideoSource.src = item.video;&lt;br /&gt;
                abilityVideo.load();&lt;br /&gt;
                abilityVideo.style.display = 'block';&lt;br /&gt;
            } else {&lt;br /&gt;
                abilityVideoSource.src = '';&lt;br /&gt;
                abilityVideo.style.display = 'none';&lt;br /&gt;
            }&lt;br /&gt;
        } else { // Skins&lt;br /&gt;
            abilityNameText.textContent = item.nome || '';&lt;br /&gt;
            abilityLevelText.textContent = '';&lt;br /&gt;
            abilityDesc.textContent = item.desc || '';&lt;br /&gt;
            abilityVideoSource.src = '';&lt;br /&gt;
            abilityVideo.style.display = 'none';&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Função para selecionar um item (habilidade ou skin)&lt;br /&gt;
    const selectItem = (index, type) =&amp;gt; {&lt;br /&gt;
        const items = type === 'habilidades' ? habilidades : skins;&lt;br /&gt;
        const selectedItem = items[index];&lt;br /&gt;
&lt;br /&gt;
        // Atualizar classe 'active' nos ícones&lt;br /&gt;
        document.querySelectorAll('.cuadro').forEach(cuadro =&amp;gt; {&lt;br /&gt;
            cuadro.classList.remove('active');&lt;br /&gt;
        });&lt;br /&gt;
        const activeCuadro = cuadrosContainer.querySelector(`.cuadro[data-index=&amp;quot;${index}&amp;quot;][data-type=&amp;quot;${type}&amp;quot;]`);&lt;br /&gt;
        if (activeCuadro) {&lt;br /&gt;
            activeCuadro.classList.add('active');&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        displayItemDetails(selectedItem, type);&lt;br /&gt;
        currentActiveIndex = index;&lt;br /&gt;
        currentActiveTab = type;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Event Listeners para as abas&lt;br /&gt;
    tabBtns.forEach(btn =&amp;gt; {&lt;br /&gt;
        btn.addEventListener('click', () =&amp;gt; {&lt;br /&gt;
            const tabType = btn.dataset.tab;&lt;br /&gt;
&lt;br /&gt;
            // Remover 'active' de todas as abas&lt;br /&gt;
            tabBtns.forEach(b =&amp;gt; b.classList.remove('active'));&lt;br /&gt;
            // Adicionar 'active' à aba clicada&lt;br /&gt;
            btn.classList.add('active');&lt;br /&gt;
&lt;br /&gt;
            if (tabType === 'habilidades') {&lt;br /&gt;
                renderIcons(habilidades, 'habilidades');&lt;br /&gt;
                if (habilidades.length &amp;gt; 0) {&lt;br /&gt;
                    selectItem(0, 'habilidades');&lt;br /&gt;
                } else {&lt;br /&gt;
                    abilityNameText.textContent = 'Nenhuma Habilidade';&lt;br /&gt;
                    abilityLevelText.textContent = '';&lt;br /&gt;
                    abilityDesc.textContent = '';&lt;br /&gt;
                    abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
                    abilityVideoSource.src = '';&lt;br /&gt;
                    abilityVideo.style.display = 'none';&lt;br /&gt;
                }&lt;br /&gt;
            } else { // Skins&lt;br /&gt;
                renderIcons(skins, 'skins');&lt;br /&gt;
                if (skins.length &amp;gt; 0) {&lt;br /&gt;
                    selectItem(0, 'skins');&lt;br /&gt;
                } else {&lt;br /&gt;
                    abilityNameText.textContent = 'Nenhuma Skin';&lt;br /&gt;
                    abilityLevelText.textContent = '';&lt;br /&gt;
                    abilityDesc.textContent = '';&lt;br /&gt;
                    abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
                    abilityVideoSource.src = '';&lt;br /&gt;
                    abilityVideo.style.display = 'none';&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Inicialização: renderizar habilidades e selecionar a primeira por padrão&lt;br /&gt;
    if (habilidades.length &amp;gt; 0) {&lt;br /&gt;
        renderIcons(habilidades, 'habilidades');&lt;br /&gt;
        selectItem(0, 'habilidades');&lt;br /&gt;
    } else if (skins.length &amp;gt; 0) {&lt;br /&gt;
        document.querySelector('.tab-btn[data-tab=&amp;quot;skins&amp;quot;]').click();&lt;br /&gt;
    } else {&lt;br /&gt;
        cuadrosContainer.innerHTML = '&amp;lt;p style=&amp;quot;color: #bbb; text-align: center; width: 100%;&amp;quot;&amp;gt;Nenhum conteúdo disponível.&amp;lt;/p&amp;gt;';&lt;br /&gt;
        abilityNameText.textContent = 'Nenhum Conteúdo';&lt;br /&gt;
        abilityLevelText.textContent = '';&lt;br /&gt;
        abilityDesc.textContent = '';&lt;br /&gt;
        abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
        abilityVideoSource.src = '';&lt;br /&gt;
        abilityVideo.style.display = 'none';&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
== Widget:Persona ==&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
    const personaData = document.getElementById('persona-data');&lt;br /&gt;
    if (!personaData) {&lt;br /&gt;
        console.error('Persona widget: não se encontrou #persona-data!');&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Extração de dados&lt;br /&gt;
    const nome = personaData.dataset.nome || '';&lt;br /&gt;
    const tier = personaData.dataset.tier || '';&lt;br /&gt;
    const classe = personaData.dataset.classe || '';&lt;br /&gt;
    const image = personaData.dataset.image || '';&lt;br /&gt;
    let habilidades = [];&lt;br /&gt;
    let skins = [];&lt;br /&gt;
&lt;br /&gt;
    // Função auxiliar para parsear strings raw em objetos&lt;br /&gt;
    const parseRawString = (rawString) =&amp;gt; {&lt;br /&gt;
        const data = [];&lt;br /&gt;
        if (!rawString) return data;&lt;br /&gt;
&lt;br /&gt;
        const lines = rawString.split('||').map(line =&amp;gt; line.trim()).filter(Boolean);&lt;br /&gt;
&lt;br /&gt;
        lines.forEach(line =&amp;gt; {&lt;br /&gt;
            const parts = line.split('\n').map(p =&amp;gt; p.trim()).filter(Boolean);&lt;br /&gt;
            const item = {};&lt;br /&gt;
            parts.forEach(part =&amp;gt; {&lt;br /&gt;
                if (part.startsWith('')) {&lt;br /&gt;
                    // Ignorar comentários&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                const eqIndex = part.indexOf('=');&lt;br /&gt;
                if (eqIndex &amp;gt; -1) {&lt;br /&gt;
                    const key = part.substring(0, eqIndex).trim();&lt;br /&gt;
                    const value = part.substring(eqIndex + 1).trim();&lt;br /&gt;
                    item[key] = value;&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            if (Object.keys(item).length &amp;gt; 0) {&lt;br /&gt;
                data.push(item);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
        return data;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    habilidades = parseRawString(personaData.dataset.habilidadesraw);&lt;br /&gt;
    skins = parseRawString(personaData.dataset.skinsraw);&lt;br /&gt;
&lt;br /&gt;
    // Referências aos elementos HTML&lt;br /&gt;
    const tabBtns = document.querySelectorAll('.persona-tabs .tab-btn');&lt;br /&gt;
    const cuadrosContainer = document.querySelector('.cuadros-container');&lt;br /&gt;
    const abilityNameText = document.querySelector('.descripcion-container .ability-name-text');&lt;br /&gt;
    const abilityLevelText = document.querySelector('.descripcion-container .ability-level-text');&lt;br /&gt;
    const abilityDesc = document.querySelector('.descripcion-container .ability-desc');&lt;br /&gt;
    const abilityVideo = document.querySelector('.descripcion-container .ability-video');&lt;br /&gt;
    const abilityVideoSource = abilityVideo.querySelector('source');&lt;br /&gt;
    const abilityAttributesContainer = document.querySelector('.descripcion-container .ability-attributes');&lt;br /&gt;
    const artPersonagem = document.querySelector('.art-personagem');&lt;br /&gt;
    const personaName = document.querySelector('.persona-name');&lt;br /&gt;
    const personaTier = document.querySelector('.persona-tier');&lt;br /&gt;
    const personaClass = document.querySelector('.persona-class');&lt;br /&gt;
&lt;br /&gt;
    // Preencher informações do header do personagem&lt;br /&gt;
    if (artPersonagem) artPersonagem.src = image;&lt;br /&gt;
    if (personaName) personaName.textContent = nome;&lt;br /&gt;
    if (personaTier) personaTier.textContent = `Tier: ${tier}`;&lt;br /&gt;
    if (personaClass) personaClass.textContent = `Classe: ${classe}`;&lt;br /&gt;
&lt;br /&gt;
    // Estado atual&lt;br /&gt;
    let currentActiveTab = 'habilidades';&lt;br /&gt;
    let currentActiveIndex = 0; // Índice da habilidade/skin ativa&lt;br /&gt;
&lt;br /&gt;
    // Função para renderizar os ícones (habilidades ou skins)&lt;br /&gt;
    const renderIcons = (items, type) =&amp;gt; {&lt;br /&gt;
        cuadrosContainer.innerHTML = ''; // Limpar antes de renderizar&lt;br /&gt;
        items.forEach((item, index) =&amp;gt; {&lt;br /&gt;
            const cuadro = document.createElement('div');&lt;br /&gt;
            cuadro.classList.add('cuadro');&lt;br /&gt;
            cuadro.style.backgroundImage = `url('${item.icon || item.image}')`;&lt;br /&gt;
            cuadro.dataset.index = index;&lt;br /&gt;
            cuadro.dataset.type = type;&lt;br /&gt;
&lt;br /&gt;
            cuadro.addEventListener('click', () =&amp;gt; {&lt;br /&gt;
                selectItem(index, type);&lt;br /&gt;
            });&lt;br /&gt;
            cuadrosContainer.appendChild(cuadro);&lt;br /&gt;
        });&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Função para exibir detalhes da habilidade/skin&lt;br /&gt;
    const displayItemDetails = (item, type) =&amp;gt; {&lt;br /&gt;
        // Limpa atributos anteriores&lt;br /&gt;
        abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
&lt;br /&gt;
        if (type === 'habilidades') {&lt;br /&gt;
            abilityNameText.textContent = item.nome || '';&lt;br /&gt;
            abilityLevelText.textContent = `Level: ${item.level || ''}`;&lt;br /&gt;
            abilityDesc.textContent = item.desc || '';&lt;br /&gt;
&lt;br /&gt;
            // Renderizar atributos dinamicamente&lt;br /&gt;
            if (item.atr) {&lt;br /&gt;
                const atrParts = item.atr.split(',').map(p =&amp;gt; p.trim());&lt;br /&gt;
                for (let i = 0; i &amp;lt; atrParts.length; i += 2) {&lt;br /&gt;
                    const iconPath = atrParts[i];&lt;br /&gt;
                    const value = atrParts[i + 1];&lt;br /&gt;
&lt;br /&gt;
                    if (iconPath &amp;amp;&amp;amp; value !== undefined &amp;amp;&amp;amp; value !== null) { // Verifique se o valor não é null/undefined&lt;br /&gt;
                        const attributeDiv = document.createElement('div');&lt;br /&gt;
                        const attributeImg = document.createElement('img');&lt;br /&gt;
                        attributeImg.src = iconPath;&lt;br /&gt;
                        attributeImg.alt = &amp;quot;Atributo&amp;quot;;&lt;br /&gt;
                        attributeDiv.appendChild(attributeImg);&lt;br /&gt;
                        attributeDiv.appendChild(document.createTextNode(value));&lt;br /&gt;
                        abilityAttributesContainer.appendChild(attributeDiv);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (item.video) {&lt;br /&gt;
                abilityVideoSource.src = item.video;&lt;br /&gt;
                abilityVideo.load();&lt;br /&gt;
                abilityVideo.style.display = 'block';&lt;br /&gt;
            } else {&lt;br /&gt;
                abilityVideoSource.src = '';&lt;br /&gt;
                abilityVideo.style.display = 'none';&lt;br /&gt;
            }&lt;br /&gt;
        } else { // Skins&lt;br /&gt;
            abilityNameText.textContent = item.nome || '';&lt;br /&gt;
            abilityLevelText.textContent = '';&lt;br /&gt;
            abilityDesc.textContent = item.desc || '';&lt;br /&gt;
            abilityVideoSource.src = '';&lt;br /&gt;
            abilityVideo.style.display = 'none';&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Função para selecionar um item (habilidade ou skin)&lt;br /&gt;
    const selectItem = (index, type) =&amp;gt; {&lt;br /&gt;
        const items = type === 'habilidades' ? habilidades : skins;&lt;br /&gt;
        const selectedItem = items[index];&lt;br /&gt;
&lt;br /&gt;
        // Atualizar classe 'active' nos ícones&lt;br /&gt;
        document.querySelectorAll('.cuadro').forEach(cuadro =&amp;gt; {&lt;br /&gt;
            cuadro.classList.remove('active');&lt;br /&gt;
        });&lt;br /&gt;
        const activeCuadro = cuadrosContainer.querySelector(`.cuadro[data-index=&amp;quot;${index}&amp;quot;][data-type=&amp;quot;${type}&amp;quot;]`);&lt;br /&gt;
        if (activeCuadro) {&lt;br /&gt;
            activeCuadro.classList.add('active');&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        displayItemDetails(selectedItem, type);&lt;br /&gt;
        currentActiveIndex = index;&lt;br /&gt;
        currentActiveTab = type;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Event Listeners para as abas&lt;br /&gt;
    tabBtns.forEach(btn =&amp;gt; {&lt;br /&gt;
        btn.addEventListener('click', () =&amp;gt; {&lt;br /&gt;
            const tabType = btn.dataset.tab;&lt;br /&gt;
&lt;br /&gt;
            // Remover 'active' de todas as abas&lt;br /&gt;
            tabBtns.forEach(b =&amp;gt; b.classList.remove('active'));&lt;br /&gt;
            // Adicionar 'active' à aba clicada&lt;br /&gt;
            btn.classList.add('active');&lt;br /&gt;
&lt;br /&gt;
            if (tabType === 'habilidades') {&lt;br /&gt;
                renderIcons(habilidades, 'habilidades');&lt;br /&gt;
                if (habilidades.length &amp;gt; 0) {&lt;br /&gt;
                    selectItem(0, 'habilidades');&lt;br /&gt;
                } else {&lt;br /&gt;
                    abilityNameText.textContent = 'Nenhuma Habilidade';&lt;br /&gt;
                    abilityLevelText.textContent = '';&lt;br /&gt;
                    abilityDesc.textContent = '';&lt;br /&gt;
                    abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
                    abilityVideoSource.src = '';&lt;br /&gt;
                    abilityVideo.style.display = 'none';&lt;br /&gt;
                }&lt;br /&gt;
            } else { // Skins&lt;br /&gt;
                renderIcons(skins, 'skins');&lt;br /&gt;
                if (skins.length &amp;gt; 0) {&lt;br /&gt;
                    selectItem(0, 'skins');&lt;br /&gt;
                } else {&lt;br /&gt;
                    abilityNameText.textContent = 'Nenhuma Skin';&lt;br /&gt;
                    abilityLevelText.textContent = '';&lt;br /&gt;
                    abilityDesc.textContent = '';&lt;br /&gt;
                    abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
                    abilityVideoSource.src = '';&lt;br /&gt;
                    abilityVideo.style.display = 'none';&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Inicialização: renderizar habilidades e selecionar a primeira por padrão&lt;br /&gt;
    if (habilidades.length &amp;gt; 0) {&lt;br /&gt;
        renderIcons(habilidades, 'habilidades');&lt;br /&gt;
        selectItem(0, 'habilidades');&lt;br /&gt;
    } else if (skins.length &amp;gt; 0) {&lt;br /&gt;
        document.querySelector('.tab-btn[data-tab=&amp;quot;skins&amp;quot;]').click();&lt;br /&gt;
    } else {&lt;br /&gt;
        cuadrosContainer.innerHTML = '&amp;lt;p style=&amp;quot;color: #bbb; text-align: center; width: 100%;&amp;quot;&amp;gt;Nenhum conteúdo disponível.&amp;lt;/p&amp;gt;';&lt;br /&gt;
        abilityNameText.textContent = 'Nenhum Conteúdo';&lt;br /&gt;
        abilityLevelText.textContent = '';&lt;br /&gt;
        abilityDesc.textContent = '';&lt;br /&gt;
        abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
        abilityVideoSource.src = '';&lt;br /&gt;
        abilityVideo.style.display = 'none';&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;/div&gt;</summary>
		<author><name>Ttuzu</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio_Discuss%C3%A3o:Ttuzu&amp;diff=35211</id>
		<title>Usuário Discussão:Ttuzu</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio_Discuss%C3%A3o:Ttuzu&amp;diff=35211"/>
		<updated>2025-06-10T22:30:43Z</updated>

		<summary type="html">&lt;p&gt;Ttuzu: /* Widget:Persona */ nova seção&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Predefinição:Persona/styles.css ==&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 1280px) and (min-aspect-ratio: 3/4) {&lt;br /&gt;
    .habilidades-details {&lt;br /&gt;
        flex: 1;&lt;br /&gt;
        display: flex;&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
        gap: 16px;&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        width: 90%;&lt;br /&gt;
        align-self: center;&lt;br /&gt;
        margin-top: 20px;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .habilidades-container {&lt;br /&gt;
        flex-direction: column-reverse;&lt;br /&gt;
        width: 100%;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .cuadros-container {&lt;br /&gt;
        display: flex;&lt;br /&gt;
        flex-wrap: nowrap;&lt;br /&gt;
        gap: 16px;&lt;br /&gt;
        width: 100%;&lt;br /&gt;
        overflow-x: auto;&lt;br /&gt;
        padding-bottom: 8px;&lt;br /&gt;
        margin-bottom: 1%;&lt;br /&gt;
        justify-self: center;&lt;br /&gt;
        justify-content: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .descripcion-container {&lt;br /&gt;
        display: flex;&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
        gap: 10px;&lt;br /&gt;
        flex: 1;&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
        background-color: #2a2a2a;&lt;br /&gt;
        border-radius: 8px;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .descripcion-container h3 {&lt;br /&gt;
        display: flex;&lt;br /&gt;
        align-items: center;&lt;br /&gt;
        justify-content: flex-start;&lt;br /&gt;
        gap: 15px;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        font-size: 1.5em;&lt;br /&gt;
        margin-bottom: 10px;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-name-text {&lt;br /&gt;
        font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-level-text {&lt;br /&gt;
        font-size: 0.8em;&lt;br /&gt;
        color: #bbb;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-attributes {&lt;br /&gt;
        display: flex;&lt;br /&gt;
        align-items: center;&lt;br /&gt;
        gap: 10px;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-attributes div {&lt;br /&gt;
        display: flex;&lt;br /&gt;
        align-items: center;&lt;br /&gt;
        gap: 5px;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        font-size: 0.9em;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-attributes img {&lt;br /&gt;
        width: 24px;&lt;br /&gt;
        height: 24px;&lt;br /&gt;
        vertical-align: middle;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-desc {&lt;br /&gt;
        color: #ccc;&lt;br /&gt;
        line-height: 1.5;&lt;br /&gt;
        font-size: 1.1em;&lt;br /&gt;
        margin-bottom: 15px;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-video-container {&lt;br /&gt;
        width: 100%;&lt;br /&gt;
        position: relative;&lt;br /&gt;
        padding-bottom: 56.25%;&lt;br /&gt;
        height: 0;&lt;br /&gt;
        overflow: hidden;&lt;br /&gt;
        margin-top: auto;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-video {&lt;br /&gt;
        position: absolute;&lt;br /&gt;
        top: 0;&lt;br /&gt;
        left: 0;&lt;br /&gt;
        width: 100%;&lt;br /&gt;
        height: 100%;&lt;br /&gt;
        border-radius: 4px;&lt;br /&gt;
        background-color: #000;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .cuadros-container .cuadro {&lt;br /&gt;
        flex: 0 0 auto;&lt;br /&gt;
        width: 60px;&lt;br /&gt;
        height: 60px;&lt;br /&gt;
        border-radius: 8px;&lt;br /&gt;
        border: 2px solid transparent;&lt;br /&gt;
        cursor: pointer;&lt;br /&gt;
        transition: all 0.2s ease-in-out;&lt;br /&gt;
        background-size: cover;&lt;br /&gt;
        background-position: center;&lt;br /&gt;
        background-color: #333;&lt;br /&gt;
        overflow: hidden;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .cuadros-container .cuadro.active {&lt;br /&gt;
        border-color: #007bff;&lt;br /&gt;
        box-shadow: 0 0 10px rgba(0, 123, 255, 0.6);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.persona-container {&lt;br /&gt;
    max-width: 1200px;&lt;br /&gt;
    margin: 20px auto;&lt;br /&gt;
    background-color: #1a1a1a;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    font-family: sans-serif; /* Usar fonte padrão, ou especificar uma que você importe */&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.5);&lt;br /&gt;
    padding: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.persona-header {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 20px;&lt;br /&gt;
    margin-bottom: 20px;&lt;br /&gt;
    padding-bottom: 20px;&lt;br /&gt;
    border-bottom: 1px solid #333;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.art-personagem {&lt;br /&gt;
    width: 120px;&lt;br /&gt;
    height: 120px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    border: 3px solid #007bff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.persona-info h1 {&lt;br /&gt;
    font-size: 2.5em;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    color: #007bff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.persona-info p {&lt;br /&gt;
    margin: 5px 0;&lt;br /&gt;
    color: #bbb;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.persona-tabs {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    margin-bottom: 20px;&lt;br /&gt;
    border-bottom: 2px solid #333;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tab-btn {&lt;br /&gt;
    background-color: #333;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    padding: 10px 20px;&lt;br /&gt;
    border: none;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    font-size: 1.1em;&lt;br /&gt;
    border-top-left-radius: 6px;&lt;br /&gt;
    border-top-right-radius: 6px;&lt;br /&gt;
    transition: background-color 0.3s ease;&lt;br /&gt;
    margin-right: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tab-btn:hover {&lt;br /&gt;
    background-color: #444;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tab-btn.active {&lt;br /&gt;
    background-color: #007bff;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    border-bottom: 2px solid #007bff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
    .persona-header {&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
        text-align: center;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .persona-info {&lt;br /&gt;
        text-align: center;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .habilidades-details {&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
        width: 95%;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .cuadros-container {&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .cuadros-container .cuadro {&lt;br /&gt;
        width: 50px;&lt;br /&gt;
        height: 50px;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .descripcion-container h3 {&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
        gap: 5px;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-attributes {&lt;br /&gt;
        margin-top: 10px;&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Widget:Persona ==&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
    const personaData = document.getElementById('persona-data');&lt;br /&gt;
    if (!personaData) {&lt;br /&gt;
        console.error('Persona widget: não se encontrou #persona-data!');&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Extração de dados&lt;br /&gt;
    const nome = personaData.dataset.nome || '';&lt;br /&gt;
    const tier = personaData.dataset.tier || '';&lt;br /&gt;
    const classe = personaData.dataset.classe || '';&lt;br /&gt;
    const image = personaData.dataset.image || '';&lt;br /&gt;
    let habilidades = [];&lt;br /&gt;
    let skins = [];&lt;br /&gt;
&lt;br /&gt;
    // Função auxiliar para parsear strings raw em objetos&lt;br /&gt;
    const parseRawString = (rawString) =&amp;gt; {&lt;br /&gt;
        const data = [];&lt;br /&gt;
        if (!rawString) return data;&lt;br /&gt;
&lt;br /&gt;
        const lines = rawString.split('||').map(line =&amp;gt; line.trim()).filter(Boolean);&lt;br /&gt;
&lt;br /&gt;
        lines.forEach(line =&amp;gt; {&lt;br /&gt;
            const parts = line.split('\n').map(p =&amp;gt; p.trim()).filter(Boolean);&lt;br /&gt;
            const item = {};&lt;br /&gt;
            parts.forEach(part =&amp;gt; {&lt;br /&gt;
                if (part.startsWith('')) {&lt;br /&gt;
                    // Ignorar comentários&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                const eqIndex = part.indexOf('=');&lt;br /&gt;
                if (eqIndex &amp;gt; -1) {&lt;br /&gt;
                    const key = part.substring(0, eqIndex).trim();&lt;br /&gt;
                    const value = part.substring(eqIndex + 1).trim();&lt;br /&gt;
                    item[key] = value;&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            if (Object.keys(item).length &amp;gt; 0) {&lt;br /&gt;
                data.push(item);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
        return data;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    habilidades = parseRawString(personaData.dataset.habilidadesraw);&lt;br /&gt;
    skins = parseRawString(personaData.dataset.skinsraw);&lt;br /&gt;
&lt;br /&gt;
    // Referências aos elementos HTML&lt;br /&gt;
    const tabBtns = document.querySelectorAll('.persona-tabs .tab-btn');&lt;br /&gt;
    const cuadrosContainer = document.querySelector('.cuadros-container');&lt;br /&gt;
    const abilityNameText = document.querySelector('.descripcion-container .ability-name-text');&lt;br /&gt;
    const abilityLevelText = document.querySelector('.descripcion-container .ability-level-text');&lt;br /&gt;
    const abilityDesc = document.querySelector('.descripcion-container .ability-desc');&lt;br /&gt;
    const abilityVideo = document.querySelector('.descripcion-container .ability-video');&lt;br /&gt;
    const abilityVideoSource = abilityVideo.querySelector('source');&lt;br /&gt;
    const abilityAttributesContainer = document.querySelector('.descripcion-container .ability-attributes');&lt;br /&gt;
    const artPersonagem = document.querySelector('.art-personagem');&lt;br /&gt;
    const personaName = document.querySelector('.persona-name');&lt;br /&gt;
    const personaTier = document.querySelector('.persona-tier');&lt;br /&gt;
    const personaClass = document.querySelector('.persona-class');&lt;br /&gt;
&lt;br /&gt;
    // Preencher informações do header do personagem&lt;br /&gt;
    if (artPersonagem) artPersonagem.src = image;&lt;br /&gt;
    if (personaName) personaName.textContent = nome;&lt;br /&gt;
    if (personaTier) personaTier.textContent = `Tier: ${tier}`;&lt;br /&gt;
    if (personaClass) personaClass.textContent = `Classe: ${classe}`;&lt;br /&gt;
&lt;br /&gt;
    // Estado atual&lt;br /&gt;
    let currentActiveTab = 'habilidades';&lt;br /&gt;
    let currentActiveIndex = 0; // Índice da habilidade/skin ativa&lt;br /&gt;
&lt;br /&gt;
    // Função para renderizar os ícones (habilidades ou skins)&lt;br /&gt;
    const renderIcons = (items, type) =&amp;gt; {&lt;br /&gt;
        cuadrosContainer.innerHTML = ''; // Limpar antes de renderizar&lt;br /&gt;
        items.forEach((item, index) =&amp;gt; {&lt;br /&gt;
            const cuadro = document.createElement('div');&lt;br /&gt;
            cuadro.classList.add('cuadro');&lt;br /&gt;
            cuadro.style.backgroundImage = `url('${item.icon || item.image}')`;&lt;br /&gt;
            cuadro.dataset.index = index;&lt;br /&gt;
            cuadro.dataset.type = type;&lt;br /&gt;
&lt;br /&gt;
            cuadro.addEventListener('click', () =&amp;gt; {&lt;br /&gt;
                selectItem(index, type);&lt;br /&gt;
            });&lt;br /&gt;
            cuadrosContainer.appendChild(cuadro);&lt;br /&gt;
        });&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Função para exibir detalhes da habilidade/skin&lt;br /&gt;
    const displayItemDetails = (item, type) =&amp;gt; {&lt;br /&gt;
        // Limpa atributos anteriores&lt;br /&gt;
        abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
&lt;br /&gt;
        if (type === 'habilidades') {&lt;br /&gt;
            abilityNameText.textContent = item.nome || '';&lt;br /&gt;
            abilityLevelText.textContent = `Level: ${item.level || ''}`;&lt;br /&gt;
            abilityDesc.textContent = item.desc || '';&lt;br /&gt;
&lt;br /&gt;
            // Renderizar atributos dinamicamente&lt;br /&gt;
            if (item.atr) {&lt;br /&gt;
                const atrParts = item.atr.split(',').map(p =&amp;gt; p.trim());&lt;br /&gt;
                for (let i = 0; i &amp;lt; atrParts.length; i += 2) {&lt;br /&gt;
                    const iconPath = atrParts[i];&lt;br /&gt;
                    const value = atrParts[i + 1];&lt;br /&gt;
&lt;br /&gt;
                    if (iconPath &amp;amp;&amp;amp; value !== undefined &amp;amp;&amp;amp; value !== null) { // Verifique se o valor não é null/undefined&lt;br /&gt;
                        const attributeDiv = document.createElement('div');&lt;br /&gt;
                        const attributeImg = document.createElement('img');&lt;br /&gt;
                        attributeImg.src = iconPath;&lt;br /&gt;
                        attributeImg.alt = &amp;quot;Atributo&amp;quot;;&lt;br /&gt;
                        attributeDiv.appendChild(attributeImg);&lt;br /&gt;
                        attributeDiv.appendChild(document.createTextNode(value));&lt;br /&gt;
                        abilityAttributesContainer.appendChild(attributeDiv);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (item.video) {&lt;br /&gt;
                abilityVideoSource.src = item.video;&lt;br /&gt;
                abilityVideo.load();&lt;br /&gt;
                abilityVideo.style.display = 'block';&lt;br /&gt;
            } else {&lt;br /&gt;
                abilityVideoSource.src = '';&lt;br /&gt;
                abilityVideo.style.display = 'none';&lt;br /&gt;
            }&lt;br /&gt;
        } else { // Skins&lt;br /&gt;
            abilityNameText.textContent = item.nome || '';&lt;br /&gt;
            abilityLevelText.textContent = '';&lt;br /&gt;
            abilityDesc.textContent = item.desc || '';&lt;br /&gt;
            abilityVideoSource.src = '';&lt;br /&gt;
            abilityVideo.style.display = 'none';&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Função para selecionar um item (habilidade ou skin)&lt;br /&gt;
    const selectItem = (index, type) =&amp;gt; {&lt;br /&gt;
        const items = type === 'habilidades' ? habilidades : skins;&lt;br /&gt;
        const selectedItem = items[index];&lt;br /&gt;
&lt;br /&gt;
        // Atualizar classe 'active' nos ícones&lt;br /&gt;
        document.querySelectorAll('.cuadro').forEach(cuadro =&amp;gt; {&lt;br /&gt;
            cuadro.classList.remove('active');&lt;br /&gt;
        });&lt;br /&gt;
        const activeCuadro = cuadrosContainer.querySelector(`.cuadro[data-index=&amp;quot;${index}&amp;quot;][data-type=&amp;quot;${type}&amp;quot;]`);&lt;br /&gt;
        if (activeCuadro) {&lt;br /&gt;
            activeCuadro.classList.add('active');&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        displayItemDetails(selectedItem, type);&lt;br /&gt;
        currentActiveIndex = index;&lt;br /&gt;
        currentActiveTab = type;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Event Listeners para as abas&lt;br /&gt;
    tabBtns.forEach(btn =&amp;gt; {&lt;br /&gt;
        btn.addEventListener('click', () =&amp;gt; {&lt;br /&gt;
            const tabType = btn.dataset.tab;&lt;br /&gt;
&lt;br /&gt;
            // Remover 'active' de todas as abas&lt;br /&gt;
            tabBtns.forEach(b =&amp;gt; b.classList.remove('active'));&lt;br /&gt;
            // Adicionar 'active' à aba clicada&lt;br /&gt;
            btn.classList.add('active');&lt;br /&gt;
&lt;br /&gt;
            if (tabType === 'habilidades') {&lt;br /&gt;
                renderIcons(habilidades, 'habilidades');&lt;br /&gt;
                if (habilidades.length &amp;gt; 0) {&lt;br /&gt;
                    selectItem(0, 'habilidades');&lt;br /&gt;
                } else {&lt;br /&gt;
                    abilityNameText.textContent = 'Nenhuma Habilidade';&lt;br /&gt;
                    abilityLevelText.textContent = '';&lt;br /&gt;
                    abilityDesc.textContent = '';&lt;br /&gt;
                    abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
                    abilityVideoSource.src = '';&lt;br /&gt;
                    abilityVideo.style.display = 'none';&lt;br /&gt;
                }&lt;br /&gt;
            } else { // Skins&lt;br /&gt;
                renderIcons(skins, 'skins');&lt;br /&gt;
                if (skins.length &amp;gt; 0) {&lt;br /&gt;
                    selectItem(0, 'skins');&lt;br /&gt;
                } else {&lt;br /&gt;
                    abilityNameText.textContent = 'Nenhuma Skin';&lt;br /&gt;
                    abilityLevelText.textContent = '';&lt;br /&gt;
                    abilityDesc.textContent = '';&lt;br /&gt;
                    abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
                    abilityVideoSource.src = '';&lt;br /&gt;
                    abilityVideo.style.display = 'none';&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Inicialização: renderizar habilidades e selecionar a primeira por padrão&lt;br /&gt;
    if (habilidades.length &amp;gt; 0) {&lt;br /&gt;
        renderIcons(habilidades, 'habilidades');&lt;br /&gt;
        selectItem(0, 'habilidades');&lt;br /&gt;
    } else if (skins.length &amp;gt; 0) {&lt;br /&gt;
        document.querySelector('.tab-btn[data-tab=&amp;quot;skins&amp;quot;]').click();&lt;br /&gt;
    } else {&lt;br /&gt;
        cuadrosContainer.innerHTML = '&amp;lt;p style=&amp;quot;color: #bbb; text-align: center; width: 100%;&amp;quot;&amp;gt;Nenhum conteúdo disponível.&amp;lt;/p&amp;gt;';&lt;br /&gt;
        abilityNameText.textContent = 'Nenhum Conteúdo';&lt;br /&gt;
        abilityLevelText.textContent = '';&lt;br /&gt;
        abilityDesc.textContent = '';&lt;br /&gt;
        abilityAttributesContainer.innerHTML = '';&lt;br /&gt;
        abilityVideoSource.src = '';&lt;br /&gt;
        abilityVideo.style.display = 'none';&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})();&lt;/div&gt;</summary>
		<author><name>Ttuzu</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio_Discuss%C3%A3o:Ttuzu&amp;diff=35210</id>
		<title>Usuário Discussão:Ttuzu</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio_Discuss%C3%A3o:Ttuzu&amp;diff=35210"/>
		<updated>2025-06-10T22:29:50Z</updated>

		<summary type="html">&lt;p&gt;Ttuzu: /* Predefinição:Persona/styles.css */ nova seção&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Predefinição:Persona/styles.css ==&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 1280px) and (min-aspect-ratio: 3/4) {&lt;br /&gt;
    .habilidades-details {&lt;br /&gt;
        flex: 1;&lt;br /&gt;
        display: flex;&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
        gap: 16px;&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        width: 90%;&lt;br /&gt;
        align-self: center;&lt;br /&gt;
        margin-top: 20px;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .habilidades-container {&lt;br /&gt;
        flex-direction: column-reverse;&lt;br /&gt;
        width: 100%;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .cuadros-container {&lt;br /&gt;
        display: flex;&lt;br /&gt;
        flex-wrap: nowrap;&lt;br /&gt;
        gap: 16px;&lt;br /&gt;
        width: 100%;&lt;br /&gt;
        overflow-x: auto;&lt;br /&gt;
        padding-bottom: 8px;&lt;br /&gt;
        margin-bottom: 1%;&lt;br /&gt;
        justify-self: center;&lt;br /&gt;
        justify-content: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .descripcion-container {&lt;br /&gt;
        display: flex;&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
        gap: 10px;&lt;br /&gt;
        flex: 1;&lt;br /&gt;
        padding: 20px;&lt;br /&gt;
        background-color: #2a2a2a;&lt;br /&gt;
        border-radius: 8px;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .descripcion-container h3 {&lt;br /&gt;
        display: flex;&lt;br /&gt;
        align-items: center;&lt;br /&gt;
        justify-content: flex-start;&lt;br /&gt;
        gap: 15px;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        font-size: 1.5em;&lt;br /&gt;
        margin-bottom: 10px;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-name-text {&lt;br /&gt;
        font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-level-text {&lt;br /&gt;
        font-size: 0.8em;&lt;br /&gt;
        color: #bbb;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-attributes {&lt;br /&gt;
        display: flex;&lt;br /&gt;
        align-items: center;&lt;br /&gt;
        gap: 10px;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-attributes div {&lt;br /&gt;
        display: flex;&lt;br /&gt;
        align-items: center;&lt;br /&gt;
        gap: 5px;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        font-size: 0.9em;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-attributes img {&lt;br /&gt;
        width: 24px;&lt;br /&gt;
        height: 24px;&lt;br /&gt;
        vertical-align: middle;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-desc {&lt;br /&gt;
        color: #ccc;&lt;br /&gt;
        line-height: 1.5;&lt;br /&gt;
        font-size: 1.1em;&lt;br /&gt;
        margin-bottom: 15px;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-video-container {&lt;br /&gt;
        width: 100%;&lt;br /&gt;
        position: relative;&lt;br /&gt;
        padding-bottom: 56.25%;&lt;br /&gt;
        height: 0;&lt;br /&gt;
        overflow: hidden;&lt;br /&gt;
        margin-top: auto;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-video {&lt;br /&gt;
        position: absolute;&lt;br /&gt;
        top: 0;&lt;br /&gt;
        left: 0;&lt;br /&gt;
        width: 100%;&lt;br /&gt;
        height: 100%;&lt;br /&gt;
        border-radius: 4px;&lt;br /&gt;
        background-color: #000;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .cuadros-container .cuadro {&lt;br /&gt;
        flex: 0 0 auto;&lt;br /&gt;
        width: 60px;&lt;br /&gt;
        height: 60px;&lt;br /&gt;
        border-radius: 8px;&lt;br /&gt;
        border: 2px solid transparent;&lt;br /&gt;
        cursor: pointer;&lt;br /&gt;
        transition: all 0.2s ease-in-out;&lt;br /&gt;
        background-size: cover;&lt;br /&gt;
        background-position: center;&lt;br /&gt;
        background-color: #333;&lt;br /&gt;
        overflow: hidden;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .cuadros-container .cuadro.active {&lt;br /&gt;
        border-color: #007bff;&lt;br /&gt;
        box-shadow: 0 0 10px rgba(0, 123, 255, 0.6);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.persona-container {&lt;br /&gt;
    max-width: 1200px;&lt;br /&gt;
    margin: 20px auto;&lt;br /&gt;
    background-color: #1a1a1a;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    font-family: sans-serif; /* Usar fonte padrão, ou especificar uma que você importe */&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.5);&lt;br /&gt;
    padding: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.persona-header {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 20px;&lt;br /&gt;
    margin-bottom: 20px;&lt;br /&gt;
    padding-bottom: 20px;&lt;br /&gt;
    border-bottom: 1px solid #333;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.art-personagem {&lt;br /&gt;
    width: 120px;&lt;br /&gt;
    height: 120px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    border: 3px solid #007bff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.persona-info h1 {&lt;br /&gt;
    font-size: 2.5em;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    color: #007bff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.persona-info p {&lt;br /&gt;
    margin: 5px 0;&lt;br /&gt;
    color: #bbb;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.persona-tabs {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    margin-bottom: 20px;&lt;br /&gt;
    border-bottom: 2px solid #333;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tab-btn {&lt;br /&gt;
    background-color: #333;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    padding: 10px 20px;&lt;br /&gt;
    border: none;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    font-size: 1.1em;&lt;br /&gt;
    border-top-left-radius: 6px;&lt;br /&gt;
    border-top-right-radius: 6px;&lt;br /&gt;
    transition: background-color 0.3s ease;&lt;br /&gt;
    margin-right: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tab-btn:hover {&lt;br /&gt;
    background-color: #444;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tab-btn.active {&lt;br /&gt;
    background-color: #007bff;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    border-bottom: 2px solid #007bff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
    .persona-header {&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
        text-align: center;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .persona-info {&lt;br /&gt;
        text-align: center;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .habilidades-details {&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
        width: 95%;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .cuadros-container {&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .cuadros-container .cuadro {&lt;br /&gt;
        width: 50px;&lt;br /&gt;
        height: 50px;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .descripcion-container h3 {&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
        gap: 5px;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .ability-attributes {&lt;br /&gt;
        margin-top: 10px;&lt;br /&gt;
        justify-content: center;&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Ttuzu</name></author>
	</entry>
	<entry>
		<id>https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio:Ttuzu&amp;diff=35142</id>
		<title>Usuário:Ttuzu</title>
		<link rel="alternate" type="text/html" href="https://wiki.gla.com.br/index.php?title=Usu%C3%A1rio:Ttuzu&amp;diff=35142"/>
		<updated>2025-06-10T16:54:41Z</updated>

		<summary type="html">&lt;p&gt;Ttuzu: Adicionado estilo customizado com animações (fadeIn, bounce) e ajustes visuais em popups e iframes para melhorar a experiência visual ao interagir com ícones no mapa.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;map-container&amp;quot; id=&amp;quot;map&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  const skulls = [&lt;br /&gt;
    { x: 410, y: 220, title: &amp;quot;White Skull&amp;quot;, desc: &amp;quot;Boss: White Skull&amp;lt;br&amp;gt;Área sombria, cuidado com os ataques surpresa!&amp;quot;, icon: &amp;quot;/images/d/dc/Whiteskull.png&amp;quot; },&lt;br /&gt;
    { x: 650, y: 125, title: &amp;quot;Red Fang&amp;quot;, desc: &amp;quot;Boss: Red Fang&amp;lt;br&amp;gt;Possui resistência a fogo. Traga ataques de gelo!&amp;quot;, icon: &amp;quot;/images/d/dc/Whiteskull.png&amp;quot; },&lt;br /&gt;
    { x: 250, y: 410, title: &amp;quot;Void Wraith&amp;quot;, desc: &amp;quot;Boss: Void Wraith&amp;lt;br&amp;gt;Evite ataques diretos. Usa magia de sombras.&amp;quot;, icon: &amp;quot;/images/d/dc/Whiteskull.png&amp;quot; },&lt;br /&gt;
    { x: 248, y: 320, title: &amp;quot;Night Howler&amp;quot;, desc: &amp;quot;Boss: Night Howler&amp;lt;br&amp;gt;Ataca com velocidade e confusão. Use proteção contra atordoamento!&amp;quot;, icon: &amp;quot;/images/d/dc/Whiteskull.png&amp;quot; },&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  const hearts = [&lt;br /&gt;
    { x: 280, y: 210, title: &amp;quot;Cura&amp;quot;, desc: &amp;quot;Cura escondida: Quebre a caixa para obter uma cura.&amp;quot;, icon: &amp;quot;/images/d/d9/Heart.png&amp;quot; },&lt;br /&gt;
    { x: 312, y: 196, title: &amp;quot;Cura&amp;quot;, desc: &amp;quot;Pegue o coração para se curar&amp;quot;, icon: &amp;quot;/images/d/d9/Heart.png&amp;quot; },&lt;br /&gt;
    { x: 245, y: 358, title: &amp;quot;Cura&amp;quot;, desc: &amp;quot;Após o chefe, o jogador com menos vida receberá uma cura automática.&amp;quot;, icon: &amp;quot;/images/d/d9/Heart.png&amp;quot; },&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  const puzzleButton = {&lt;br /&gt;
    x: 244,&lt;br /&gt;
    y: 217,&lt;br /&gt;
    title: &amp;quot;Desafio Puzzle&amp;quot;,&lt;br /&gt;
    desc: `&amp;lt;iframe width=&amp;quot;400&amp;quot; height=&amp;quot;260&amp;quot; src=&amp;quot;https://www.youtube.com/embed/10rhyP32vdw&amp;quot; frameborder=&amp;quot;0&amp;quot; allow=&amp;quot;autoplay; encrypted-media&amp;quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;`,&lt;br /&gt;
    icon: &amp;quot;/images/d/de/Engrenagem.png&amp;quot;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  const map = document.getElementById(&amp;quot;map&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  function createIconWithPopup({ x, y, icon, title, desc }, className) {&lt;br /&gt;
    const iconEl = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
    iconEl.src = icon;&lt;br /&gt;
    iconEl.className = className;&lt;br /&gt;
    iconEl.alt = title;&lt;br /&gt;
    iconEl.title = title;&lt;br /&gt;
    iconEl.style.left = `${(x / 811) * 100}%`;&lt;br /&gt;
    iconEl.style.top = `${(y / 554) * 100}%`;&lt;br /&gt;
&lt;br /&gt;
    const popup = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
    popup.className = &amp;quot;popup&amp;quot;;&lt;br /&gt;
    popup.innerHTML = `&amp;lt;strong&amp;gt;${title}&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;${desc}`;&lt;br /&gt;
    popup.style.left = `calc(${(x / 811) * 100}% + 30px)`;&lt;br /&gt;
    popup.style.top = `calc(${(y / 554) * 100}% - 10px)`;&lt;br /&gt;
&lt;br /&gt;
    iconEl.addEventListener(&amp;quot;click&amp;quot;, (e) =&amp;gt; {&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      popup.style.display = popup.style.display === &amp;quot;block&amp;quot; ? &amp;quot;none&amp;quot; : &amp;quot;block&amp;quot;;&lt;br /&gt;
      iconEl.classList.add(&amp;quot;clicked&amp;quot;);&lt;br /&gt;
      setTimeout(() =&amp;gt; iconEl.classList.remove(&amp;quot;clicked&amp;quot;), 300);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    map.appendChild(iconEl);&lt;br /&gt;
    map.appendChild(popup);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  skulls.forEach(skull =&amp;gt; createIconWithPopup(skull, &amp;quot;skull-icon&amp;quot;));&lt;br /&gt;
  hearts.forEach(heart =&amp;gt; createIconWithPopup(heart, &amp;quot;heart-icon&amp;quot;));&lt;br /&gt;
  createIconWithPopup(puzzleButton, &amp;quot;puzzle-button&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  document.addEventListener(&amp;quot;click&amp;quot;, () =&amp;gt; {&lt;br /&gt;
    document.querySelectorAll(&amp;quot;.popup&amp;quot;).forEach(p =&amp;gt; p.style.display = &amp;quot;none&amp;quot;);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  document.addEventListener(&amp;quot;keydown&amp;quot;, (e) =&amp;gt; {&lt;br /&gt;
    if (e.key === &amp;quot;Escape&amp;quot;) {&lt;br /&gt;
      document.querySelectorAll(&amp;quot;.popup&amp;quot;).forEach(p =&amp;gt; p.style.display = &amp;quot;none&amp;quot;);&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;
  .map-container {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    max-width: 811px;&lt;br /&gt;
    aspect-ratio: 811 / 554;&lt;br /&gt;
    background: url('/images/5/55/SabaodyMap.png') no-repeat center center;&lt;br /&gt;
    background-size: cover;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .skull-icon,&lt;br /&gt;
  .heart-icon,&lt;br /&gt;
  .puzzle-button {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    width: 26px;&lt;br /&gt;
    height: 26px;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    transition: transform 0.2s, filter 0.2s;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .skull-icon:hover,&lt;br /&gt;
  .heart-icon:hover,&lt;br /&gt;
  .puzzle-button:hover {&lt;br /&gt;
    transform: scale(1.3);&lt;br /&gt;
    filter: brightness(1.5);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .popup {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    background: #1e1e1e;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    padding: 10px 14px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    border: 1px solid #444;&lt;br /&gt;
    box-shadow: 0 0 10px rgba(255, 255, 255, 0.1);&lt;br /&gt;
    display: none;&lt;br /&gt;
    z-index: 10;&lt;br /&gt;
    max-width: 500px;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    animation: fadeIn 0.3s ease-out;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .popup iframe {&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  @keyframes fadeIn {&lt;br /&gt;
    from { opacity: 0; transform: translateY(-5px); }&lt;br /&gt;
    to   { opacity: 1; transform: translateY(0); }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .clicked {&lt;br /&gt;
    animation: bounce 0.3s ease-in-out;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  @keyframes bounce {&lt;br /&gt;
    0%   { transform: scale(1); }&lt;br /&gt;
    50%  { transform: scale(1.4); }&lt;br /&gt;
    100% { transform: scale(1); }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ttuzu</name></author>
	</entry>
</feed>