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

De Wiki Gla
Ir para navegação Ir para pesquisar
Linha 3: Linha 3:
         <div class="personaje-topbar">
         <div class="personaje-topbar">
             <div class="personaje-nome-box">
             <div class="personaje-nome-box">
                 <img src="/images/6/63/Franky_ts_medal.png" class="topbar-icon">
                 <img src="/images/6/63/Franky_ts_medal.png" class="topbar-icon" alt="Ícono">
                 <div class="personaje-nome-category">
                 <div class="personaje-nome-category">
                     <div class="nome"></div>
                     <div class="nome"></div>
Linha 9: Linha 9:
                 </div>
                 </div>
             </div>
             </div>
            <div class="topbar-description">Franky (TS) é um personagem do tier diamante.</div>
         </div>
         </div>
        <div class="topbar-description">Franky (TS) é um personagem do tier diamante.</div>
         <div class="personaje-tabs">
         <div class="personaje-tabs">
             <button class="tab-btn" data-tab="arma">Arma</button>
             <button class="tab-btn" data-tab="arma">Arma</button>
Linha 27: Linha 27:
         </div>
         </div>
     </div>
     </div>
 
     <div class="tab-content" id="skins"></div>
     <div class="tab-content" id="skins">
    </div>
</div>
</div>


Linha 35: Linha 33:
     (function () {
     (function () {
         const dataEl = document.getElementById('persona-data');
         const dataEl = document.getElementById('persona-data');
         if (!dataEl) {
         if (!dataEl) return console.error('Persona widget: no se encontró #persona-data');
            console.error('Persona widget: no se encontró #persona-data');
            return;
        }


         // Extração de dados
         // Extracción de datos optimizada
         const nome = dataEl.dataset.nome || '';
         const { nome = '', tier = '', classe = '', image = '', habilidadesRaw = '', skinsRaw = '' } = dataEl.dataset;
        const tier = dataEl.dataset.tier || '';
         const rawHabs = habilidadesRaw.replace(/<!--[\s\S]*?-->/g, '').trim();
        const classe = dataEl.dataset.classe || '';
    const rawSkins = skinsRaw.replace(/<!--[\s\S]*?-->/g, '').trim();
        const image = dataEl.dataset.image || '';
         let habilidades = [];
        let skins = [];


         const tempRawHabs = (dataEl.dataset.habilidadesRaw || '').trim();
         // Procesamiento de habilidades
        let tempRawSkins = (dataEl.dataset.skinsRaw || '').trim();
        const habilidades = rawHabs.split('||').filter(Boolean).map(line => {
        rawSkins = tempRawSkins.replace(/<!--[\s\S]*?-->/g, '').trim();
            rawHabs = tempRawHabs.replace(/<!--[\s\S]*?-->/g, '').trim();
        rawHabs.split('||').forEach(line => {
            if (!line.trim()) return;
 
            const parts = line.split('|').map(x => x.trim()).filter(Boolean);
             const habData = {};
             const habData = {};
             parts.forEach(part => {
             line.split('|').filter(Boolean).forEach(part => {
                 const [key, ...valParts] = part.split('=');
                 const [key, ...valParts] = part.split('=');
                 if (!key || valParts.length === 0) return;
                 if (key && valParts.length) habData[key.trim()] = valParts.join('=').trim();
                habData[key.trim()] = valParts.join('=').trim();
             });
             });


             const { nome, icon, level, desc = '', atr, video = '' } = habData;
             const { nome, icon, level, desc = '', atr, video = '' } = habData;
 
             if (!nome || !icon || !level || !atr) {
             if (nome && icon && level && atr) {
                 return console.warn("Habilidad omitida por falta de campos obligatorios:", line), null;
                habilidades.push({
                    nome,
                    icon,
                    level: parseInt(level),
                    descripcion: desc,
                    atributos: atr,
                    video
                });
            } else {
                 console.warn("Habilidad omitida por falta de campos obligatorios:", line);
             }
             }
        });
             return {
 
                 nome, icon, level: parseInt(level),
        function activarFlechasCarrusel() {
                 descripcion: desc.replace(/'''(.*?)'''/g, '<b>$1</b>'),
             const carousel = document.querySelector('.skins-carousel');
                atributos: atr, video
            const wrapper = document.querySelector('.skins-carousel-wrapper');
             };
            const leftBtn = document.querySelector('.skins-arrow.left');
         }).filter(Boolean);
            const rightBtn = document.querySelector('.skins-arrow.right');
            let isPredictingScroll = false;
 
 
            let isAutoScrolling = false;
 
            function getScrollAmount() {
                return carousel.clientWidth * 0.6;
            }
 
            function hideArrow(btn) {
                 if (!btn.classList.contains('desapareciendo') && btn.style.display !== 'none') {
                    btn.classList.add('desapareciendo');
                    setTimeout(() => {
                        btn.style.display = 'none';
                        btn.classList.remove('desapareciendo');
                    }, 300);
                }
            }
 
            function showArrow(btn) {
                if (btn.style.display === 'none') {
                    btn.style.display = 'inline-block';
                    void btn.offsetWidth;
                }
                btn.classList.remove('desapareciendo');
            }
 
            function setArrowsState(scrollLeft) {
                const maxScrollLeft = carousel.scrollWidth - carousel.clientWidth;
                const hasLeft = scrollLeft > 5;
                const hasRight = scrollLeft < maxScrollLeft - 5;
 
                hasLeft ? showArrow(leftBtn) : hideArrow(leftBtn);
                 hasRight ? showArrow(rightBtn) : hideArrow(rightBtn);
 
                wrapper.classList.toggle('has-left', hasLeft);
                wrapper.classList.toggle('has-right', hasRight);
            }
 
            function handleArrowClick(direction) {
                isPredictingScroll = true; // ✅ Bloquear cualquier reacción externa
 
                const scrollLeft = carousel.scrollLeft;
                const maxScrollLeft = carousel.scrollWidth - carousel.clientWidth;
                const scrollAmount = getScrollAmount();
 
                let nextScroll;
                if (direction === 'left') {
                    nextScroll = Math.max(0, scrollLeft - scrollAmount);
                } else {
                    nextScroll = Math.min(maxScrollLeft, scrollLeft + scrollAmount);
                }
 
                // Mostrar estado anticipado
                setArrowsState(nextScroll);
 
                // Hacer scroll
                carousel.scrollTo({ left: nextScroll, behavior: 'smooth' });
 
                // Esperar a que termine
                let lastScroll = -1;
                let stillCount = 0;
                const wait = setInterval(() => {
                    const current = Math.round(carousel.scrollLeft);
                    if (current === lastScroll) {
                        stillCount++;
                        if (stillCount >= 2) {
                            clearInterval(wait);
                            isPredictingScroll = false; // ✅ Reactivar después de terminar
                            setArrowsState(current);
                        }
                    } else {
                        lastScroll = current;
                        stillCount = 0;
                    }
                }, 50);
            }
 
 
 
            carousel.addEventListener('scroll', () => {
                if (isPredictingScroll) return;
                setArrowsState(carousel.scrollLeft);
            });
 
            new ResizeObserver(() => {
                if (isPredictingScroll) return;
                setArrowsState(carousel.scrollLeft);
            }).observe(carousel);
 
 
            // 🛫 Inicialización
            leftBtn.addEventListener('click', () => handleArrowClick('left'));
            rightBtn.addEventListener('click', () => handleArrowClick('right'));
             setArrowsState(carousel.scrollLeft);
         }
 
 
 
        rawSkins.split('||').forEach(line => {
            if (!line.trim()) return;


        // Procesamiento de skins
        const skins = rawSkins.split('||').filter(Boolean).map(line => {
             const obj = {};
             const obj = {};
             line.split('|').forEach(part => {
             line.split('|').filter(Boolean).forEach(part => {
                 const [key, ...rest] = part.split('=');
                 const [key, ...rest] = part.split('=');
                 if (key && rest.length) {
                 if (key && rest.length) obj[key.trim()] = rest.join('=').trim();
                    obj[key.trim()] = rest.join('=').trim();
                }
             });
             });
            return obj.image && obj.tooltip ? { image: obj.image, tooltip: obj.tooltip } :
                (console.error("Error en la skin (falta image o tooltip):", line), null);
        }).filter(Boolean);


            if (obj.image && obj.tooltip) {
        // Asignación de tier
                skins.push({ image: obj.image, tooltip: obj.tooltip });
        const tierClass = ({
             } else {
            'bronze': 'tier-bronze', 'bronce': 'tier-bronze',
                console.error("Error en la skin (falta image o tooltip):", line);
             'silver': 'tier-silver', 'prata': 'tier-silver',
             }
            'gold': 'tier-gold', 'ouro': 'tier-gold',
         });
             'diamond': 'tier-diamond', 'diamante': 'tier-diamond'
 
         })[tier.toLowerCase()] || '';
        const tierLower = tier.toLowerCase();
        let tierClass = '';


        // Actualización del DOM
         document.querySelector('.nome').textContent = nome;
         document.querySelector('.nome').textContent = nome;
         document.querySelector('img.art-personaje').src = image;
         document.querySelector('img.art-personaje').src = image;
        if (tierClass) document.querySelector('.personaje-box').classList.add(tierClass);


         const buttons = document.querySelectorAll('.tab-btn');
         // Manejo de pestañas
         const contents = document.querySelectorAll('.tab-content');
         document.querySelectorAll('.tab-btn').forEach(btn => {
        buttons.forEach(btn => {
             btn.addEventListener('click', () => {
             btn.addEventListener('click', () => {
                 buttons.forEach(b => b.classList.remove('active'));
                 document.querySelectorAll('.tab-btn, .tab-content').forEach(el =>
                contents.forEach(c => c.classList.remove('active'));
                    el.classList.remove('active'));
                 btn.classList.add('active');
                 btn.classList.add('active');
                 document.getElementById(btn.dataset.tab).classList.add('active');
                 document.getElementById(btn.dataset.tab).classList.add('active');
Linha 218: Linha 93:
         });
         });


        switch (tierLower) {
         // Renderización de skins
            case 'bronze':
            case 'bronce':
                tierClass = 'tier-bronze';
                break;
            case 'silver':
            case 'prata':
                tierClass = 'tier-silver';
                break;
            case 'gold':
            case 'ouro':
                tierClass = 'tier-gold';
                break;
            case 'diamond':
            case 'diamante':
                tierClass = 'tier-diamond';
                break;
        }
 
        if (tierClass) {
            document.querySelector('.personaje-box').classList.add(tierClass);
        }
 
         // Render skins
         document.getElementById('skins').innerHTML = generarHTMLSkins(skins);
         document.getElementById('skins').innerHTML = generarHTMLSkins(skins);
         activarFlechasCarrusel();
         activarFlechasCarrusel();


         // Render habilidades
         // Renderización de habilidades
         const cuadrosContainer = document.querySelector('.cuadros-container');
         const cuadrosContainer = document.querySelector('.cuadros-container');
         const descripcionContainer = document.querySelector('.descripcion-container');
         const [descripcionContainer, videoContainer] = [
        const videoContainer = document.querySelector('.video-container');
            '.descripcion-container', '.video-container'
         const cuadros = [];
         ].map(sel => document.querySelector(sel));


         habilidades.forEach(hab => {
         const cuadros = habilidades.map(hab => {
             const div = document.createElement('div');
             const div = document.createElement('div');
             div.className = 'cuadro';
             div.className = 'cuadro';
             div.innerHTML = `<img src="${hab.icon}" alt="${hab.nome}" style="width:100%;height:100%;object-fit:cover">`;
             div.innerHTML = `<img src="${hab.icon}" alt="${hab.nome}" loading="lazy">`;
             div.title = hab.nome;
             div.title = hab.nome;
            hab.descripcion = hab.descripcion.replace(/'''(.*?)'''/g, '<b>$1</b>');
 
             div.addEventListener('click', () => {
             div.addEventListener('click', () => {
                 descripcionContainer.innerHTML = `<div class="titulo-habilidad">
                 descripcionContainer.innerHTML = `
                <h3>${hab.nome}</h3>
                <div class="titulo-habilidad">
                <div class="tooltip-container">
                    <h3>${hab.nome}</h3>
                <button class="info-btn">i</button>
                    <div class="tooltip-container">
                <span class="tooltip-text">
                        <button class="info-btn">i</button>
                    Información adicional sobre la habilidad, consejos o efectos especiales.
                        <span class="tooltip-text">
                </span>
                            Información adicional sobre la habilidad, consejos o efectos especiales.
                        </span>
                    </div>
                 </div>
                 </div>
            </div>` + generarHTMLAtributos(hab.atributos) + `
                ${generarHTMLAtributos(hab.atributos)}
            <div class="desc">${hab.descripcion}</div>`;
                <div class="desc">${hab.descripcion}</div>`;


                 if (hab.video && hab.video !== '') {
                 videoContainer.innerHTML = hab.video ? `
                    videoContainer.innerHTML = `
                <video width="100%" controls playsinline>
          <video width="100%" controls playsinline>
                    <source src="${hab.video}" type="video/webm">
            <source src="${hab.video}" type="video/webm">
                </video>` : '';
          </video>`;
                } else {
                    videoContainer.innerHTML = '';
                }


                 cuadros.forEach(c => c.classList.remove('activo'));
                 cuadros.forEach(c => c.classList.remove('activo'));
                 div.classList.add('activo');
                 div.classList.add('activo');
             });
             });
             cuadros.push(div);
             return div;
            cuadrosContainer.appendChild(div);
         });
         });


        cuadros.forEach(c => cuadrosContainer.appendChild(c));
         if (cuadros.length) cuadros[0].click();
         if (cuadros.length) cuadros[0].click();


 
        // Funciones auxiliares
         function generarHTMLAtributos(str) {
         function generarHTMLAtributos(str) {
             const vals = str.split(',').map(v => v.trim());
             const [vals, labels, icons] = [
            const labels = ['Poder PVE', 'Poder PVP', 'Energía', 'Recarga'];
                str.split(',').map(v => v.trim()),
            const icons = [
                ['Poder PVE', 'Poder PVP', 'Energía', 'Recarga'],
                '/images/7/7a/Icon-pve.png',
                [
                '/images/5/5f/Icon-pvp.png',
                    '/images/7/7a/Icon-pve.png',
                '/images/3/38/Icon-energy.png',
                    '/images/5/5f/Icon-pvp.png',
                '/images/b/b1/Icon-cooldown.png'
                    '/images/3/38/Icon-energy.png',
                    '/images/b/b1/Icon-cooldown.png'
                ]
             ];
             ];
             return `
 
        <div class="attribute--cardsContainer">
             return `<div class="attribute--cardsContainer">${vals.map((v, i) => {
          ${vals.map((v, i) => {
                 let f = v === '-' ? '-' : parseInt(v);
                 let f = v === '-' ? '-' : parseInt(v);
                 if (i === 1 && !isNaN(f)) f = (f > 0 ? '+' : '') + f;
                 if (i === 1 && !isNaN(f)) f = (f > 0 ? '+' : '') + f;
                 return `
                 return `<span class="simple-tooltip" data-tooltip="<p><b>${labels[i]}</b></p>">
              <span class="simple-tooltip simple-tooltip-inline tooltipstered" data-simple-tooltip="<p><b>${labels[i]}</b></p>">
                 <div class="cardAttribute">
                 <div class="cardAttribute">
                  <img src="${icons[i]}" class="cardAttribute--icon">
                    <img src="${icons[i]}" class="cardAttribute--icon" loading="lazy">
                  <h2 class="cardAttribute--value">${f}${i === 0 && f !== '-' ? ' seg' : ''}</h2>
                    <h2 class="cardAttribute--value">${f}${i === 0 && f !== '-' ? ' seg' : ''}</h2>
                 </div>
                 </div>
              </span>`;
            </span>`;
             }).join('')}
             }).join('')}</div>`;
        </div>`;
         }
         }


         function generarHTMLSkins(lista) {
         function generarHTMLSkins(lista) {
             return `
             return `<div class="card-skins">
            <div class="card-skins">
             <span class="card-skins-title">SKINS & SPOTLIGHTS</span>
             <span class="card-skins-title">SKINS & SPOTLIGHTS</span>
             <div class="skins-carousel-wrapper">
             <div class="skins-carousel-wrapper">
                 <button class="skins-arrow left">«</button>
                 <button class="skins-arrow left">«</button>
                 <div class="skins-carousel">
                 <div class="skins-carousel">
                ${lista.map(skin => `
                    ${lista.map(skin => `<div class="skin-card">
                    <div class="skin-card">
                        <img class="skins--imageBanner" src="https://one-piece-artworks.com/app/view/assets/img/geNiZAK" alt="banner" loading="lazy">
                    <img class="skins--imageBanner" src="https://one-piece-artworks.com/app/view/assets/img/geNiZAK" alt="banner">
                        <img class="skins--imageSkin" src="${skin.image}" alt="skin" loading="lazy">
                    <img class="skins--imageSkin" src="${skin.image}" alt="skin">
                     </div>`).join('')}
                     </div>
                `).join('')}
                 </div>
                 </div>
                 <button class="skins-arrow right">»</button>
                 <button class="skins-arrow right">»</button>
             </div>
             </div>
            </div>`;
        </div>`;
        }
 
        function activarFlechasCarrusel() {
            const carousel = document.querySelector('.skins-carousel');
            const [leftBtn, rightBtn] = ['.skins-arrow.left', '.skins-arrow.right'].map(sel =>
                document.querySelector(sel));
 
            const getScrollAmount = () => carousel.clientWidth * 0.6;
 
            const updateArrows = (scrollLeft) => {
                const maxScrollLeft = carousel.scrollWidth - carousel.clientWidth;
                const hasLeft = scrollLeft > 5;
                const hasRight = scrollLeft < maxScrollLeft - 5;
 
                [leftBtn, rightBtn].forEach((btn, i) => {
                    btn.style.display = [hasLeft, hasRight][i] ? 'inline-block' : 'none';
                });
 
                carousel.parentElement.classList.toggle('has-left', hasLeft);
                carousel.parentElement.classList.toggle('has-right', hasRight);
            };
 
            const handleArrowClick = (direction) => {
                const scrollLeft = carousel.scrollLeft;
                const maxScrollLeft = carousel.scrollWidth - carousel.clientWidth;
                const nextScroll = direction === 'left' ?
                    Math.max(0, scrollLeft - getScrollAmount()) :
                    Math.min(maxScrollLeft, scrollLeft + getScrollAmount());
 
                carousel.scrollTo({ left: nextScroll, behavior: 'smooth' });
                updateArrows(nextScroll);
            };
 
            leftBtn.addEventListener('click', () => handleArrowClick('left'));
            rightBtn.addEventListener('click', () => handleArrowClick('right'));
            carousel.addEventListener('scroll', () => updateArrows(carousel.scrollLeft));
            new ResizeObserver(() => updateArrows(carousel.scrollLeft)).observe(carousel);
            updateArrows(carousel.scrollLeft);
         }
         }


         cuadrosContainer.addEventListener('wheel', (e) => {
         cuadrosContainer.addEventListener('wheel', (e) => {
             if (e.deltaY !== 0) {
             if (e.deltaY) {
                 e.preventDefault();
                 e.preventDefault();
                 cuadrosContainer.scrollLeft += e.deltaY;
                 cuadrosContainer.scrollLeft += e.deltaY;
             }
             }
         });
         });
         dataEl.remove();
         dataEl.remove();
     })();
     })();
</script>
</script>
<style>
<style>
    img {
        pointer-events: none;
        user-select: none;
    }
     .personaje-box {
     .personaje-box {
         padding: 16px;
         padding: 16px;
         color: #000000;
         color: #000;
         font-family: 'Segoe UI', sans-serif;
         font-family: 'Segoe UI', sans-serif;
         width: 90%;
         width: 90%;
         margin: auto;
         margin: auto;
    }
    .personaje-header {
        display: flex;
        flex-direction: column;
        gap: 10px;
     }
     }


Linha 377: Linha 262:


     .nome {
     .nome {
         font-size: 60px;
         font: 900 60px/1 'Orbitron', sans-serif;
        font-family: 'Orbitron', sans-serif;
        font-weight: 900;
     }
     }


Linha 388: Linha 271:
         width: fit-content;
         width: fit-content;
         padding-inline: 16px;
         padding-inline: 16px;
         border-top-right-radius: 10px;
         border-radius: 0 10px 10px 0;
        border-bottom-right-radius: 10px;
    }
 
 
    .personaje-header {
        display: flex;
        gap: 10px;
        flex-direction: column;
     }
     }


Linha 405: Linha 280:
         top: 0.8%;
         top: 0.8%;
         z-index: 9;
         z-index: 9;
    }
    .personaje-info {
        user-select: none;
    }
    .personaje-info .tier,
    .personaje-info .classe {
        font-size: 18px;
        color: #bbb;
     }
     }


     .personaje-tabs {
     .personaje-tabs {
         margin-block: 4px;
         margin: 4px 0 4px 8px;
         display: flex;
         display: flex;
         gap: 12px;
         gap: 12px;
         justify-content: flex-start;
         justify-content: flex-start;
        margin-left: 8px;
     }
     }


