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

De Wiki Gla
Ir para navegação Ir para pesquisar
m
m
 
(18 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
<style>
<style>
     .utab {
     .island-grid {
        font-family: "Segoe UI", Arial, sans-serif;
        color: #e2ecff;
        padding: 24px;
        max-width: 980px;
        margin: 24px auto;
    }
 
    .utab__tabs {
         display: flex;
         display: flex;
         flex-wrap: wrap;
         flex-wrap: wrap;
         gap: 8px;
         justify-content: center;
         margin-bottom: 0;
         gap: 10px;
         border-bottom: 1px solid #203c5f;
         padding: 12px 0;
     }
     }


     .utab__tab {
     .island-banner {
         display: inline-flex;
         position: relative;
         align-items: center;
         width: 380px;
         border: 1px solid #274a74;
         height: 90px;
         border-bottom: none;
         overflow: hidden;
         background: #0f1b2d;
         border-radius: 8px;
         padding: 10px 14px;
         box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 10px;
        border-radius: 10px 10px 0 0;
         cursor: pointer;
         cursor: pointer;
        font-weight: 600;
         transition: transform 0.15s, box-shadow 0.15s;
        color: #cfe1ff;
         display: block;
         transition: all 0.2s ease;
         box-sizing: border-box;
    }
 
    .utab__tab:hover {
         border-color: #4a86d8;
         color: #ffffff;
     }
     }


     .utab__tab.is-active {
     .island-banner::before {
        background: #2e7dd7;
        border-color: #2e7dd7;
        color: #ffffff;
        position: relative;
        top: 1px;
    }
 
    .utab__tab.is-active::after {
         content: "";
         content: "";
         position: absolute;
         position: absolute;
        top: 0;
         left: 0;
         left: 0;
         right: 0;
         right: 0;
         bottom: -2px;
         bottom: 0;
         height: 2px;
        background: linear-gradient(105deg, rgba(0, 0, 0, 0.65) 0%, rgba(0, 0, 0, 0.35) 40%, rgba(0, 0, 0, 0.1) 70%, transparent 100%);
         background: #0f1b2d;
         pointer-events: none;
         z-index: 1;
     }
     }


     .utab__tab:focus-visible,
     .island-banner:hover {
    .utab__levelBtn:focus-visible {
        transform: translateY(-2px);
         outline: 2px solid rgba(46, 125, 215, 0.4);
         box-shadow: rgba(0, 0, 0, 0.35) 0px 4px 12px;
        outline-offset: 2px;
     }
     }


     .utab__section {
     .island-banner .island-chests {
        display: none;
         position: absolute;
    }
         top: 8px;
 
         left: 8px;
    .utab__section.is-active {
         display: block;
    }
 
    .utab__panel {
         background: #0f1b2d;
         border-radius: 0 14px 14px 14px;
        padding: 20px;
        border: 1px solid #203c5f;
        box-shadow: 0 10px 24px rgba(7, 14, 26, 0.35);
    }
 
    .utab__levels {
         display: flex;
         display: flex;
         flex-wrap: wrap;
         flex-wrap: wrap;
         gap: 8px;
         gap: 6px;
         margin-bottom: 16px;
         z-index: 2;
        pointer-events: none;
     }
     }


     .utab__levelBtn {
     .island-banner .island-chest-group {
        border: 1px solid #274a74;
         position: relative;
        background: #13243a;
         display: inline-block;
        padding: 6px 12px;
        border-radius: 10px;
        font-weight: 600;
        color: #cfe1ff;
        cursor: pointer;
        transition: all 0.2s ease;
    }
 
    .utab__levelBtn:hover {
        border-color: #4a86d8;
        color: #ffffff;
    }
 
    .utab__levelBtn.is-active {
         background: #2e7dd7;
        border-color: #2e7dd7;
        color: #ffffff;
    }
 
    .utab__display {
         display: grid;
        grid-template-columns: minmax(160px, 220px) 1fr;
        gap: 18px;
        align-items: start;
    }
 
    .utab__display.is-image-empty {
        grid-template-columns: 1fr;
    }
 
    .utab__display.is-fading {
        animation: utabFade 0.25s ease;
    }
 
    .utab__image {
        border-radius: 12px;
        border: 1px solid #203c5f;
        background: #0b1422;
        padding: 10px;
     }
     }


     .utab__image img {
     .island-banner .island-chest-group img {
         display: block;
         display: block;
         width: 100%;
         width: auto;
         height: auto;
         height: auto;
        border-radius: 8px;
     }
     }


     .utab__image.is-empty {
     .island-banner .island-chest-count {
        display: none;
    position: absolute;
     }
    left: 0;          /* era right: 0 */
    bottom: 0;
     font-size: 12.5px;  /* era 11px */
    font-weight: bold;
    color: #fff;
    background: rgba(0, 0, 0, 0.75);
    padding: 1px 3px;
    border-radius: 3px;
    line-height: 1;
    white-space: nowrap;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
    z-index: 10;
}


     .utab__stats {
     .island-banner .island-title {
         display: grid;
         position: absolute;
         gap: 10px;
         bottom: 10px;
         color: #dbe7ff;
         left: 8px;
         font-size: 14px;
         font-size: 1.35em;
    }
         font-weight: bold;
 
         color: #fff;
    .utab__stat {
         text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8), 0 2px 4px rgba(0, 0, 0, 0.5);
        background: #13243a;
         line-height: 1.2;
        border: 1px solid #274a74;
         z-index: 2;
        border-radius: 10px;
         pointer-events: none;
        padding: 10px 12px;
         text-transform: uppercase;
    }
 
    .utab__statTitle {
         font-weight: 700;
         color: #8bb8ff;
    }
 
    .utab__statList {
         margin: 6px 0 0;
        padding-left: 18px;
        display: grid;
        gap: 2px;
        list-style: disc;
        list-style-position: outside;
    }
 
    .utab__statList li {
        display: list-item;
        text-align: left;
    }
 
    .utab__costRow {
        position: relative;
    }
 
    .utab__costBerry,
    .utab__costGems,
    .utab__costPoints {
        display: inline-flex;
         align-items: center;
         gap: 6px;
        font-weight: 700;
         line-height: 1.1;
         font-size: 15px;
     }
     }


     .utab__costBerry {
     @media (max-width: 768px) {
        color: #ffd166;
         .island-grid {
    }
             flex-direction: column;
 
             align-items: stretch;
    .utab__costGems {
        color: #57d889;
    }
 
    .utab__costPoints {
        color: #a6b0bf;
    }
 
    .utab__costIcon {
        display: none;
    }
 
    .utab__costBerry .utab__costIcon,
    .utab__costGems .utab__costIcon,
    .utab__costPoints .utab__costIcon,
    .utab__costBerry .utab__costText,
    .utab__costGems .utab__costText,
    .utab__costPoints .utab__costText {
         transform: none;
    }
 
    .utab__level--source {
        display: none;
    }
 
    @keyframes utabFade {
        from {
             opacity: 0;
             transform: translateY(4px);
         }
         }


         to {
         .island-banner {
             opacity: 1;
             width: 100%;
             transform: translateY(0);
             max-width: none;
        }
    }
 
    @media (max-width: 720px) {
        .utab {
            padding: 16px;
        }
 
        .utab__display {
            grid-template-columns: 1fr;
         }
         }
     }
     }