Linha 442: Linha 306:
     .tab-content {
     .tab-content {
         display: none;
         display: none;
        /*animation: fadeIn 0.4s ease;*/
         background: #26211cd6;
         background: #26211cd6;
         padding-inline: 8px;
         padding: 0 8px 8px;
        padding-bottom: 8px;
     }
     }


Linha 472: Linha 334:
         width: 56%;
         width: 56%;
         overflow-x: auto;
         overflow-x: auto;
        overflow-y: hidden;
         padding: 10px 0 3px 1px;
         padding-bottom: 3px;
         scrollbar-width: thin;
         scrollbar-width: thin;
         scrollbar-color: #ababab transparent;
         scrollbar-color: #ababab transparent;
         margin-bottom: 6px;
         margin-bottom: 6px;
        padding-top: 10px;
        margin-left: 1px;
         scroll-behavior: smooth;
         scroll-behavior: smooth;
     }
     }
Linha 484: Linha 343:
     .cuadros-container::-webkit-scrollbar {
     .cuadros-container::-webkit-scrollbar {
         height: 6px;
         height: 6px;
    }
    .cuadros-container::-webkit-scrollbar-track {
        background: transparent;
     }
     }


Linha 495: Linha 350:
     }
     }


     .cuadros-container .cuadro {
     .cuadro {
         flex: 0 0 auto;
         flex: 0 0 auto;
         width: 50px;
         width: 50px;
Linha 504: Linha 359:
     }
     }


     .cuadros-container .cuadro.activo {
     .cuadro.activo {
         box-shadow: 0 0 10px 3px rgba(255, 255, 0, 0.5);
         box-shadow: 0 0 10px 3px rgba(255, 255, 0, 0.5);
         border: 1px solid #FFD700;
         border: 1px solid #FFD700;
Linha 542: Linha 397:
         width: 44px;
         width: 44px;
         height: 44px;
         height: 44px;
         font-family: 'Noto Sans';
         font: bold 40px/24px 'Noto Sans';
         cursor: pointer;
         cursor: pointer;
         transition: 0.2s;
         transition: 0.2s;
         box-shadow: 0 0 3px #000000;
         box-shadow: 0 0 3px #000;
        font-size: 40px;
        padding: 0;
        line-height: 24px;
         text-align: center;
         text-align: center;
     }
     }
Linha 575: Linha 427:
         visibility: visible;
         visibility: visible;
         opacity: 1;
         opacity: 1;
    }
    .descripcion-container h3 {
        font-size: 2.7em;
        margin-top: unset;
        padding-top: unset;
        text-align: center;
    }
    .descripcion-container p,
    .desc {
        font-size: 1.2em;
        margin-bottom: unset;
     }
     }


Linha 594: Linha 432:
         min-height: 25.1rem;
         min-height: 25.1rem;
         max-height: 50%;
         max-height: 50%;
         padding: 4px 16px !important;
         padding: 4px 16px 20px !important;
         background: #26211C;
         background: #26211C;
         border-radius: 8px;
         border-radius: 8px;
         position: relative;
         position: relative;
        /*overflow: hidden;*/
         box-shadow: 0 0 7px rgba(255, 255, 255, 0.82), 0 0 5px rgba(255, 255, 255, 0.96);
         box-shadow: 0 0 7px rgb(255 255 255 / 82%), 0 0 5px rgb(255 255 255 / 96%);
         color: #fff;
         color: #fff;
         backdrop-filter: blur(2px);
         backdrop-filter: blur(2px);
         transition: all 0.3s ease;
         transition: all 0.3s ease;
        padding-bottom: 20px;
         text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
        padding-top: 0px !important;
         text-shadow:
            -1px -1px 0 #000,
            1px -1px 0 #000,
            -1px 1px 0 #000,
            1px 1px 0 #000;
     }
     }


     .desc {
     .desc {
         overflow-y: auto !important;
         overflow-y: auto;
         max-height: inherit;
         max-height: inherit;
         margin-bottom: unset;
         margin: 10px 0 0;
        margin-top: 10px;
     }
     }


    .desc,
     .desc * {
     .desc * {
         font-size: inherit !important;
         font-size: inherit !important;
         line-height: inherit;
         line-height: inherit;
    }
    .descripcion-container .descLevel {
        margin-top: 5px;
        font-weight: bold;
    }
    .descripcion-container .desc::-webkit-scrollbar,
    .tabSkill--container::-webkit-scrollbar {
        width: 7px;
        height: 7px;
    }
    .descripcion-container .desc::-webkit-scrollbar-thumb,
    .tabSkill--container::-webkit-scrollbar-thumb {
        background-color: rgb(71 153 255);
        border-radius: 10px;
    }
    .descripcion-container .desc::-webkit-scrollbar-track,
    .tabSkill--container::-webkit-scrollbar-track {
        background-color: #151515a8;
        border-radius: 10px;
    }
    /*.tier-bronze .descripcion-container {
        background: linear-gradient(145deg, rgba(139, 69, 19, 0.15), rgba(160, 82, 45, 0.15));
        background-color: #3a2e25;
        border: 2px solid #cd7f32;
        border-radius: 10px;
        color: #ffffff;
        box-shadow:
            inset 0 0 5px rgba(255, 255, 255, 0.05),
            0 0 10px rgba(205, 127, 50, 0.15);
    }
    .tier-silver .descripcion-container {
        background: linear-gradient(145deg, rgba(220, 220, 220, 0.1), rgba(180, 180, 180, 0.1));
        background-color: #2f2f33;
        border: 2px solid #c0c0c0;
        border-radius: 10px;
        color: #ffffff;
        box-shadow:
            inset 0 0 5px rgba(255, 255, 255, 0.07),
            0 0 12px rgba(192, 192, 192, 0.15);
    }
    .tier-gold .descripcion-container {
        background: linear-gradient(145deg, rgba(255, 215, 0, 0.1), rgba(255, 165, 0, 0.1));
        background-color: #352a12;
        border: 2px solid #ffd700;
        border-radius: 10px;
        color: #ffffff;
        box-shadow:
            inset 0 0 6px rgba(255, 255, 255, 0.05),
            0 0 14px rgba(255, 215, 0, 0.2);
    }
    .tier-diamond .descripcion-container {
        background: linear-gradient(145deg, rgba(160, 250, 255, 0.2), rgba(80, 180, 200, 0.5)),
            url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpolygon points='15,2 18,11 28,11 20,17 23,27 15,21 7,27 10,17 2,11 12,11' fill='%23ffffff' fill-opacity='0.25'/%3E%3C/svg%3E");
        background-color: #2c4a53;
        background-blend-mode: soft-light;
        background-size: 45px 45px;
        border: 2px solid #9be8f5;
        border-radius: 10px;
        box-shadow: inset 0 0 8px rgba(255, 255, 255, 0.1), 0 0 15px rgba(100, 255, 255, 0.25);
        color: #ffffff;
        animation: glowDiamond 5s ease-in-out infinite, moveStars 5s linear infinite;
        position: relative;
        overflow: hidden;
    }*/
    .tier-diamond .personaje-header {
        background: linear-gradient(145deg, rgba(160, 250, 255, 0.2), rgba(80, 180, 200, 0.5)),
            url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpolygon points='15,2 18,11 28,11 20,17 23,27 15,21 7,27 10,17 2,11 12,11' fill='%23ffffff' fill-opacity='0.25'/%3E%3C/svg%3E");
        background-color: #4b8292;
        background-blend-mode: soft-light;
        background-size: 45px 45px;
        box-shadow: inset 0 0 8px rgba(255, 255, 255, 0.1), 0 0 15px rgba(100, 255, 255, 0.25);
        animation: moveStars 5s linear infinite;
        padding-bottom: 10px;
        position: relative;
        overflow: hidden;
     }
     }