</style>
</style>
<div class="utab">
    <section class="utab__section" data-tab="Designer">
        <div class="utab__level" data-level="1">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Designer_lvl1.png|200px]]</div>
                <ul class="utab__statList">
                    <li>1 pilar de artefato disponível</li>
                    <li>27 símbolos disponíveis</li>
                    <li>1 plano de fundo disponível</li>
                    <li>6 cores disponíveis</li>
                    <li>2% de EXP</li>
                    <li>4% de sorte</li>
                    <li>5% de pontos de aliança</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="2">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Designer_lvl2.png|200px]]</div>
                <ul class="utab__statList">
                    <li>2 pilares de artefato disponíveis</li>
                    <li>9 planos de fundo disponíveis</li>
                    <li>47 símbolos disponíveis</li>
                    <li>12 cores disponíveis</li>
                    <li>4% de EXP</li>
                    <li>9% de sorte</li>
                    <li>12% de pontos de aliança</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="3">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Designer_lvl3.png|200px]]</div>
                <ul class="utab__statList">
                    <li>2 pilares de artefato disponíveis</li>
                    <li>34 planos de fundo disponíveis</li>
                    <li>72 símbolos disponíveis</li>
                    <li>30 cores disponíveis</li>
                    <li>6% de EXP</li>
                    <li>15% de sorte</li>
                    <li>22% de pontos de aliança</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="4">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Designer_lvl4.png|200px]]</div>
                <ul class="utab__statList">
                    <li>3 pilares de artefato disponíveis</li>
                    <li>34 planos de fundo disponíveis</li>
                    <li>92 símbolos disponíveis</li>
                    <li>30 cores disponíveis</li>
                    <li>8% de EXP</li>
                    <li>22% de sorte</li>
                    <li>35% de pontos de aliança</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="5">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Designer_lvl5.png|200px]]</div>
                <ul class="utab__statList">
                    <li>4 pilares de artefato disponíveis</li>
                    <li>34 planos de fundo disponíveis</li>
                    <li>112 símbolos disponíveis</li>
                    <li>30 cores disponíveis</li>
                    <li>10% de EXP</li>
                    <li>30% de sorte</li>
                    <li>50% de pontos de aliança</li>
                </ul>
            </div>
        </div>
    </section>
    <section class="utab__section" data-tab="Cofre">
        <div class="utab__level" data-level="1">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Cofre_lvl1.png|200px]]</div>
                <ul class="utab__statList">
                    <li>10% de bônus pra aliança</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="2">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Cofre_lvl2.png|200px]]</div>
                <ul class="utab__statList">
                    <li>+ 100 espaços extra no cofre</li>
                    <li>25% de bônus pra aliança</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="3">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Cofre_lvl3.png|200px]]</div>
                <ul class="utab__statList">
                    <li>+ 200 espaços extra no cofre</li>
                    <li>45% de bônus pra aliança</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="4">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Cofre_lvl4.png|200px]]</div>
                <ul class="utab__statList">
                    <li>+ 300 espaços extra no cofre</li>
                    <li>75% de bônus pra aliança</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="5">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Cofre_lvl5.png|200px]]</div>
                <ul class="utab__statList">
                    <li>+ 400 espaços extra no cofre</li>
                    <li>100% de bônus pra aliança</li>
                </ul>
            </div>
        </div>
    </section>
    <section class="utab__section" data-tab="Salão Principal">
        <div class="utab__level" data-level="1">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:SalaoPrincipal_lvl1.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 1</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="2">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:SalaoPrincipal_lvl2.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 2</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="3">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:SalaoPrincipal_lvl3.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 3</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="4">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:SalaoPrincipal_lvl4.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 4</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="5">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:SalaoPrincipal_lvl5.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 5</li>
                </ul>
            </div>
        </div>
    </section>
    <section class="utab__section" data-tab="Quartos">
        <div class="utab__level" data-level="1">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Quartos_lvl1.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 1</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="2">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Quartos_lvl2.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 2</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="3">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Quartos_lvl3.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 3</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="4">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Quartos_lvl4.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 4</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="5">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Quartos_lvl5.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 5</li>
                </ul>
            </div>
        </div>
    </section>
    <section class="utab__section" data-tab="Sala de Guerra">
        <div class="utab__level" data-level="1">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:SalaDeGuerra_lvl1.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 1</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="2">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:SalaDeGuerra_lvl2.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 2</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="3">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:SalaDeGuerra_lvl3.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 3</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="4">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:SalaDeGuerra_lvl4.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 4</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="5">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:SalaDeGuerra_lvl5.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 5</li>
                </ul>
            </div>
        </div>
    </section>
    <section class="utab__section" data-tab="Treinamento">
        <div class="utab__level" data-level="1">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Treinamento_lvl1.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 1</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="2">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Treinamento_lvl2.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 2</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="3">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Treinamento_lvl3.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 3</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="4">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Treinamento_lvl4.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 4</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="5">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Treinamento_lvl5.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 5</li>
                </ul>
            </div>
        </div>
    </section>
    <section class="utab__section" data-tab="Ferreiro">
        <div class="utab__level" data-level="1">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Ferreiro_lvl1.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 1</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="2">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Ferreiro_lvl2.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 2</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="3">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Ferreiro_lvl3.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 3</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="4">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Ferreiro_lvl4.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 4</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="5">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Ferreiro_lvl5.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 5</li>
                </ul>
            </div>
        </div>
    </section>
    <section class="utab__section" data-tab="Cozinha">
        <div class="utab__level" data-level="1">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Cozinha_lvl1.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 1</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="2">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Cozinha_lvl2.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 2</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="3">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Cozinha_lvl3.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 3</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="4">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Cozinha_lvl4.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 4</li>
                </ul>
            </div>
        </div>
        <div class="utab__level" data-level="5">
            <div class="utab__content">
                <div class="utab__mediaImage">[[File:Cozinha_lvl5.png|200px]]</div>
                <ul class="utab__statList">
                    <li>Descrição do nível 5</li>
                </ul>
            </div>
        </div>
    </section>
</div>
<script>
<script>
     function handleArrowNavigation(event, buttons, activate) {
     (function () {
         const keys = ["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown", "Home", "End"];
         function applyBackgrounds() {
        if (!keys.includes(event.key)) {
            document.querySelectorAll('.island-banner[data-bgimg]').forEach(function (el) {
             return;
                var filename = el.getAttribute('data-bgimg');
                if (!filename) return;
                var url;
                if (typeof mw !== 'undefined' && mw.util && mw.util.getUrl) {
                    url = mw.util.getUrl('Especial:FilePath/' + filename);
                } else {
                    url = '/index.php?title=Especial:FilePath/' + encodeURIComponent(filename);
                }
                el.style.backgroundImage = 'url(' + url + ')';
                el.style.backgroundSize = 'cover';
                el.style.backgroundPosition = 'center';
                el.style.backgroundRepeat = 'no-repeat';
             });
         }
         }
 
         function initClickable() {
         event.preventDefault();
             document.querySelectorAll('.island-banner[data-href]').forEach(function (el) {
        const currentIndex = buttons.findIndex((button) => button === document.activeElement);
                if (el._icClick) return;
        if (currentIndex === -1) {
                 el._icClick = true;
             return;
                 el.setAttribute('role', 'link');
        }
                el.setAttribute('tabindex', '0');
 
                el.addEventListener('click', function () {
        let nextIndex = currentIndex;
                    var href = el.getAttribute('data-href');
        if (event.key === "Home") {
                    if (href) window.location.href = href;
            nextIndex = 0;
                 });
        } else if (event.key === "End") {
                 el.addEventListener('keydown', function (e) {
            nextIndex = buttons.length - 1;
                    if (e.key === 'Enter' || e.key === ' ') {
        } else if (event.key === "ArrowLeft" || event.key === "ArrowUp") {
                         e.preventDefault();
            nextIndex = (currentIndex - 1 + buttons.length) % buttons.length;
                         var href = el.getAttribute('data-href');
        } else if (event.key === "ArrowRight" || event.key === "ArrowDown") {
                         if (href) window.location.href = href;
            nextIndex = (currentIndex + 1) % buttons.length;
        }
 
        activate(nextIndex, true);
    }
 
    function triggerFade(element) {
        element.classList.remove("is-fading");
        void element.offsetWidth;
        element.classList.add("is-fading");
    }
 
    function hasWikitext(value) {
        return typeof value === "string" && (value.includes("[[") || value.includes("{{"));
    }
 
    function parseWikitextCached(raw, cacheKey, target) {
        if (!raw || !hasWikitext(raw)) {
            return Promise.resolve(raw);
        }
        if (target[cacheKey]) {
            return Promise.resolve(target[cacheKey]);
        }
        if (!window.mw || !mw.Api) {
            return Promise.resolve(raw);
        }
 
        const api = new mw.Api();
        return api
            .post({
                action: "parse",
                text: raw,
                contentmodel: "wikitext",
                prop: "text",
                formatversion: 2
            })
            .then((response) => {
                const html = response?.parse?.text || response?.parse?.text?.["*"] || raw;
                target[cacheKey] = html;
                return html;
            })
            .catch(() => raw);
    }
 
    const upgradeCosts = [
        { level: 1, berries: "50.000", gems: "10", points: "400" },
        { level: 2, berries: "250.000", gems: "10", points: "1.500" },
        { level: 3, berries: "400.000", gems: "20", points: "3.000" },
        { level: 4, berries: "1.000.000", gems: "50", points: "12.500" },
        { level: 5, berries: "1.800.000", gems: "90", points: "28.000" }
    ];
 
    function buildLevelUI(section, tabLabel) {
        const levelElements = Array.from(section.querySelectorAll(".utab__level"));
        const levels = levelElements.map((levelElement, index) => {
            const levelNumber = levelElement.dataset.level || String(index + 1);
            const contentElement = levelElement.querySelector(".utab__content") || levelElement;
            const rawHtml = contentElement.innerHTML.trim();
            const contentWrapper = document.createElement("div");
            contentWrapper.innerHTML = rawHtml;
            const mediaImage = contentWrapper.querySelector(".utab__mediaImage");
            const imageHtml = mediaImage ? mediaImage.innerHTML.trim() : "";
            if (mediaImage) {
                 mediaImage.remove();
            }
            const statsHtml = contentWrapper.innerHTML.trim();
 
            return {
                 level: levelNumber,
                imageHtml,
                statsHtml
            };
        });
 
        levelElements.forEach((levelElement) => {
            levelElement.classList.add("utab__level--source");
        });
 
        const nav = document.createElement("div");
        nav.className = "utab__levels";
        nav.setAttribute("role", "tablist");
        nav.setAttribute("aria-label", `Níveis de ${tabLabel}`);
 
        const display = document.createElement("div");
        display.className = "utab__display";
 
        const imageWrap = document.createElement("div");
        imageWrap.className = "utab__image";
 
        const stats = document.createElement("div");
        stats.className = "utab__stats";
 
        display.appendChild(imageWrap);
        display.appendChild(stats);
 
        const buttons = levels.map((level, index) => {
            const button = document.createElement("button");
            button.type = "button";
            button.className = "utab__levelBtn";
            button.textContent = `Nv ${level.level}`;
            button.setAttribute("role", "tab");
            button.setAttribute("aria-selected", "false");
            button.setAttribute("tabindex", "-1");
            button.addEventListener("click", () => activateLevel(index, true));
            button.addEventListener("keydown", (event) => handleArrowNavigation(event, buttons, activateLevel));
            nav.appendChild(button);
            return button;
        });
 
        section.prepend(display);
        section.prepend(nav);
 
        let renderToken = 0;
 
        function activateLevel(index, shouldFocus) {
            if (!levels.length) {
                return;
            }
 
            const safeIndex = Math.max(0, Math.min(index, levels.length - 1));
            const current = levels[safeIndex];
            const token = ++renderToken;
 
            buttons.forEach((button, buttonIndex) => {
                const isActive = buttonIndex === safeIndex;
                button.classList.toggle("is-active", isActive);
                 button.setAttribute("aria-selected", isActive ? "true" : "false");
                 button.setAttribute("tabindex", isActive ? "0" : "-1");
            });
 
            if (current.imageHtml) {
                imageWrap.innerHTML = current.imageHtml;
                imageWrap.classList.remove("is-empty");
                display.classList.remove("is-image-empty");
            } else {
                imageWrap.innerHTML = "";
                imageWrap.classList.add("is-empty");
                display.classList.add("is-image-empty");
            }
 
            const levelNumber = Number(current.level);
            const cost = upgradeCosts.find((item) => item.level === levelNumber);
            const costHtml = cost
                ? `
                    <div class="utab__stat">
                        <div class="utab__statTitle">Custo do upgrade</div>
                        <ul class="utab__statList">
                            <li class="utab__costRow">
                                <span class="utab__costBerry">
                                    <span class="utab__costText">${cost.berries} berries</span>
                                </span>
                            </li>
                            ${cost.gems ? `
                                <li class="utab__costRow">
                                    <span class="utab__costGems">
                                        <span class="utab__costText">${cost.gems} gemas</span>
                                    </span>
                                </li>
                            ` : ""}
                            <li class="utab__costRow">
                                <span class="utab__costPoints">
                                    <span class="utab__costText">${cost.points} pontos</span>
                                </span>
                            </li>
                         </ul>
                    </div>
                `
                : "";
 
            stats.innerHTML = `${current.statsHtml}${costHtml}`;
            triggerFade(display);
 
            const shouldParse =
                (current.imageHtml && hasWikitext(current.imageHtml)) ||
                (current.statsHtml && hasWikitext(current.statsHtml));
 
            if (shouldParse) {
                Promise.all([
                    parseWikitextCached(current.imageHtml, "parsedImageHtml", current),
                    parseWikitextCached(current.statsHtml, "parsedStatsHtml", current)
                ]).then(([parsedImage, parsedStats]) => {
                    if (renderToken !== token) {
                        return;
                    }
                    if (parsedImage && parsedImage !== current.imageHtml) {
                         imageWrap.innerHTML = parsedImage;
                        imageWrap.classList.remove("is-empty");
                         display.classList.remove("is-image-empty");
                    }
                    if (parsedStats && parsedStats !== current.statsHtml) {
                        stats.innerHTML = `${parsedStats}${costHtml}`;
                     }
                     }
                 });
                 });
             }
             });
 
            if (shouldFocus) {
                buttons[safeIndex].focus();
            }
         }
         }
 
         function run() {
        return {
            applyBackgrounds();
            activateLevel
            initClickable();
         };
    }
 
    function initTabber(widget) {
        const sections = Array.from(widget.querySelectorAll(".utab__section"));
        if (!sections.length) {
            return;
         }
         }
 
         if (document.readyState === 'loading') {
         const tabs = document.createElement("div");
             document.addEventListener('DOMContentLoaded', run);
        tabs.className = "utab__tabs";
         } else {
        tabs.setAttribute("role", "tablist");
             run();
        tabs.setAttribute("aria-label", "Categorias");
 
        const tabButtons = [];
        const sectionStates = [];
 
        sections.forEach((section, index) => {
            const label = section.dataset.tab || `Categoria ${index + 1}`;
            section.classList.add("utab__panel");
            section.setAttribute("role", "tabpanel");
            section.setAttribute("aria-label", label);
 
             const button = document.createElement("button");
            button.type = "button";
            button.className = "utab__tab";
            button.textContent = label;
            button.setAttribute("role", "tab");
            button.setAttribute("aria-selected", "false");
            button.setAttribute("tabindex", "-1");
            button.addEventListener("click", () => activateTab(index, true));
            button.addEventListener("keydown", (event) => handleArrowNavigation(event, tabButtons, activateTab));
 
            tabs.appendChild(button);
            tabButtons.push(button);
            sectionStates.push(buildLevelUI(section, label));
         });
 
        widget.prepend(tabs);
 
        function activateTab(index, shouldFocus) {
             const safeIndex = Math.max(0, Math.min(index, sections.length - 1));
 
            sections.forEach((section, sectionIndex) => {
                const isActive = sectionIndex === safeIndex;
                section.classList.toggle("is-active", isActive);
                section.setAttribute("aria-hidden", isActive ? "false" : "true");
 
                const tabButton = tabButtons[sectionIndex];
                tabButton.classList.toggle("is-active", isActive);
                tabButton.setAttribute("aria-selected", isActive ? "true" : "false");
                tabButton.setAttribute("tabindex", isActive ? "0" : "-1");
            });
 
            sectionStates[safeIndex]?.activateLevel(0, false);
 
            if (shouldFocus) {
                tabButtons[safeIndex].focus();
            }
         }
         }
 
     })();
        activateTab(0, false);
    }
 
    function initTabbers() {
        document.querySelectorAll(".utab").forEach(initTabber);
     }
 
    if (document.readyState === "loading") {
        document.addEventListener("DOMContentLoaded", initTabbers);
    } else {
        initTabbers();
    }