Linha 715: Linha 462:
         justify-content: center;
         justify-content: center;
         background-color: #000;
         background-color: #000;
        padding: 0;
        overflow: hidden;
        align-self: center;
         border-radius: 2%;
         border-radius: 2%;
         box-shadow: 0 0 7px rgb(255 255 255 / 82%), 0 0 5px rgb(255 255 255 / 96%);
         box-shadow: 0 0 7px rgba(255, 255, 255, 0.82), 0 0 5px rgba(255, 255, 255, 0.96);
         z-index: 999;
         z-index: 999;
     }
     }
Linha 728: Linha 472:
         gap: 20px;
         gap: 20px;
         flex-wrap: wrap;
         flex-wrap: wrap;
        background: unset;
        border: unset;
     }
     }


Linha 745: Linha 487:
         box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);
         box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);
         transition: transform 0.2s;
         transition: transform 0.2s;
         border: 1px solid #00000047;
         border: 1px solid rgba(0, 0, 0, 0.28);
     }
     }


Linha 754: Linha 496:


     .cardAttribute--value {
     .cardAttribute--value {
         font-size: 14px !important;
         font: bold 14px/1 sans-serif;
        font-weight: bold;
         margin: 0;
         margin: 0 !important;
         color: white;
         color: white;
        border-bottom: unset;
     }
     }


     .attribute-title,
     .attribute-title,
     .card-skins-title {
     .card-skins-title {
         font-size: 1.4em;
         font: 1.4em/1 sans-serif;
         text-align: center;
         text-align: center;
        justify-self: center;
         letter-spacing: 1px;
         letter-spacing: 1px;
        font-family: sans-serif !important;
         border-bottom: 2px solid #9d9c9c;
         border-bottom: 2px solid #9d9c9c;
         color: white !important;
         color: white !important;
Linha 781: Linha 519:
     }
     }


     .skins-carousel-wrapper::before {
    .skins-carousel-wrapper {
        min-height: 21.1rem;
        max-height: 60%;
        padding: 4px 16px 20px !important;
        background: #26211C;
        border-radius: 8px;
        position: relative;
        box-shadow: 0 0 7px rgba(255, 255, 255, 0.82), 0 0 5px rgba(255, 255, 255, 0.96);
        color: #fff;
        backdrop-filter: blur(2px);
        display: flex;
        gap: 10px;
        justify-content: center;
        align-items: center;
        z-index: 99;
    }
 
     .skins-carousel-wrapper::before,
    .skins-carousel-wrapper::after {
         content: '';
         content: '';
         position: absolute;
         position: absolute;
        left: 0;
         top: 0;
         top: 0;
         width: 60px;
         width: 60px;
         height: 100%;
         height: 100%;
         pointer-events: none;
         pointer-events: none;
        background: linear-gradient(to right, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 100%);
        opacity: 0;
         transition: opacity 0.4s ease;
         transition: opacity 0.4s ease;
         z-index: 3;
         z-index: 3;
     }
     }


     .skins-carousel-wrapper.has-left::before {
     .skins-carousel-wrapper::before {
         opacity: 1;
        left: 0;
        background: linear-gradient(to right, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 100%);
         opacity: 0;
     }
     }


     .skins-carousel-wrapper::after {
     .skins-carousel-wrapper::after {
        content: '';
        position: absolute;
         right: 0;
         right: 0;
        top: 0;
        width: 60px;
        height: 100%;
        pointer-events: none;
         background: linear-gradient(to left, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 100%);
         background: linear-gradient(to left, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 100%);
         opacity: 0;
         opacity: 0;
        transition: opacity 0.4s ease;
        z-index: 3;
     }
     }


    .skins-carousel-wrapper.has-left::before,
     .skins-carousel-wrapper.has-right::after {
     .skins-carousel-wrapper.has-right::after {
         opacity: 1;
         opacity: 1;
    }
    .has-left {
        padding-left: 60px;
    }
    .has-left .skins-carousel {
        mask-image: linear-gradient(to right, transparent 0px, black 40px, black 100%);
    }
    .has-right {
        padding-right: 60px;
    }
    .has-right .skins-carousel {
        mask-image: linear-gradient(to right, black 0px, black calc(100% - 40px), transparent 100%);
    }
    .skins-arrow {
        opacity: 1;
        transform: scale(1);
        transition: opacity 0.3s ease, transform 0.3s ease;
        display: inline-block;
    }
    .skins-arrow.hidden {
        opacity: 0;
        transform: scale(0.8);
        pointer-events: none;
        visibility: hidden;
    }
    .card-skins-title {
        display: block;
        border-bottom: unset;
        font-size: 40px;
        font-weight: bold;
        justify-self: auto;
        padding-bottom: unset;
        margin-bottom: 10px;
        width: 55%;
    }
    .skins-carousel-wrapper {
        min-height: 21.1rem;
        max-height: 60%;
        padding: 4px 16px !important;
        background: #26211C;
        border-radius: 8px;
        position: relative;
        box-shadow: 0 0 7px rgb(255 255 255 / 82%), 0 0 5px rgb(255 255 255 / 96%);
        color: #fff;
        backdrop-filter: blur(2px);
        transition: all 0.3s ease;
        padding-bottom: 20px;
        padding-top: 0px !important;
        text-shadow:
            -1px -1px 0 #000,
            1px -1px 0 #000,
            -1px 1px 0 #000,
            1px 1px 0 #000;
        flex: 1;
        display: flex;
        flex-direction: row;
        gap: 10px;
        justify-content: center;
        align-items: center;
        overflow: visible;
        z-index: 99;
     }
     }