</script>
</script>

Edição atual tal como às 00h06min de 13 de março de 2026

<style>

   .island-grid {
       display: flex;
       flex-wrap: wrap;
       justify-content: center;
       gap: 10px;
       padding: 12px 0;
   }
   .island-banner {
       position: relative;
       width: 380px;
       height: 90px;
       overflow: hidden;
       border-radius: 8px;
       box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 10px;
       cursor: pointer;
       transition: transform 0.15s, box-shadow 0.15s;
       display: block;
       box-sizing: border-box;
   }
   .island-banner::before {
       content: "";
       position: absolute;
       top: 0;
       left: 0;
       right: 0;
       bottom: 0;
       background: linear-gradient(105deg, rgba(0, 0, 0, 0.65) 0%, rgba(0, 0, 0, 0.35) 40%, rgba(0, 0, 0, 0.1) 70%, transparent 100%);
       pointer-events: none;
       z-index: 1;
   }
   .island-banner:hover {
       transform: translateY(-2px);
       box-shadow: rgba(0, 0, 0, 0.35) 0px 4px 12px;
   }
   .island-banner .island-chests {
       position: absolute;
       top: 8px;
       left: 8px;
       display: flex;
       flex-wrap: wrap;
       gap: 6px;
       z-index: 2;
       pointer-events: none;
   }
   .island-banner .island-chest-group {
       position: relative;
       display: inline-block;
   }
   .island-banner .island-chest-group img {
       display: block;
       width: auto;
       height: auto;
   }
   .island-banner .island-chest-count {
   position: absolute;
   left: 0;          /* era right: 0 */
   bottom: 0;
   font-size: 12.5px;  /* era 11px */
   font-weight: bold;
   color: #fff;
   background: rgba(0, 0, 0, 0.75);
   padding: 1px 3px;
   border-radius: 3px;
   line-height: 1;
   white-space: nowrap;
   box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
   z-index: 10;

}

   .island-banner .island-title {
       position: absolute;
       bottom: 10px;
       left: 8px;
       font-size: 1.35em;
       font-weight: bold;
       color: #fff;
       text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8), 0 2px 4px rgba(0, 0, 0, 0.5);
       line-height: 1.2;
       z-index: 2;
       pointer-events: none;
       text-transform: uppercase;
   }
   @media (max-width: 768px) {
       .island-grid {
           flex-direction: column;
           align-items: stretch;
       }
       .island-banner {
           width: 100%;
           max-width: none;
       }
   }

</style> <script>

   (function () {
       function applyBackgrounds() {
           document.querySelectorAll('.island-banner[data-bgimg]').forEach(function (el) {
               var filename = el.getAttribute('data-bgimg');
               if (!filename) return;
               var url;
               if (typeof mw !== 'undefined' && mw.util && mw.util.getUrl) {
                   url = mw.util.getUrl('Especial:FilePath/' + filename);
               } else {
                   url = '/index.php?title=Especial:FilePath/' + encodeURIComponent(filename);
               }
               el.style.backgroundImage = 'url(' + url + ')';
               el.style.backgroundSize = 'cover';
               el.style.backgroundPosition = 'center';
               el.style.backgroundRepeat = 'no-repeat';
           });
       }
       function initClickable() {
           document.querySelectorAll('.island-banner[data-href]').forEach(function (el) {
               if (el._icClick) return;
               el._icClick = true;
               el.setAttribute('role', 'link');
               el.setAttribute('tabindex', '0');
               el.addEventListener('click', function () {
                   var href = el.getAttribute('data-href');
                   if (href) window.location.href = href;
               });
               el.addEventListener('keydown', function (e) {
                   if (e.key === 'Enter' || e.key === ' ') {
                       e.preventDefault();
                       var href = el.getAttribute('data-href');
                       if (href) window.location.href = href;
                   }
               });
           });
       }
       function run() {
           applyBackgrounds();
           initClickable();
       }
       if (document.readyState === 'loading') {
           document.addEventListener('DOMContentLoaded', run);
       } else {
           run();
       }
   })();

</script>