Linha 894: Linha 572:
         padding: 10px 0;
         padding: 10px 0;
         flex-grow: 1;
         flex-grow: 1;
        -ms-overflow-style: none;
        scrollbar-width: none;
     }
     }
    .skins-carousel.both-mask {
        mask-image: linear-gradient(to right, transparent 0px, black 40px, black calc(100% - 40px), transparent 100%);
    }
    .skins-carousel.left-mask {
        mask-image: linear-gradient(to right, transparent 0px, black 40px, black 100%);
    }
    .skins-carousel.right-mask {
        mask-image: linear-gradient(to right, black 0px, black calc(100% - 40px), transparent 100%);
    }
    .skins-carousel.no-mask {
        mask-image: none;
    }


     .skins-carousel::-webkit-scrollbar {
     .skins-carousel::-webkit-scrollbar {
Linha 925: Linha 588:
         border-radius: 8px;
         border-radius: 8px;
         overflow: hidden;
         overflow: hidden;
         box-shadow: 0 0 8px #00f2ff70;
         box-shadow: 0 0 8px rgba(0, 242, 255, 0.44);
         background: #111;
         background: #111;
     }
     }
Linha 984: Linha 647:
     }
     }


 
     .tier-diamond .personaje-header {
     .mw-body-content {
         background:
         line-height: 1.5 !important;
            linear-gradient(145deg, rgba(160, 250, 255, 0.2), rgba(80, 180, 200, 0.5)),
            url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpolygon points='15,2 18,11 28,11 20,17 23,27 15,21 7,27 10,17 2,11 12,11' fill='%23ffffff' fill-opacity='0.25'/%3E%3C/svg%3E");
        background-color: #4b8292;
        background-blend-mode: soft-light;
        background-size: 45px 45px;
        box-shadow: inset 0 0 8px rgba(255, 255, 255, 0.1), 0 0 15px rgba(100, 255, 255, 0.25);
        animation: moveStars 5s linear infinite;
        padding-bottom: 10px;
        position: relative;
        overflow: hidden;
     }
     }


     /*@keyframes fadeIn {
     @keyframes glow {
        from {
            opacity: 0;
        }
 
        to {
            opacity: 1;
        }
    }*/
 
    @keyframes glowDiamond {


         0%,
         0%,
         100% {
         100% {
             box-shadow:
             box-shadow: 0 0 2px 1px rgba(255, 255, 0, 0.35);
                inset 0 0 8px rgba(255, 255, 255, 0.4),
                0 0 16px rgba(80, 255, 255, 0.6);
         }
         }


         50% {
         50% {
             box-shadow:
             box-shadow: 0 0 4px 2px rgba(255, 255, 0, 0.7);
                inset 0 0 16px rgba(255, 255, 255, 0.6),
                0 0 24px rgba(160, 255, 255, 0.8);
         }
         }
     }
     }
Linha 1 022: Linha 680:
         100% {
         100% {
             background-position: 90px -90px;
             background-position: 90px -90px;
        }
    }
    @keyframes glow {
        0% {
            box-shadow: 0 0 2px 1px rgba(255, 255, 0, 0.35);
        }
        50% {
            box-shadow: 0 0 4px 2px rgba(255, 255, 0, 0.7);
        }
        100% {
            box-shadow: 0 0 2px 1px rgba(255, 255, 0, 0.35);
         }
         }
     }
     }


     @media (max-aspect-ratio: 3/4) {
     @media (max-aspect-ratio: 3/4) {
        .desc {
            font-size: 30px;
            line-height: 1.5;
            overflow-y: auto !important;
            max-height: inherit;
            margin-bottom: unset;
            width: 100%;
        }
        .desc * {
            font-size: inherit !important;
            line-height: inherit;
        }
         .habilidades-container {
         .habilidades-container {
            display: flex;
            gap: 20px;
             flex-direction: column-reverse;
             flex-direction: column-reverse;
         }
         }


         .habilidades-details {
         .habilidades-details {
            flex: 1;
            display: flex;
            flex-direction: column;
             width: 96%;
             width: 96%;
             align-self: center;
             align-self: center;
Linha 1 070: Linha 695:
         .video-container {
         .video-container {
             width: 80%;
             width: 80%;
            height: fit-content;
            display: flex;
            align-items: center;
            justify-content: center;
            overflow: hidden;
            align-self: center;
             border-radius: 3%;
             border-radius: 3%;
             margin-top: 2%;
             margin-top: 2%;
Linha 1 086: Linha 705:
         }
         }


         .tap-btn {
         .tab-btn {
             font-size: 30px;
             font-size: 30px;
            padding: 14px 22px;
         }
         }


         .personaje-info .tier,
         .cuadro {
        .personaje-info .classe {
            font-size: 30px;
        }
 
        .cuadros-container .cuadro {
            flex: 0 0 auto;
             width: 80px;
             width: 80px;
             height: 80px;
             height: 80px;
Linha 1 103: Linha 717:
         .personaje-box {
         .personaje-box {
             padding: 32px;
             padding: 32px;
        }
        .descripcion-container {
            padding: 22px !important;
         }
         }


Linha 1 110: Linha 728:
         }
         }


         .descripcion-container p {
         .desc {
             font-size: 2.3em;
             font-size: 30px;
             margin-bottom: 5px;
             line-height: 1.5;
        }
             width: 100%;
 
        .descripcion-container {
            padding: 22px 22px !important;
        }
 
        .tab-btn {
            padding: 14px 22px;
             font-size: 34px;
         }
         }
     }
     }
</style>
</style>

Edição das 18h18min de 19 de julho de 2025

               <img src="/images/6/63/Franky_ts_medal.png" class="topbar-icon" alt="Ícono">
Franky (TS) é um personagem do tier diamante.
           <button class="tab-btn" data-tab="arma">Arma</button>
           <button class="tab-btn active" data-tab="habilidades">Habilidades</button>
           <button class="tab-btn" data-tab="skins">Skins</button>
   <img class="art-personaje" alt="Arte del personaje">

<script type="text/javascript">

   (function () {
       const dataEl = document.getElementById('persona-data');
       if (!dataEl) return console.error('Persona widget: no se encontró #persona-data');
       // Extracción de datos optimizada
       const { nome = , tier = , classe = , image = , habilidadesRaw = , skinsRaw =  } = dataEl.dataset;
       const rawHabs = habilidadesRaw.replace(//g, ).trim();
   const rawSkins = skinsRaw.replace(//g, ).trim();
       // Procesamiento de habilidades
       const habilidades = rawHabs.split('||').filter(Boolean).map(line => {
           const habData = {};
           line.split('|').filter(Boolean).forEach(part => {
               const [key, ...valParts] = part.split('=');
               if (key && valParts.length) habData[key.trim()] = valParts.join('=').trim();
           });
           const { nome, icon, level, desc = , atr, video =  } = habData;
           if (!nome || !icon || !level || !atr) {
               return console.warn("Habilidad omitida por falta de campos obligatorios:", line), null;
           }
           return {
               nome, icon, level: parseInt(level),
               descripcion: desc.replace(/(.*?)/g, '$1'),
               atributos: atr, video
           };
       }).filter(Boolean);
       // Procesamiento de skins
       const skins = rawSkins.split('||').filter(Boolean).map(line => {
           const obj = {};
           line.split('|').filter(Boolean).forEach(part => {
               const [key, ...rest] = part.split('=');
               if (key && rest.length) obj[key.trim()] = rest.join('=').trim();
           });
           return obj.image && obj.tooltip ? { image: obj.image, tooltip: obj.tooltip } :
               (console.error("Error en la skin (falta image o tooltip):", line), null);
       }).filter(Boolean);
       // Asignación de tier
       const tierClass = ({
           'bronze': 'tier-bronze', 'bronce': 'tier-bronze',
           'silver': 'tier-silver', 'prata': 'tier-silver',
           'gold': 'tier-gold', 'ouro': 'tier-gold',
           'diamond': 'tier-diamond', 'diamante': 'tier-diamond'
       })[tier.toLowerCase()] || ;
       // Actualización del DOM
       document.querySelector('.nome').textContent = nome;
       document.querySelector('img.art-personaje').src = image;
       if (tierClass) document.querySelector('.personaje-box').classList.add(tierClass);
       // Manejo de pestañas
       document.querySelectorAll('.tab-btn').forEach(btn => {
           btn.addEventListener('click', () => {
               document.querySelectorAll('.tab-btn, .tab-content').forEach(el =>
                   el.classList.remove('active'));
               btn.classList.add('active');
               document.getElementById(btn.dataset.tab).classList.add('active');
           });
       });
       // Renderización de skins
       document.getElementById('skins').innerHTML = generarHTMLSkins(skins);
       activarFlechasCarrusel();
       // Renderización de habilidades
       const cuadrosContainer = document.querySelector('.cuadros-container');
       const [descripcionContainer, videoContainer] = [
           '.descripcion-container', '.video-container'
       ].map(sel => document.querySelector(sel));
       const cuadros = habilidades.map(hab => {
           const div = document.createElement('div');
           div.className = 'cuadro';
           div.innerHTML = `<img src="${hab.icon}" alt="${hab.nome}" loading="lazy">`;
           div.title = hab.nome;
           div.addEventListener('click', () => {
               descripcionContainer.innerHTML = `

${hab.nome}

                       <button class="info-btn">i</button>
                       
                           Información adicional sobre la habilidad, consejos o efectos especiales.
                       
               ${generarHTMLAtributos(hab.atributos)}
${hab.descripcion}

`;

               videoContainer.innerHTML = hab.video ? `
               <video width="100%" controls playsinline>
                   <source src="${hab.video}" type="video/webm">
               </video>` : ;
               cuadros.forEach(c => c.classList.remove('activo'));
               div.classList.add('activo');
           });
           return div;
       });
       cuadros.forEach(c => cuadrosContainer.appendChild(c));
       if (cuadros.length) cuadros[0].click();
       // Funciones auxiliares
       function generarHTMLAtributos(str) {
           const [vals, labels, icons] = [
               str.split(',').map(v => v.trim()),
               ['Poder PVE', 'Poder PVP', 'Energía', 'Recarga'],
               [
                   '/images/7/7a/Icon-pve.png',
                   '/images/5/5f/Icon-pvp.png',
                   '/images/3/38/Icon-energy.png',
                   '/images/b/b1/Icon-cooldown.png'
               ]
           ];

return `

${vals.map((v, i) => {
               let f = v === '-' ? '-' : parseInt(v);
               if (i === 1 && !isNaN(f)) f = (f > 0 ? '+' : ) + f;
return `<span class="simple-tooltip" data-tooltip="

${labels[i]}

">
                   <img src="${icons[i]}" class="cardAttribute--icon" loading="lazy">

${f}${i === 0 && f !== '-' ? ' seg' : }

           `;
}).join()}

`;

       }
       function generarHTMLSkins(lista) {

return `

           SKINS & SPOTLIGHTS

`;

       }
       function activarFlechasCarrusel() {
           const carousel = document.querySelector('.skins-carousel');
           const [leftBtn, rightBtn] = ['.skins-arrow.left', '.skins-arrow.right'].map(sel =>
               document.querySelector(sel));
           const getScrollAmount = () => carousel.clientWidth * 0.6;
           const updateArrows = (scrollLeft) => {
               const maxScrollLeft = carousel.scrollWidth - carousel.clientWidth;
               const hasLeft = scrollLeft > 5;
               const hasRight = scrollLeft < maxScrollLeft - 5;
               [leftBtn, rightBtn].forEach((btn, i) => {
                   btn.style.display = [hasLeft, hasRight][i] ? 'inline-block' : 'none';
               });
               carousel.parentElement.classList.toggle('has-left', hasLeft);
               carousel.parentElement.classList.toggle('has-right', hasRight);
           };
           const handleArrowClick = (direction) => {
               const scrollLeft = carousel.scrollLeft;
               const maxScrollLeft = carousel.scrollWidth - carousel.clientWidth;
               const nextScroll = direction === 'left' ?
                   Math.max(0, scrollLeft - getScrollAmount()) :
                   Math.min(maxScrollLeft, scrollLeft + getScrollAmount());
               carousel.scrollTo({ left: nextScroll, behavior: 'smooth' });
               updateArrows(nextScroll);
           };
           leftBtn.addEventListener('click', () => handleArrowClick('left'));
           rightBtn.addEventListener('click', () => handleArrowClick('right'));
           carousel.addEventListener('scroll', () => updateArrows(carousel.scrollLeft));
           new ResizeObserver(() => updateArrows(carousel.scrollLeft)).observe(carousel);
           updateArrows(carousel.scrollLeft);
       }
       cuadrosContainer.addEventListener('wheel', (e) => {
           if (e.deltaY) {
               e.preventDefault();
               cuadrosContainer.scrollLeft += e.deltaY;
           }
       });
       dataEl.remove();
   })();

</script> <style>

   .personaje-box {
       padding: 16px;
       color: #000;
       font-family: 'Segoe UI', sans-serif;
       width: 90%;
       margin: auto;
   }
   .personaje-header {
       display: flex;
       flex-direction: column;
       gap: 10px;
   }
   .personaje-topbar {
       display: flex;
       flex-direction: column;
       align-items: flex-start;
       padding: 8px 16px;
   }
   .personaje-nome-box {
       display: flex;
       align-items: center;
       gap: 8px;
   }
   .topbar-icon {
       width: 90px;
       height: 90px;
       object-fit: none;
       background: #60dae2;
   }
   .nome {
       font: 900 60px/1 'Orbitron', sans-serif;
   }
   .topbar-description {
       font-size: 16px;
       margin-top: 6px;
       background: #6AF3FB;
       width: fit-content;
       padding-inline: 16px;
       border-radius: 0 10px 10px 0;
   }
   .art-personaje {
       width: 665px;
       position: absolute;
       right: 5%;
       top: 0.8%;
       z-index: 9;
   }
   .personaje-tabs {
       margin: 4px 0 4px 8px;
       display: flex;
       gap: 12px;
       justify-content: flex-start;
   }
   .tab-btn {
       padding: 8px 20px;
       background: #333;
       color: white;
       border: none;
       border-radius: 8px;
       font-size: 20px;
       cursor: pointer;
   }
   .tab-btn.active {
       background: #156bc7;
       font-weight: bold;
   }
   .tab-content {
       display: none;
       background: #26211cd6;
       padding: 0 8px 8px;
   }
   .tab-content.active {
       display: block;
   }
   .habilidades-container {
       display: flex;
       gap: 20px;
   }
   .habilidades-details {
       flex: 1;
       display: flex;
       flex-direction: column;
       gap: 10px;
       width: 50%;
       justify-content: center;
   }
   .cuadros-container {
       display: flex;
       flex-wrap: nowrap;
       gap: 10px;
       width: 56%;
       overflow-x: auto;
       padding: 10px 0 3px 1px;
       scrollbar-width: thin;
       scrollbar-color: #ababab transparent;
       margin-bottom: 6px;
       scroll-behavior: smooth;
   }
   .cuadros-container::-webkit-scrollbar {
       height: 6px;
   }
   .cuadros-container::-webkit-scrollbar-thumb {
       background-color: #151515;
       border-radius: 3px;
   }
   .cuadro {
       flex: 0 0 auto;
       width: 50px;
       height: 50px;
       border-radius: 5px;
       cursor: pointer;
       transition: transform 0.2s, box-shadow 0.2s;
   }
   .cuadro.activo {
       box-shadow: 0 0 10px 3px rgba(255, 255, 0, 0.5);
       border: 1px solid #FFD700;
       animation: glow 2s ease-in-out infinite;
   }
   .titulo-habilidad {
       position: relative;
       display: flex;
       justify-content: center;
       align-items: center;
       margin-bottom: 8px;
       padding-right: 32px;
   }
   .titulo-habilidad h3 {
       font-size: 1.6em;
       color: white;
       text-align: center;
       margin: 0;
       width: 100%;
   }
   .tooltip-container {
       position: absolute;
       right: 0;
       top: 50%;
       transform: translateY(-50%);
   }
   .info-btn {
       border: none;
       color: #D3DBDC;
       background-color: #787878;
       font-weight: bold;
       border-radius: 50%;
       width: 44px;
       height: 44px;
       font: bold 40px/24px 'Noto Sans';
       cursor: pointer;
       transition: 0.2s;
       box-shadow: 0 0 3px #000;
       text-align: center;
   }
   .tooltip-text {
       visibility: hidden;
       width: 220px;
       background-color: #222;
       color: #fff;
       text-align: left;
       padding: 8px 10px;
       border-radius: 8px;
       position: absolute;
       z-index: 10;
       bottom: 130%;
       left: 50%;
       transform: translate(-85%, 110%);
       opacity: 0;
       transition: opacity 0.3s;
       font-size: 12px;
       box-shadow: 0 2px 10px rgba(0, 0, 0, 0.5);
       pointer-events: none;
   }
   .tooltip-container:hover .tooltip-text {
       visibility: visible;
       opacity: 1;
   }
   .descripcion-container {
       min-height: 25.1rem;
       max-height: 50%;
       padding: 4px 16px 20px !important;
       background: #26211C;
       border-radius: 8px;
       position: relative;
       box-shadow: 0 0 7px rgba(255, 255, 255, 0.82), 0 0 5px rgba(255, 255, 255, 0.96);
       color: #fff;
       backdrop-filter: blur(2px);
       transition: all 0.3s ease;
       text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
   }
   .desc {
       overflow-y: auto;
       max-height: inherit;
       margin: 10px 0 0;
   }
   .desc,
   .desc * {
       font-size: inherit !important;
       line-height: inherit;
   }
   .video-container {
       width: 43%;
       height: fit-content;
       display: flex;
       align-items: center;
       justify-content: center;
       background-color: #000;
       border-radius: 2%;
       box-shadow: 0 0 7px rgba(255, 255, 255, 0.82), 0 0 5px rgba(255, 255, 255, 0.96);
       z-index: 999;
   }
   .attribute--cardsContainer {
       display: flex;
       justify-content: center;
       gap: 20px;
       flex-wrap: wrap;
   }
   .cardAttribute {
       width: 80px;
       height: 90px;
       background-color: #473838;
       border-radius: 8px;
       display: flex;
       flex-direction: column;
       align-items: center;
       justify-content: center;
       text-align: center;
       padding: 5px;
       box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);
       transition: transform 0.2s;
       border: 1px solid rgba(0, 0, 0, 0.28);
   }
   .cardAttribute--icon {
       height: 28px;
       margin-bottom: 14px;
   }
   .cardAttribute--value {
       font: bold 14px/1 sans-serif;
       margin: 0;
       color: white;
   }
   .attribute-title,
   .card-skins-title {
       font: 1.4em/1 sans-serif;
       text-align: center;
       letter-spacing: 1px;
       border-bottom: 2px solid #9d9c9c;
       color: white !important;
       padding-bottom: 8px;
       margin-bottom: 16px;
       width: 75%;
   }
   .card-skins {
       padding: 16px;
       border-radius: 12px;
       box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
   }
   .skins-carousel-wrapper {
       min-height: 21.1rem;
       max-height: 60%;
       padding: 4px 16px 20px !important;
       background: #26211C;
       border-radius: 8px;
       position: relative;
       box-shadow: 0 0 7px rgba(255, 255, 255, 0.82), 0 0 5px rgba(255, 255, 255, 0.96);
       color: #fff;
       backdrop-filter: blur(2px);
       display: flex;
       gap: 10px;
       justify-content: center;
       align-items: center;
       z-index: 99;
   }
   .skins-carousel-wrapper::before,
   .skins-carousel-wrapper::after {
       content: ;
       position: absolute;
       top: 0;
       width: 60px;
       height: 100%;
       pointer-events: none;
       transition: opacity 0.4s ease;
       z-index: 3;
   }
   .skins-carousel-wrapper::before {
       left: 0;
       background: linear-gradient(to right, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 100%);
       opacity: 0;
   }
   .skins-carousel-wrapper::after {
       right: 0;
       background: linear-gradient(to left, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 100%);
       opacity: 0;
   }
   .skins-carousel-wrapper.has-left::before,
   .skins-carousel-wrapper.has-right::after {
       opacity: 1;
   }
   .skins-carousel {
       display: flex;
       gap: 16px;
       overflow-x: auto;
       scroll-behavior: smooth;
       padding: 10px 0;
       flex-grow: 1;
       -ms-overflow-style: none;
       scrollbar-width: none;
   }
   .skins-carousel::-webkit-scrollbar {
       display: none;
   }
   .skin-card {
       position: relative;
       width: 200px;
       height: 320px;
       flex: 0 0 auto;
       border: 2px solid #697EC9;
       border-radius: 8px;
       overflow: hidden;
       box-shadow: 0 0 8px rgba(0, 242, 255, 0.44);
       background: #111;
   }
   .skin-card::before {
       content: ;
       position: absolute;
       top: 0;
       left: 0;
       width: 100%;
       height: 100%;
       pointer-events: none;
       border-radius: inherit;
       z-index: 2;
       box-shadow: inset 0 0 12px 6px rgba(180, 180, 180, 0.25);
   }
   .skins--imageBanner {
       width: 100%;
       height: 109%;
       scale: 1.1;
       object-fit: cover;
       filter: brightness(0.5);
   }
   .skins--imageSkin {
       position: absolute;
       bottom: 10px;
       left: 50%;
       transform: translateX(-50%);
       height: 140px;
       width: auto;
       z-index: 2;
       transition: transform 0.2s;
   }
   .skins--imageSkin:hover {
       transform: translateX(-50%) scale(1.05);
   }
   .skins-arrow {
       background: none;
       border: none;
       color: white;
       font-size: 36px;
       cursor: pointer;
       padding: 8px;
       z-index: 5;
       transition: 0.2s;
   }
   .skins-arrow.left {
       margin-right: 8px;
   }
   .skins-arrow.right {
       margin-left: 8px;
   }
   .tier-diamond .personaje-header {
       background:
           linear-gradient(145deg, rgba(160, 250, 255, 0.2), rgba(80, 180, 200, 0.5)),
           url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpolygon points='15,2 18,11 28,11 20,17 23,27 15,21 7,27 10,17 2,11 12,11' fill='%23ffffff' fill-opacity='0.25'/%3E%3C/svg%3E");
       background-color: #4b8292;
       background-blend-mode: soft-light;
       background-size: 45px 45px;
       box-shadow: inset 0 0 8px rgba(255, 255, 255, 0.1), 0 0 15px rgba(100, 255, 255, 0.25);
       animation: moveStars 5s linear infinite;
       padding-bottom: 10px;
       position: relative;
       overflow: hidden;
   }
   @keyframes glow {
       0%,
       100% {
           box-shadow: 0 0 2px 1px rgba(255, 255, 0, 0.35);
       }
       50% {
           box-shadow: 0 0 4px 2px rgba(255, 255, 0, 0.7);
       }
   }
   @keyframes moveStars {
       0% {
           background-position: 0 0;
       }
       100% {
           background-position: 90px -90px;
       }
   }
   @media (max-aspect-ratio: 3/4) {
       .habilidades-container {
           flex-direction: column-reverse;
       }
       .habilidades-details {
           width: 96%;
           align-self: center;
       }
       .video-container {
           width: 80%;
           border-radius: 3%;
           margin-top: 2%;
       }
       .art-personaje {
           right: 2%;
           width: 290px;
           top: 1.45vh;
       }
       .tab-btn {
           font-size: 30px;
           padding: 14px 22px;
       }
       .cuadro {
           width: 80px;
           height: 80px;
       }
       .personaje-box {
           padding: 32px;
       }
       .descripcion-container {
           padding: 22px !important;
       }
       .descripcion-container h3 {
           font-size: 2.5em;
           margin-top: -12px;
       }
       .desc {
           font-size: 30px;
           line-height: 1.5;
           width: 100%;
       }
   }

</style>