Mudanças entre as edições de "MediaWiki:Common.css"

De Wiki Gla
Ir para navegação Ir para pesquisar
m
m (discussão removida)
Linha 1: Linha 1:
/* CSS placed here will be applied to all skins */
<!--
  Widget:TierList
  UI da tier list (board, pool, filtros, drag-and-drop, download).
  Uso: {{TierList}} (predefinição) ou
      {{#widget:TierList}}{{#invoke:TierList|renderAll}}
  Dados: textarea.gla-tierlist-data (JSON do Módulo:TierList, roster embutido).
  Medalhas: Arquivo:«Nome» medal.png via /images/… (fallback Especial:FilePath).
-->
<div class="gla-tierlist-root mw-no-invert" id="gla-tierlist-root">
  <section
    class="gla-tierlist-toolbar"
    data-i18n-aria="filtersAria"
    aria-label="Filtros"
  >
    <input
      type="search"
      class="gla-tierlist-search"
      data-i18n-placeholder="searchPlaceholder"
      placeholder="Filtrar personagem..."
      autocomplete="off"
      spellcheck="false"
    />
    <div class="gla-tierlist-filters" data-filters></div>
  </section>


@import url('https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@600;700&family=Source+Sans+3:wght@600;700;800&display=swap');
  <section
    class="gla-tierlist-classbar"
    data-i18n-aria="classFiltersAria"
    aria-label="Filtros de classe"
  >
    <div class="gla-tierlist-class-filters" data-class-filters></div>
  </section>


/* GLA palette — Direção A (atmosfera) */
  <section class="gla-tierlist-namebar">
:root {
    <input
  /* ---- LIGHT ---- */
      type="text"
  --gla-page-bg: #C4CED8;
      class="gla-tierlist-list-name"
  --gla-surface: #ECF0F4;
      data-list-name
  --gla-surface-alt: #DFE6EE;
      data-i18n-placeholder="listNamePlaceholder"
  --gla-border: #AEBBC6;
      placeholder="Nome da sua tier list..."
  --gla-tab-inactive: #D0DAE3;
      maxlength="60"
  --gla-link: #1D5CA8;
      autocomplete="off"
  --gla-accent: #2F6FE0;
      spellcheck="false"
  /* FASE 2 — novos tokens light */
    />
  --gla-text: #1E2226;
    <div class="gla-tierlist-actions">
  /* FASE 2: corpo claro explícito (13:1) */
      <button
  --gla-heading: #16202C;
        type="button"
  /* FASE 2: títulos claros */
        class="gla-tierlist-pill gla-tierlist-pill--btn"
  --gla-link-visited: #6B4FA0;
        data-download
  /* FASE 2: visited de conteúdo (5.1:1) */
        data-i18n="download"
  --gla-link-red: #B32424;
      >
  /* FASE 2: red links a.new (5.8:1) */
        Baixar imagem
  --gla-personal-bg: rgba(236, 240, 244, 0.94);
      </button>
  /* FASE 2: painel do topo */
      <button
   --gla-chrome-border: var(--gla-border);
        type="button"
        class="gla-tierlist-pill gla-tierlist-pill--btn"
        data-reset
        data-i18n="reset"
      >
        Limpar tier list
      </button>
    </div>
   </section>


   /* ---- DARK (Direção A) — cores diretas, sem filter invert ---- */
   <section
  --gla-dark-bg: #060708;
    class="gla-tierlist-board"
  --gla-dark-chrome: #272728;
    data-board
  --gla-dark-chrome-panel: #353a42;
    aria-label="Tier list"
  --gla-dark-tab-inactive: #3a3d42;
   ></section>
  /* compat: nomes antigos apontam para as mesmas cores finais */
  --gla-dark-preinvert: var(--gla-dark-chrome);
  --gla-dark-panel-preinvert: var(--gla-dark-chrome-panel);
  /* #content */
  --gla-dark-content-bg: #2a2d32;
  --gla-dark-content-panel: #353a42;
  --gla-dark-text: #d7d5cf;
  --gla-dark-heading: #e6e4dd;
  --gla-dark-border: #4a5058;
  --gla-dark-link: #6ba8dc;
  --gla-dark-link-visited: #B6A4E0;
  /* FASE 2: ajuste p/ AA (era #a898d4) */
  --gla-dark-link-red: #F08A8A;
  /* FASE 2: red links no dark (5.6:1) */
  --gla-dark-accent: #4C8DEE;
  /* FASE 2: realce/foco no dark */
  /* FASE 3: tabelas, forms, editor (padrão HK-style) */
  --gla-dark-table-header: #3d434c;
  --gla-dark-table-stripe: #2f3339;
  --gla-dark-table-hover: #424850;
  --gla-dark-input-bg: #1f2228;
  --gla-dark-editor-toolbar: #2f3339;
  --gla-dark-editor-toolbar-alt: #353a42;
  /* OOUI (forms de edição, checkboxes MW 1.36) */
  --gla-dark-ooui-text: var(--gla-dark-text);
  --gla-dark-ooui-input: var(--gla-dark-input-bg);
  --gla-dark-ooui-input-border: var(--gla-dark-border);
  --gla-dark-ooui-progressive: var(--gla-dark-accent);
  --gla-dark-ooui-interface: var(--gla-dark-chrome-panel);
  --gla-dark-ooui-interface-border: var(--gla-dark-border);
  --gla-dark-ooui-normal: var(--gla-dark-content-panel);
  --gla-dark-ooui-normal-hover: var(--gla-dark-table-hover);
  --gla-dark-ooui-accent: var(--gla-dark-link);
  --gla-dark-ooui-progressive-hover: #3d7ed4;
  --gla-dark-ooui-byline: #a8adb4;
  --gla-dark-ooui-disabled: #5a6068;
   --gla-dark-ooui-disabled-text: #7a8088;
  --gla-dark-ooui-window-overlay: rgba(0, 0, 0, 0.55);
  /* FASE 4 — message boxes, changeslist, diff */
  --gla-dark-error-bg: #3a1a1a;
  --gla-dark-error-border: #8a3030;
  --gla-dark-warning-bg: #3a3018;
  --gla-dark-warning-border: #8a7020;
  --gla-dark-success-bg: #1a3a24;
  --gla-dark-success-border: #2a7040;
  --gla-dark-messagebox-bg: var(--gla-dark-content-panel);
  --gla-dark-messagebox-border: var(--gla-dark-border);
  --gla-dark-not-patrolled: #4a4420;
  --gla-dark-rc-pos: #6db84a;
  --gla-dark-rc-neg: #6b8af0;
  --gla-dark-rc-highlight-c1: #232746;
  --gla-dark-rc-highlight-c2: #143d31;
  --gla-dark-rc-highlight-c3: #594a2b;
  --gla-dark-rc-highlight-c4: #5c3a23;
  --gla-dark-rc-highlight-c5: #4a1313;
  --gla-dark-rc-highlight-grey: #423636;
  --gla-dark-diff-context-bg: #2f3339;
  --gla-dark-diff-added-bg: #1e4a28;
  --gla-dark-diff-added-border: #2a7040;
  --gla-dark-diff-deleted-bg: #3a1a2a;
  --gla-dark-diff-deleted-border: #8a3050;
  --gla-dark-diff-inline-deleted: #2a2040;


   /* Sidebar nav caps */
   <section class="gla-tierlist-pool-wrap">
  --gla-nav-accent: var(--gla-accent, #2F6FE0);
    <div class="gla-tierlist-pool-head">
  --gla-nav-accent-2: #1D5CA8;
      <h3 data-i18n="poolTitle">Não ranqueados</h3>
  --gla-nav-cap: #D3DCE6;
      <span class="gla-tierlist-pool-count" data-pool-count>0</span>
  --gla-nav-panel: var(--gla-surface-alt, #DFE6EE);
    </div>
  --gla-nav-border: var(--gla-border, #AEBBC6);
    <div class="gla-tierlist-pool" data-pool></div>
  --gla-nav-ink: #34465C;
    <div class="gla-tierlist-empty" hidden>
  --gla-nav-link: var(--gla-link, #1D5CA8);
      <p data-i18n="empty">Nenhum personagem encontrado.</p>
  --gla-nav-shadow: rgba(20, 34, 56, 0.16);
      <button
  --gla-nav-cap-dark: #2c3036;
        type="button"
  /* FASE 2: cap 1 passo mais escuro que o painel */
        class="gla-tierlist-reset-filters"
  --gla-nav-panel-dark: #33373d;
        data-reset-filters
  /* FASE 2: harmoniza com cap (era #2f3339) */
        data-i18n="resetFilters"
   --gla-nav-ink-dark: #e6e4dd;
      >
  --gla-nav-border-dark: #5a6068;
        Limpar filtros
  --gla-nav-link-dark: var(--gla-dark-link);
      </button>
  --gla-nav-font: 'Source Sans 3', 'Segoe UI', system-ui, sans-serif;
    </div>
  --gla-nav-link-size: 14px;
   </section>
</div>


  /* Background site */
<style>
   --gla-bg-image: url(https://wiki.gla.com.br/images/c/c1/Water7Background.png);
   @import url("https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&display=swap");
  /* Mesma faixa vertical das abas (#left-navigation margin-top) */
  --gla-tabs-offset: 2.5em;
  --gla-logo-url: url('https://wiki.gla.com.br/images/b/bf/WIKIGLAlogo.png');
}


/* Sidebar START — Discord grande + redes (estilo vampire.survivors.wiki) */
  /* ============ Tier List: design wiki-nativo refinado ============ */


#p-logo {
  .gla-tierlist-root {
  margin-bottom: 14px;
    color-scheme: light;
}
    --gla-ink: #0f172a;
    --gla-ink-2: #475569;
    --gla-dim: #94a3b8;
    --gla-paper: #eef3f7; /* painéis (header, rows, pool) */
    --gla-paper-2: #ffffff; /* inputs, pills */
    --gla-rule: #e2e8f0;
    --gla-accent: #156bc7;
    --gla-accent-soft: #e8f2fc;
    --gla-ok: #0d9488;
    --gla-rar-diamond: #0391c5;
    --gla-rar-gold: #b8860b;
    --gla-rar-silver: #6b7280;
    --gla-rar-bronze: #c56e04;
    /* Controles da toolbar: altura/borda/tipo únicos (filtros, pills, inputs) */
    --gla-ctrl-h: 34px;
    --gla-ctrl-gap: 6px;
    --gla-ctrl-radius: 999px;
    --gla-ctrl-radius-field: 10px;
    --gla-ctrl-border-w: 1.5px;
    /* Borda de controle: um tom acima de --gla-rule pra nao sumir no fundo */
    --gla-ctrl-border: #c5ced9;
    --gla-ctrl-pad-x: 12px;
    --gla-ctrl-fs: 13px;
    --gla-ctrl-fw: 500;
    --gla-ctrl-lh: 1;
    --gla-ctrl-font: "Noto Sans", "Segoe UI", sans-serif;
    font-family: "Noto Sans", sans-serif;
    color: var(--gla-ink);
    margin: 0 0 1.5rem;
  }


#p-Navigation .vector-menu-content-list {
  .gla-tierlist-root *,
  display: block;
  .gla-tierlist-root *::before,
}
  .gla-tierlist-root *::after {
    box-sizing: border-box;
  }


#p-Navigation .vector-menu-content-list li {
  html.client-darkmode .gla-tierlist-root,
  display: list-item;
  html.skin-theme-clientpref-night .gla-tierlist-root {
  float: none;
    color-scheme: dark;
  width: auto;
    --gla-ink: #e8eef5;
}
    --gla-ink-2: #9aa6b5;
    --gla-dim: #6b7788;
    --gla-paper: #171c26;
    --gla-paper-2: #1e2430;
    --gla-rule: #3a4252;
    --gla-ctrl-border: #5c667a;
    --gla-accent: #5ba3e0;
    --gla-accent-soft: rgba(91, 163, 224, 0.18);
    --gla-ok: #2dd4bf;
    --gla-rar-diamond: #4cc4ea;
    --gla-rar-gold: #e8b53a;
    --gla-rar-silver: #9aa6b5;
    --gla-rar-bronze: #f18a05;
  }


#n-recentchanges,
  /* DarkMode da wiki invert+hue-rotate no documento; mw-no-invert no root
#n-randompage {
      devolve as cores reais. Imagens precisam de filter:none pra nao inverter 2x. */
  display: list-item;
  html.client-darkmode .gla-tierlist-root.mw-no-invert img,
}
  html.skin-theme-clientpref-night .gla-tierlist-root.mw-no-invert img,
  html.client-darkmode .gla-tierlist-root.mw-no-invert video,
  html.skin-theme-clientpref-night .gla-tierlist-root.mw-no-invert video {
    filter: none;
    -webkit-filter: none;
  }


/* --- Discord (portal próprio, botão largo) --- */
  /* Pills de ação: mesmo sistema visual dos filtros de raridade.
#p-Discord-label {
    #content.mw-body … sobrescreve o skin da wiki em <button>
  display: none;
    (padding/line-height/display), que empurra o texto pra cima. */
}
  .gla-tierlist-pill,
  #content.mw-body .gla-tierlist-root .gla-tierlist-pill {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    margin: 0;
    min-height: var(--gla-ctrl-h);
    height: var(--gla-ctrl-h);
    padding: 0 var(--gla-ctrl-pad-x);
    border-radius: var(--gla-ctrl-radius);
    border: var(--gla-ctrl-border-w) solid var(--gla-ctrl-border);
    background: var(--gla-paper-2);
    color: var(--gla-ink-2);
    font-family: var(--gla-ctrl-font);
    font-size: var(--gla-ctrl-fs);
    font-weight: var(--gla-ctrl-fw);
    letter-spacing: 0;
    line-height: var(--gla-ctrl-lh);
    white-space: nowrap;
    vertical-align: middle;
  }


#p-Discord.vector-menu-portal {
  .gla-tierlist-actions {
  background: transparent;
    display: flex;
  border: none;
    flex-wrap: wrap;
  box-shadow: none;
    align-items: center;
  margin: 0 8px 0 5px;
    gap: var(--gla-ctrl-gap);
  padding: 0;
    flex: 0 0 auto;
}
    justify-content: center;
  }


#p-Discord .vector-menu-content {
  .gla-tierlist-pill--btn,
  background: transparent !important;
  #content.mw-body .gla-tierlist-root .gla-tierlist-pill--btn {
  border: none !important;
    cursor: pointer;
  box-shadow: none !important;
    appearance: none;
  padding: 0 !important;
    -webkit-appearance: none;
  margin: 0 !important;
    margin: 0;
}
    display: inline-flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    min-height: var(--gla-ctrl-h);
    height: var(--gla-ctrl-h);
    padding: 0 var(--gla-ctrl-pad-x);
    border: var(--gla-ctrl-border-w) solid var(--gla-ctrl-border);
    border-radius: var(--gla-ctrl-radius);
    background: var(--gla-paper-2);
    color: var(--gla-ink-2);
    font-family: var(--gla-ctrl-font);
    font-size: var(--gla-ctrl-fs);
    font-weight: var(--gla-ctrl-fw);
    line-height: var(--gla-ctrl-lh);
    transition:
      background 0.15s,
      border-color 0.15s,
      color 0.15s,
      opacity 0.15s;
    flex: 0 0 auto;
  }


#n-Discord {
  .gla-tierlist-pill--btn::-moz-focus-inner {
  font-size: 12px;
    border: 0;
  line-height: 1;
    padding: 0;
  list-style: none;
   }
  margin: 0;
   width: 100%;
}


#n-Discord a {
  .gla-tierlist-pill--btn:hover,
  color: #fff !important;
   #content.mw-body .gla-tierlist-root .gla-tierlist-pill--btn:hover {
  font-weight: bold;
    border-color: var(--gla-accent);
  border-radius: 4px;
    color: var(--gla-accent);
   border: 1px solid #4c57d0;
   }
  background-color: #5865f2;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.4em;
  position: relative;
  line-height: 1;
  padding: 7px 8px;
  box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1);
  transition: 0.2s;
  box-sizing: border-box;
  width: 100%;
  min-height: 32px;
  white-space: nowrap;
   text-align: center;
}


#n-Discord a::before {
  .gla-tierlist-pill--btn:disabled {
  content: none;
    opacity: 0.55;
}
    cursor: wait;
  }


#n-Discord .gla-discord-icon {
  /* ---------- Toolbar ---------- */
  flex-shrink: 0;
  display: block;
  width: 16px;
  height: 12px;
  background: url('https://wiki.gla.com.br/images/e/e9/Discord-icon.png') no-repeat center center;
  background-size: 16px 12px;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.1));
}


#n-Discord .gla-discord-text {
  .gla-tierlist-toolbar {
  display: inline-block;
    display: flex;
  font-weight: normal;
    flex-wrap: wrap;
  line-height: 1;
    gap: var(--gla-ctrl-gap) 10px;
  transform: translateY(1px);
    align-items: center;
}
    margin-bottom: 0.55rem;
  }


#n-Discord .gla-discord-text strong {
  .gla-tierlist-search {
  font-weight: bold;
    flex: 1 1 14rem;
}
    min-width: 11rem;
    box-sizing: border-box;
    height: var(--gla-ctrl-h);
    min-height: var(--gla-ctrl-h);
    padding: 0 14px;
    border: var(--gla-ctrl-border-w) solid var(--gla-ctrl-border);
    border-radius: var(--gla-ctrl-radius-field);
    font-family: var(--gla-ctrl-font);
    font-size: var(--gla-ctrl-fs);
    font-weight: var(--gla-ctrl-fw);
    line-height: var(--gla-ctrl-lh);
    background: var(--gla-paper-2);
    color: var(--gla-ink);
    transition:
      border-color 0.15s,
      box-shadow 0.15s;
  }


#n-Discord a::after {
  .gla-tierlist-search::placeholder {
  content: none;
    color: var(--gla-dim);
  display: none;
    font-weight: var(--gla-ctrl-fw);
}
  }


#n-Discord:hover a {
  .gla-tierlist-search:focus {
  text-decoration: none !important;
    outline: none;
  background-color: #7885ff;
    border-color: var(--gla-accent);
  border-color: #6c77f0;
    box-shadow: 0 0 0 3px var(--gla-accent-soft);
}
  }


/* --- Instagram + TikTok (ícones menores) --- */
  .gla-tierlist-filters {
#p-Redes-label {
    display: flex;
   display: none;
    flex-wrap: wrap;
}
    align-items: center;
    gap: var(--gla-ctrl-gap);
   }


#p-Redes.vector-menu-portal {
  .gla-tierlist-filter,
  background: transparent;
  #content.mw-body .gla-tierlist-root .gla-tierlist-filter {
  border: none;
    cursor: pointer;
  box-shadow: none;
    appearance: none;
  margin: 0 8px 12px 5px;
    -webkit-appearance: none;
  padding: 0;
    margin: 0;
}
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    box-sizing: border-box;
    min-height: var(--gla-ctrl-h);
    height: var(--gla-ctrl-h);
    padding: 0 var(--gla-ctrl-pad-x);
    border: var(--gla-ctrl-border-w) solid var(--gla-ctrl-border);
    border-radius: var(--gla-ctrl-radius);
    background: var(--gla-paper-2);
    color: var(--gla-ink-2);
    font-family: var(--gla-ctrl-font);
    font-size: var(--gla-ctrl-fs);
    font-weight: var(--gla-ctrl-fw);
    letter-spacing: 0;
    line-height: var(--gla-ctrl-lh);
    white-space: nowrap;
    vertical-align: middle;
    transition:
      background 0.15s,
      border-color 0.15s,
      color 0.15s;
  }


#p-Redes .vector-menu-content {
  .gla-tierlist-filter::-moz-focus-inner {
  background: transparent !important;
    border: 0;
  border: none !important;
    padding: 0;
  box-shadow: none !important;
   }
  padding: 0 !important;
   margin: 0 !important;
}


#p-Redes .vector-menu-content-list {
  .gla-tierlist-filter:hover,
  display: flex;
   #content.mw-body .gla-tierlist-root .gla-tierlist-filter:hover {
   justify-content: flex-start;
    border-color: var(--gla-accent);
  align-items: center;
   }
  flex-wrap: nowrap;
  gap: calc((100% - 4 * 35px) / 3);
  width: 100%;
  box-sizing: border-box;
  padding: 0;
   margin: 0;
}


#p-Redes .vector-menu-content-list li {
  .gla-tierlist-filter-label {
  list-style: none;
    font-family: inherit;
  margin: 0;
    font-size: inherit;
  flex: 0 0 auto;
    font-weight: inherit;
}
    line-height: 1;
    color: inherit;
  }


#p-Redes .vector-menu-content-list a {
  .gla-tierlist-filter-dot {
  display: block;
    width: 8px;
  font-size: 0;
    height: 8px;
  line-height: 0;
    border-radius: 50%;
  padding: 0;
    flex-shrink: 0;
  color: transparent !important;
    background: var(--gla-dim);
   text-decoration: none !important;
   }
}


#n-Instagram a::before,
  .gla-tierlist-filter[data-tier="diamond"] .gla-tierlist-filter-dot {
#n-TikTok a::before,
    background: var(--gla-rar-diamond);
#n-YouTube a::before,
   }
#n-Facebook a::before {
   .gla-tierlist-filter[data-tier="gold"] .gla-tierlist-filter-dot {
  content: ' ';
    background: var(--gla-rar-gold);
   display: block;
   }
   width: 35px;
   .gla-tierlist-filter[data-tier="silver"] .gla-tierlist-filter-dot {
   height: 35px;
    background: var(--gla-rar-silver);
   border-radius: 15%;
   }
  overflow: hidden;
   .gla-tierlist-filter[data-tier="bronze"] .gla-tierlist-filter-dot {
  background-size: 100% 100%;
    background: var(--gla-rar-bronze);
   background-position: center;
  }
   background-repeat: no-repeat;
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
  transform: translateZ(0);
}


#n-Instagram a::before {
  .gla-tierlist-filter.is-active,
  background-image: url('https://wiki.gla.com.br/images/8/8a/Instagram-icon.png');
  #content.mw-body .gla-tierlist-root .gla-tierlist-filter.is-active {
}
    border-color: var(--gla-accent);
    background: var(--gla-accent-soft);
    color: var(--gla-accent);
  }


#n-TikTok a::before {
  .gla-tierlist-filter[data-tier="diamond"].is-active,
   background-image: url('https://wiki.gla.com.br/images/6/6e/Tiktok-icon.png');
  #content.mw-body
}
    .gla-tierlist-root
    .gla-tierlist-filter[data-tier="diamond"].is-active {
    border-color: var(--gla-rar-diamond);
    color: var(--gla-rar-diamond);
    background: rgba(3, 145, 197, 0.14);
  }
  .gla-tierlist-filter[data-tier="gold"].is-active,
  #content.mw-body
    .gla-tierlist-root
    .gla-tierlist-filter[data-tier="gold"].is-active {
    border-color: var(--gla-rar-gold);
    color: var(--gla-rar-gold);
    background: rgba(212, 160, 23, 0.14);
  }
  .gla-tierlist-filter[data-tier="silver"].is-active,
   #content.mw-body
    .gla-tierlist-root
    .gla-tierlist-filter[data-tier="silver"].is-active {
    border-color: var(--gla-rar-silver);
    color: var(--gla-rar-silver);
    background: rgba(140, 140, 140, 0.14);
  }
  .gla-tierlist-filter[data-tier="bronze"].is-active,
  #content.mw-body
    .gla-tierlist-root
    .gla-tierlist-filter[data-tier="bronze"].is-active {
    border-color: var(--gla-rar-bronze);
    color: var(--gla-rar-bronze);
    background: rgba(241, 138, 5, 0.14);
  }


#n-YouTube a::before {
  /* ---------- Class filters ---------- */
  background-image: url('https://wiki.gla.com.br/images/0/03/Youtube-icon.png');
}


#n-Facebook a::before {
  .gla-tierlist-classbar {
  background-image: url('https://wiki.gla.com.br/images/d/dd/Facebook-icon.png');
    margin: 0 0 0.55rem;
}
  }


#p-Redes .vector-menu-content-list span {
  .gla-tierlist-namebar {
  display: none;
    margin: 0 0 0.85rem;
}
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: var(--gla-ctrl-gap) 10px;
  }


#p-Redes .vector-menu-content-list a:hover {
  .gla-tierlist-list-name {
  filter: brightness(1.15);
    flex: 1 1 14rem;
  text-decoration: none !important;
    width: auto;
}
    max-width: 22rem;
    min-width: 11rem;
    box-sizing: border-box;
    height: var(--gla-ctrl-h);
    min-height: var(--gla-ctrl-h);
    padding: 0 14px;
    border: var(--gla-ctrl-border-w) solid var(--gla-ctrl-border);
    border-radius: var(--gla-ctrl-radius-field);
    font-family: var(--gla-ctrl-font);
    font-size: var(--gla-ctrl-fs);
    font-weight: var(--gla-ctrl-fw);
    line-height: var(--gla-ctrl-lh);
    text-align: center;
    background: var(--gla-paper-2);
    color: var(--gla-ink);
    transition:
      border-color 0.15s,
      box-shadow 0.15s;
  }


.client-darkmode #n-Discord a,
  .gla-tierlist-list-name::placeholder {
.skin-theme-clientpref-night #n-Discord a,
    color: var(--gla-dim);
.client-darkmode #n-Discord .gla-discord-text,
    font-weight: var(--gla-ctrl-fw);
.skin-theme-clientpref-night #n-Discord .gla-discord-text,
   }
.client-darkmode #n-Discord .gla-discord-text strong,
.skin-theme-clientpref-night #n-Discord .gla-discord-text strong {
   color: #fff !important;
}


.client-darkmode #n-Discord a,
  .gla-tierlist-list-name:focus {
.skin-theme-clientpref-night #n-Discord a {
    outline: none;
  background-color: #5865f2;
    border-color: var(--gla-accent);
  border-color: #4c57d0;
    box-shadow: 0 0 0 3px var(--gla-accent-soft);
  font-weight: bold;
  }
}


.client-darkmode #n-Discord .gla-discord-text,
  /* Chips de classe no idioma visual da Dima (.gla-dima-filter). */
.skin-theme-clientpref-night #n-Discord .gla-discord-text {
  .gla-tierlist-class-filters {
  font-weight: normal !important;
    display: flex;
}
    flex-wrap: wrap;
    justify-content: center;
    gap: 6px;
    min-width: 0;
    width: 100%;
  }


.client-darkmode #n-Discord .gla-discord-text strong,
  .gla-tierlist-class-filter,
.skin-theme-clientpref-night #n-Discord .gla-discord-text strong {
  #content.mw-body .gla-tierlist-root .gla-tierlist-class-filter {
  font-weight: bold !important;
    display: inline-flex;
}
    align-items: center;
    gap: 6px;
    flex: 0 0 auto;
    margin: 0;
    padding: 4px 12px 4px 6px;
    border-radius: 999px;
    border: var(--gla-ctrl-border-w) solid var(--gla-ctrl-border);
    background: var(--gla-paper-2);
    cursor: pointer;
    appearance: none;
    -webkit-appearance: none;
    box-sizing: border-box;
    font-family: "Noto Sans", "Segoe UI", sans-serif;
    font-size: 13px;
    font-weight: 500;
    letter-spacing: 0;
    color: var(--gla-ink-2);
    line-height: 1;
    transition:
      border-color 0.15s,
      background 0.15s,
      color 0.15s;
  }


.client-darkmode #n-Discord:hover a,
  .gla-tierlist-class-filter::-moz-focus-inner {
.skin-theme-clientpref-night #n-Discord:hover a,
    border: 0;
.client-darkmode #n-Discord:hover .gla-discord-text,
    padding: 0;
.skin-theme-clientpref-night #n-Discord:hover .gla-discord-text,
   }
.client-darkmode #n-Discord:hover .gla-discord-text strong,
.skin-theme-clientpref-night #n-Discord:hover .gla-discord-text strong {
   color: #fff !important;
}


.client-darkmode #n-Discord:hover a,
  .gla-tierlist-class-filter:hover,
.skin-theme-clientpref-night #n-Discord:hover a {
  #content.mw-body .gla-tierlist-root .gla-tierlist-class-filter:hover {
  background-color: #7885ff;
    border-color: var(--gla-accent);
   border-color: #6c77f0;
   }
}


/* Sidebar END */
  .gla-tierlist-class-filter img {
/* Changes applied to the vector skin for all users */
    width: 32px;
/* Try to use only for things "outside" the content, prefer a more specific .css file for other features */
    height: 32px;
    flex-shrink: 0;
    object-fit: contain;
    opacity: 0.55;
    transition: opacity 0.15s;
    filter: none;
    -webkit-filter: none;
  }


/* GLA site background — PNG + fallback page-bg (não branco do browser) */
   .gla-tierlist-class-filter img.is-missing {
html {
    display: none;
   background-color: var(--gla-page-bg, #C4CED8);
   }
  /* Evita “pulo” lateral ao toggle dark (overflow:hidden / View Transitions) */
   scrollbar-gutter: stable;
}


html.client-darkmode,
  .gla-tierlist-class-filter--text-only {
html.skin-theme-clientpref-night {
    padding-left: 12px;
  background-color: var(--gla-dark-bg, #060708);
    padding-right: 12px;
}
  }


body {
  .gla-tierlist-class-filter span {
  background-color: transparent;
    font-family: "Noto Sans", "Segoe UI", sans-serif;
  background-image: none;
    font-size: 13px;
}
    font-weight: 500;
    color: inherit;
    white-space: nowrap;
  }


/* Camada sólida atrás da PNG — transparente da arte mostra page-bg, não #fff */
  .gla-tierlist-class-filter.is-active,
html::after {
   #content.mw-body .gla-tierlist-root .gla-tierlist-class-filter.is-active {
   content: "";
    border-color: var(--gla-accent);
  position: fixed;
    background: var(--gla-accent-soft);
  inset: 0;
    color: var(--gla-accent);
  z-index: -2;
  }
  pointer-events: none;
  background-color: var(--gla-page-bg, #C4CED8);
}


html::before {
   .gla-tierlist-class-filter.is-active img {
   content: "";
     opacity: 1;
  position: fixed;
   }
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background-color: var(--gla-page-bg, #C4CED8);
  /* Borracha soft (dureza baixa): dissolve a base da PNG no page-bg */
  background-image:
    linear-gradient(to bottom,
      transparent 0%,
      transparent 44%,
      rgba(196, 206, 216, 0.22) 56%,
      rgba(196, 206, 216, 0.52) 68%,
      rgba(196, 206, 216, 0.82) 80%,
      var(--gla-page-bg) 94%),
     var(--gla-bg-image);
  background-repeat: no-repeat, no-repeat;
  background-position: center top, center top;
  background-size: 100% auto, 100% auto;
  background-attachment: fixed;
  -webkit-mask-image: linear-gradient(to bottom,
      #000 0%,
      #000 40%,
      rgba(0, 0, 0, 0.94) 52%,
      rgba(0, 0, 0, 0.78) 64%,
      rgba(0, 0, 0, 0.48) 76%,
      rgba(0, 0, 0, 0.18) 88%,
      transparent 100%);
   mask-image: linear-gradient(to bottom,
      #000 0%,
      #000 40%,
      rgba(0, 0, 0, 0.94) 52%,
      rgba(0, 0, 0, 0.78) 64%,
      rgba(0, 0, 0, 0.48) 76%,
      rgba(0, 0, 0, 0.18) 88%,
      transparent 100%);
  -webkit-mask-size: 100% 100%;
  mask-size: 100% 100%;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  filter: none !important;
  -webkit-filter: none !important;
}


/* Dark: cor base; camadas completas no bloco FASE 2 (#3) */
  /* ---------- Board ---------- */
html.client-darkmode::before,
html.skin-theme-clientpref-night::before {
  background-color: var(--gla-dark-bg, #060708);
}


/* Mata invert da extensão DarkMode (se ativa na wiki) + garante fundo normal */
  .gla-tierlist-board {
html.client-darkmode,
    display: flex;
html.skin-theme-clientpref-night,
    flex-direction: column;
html.client-darkmode::after,
    gap: 0.5rem;
html.skin-theme-clientpref-night::after,
    margin-bottom: 0.85rem;
html.client-darkmode body,
    overflow: visible;
html.skin-theme-clientpref-night body,
   }
html.client-darkmode img,
html.skin-theme-clientpref-night img,
html.client-darkmode video,
html.skin-theme-clientpref-night video,
html.client-darkmode svg,
html.skin-theme-clientpref-night svg {
  filter: none !important;
   -webkit-filter: none !important;
}


/* Dark: fallback atrás da PNG (fora do filter do body) — classe está no próprio html */
  .gla-tierlist-row {
html.client-darkmode::after,
    display: grid;
html.skin-theme-clientpref-night::after {
    grid-template-columns: 4rem 1fr;
  background-color: var(--gla-dark-bg, #060708);
    min-height: 6.5rem;
}
    border: 1px solid var(--gla-rule);
    border-radius: 12px;
    /* visible: overflow:hidden clipava o tooltip do nome acima da medalha */
    overflow: visible;
    background: var(--gla-paper);
  }


@media (max-width: 768px) {
  .gla-tierlist-row.is-drop-target {
  html::before {
    outline: 2px solid var(--gla-accent);
     background-attachment: scroll;
     outline-offset: 1px;
   }
   }
}


#mw-page-base {
  .gla-tierlist-label {
  background-image: none;
    display: flex;
  background-color: rgba(0, 0, 0, 0);
    align-items: center;
}
    justify-content: center;
    font-family: "Space Grotesk", sans-serif;
    font-weight: 700;
    font-size: 1.4rem;
    letter-spacing: 0.04em;
    color: #111827;
    user-select: none;
    cursor: pointer;
    /* cantos arredondados no label (row não usa mais overflow:hidden) */
    border-radius: 11px 0 0 11px;
  }


#mw-head div.vectorMenu h3 {
  .gla-tierlist-row[data-rank="S"] .gla-tierlist-label {
   background-image: none;
    background: #ff7f7f;
}
  }
  .gla-tierlist-row[data-rank="A"] .gla-tierlist-label {
    background: #ffbf7f;
  }
   .gla-tierlist-row[data-rank="B"] .gla-tierlist-label {
    background: #ffdf7f;
  }
  .gla-tierlist-row[data-rank="C"] .gla-tierlist-label {
    background: #ffff7f;
  }
  .gla-tierlist-row[data-rank="D"] .gla-tierlist-label {
    background: #bfff7f;
  }


div.vectorMenu h3 span {
  .gla-tierlist-slots {
  padding-top: 1em;
    display: flex;
}
    flex-wrap: wrap;
    gap: 0.25rem;
    align-content: flex-start;
    padding: 0.5rem;
    min-height: 6.5rem;
    overflow: visible;
  }


div.vectorTabs {
   /* ---------- Pool ---------- */
   border-top: 1px solid var(--gla-border);
  height: 2.2em;
}


div.vectorTabs li a {
  .gla-tierlist-pool-wrap {
  height: 1.95em;
    background: var(--gla-paper);
}
    border: 1px solid var(--gla-rule);
    border-radius: 14px;
    padding: 0.9rem 1rem 1rem;
    overflow: visible;
  }


div.vectorTabs span a {
  .gla-tierlist-pool-head {
  padding-top: 0.8em;
    display: flex;
}
    align-items: baseline;
    gap: 0.65rem;
    margin-bottom: 0.65rem;
  }


#p-personal {
  .gla-tierlist-pool-head h3 {
  top: 0;
    margin: 0;
  right: 0;
    font-family: "Space Grotesk", sans-serif;
  background-color: var(--gla-surface-alt);
    font-size: 0.95rem;
  padding: 0.15em 0.75em 0.15em 0;
    font-weight: 700;
  border-radius: 0 0 0 5px;
   }
  display: flex;
   align-items: center;
  min-height: 2em;
  box-sizing: border-box;
}


#p-personal ul {
  .gla-tierlist-pool-count {
  padding-left: 0;
    color: var(--gla-dim);
}
    font-size: 0.8rem;
    font-weight: 600;
  }


#p-personal .vector-menu-content-list {
  .gla-tierlist-pool {
  align-items: center !important;
    display: flex;
}
    flex-wrap: wrap;
    justify-content: center;
    gap: 0.25rem;
    min-height: 4.5rem;
    overflow: visible;
  }


#p-personal li {
  .gla-tierlist-pool.is-drop-target {
  float: none;
    outline: 2px dashed var(--gla-accent);
  padding-top: 0 !important;
    outline-offset: 2px;
  margin-left: 0.75em;
    border-radius: 10px;
  line-height: 1.35;
   }
  display: flex;
   align-items: center;
}


/* Remove ícone de avatar do Vector em Admin / anon */
  /* Pool: medalhas um pouco mais suaves que as da board (modo claro incomoda). */
#pt-userpage a,
  .gla-tierlist-pool .gla-tierlist-char-art img {
#pt-anonuserpage {
    opacity: 0.9;
  background-image: none !important;
    filter: saturate(0.88) brightness(0.98);
  background-size: 0 !important;
    transition:
  padding-left: 0 !important;
      opacity 0.15s ease,
  padding-top: 0 !important;
      filter 0.15s ease;
}
  }


#pt-userpage {
  .gla-tierlist-pool .gla-tierlist-char:hover .gla-tierlist-char-art img,
   padding-top: 0 !important;
  .gla-tierlist-pool
}
    .gla-tierlist-char:focus-visible
    .gla-tierlist-char-art
    img,
   .gla-tierlist-pool .gla-tierlist-char.is-selected .gla-tierlist-char-art img {
    opacity: 1;
    filter: none;
  }


#p-logo {
  /* ---------- Character card ---------- */
  padding-top: 0;
  position: relative;
  z-index: 1;
}


/* Layout — sidebar; abas e conteúdo alinhados à direita da sidebar */
  .gla-tierlist-char {
#mw-panel {
    position: relative;
  width: 12.5em;
    flex: 0 0 104px;
  box-sizing: border-box;
    width: 104px;
}
    min-width: 104px;
    cursor: grab;
    border: 0;
    background: transparent;
    padding: 4px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0;
    transition:
      transform 0.12s ease,
      opacity 0.15s;
    touch-action: none;
    user-select: none;
    -webkit-user-select: none;
    /* sem content-visibility: auto — paint containment clipava o tooltip fora do box */
    overflow: visible;
    z-index: 0;
  }


#p-logo {
  .gla-tierlist-char:active {
  width: 100% !important;
    cursor: grabbing;
  max-width: 100% !important;
   }
   box-sizing: border-box;
}


#content,
  .gla-tierlist-char:focus,
#content.mw-body {
  .gla-tierlist-char:focus-visible,
   margin-left: 13.75em !important;
   .gla-tierlist-char:focus-within,
  position: relative;
  .gla-tierlist-char.is-selected,
  z-index: 2;
  .gla-tierlist-char.is-selected .gla-tierlist-char-art,
}
  .gla-tierlist-char.is-selected .gla-tierlist-char-art img {
    outline: none !important;
    outline-offset: 0 !important;
    box-shadow: none !important;
  }


#left-navigation {
  /* Sem scale/filter no hover: Chromium re-rasteriza a medalha e perde nitidez. */
   margin-left: 13.75em !important;
  .gla-tierlist-char:hover,
}
   .gla-tierlist-char:focus-visible,
  .gla-tierlist-char.is-selected {
    transform: translate3d(0, -2px, 0);
    z-index: 30;
  }


@media (max-width: 1000px) {
  .gla-tierlist-char.is-hidden {
  #mw-panel {
     display: none;
     width: 11.5em;
   }
   }


   #content,
   .gla-tierlist-char.is-dragging {
  #content.mw-body,
     opacity: 0.45;
  #left-navigation {
    z-index: 40;
     margin-left: 12.75em !important;
   }
   }
}


@media (max-width: 600px) {
  .gla-tierlist-char-art {
  #mw-panel {
    width: 96px;
     width: 10.75em;
    height: 96px;
    background: transparent;
    overflow: visible;
    line-height: 0;
     flex-shrink: 0;
   }
   }


   #content,
   .gla-tierlist-char-art img {
  #content.mw-body,
    width: 100%;
  #left-navigation {
    height: 100%;
     margin-left: 11.75em !important;
    object-fit: contain;
    display: block;
    background: transparent;
    pointer-events: none;
    transform: translateZ(0);
    backface-visibility: hidden;
     -webkit-backface-visibility: hidden;
   }
   }
}


#content {
  /* Nome só no tooltip (hover/foco/seleção). Texto sempre preto; pontinha pro medal. */
   box-shadow: rgba(0, 0, 0, 0.15) 0 0.1em 0.75em;
   .gla-tierlist-char-name {
  background-color: var(--gla-surface);
    position: absolute;
  background-image: none;
    left: 50%;
  margin-top: -1px;
    bottom: calc(100% + 6px);
  border: 1px solid var(--gla-border);
    transform: translateX(-50%) translateY(4px);
  border-right-width: 0;
    margin: 0;
}
    padding: 0.45rem 0.8rem;
    max-width: 16rem;
    border-radius: 10px;
    border: 1px solid var(--gla-rule);
    background: #ffffff;
    box-shadow: 0 8px 22px rgba(15, 23, 42, 0.18);
    font-family: "Noto Sans", "Segoe UI", sans-serif;
    font-size: 0.9375rem;
    font-weight: 700;
    letter-spacing: 0;
    line-height: 1.25;
    text-align: center;
    color: #0f172a !important;
    white-space: nowrap;
    overflow: visible;
    text-overflow: ellipsis;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition:
      opacity 0.12s ease,
      transform 0.12s ease,
      visibility 0.12s;
    z-index: 50;
  }


#firstHeading,
  .gla-tierlist-char-name::after {
h1.firstHeading {
    content: "";
  border-bottom: 0 !important;
    position: absolute;
  margin-bottom: 0.25em;
    left: 50%;
  padding-bottom: 0;
    top: 100%;
  font-family: var(--gla-nav-font);
    width: 10px;
  color: inherit;
    height: 10px;
}
    margin-left: -5px;
    margin-top: -5px;
    background: #ffffff;
    border-right: 1px solid var(--gla-rule);
    border-bottom: 1px solid var(--gla-rule);
    transform: rotate(45deg);
    box-shadow: 2px 2px 4px rgba(15, 23, 42, 0.06);
  }


/* Home: fade sólido no topo → transparente (mesmo visual no dark — conteúdo não escurece) */
  html.client-darkmode .gla-tierlist-char-name,
body.page-Main_Page #content.mw-body,
   html.skin-theme-clientpref-night .gla-tierlist-char-name {
body.page-Página_principal #content.mw-body {
    background: #1e2430;
   background-color: var(--gla-surface);
    color: #e8eef5 !important;
  background-image: linear-gradient(to bottom, var(--gla-surface) 0%, rgba(236, 240, 244, 0.92) 120px, rgba(196, 206, 216, 0) 520px);
    border-color: #3a4252;
  background-position: center top;
   }
  background-repeat: no-repeat;
  background-size: 100% 520px;
   background-attachment: scroll;
}


#simpleSearch {
  html.client-darkmode .gla-tierlist-char-name::after,
  margin-top: 0.35em;
  html.skin-theme-clientpref-night .gla-tierlist-char-name::after {
}
    background: #1e2430;
    border-right-color: #3a4252;
    border-bottom-color: #3a4252;
  }


html:not(.client-darkmode):not(.skin-theme-clientpref-night) #p-personal,
  .gla-tierlist-char:hover .gla-tierlist-char-name,
html.skin-theme-clientpref-day #p-personal {
  .gla-tierlist-char:focus-visible .gla-tierlist-char-name,
   background-color: var(--gla-personal-bg) !important;
   .gla-tierlist-char.is-selected .gla-tierlist-char-name {
  /* FASE 2: painel sólido legível */
    opacity: 1;
  text-shadow: none;
    visibility: visible;
}
    transform: translateX(-50%) translateY(0);
  }


#pt-anonuserpage {
  .gla-tierlist-char.is-dragging .gla-tierlist-char-name {
  margin-bottom: 0.8em;
    opacity: 0;
}
    visibility: hidden;
  }


/* Fix the More Tab and SearchBar — chrome completo no bloco GLA chrome (final do common.css) */
  /* ---------- Empty state ---------- */
#p-search,
#p-cactions {
  background-image: none;
}


/* Background Ends Here */
  .gla-tierlist-empty {
/* =============================================================================
    text-align: center;
  Dark mode — Direção A (sem filter invert)
    padding: 1.5rem 0.5rem 0.5rem;
  • html::before: PNG escura (Water7Background_Inverted.png)
    color: var(--gla-ink-2);
  • Chrome + #content: cores explícitas — logo/imagens ficam normais
  }
  ============================================================================= */


.darkmode-link:before {
  .gla-tierlist-empty p {
  content: none;
    margin: 0 0 0.65rem;
   display: none;
   }
}


.client-darkmode body,
  .gla-tierlist-reset-filters {
.skin-theme-clientpref-night body {
    cursor: pointer;
  filter: none !important;
    border: 1px solid var(--gla-rule);
  -webkit-filter: none !important;
    background: var(--gla-paper-2);
  color: var(--gla-dark-text);
    color: var(--gla-accent);
}
    font-weight: 600;
    font-family: inherit;
    padding: 0.4rem 0.85rem;
    border-radius: 8px;
  }


.client-darkmode #content.mw-body,
  .gla-tierlist-reset-filters:hover {
.skin-theme-clientpref-night #content.mw-body {
    background: var(--gla-accent-soft);
  background-color: var(--gla-dark-content-bg) !important;
    border-color: var(--gla-accent);
  color: var(--gla-dark-text) !important;
  }
  border-color: var(--gla-dark-border) !important;
}


.client-darkmode body.page-Main_Page #content.mw-body,
  /* ---------- Responsivo ---------- */
.skin-theme-clientpref-night body.page-Main_Page #content.mw-body,
.client-darkmode body.page-Página_principal #content.mw-body,
.skin-theme-clientpref-night body.page-Página_principal #content.mw-body {
  background-color: var(--gla-dark-content-bg) !important;
  background-image: linear-gradient(to bottom,
      var(--gla-dark-content-bg) 0%,
      rgba(42, 45, 50, 0.92) 120px,
      rgba(6, 7, 8, 0) 520px) !important;
  background-position: center top;
  background-repeat: no-repeat;
  background-size: 100% 520px;
  background-attachment: scroll;
}


.client-darkmode #content.mw-body h1,
  @media (max-width: 640px) {
.client-darkmode #content.mw-body h2,
    .gla-tierlist-pill--btn {
.client-darkmode #content.mw-body h3,
      margin-left: 0;
.client-darkmode #content.mw-body h4,
    }
.client-darkmode #content.mw-body h5,
.client-darkmode #content.mw-body h6,
.skin-theme-clientpref-night #content.mw-body h1,
.skin-theme-clientpref-night #content.mw-body h2,
.skin-theme-clientpref-night #content.mw-body h3,
.skin-theme-clientpref-night #content.mw-body h4,
.skin-theme-clientpref-night #content.mw-body h5,
.skin-theme-clientpref-night #content.mw-body h6,
.client-darkmode #mw-content-text,
.skin-theme-clientpref-night #mw-content-text {
  color: var(--gla-dark-heading) !important;
  border-color: var(--gla-dark-border) !important;
}


.client-darkmode #content.mw-body p,
    /* Igual Dima: só ícone no mobile; title/aria no botão mantém o rótulo. */
.client-darkmode #content.mw-body li,
    .gla-tierlist-class-filter span {
.skin-theme-clientpref-night #content.mw-body p,
      display: none;
.skin-theme-clientpref-night #content.mw-body li {
    }
  color: var(--gla-dark-text) !important;
}


.client-darkmode #content.mw-body .mw-parser-output a:not(.external):not(.extiw):not(.new),
    .gla-tierlist-class-filter {
.skin-theme-clientpref-night #content.mw-body .mw-parser-output a:not(.external):not(.extiw):not(.new) {
      padding: 4px;
  color: var(--gla-dark-link) !important;
    }
}


.client-darkmode #content.mw-body .mw-parser-output a:visited,
    .gla-tierlist-row {
.skin-theme-clientpref-night #content.mw-body .mw-parser-output a:visited {
      grid-template-columns: 3rem 1fr;
  color: var(--gla-dark-link-visited) !important;
    }
}


.client-darkmode #content.mw-body table,
    .gla-tierlist-label {
.client-darkmode #content.mw-body .wikitable,
      font-size: 1.05rem;
.client-darkmode #content.mw-body .infobox,
    }
.client-darkmode #content.mw-body .toc,
.skin-theme-clientpref-night #content.mw-body table,
.skin-theme-clientpref-night #content.mw-body .wikitable,
.skin-theme-clientpref-night #content.mw-body .infobox,
.skin-theme-clientpref-night #content.mw-body .toc {
  background-color: var(--gla-dark-content-panel) !important;
  color: var(--gla-dark-text) !important;
  border-color: var(--gla-dark-border) !important;
}


.client-darkmode #content.mw-body pre,
    .gla-tierlist-char {
.client-darkmode #content.mw-body code,
      flex: 0 0 88px;
.skin-theme-clientpref-night #content.mw-body pre,
      width: 88px;
.skin-theme-clientpref-night #content.mw-body code {
      min-width: 88px;
  background-color: #1a1d22 !important;
    }
  color: var(--gla-dark-text) !important;
  border-color: var(--gla-dark-border) !important;
}


/* Miniaturas — legenda legível (fundo claro + texto dark herdado quebrava contraste) */
    .gla-tierlist-char-art {
.client-darkmode #content.mw-body .mw-parser-output .thumb,
      width: 80px;
.skin-theme-clientpref-night #content.mw-body .mw-parser-output .thumb {
      height: 80px;
  border-color: var(--gla-dark-border) !important;
    }
  background-color: transparent !important;
}


.client-darkmode #content.mw-body .mw-parser-output .thumbinner,
    .gla-tierlist-char-name {
.skin-theme-clientpref-night #content.mw-body .mw-parser-output .thumbinner {
      font-size: 0.875rem;
  background-color: var(--gla-dark-content-panel) !important;
      max-width: 13rem;
  border-color: var(--gla-dark-border) !important;
      padding: 0.4rem 0.7rem;
  color: var(--gla-dark-text) !important;
     }
}
   }
 
</style>
.client-darkmode #content.mw-body .mw-parser-output .thumbcaption,
.skin-theme-clientpref-night #content.mw-body .mw-parser-output .thumbcaption {
  color: var(--gla-dark-text) !important;
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode #content.mw-body .mw-parser-output .thumbcaption a,
.skin-theme-clientpref-night #content.mw-body .mw-parser-output .thumbcaption a {
  color: var(--gla-dark-link) !important;
}
 
/* ==========================================================================
  Imagens responsivas (global) — evolução de .gla-responsive-frame
  Quebra larguras fixas do MediaWiki (.thumbinner inline) em telas estreitas;
  imagens pequenas mantêm tamanho natural (max-width só limita quando necessário).
  Excluído: infobox, widgets de personagem (legacy) e .gla-no-responsive.
  ========================================================================== */
 
.gla-responsive-frame {
  width: fit-content;
  max-width: 100%;
  margin: 12px auto;
  padding: 0;
  background: transparent;
  box-shadow: none;
}
 
.gla-responsive-frame .thumbinner,
.gla-responsive-frame .thumb,
.gla-responsive-frame figure,
.gla-responsive-frame .mw-file-description {
  max-width: 100% !important;
  width: auto !important;
  padding: 0 !important;
  margin: 0 auto !important;
  border: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
  box-sizing: border-box;
}
 
.gla-responsive-frame img {
  display: block !important;
  max-width: 100% !important;
  width: auto !important;
  height: auto !important;
  margin: 0 auto !important;
  border: 0 !important;
  border-radius: 8px;
}
 
#content.mw-body .mw-parser-output .thumb {
  max-width: 100%;
  box-sizing: border-box;
}
 
#content.mw-body .mw-parser-output .thumb .thumbinner {
  max-width: 100% !important;
  width: auto !important;
  box-sizing: border-box;
}
 
#content.mw-body .mw-parser-output .thumb img,
#content.mw-body .mw-parser-output figure img,
#content.mw-body .mw-parser-output .mw-file-description img,
#content.mw-body .mw-parser-output .mw-file-element {
  max-width: 100%;
  height: auto;
}
 
#content.mw-body .mw-parser-output figure,
#content.mw-body .mw-parser-output .mw-file-description {
  max-width: 100%;
  box-sizing: border-box;
}
 
#content.mw-body .mw-parser-output .center {
  max-width: 100%;
  box-sizing: border-box;
}
 
/* Opt-out manual e áreas com CSS próprio (personagens, infobox, filtros) */
#content.mw-body .mw-parser-output :is(.infobox,
  .infobox_v2,
  .characterPage--table,
  #characters-container,
  .wantedPortraits,
  .wantedPortrait,
  .filter--icon,
  .tab-skill,
  .stats--container,
  .skillInfo,
  .mostrar-aba,
  .card,
  .gla-no-responsive) :is(.thumb, .thumbinner, figure, .mw-file-description, img) {
  max-width: none !important;
}
 
#content.mw-body .mw-parser-output :is(.infobox,
  .infobox_v2,
  .gla-no-responsive) .thumb .thumbinner {
  width: revert !important;
}
 
/* Caixas de aviso inline (ex.: fundo #E3FBE3) — mantém fundo claro, texto escuro */
.client-darkmode #content.mw-body .mw-parser-output div[style*="#E3FBE3" i],
.client-darkmode #content.mw-body .mw-parser-output div[style*="#e3fbe3" i],
.skin-theme-clientpref-night #content.mw-body .mw-parser-output div[style*="#E3FBE3" i],
.skin-theme-clientpref-night #content.mw-body .mw-parser-output div[style*="#e3fbe3" i] {
  color: var(--gla-text) !important;
}
 
.client-darkmode #content.mw-body .mw-parser-output div[style*="#E3FBE3" i] a,
.client-darkmode #content.mw-body .mw-parser-output div[style*="#e3fbe3" i] a,
.skin-theme-clientpref-night #content.mw-body .mw-parser-output div[style*="#E3FBE3" i] a,
.skin-theme-clientpref-night #content.mw-body .mw-parser-output div[style*="#e3fbe3" i] a {
  color: var(--gla-link) !important;
}
 
/* Home — gradiente GLA (não Tailwind genérico) */
.client-darkmode #content.mw-body .home-card,
.skin-theme-clientpref-night #content.mw-body .home-card {
  background: var(--gla-dark-content-panel) !important;
  color: var(--gla-dark-text) !important;
  border-color: var(--gla-dark-border) !important;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.35) !important;
}
 
.client-darkmode #content.mw-body .home-title,
.skin-theme-clientpref-night #content.mw-body .home-title {
  background: linear-gradient(to bottom, #459cca, #5684c8) !important;
  color: #ffffff !important;
}
 
.client-darkmode #content.mw-body .home-button-item,
.skin-theme-clientpref-night #content.mw-body .home-button-item {
  background: #1a1d22 !important;
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode #content.mw-body .home-button-title,
.skin-theme-clientpref-night #content.mw-body .home-button-title {
  background: #252830 !important;
  color: #8ec5f0 !important;
}
 
.client-darkmode #content.mw-body .index-cell,
.skin-theme-clientpref-night #content.mw-body .index-cell {
  background: #1a1d22 !important;
  color: var(--gla-dark-text) !important;
  border-color: var(--gla-accent) !important;
}
 
 
/* =============================================================================
  GLA palette — Direção A (page / surface / panel)
  ============================================================================= */
 
html:not(.client-darkmode):not(.skin-theme-clientpref-night) body,
html.skin-theme-clientpref-day body {
  background-color: transparent !important;
}
 
html:not(.client-darkmode):not(.skin-theme-clientpref-night) .mw-body,
html.skin-theme-clientpref-day .mw-body,
html:not(.client-darkmode):not(.skin-theme-clientpref-night) #content.mw-body,
html.skin-theme-clientpref-day #content.mw-body {
  background-color: var(--gla-surface);
}
 
/* Home mantém fade + mapa (regra acima só define cor base) */
html:not(.client-darkmode):not(.skin-theme-clientpref-night) body.page-Main_Page #content.mw-body,
html:not(.client-darkmode):not(.skin-theme-clientpref-night) body.page-Página_principal #content.mw-body,
html.skin-theme-clientpref-day body.page-Main_Page #content.mw-body,
html.skin-theme-clientpref-day body.page-Página_principal #content.mw-body {
  background-color: var(--gla-surface);
}
 
/* Dark: fundo profundo no html + ::after; body/chrome ficam transparentes p/ ver a PNG */
html.client-darkmode,
html.skin-theme-clientpref-night {
  background-color: var(--gla-dark-bg, #060708) !important;
}
 
html.client-darkmode::after,
html.skin-theme-clientpref-night::after {
  background-color: var(--gla-dark-bg, #060708) !important;
}
 
.client-darkmode body,
.skin-theme-clientpref-night body {
  background-color: transparent !important;
}
 
/* =============================================================================
  GLA chrome — abas + #content (borda neutra, sem gradiente Vector)
  ============================================================================= */
 
/* Abas 2.05em: recua #mw-head-base para colar #content nas abas */
#mw-page-base {
  height: 4.55em !important;
}
 
#mw-head-base {
  height: 4.55em !important;
  margin-top: -4.55em !important;
}
 
#left-navigation {
  margin-top: var(--gla-tabs-offset, 2.5em) !important;
  margin-bottom: -2.05em !important;
}
 
#right-navigation {
  margin-top: var(--gla-tabs-offset, 2.5em) !important;
}
 
/* Mata gradiente/separador azul do Vector em li e a */
#mw-head .vector-menu-tabs,
#mw-head .vector-menu-tabs li,
#mw-head .vector-menu-tabs li a,
#mw-head .vector-menu-tabs .vector-menu-content-list>li,
#mw-head .vector-menu-tabs .vector-menu-content-list>li>a {
  background-image: none !important;
}
 
#mw-head .vector-menu-tabs .vector-menu-content,
#mw-head .vector-menu-tabs .vector-menu-content-list {
  height: 100%;
  margin: 0;
  padding: 0;
}
 
#mw-head .vector-menu-tabs {
  height: 2.05em !important;
  padding-left: 0 !important;
  box-sizing: border-box;
  border-top: 1px solid var(--gla-border) !important;
}
 
#left-navigation #p-namespaces.vector-menu-tabs {
  border-left: 1px solid var(--gla-border) !important;
}
 
#right-navigation #p-views.vector-menu-tabs {
  border-left: 1px solid var(--gla-border) !important;
}
 
#mw-head .vector-menu-tabs .vector-menu-content-list>li {
  display: block !important;
  float: left !important;
  height: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
  line-height: 1.125em !important;
  box-sizing: border-box;
  background: var(--gla-tab-inactive) !important;
  border-right: 1px solid var(--gla-border) !important;
}
 
#mw-head .vector-menu-tabs .vector-menu-content-list>li.selected {
  background: var(--gla-surface) !important;
  margin-bottom: -1px !important;
  border-bottom: 1px solid var(--gla-surface) !important;
  position: relative;
  z-index: 2;
}
 
#mw-head .vector-menu-tabs .vector-menu-content-list>li>a {
  display: block !important;
  float: left !important;
  height: 2.05em !important;
  line-height: 1.125em !important;
  padding: 0.55em 8px 0 !important;
  font-size: 0.8125em !important;
  box-sizing: border-box;
  background: transparent !important;
  color: #0645ad;
}
 
#mw-head .vector-menu-tabs .vector-menu-content-list>li.selected>a,
#mw-head .vector-menu-tabs .vector-menu-content-list>li.selected>a:visited {
  color: #202122 !important;
  text-decoration: none !important;
}
 
/* Estrela vigia — só ícone (hack Vector TabWatchstarLink) */
#mw-head .vector-menu-tabs .vector-menu-content-list>li.icon>a {
  width: 2.15384615em !important;
  height: 0 !important;
  padding: 2.05em 0 0 0 !important;
  line-height: 0 !important;
  font-size: 0.8125em !important;
  overflow: hidden !important;
  color: transparent !important;
  text-indent: -99999px !important;
  white-space: nowrap !important;
  position: relative !important;
  box-sizing: content-box !important;
}
 
#mw-head .vector-menu-tabs .vector-menu-content-list>li.icon>a::before {
  display: block !important;
  position: absolute !important;
  top: 0.35em !important;
  left: 0.38461538em !important;
  width: 1.23076923em !important;
  height: 1.23076923em !important;
  margin: 0 !important;
  text-indent: 0 !important;
}
 
/* Mais + busca — mesma faixa das abas */
#right-navigation #p-cactions.vector-menu-dropdown {
  height: 2.05em !important;
  box-sizing: border-box;
  border-top: 1px solid var(--gla-border) !important;
  border-right: 1px solid var(--gla-border) !important;
  border-bottom: 1px solid var(--gla-surface) !important;
  background: var(--gla-tab-inactive) !important;
  overflow: visible !important;
}
 
#right-navigation #p-cactions h3,
#right-navigation #p-cactions #p-cactions-label,
#right-navigation #p-cactions .vector-menu-heading {
  display: block !important;
  position: relative !important;
  float: left !important;
  height: 100% !important;
  min-height: 2.05em !important;
  line-height: 1.125em !important;
  margin: 0 !important;
  padding: 0.55em 8px 0 8px !important;
  font-size: 0.8125em !important;
  box-sizing: border-box;
  background: transparent !important;
  background-image: none !important;
  border: none !important;
  font-weight: normal;
  color: #0645ad;
  cursor: pointer;
}
 
#right-navigation #p-cactions .vector-menu-heading::after,
#right-navigation #p-cactions h3::after {
  content: none !important;
  display: none !important;
  background: none !important;
  background-image: none !important;
}
 
#right-navigation #p-cactions .vector-menu-checkbox {
  opacity: 0 !important;
  appearance: none !important;
  -webkit-appearance: none !important;
}
 
/* Dropdown “Mais” — top alinhado à altura das abas (2.05em, não 2.5em do Vector) */
#right-navigation #p-cactions.vector-menu-dropdown {
  position: relative !important;
}
 
#right-navigation #p-cactions .vector-menu-content {
  top: 2.05em !important;
  right: 0 !important;
  left: auto !important;
  min-width: 100% !important;
  box-sizing: border-box;
  z-index: 100 !important;
  border: 1px solid var(--gla-border) !important;
  border-top: 1px solid var(--gla-border) !important;
  background-color: var(--gla-surface) !important;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08) !important;
}
 
/* “Mais” — checkbox manda; hover do Vector legacy não pode manter aberto ao desmarcar */
#right-navigation #p-cactions.vector-menu-dropdown .vector-menu-checkbox:not(:checked)~.vector-menu-content {
  opacity: 0 !important;
  visibility: hidden !important;
  pointer-events: none !important;
}
 
#right-navigation #p-cactions.vector-menu-dropdown .vector-menu-checkbox:checked~.vector-menu-content {
  opacity: 1 !important;
  visibility: visible !important;
  pointer-events: auto !important;
}
 
#right-navigation #p-cactions .vector-menu-content-list li a {
  padding: 0.5em 0.75em !important;
}
 
.client-darkmode #right-navigation #p-cactions .vector-menu-content,
.skin-theme-clientpref-night #right-navigation #p-cactions .vector-menu-content {
  background-color: var(--gla-dark-panel-preinvert) !important;
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode #right-navigation #p-cactions .vector-menu-content-list li a,
.client-darkmode #right-navigation #p-cactions .vector-menu-content-list li a:visited,
.skin-theme-clientpref-night #right-navigation #p-cactions .vector-menu-content-list li a,
.skin-theme-clientpref-night #right-navigation #p-cactions .vector-menu-content-list li a:visited {
  color: var(--gla-dark-link) !important;
}
 
.client-darkmode #right-navigation #p-cactions .vector-menu-content-list li.selected a,
.client-darkmode #right-navigation #p-cactions .vector-menu-content-list li.selected a:visited,
.skin-theme-clientpref-night #right-navigation #p-cactions .vector-menu-content-list li.selected a,
.skin-theme-clientpref-night #right-navigation #p-cactions .vector-menu-content-list li.selected a:visited {
  color: var(--gla-dark-link) !important;
}
 
.client-darkmode #right-navigation #p-cactions .vector-menu-content-list li a:hover,
.client-darkmode #right-navigation #p-cactions .vector-menu-content-list li a:focus,
.skin-theme-clientpref-night #right-navigation #p-cactions .vector-menu-content-list li a:hover,
.skin-theme-clientpref-night #right-navigation #p-cactions .vector-menu-content-list li a:focus {
  color: var(--gla-dark-heading) !important;
  background-color: var(--gla-dark-table-hover) !important;
}
 
#right-navigation #p-cactions .vector-menu-content-list li a:visited {
  color: var(--gla-link) !important;
}
 
#right-navigation #p-cactions .vector-menu-content-list li a:hover,
#right-navigation #p-cactions .vector-menu-content-list li a:focus {
  color: var(--gla-link) !important;
  background-color: var(--gla-surface-alt) !important;
}
 
#right-navigation #p-search {
  height: 2.05em !important;
  box-sizing: border-box;
  display: flex !important;
  align-items: center !important;
  border-top: 1px solid var(--gla-border) !important;
  border-bottom: 1px solid var(--gla-surface) !important;
  background: var(--gla-tab-inactive) !important;
  padding: 0 0.5em !important;
  margin: 0 0 0 0.5em !important;
}
 
#right-navigation #p-search form {
  margin: 0 !important;
  width: 100%;
}
 
#right-navigation #simpleSearch {
  margin-top: 0 !important;
  height: auto;
  width: 100%;
}
 
#right-navigation #searchInput {
  height: 1.85em !important;
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  background-color: var(--gla-surface) !important;
  border-color: var(--gla-border) !important;
  box-sizing: border-box;
}
 
/* Visitantes (só Entrar): busca mais larga; logado mantém tamanho normal */
body:has(#pt-login) #right-navigation #p-search {
  min-width: 16em;
  flex: 1 1 auto;
}
 
body:has(#pt-login) #right-navigation #searchInput {
  min-width: 14em;
  width: 100%;
}
 
body:has(#pt-login) #right-navigation #simpleSearch {
  width: 100%;
}
 
#p-personal {
  background-color: var(--gla-surface-alt) !important;
  padding: 0.15em 0.75em 0.15em 0 !important;
  display: flex !important;
  align-items: center !important;
  min-height: 2em !important;
  box-sizing: border-box !important;
}
 
#p-personal .vector-menu-content-list {
  align-items: center !important;
}
 
#p-personal li {
  padding-top: 0 !important;
  display: flex !important;
  align-items: center !important;
  line-height: 1.35 !important;
}
 
#pt-userpage a,
#pt-anonuserpage {
  background-image: none !important;
  padding-left: 0 !important;
  padding-top: 0 !important;
}
 
.mw-parser-output pre,
.mw-parser-output code,
.mw-parser-output .mw-code,
pre,
code,
.mw-code {
  background-color: var(--gla-surface-alt) !important;
  color: #2b2a23 !important;
  border-color: var(--gla-border) !important;
}
 
/* Links — conteúdo e sidebar (claro) */
html:not(.client-darkmode):not(.skin-theme-clientpref-night) #content.mw-body .mw-parser-output a:not(.external):not(.extiw):not(.new),
html.skin-theme-clientpref-day #content.mw-body .mw-parser-output a:not(.external):not(.extiw):not(.new),
html:not(.client-darkmode):not(.skin-theme-clientpref-night) #mw-panel a,
html.skin-theme-clientpref-day #mw-panel a {
  color: var(--gla-link);
}
 
/* Infobox — painel + título de marca (claro) */
html:not(.client-darkmode):not(.skin-theme-clientpref-night) .infobox,
html:not(.client-darkmode):not(.skin-theme-clientpref-night) .infobox_v2,
html.skin-theme-clientpref-day .infobox,
html.skin-theme-clientpref-day .infobox_v2 {
  background-color: var(--gla-surface-alt);
  border-color: var(--gla-border);
}
 
html:not(.client-darkmode):not(.skin-theme-clientpref-night) .infobox th,
html:not(.client-darkmode):not(.skin-theme-clientpref-night) .infobox_v2 th,
html.skin-theme-clientpref-day .infobox th,
html.skin-theme-clientpref-day .infobox_v2 th {
  color: var(--gla-accent);
}
 
/* --- Dark mode chrome (cores diretas) --- */
.client-darkmode #mw-page-base,
.skin-theme-clientpref-night #mw-page-base,
.client-darkmode #mw-head-base,
.skin-theme-clientpref-night #mw-head-base {
  background: transparent !important;
  background-image: none !important;
}
 
.client-darkmode #mw-head .vector-menu-tabs,
.skin-theme-clientpref-night #mw-head .vector-menu-tabs {
  border-top-color: var(--gla-dark-border) !important;
}
 
.client-darkmode #left-navigation #p-namespaces.vector-menu-tabs,
.skin-theme-clientpref-night #left-navigation #p-namespaces.vector-menu-tabs {
  border-left-color: var(--gla-dark-border) !important;
}
 
.client-darkmode #mw-head .vector-menu-tabs .vector-menu-content-list>li,
.skin-theme-clientpref-night #mw-head .vector-menu-tabs .vector-menu-content-list>li {
  background: var(--gla-dark-tab-inactive) !important;
  border-right-color: var(--gla-dark-border) !important;
}
 
.client-darkmode #mw-head .vector-menu-tabs .vector-menu-content-list>li.selected,
.skin-theme-clientpref-night #mw-head .vector-menu-tabs .vector-menu-content-list>li.selected {
  background: var(--gla-dark-content-bg) !important;
  border-bottom-color: var(--gla-dark-content-bg) !important;
}
 
.client-darkmode #mw-head .vector-menu-tabs .vector-menu-content-list>li>a,
.skin-theme-clientpref-night #mw-head .vector-menu-tabs .vector-menu-content-list>li>a {
  color: var(--gla-dark-link) !important;
}
 
.client-darkmode #mw-head .vector-menu-tabs .vector-menu-content-list>li.selected>a,
.client-darkmode #mw-head .vector-menu-tabs .vector-menu-content-list>li.selected>a:visited,
.skin-theme-clientpref-night #mw-head .vector-menu-tabs .vector-menu-content-list>li.selected>a,
.skin-theme-clientpref-night #mw-head .vector-menu-tabs .vector-menu-content-list>li.selected>a:visited {
  color: var(--gla-dark-heading) !important;
}
 
.client-darkmode #right-navigation #p-cactions.vector-menu-dropdown,
.skin-theme-clientpref-night #right-navigation #p-cactions.vector-menu-dropdown,
.client-darkmode #right-navigation #p-search,
.skin-theme-clientpref-night #right-navigation #p-search {
  background: var(--gla-dark-tab-inactive) !important;
  border-top-color: var(--gla-dark-border) !important;
}
 
.client-darkmode #right-navigation #p-cactions.vector-menu-dropdown,
.skin-theme-clientpref-night #right-navigation #p-cactions.vector-menu-dropdown {
  border-right-color: var(--gla-dark-border) !important;
  border-bottom-color: var(--gla-dark-content-bg) !important;
}
 
.client-darkmode #right-navigation #p-search,
.skin-theme-clientpref-night #right-navigation #p-search {
  border-bottom-color: var(--gla-dark-content-bg) !important;
}
 
.client-darkmode #right-navigation #p-cactions .vector-menu-heading,
.skin-theme-clientpref-night #right-navigation #p-cactions .vector-menu-heading,
.client-darkmode #right-navigation #p-cactions h3,
.skin-theme-clientpref-night #right-navigation #p-cactions h3 {
  color: var(--gla-dark-link) !important;
}
 
.client-darkmode #p-personal,
.skin-theme-clientpref-night #p-personal {
  background-color: var(--gla-dark-chrome) !important;
  text-shadow: none !important;
  box-shadow: none !important;
}
 
.client-darkmode #p-personal a,
.skin-theme-clientpref-night #p-personal a {
  color: var(--gla-dark-link) !important;
  text-shadow: none !important;
}
 
.client-darkmode #mw-head #simpleSearch,
.skin-theme-clientpref-night #mw-head #simpleSearch,
.client-darkmode #mw-head #searchInput,
.skin-theme-clientpref-night #mw-head #searchInput,
.client-darkmode #mw-head table,
.skin-theme-clientpref-night #mw-head table,
.client-darkmode .mw-notification,
.skin-theme-clientpref-night .mw-notification {
  background-color: var(--gla-dark-chrome-panel);
  border-color: var(--gla-dark-border);
  color: var(--gla-dark-text);
}
 
.client-darkmode #mw-panel a,
.skin-theme-clientpref-night #mw-panel a {
  color: var(--gla-nav-link-dark, var(--gla-dark-link)) !important;
}
 
.client-darkmode #mw-panel .portal:not(#p-Discord):not(#p-Redes) .vector-menu-heading,
.client-darkmode #mw-panel .vector-menu-portal:not(#p-Discord):not(#p-Redes) .vector-menu-heading,
.skin-theme-clientpref-night #mw-panel .portal:not(#p-Discord):not(#p-Redes) .vector-menu-heading,
.skin-theme-clientpref-night #mw-panel .vector-menu-portal:not(#p-Discord):not(#p-Redes) .vector-menu-heading {
  border-color: var(--gla-nav-border-dark) !important;
}
 
.client-darkmode #mw-panel .portal:not(#p-Discord):not(#p-Redes) .vector-menu-content,
.client-darkmode #mw-panel .vector-menu-portal:not(#p-Discord):not(#p-Redes) .vector-menu-content,
.skin-theme-clientpref-night #mw-panel .portal:not(#p-Discord):not(#p-Redes) .vector-menu-content,
.skin-theme-clientpref-night #mw-panel .vector-menu-portal:not(#p-Discord):not(#p-Redes) .vector-menu-content {
  border-color: var(--gla-nav-border-dark) !important;
}
 
/* Discord — não herdar cor de link da sidebar no dark */
.client-darkmode #mw-panel #n-Discord a,
.skin-theme-clientpref-night #mw-panel #n-Discord a,
.client-darkmode #mw-panel #n-Discord .gla-discord-text,
.skin-theme-clientpref-night #mw-panel #n-Discord .gla-discord-text,
.client-darkmode #mw-panel #n-Discord .gla-discord-text strong,
.skin-theme-clientpref-night #mw-panel #n-Discord .gla-discord-text strong {
  color: #fff !important;
}
 
/* Dark — bordas do chrome (sem branco/claro vazando) */
.client-darkmode #content.mw-body,
.skin-theme-clientpref-night #content.mw-body,
.client-darkmode #mw-head .vector-menu-tabs,
.skin-theme-clientpref-night #mw-head .vector-menu-tabs,
.client-darkmode #left-navigation #p-namespaces.vector-menu-tabs,
.skin-theme-clientpref-night #left-navigation #p-namespaces.vector-menu-tabs,
.client-darkmode #right-navigation #p-views.vector-menu-tabs,
.skin-theme-clientpref-night #right-navigation #p-views.vector-menu-tabs {
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode #mw-head .vector-menu-tabs .vector-menu-content-list>li,
.skin-theme-clientpref-night #mw-head .vector-menu-tabs .vector-menu-content-list>li {
  border-right-color: var(--gla-dark-border) !important;
}
 
.client-darkmode #mw-head #simpleSearch,
.skin-theme-clientpref-night #mw-head #simpleSearch,
.client-darkmode #mw-head #searchInput,
.skin-theme-clientpref-night #mw-head #searchInput {
  border-color: var(--gla-dark-border) !important;
  color: var(--gla-dark-text) !important;
}
 
/* =============================================================================
  Visitantes (não logados) — ocultar chrome de edição / ferramentas
  Detecta anon pelo link "Entrar" (#pt-login) no menu pessoal.
  Nota: CSS só esconde na tela; URLs diretas ainda funcionam sem permissão PHP.
  ============================================================================= */
body:has(#pt-login) #p-views,
body:has(#pt-login) #p-cactions,
body:has(#pt-login) #p-tb,
body:has(#pt-login) nav#p-tb {
  display: none !important;
}
 
/* Footer — ocultar lastmod + links padrão MediaWiki */
#footer-info-lastmod,
#footer-places-privacy,
#footer-places-about,
#footer-places-disclaimer {
  display: none !important;
}
 
 
/* =============================================================================
  FASE 2 — patch de auditoria (aditivo). Ver FASE1-Auditoria.html.
  Editado só aqui (visual-common.css). Não toca JS nem merge script.
  ============================================================================= */
 
/* [LIGHT] corpo, títulos, visited e red links com tokens de marca */
html:not(.client-darkmode):not(.skin-theme-clientpref-night) #content.mw-body,
html.skin-theme-clientpref-day #content.mw-body {
  color: var(--gla-text);
}
 
html:not(.client-darkmode):not(.skin-theme-clientpref-night) #firstHeading,
html:not(.client-darkmode):not(.skin-theme-clientpref-night) #content.mw-body h1,
html:not(.client-darkmode):not(.skin-theme-clientpref-night) #content.mw-body h2,
html:not(.client-darkmode):not(.skin-theme-clientpref-night) #content.mw-body h3,
html.skin-theme-clientpref-day #firstHeading,
html.skin-theme-clientpref-day #content.mw-body h1,
html.skin-theme-clientpref-day #content.mw-body h2,
html.skin-theme-clientpref-day #content.mw-body h3 {
  color: var(--gla-heading);
}
 
/* Widget de personagem: fundo escuro próprio — não herdar heading/texto do tema claro */
html:not(.client-darkmode):not(.skin-theme-clientpref-night) #content.mw-body .character-box,
html:not(.client-darkmode):not(.skin-theme-clientpref-night) #content.mw-body .character-box h1,
html:not(.client-darkmode):not(.skin-theme-clientpref-night) #content.mw-body .character-box h2,
html:not(.client-darkmode):not(.skin-theme-clientpref-night) #content.mw-body .character-box h3,
html.skin-theme-clientpref-day #content.mw-body .character-box,
html.skin-theme-clientpref-day #content.mw-body .character-box h1,
html.skin-theme-clientpref-day #content.mw-body .character-box h2,
html.skin-theme-clientpref-day #content.mw-body .character-box h3 {
  color: inherit;
}
 
#content.mw-body .character-box .skill-title h3,
#content.mw-body .character-box .desc-box,
#content.mw-body .character-box .desc-box h3,
#content.mw-body .character-box .desc {
  color: #fff;
}
 
html:not(.client-darkmode):not(.skin-theme-clientpref-night) #content.mw-body .mw-parser-output a:visited,
html.skin-theme-clientpref-day #content.mw-body .mw-parser-output a:visited {
  color: var(--gla-link-visited);
}
 
html:not(.client-darkmode):not(.skin-theme-clientpref-night) #content.mw-body .mw-parser-output a.new,
html.skin-theme-clientpref-day #content.mw-body .mw-parser-output a.new {
  color: var(--gla-link-red);
}
 
/* [#6] tira #0645ad hardcoded — abas e "Mais" usam a cor de link da marca */
#mw-head .vector-menu-tabs .vector-menu-content-list>li>a {
  color: var(--gla-link);
}
 
#right-navigation #p-cactions .vector-menu-heading {
  color: var(--gla-link);
}
 
/* [#1] red links legíveis no dark (era ~3.3:1) */
.client-darkmode #content.mw-body .mw-parser-output a.new,
.skin-theme-clientpref-night #content.mw-body .mw-parser-output a.new {
  color: var(--gla-dark-link-red) !important;
}
 
/* [#2] links do Índice da home legíveis no dark (cor inline #0366d6 da página) */
.client-darkmode #content.mw-body .index-cell a,
.skin-theme-clientpref-night #content.mw-body .index-cell a {
  color: var(--gla-dark-link) !important;
}
 
/* [#3] dim no topo + borracha soft na base (dark) */
html.client-darkmode::before,
html.skin-theme-clientpref-night::before {
  background-image:
    linear-gradient(to bottom,
      transparent 0%,
      transparent 44%,
      rgba(6, 7, 8, 0.28) 56%,
      rgba(6, 7, 8, 0.58) 68%,
      rgba(6, 7, 8, 0.86) 80%,
      var(--gla-dark-bg) 94%),
    linear-gradient(180deg, rgba(6, 7, 8, 0.55), rgba(6, 7, 8, 0.80) 320px, transparent 640px),
     var(--gla-bg-image) !important;
  background-repeat: no-repeat, no-repeat, no-repeat !important;
  background-position: center top, center top, center top !important;
  background-size: 100% auto, 100% auto, 100% auto !important;
}
 
/* [#10] ícone "vigiar" (estrela) nunca invertido pela extensão DarkMode */
.client-darkmode #mw-head .vector-menu-tabs .vector-menu-content-list>li.icon>a::before,
.skin-theme-clientpref-night #mw-head .vector-menu-tabs .vector-menu-content-list>li.icon>a::before {
  filter: none !important;
  -webkit-filter: none !important;
}
 
/* =============================================================================
  [#5] Páginas legacy (personagens / calculadora / wanted / abas) — DARK
  gla-pages-legacy.css tem cores claras fixas e nenhuma regra dark. Aqui só
  neutralizamos os pontos de baixa legibilidade. Escopo amplo — expandir se necessário.
  ============================================================================= */
.client-darkmode .section-title,
.skin-theme-clientpref-night .section-title,
.client-darkmode .card-title,
.skin-theme-clientpref-night .card-title,
.client-darkmode .badge,
.skin-theme-clientpref-night .badge {
  color: #fff;
}
 
.client-darkmode .card,
.skin-theme-clientpref-night .card {
  background: var(--gla-dark-content-panel) !important;
   box-shadow: 0 3px 12px rgba(0, 0, 0, 0.4) !important;
}
 
/* filtros / busca de personagens */
.client-darkmode .filter,
.skin-theme-clientpref-night .filter,
.client-darkmode .filter--input,
.skin-theme-clientpref-night .filter--input,
.client-darkmode .calcXp--container,
.skin-theme-clientpref-night .calcXp--container,
.client-darkmode #selectbox-wanted,
.skin-theme-clientpref-night #selectbox-wanted {
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode .filter--input,
.skin-theme-clientpref-night .filter--input,
.client-darkmode #selectbox-wanted,
.skin-theme-clientpref-night #selectbox-wanted {
  background: #1a1d22 !important;
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode .filter--title,
.skin-theme-clientpref-night .filter--title {
  background: #355a7d !important;
}
 
/* textos cinza/azulados fixos -> claros e legíveis no dark */
.client-darkmode .calcXp--resultTitle,
.skin-theme-clientpref-night .calcXp--resultTitle,
.client-darkmode .calcXp--formItem span,
.skin-theme-clientpref-night .calcXp--formItem span,
.client-darkmode .wantedPortrait--title,
.skin-theme-clientpref-night .wantedPortrait--title,
.client-darkmode .sec-aba-cem,
.skin-theme-clientpref-night .sec-aba-cem,
.client-darkmode .skillInfo--attributesContainer>h1,
.skin-theme-clientpref-night .skillInfo--attributesContainer>h1 {
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode .skillInfo>div>.skillInfo--infoContainer b,
.skin-theme-clientpref-night .skillInfo>div>.skillInfo--infoContainer b {
  color: var(--gla-dark-link) !important;
}
 
/* card de atributos: fundo claro fixo (--lightGray) -> painel dark */
.client-darkmode .attribute--cardsContainer,
.skin-theme-clientpref-night .attribute--cardsContainer {
  background: var(--gla-dark-content-panel) !important;
  border-color: var(--gla-dark-border) !important;
}
 
/* divisórias de abas (rgb(225,225,225)) -> borda dark */
.client-darkmode .tabsContainer table>tbody>tr>td,
.skin-theme-clientpref-night .tabsContainer table>tbody>tr>td {
  border-bottom-color: var(--gla-dark-border) !important;
}
 
/* =============================================================================
  FASE 3 — Wiki chrome global (dark): tabelas, edição, forms, páginas especiais
  Referência: padrão Hollow Knight Wiki (th/td explícitos, mw-datatable, editor)
  ============================================================================= */
 
/* ---- Tabelas: células (MW define bg branco/#eaecf0 em th/td, não só em table) ---- */
.client-darkmode #content.mw-body .wikitable>tr>th,
.client-darkmode #content.mw-body .wikitable>tr>td,
.client-darkmode #content.mw-body .wikitable>*>tr>th,
.client-darkmode #content.mw-body .wikitable>*>tr>td,
.client-darkmode #content.mw-body table.prettytable>tr>th,
.client-darkmode #content.mw-body table.prettytable>tr>td,
.client-darkmode #content.mw-body table.prettytable>*>tr>th,
.client-darkmode #content.mw-body table.prettytable>*>tr>td,
.client-darkmode #content.mw-body table.table-enhance th,
.client-darkmode #content.mw-body table.table-enhance td,
.client-darkmode #content.mw-body .mw_metadata th,
.client-darkmode #content.mw-body .mw_metadata td,
.client-darkmode #content.mw-body table.mw-json th,
.client-darkmode #content.mw-body table.mw-json td,
.client-darkmode #content.mw-body .infobox th,
.client-darkmode #content.mw-body .infobox td,
.client-darkmode #content.mw-body .infobox_v2 th,
.client-darkmode #content.mw-body .infobox_v2 td,
.skin-theme-clientpref-night #content.mw-body .wikitable>tr>th,
.skin-theme-clientpref-night #content.mw-body .wikitable>tr>td,
.skin-theme-clientpref-night #content.mw-body .wikitable>*>tr>th,
.skin-theme-clientpref-night #content.mw-body .wikitable>*>tr>td,
.skin-theme-clientpref-night #content.mw-body table.prettytable>tr>th,
.skin-theme-clientpref-night #content.mw-body table.prettytable>tr>td,
.skin-theme-clientpref-night #content.mw-body table.prettytable>*>tr>th,
.skin-theme-clientpref-night #content.mw-body table.prettytable>*>tr>td,
.skin-theme-clientpref-night #content.mw-body table.table-enhance th,
.skin-theme-clientpref-night #content.mw-body table.table-enhance td,
.skin-theme-clientpref-night #content.mw-body .mw_metadata th,
.skin-theme-clientpref-night #content.mw-body .mw_metadata td,
.skin-theme-clientpref-night #content.mw-body table.mw-json th,
.skin-theme-clientpref-night #content.mw-body table.mw-json td,
.skin-theme-clientpref-night #content.mw-body .infobox th,
.skin-theme-clientpref-night #content.mw-body .infobox td,
.skin-theme-clientpref-night #content.mw-body .infobox_v2 th,
.skin-theme-clientpref-night #content.mw-body .infobox_v2 td {
  border-color: var(--gla-dark-border) !important;
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode #content.mw-body .infobox td,
.client-darkmode #content.mw-body .infobox_v2 td,
.skin-theme-clientpref-night #content.mw-body .infobox td,
.skin-theme-clientpref-night #content.mw-body .infobox_v2 td {
  background-color: var(--gla-dark-content-panel) !important;
}
 
.client-darkmode #content.mw-body .infobox th,
.client-darkmode #content.mw-body .infobox_v2 th,
.skin-theme-clientpref-night #content.mw-body .infobox th,
.skin-theme-clientpref-night #content.mw-body .infobox_v2 th {
  background-color: var(--gla-dark-table-header) !important;
  color: var(--gla-dark-heading) !important;
}
 
.client-darkmode #content.mw-body .wikitable>tr>td,
.client-darkmode #content.mw-body .wikitable>*>tr>td,
.client-darkmode #content.mw-body table.prettytable>tr>td,
.client-darkmode #content.mw-body table.prettytable>*>tr>td,
.client-darkmode #content.mw-body table.table-enhance td,
.client-darkmode #content.mw-body .mw_metadata td,
.client-darkmode #content.mw-body table.mw-json td,
.client-darkmode #content.mw-body .mw-datatable td,
.skin-theme-clientpref-night #content.mw-body .wikitable>tr>td,
.skin-theme-clientpref-night #content.mw-body .wikitable>*>tr>td,
.skin-theme-clientpref-night #content.mw-body table.prettytable>tr>td,
.skin-theme-clientpref-night #content.mw-body table.prettytable>*>tr>td,
.skin-theme-clientpref-night #content.mw-body table.table-enhance td,
.skin-theme-clientpref-night #content.mw-body .mw_metadata td,
.skin-theme-clientpref-night #content.mw-body table.mw-json td,
.skin-theme-clientpref-night #content.mw-body .mw-datatable td {
  background-color: var(--gla-dark-content-panel) !important;
}
 
.client-darkmode #content.mw-body .wikitable>tr>th,
.client-darkmode #content.mw-body .wikitable>*>tr>th,
.client-darkmode #content.mw-body table.prettytable>tr>th,
.client-darkmode #content.mw-body table.prettytable>*>tr>th,
.client-darkmode #content.mw-body table.table-enhance th,
.client-darkmode #content.mw-body .mw_metadata th,
.client-darkmode #content.mw-body table.mw-json th,
.client-darkmode #content.mw-body .mw-datatable th,
.skin-theme-clientpref-night #content.mw-body .wikitable>tr>th,
.skin-theme-clientpref-night #content.mw-body .wikitable>*>tr>th,
.skin-theme-clientpref-night #content.mw-body table.prettytable>tr>th,
.skin-theme-clientpref-night #content.mw-body table.prettytable>*>tr>th,
.skin-theme-clientpref-night #content.mw-body table.table-enhance th,
.skin-theme-clientpref-night #content.mw-body .mw_metadata th,
.skin-theme-clientpref-night #content.mw-body table.mw-json th,
.skin-theme-clientpref-night #content.mw-body .mw-datatable th {
  background-color: var(--gla-dark-table-header) !important;
  color: var(--gla-dark-heading) !important;
}
 
.client-darkmode #content.mw-body table.wikitable.stripe>*>tr:nth-child(even)>td,
.client-darkmode #content.mw-body table.wikitable.stripe2>*>tr:nth-child(4n+1)>td,
.client-darkmode #content.mw-body table.wikitable.stripe2>*>tr:nth-child(4n+2)>td,
.client-darkmode #content.mw-body table.table-enhance tr:nth-child(even) td,
.skin-theme-clientpref-night #content.mw-body table.wikitable.stripe>*>tr:nth-child(even)>td,
.skin-theme-clientpref-night #content.mw-body table.wikitable.stripe2>*>tr:nth-child(4n+1)>td,
.skin-theme-clientpref-night #content.mw-body table.wikitable.stripe2>*>tr:nth-child(4n+2)>td,
.skin-theme-clientpref-night #content.mw-body table.table-enhance tr:nth-child(even) td {
  background-color: var(--gla-dark-table-stripe) !important;
}
 
.client-darkmode #content.mw-body .mw-datatable tr:hover td,
.client-darkmode #content.mw-body table.table-enhance tr:hover td,
.skin-theme-clientpref-night #content.mw-body .mw-datatable tr:hover td,
.skin-theme-clientpref-night #content.mw-body table.table-enhance tr:hover td {
  background-color: var(--gla-dark-table-hover) !important;
}
 
.client-darkmode #content.mw-body .mw-datatable,
.skin-theme-clientpref-night #content.mw-body .mw-datatable {
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode #content.mw-body table.table-enhance,
.skin-theme-clientpref-night #content.mw-body table.table-enhance {
  background-color: var(--gla-dark-content-panel) !important;
  border-color: var(--gla-dark-border) !important;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.35) !important;
}
 
/* ---- Links em todo #content (não só .mw-parser-output — páginas especiais) ---- */
.client-darkmode #content.mw-body a:not(.external):not(.extiw):not(.new),
.skin-theme-clientpref-night #content.mw-body a:not(.external):not(.extiw):not(.new) {
  color: var(--gla-dark-link) !important;
}
 
.client-darkmode #content.mw-body a:visited:not(.new),
.skin-theme-clientpref-night #content.mw-body a:visited:not(.new) {
  color: var(--gla-dark-link-visited) !important;
}
 
.client-darkmode #content.mw-body a.new,
.skin-theme-clientpref-night #content.mw-body a.new {
  color: var(--gla-dark-link-red) !important;
}
 
.client-darkmode #content.mw-body a.external,
.client-darkmode #content.mw-body a.extiw,
.skin-theme-clientpref-night #content.mw-body a.external,
.skin-theme-clientpref-night #content.mw-body a.extiw {
  color: var(--gla-dark-link) !important;
}
 
.client-darkmode #content.mw-body .mw-datatable a,
.client-darkmode #content.mw-body .allpageslist a,
.client-darkmode #content.mw-body .mw-index-pager-list a,
.skin-theme-clientpref-night #content.mw-body .mw-datatable a,
.skin-theme-clientpref-night #content.mw-body .allpageslist a,
.skin-theme-clientpref-night #content.mw-body .mw-index-pager-list a {
  color: var(--gla-dark-link) !important;
}
 
/* ---- Forms / inputs (Special:Listfiles, preferências, busca interna) ---- */
.client-darkmode #content input[type="text"],
.client-darkmode #content input[type="search"],
.client-darkmode #content input[type="number"],
.client-darkmode #content input[type="email"],
.client-darkmode #content input[type="url"],
.client-darkmode #content input[type="password"],
.client-darkmode #content select,
.client-darkmode #content textarea,
.skin-theme-clientpref-night #content input[type="text"],
.skin-theme-clientpref-night #content input[type="search"],
.skin-theme-clientpref-night #content input[type="number"],
.skin-theme-clientpref-night #content input[type="email"],
.skin-theme-clientpref-night #content input[type="url"],
.skin-theme-clientpref-night #content input[type="password"],
.skin-theme-clientpref-night #content select,
.skin-theme-clientpref-night #content textarea {
  background-color: var(--gla-dark-input-bg) !important;
  color: var(--gla-dark-text) !important;
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode #content fieldset,
.client-darkmode #content .mw-htmlform-fieldset-wrapper,
.skin-theme-clientpref-night #content fieldset,
.skin-theme-clientpref-night #content .mw-htmlform-fieldset-wrapper {
  border-color: var(--gla-dark-border) !important;
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode #content label,
.client-darkmode #content .mw-label,
.client-darkmode #content .editOptions,
.client-darkmode #content .mw-specialpage-summary,
.skin-theme-clientpref-night #content label,
.skin-theme-clientpref-night #content .mw-label,
.skin-theme-clientpref-night #content .editOptions,
.skin-theme-clientpref-night #content .mw-specialpage-summary {
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode #content #editpage-copywarn,
.client-darkmode #content .mw-editform-creatednotice,
.client-darkmode #content small,
.skin-theme-clientpref-night #content #editpage-copywarn,
.skin-theme-clientpref-night #content .mw-editform-creatednotice,
.skin-theme-clientpref-night #content small {
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode #content .mw-ui-button:not(.mw-ui-progressive):not(.mw-ui-constructive),
.skin-theme-clientpref-night #content .mw-ui-button:not(.mw-ui-progressive):not(.mw-ui-constructive) {
  background-color: var(--gla-dark-chrome-panel) !important;
  color: var(--gla-dark-text) !important;
  border-color: var(--gla-dark-border) !important;
}
 
/* ---- Editor de código-fonte (WikiEditor + textarea) ---- */
.client-darkmode #wpTextbox1,
.client-darkmode .mw-editform #wpTextbox1,
.skin-theme-clientpref-night #wpTextbox1,
.skin-theme-clientpref-night .mw-editform #wpTextbox1 {
  background-color: var(--gla-dark-input-bg) !important;
  color: var(--gla-dark-text) !important;
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode .wikiEditor-ui .wikiEditor-ui-view,
.client-darkmode .wikiEditor-ui .wikiEditor-ui-top,
.client-darkmode .wikiEditor-ui-text,
.skin-theme-clientpref-night .wikiEditor-ui .wikiEditor-ui-view,
.skin-theme-clientpref-night .wikiEditor-ui .wikiEditor-ui-top,
.skin-theme-clientpref-night .wikiEditor-ui-text {
  border-color: var(--gla-dark-border) !important;
  background-color: var(--gla-dark-input-bg) !important;
}
 
.client-darkmode .wikiEditor-ui-toolbar,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar {
  background-color: var(--gla-dark-editor-toolbar) !important;
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode .wikiEditor-ui-toolbar .group,
.client-darkmode .wikiEditor-ui-toolbar .section-secondary .group,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .group,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .section-secondary .group {
  background-color: var(--gla-dark-editor-toolbar-alt) !important;
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode .wikiEditor-ui-toolbar .tabs span.tab a,
.client-darkmode .wikiEditor-ui-toolbar .tabs span.tab a:visited,
.client-darkmode .wikiEditor-ui-toolbar .group .tool-select .label,
.client-darkmode .wikiEditor-ui-toolbar .group .tool-select .options .option,
.client-darkmode .wikiEditor-ui-toolbar .sections .toolbar .group>.label,
.client-darkmode .wikiEditor-ui-toolbar .sections .toolbar .tool>.label,
.client-darkmode .wikiEditor-ui-toolbar .booklet>.index,
.client-darkmode .wikiEditor-ui-toolbar .page-table td,
.client-darkmode .wikiEditor-ui-toolbar .page-table th,
.client-darkmode .codeEditor-status-message,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .tabs span.tab a,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .tabs span.tab a:visited,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .group .tool-select .label,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .group .tool-select .options .option,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .sections .toolbar .group>.label,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .sections .toolbar .tool>.label,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .booklet>.index,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .page-table td,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .page-table th,
.skin-theme-clientpref-night .codeEditor-status-message {
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode .wikiEditor-ui-toolbar .tabs span.tab a.current,
.client-darkmode .wikiEditor-ui-toolbar .tabs span.tab a.current:visited,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .tabs span.tab a.current,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .tabs span.tab a.current:visited {
  color: var(--gla-dark-link) !important;
}
 
.client-darkmode .wikiEditor-ui-toolbar .group .tool-select,
.client-darkmode .wikiEditor-ui-toolbar .group .tool-select .options,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .group .tool-select,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .group .tool-select .options {
  background-color: var(--gla-dark-editor-toolbar-alt) !important;
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode .wikiEditor-ui-toolbar .group .tool-select .menu .options .option:hover,
.client-darkmode .wikiEditor-ui-toolbar .booklet>.index> :hover,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .group .tool-select .menu .options .option:hover,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .booklet>.index> :hover {
  background-color: var(--gla-dark-table-hover) !important;
  color: var(--gla-dark-text) !important;
}
 
/* WikiEditor: sprites/ícones legíveis no fundo escuro */
.client-darkmode .wikiEditor-ui-toolbar .tool-button,
.client-darkmode .wikiEditor-ui-toolbar img.tool,
.client-darkmode .wikiEditor-ui-toolbar .tabs span.tab a:before,
.client-darkmode .wikiEditor-ui-toolbar .group .tool-select .label:after,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .tool-button,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar img.tool,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .tabs span.tab a:before,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .group .tool-select .label:after {
  filter: invert(1) brightness(1.12) !important;
}
 
.client-darkmode .wikiEditor-ui-toolbar .tool.oo-ui-iconElement .oo-ui-iconElement-icon,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .tool.oo-ui-iconElement .oo-ui-iconElement-icon {
  filter: invert(1) brightness(1.12) !important;
}
 
.client-darkmode .oo-ui-selectFileInputWidget-dropZone,
.skin-theme-clientpref-night .oo-ui-selectFileInputWidget-dropZone {
  background-color: var(--gla-dark-input-bg) !important;
  color: var(--gla-dark-text) !important;
  border-color: var(--gla-dark-border) !important;
}
 
/* GLA: ocultar link "Ajuda de edição" no rodapé do formulário */
#content #editform .editHelp {
  display: none !important;
}
 
/* ---- FASE 3b: formulário de edição, OOUI, histórico de revisões ---- */
.client-darkmode #content #editform .editOptions,
.skin-theme-clientpref-night #content #editform .editOptions {
  background-color: var(--gla-dark-content-panel) !important;
  border: 1px solid var(--gla-dark-border) !important;
  color: var(--gla-dark-text) !important;
  padding: 0.75em 1em !important;
  border-radius: 2px;
}
 
.client-darkmode #content #editpage-copywarn,
.client-darkmode #content #editpage-copywarn p,
.client-darkmode #content .editHelp,
.client-darkmode #content .editButtons,
.skin-theme-clientpref-night #content #editpage-copywarn,
.skin-theme-clientpref-night #content #editpage-copywarn p,
.skin-theme-clientpref-night #content .editHelp,
.skin-theme-clientpref-night #content .editButtons {
  color: var(--gla-dark-text) !important;
  background: transparent !important;
}
 
.client-darkmode #content #editpage-copywarn a,
.skin-theme-clientpref-night #content #editpage-copywarn a {
  color: var(--gla-dark-link) !important;
}
 
.client-darkmode #content .editHelp a,
.skin-theme-clientpref-night #content .editHelp a {
  color: var(--gla-dark-link) !important;
}
 
.client-darkmode #content .oo-ui-widget,
.client-darkmode #content .oo-ui-labelElement-label,
.client-darkmode #content .oo-ui-fieldLayout,
.client-darkmode #content .oo-ui-horizontalLayout,
.client-darkmode #content .oo-ui-fieldLayout-fieldLabel,
.skin-theme-clientpref-night #content .oo-ui-widget,
.skin-theme-clientpref-night #content .oo-ui-labelElement-label,
.skin-theme-clientpref-night #content .oo-ui-fieldLayout,
.skin-theme-clientpref-night #content .oo-ui-horizontalLayout,
.skin-theme-clientpref-night #content .oo-ui-fieldLayout-fieldLabel {
  color: var(--gla-dark-ooui-text) !important;
}
 
.client-darkmode #content .oo-ui-checkboxInputWidget [type='checkbox']+span,
.client-darkmode #content .oo-ui-radioInputWidget [type='radio']+span,
.skin-theme-clientpref-night #content .oo-ui-checkboxInputWidget [type='checkbox']+span,
.skin-theme-clientpref-night #content .oo-ui-radioInputWidget [type='radio']+span {
  background-color: var(--gla-dark-ooui-input) !important;
  border-color: var(--gla-dark-ooui-input-border) !important;
}
 
.client-darkmode #content .oo-ui-checkboxInputWidget.oo-ui-widget-enabled [type='checkbox']:checked+span,
.client-darkmode #content .oo-ui-checkboxInputWidget.oo-ui-widget-enabled [type='checkbox']:indeterminate+span,
.skin-theme-clientpref-night #content .oo-ui-checkboxInputWidget.oo-ui-widget-enabled [type='checkbox']:checked+span,
.skin-theme-clientpref-night #content .oo-ui-checkboxInputWidget.oo-ui-widget-enabled [type='checkbox']:indeterminate+span {
  background-color: var(--gla-dark-ooui-progressive) !important;
  border-color: var(--gla-dark-ooui-progressive) !important;
}
 
.client-darkmode #content .oo-ui-checkboxInputWidget.oo-ui-widget-enabled [type='checkbox']:hover+span,
.client-darkmode #content .oo-ui-radioInputWidget.oo-ui-widget-enabled [type='radio']:hover+span,
.skin-theme-clientpref-night #content .oo-ui-checkboxInputWidget.oo-ui-widget-enabled [type='checkbox']:hover+span,
.skin-theme-clientpref-night #content .oo-ui-radioInputWidget.oo-ui-widget-enabled [type='radio']:hover+span {
  border-color: var(--gla-dark-link) !important;
}
 
/* Histórico — compare / pagehistory */
.client-darkmode #pagehistory li,
.skin-theme-clientpref-night #pagehistory li {
  color: var(--gla-dark-text) !important;
  border-color: transparent !important;
}
 
.client-darkmode #pagehistory li.selected,
.client-darkmode #pagehistory li.selected.before,
.client-darkmode #pagehistory li.selected.after,
.skin-theme-clientpref-night #pagehistory li.selected,
.skin-theme-clientpref-night #pagehistory li.selected.before,
.skin-theme-clientpref-night #pagehistory li.selected.after {
  background-color: var(--gla-dark-table-header) !important;
  border-color: var(--gla-dark-border) !important;
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode #pagehistory li a,
.client-darkmode #pagehistory li .mw-history-histlinks a,
.skin-theme-clientpref-night #pagehistory li a,
.skin-theme-clientpref-night #pagehistory li .mw-history-histlinks a {
  color: var(--gla-dark-link) !important;
}
 
.client-darkmode #mw-history-compare>div:first-of-type,
.skin-theme-clientpref-night #mw-history-compare>div:first-of-type {
  background-color: var(--gla-dark-content-panel) !important;
  border-color: var(--gla-dark-border) !important;
  color: var(--gla-dark-text) !important;
}
 
/* ---- FASE 3c: OOUI global + Alterações recentes (RC Filters) ---- */
.client-darkmode .oo-ui-widget,
.skin-theme-clientpref-night .oo-ui-widget {
  color: var(--gla-dark-ooui-text);
}
 
.client-darkmode .oo-ui-buttonElement-framed.oo-ui-widget-enabled>.oo-ui-buttonElement-button,
.skin-theme-clientpref-night .oo-ui-buttonElement-framed.oo-ui-widget-enabled>.oo-ui-buttonElement-button {
  background-color: var(--gla-dark-ooui-input) !important;
  color: var(--gla-dark-ooui-text) !important;
  border-color: var(--gla-dark-ooui-input-border) !important;
}
 
.client-darkmode .oo-ui-buttonElement-framed.oo-ui-widget-enabled>.oo-ui-buttonElement-button:hover,
.client-darkmode .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-active>.oo-ui-buttonElement-button,
.client-darkmode .oo-ui-buttonElement-framed.oo-ui-widget-enabled>.oo-ui-buttonElement-button:active,
.client-darkmode .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-pressed>.oo-ui-buttonElement-button,
.skin-theme-clientpref-night .oo-ui-buttonElement-framed.oo-ui-widget-enabled>.oo-ui-buttonElement-button:hover,
.skin-theme-clientpref-night .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-active>.oo-ui-buttonElement-button,
.skin-theme-clientpref-night .oo-ui-buttonElement-framed.oo-ui-widget-enabled>.oo-ui-buttonElement-button:active,
.skin-theme-clientpref-night .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-pressed>.oo-ui-buttonElement-button {
  background-color: var(--gla-dark-ooui-normal-hover) !important;
  color: var(--gla-dark-ooui-text) !important;
  border-color: var(--gla-dark-ooui-input-border) !important;
}
 
.client-darkmode .oo-ui-toggleButtonWidget-on.oo-ui-buttonElement-framed.oo-ui-widget-enabled>.oo-ui-buttonElement-button,
.skin-theme-clientpref-night .oo-ui-toggleButtonWidget-on.oo-ui-buttonElement-framed.oo-ui-widget-enabled>.oo-ui-buttonElement-button {
  background-color: var(--gla-dark-ooui-progressive) !important;
  border-color: var(--gla-dark-ooui-progressive) !important;
  color: #fff !important;
}
 
.client-darkmode .oo-ui-buttonElement-frameless.oo-ui-widget-enabled>.oo-ui-buttonElement-button,
.skin-theme-clientpref-night .oo-ui-buttonElement-frameless.oo-ui-widget-enabled>.oo-ui-buttonElement-button {
  color: var(--gla-dark-ooui-text) !important;
}
 
.client-darkmode .oo-ui-popupWidget-popup,
.client-darkmode .oo-ui-popupWidget-head,
.client-darkmode .oo-ui-popupWidget-footer,
.skin-theme-clientpref-night .oo-ui-popupWidget-popup,
.skin-theme-clientpref-night .oo-ui-popupWidget-head,
.skin-theme-clientpref-night .oo-ui-popupWidget-footer {
  background-color: var(--gla-dark-ooui-interface) !important;
  border-color: var(--gla-dark-ooui-interface-border) !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
.client-darkmode .oo-ui-menuSelectWidget,
.skin-theme-clientpref-night .oo-ui-menuSelectWidget {
  background-color: var(--gla-dark-ooui-interface) !important;
  border-color: var(--gla-dark-ooui-interface-border) !important;
}
 
.client-darkmode .oo-ui-menuOptionWidget.oo-ui-widget-enabled.oo-ui-optionWidget,
.skin-theme-clientpref-night .oo-ui-menuOptionWidget.oo-ui-widget-enabled.oo-ui-optionWidget {
  color: var(--gla-dark-ooui-text) !important;
}
 
.client-darkmode .oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted,
.client-darkmode .oo-ui-menuOptionWidget.oo-ui-optionWidget-selected,
.client-darkmode .oo-ui-menuOptionWidget.oo-ui-widget-enabled.oo-ui-optionWidget:hover,
.skin-theme-clientpref-night .oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted,
.skin-theme-clientpref-night .oo-ui-menuOptionWidget.oo-ui-optionWidget-selected,
.skin-theme-clientpref-night .oo-ui-menuOptionWidget.oo-ui-widget-enabled.oo-ui-optionWidget:hover {
  background-color: var(--gla-dark-ooui-normal-hover) !important;
  color: var(--gla-dark-ooui-accent) !important;
}
 
.client-darkmode .oo-ui-tagMultiselectWidget-handle,
.skin-theme-clientpref-night .oo-ui-tagMultiselectWidget-handle {
  background-color: var(--gla-dark-ooui-interface) !important;
  border-color: var(--gla-dark-ooui-input-border) !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
.client-darkmode .oo-ui-tagMultiselectWidget-input input,
.skin-theme-clientpref-night .oo-ui-tagMultiselectWidget-input input {
  background-color: transparent !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
.client-darkmode .oo-ui-tagItemWidget.oo-ui-widget-enabled,
.skin-theme-clientpref-night .oo-ui-tagItemWidget.oo-ui-widget-enabled {
  background-color: var(--gla-dark-ooui-normal) !important;
  border-color: var(--gla-dark-ooui-input-border) !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
.client-darkmode .oo-ui-dropdownWidget.oo-ui-widget-enabled .oo-ui-dropdownWidget-handle,
.skin-theme-clientpref-night .oo-ui-dropdownWidget.oo-ui-widget-enabled .oo-ui-dropdownWidget-handle {
  background-color: var(--gla-dark-ooui-input) !important;
  color: var(--gla-dark-ooui-text) !important;
  border-color: var(--gla-dark-ooui-input-border) !important;
}
 
.client-darkmode .oo-ui-labelWidget.oo-ui-inline-help,
.skin-theme-clientpref-night .oo-ui-labelWidget.oo-ui-inline-help {
  color: var(--gla-dark-ooui-byline) !important;
}
 
/* RC Filters */
.client-darkmode .mw-rcfilters-head,
.client-darkmode .mw-rcfilters-container,
.client-darkmode .mw-rcfilters-ui-filterWrapperWidget,
.skin-theme-clientpref-night .mw-rcfilters-head,
.skin-theme-clientpref-night .mw-rcfilters-container,
.skin-theme-clientpref-night .mw-rcfilters-ui-filterWrapperWidget {
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode .mw-rcfilters-ui-filterTagMultiselectWidget-wrapper-content-title,
.skin-theme-clientpref-night .mw-rcfilters-ui-filterTagMultiselectWidget-wrapper-content-title {
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode .mw-rcfilters-ui-filterTagMultiselectWidget-emptyFilters,
.client-darkmode .mw-rcfilters-ui-viewSwitchWidget label.oo-ui-labelWidget,
.client-darkmode .mw-rcfilters-ui-datePopupWidget .mw-rcfilters-ui-valuePickerWidget-title,
.skin-theme-clientpref-night .mw-rcfilters-ui-filterTagMultiselectWidget-emptyFilters,
.skin-theme-clientpref-night .mw-rcfilters-ui-viewSwitchWidget label.oo-ui-labelWidget,
.skin-theme-clientpref-night .mw-rcfilters-ui-datePopupWidget .mw-rcfilters-ui-valuePickerWidget-title {
  color: var(--gla-dark-ooui-byline) !important;
}
 
.client-darkmode .mw-rcfilters-ui-menuSelectWidget-footer,
.skin-theme-clientpref-night .mw-rcfilters-ui-menuSelectWidget-footer {
  background-color: var(--gla-dark-ooui-interface) !important;
  border-color: var(--gla-dark-ooui-interface-border) !important;
}
 
.client-darkmode .mw-rcfilters-ui-itemMenuOptionWidget-header,
.skin-theme-clientpref-night .mw-rcfilters-ui-itemMenuOptionWidget-header {
  background-color: var(--gla-dark-ooui-normal) !important;
  border-bottom-color: var(--gla-dark-ooui-interface-border) !important;
}
 
.client-darkmode .mw-rcfilters-ui-itemMenuOptionWidget-label-title,
.client-darkmode .mw-rcfilters-ui-itemMenuOptionWidget-label-desc,
.client-darkmode .mw-rcfilters-ui-filterMenuHeaderWidget-title,
.skin-theme-clientpref-night .mw-rcfilters-ui-itemMenuOptionWidget-label-title,
.skin-theme-clientpref-night .mw-rcfilters-ui-itemMenuOptionWidget-label-desc,
.skin-theme-clientpref-night .mw-rcfilters-ui-filterMenuHeaderWidget-title {
  color: var(--gla-dark-ooui-text) !important;
}
 
.client-darkmode .mw-rcfilters-ui-filterMenuSectionOptionWidget,
.skin-theme-clientpref-night .mw-rcfilters-ui-filterMenuSectionOptionWidget {
  background-color: var(--gla-dark-ooui-normal) !important;
}
 
.client-darkmode .mw-rcfilters-ui-filterMenuHeaderWidget-header,
.skin-theme-clientpref-night .mw-rcfilters-ui-filterMenuHeaderWidget-header {
  background-color: var(--gla-dark-ooui-interface) !important;
  border-bottom-color: var(--gla-dark-ooui-interface-border) !important;
}
 
.client-darkmode .mw-rcfilters-ui-filterMenuOptionWidget.oo-ui-flaggedElement-muted:not(.oo-ui-optionWidget-selected),
.skin-theme-clientpref-night .mw-rcfilters-ui-filterMenuOptionWidget.oo-ui-flaggedElement-muted:not(.oo-ui-optionWidget-selected) {
  background-color: var(--gla-dark-content-bg) !important;
}
 
.client-darkmode .mw-rcfilters-ui-savedLinksListItemWidget-label,
.skin-theme-clientpref-night .mw-rcfilters-ui-savedLinksListItemWidget-label {
  color: var(--gla-dark-ooui-accent) !important;
}
 
.client-darkmode .mw-rcfilters-ui-datePopupWidget,
.skin-theme-clientpref-night .mw-rcfilters-ui-datePopupWidget {
  border-color: var(--gla-dark-ooui-interface-border) !important;
}
 
.client-darkmode .mw-rcfilters-collapsed .mw-rcfilters-ui-filterTagMultiselectWidget,
.skin-theme-clientpref-night .mw-rcfilters-collapsed .mw-rcfilters-ui-filterTagMultiselectWidget {
  border-bottom-color: var(--gla-dark-ooui-interface-border) !important;
}
 
.client-darkmode .client-js .mw-recentchanges-toplinks:not(.mw-recentchanges-toplinks-collapsed),
.skin-theme-clientpref-night .client-js .mw-recentchanges-toplinks:not(.mw-recentchanges-toplinks-collapsed) {
  background-color: var(--gla-dark-ooui-interface) !important;
  border-color: var(--gla-dark-ooui-interface-border) !important;
  color: var(--gla-dark-text) !important;
}
 
/* Legenda de abreviaturas (changeslist) */
.client-darkmode .mw-changeslist-legend,
.client-darkmode .mw-changeslist.mw-rcfilters-ui-changesListWrapperWidget .mw-changeslist-legend,
.skin-theme-clientpref-night .mw-changeslist-legend,
.skin-theme-clientpref-night .mw-changeslist.mw-rcfilters-ui-changesListWrapperWidget .mw-changeslist-legend {
  background-color: var(--gla-dark-ooui-interface) !important;
  border-color: var(--gla-dark-ooui-interface-border) !important;
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode .mw-changeslist-legend strong,
.client-darkmode .mw-changeslist-legend dt,
.client-darkmode .mw-changeslist-legend dd,
.skin-theme-clientpref-night .mw-changeslist-legend strong,
.skin-theme-clientpref-night .mw-changeslist-legend dt,
.skin-theme-clientpref-night .mw-changeslist-legend dd {
  color: var(--gla-dark-text) !important;
}
 
/* =============================================================================
  FASE 4 — Catch-all dark: message boxes, changeslist, special pages, OOUI gaps
  Complementa FASE 3 (não duplica tabelas base, inputs genéricos, RC Filters UI)
  ============================================================================= */
 
/* ---- 4a: Message boxes (core força color:#000 e fundos claros) ---- */
.client-darkmode #content .messagebox,
.client-darkmode #content .errorbox,
.client-darkmode #content .warningbox,
.client-darkmode #content .successbox,
.client-darkmode #content .mw-message-box,
.client-darkmode #content .mw-message-box-error,
.client-darkmode #content .mw-message-box-warning,
.client-darkmode #content .mw-message-box-success,
.client-darkmode #content .usermessage,
.client-darkmode .mw-notification,
.skin-theme-clientpref-night #content .messagebox,
.skin-theme-clientpref-night #content .errorbox,
.skin-theme-clientpref-night #content .warningbox,
.skin-theme-clientpref-night #content .successbox,
.skin-theme-clientpref-night #content .mw-message-box,
.skin-theme-clientpref-night #content .mw-message-box-error,
.skin-theme-clientpref-night #content .mw-message-box-warning,
.skin-theme-clientpref-night #content .mw-message-box-success,
.skin-theme-clientpref-night #content .usermessage,
.skin-theme-clientpref-night .mw-notification {
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode #content .messagebox,
.client-darkmode #content .mw-message-box,
.skin-theme-clientpref-night #content .messagebox,
.skin-theme-clientpref-night #content .mw-message-box {
  background-color: var(--gla-dark-messagebox-bg) !important;
  border-color: var(--gla-dark-messagebox-border) !important;
}
 
.client-darkmode #content .errorbox,
.client-darkmode #content .mw-message-box-error,
.skin-theme-clientpref-night #content .errorbox,
.skin-theme-clientpref-night #content .mw-message-box-error {
  background-color: var(--gla-dark-error-bg) !important;
  border-color: var(--gla-dark-error-border) !important;
}
 
.client-darkmode #content .warningbox,
.client-darkmode #content .mw-message-box-warning,
.client-darkmode #content .usermessage,
.client-darkmode .mw-notification.mw-notification-type-warn,
.skin-theme-clientpref-night #content .warningbox,
.skin-theme-clientpref-night #content .mw-message-box-warning,
.skin-theme-clientpref-night #content .usermessage,
.skin-theme-clientpref-night .mw-notification.mw-notification-type-warn {
  background-color: var(--gla-dark-warning-bg) !important;
  border-color: var(--gla-dark-warning-border) !important;
}
 
.client-darkmode #content .successbox,
.client-darkmode #content .mw-message-box-success,
.skin-theme-clientpref-night #content .successbox,
.skin-theme-clientpref-night #content .mw-message-box-success {
  background-color: var(--gla-dark-success-bg) !important;
  border-color: var(--gla-dark-success-border) !important;
}
 
.client-darkmode #content .errorbox h2,
.client-darkmode #content .warningbox h2,
.client-darkmode #content .successbox h2,
.client-darkmode #content .messagebox h2,
.client-darkmode #content .warningbox.mw-warning-with-logexcerpt,
.client-darkmode #content .warningbox.mw-warning-with-logexcerpt .mw-logevent-loglines li,
.client-darkmode #content .messagebox .mw-logevent-loglines li,
.skin-theme-clientpref-night #content .errorbox h2,
.skin-theme-clientpref-night #content .warningbox h2,
.skin-theme-clientpref-night #content .successbox h2,
.skin-theme-clientpref-night #content .messagebox h2,
.skin-theme-clientpref-night #content .warningbox.mw-warning-with-logexcerpt,
.skin-theme-clientpref-night #content .warningbox.mw-warning-with-logexcerpt .mw-logevent-loglines li,
.skin-theme-clientpref-night #content .messagebox .mw-logevent-loglines li {
  color: inherit !important;
}
 
.client-darkmode #content .mw-destfile-warning,
.skin-theme-clientpref-night #content .mw-destfile-warning {
  background-color: var(--gla-dark-warning-bg) !important;
  border-color: var(--gla-dark-warning-border) !important;
  color: var(--gla-dark-text) !important;
}
 
/* ---- 4b: Changeslist (corpo — FASE 3c só cobre legenda) ---- */
.client-darkmode #content .mw-changeslist,
.client-darkmode #content .mw-changeslist li,
.client-darkmode #content .mw-changeslist-date,
.client-darkmode #content .mw-changeslist-line-inner,
.client-darkmode #content table.mw-enhanced-rc,
.client-darkmode #content table.mw-enhanced-rc td,
.skin-theme-clientpref-night #content .mw-changeslist,
.skin-theme-clientpref-night #content .mw-changeslist li,
.skin-theme-clientpref-night #content .mw-changeslist-date,
.skin-theme-clientpref-night #content .mw-changeslist-line-inner,
.skin-theme-clientpref-night #content table.mw-enhanced-rc,
.skin-theme-clientpref-night #content table.mw-enhanced-rc td {
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode #content li.not-patrolled,
.client-darkmode #content tr.not-patrolled td,
.skin-theme-clientpref-night #content li.not-patrolled,
.skin-theme-clientpref-night #content tr.not-patrolled td {
  background-color: var(--gla-dark-not-patrolled) !important;
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode #content .unpatrolled,
.skin-theme-clientpref-night #content .unpatrolled {
  color: var(--gla-dark-link-red) !important;
}
 
.client-darkmode #content span.history-deleted,
.skin-theme-clientpref-night #content span.history-deleted {
  color: var(--gla-dark-ooui-byline) !important;
}
 
.client-darkmode #content .mw-plusminus-pos,
.skin-theme-clientpref-night #content .mw-plusminus-pos {
  color: var(--gla-dark-rc-pos) !important;
}
 
.client-darkmode #content .mw-plusminus-neg,
.skin-theme-clientpref-night #content .mw-plusminus-neg {
  color: var(--gla-dark-rc-neg) !important;
}
 
.client-darkmode .mw-rcfilters-ui-changesListWrapperWidget li.mw-rcfilters-highlight-color-c1,
.client-darkmode .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c1.mw-rcfilters-ui-highlights-enhanced-toplevel:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+2)),
.client-darkmode .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c1.mw-rcfilters-ui-highlights-enhanced-nested:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+4)),
.skin-theme-clientpref-night .mw-rcfilters-ui-changesListWrapperWidget li.mw-rcfilters-highlight-color-c1,
.skin-theme-clientpref-night .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c1.mw-rcfilters-ui-highlights-enhanced-toplevel:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+2)),
.skin-theme-clientpref-night .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c1.mw-rcfilters-ui-highlights-enhanced-nested:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+4)) {
  background-color: var(--gla-dark-rc-highlight-c1) !important;
}
 
.client-darkmode .mw-rcfilters-ui-changesListWrapperWidget li.mw-rcfilters-highlight-color-c2,
.client-darkmode .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c2.mw-rcfilters-ui-highlights-enhanced-toplevel:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+2)),
.client-darkmode .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c2.mw-rcfilters-ui-highlights-enhanced-nested:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+4)),
.skin-theme-clientpref-night .mw-rcfilters-ui-changesListWrapperWidget li.mw-rcfilters-highlight-color-c2,
.skin-theme-clientpref-night .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c2.mw-rcfilters-ui-highlights-enhanced-toplevel:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+2)),
.skin-theme-clientpref-night .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c2.mw-rcfilters-ui-highlights-enhanced-nested:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+4)) {
  background-color: var(--gla-dark-rc-highlight-c2) !important;
}
 
.client-darkmode .mw-rcfilters-ui-changesListWrapperWidget li.mw-rcfilters-highlight-color-c3,
.client-darkmode .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c3.mw-rcfilters-ui-highlights-enhanced-toplevel:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+2)),
.client-darkmode .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c3.mw-rcfilters-ui-highlights-enhanced-nested:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+4)),
.skin-theme-clientpref-night .mw-rcfilters-ui-changesListWrapperWidget li.mw-rcfilters-highlight-color-c3,
.skin-theme-clientpref-night .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c3.mw-rcfilters-ui-highlights-enhanced-toplevel:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+2)),
.skin-theme-clientpref-night .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c3.mw-rcfilters-ui-highlights-enhanced-nested:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+4)) {
  background-color: var(--gla-dark-rc-highlight-c3) !important;
}
 
.client-darkmode .mw-rcfilters-ui-changesListWrapperWidget li.mw-rcfilters-highlight-color-c4,
.client-darkmode .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c4.mw-rcfilters-ui-highlights-enhanced-toplevel:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+2)),
.client-darkmode .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c4.mw-rcfilters-ui-highlights-enhanced-nested:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+4)),
.skin-theme-clientpref-night .mw-rcfilters-ui-changesListWrapperWidget li.mw-rcfilters-highlight-color-c4,
.skin-theme-clientpref-night .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c4.mw-rcfilters-ui-highlights-enhanced-toplevel:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+2)),
.skin-theme-clientpref-night .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c4.mw-rcfilters-ui-highlights-enhanced-nested:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+4)) {
  background-color: var(--gla-dark-rc-highlight-c4) !important;
}
 
.client-darkmode .mw-rcfilters-ui-changesListWrapperWidget li.mw-rcfilters-highlight-color-c5,
.client-darkmode .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c5.mw-rcfilters-ui-highlights-enhanced-toplevel:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+2)),
.client-darkmode .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c5.mw-rcfilters-ui-highlights-enhanced-nested:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+4)),
.skin-theme-clientpref-night .mw-rcfilters-ui-changesListWrapperWidget li.mw-rcfilters-highlight-color-c5,
.skin-theme-clientpref-night .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c5.mw-rcfilters-ui-highlights-enhanced-toplevel:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+2)),
.skin-theme-clientpref-night .mw-rcfilters-ui-changesListWrapperWidget tr.mw-rcfilters-highlight-color-c5.mw-rcfilters-ui-highlights-enhanced-nested:not(.mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey) td:not(:nth-child(-n+4)) {
  background-color: var(--gla-dark-rc-highlight-c5) !important;
}
 
.client-darkmode .mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey td:not(:nth-child(-n+2)),
.skin-theme-clientpref-night .mw-rcfilters-ui-changesListWrapperWidget-enhanced-grey td:not(:nth-child(-n+2)) {
  background-color: var(--gla-dark-rc-highlight-grey) !important;
}
 
.client-darkmode .mw-rcfilters-ui-changesListWrapperWidget-previousChangesIndicator,
.skin-theme-clientpref-night .mw-rcfilters-ui-changesListWrapperWidget-previousChangesIndicator {
  border-color: var(--gla-dark-border) !important;
}
 
/* ---- 4c: mw-htmlform legacy + upload ---- */
.client-darkmode #content #mw-upload-form,
.client-darkmode #content #mw-upload-form fieldset,
.client-darkmode #content table.mw-htmlform,
.client-darkmode #content table.mw-htmlform-nolabel,
.client-darkmode #content #mw-htmlform-options,
.client-darkmode #content #mw-htmlform-description,
.client-darkmode #content td.mw-label,
.client-darkmode #content td.mw-input,
.client-darkmode #content td.mw-submit,
.client-darkmode #content .mw-htmlform-nolabel td,
.skin-theme-clientpref-night #content #mw-upload-form,
.skin-theme-clientpref-night #content #mw-upload-form fieldset,
.skin-theme-clientpref-night #content table.mw-htmlform,
.skin-theme-clientpref-night #content table.mw-htmlform-nolabel,
.skin-theme-clientpref-night #content #mw-htmlform-options,
.skin-theme-clientpref-night #content #mw-htmlform-description,
.skin-theme-clientpref-night #content td.mw-label,
.skin-theme-clientpref-night #content td.mw-input,
.skin-theme-clientpref-night #content td.mw-submit,
.skin-theme-clientpref-night #content .mw-htmlform-nolabel td {
  color: var(--gla-dark-text) !important;
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode #content legend,
.skin-theme-clientpref-night #content legend {
  color: var(--gla-dark-heading) !important;
}
 
.client-darkmode #content .mw-htmlform-ooui .htmlform-tip,
.skin-theme-clientpref-night #content .mw-htmlform-ooui .htmlform-tip {
  color: var(--gla-dark-ooui-byline) !important;
}
 
.client-darkmode #content .mw-htmlform-ooui .mw-htmlform-matrix tbody tr:nth-child(even) td,
.skin-theme-clientpref-night #content .mw-htmlform-ooui .mw-htmlform-matrix tbody tr:nth-child(even) td {
  background-color: var(--gla-dark-table-stripe) !important;
}
 
.client-darkmode #content .mw-htmlform-ooui .mw-htmlform-matrix tbody tr:hover td,
.skin-theme-clientpref-night #content .mw-htmlform-ooui .mw-htmlform-matrix tbody tr:hover td {
  background-color: var(--gla-dark-table-hover) !important;
}
 
.client-darkmode #content #mw-upload-permitted,
.client-darkmode #content #mw-upload-preferred,
.client-darkmode #content #mw-upload-prohibited,
.client-darkmode #content #mw-upload-footer-message,
.skin-theme-clientpref-night #content #mw-upload-permitted,
.skin-theme-clientpref-night #content #mw-upload-preferred,
.skin-theme-clientpref-night #content #mw-upload-prohibited,
.skin-theme-clientpref-night #content #mw-upload-footer-message {
  color: var(--gla-dark-text) !important;
}
 
/* ---- 4d: Special Search, Preferences, AllPages ---- */
.client-darkmode #content .mw-search-profile-tabs,
.client-darkmode #content #mw-searchoptions,
.skin-theme-clientpref-night #content .mw-search-profile-tabs,
.skin-theme-clientpref-night #content #mw-searchoptions {
  background-color: var(--gla-dark-content-panel) !important;
  border-color: var(--gla-dark-border) !important;
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode #content #mw-searchoptions .divider,
.skin-theme-clientpref-night #content #mw-searchoptions .divider {
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode #content #mw-searchoptions h4,
.skin-theme-clientpref-night #content #mw-searchoptions h4 {
  color: var(--gla-dark-heading) !important;
}
 
.client-darkmode #content .mw-search-result-data,
.client-darkmode #content .results-info,
.client-darkmode #content .mw-number-text,
.skin-theme-clientpref-night #content .mw-search-result-data,
.skin-theme-clientpref-night #content .results-info,
.skin-theme-clientpref-night #content .mw-number-text {
  color: var(--gla-dark-ooui-byline) !important;
}
 
.client-darkmode #content #mw-search-interwiki,
.skin-theme-clientpref-night #content #mw-search-interwiki {
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode #preferences .mw-htmlform-submit-buttons,
.client-darkmode #content .mw-prefs-buttons,
.skin-theme-clientpref-night #preferences .mw-htmlform-submit-buttons,
.skin-theme-clientpref-night #content .mw-prefs-buttons {
  background-color: var(--gla-dark-content-bg) !important;
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode #content .mw-prefs-tabs-wrapper.oo-ui-panelLayout-framed,
.client-darkmode #content .mw-prefs-tabs>.oo-ui-menuLayout-content>.oo-ui-indexLayout-stackLayout>.oo-ui-tabPanelLayout,
.skin-theme-clientpref-night #content .mw-prefs-tabs-wrapper.oo-ui-panelLayout-framed,
.skin-theme-clientpref-night #content .mw-prefs-tabs>.oo-ui-menuLayout-content>.oo-ui-indexLayout-stackLayout>.oo-ui-tabPanelLayout {
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode #content .mw-prefs-search-highlight,
.skin-theme-clientpref-night #content .mw-prefs-search-highlight {
  background-color: var(--gla-dark-table-hover) !important;
  outline-color: var(--gla-dark-border) !important;
}
 
.client-darkmode #content .mw-allpages-body,
.client-darkmode #content .mw-allpages-chunk,
.client-darkmode #content .mw-prefixindex-body,
.client-darkmode #content .mw-prefixindex-list,
.skin-theme-clientpref-night #content .mw-allpages-body,
.skin-theme-clientpref-night #content .mw-allpages-chunk,
.skin-theme-clientpref-night #content .mw-prefixindex-body,
.skin-theme-clientpref-night #content .mw-prefixindex-list {
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode #content .allpagesredirect:after,
.client-darkmode #content .mw-protectedpages-unknown,
.skin-theme-clientpref-night #content .allpagesredirect:after,
.skin-theme-clientpref-night #content .mw-protectedpages-unknown {
  color: var(--gla-dark-ooui-byline) !important;
}
 
.client-darkmode #content #mw-allmessagestable tbody:hover td,
.client-darkmode #content table.alternating-rows tr:nth-child(odd) td,
.skin-theme-clientpref-night #content #mw-allmessagestable tbody:hover td,
.skin-theme-clientpref-night #content table.alternating-rows tr:nth-child(odd) td {
  background-color: var(--gla-dark-table-stripe) !important;
}
 
.client-darkmode #content .list-header,
.client-darkmode #content #filetoc,
.skin-theme-clientpref-night #content .list-header,
.skin-theme-clientpref-night #content #filetoc {
  background-color: var(--gla-dark-content-panel) !important;
  border-color: var(--gla-dark-border) !important;
  color: var(--gla-dark-text) !important;
}
 
/* ---- 4e: Diff ---- */
.client-darkmode #content .diff-context,
.skin-theme-clientpref-night #content .diff-context {
  background: var(--gla-dark-diff-context-bg) !important;
  border-color: var(--gla-dark-border) !important;
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode #content .diff-addedline,
.skin-theme-clientpref-night #content .diff-addedline {
  border-color: var(--gla-dark-diff-added-border) !important;
}
 
.client-darkmode #content .diff-addedline .diffchange,
.client-darkmode #content .mw-diff-inline-added ins,
.client-darkmode #content .mw-diff-inline-changed ins,
.skin-theme-clientpref-night #content .diff-addedline .diffchange,
.skin-theme-clientpref-night #content .mw-diff-inline-added ins,
.skin-theme-clientpref-night #content .mw-diff-inline-changed ins {
  background: var(--gla-dark-diff-added-bg) !important;
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode #content .diff-deletedline,
.skin-theme-clientpref-night #content .diff-deletedline {
  border-color: var(--gla-dark-diff-deleted-border) !important;
}
 
.client-darkmode #content .diff-deletedline .diffchange,
.client-darkmode #content .mw-diff-inline-deleted del,
.client-darkmode #content .mw-diff-inline-changed del,
.skin-theme-clientpref-night #content .diff-deletedline .diffchange,
.skin-theme-clientpref-night #content .mw-diff-inline-deleted del,
.skin-theme-clientpref-night #content .mw-diff-inline-changed del {
  background: var(--gla-dark-diff-deleted-bg) !important;
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode #content .mw-diff-movedpara-left:after,
.client-darkmode #content .mw-diff-movedpara-right:after,
.skin-theme-clientpref-night #content .mw-diff-movedpara-left:after,
.skin-theme-clientpref-night #content .mw-diff-movedpara-right:after {
  color: var(--gla-dark-text) !important;
}
 
/* ---- 4f: catlinks ---- */
.client-darkmode #content #catlinks,
.client-darkmode #content .catlinks,
.skin-theme-clientpref-night #content #catlinks,
.skin-theme-clientpref-night #content .catlinks {
  background: var(--gla-dark-content-panel) !important;
  border-color: var(--gla-dark-border) !important;
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode #content .catlinks li,
.skin-theme-clientpref-night #content .catlinks li {
  border-color: var(--gla-dark-border) !important;
}
 
/* ---- 4g: OOUI gaps (textInput, tabs, toggle, dialogs, progressive) ---- */
.client-darkmode .oo-ui-textInputWidget .oo-ui-inputWidget-input,
.skin-theme-clientpref-night .oo-ui-textInputWidget .oo-ui-inputWidget-input {
  background-color: var(--gla-dark-ooui-input) !important;
  color: var(--gla-dark-ooui-text) !important;
  border-color: var(--gla-dark-ooui-input-border) !important;
}
 
.client-darkmode .oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input:focus,
.skin-theme-clientpref-night .oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input:focus {
  border-color: var(--gla-dark-ooui-accent) !important;
  box-shadow: inset 0 0 0 1px var(--gla-dark-ooui-accent) !important;
}
 
.client-darkmode .oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input::placeholder,
.skin-theme-clientpref-night .oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input::placeholder {
  color: var(--gla-dark-ooui-byline) !important;
}
 
.client-darkmode .oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-inputWidget-input,
.skin-theme-clientpref-night .oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-inputWidget-input {
  background-color: var(--gla-dark-ooui-disabled) !important;
  color: var(--gla-dark-ooui-disabled-text) !important;
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode .oo-ui-toggleSwitchWidget,
.skin-theme-clientpref-night .oo-ui-toggleSwitchWidget {
  background-color: var(--gla-dark-ooui-input) !important;
  border-color: var(--gla-dark-ooui-input-border) !important;
}
 
.client-darkmode .oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on,
.skin-theme-clientpref-night .oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on {
  background-color: var(--gla-dark-ooui-progressive) !important;
  border-color: var(--gla-dark-ooui-progressive) !important;
}
 
.client-darkmode .oo-ui-tabSelectWidget-framed,
.skin-theme-clientpref-night .oo-ui-tabSelectWidget-framed {
  border-bottom-color: var(--gla-dark-ooui-interface-border) !important;
}
 
.client-darkmode .oo-ui-tabSelectWidget-framed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected,
.skin-theme-clientpref-night .oo-ui-tabSelectWidget-framed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected {
  background-color: var(--gla-dark-content-bg) !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
.client-darkmode .oo-ui-tabSelectWidget-framed .oo-ui-tabOptionWidget.oo-ui-widget-enabled:hover,
.skin-theme-clientpref-night .oo-ui-tabSelectWidget-framed .oo-ui-tabOptionWidget.oo-ui-widget-enabled:hover {
  background-color: var(--gla-dark-ooui-normal-hover) !important;
}
 
.client-darkmode .oo-ui-tabSelectWidget-frameless .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected,
.skin-theme-clientpref-night .oo-ui-tabSelectWidget-frameless .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected {
  color: var(--gla-dark-ooui-progressive) !important;
  box-shadow: inset 0 -2px 0 0 var(--gla-dark-ooui-progressive) !important;
}
 
.client-darkmode .oo-ui-selectFileWidget-dropTarget,
.skin-theme-clientpref-night .oo-ui-selectFileWidget-dropTarget {
  background-color: var(--gla-dark-ooui-interface) !important;
  border-color: var(--gla-dark-ooui-interface-border) !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
.client-darkmode .oo-ui-dropdownInputWidget option,
.skin-theme-clientpref-night .oo-ui-dropdownInputWidget option {
  background-color: var(--gla-dark-ooui-interface) !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
.client-darkmode .oo-ui-messageWidget.oo-ui-messageWidget-block.oo-ui-flaggedElement-error,
.skin-theme-clientpref-night .oo-ui-messageWidget.oo-ui-messageWidget-block.oo-ui-flaggedElement-error {
  background-color: var(--gla-dark-error-bg) !important;
  border-color: var(--gla-dark-error-border) !important;
}
 
.client-darkmode .oo-ui-messageWidget.oo-ui-messageWidget-block.oo-ui-flaggedElement-warning,
.skin-theme-clientpref-night .oo-ui-messageWidget.oo-ui-messageWidget-block.oo-ui-flaggedElement-warning {
  background-color: var(--gla-dark-warning-bg) !important;
  border-color: var(--gla-dark-warning-border) !important;
}
 
.client-darkmode .oo-ui-messageWidget.oo-ui-messageWidget-block.oo-ui-flaggedElement-success,
.skin-theme-clientpref-night .oo-ui-messageWidget.oo-ui-messageWidget-block.oo-ui-flaggedElement-success {
  background-color: var(--gla-dark-success-bg) !important;
  border-color: var(--gla-dark-success-border) !important;
}
 
.client-darkmode .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive>.oo-ui-buttonElement-button,
.skin-theme-clientpref-night .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive>.oo-ui-buttonElement-button {
  background-color: var(--gla-dark-ooui-progressive) !important;
  border-color: var(--gla-dark-ooui-progressive) !important;
  color: #fff !important;
}
 
.client-darkmode .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive>.oo-ui-buttonElement-button:hover,
.client-darkmode .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-buttonElement-active>.oo-ui-buttonElement-button,
.skin-theme-clientpref-night .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive>.oo-ui-buttonElement-button:hover,
.skin-theme-clientpref-night .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-buttonElement-active>.oo-ui-buttonElement-button {
  background-color: var(--gla-dark-ooui-progressive-hover) !important;
  border-color: var(--gla-dark-ooui-progressive-hover) !important;
  color: #fff !important;
}
 
.client-darkmode .oo-ui-windowManager-modal>.oo-ui-dialog,
.skin-theme-clientpref-night .oo-ui-windowManager-modal>.oo-ui-dialog {
  background-color: var(--gla-dark-ooui-window-overlay) !important;
}
 
.client-darkmode .oo-ui-windowManager-modal>.oo-ui-dialog>.oo-ui-window-frame,
.client-darkmode .oo-ui-processDialog-content .oo-ui-window-head,
.client-darkmode .oo-ui-processDialog-content .oo-ui-window-foot,
.skin-theme-clientpref-night .oo-ui-windowManager-modal>.oo-ui-dialog>.oo-ui-window-frame,
.skin-theme-clientpref-night .oo-ui-processDialog-content .oo-ui-window-head,
.skin-theme-clientpref-night .oo-ui-processDialog-content .oo-ui-window-foot {
  background-color: var(--gla-dark-ooui-interface) !important;
  border-color: var(--gla-dark-ooui-interface-border) !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
.client-darkmode .oo-ui-panelLayout-framed,
.skin-theme-clientpref-night .oo-ui-panelLayout-framed {
  border-color: var(--gla-dark-ooui-interface-border) !important;
}
 
.client-darkmode .oo-ui-radioInputWidget.oo-ui-widget-enabled [type='radio']:checked+span,
.skin-theme-clientpref-night .oo-ui-radioInputWidget.oo-ui-widget-enabled [type='radio']:checked+span {
  border-color: var(--gla-dark-ooui-progressive) !important;
}
 
.client-darkmode .oo-ui-checkboxInputWidget [type='checkbox']:disabled+span,
.client-darkmode .oo-ui-radioInputWidget [type='radio']:disabled+span,
.skin-theme-clientpref-night .oo-ui-checkboxInputWidget [type='checkbox']:disabled+span,
.skin-theme-clientpref-night .oo-ui-radioInputWidget [type='radio']:disabled+span {
  background-color: var(--gla-dark-ooui-disabled) !important;
  border-color: var(--gla-dark-ooui-disabled) !important;
}
 
.client-darkmode .oo-ui-widget-disabled,
.client-darkmode .oo-ui-optionWidget.oo-ui-widget-disabled,
.skin-theme-clientpref-night .oo-ui-widget-disabled,
.skin-theme-clientpref-night .oo-ui-optionWidget.oo-ui-widget-disabled {
  color: var(--gla-dark-ooui-disabled-text) !important;
}
 
.client-darkmode .oo-ui-toolbar-bar,
.skin-theme-clientpref-night .oo-ui-toolbar-bar {
  background-color: var(--gla-dark-ooui-interface) !important;
  color: var(--gla-dark-ooui-text) !important;
  border-color: var(--gla-dark-border) !important;
  box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.35) !important;
}
 
/* ---- FASE 5: VisualEditor + OOUI Toolbar + WikiEditor (edição) ---- */
.client-darkmode .ve-init-mw-desktopArticleTarget,
.client-darkmode .ve-init-target-visual,
.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget,
.skin-theme-clientpref-night .ve-init-target-visual {
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode .ve-ui-targetWidget:not(.oo-ui-pendingElement-pending),
.client-darkmode .ve-ui-targetWidget-readOnly:not(.oo-ui-pendingElement-pending),
.skin-theme-clientpref-night .ve-ui-targetWidget:not(.oo-ui-pendingElement-pending),
.skin-theme-clientpref-night .ve-ui-targetWidget-readOnly:not(.oo-ui-pendingElement-pending) {
  background-color: var(--gla-dark-input-bg) !important;
  border-color: var(--gla-dark-border) !important;
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode .ve-ui-targetWidget-focused,
.skin-theme-clientpref-night .ve-ui-targetWidget-focused {
  border-color: var(--gla-dark-accent) !important;
  box-shadow: inset 0 0 0 1px var(--gla-dark-accent) !important;
}
 
.client-darkmode .ve-ce-surface,
.client-darkmode .ve-ce-documentNode,
.skin-theme-clientpref-night .ve-ce-surface,
.skin-theme-clientpref-night .ve-ce-documentNode {
  background-color: var(--gla-dark-content-bg) !important;
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode .ve-init-mw-desktopArticleTarget-originalContent,
.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget-originalContent {
  background-color: transparent !important;
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode .ve-ce-branchNode-blockSlug,
.client-darkmode .ve-ce-branchNode-newSlug,
.skin-theme-clientpref-night .ve-ce-branchNode-blockSlug,
.skin-theme-clientpref-night .ve-ce-branchNode-newSlug {
  background-color: rgba(47, 51, 57, 0.88) !important;
  outline-color: var(--gla-dark-border) !important;
}
 
.client-darkmode .ve-ce-branchNode-blockSlug .oo-ui-labelElement-label,
.skin-theme-clientpref-night .ve-ce-branchNode-blockSlug .oo-ui-labelElement-label {
  color: var(--gla-dark-ooui-byline) !important;
}
 
.client-darkmode .oo-ui-tool.oo-ui-widget-enabled>.oo-ui-tool-link,
.skin-theme-clientpref-night .oo-ui-tool.oo-ui-widget-enabled>.oo-ui-tool-link {
  color: var(--gla-dark-ooui-text) !important;
}
 
.client-darkmode .oo-ui-tool.oo-ui-widget-enabled>.oo-ui-tool-link:hover,
.skin-theme-clientpref-night .oo-ui-tool.oo-ui-widget-enabled>.oo-ui-tool-link:hover {
  background-color: var(--gla-dark-ooui-normal-hover) !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
.client-darkmode .oo-ui-tool.oo-ui-widget-enabled>.oo-ui-tool-link:active,
.client-darkmode .oo-ui-tool.oo-ui-widget-enabled.oo-ui-tool-active>.oo-ui-tool-link,
.client-darkmode .oo-ui-tool.oo-ui-widget-enabled.oo-ui-popupToolGroup-active>.oo-ui-tool-link,
.skin-theme-clientpref-night .oo-ui-tool.oo-ui-widget-enabled>.oo-ui-tool-link:active,
.skin-theme-clientpref-night .oo-ui-tool.oo-ui-widget-enabled.oo-ui-tool-active>.oo-ui-tool-link,
.skin-theme-clientpref-night .oo-ui-tool.oo-ui-widget-enabled.oo-ui-popupToolGroup-active>.oo-ui-tool-link {
  background-color: var(--gla-dark-table-hover) !important;
  color: var(--gla-dark-link) !important;
}
 
.client-darkmode .oo-ui-popupToolGroup.oo-ui-widget-enabled>.oo-ui-popupToolGroup-handle,
.skin-theme-clientpref-night .oo-ui-popupToolGroup.oo-ui-widget-enabled>.oo-ui-popupToolGroup-handle {
  color: var(--gla-dark-ooui-text) !important;
}
 
.client-darkmode .oo-ui-popupToolGroup.oo-ui-widget-enabled>.oo-ui-popupToolGroup-handle:hover,
.skin-theme-clientpref-night .oo-ui-popupToolGroup.oo-ui-widget-enabled>.oo-ui-popupToolGroup-handle:hover {
  background-color: var(--gla-dark-ooui-normal-hover) !important;
}
 
.client-darkmode .oo-ui-popupToolGroup.oo-ui-popupToolGroup-active>.oo-ui-popupToolGroup-handle,
.client-darkmode .oo-ui-popupToolGroup.oo-ui-widget-enabled>.oo-ui-popupToolGroup-handle:active,
.skin-theme-clientpref-night .oo-ui-popupToolGroup.oo-ui-popupToolGroup-active>.oo-ui-popupToolGroup-handle,
.skin-theme-clientpref-night .oo-ui-popupToolGroup.oo-ui-widget-enabled>.oo-ui-popupToolGroup-handle:active {
  background-color: var(--gla-dark-table-hover) !important;
  color: var(--gla-dark-link) !important;
}
 
.client-darkmode .oo-ui-popupToolGroup-tools,
.skin-theme-clientpref-night .oo-ui-popupToolGroup-tools {
  background-color: var(--gla-dark-ooui-interface) !important;
  border-color: var(--gla-dark-ooui-interface-border) !important;
  color: var(--gla-dark-ooui-text) !important;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.45) !important;
}
 
.client-darkmode .oo-ui-popupToolGroup-tools .oo-ui-tool-link .oo-ui-tool-accel,
.client-darkmode .oo-ui-popupToolGroup-header,
.skin-theme-clientpref-night .oo-ui-popupToolGroup-tools .oo-ui-tool-link .oo-ui-tool-accel,
.skin-theme-clientpref-night .oo-ui-popupToolGroup-header {
  color: var(--gla-dark-ooui-byline) !important;
}
 
.client-darkmode .oo-ui-popupToolGroup-tools .oo-ui-tool-active.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title,
.skin-theme-clientpref-night .oo-ui-popupToolGroup-tools .oo-ui-tool-active.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
  color: var(--gla-dark-link) !important;
}
 
.client-darkmode .oo-ui-tool.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive>.oo-ui-tool-link,
.skin-theme-clientpref-night .oo-ui-tool.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive>.oo-ui-tool-link {
  background-color: var(--gla-dark-ooui-progressive) !important;
  border-color: var(--gla-dark-ooui-progressive) !important;
  color: #fff !important;
}
 
.client-darkmode .oo-ui-tool.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive>.oo-ui-tool-link:hover,
.skin-theme-clientpref-night .oo-ui-tool.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive>.oo-ui-tool-link:hover {
  background-color: var(--gla-dark-ooui-progressive-hover) !important;
}
 
.client-darkmode .oo-ui-tool.oo-ui-widget-disabled>.oo-ui-tool-link,
.client-darkmode .oo-ui-tool.oo-ui-widget-disabled.oo-ui-flaggedElement-primary>.oo-ui-tool-link,
.skin-theme-clientpref-night .oo-ui-tool.oo-ui-widget-disabled>.oo-ui-tool-link,
.skin-theme-clientpref-night .oo-ui-tool.oo-ui-widget-disabled.oo-ui-flaggedElement-primary>.oo-ui-tool-link {
  background-color: var(--gla-dark-ooui-disabled) !important;
  border-color: var(--gla-dark-ooui-disabled) !important;
  color: var(--gla-dark-ooui-disabled-text) !important;
}
 
.client-darkmode .oo-ui-barToolGroup-tools.oo-ui-toolGroup-enabled-tools .oo-ui-tool.oo-ui-widget-disabled>.oo-ui-tool-link .oo-ui-tool-title,
.client-darkmode .oo-ui-barToolGroup-tools.oo-ui-toolGroup-disabled-tools .oo-ui-tool>.oo-ui-tool-link .oo-ui-tool-title,
.skin-theme-clientpref-night .oo-ui-barToolGroup-tools.oo-ui-toolGroup-enabled-tools .oo-ui-tool.oo-ui-widget-disabled>.oo-ui-tool-link .oo-ui-tool-title,
.skin-theme-clientpref-night .oo-ui-barToolGroup-tools.oo-ui-toolGroup-disabled-tools .oo-ui-tool>.oo-ui-tool-link .oo-ui-tool-title {
  color: var(--gla-dark-ooui-disabled-text) !important;
}
 
/* ---- FASE 5b: VisualEditor — refinamentos (toolbar, popups, fundo unificado) ---- */
html.client-darkmode #content.mw-body:has(.ve-init-target-visual),
html.skin-theme-clientpref-night #content.mw-body:has(.ve-init-target-visual),
html.client-darkmode .ve-init-mw-desktopArticleTarget,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget,
html.client-darkmode .ve-init-target-visual,
html.skin-theme-clientpref-night .ve-init-target-visual {
  background-color: var(--gla-dark-content-bg) !important;
}
 
html.client-darkmode .ve-init-mw-desktopArticleTarget .ve-ui-targetWidget:not(.oo-ui-pendingElement-pending),
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .ve-ui-targetWidget:not(.oo-ui-pendingElement-pending),
html.client-darkmode .ve-init-mw-desktopArticleTarget .ve-ce-surface,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .ve-ce-surface,
html.client-darkmode .ve-init-mw-desktopArticleTarget .ve-ce-documentNode,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .ve-ce-documentNode {
  background-color: var(--gla-dark-content-bg) !important;
  border-color: var(--gla-dark-border) !important;
}
 
/* VE aplica opacity:0.5 em .uneditableContent — no dark mode o h1 fica “manchado” */
html.client-darkmode.ve-activated #firstHeading.ve-init-mw-desktopArticleTarget-uneditableContent,
html.skin-theme-clientpref-night.ve-activated #firstHeading.ve-init-mw-desktopArticleTarget-uneditableContent {
  opacity: 1 !important;
  color: var(--gla-dark-heading) !important;
}
 
html.client-darkmode .ve-init-mw-desktopArticleTarget-originalContent,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget-originalContent {
  background-color: transparent !important;
}
 
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-toolbar-position-top>.oo-ui-toolbar-bar,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-toolbar-position-top>.oo-ui-toolbar-bar {
  border-bottom-color: var(--gla-dark-border) !important;
  box-shadow: none !important;
}
 
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-toolbar-popup .oo-ui-toolbar-bar,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-toolbar-popup .oo-ui-toolbar-bar {
  background-color: var(--gla-dark-ooui-interface) !important;
  border-color: var(--gla-dark-border) !important;
  box-shadow: none !important;
}
 
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-menuToolGroup,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-menuToolGroup {
  border-left-color: var(--gla-dark-border) !important;
  border-right-color: var(--gla-dark-border) !important;
}
 
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-toolbar-actions .oo-ui-popupToolGroup.oo-ui-widget-enabled>.oo-ui-popupToolGroup-handle,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-toolbar-actions .oo-ui-popupToolGroup.oo-ui-widget-enabled>.oo-ui-popupToolGroup-handle,
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-toolbar-actions .oo-ui-popupToolGroup.oo-ui-widget-enabled>.oo-ui-popupToolGroup-handle:hover,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-toolbar-actions .oo-ui-popupToolGroup.oo-ui-widget-enabled>.oo-ui-popupToolGroup-handle:hover,
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-toolbar-actions .oo-ui-popupToolGroup.oo-ui-widget-enabled>.oo-ui-popupToolGroup-handle:active,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-toolbar-actions .oo-ui-popupToolGroup.oo-ui-widget-enabled>.oo-ui-popupToolGroup-handle:active,
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-toolbar-actions .oo-ui-popupToolGroup.oo-ui-widget-enabled>.oo-ui-popupToolGroup-handle:focus,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-toolbar-actions .oo-ui-popupToolGroup.oo-ui-widget-enabled>.oo-ui-popupToolGroup-handle:focus {
  border-right-color: var(--gla-dark-border) !important;
  transition: none !important;
}
 
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-popupToolGroup.oo-ui-popupToolGroup-active>.oo-ui-popupToolGroup-handle,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-popupToolGroup.oo-ui-popupToolGroup-active>.oo-ui-popupToolGroup-handle,
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-popupToolGroup.oo-ui-popupToolGroup-active>.oo-ui-popupToolGroup-handle:hover,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-popupToolGroup.oo-ui-popupToolGroup-active>.oo-ui-popupToolGroup-handle:hover {
  background-color: var(--gla-dark-table-hover) !important;
  color: var(--gla-dark-link) !important;
}
 
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-listToolGroup-tools .oo-ui-tool.oo-ui-widget-enabled:hover,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-listToolGroup-tools .oo-ui-tool.oo-ui-widget-enabled:hover,
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-popupToolGroup-tools .oo-ui-tool.oo-ui-widget-enabled:hover,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-popupToolGroup-tools .oo-ui-tool.oo-ui-widget-enabled:hover,
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-menuToolGroup-tools .oo-ui-tool.oo-ui-widget-enabled:hover,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-menuToolGroup-tools .oo-ui-tool.oo-ui-widget-enabled:hover {
  background-color: var(--gla-dark-ooui-normal-hover) !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-listToolGroup-tools .oo-ui-tool-active.oo-ui-widget-enabled,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-listToolGroup-tools .oo-ui-tool-active.oo-ui-widget-enabled,
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-popupToolGroup-tools .oo-ui-tool-active.oo-ui-widget-enabled,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-popupToolGroup-tools .oo-ui-tool-active.oo-ui-widget-enabled,
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-menuToolGroup-tools .oo-ui-tool.oo-ui-tool-active,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-menuToolGroup-tools .oo-ui-tool.oo-ui-tool-active {
  background-color: var(--gla-dark-table-hover) !important;
}
 
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-listToolGroup-tools .oo-ui-tool-active.oo-ui-widget-enabled:hover,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-listToolGroup-tools .oo-ui-tool-active.oo-ui-widget-enabled:hover,
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-popupToolGroup-tools .oo-ui-tool-active.oo-ui-widget-enabled:hover,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-popupToolGroup-tools .oo-ui-tool-active.oo-ui-widget-enabled:hover {
  background-color: var(--gla-dark-table-hover) !important;
}
 
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-popupToolGroup-tools .oo-ui-tool.oo-ui-widget-enabled>.oo-ui-tool-link,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-popupToolGroup-tools .oo-ui-tool.oo-ui-widget-enabled>.oo-ui-tool-link,
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-listToolGroup-tools .oo-ui-tool.oo-ui-widget-enabled>.oo-ui-tool-link,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-listToolGroup-tools .oo-ui-tool.oo-ui-widget-enabled>.oo-ui-tool-link {
  color: var(--gla-dark-ooui-text) !important;
}
 
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-popupToolGroup-tools .oo-ui-tool.oo-ui-widget-enabled>.oo-ui-tool-link:hover,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-popupToolGroup-tools .oo-ui-tool.oo-ui-widget-enabled>.oo-ui-tool-link:hover,
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-listToolGroup-tools .oo-ui-tool.oo-ui-widget-enabled>.oo-ui-tool-link:hover,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-listToolGroup-tools .oo-ui-tool.oo-ui-widget-enabled>.oo-ui-tool-link:hover {
  background-color: transparent !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-tool .oo-ui-tool-title,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-tool .oo-ui-tool-title,
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-popupToolGroup-handle,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-popupToolGroup-handle {
  transition: none !important;
}
 
html.client-darkmode .ve-init-mw-desktopArticleTarget .ve-ui-toolbar-group-save .oo-ui-tool.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive>.oo-ui-tool-link,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .ve-ui-toolbar-group-save .oo-ui-tool.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive>.oo-ui-tool-link,
html.client-darkmode .ve-init-mw-desktopArticleTarget a.oo-ui-tool-link.ve-ui-toolbar-saveButton,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget a.oo-ui-tool-link.ve-ui-toolbar-saveButton {
  background-color: var(--gla-dark-ooui-progressive) !important;
  border-color: var(--gla-dark-ooui-progressive) !important;
  color: #fff !important;
}
 
html.client-darkmode .ve-init-mw-desktopArticleTarget .ve-ui-toolbar-group-save .oo-ui-tool.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive>.oo-ui-tool-link:hover,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .ve-ui-toolbar-group-save .oo-ui-tool.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive>.oo-ui-tool-link:hover,
html.client-darkmode .ve-init-mw-desktopArticleTarget a.oo-ui-tool-link.ve-ui-toolbar-saveButton:hover,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget a.oo-ui-tool-link.ve-ui-toolbar-saveButton:hover {
  background-color: var(--gla-dark-ooui-progressive-hover) !important;
  border-color: var(--gla-dark-ooui-progressive-hover) !important;
  color: #fff !important;
}
 
html.client-darkmode .ve-init-mw-desktopArticleTarget .ve-ui-toolbar-group-save .oo-ui-tool.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive .oo-ui-tool-title,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .ve-ui-toolbar-group-save .oo-ui-tool.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive .oo-ui-tool-title,
html.client-darkmode .ve-init-mw-desktopArticleTarget a.oo-ui-tool-link.ve-ui-toolbar-saveButton .oo-ui-tool-title,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget a.oo-ui-tool-link.ve-ui-toolbar-saveButton .oo-ui-tool-title {
  color: #fff !important;
}
 
/* ---- FASE 5c: VisualEditor — diálogos OOUI (overlay, abas, outline, botões) ---- */
html.client-darkmode .ve-ui-overlay-global .oo-ui-window-frame,
html.skin-theme-clientpref-night .ve-ui-overlay-global .oo-ui-window-frame,
html.client-darkmode .ve-init-mw-desktopArticleTarget .oo-ui-window-frame,
html.skin-theme-clientpref-night .ve-init-mw-desktopArticleTarget .oo-ui-window-frame {
  background-color: var(--gla-dark-content-bg) !important;
  border-color: var(--gla-dark-border) !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
html.client-darkmode .oo-ui-dialog-content,
html.skin-theme-clientpref-night .oo-ui-dialog-content,
html.client-darkmode .oo-ui-dialog-content>.oo-ui-window-body,
html.skin-theme-clientpref-night .oo-ui-dialog-content>.oo-ui-window-body,
html.client-darkmode .oo-ui-processDialog-content .oo-ui-window-body,
html.skin-theme-clientpref-night .oo-ui-processDialog-content .oo-ui-window-body {
  background-color: var(--gla-dark-content-bg) !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
html.client-darkmode .oo-ui-processDialog-content .oo-ui-window-head,
html.skin-theme-clientpref-night .oo-ui-processDialog-content .oo-ui-window-head,
html.client-darkmode .oo-ui-processDialog-content .oo-ui-window-foot,
html.skin-theme-clientpref-night .oo-ui-processDialog-content .oo-ui-window-foot {
  outline-color: var(--gla-dark-border) !important;
}
 
html.client-darkmode .oo-ui-processDialog-title,
html.skin-theme-clientpref-night .oo-ui-processDialog-title {
  color: var(--gla-dark-ooui-text) !important;
}
 
html.client-darkmode .oo-ui-buttonElement-framed.oo-ui-widget-disabled>.oo-ui-buttonElement-button,
html.skin-theme-clientpref-night .oo-ui-buttonElement-framed.oo-ui-widget-disabled>.oo-ui-buttonElement-button {
  background-color: var(--gla-dark-ooui-disabled) !important;
  border-color: var(--gla-dark-ooui-disabled) !important;
  color: #c8cdd3 !important;
}
 
html.client-darkmode .oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive>.oo-ui-buttonElement-button,
html.skin-theme-clientpref-night .oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive>.oo-ui-buttonElement-button {
  background-color: #4a5564 !important;
  border-color: #4a5564 !important;
  color: #b8bdc4 !important;
}
 
html.client-darkmode .oo-ui-tabSelectWidget-framed,
html.skin-theme-clientpref-night .oo-ui-tabSelectWidget-framed {
  background-color: var(--gla-dark-editor-toolbar) !important;
  border-bottom-color: var(--gla-dark-border) !important;
}
 
html.client-darkmode .oo-ui-tabSelectWidget-framed .oo-ui-tabOptionWidget.oo-ui-widget-enabled,
html.skin-theme-clientpref-night .oo-ui-tabSelectWidget-framed .oo-ui-tabOptionWidget.oo-ui-widget-enabled {
  color: var(--gla-dark-ooui-text) !important;
  transition: none !important;
}
 
html.client-darkmode .oo-ui-tabSelectWidget-framed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected,
html.skin-theme-clientpref-night .oo-ui-tabSelectWidget-framed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected {
  background-color: var(--gla-dark-content-bg) !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
html.client-darkmode .oo-ui-tabSelectWidget-framed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected .oo-ui-labelElement-label,
html.skin-theme-clientpref-night .oo-ui-tabSelectWidget-framed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected .oo-ui-labelElement-label {
  border-bottom-color: var(--gla-dark-content-bg) !important;
}
 
html.client-darkmode .oo-ui-tabSelectWidget-framed .oo-ui-tabOptionWidget.oo-ui-widget-enabled:hover,
html.skin-theme-clientpref-night .oo-ui-tabSelectWidget-framed .oo-ui-tabOptionWidget.oo-ui-widget-enabled:hover {
  background-color: var(--gla-dark-ooui-normal-hover) !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
html.client-darkmode .oo-ui-tabSelectWidget-framed .oo-ui-tabOptionWidget.oo-ui-widget-enabled:active,
html.skin-theme-clientpref-night .oo-ui-tabSelectWidget-framed .oo-ui-tabOptionWidget.oo-ui-widget-enabled:active {
  background-color: var(--gla-dark-table-hover) !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
html.client-darkmode .oo-ui-menuLayout>.oo-ui-menuLayout-menu,
html.skin-theme-clientpref-night .oo-ui-menuLayout>.oo-ui-menuLayout-menu,
html.client-darkmode .oo-ui-menuLayout>.oo-ui-menuLayout-content,
html.skin-theme-clientpref-night .oo-ui-menuLayout>.oo-ui-menuLayout-content,
html.client-darkmode .oo-ui-bookletLayout-outlinePanel,
html.skin-theme-clientpref-night .oo-ui-bookletLayout-outlinePanel,
html.client-darkmode .oo-ui-pageLayout,
html.skin-theme-clientpref-night .oo-ui-pageLayout {
  background-color: var(--gla-dark-content-bg) !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
html.client-darkmode .oo-ui-bookletLayout>.oo-ui-menuLayout-menu,
html.skin-theme-clientpref-night .oo-ui-bookletLayout>.oo-ui-menuLayout-menu,
html.client-darkmode .oo-ui-bookletLayout-outlinePanel>.oo-ui-outlineControlsWidget,
html.skin-theme-clientpref-night .oo-ui-bookletLayout-outlinePanel>.oo-ui-outlineControlsWidget {
  border-color: var(--gla-dark-border) !important;
}
 
html.client-darkmode .oo-ui-outlineControlsWidget,
html.skin-theme-clientpref-night .oo-ui-outlineControlsWidget {
  background-color: var(--gla-dark-editor-toolbar) !important;
}
 
html.client-darkmode .oo-ui-outlineOptionWidget.oo-ui-widget-enabled.oo-ui-optionWidget,
html.skin-theme-clientpref-night .oo-ui-outlineOptionWidget.oo-ui-widget-enabled.oo-ui-optionWidget {
  color: var(--gla-dark-ooui-text) !important;
  transition: none !important;
}
 
html.client-darkmode .oo-ui-outlineOptionWidget.oo-ui-optionWidget-highlighted,
html.skin-theme-clientpref-night .oo-ui-outlineOptionWidget.oo-ui-optionWidget-highlighted {
  background-color: var(--gla-dark-ooui-normal-hover) !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
html.client-darkmode .oo-ui-outlineOptionWidget.oo-ui-optionWidget-selected,
html.skin-theme-clientpref-night .oo-ui-outlineOptionWidget.oo-ui-optionWidget-selected,
html.client-darkmode .oo-ui-selectWidget-unpressed .oo-ui-outlineOptionWidget.oo-ui-optionWidget-selected,
html.skin-theme-clientpref-night .oo-ui-selectWidget-unpressed .oo-ui-outlineOptionWidget.oo-ui-optionWidget-selected {
  background-color: var(--gla-dark-table-hover) !important;
  color: var(--gla-dark-link) !important;
}
 
html.client-darkmode .oo-ui-outlineOptionWidget.oo-ui-optionWidget-pressed,
html.skin-theme-clientpref-night .oo-ui-outlineOptionWidget.oo-ui-optionWidget-pressed {
  background-color: var(--gla-dark-table-hover) !important;
  color: var(--gla-dark-link) !important;
}
 
html.client-darkmode .oo-ui-outlineSelectWidget:focus,
html.skin-theme-clientpref-night .oo-ui-outlineSelectWidget:focus {
  box-shadow: inset 0 0 0 2px var(--gla-dark-accent) !important;
}
 
html.client-darkmode .ve-ui-specialCharacterPage h3,
html.skin-theme-clientpref-night .ve-ui-specialCharacterPage h3 {
  color: var(--gla-dark-ooui-byline) !important;
}
 
html.client-darkmode .ve-ui-specialCharacterPage-character,
html.skin-theme-clientpref-night .ve-ui-specialCharacterPage-character {
  border-color: var(--gla-dark-border) !important;
  color: var(--gla-dark-ooui-text) !important;
}
 
html.client-darkmode .ve-ui-specialCharacterPage-character:hover,
html.skin-theme-clientpref-night .ve-ui-specialCharacterPage-character:hover {
  border-color: var(--gla-dark-link) !important;
  background-color: var(--gla-dark-ooui-normal-hover) !important;
}
 
html.client-darkmode .oo-ui-panelLayout-scrollable,
html.skin-theme-clientpref-night .oo-ui-panelLayout-scrollable {
  scrollbar-color: var(--gla-dark-border) var(--gla-dark-content-bg);
  scrollbar-width: thin;
}
 
html.client-darkmode .oo-ui-panelLayout-scrollable::-webkit-scrollbar,
html.skin-theme-clientpref-night .oo-ui-panelLayout-scrollable::-webkit-scrollbar {
  width: 10px;
  background: var(--gla-dark-content-bg);
}
 
html.client-darkmode .oo-ui-panelLayout-scrollable::-webkit-scrollbar-track,
html.skin-theme-clientpref-night .oo-ui-panelLayout-scrollable::-webkit-scrollbar-track {
  background: var(--gla-dark-content-bg);
}
 
html.client-darkmode .oo-ui-panelLayout-scrollable::-webkit-scrollbar-thumb,
html.skin-theme-clientpref-night .oo-ui-panelLayout-scrollable::-webkit-scrollbar-thumb {
  background: var(--gla-dark-border);
  border-radius: 5px;
}
 
html.client-darkmode .oo-ui-fieldsetLayout,
html.skin-theme-clientpref-night .oo-ui-fieldsetLayout,
html.client-darkmode .oo-ui-fieldLayout,
html.skin-theme-clientpref-night .oo-ui-fieldLayout,
html.client-darkmode .oo-ui-labelElement-label,
html.skin-theme-clientpref-night .oo-ui-labelElement-label {
  color: var(--gla-dark-ooui-text) !important;
}
 
html.client-darkmode .oo-ui-formLayout p,
html.skin-theme-clientpref-night .oo-ui-formLayout p {
  color: var(--gla-dark-ooui-text) !important;
}
 
/* Upload booklet (Inserir mídia → Enviar / Configurações de mídia) */
html.client-darkmode .mw-upload-bookletLayout-filePreview,
html.skin-theme-clientpref-night .mw-upload-bookletLayout-filePreview {
  background-color: var(--gla-dark-editor-toolbar) !important;
  color: var(--gla-dark-ooui-text) !important;
  border-bottom: 1px solid var(--gla-dark-border) !important;
}
 
html.client-darkmode .mw-upload-bookletLayout-filePreview p,
html.skin-theme-clientpref-night .mw-upload-bookletLayout-filePreview p {
  color: var(--gla-dark-ooui-text) !important;
}
 
html.client-darkmode .mw-upload-bookletLayout-infoForm.mw-upload-bookletLayout-hasThumbnail .mw-upload-bookletLayout-filePreview p,
html.skin-theme-clientpref-night .mw-upload-bookletLayout-infoForm.mw-upload-bookletLayout-hasThumbnail .mw-upload-bookletLayout-filePreview p {
  color: #fff !important;
  text-shadow: 0 0 6px rgba(0, 0, 0, 0.85), 0 1px 3px rgba(0, 0, 0, 0.9) !important;
}
 
html.client-darkmode .mw-upload-bookletLayout-filePreview .oo-ui-progressBarWidget,
html.skin-theme-clientpref-night .mw-upload-bookletLayout-filePreview .oo-ui-progressBarWidget {
  background-color: var(--gla-dark-input-bg) !important;
}
 
html.client-darkmode .mw-upload-bookletLayout-filePreview .oo-ui-progressBarWidget-bar,
html.skin-theme-clientpref-night .mw-upload-bookletLayout-filePreview .oo-ui-progressBarWidget-bar {
  background-color: var(--gla-dark-ooui-progressive) !important;
}
 
html.client-darkmode .mw-upload-bookletLayout-infoForm,
html.skin-theme-clientpref-night .mw-upload-bookletLayout-infoForm {
  background-color: var(--gla-dark-content-bg) !important;
}
 
/* WikiEditor — abas, painéis e msUpload */
.client-darkmode .wikiEditor-ui-toolbar .tabs,
.client-darkmode .wikiEditor-ui-toolbar .sections .section,
.client-darkmode .wikiEditor-ui-toolbar .section-main,
.client-darkmode .wikiEditor-ui-toolbar .booklet>.pages,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .tabs,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .sections .section,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .section-main,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .booklet>.pages {
  background-color: var(--gla-dark-editor-toolbar) !important;
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode .wikiEditor-ui-toolbar .tabs span.tab a,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .tabs span.tab a {
  background-color: var(--gla-dark-editor-toolbar-alt) !important;
  border-color: var(--gla-dark-border) !important;
}
 
.client-darkmode .wikiEditor-ui-toolbar .tabs span.tab a:hover,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .tabs span.tab a:hover {
  background-color: var(--gla-dark-table-hover) !important;
}
 
.client-darkmode .wikiEditor-ui-toolbar .booklet>.index>.current,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .booklet>.index>.current {
  background-color: var(--gla-dark-table-hover) !important;
  color: var(--gla-dark-link) !important;
}
 
html.client-darkmode .wikiEditor-ui-toolbar .page,
html.client-darkmode .wikiEditor-ui-toolbar .page-characters,
html.client-darkmode .wikiEditor-ui-toolbar .page-characters div,
html.client-darkmode .wikiEditor-ui-toolbar .page-table,
html.skin-theme-clientpref-night .wikiEditor-ui-toolbar .page,
html.skin-theme-clientpref-night .wikiEditor-ui-toolbar .page-characters,
html.skin-theme-clientpref-night .wikiEditor-ui-toolbar .page-characters div,
html.skin-theme-clientpref-night .wikiEditor-ui-toolbar .page-table {
  background-color: var(--gla-dark-input-bg) !important;
  color: var(--gla-dark-text) !important;
}
 
/* WikiEditor: painel "Caracteres especiais" (.page-characters — classe real do MW) */
html.client-darkmode .wikiEditor-ui-toolbar .page-characters div span,
html.skin-theme-clientpref-night .wikiEditor-ui-toolbar .page-characters div span {
  color: var(--gla-dark-text) !important;
  background-color: var(--gla-dark-content-panel) !important;
  border-color: var(--gla-dark-border) !important;
}
 
html.client-darkmode .wikiEditor-ui-toolbar .page-characters div span:hover,
html.skin-theme-clientpref-night .wikiEditor-ui-toolbar .page-characters div span:hover {
  background-color: var(--gla-dark-table-hover) !important;
  border-color: var(--gla-dark-accent) !important;
  color: var(--gla-dark-heading) !important;
}
 
html.client-darkmode .wikiEditor-ui-toolbar .page-characters div .wikiEditor-character-highlighted,
html.client-darkmode .wikiEditor-ui-toolbar .booklet>.index .wikiEditor-character-highlighted,
html.skin-theme-clientpref-night .wikiEditor-ui-toolbar .page-characters div .wikiEditor-character-highlighted,
html.skin-theme-clientpref-night .wikiEditor-ui-toolbar .booklet>.index .wikiEditor-character-highlighted {
  background-color: var(--gla-dark-accent) !important;
  color: var(--gla-dark-bg) !important;
  border-color: var(--gla-dark-accent) !important;
}
 
/* WikiEditor: diálogos jQuery UI (link, imagem, tabela, referência…) — html.* vence jQuery UI */
html.client-darkmode .ui-widget-overlay,
html.skin-theme-clientpref-night .ui-widget-overlay {
  background: rgba(0, 0, 0, 0.72) !important;
  background-image: none !important;
  opacity: 1 !important;
}
 
html.client-darkmode .ui-dialog.wikiEditor-toolbar-dialog,
html.client-darkmode .ui-dialog.wikiEditor-toolbar-dialog.ui-widget-content,
html.skin-theme-clientpref-night .ui-dialog.wikiEditor-toolbar-dialog,
html.skin-theme-clientpref-night .ui-dialog.wikiEditor-toolbar-dialog.ui-widget-content {
  background-color: var(--gla-dark-content-panel) !important;
  background-image: none !important;
  border-color: var(--gla-dark-border) !important;
  color: var(--gla-dark-text) !important;
}
 
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-titlebar,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-widget-header,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-titlebar,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-widget-header {
  background: var(--gla-dark-editor-toolbar) !important;
  background-image: none !important;
  color: var(--gla-dark-heading) !important;
  border-color: var(--gla-dark-border) !important;
}
 
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-title,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-widget-header a,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-titlebar-close,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-title,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-widget-header a,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-titlebar-close {
  color: var(--gla-dark-heading) !important;
  background: transparent !important;
  background-image: none !important;
  border-color: var(--gla-dark-border) !important;
}
 
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content.ui-widget-content,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-widget-content,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content.ui-widget-content,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-widget-content {
  background-color: var(--gla-dark-content-panel) !important;
  background-image: none !important;
  color: var(--gla-dark-text) !important;
  border-color: var(--gla-dark-border) !important;
}
 
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content label,
html.client-darkmode .wikiEditor-toolbar-dialog .wikieditor-toolbar-field-wrapper,
html.client-darkmode .wikiEditor-toolbar-dialog .wikieditor-toolbar-floated-field-wrapper,
html.client-darkmode .wikiEditor-toolbar-dialog fieldset,
html.client-darkmode .wikiEditor-toolbar-dialog .wikiEditor-template-dialog-fields label,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content label,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .wikieditor-toolbar-field-wrapper,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .wikieditor-toolbar-floated-field-wrapper,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog fieldset,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .wikiEditor-template-dialog-fields label {
  color: var(--gla-dark-text) !important;
  border-color: var(--gla-dark-border) !important;
}
 
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content a,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content a {
  color: var(--gla-dark-link) !important;
}
 
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content input[type='text'],
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content input[type='number'],
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content textarea,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content select,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content input[type='text'],
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content input[type='number'],
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content textarea,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content select {
  background-color: var(--gla-dark-input-bg) !important;
  color: var(--gla-dark-text) !important;
  border-color: var(--gla-dark-border) !important;
  outline: none !important;
  box-shadow: none !important;
}
 
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content input[type='text']:focus,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content input[type='text']:focus-visible,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content input[type='number']:focus,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content input[type='number']:focus-visible,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content textarea:focus,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content textarea:focus-visible,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content select:focus,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content select:focus-visible,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content input[type='text']:focus,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content input[type='text']:focus-visible,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content input[type='number']:focus,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content input[type='number']:focus-visible,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content textarea:focus,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content textarea:focus-visible,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content select:focus,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content select:focus-visible {
  outline: none !important;
  border-color: var(--gla-dark-accent) !important;
  box-shadow: inset 0 0 0 1px var(--gla-dark-accent) !important;
}
 
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content input::placeholder,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-content textarea::placeholder,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content input::placeholder,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-content textarea::placeholder {
  color: var(--gla-dark-ooui-byline) !important;
  opacity: 1 !important;
}
 
html.client-darkmode .wikiEditor-toolbar-dialog input[type='radio'],
html.client-darkmode .wikiEditor-toolbar-dialog input[type='checkbox'],
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog input[type='radio'],
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog input[type='checkbox'] {
  accent-color: var(--gla-dark-accent);
}
 
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-buttonpane,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-buttonpane.ui-widget-content,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-buttonpane,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-buttonpane.ui-widget-content {
  background-color: var(--gla-dark-editor-toolbar) !important;
  background-image: none !important;
  border-color: var(--gla-dark-border) !important;
}
 
html.client-darkmode .wikiEditor-toolbar-dialog .ui-button,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-state-default,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-button,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-state-default,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button {
  background-color: var(--gla-dark-ooui-input) !important;
  background-image: none !important;
  color: var(--gla-dark-text) !important;
  border-color: var(--gla-dark-border) !important;
}
 
html.client-darkmode .wikiEditor-toolbar-dialog .ui-button:hover,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-button:focus,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-state-hover,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-state-focus,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button:hover,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button:focus,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-button:hover,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-button:focus,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-state-hover,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-state-focus,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button:hover,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button:focus {
  background-color: var(--gla-dark-table-hover) !important;
  background-image: none !important;
  color: var(--gla-dark-heading) !important;
  border-color: var(--gla-dark-accent) !important;
}
 
html.client-darkmode .wikiEditor-toolbar-dialog .ui-button.ui-priority-primary,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-state-default.ui-priority-primary,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-button.ui-priority-primary,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-state-default.ui-priority-primary {
  background-color: var(--gla-dark-ooui-progressive) !important;
  border-color: var(--gla-dark-ooui-progressive) !important;
  color: #fff !important;
}
 
html.client-darkmode .wikiEditor-toolbar-dialog .ui-icon,
html.client-darkmode .wikiEditor-toolbar-dialog .ui-dialog-titlebar-close .ui-icon,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-icon,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .ui-dialog-titlebar-close .ui-icon {
  filter: invert(1) brightness(1.12) !important;
}
 
html.client-darkmode .wikiEditor-toolbar-dialog .wikieditor-toolbar-table-preview-wrapper,
html.client-darkmode .wikiEditor-toolbar-dialog .wikieditor-toolbar-table-preview-frame,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .wikieditor-toolbar-table-preview-wrapper,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .wikieditor-toolbar-table-preview-frame {
  background-color: var(--gla-dark-input-bg) !important;
  color: var(--gla-dark-text) !important;
  border-color: var(--gla-dark-border) !important;
}
 
html.client-darkmode .wikiEditor-toolbar-dialog .wikiEditor-template-dialog-fields .wikiEditor-template-dialog-field-wrapper,
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog .wikiEditor-template-dialog-fields .wikiEditor-template-dialog-field-wrapper {
  border-color: var(--gla-dark-border) !important;
}
 
/* Inserir link — status da página + ícones PNG */
html.client-darkmode .wikiEditor-toolbar-dialog [id^='wikieditor-toolbar-link-int-target-status'],
html.skin-theme-clientpref-night .wikiEditor-toolbar-dialog [id^='wikieditor-toolbar-link-int-target-status'] {
  color: var(--gla-dark-text) !important;
}
 
html.client-darkmode #wikieditor-toolbar-link-int-target-status-exists,
html.client-darkmode #wikieditor-toolbar-link-int-target-status-notexists,
html.client-darkmode #wikieditor-toolbar-link-int-target-status-invalid,
html.client-darkmode #wikieditor-toolbar-link-int-target-status-external,
html.client-darkmode #wikieditor-toolbar-link-int-target-status-disambig,
html.skin-theme-clientpref-night #wikieditor-toolbar-link-int-target-status-exists,
html.skin-theme-clientpref-night #wikieditor-toolbar-link-int-target-status-notexists,
html.skin-theme-clientpref-night #wikieditor-toolbar-link-int-target-status-invalid,
html.skin-theme-clientpref-night #wikieditor-toolbar-link-int-target-status-external,
html.skin-theme-clientpref-night #wikieditor-toolbar-link-int-target-status-disambig {
  color: var(--gla-dark-text) !important;
  filter: invert(1) brightness(1.12);
}
 
htmlhtml.client-darkmode div.suggestions,
html.skin-theme-clientpref-night div.suggestions {
  background-color: var(--gla-dark-ooui-interface) !important;
  border-color: var(--gla-dark-border) !important;
  color: var(--gla-dark-text) !important;
}
 
html.client-darkmode div.suggestions div,
html.skin-theme-clientpref-night div.suggestions div {
  color: var(--gla-dark-text) !important;
}
 
html.client-darkmode div.suggestions .highlight,
html.skin-theme-clientpref-night div.suggestions .highlight {
  background-color: var(--gla-dark-table-hover) !important;
  color: var(--gla-dark-heading) !important;
}
 
.client-darkmode .wikiEditor-ui-toolbar .group .tool-select .menu .options,
.skin-theme-clientpref-night .wikiEditor-ui-toolbar .group .tool-select .menu .options {
  background-color: var(--gla-dark-ooui-interface) !important;
  border-color: var(--gla-dark-border) !important;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.45) !important;
}
 
.client-darkmode #msupload-div,
.client-darkmode #msupload-dropzone,
.skin-theme-clientpref-night #msupload-div,
.skin-theme-clientpref-night #msupload-dropzone {
  background-color: var(--gla-dark-editor-toolbar-alt) !important;
  border-color: var(--gla-dark-border) !important;
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode #msupload-dropzone,
.skin-theme-clientpref-night #msupload-dropzone {
  border: 1px dashed var(--gla-dark-border) !important;
}
 
.client-darkmode #msupload-div a,
.client-darkmode #msupload-bottom a,
.skin-theme-clientpref-night #msupload-div a,
.skin-theme-clientpref-night #msupload-bottom a {
  color: var(--gla-dark-link) !important;
}
 
.client-darkmode #msupload-bottom,
.client-darkmode .msupload-check-span,
.client-darkmode #msupload-list .file .file-size,
.skin-theme-clientpref-night #msupload-bottom,
.skin-theme-clientpref-night .msupload-check-span,
.skin-theme-clientpref-night #msupload-list .file .file-size {
  color: var(--gla-dark-text) !important;
}
 
.client-darkmode #msupload-select,
.client-darkmode #msupload-bottom #msupload-files,
.client-darkmode #msupload-list .file .file-type,
.client-darkmode #msupload-list .file .file-cancel,
.skin-theme-clientpref-night #msupload-select,
.skin-theme-clientpref-night #msupload-bottom #msupload-files,
.skin-theme-clientpref-night #msupload-list .file .file-type,
.skin-theme-clientpref-night #msupload-list .file .file-cancel {
  filter: invert(1) brightness(1.12) !important;
}


.client-darkmode #msupload-list .file,
<script>
.skin-theme-clientpref-night #msupload-list .file {
  (function () {
  background-color: var(--gla-dark-content-panel) !important;
    function boot() {
  border-color: var(--gla-dark-border) !important;
      var root = document.querySelector(".gla-tierlist-root");
  color: var(--gla-dark-text) !important;
      if (!root || root.__glaTierListInit) return;
}
      root.__glaTierListInit = true;


/* ---- 4h: Echo notifications (popup fora de #content) ---- */
      var STORAGE_KEY = "gla-tierlist";
.client-darkmode .mw-echo-ui-notificationItemWidget,
      var STORAGE_NAME_KEY = "gla-tierlist-name";
.skin-theme-clientpref-night .mw-echo-ui-notificationItemWidget {
      var ONLINE_WIKI = "https://wiki.gla.com.br";
  background-color: var(--gla-dark-ooui-normal) !important;
      var lang = "pt";
  border-color: var(--gla-dark-ooui-interface-border) !important;
      var t = null;
  color: var(--gla-dark-ooui-text) !important;
}


.client-darkmode .mw-echo-ui-notificationItemWidget-unread,
      var RANKS = ["S", "A", "B", "C", "D"];
.skin-theme-clientpref-night .mw-echo-ui-notificationItemWidget-unread {
  background-color: var(--gla-dark-content-bg) !important;
}


.client-darkmode .mw-echo-ui-notificationItemWidget:hover,
      var GAME_TIERS = [
.skin-theme-clientpref-night .mw-echo-ui-notificationItemWidget:hover {
        { id: "all", labelKey: "tierAll" },
  background-color: var(--gla-dark-ooui-normal-hover) !important;
        { id: "diamond", labelKey: "tierDiamond" },
}
        { id: "gold", labelKey: "tierGold" },
        { id: "silver", labelKey: "tierSilver" },
        { id: "bronze", labelKey: "tierBronze" },
      ];


.client-darkmode .mw-echo-ui-notificationsInboxWidget-toolbarWrapper,
      var RARITY_ORDER = { diamond: 0, gold: 1, silver: 2, bronze: 3 };
.skin-theme-clientpref-night .mw-echo-ui-notificationsInboxWidget-toolbarWrapper {
  background: var(--gla-dark-content-bg) !important;
}


.client-darkmode span.fileinput-button,
      /* IDs de filters no Módulo:TierList (legenda no topo do .lua). */
.skin-theme-clientpref-night span.fileinput-button {
      var CLASS_FILTERS = [
  background-color: var(--gla-dark-ooui-normal) !important;
        { id: "tank", icon: "tank.png" },
  border-color: var(--gla-dark-ooui-interface-border) !important;
        { id: "dps", icon: "dps.png" },
  color: var(--gla-dark-ooui-text) !important;
        { id: "support", icon: "support.png" },
}
        { id: "fighter", icon: "fighter.png" },
        { id: "shooter", icon: "shooter.png" },
        { id: "slasher", icon: "slasher.png" },
        { id: "especialist", icon: "especialist.png" },
      ];


.client-darkmode ul.fileupload-results li.ful-success,
      var CLASS_LABELS = {
.skin-theme-clientpref-night ul.fileupload-results li.ful-success {
        pt: {
  background-color: var(--gla-dark-success-bg) !important;
          tank: "Tanque",
}
          dps: "DPS",
          support: "Suporte",
          fighter: "Lutador",
          shooter: "Atirador",
          slasher: "Cortante",
          especialist: "Especialista",
        },
        en: {
          tank: "Tank",
          dps: "DPS",
          support: "Support",
          fighter: "Fighter",
          shooter: "Shooter",
          slasher: "Slasher",
          especialist: "Specialist",
        },
      };


.client-darkmode ul.fileupload-results li.ful-error,
      var STRINGS = {
.skin-theme-clientpref-night ul.fileupload-results li.ful-error {
        pt: {
  background-color: var(--gla-dark-error-bg) !important;
          title: "Tier List",
}
          reset: "Limpar tier list",
          download: "Baixar imagem",
          downloadBusy: "Gerando…",
          downloadError: "Não foi possível gerar a imagem. Tente de novo.",
          listNamePlaceholder: "Nome da sua tier list...",
          ranked0: "0 ranqueados",
          ranked1: "1 ranqueado",
          rankedN: "{n} ranqueados",
          searchPlaceholder: "Filtrar personagem...",
          filtersAria: "Filtros",
          classFiltersAria: "Filtros de classe",
          poolTitle: "Não ranqueados",
          empty: "Nenhum personagem encontrado.",
          resetFilters: "Limpar filtros",
          tierAll: "Todos",
          tierDiamond: "Diamante",
          tierGold: "Ouro",
          tierSilver: "Prata",
          tierBronze: "Bronze",
          poolCount: "{n}",
        },
        en: {
          title: "Tier List",
          reset: "Clear tier list",
          download: "Download image",
          downloadBusy: "Generating…",
          downloadError: "Could not generate the image. Please try again.",
          listNamePlaceholder: "Name your tier list...",
          ranked0: "0 ranked",
          ranked1: "1 ranked",
          rankedN: "{n} ranked",
          searchPlaceholder: "Filter character...",
          filtersAria: "Filters",
          classFiltersAria: "Class filters",
          poolTitle: "Unranked",
          empty: "No characters found.",
          resetFilters: "Clear filters",
          tierAll: "All",
          tierDiamond: "Diamond",
          tierGold: "Gold",
          tierSilver: "Silver",
          tierBronze: "Bronze",
          poolCount: "{n}",
        },
      };


/* =============================================================================
      function getWidgetLang() {
  GLA pages legacy (provisório)
        if (
  ============================================================================= */
          window.glaLang &&
          typeof window.glaLang.getWidgetLang === "function"
        ) {
          return window.glaLang.getWidgetLang() === "en" ? "en" : "pt";
        }
        var attr = (
          document.documentElement.getAttribute("data-gla-lang") || ""
        ).toLowerCase();
        if (attr === "en") return "en";
        try {
          var saved = (localStorage.getItem("glaLang") || "").toLowerCase();
          if (saved.indexOf("en") === 0) return "en";
        } catch (e) {}
        return "pt";
      }


/* =============================================================================
      var boardEl = root.querySelector("[data-board]");
  GLA pages legacy (provisório) — personagens, filtros, skills, wanted, abas
      var poolEl = root.querySelector("[data-pool]");
  Extraído de antigo_common.css
      var filtersEl = root.querySelector("[data-filters]");
  ============================================================================= */
      var classFiltersEl = root.querySelector("[data-class-filters]");
      var classBarEl = root.querySelector(".gla-tierlist-classbar");
      var emptyEl = root.querySelector(".gla-tierlist-empty");
      var countEl = root.querySelector("[data-count]");
      var poolCountEl = root.querySelector("[data-pool-count]");
      var searchInput = root.querySelector(".gla-tierlist-search");
      var resetBtn = root.querySelector("[data-reset]");
      var downloadBtn = root.querySelector("[data-download]");
      var listNameInput = root.querySelector("[data-list-name]");
      var resetFiltersBtn = root.querySelector("[data-reset-filters]");
      var characters = [];
      var placement = {};
      var tierOrder = { S: [], A: [], B: [], C: [], D: [] };
      var charNodes = {};
      var rowSlots = {};
      var activeGameTier = "all";
      var activeClassFilters = [];
      var searchTerm = "";
      var searchTimeout = null;
      var selectedId = null;
      var dragId = null;


:root {
      var imgObserver = null;
  --lightGray: rgba(240, 240, 240);
      if ("IntersectionObserver" in window) {
  --gray: rgb(190, 190, 190);
        imgObserver = new IntersectionObserver(
  --transparent-blue: #338be58c;
          function (entries) {
  --blue: #338be5;
            entries.forEach(function (entry) {
}
              if (!entry.isIntersecting) return;
              var img = entry.target;
              var src = img.getAttribute("data-src");
              if (src) {
                img.src = src;
                img.removeAttribute("data-src");
              }
              imgObserver.unobserve(img);
            });
          },
          { rootMargin: "200px 0px", threshold: 0.01 },
        );
      }


      function normalize(s) {
        return (s || "")
          .toLowerCase()
          .normalize("NFD")
          .replace(/[\u0300-\u036f]/g, "");
      }


margin-top: 1.5em;
      function readCharacterList() {
}
        var source = document.querySelector(".gla-tierlist-source");
        if (!source) return [];
        var dataEl = source.querySelector(".gla-tierlist-data");
        var raw = dataEl
          ? dataEl.value || dataEl.textContent || ""
          : source.textContent;
        raw = (raw || "").trim();
        if (!raw) return [];
        try {
          return JSON.parse(raw);
        } catch (e1) {
          var start = raw.indexOf("[");
          var end = raw.lastIndexOf("]");
          if (start === -1 || end === -1) return [];
          try {
            return JSON.parse(raw.slice(start, end + 1));
          } catch (e2) {
            console.error("[TierList] JSON invalido", e2);
            return [];
          }
        }
      }


.mt-4 {
      function cleanFileName(fileName) {
  margin-top: 3em;
        var clean = String(fileName || "").replace(/^Arquivo:|^File:/i, "");
}
        try {
          clean = decodeURIComponent(clean);
        } catch (e) {}
        return clean.replace(/ /g, "_");
      }


.mt--4 {
      /* Path direto /images/a/ab/File.png (MD5 do nome) — evita thumb.php (quebrado) e redirect do FilePath. */
  margin-top: -2em;
      function md5hex(string) {
}
        function add(x, y) {
          var l = (x & 0xffff) + (y & 0xffff);
          var m = (x >> 16) + (y >> 16) + (l >> 16);
          return (m << 16) | (l & 0xffff);
        }
        function rol(n, c) {
          return (n << c) | (n >>> (32 - c));
        }
        function cmn(q, a, b, x, s, t) {
          return add(rol(add(add(a, q), add(x, t)), s), b);
        }
        function ff(a, b, c, d, x, s, t) {
          return cmn((b & c) | (~b & d), a, b, x, s, t);
        }
        function gg(a, b, c, d, x, s, t) {
          return cmn((b & d) | (c & ~d), a, b, x, s, t);
        }
        function hh(a, b, c, d, x, s, t) {
          return cmn(b ^ c ^ d, a, b, x, s, t);
        }
        function ii(a, b, c, d, x, s, t) {
          return cmn(c ^ (b | ~d), a, b, x, s, t);
        }
        var raw = unescape(encodeURIComponent(string));
        var x = [],
          i;
        for (i = 0; i < raw.length * 8; i += 8)
          x[i >> 5] |= (raw.charCodeAt(i / 8) & 255) << (i % 32);
        x[(raw.length * 8) >> 5] |= 128 << ((raw.length * 8) % 32);
        x[(((raw.length + 64) >>> 9) << 4) + 14] = raw.length * 8;
        var a = 1732584193,
          b = -271733879,
          c = -1732584194,
          d = 271733878;
        for (i = 0; i < x.length; i += 16) {
          var oa = a,
            ob = b,
            oc = c,
            od = d;
          a = ff(a, b, c, d, x[i], 7, -680876936);
          d = ff(d, a, b, c, x[i + 1], 12, -389564586);
          c = ff(c, d, a, b, x[i + 2], 17, 606105819);
          b = ff(b, c, d, a, x[i + 3], 22, -1044525330);
          a = ff(a, b, c, d, x[i + 4], 7, -176418897);
          d = ff(d, a, b, c, x[i + 5], 12, 1200080426);
          c = ff(c, d, a, b, x[i + 6], 17, -1473231341);
          b = ff(b, c, d, a, x[i + 7], 22, -45705983);
          a = ff(a, b, c, d, x[i + 8], 7, 1770035416);
          d = ff(d, a, b, c, x[i + 9], 12, -1958414417);
          c = ff(c, d, a, b, x[i + 10], 17, -42063);
          b = ff(b, c, d, a, x[i + 11], 22, -1990404162);
          a = ff(a, b, c, d, x[i + 12], 7, 1804603682);
          d = ff(d, a, b, c, x[i + 13], 12, -40341101);
          c = ff(c, d, a, b, x[i + 14], 17, -1502002290);
          b = ff(b, c, d, a, x[i + 15], 22, 1236535329);
          a = gg(a, b, c, d, x[i + 1], 5, -165796510);
          d = gg(d, a, b, c, x[i + 6], 9, -1069501632);
          c = gg(c, d, a, b, x[i + 11], 14, 643717713);
          b = gg(b, c, d, a, x[i], 20, -373897302);
          a = gg(a, b, c, d, x[i + 5], 5, -701558691);
          d = gg(d, a, b, c, x[i + 10], 9, 38016083);
          c = gg(c, d, a, b, x[i + 15], 14, -660478335);
          b = gg(b, c, d, a, x[i + 4], 20, -405537848);
          a = gg(a, b, c, d, x[i + 9], 5, 568446438);
          d = gg(d, a, b, c, x[i + 14], 9, -1019803690);
          c = gg(c, d, a, b, x[i + 3], 14, -187363961);
          b = gg(b, c, d, a, x[i + 8], 20, 1163531501);
          a = gg(a, b, c, d, x[i + 13], 5, -1444681467);
          d = gg(d, a, b, c, x[i + 2], 9, -51403784);
          c = gg(c, d, a, b, x[i + 7], 14, 1735328473);
          b = gg(b, c, d, a, x[i + 12], 20, -1926607734);
          a = hh(a, b, c, d, x[i + 5], 4, -378558);
          d = hh(d, a, b, c, x[i + 8], 11, -2022574463);
          c = hh(c, d, a, b, x[i + 11], 16, 1839030562);
          b = hh(b, c, d, a, x[i + 14], 23, -35309556);
          a = hh(a, b, c, d, x[i + 1], 4, -1530992060);
          d = hh(d, a, b, c, x[i + 4], 11, 1272893353);
          c = hh(c, d, a, b, x[i + 7], 16, -155497632);
          b = hh(b, c, d, a, x[i + 10], 23, -1094730640);
          a = hh(a, b, c, d, x[i + 13], 4, 681279174);
          d = hh(d, a, b, c, x[i], 11, -358537222);
          c = hh(c, d, a, b, x[i + 3], 16, -722521979);
          b = hh(b, c, d, a, x[i + 6], 23, 76029189);
          a = hh(a, b, c, d, x[i + 9], 4, -640364487);
          d = hh(d, a, b, c, x[i + 12], 11, -421815835);
          c = hh(c, d, a, b, x[i + 15], 16, 530742520);
          b = hh(b, c, d, a, x[i + 2], 23, -995338651);
          a = ii(a, b, c, d, x[i], 6, -198630844);
          d = ii(d, a, b, c, x[i + 7], 10, 1126891415);
          c = ii(c, d, a, b, x[i + 14], 15, -1416354905);
          b = ii(b, c, d, a, x[i + 5], 21, -57434055);
          a = ii(a, b, c, d, x[i + 12], 6, 1700485571);
          d = ii(d, a, b, c, x[i + 3], 10, -1894986606);
          c = ii(c, d, a, b, x[i + 10], 15, -1051523);
          b = ii(b, c, d, a, x[i + 1], 21, -2054922799);
          a = ii(a, b, c, d, x[i + 8], 6, 1873313359);
          d = ii(d, a, b, c, x[i + 15], 10, -30611744);
          c = ii(c, d, a, b, x[i + 6], 15, -1560198380);
          b = ii(b, c, d, a, x[i + 13], 21, 1309151649);
          a = ii(a, b, c, d, x[i + 4], 6, -145523070);
          d = ii(d, a, b, c, x[i + 11], 10, -1120210379);
          c = ii(c, d, a, b, x[i + 2], 15, 718787259);
          b = ii(b, c, d, a, x[i + 9], 21, -343485551);
          a = add(a, oa);
          b = add(b, ob);
          c = add(c, oc);
          d = add(d, od);
        }
        function hex(n) {
          var s = "",
            j,
            hexTab = "0123456789abcdef";
          for (j = 0; j < 4; j++)
            s +=
              hexTab.charAt((n >> (j * 8 + 4)) & 15) +
              hexTab.charAt((n >> (j * 8)) & 15);
          return s;
        }
        return hex(a) + hex(b) + hex(c) + hex(d);
      }


.mb-2 {
      function medalDirectURL(fileName) {
  margin-bottom: 1em;
        var clean = cleanFileName(fileName);
}
        if (!clean) return "";
        var h = md5hex(clean);
        return (
          ONLINE_WIKI +
          "/images/" +
          h.charAt(0) +
          "/" +
          h.slice(0, 2) +
          "/" +
          encodeURIComponent(clean)
        );
      }


      function medalFilePathURL(fileName) {
        var clean = cleanFileName(fileName);
        if (!clean) return "";
        return (
          ONLINE_WIKI +
          "/index.php?title=Especial:FilePath/" +
          encodeURIComponent(clean)
        );
      }


.d-flex,
      function bindCharImage(img, ch) {
.td-flex td {
        if (!img) return;
  display: flex;
        var medal = (ch.medal || "").trim();
}
        if (!medal) return;
        var direct = medalDirectURL(medal);
        var fallback = medalFilePathURL(medal);
        img.decoding = "async";
        img.alt = ch.name || "";
        img.onerror = function () {
          if (img.dataset.fb === "1") return;
          img.dataset.fb = "1";
          img.src = fallback;
        };
        if (imgObserver) {
          img.loading = "lazy";
          img.setAttribute("data-src", direct);
          imgObserver.observe(img);
        } else {
          img.loading = "lazy";
          img.src = direct;
        }
      }


.d-block {
      function sameOriginImageUrl(src) {
  display: block;
        if (!src) return "";
}
        try {
          var u = new URL(src, location.href);
          if (u.origin === location.origin) return u.pathname + u.search;
        } catch (e) {}
        return src;
      }


.relative {
      function loadImageForExport(src) {
  position: relative;
        return new Promise(function (resolve) {
}
          if (!src) {
            resolve(null);
            return;
          }
          var url = sameOriginImageUrl(src);
          var img = new Image();
          img.onload = function () {
            resolve(img);
          };
          img.onerror = function () {
            if (url !== src) {
              var img2 = new Image();
              img2.onload = function () {
                resolve(img2);
              };
              img2.onerror = function () {
                resolve(null);
              };
              img2.src = src;
              return;
            }
            resolve(null);
          };
          img.src = url;
        });
      }


.text-justify {
      function ensureRankedImagesReady() {
  text-align: justify;
        var tasks = [];
}
        RANKS.forEach(function (rank) {
          var slots = rowSlots[rank];
          if (!slots) return;
          Array.prototype.forEach.call(
            slots.querySelectorAll(".gla-tierlist-char img"),
            function (img) {
              var src =
                img.getAttribute("src") || img.getAttribute("data-src") || "";
              if (!src) return;
              if (img.getAttribute("data-src")) {
                img.src = src;
                img.removeAttribute("data-src");
                if (imgObserver) {
                  try {
                    imgObserver.unobserve(img);
                  } catch (e) {}
                }
              }
              if (img.complete && img.naturalWidth > 0) return;
              tasks.push(
                new Promise(function (resolve) {
                  var done = function () {
                    resolve();
                  };
                  img.addEventListener("load", done, { once: true });
                  img.addEventListener("error", done, { once: true });
                }),
              );
            },
          );
        });
        return Promise.all(tasks);
      }


.align-center {
      function gatherExportRows() {
  align-items: center;
        return RANKS.map(function (rank) {
}
          var slots = rowSlots[rank];
          var chars = [];
          if (slots) {
            Array.prototype.forEach.call(
              slots.querySelectorAll(".gla-tierlist-char"),
              function (btn) {
                if (btn.classList.contains("is-hidden")) return;
                var ch = btn.__ch || {};
                var img = btn.querySelector("img");
                var src =
                  (img &&
                    (img.currentSrc ||
                      img.src ||
                      img.getAttribute("data-src"))) ||
                  "";
                chars.push({
                  name: ch.shortName || ch.name || btn.dataset.id || "",
                  src: src,
                  domImg:
                    img && img.complete && img.naturalWidth > 0 ? img : null,
                });
              },
            );
          }
          return { rank: rank, chars: chars };
        });
      }


.align-top {
      function getListTitle() {
  align-items: flex-start;
        var custom = listNameInput
}
          ? String(listNameInput.value || "").trim()
          : "";
        if (custom) return custom;
        return t && t.title ? t.title : "Tier List";
      }


.justify-between {
      function sanitizeDownloadName(name) {
  justify-content: space-between;
        var s = String(name || "gla-tier-list")
}
          .normalize("NFD")
          .replace(/[\u0300-\u036f]/g, "")
          .replace(/[<>:"/\\|?*\x00-\x1f]+/g, "")
          .replace(/\s+/g, "-")
          .replace(/-+/g, "-")
          .replace(/^-|-$/g, "");
        if (!s) s = "gla-tier-list";
        if (s.length > 60) s = s.slice(0, 60).replace(/-$/, "");
        return s + ".png";
      }


.justify-center {
      function loadListName() {
  justify-content: center;
        if (!listNameInput) return;
}
        try {
          var saved = localStorage.getItem(STORAGE_NAME_KEY);
          if (saved) listNameInput.value = saved;
        } catch (e) {}
      }


.border-none {
      function persistListName() {
  border: none !important;
        if (!listNameInput) return;
}
        try {
          var v = String(listNameInput.value || "").trim();
          if (v) localStorage.setItem(STORAGE_NAME_KEY, v);
          else localStorage.removeItem(STORAGE_NAME_KEY);
        } catch (e) {}
      }


.w-25 {
      function exportTierListPng() {
  width: 25%;
        if (!downloadBtn || downloadBtn.disabled) return;
}
        var label = t && t.download ? t.download : "Baixar imagem";
        var busy = t && t.downloadBusy ? t.downloadBusy : "Gerando…";
        var listTitle = getListTitle();
        var fileName = sanitizeDownloadName(listTitle);
        downloadBtn.disabled = true;
        downloadBtn.textContent = busy;


.h-100 {
        ensureRankedImagesReady()
  height: 100%;
          .then(function () {
}
            var rows = gatherExportRows();
            /* Export sempre no visual do modo escuro (fundo + contraste). */
            var colors = {
              bg: "#0f141c",
              paper: "#171c26",
              ink: "#e8eef5",
              ink2: "#9aa6b5",
              rule: "#3a4252",
              labels: {
                S: "#ff7f7f",
                A: "#ffbf7f",
                B: "#ffdf7f",
                C: "#ffff7f",
                D: "#bfff7f",
              },
            };


.flex-wrap {
            var pad = 28;
  flex-wrap: wrap;
            var titleH = 90;
}
            var labelW = 72;
            var medal = 84;
            var gap = 10;
            var nameH = 18;
            var cellW = medal + gap;
            var cellH = medal + nameH + 10;
            var rowPad = 14;
            var contentW = 980;
            var cols = Math.max(
              1,
              Math.floor((contentW - labelW - rowPad * 2) / cellW),
            );


.section-title {
            var rowHeights = rows.map(function (row) {
  display: block;
              var lines = Math.max(
  border-radius: 8px;
                1,
  background: linear-gradient(to bottom, #459cca, #5684c8);
                Math.ceil(Math.max(row.chars.length, 1) / cols),
  width: fit-content;
              );
  color: white;
              return Math.max(112, lines * cellH + rowPad * 2);
  padding: .25em 5em;
            });
  letter-spacing: 1px;
}


.badge {
            var width = pad * 2 + contentW;
  padding: .25em .57em;
            var height =
  margin: .45em;
              pad * 2 +
  border-radius: 6px;
              titleH +
  color: white;
              rowHeights.reduce(function (a, b) {
  font-weight: bold;
                return a + b + 12;
  text-transform: capitalize;
              }, 0);
  white-space: nowrap;
            var scale = 2;
  max-height: 1.5em;
            var canvas = document.createElement("canvas");
  font-size: .9em;
            canvas.width = Math.round(width * scale);
  letter-spacing: 1px;
            canvas.height = Math.round(height * scale);
  box-shadow: rgb(3 102 214 / 30%) 0px 0px 0px 3px;
            var ctx = canvas.getContext("2d");
  background: linear-gradient(to bottom, #459cca, #5684c8);
            ctx.scale(scale, scale);
}


.card {
            ctx.fillStyle = colors.bg;
  width: 100%;
            ctx.fillRect(0, 0, width, height);
  min-height: 14em;
  margin: 0 auto;
  border-radius: 10px;
  box-shadow: rgb(0 0 0 / 9%) 0px 3px 12px;
}


.card-title {
            var titleSize = 28;
  display: block;
            var logoFile = "WIKIGLAlogo.png";
  padding: .25em 0;
            var bgFile = "Fundodawikiglatest.png";
  margin-bottom: 1em;
            function loadWikiExportImage(fileName) {
  width: 100%;
              return loadImageForExport(medalDirectURL(fileName)).then(
  border-radius: 10px 10px 0 0;
                function (img) {
  background: linear-gradient(to bottom, #459cca, #5684c8);
                  if (img) return img;
                  return loadImageForExport(medalFilePathURL(fileName));
                },
              );
            }
            var loads = [
              loadWikiExportImage(logoFile),
              loadWikiExportImage(bgFile),
            ];
            rows.forEach(function (row) {
              row.chars.forEach(function (ch) {
                if (ch.domImg) {
                  ch.image = ch.domImg;
                  return;
                }
                loads.push(
                  loadImageForExport(ch.src).then(function (img) {
                    ch.image = img;
                  }),
                );
              });
            });


  font-size: 1.2em;
            return Promise.all(loads).then(function (results) {
  font-weight: bold;
              var wikiLogo = results[0] || null;
  text-align: center;
              var wikiBg = results[1] || null;
  letter-spacing: 1px;
  color: white;
}


.scaleUp-hover {
              if (wikiBg) {
  transition: all .25s ease;
                ctx.save();
  image-rendering: auto;
                ctx.globalAlpha = 0.3;
  /* ou crisp-edges */
                drawCover(ctx, wikiBg, 0, 0, width, height);
}
                ctx.restore();
              }


.scaleUp-hover:hover {
              if (wikiLogo && wikiLogo.naturalHeight) {
  transform: scale(1.1);
                var logoH = 78;
}
                var logoW = Math.max(
                  1,
                  Math.round(
                    (wikiLogo.naturalWidth / wikiLogo.naturalHeight) * logoH,
                  ),
                );
                ctx.drawImage(wikiLogo, pad, pad, logoW, logoH);
              }


/*
              ctx.fillStyle = colors.ink;
      PERSONAGENS
              ctx.font =
      */
                "700 " +
                titleSize +
                "px 'Space Grotesk', 'Noto Sans', sans-serif";
              ctx.textAlign = "center";
              ctx.textBaseline = "middle";
              ctx.fillText(
                truncateText(ctx, listTitle, contentW),
                pad + contentW / 2,
                pad + 39,
              );
              ctx.textAlign = "left";
              ctx.textBaseline = "top";


.filter--containerSearch {
              var y = pad + titleH;
  display: flex;
              rows.forEach(function (row, idx) {
  padding: 0 2em;
                var h = rowHeights[idx];
  justify-content: flex-end;
                var x0 = pad;
  align-items: center;
                roundRect(ctx, x0, y, contentW, h, 14);
}
                ctx.fillStyle = colors.paper;
                ctx.fill();
                ctx.strokeStyle = colors.rule;
                ctx.lineWidth = 1;
                ctx.stroke();


.filter--container {
                ctx.fillStyle = colors.labels[row.rank] || "#ccc";
  display: flex;
                ctx.fillRect(x0, y, labelW, h);
  padding: 0 2em;
                ctx.fillStyle = "#111827";
  justify-content: space-between;
                ctx.font = "700 26px 'Space Grotesk', 'Noto Sans', sans-serif";
  align-items: center;
                ctx.textAlign = "center";
}
                ctx.textBaseline = "middle";
                ctx.fillText(row.rank, x0 + labelW / 2, y + h / 2);
                ctx.textAlign = "left";
                ctx.textBaseline = "top";


.filter {
                row.chars.forEach(function (ch, i) {
  width: fit-content;
                  var col = i % cols;
  display: flex;
                  var line = Math.floor(i / cols);
  justify-content: center;
                  var cx = x0 + labelW + rowPad + col * cellW + medal / 2;
  border: 3px solid #b0cff1;
                  var cy = y + rowPad + line * cellH + medal / 2;
  border-collapse: collapse;
                  var ix = cx - medal / 2;
  border-radius: 8px;
                  var iy = cy - medal / 2;
}


.filter--title {
                  /* Medalhas já são redondas com fundo transparente — sem círculo extra. */
  display: flex;
                  if (ch.image) {
  border-right: 3px solid #b0cff1;
                    drawContain(ctx, ch.image, ix, iy, medal, medal);
  background: #4c91c9;
                  }
  padding: 0 1em;
  align-items: center;
  border-radius: 4px 0 0 4px;
  font-size: 1.2em;
  letter-spacing: .15em;
  font-weight: bold;
  color: white;
}


.filter--icon,
                  ctx.fillStyle = colors.ink2;
.calcXp--tierIcon {
                  ctx.font = "600 11px 'Noto Sans', sans-serif";
  padding: .35em .95em;
                  ctx.textAlign = "center";
  background: transparent;
                  ctx.textBaseline = "top";
  cursor: pointer;
                  var labelTxt = truncateText(ctx, ch.name, medal + 4);
}
                  ctx.fillText(labelTxt, cx, cy + medal / 2 + 4);
                  ctx.textAlign = "left";
                });


.filter--icon.tier img {
                y += h + 12;
  filter: grayscale(.0);
              });
}


.filter--icon.tier.active img {
              return new Promise(function (resolve, reject) {
  box-shadow: none;
                if (canvas.toBlob) {
}
                  canvas.toBlob(function (blob) {
                    if (!blob) reject(new Error("blob"));
                    else resolve(blob);
                  }, "image/png");
                } else {
                  try {
                    var data = canvas.toDataURL("image/png");
                    var bin = atob(data.split(",")[1]);
                    var arr = new Uint8Array(bin.length);
                    for (var i = 0; i < bin.length; i++)
                      arr[i] = bin.charCodeAt(i);
                    resolve(new Blob([arr], { type: "image/png" }));
                  } catch (err) {
                    reject(err);
                  }
                }
              });
            });
          })
          .then(function (blob) {
            var url = URL.createObjectURL(blob);
            var a = document.createElement("a");
            a.href = url;
            a.download = fileName;
            document.body.appendChild(a);
            a.click();
            a.remove();
            setTimeout(function () {
              URL.revokeObjectURL(url);
            }, 1500);
          })
          .catch(function () {
            window.alert(
              t && t.downloadError ? t.downloadError : "Erro ao gerar imagem.",
            );
          })
          .then(function () {
            downloadBtn.disabled = false;
            downloadBtn.textContent = label;
          });
      }


.filter--icon img {
      function roundRect(ctx, x, y, w, h, r) {
  filter: grayscale(.8);
        var rr = Math.min(r, w / 2, h / 2);
  border-radius: 10px;
        ctx.beginPath();
        ctx.moveTo(x + rr, y);
        ctx.arcTo(x + w, y, x + w, y + h, rr);
        ctx.arcTo(x + w, y + h, x, y + h, rr);
        ctx.arcTo(x, y + h, x, y, rr);
        ctx.arcTo(x, y, x + w, y, rr);
        ctx.closePath();
      }


  transition: all .25s ease;
      function drawContain(ctx, img, x, y, w, h) {
}
        var iw = img.naturalWidth || img.width;
        var ih = img.naturalHeight || img.height;
        if (!iw || !ih) return;
        var scale = Math.min(w / iw, h / ih);
        var dw = iw * scale;
        var dh = ih * scale;
        ctx.drawImage(img, x + (w - dw) / 2, y + (h - dh) / 2, dw, dh);
      }


.calcXp--tierIcon img {
      function drawCover(ctx, img, x, y, w, h) {
  filter: drop-shadow(0px 1px 8px #4c91c900);
        var iw = img.naturalWidth || img.width;
  border-radius: 10px;
        var ih = img.naturalHeight || img.height;
        if (!iw || !ih) return;
        var scale = Math.max(w / iw, h / ih);
        var dw = iw * scale;
        var dh = ih * scale;
        ctx.drawImage(img, x + (w - dw) / 2, y + (h - dh) / 2, dw, dh);
      }


  transition: all .25s ease;
      function truncateText(ctx, text, maxW) {
}
        var s = String(text || "");
        if (ctx.measureText(s).width <= maxW) return s;
        while (s.length > 1 && ctx.measureText(s + "…").width > maxW) {
          s = s.slice(0, -1);
        }
        return s + "…";
      }


.filter--icon.active img {
      function emptyTierOrder() {
  box-shadow: rgb(0 0 0 / 24%) 0px 2px 7px;
        return { S: [], A: [], B: [], C: [], D: [] };
  filter: grayscale(0);
      }
}


.filter--icon.tier.active img,
      function loadPlacement() {
.calcXp--tierIcon.active img {
        placement = {};
  transform: scale(.85);
        tierOrder = emptyTierOrder();
}
        try {
          var raw = localStorage.getItem(STORAGE_KEY);
          var parsed = raw ? JSON.parse(raw) : null;
          if (!parsed || typeof parsed !== "object") return;


.filter--icon.tier#bronze.active img,
          /* Formato novo: { S: [id, ...], A: [...], ... } */
.calcXp--tierIcon#bronze.active img {
          if (
  filter: drop-shadow(0px 1px 8px #f18a05);
            Array.isArray(parsed.S) ||
}
            Array.isArray(parsed.A) ||
            Array.isArray(parsed.B)
          ) {
            RANKS.forEach(function (rank) {
              var list = Array.isArray(parsed[rank]) ? parsed[rank] : [];
              list.forEach(function (id) {
                if (typeof id === "string" && id && !placement[id]) {
                  placement[id] = rank;
                  tierOrder[rank].push(id);
                }
              });
            });
            return;
          }


.filter--icon.tier#silver.active img,
          /* Legado: { charId: "S", ... } */
.calcXp--tierIcon#silver.active img {
          Object.keys(parsed).forEach(function (id) {
  filter: drop-shadow(0px 1px 8px #8b8b8b);
            var rank = parsed[id];
}
            if (
              typeof rank === "string" &&
              RANKS.indexOf(rank) !== -1 &&
              !placement[id]
            ) {
              placement[id] = rank;
              tierOrder[rank].push(id);
            }
          });
        } catch (e) {
          placement = {};
          tierOrder = emptyTierOrder();
        }
      }


.filter--icon.tier#gold.active img,
      function persistPlacement() {
.calcXp--tierIcon#gold.active img {
        var data = emptyTierOrder();
  filter: drop-shadow(0px 1px 8px #fbc300);
        placement = {};
}
        RANKS.forEach(function (rank) {
          var slots = rowSlots[rank];
          if (!slots) return;
          slots.querySelectorAll(".gla-tierlist-char").forEach(function (node) {
            var id = node.dataset.id;
            if (!id) return;
            data[rank].push(id);
            placement[id] = rank;
          });
        });
        try {
          localStorage.setItem(STORAGE_KEY, JSON.stringify(data));
        } catch (e) {}
      }


.filter--icon.tier#diamond.active img,
      /* Posição de inserção no flex-wrap: metade esquerda do card = antes; direita = depois. */
.calcXp--tierIcon#diamond.active img {
      function getInsertBeforeNode(container, x, y) {
  filter: drop-shadow(0px 1px 8px #0391c5);
        if (!container) return null;
}
        var elems = Array.prototype.slice.call(
          container.querySelectorAll(".gla-tierlist-char:not(.is-dragging)"),
        );
        if (!elems.length) return null;


.filter--input {
        var best = null;
  box-sizing: border-box;
        var bestDist = Infinity;
  padding: .45em;
        var i, box, cx, cy, dx, dy, dist, candidate;
  padding-right: 2.5em;
  border: 3px solid #b0cff1;
  font-size: 1.2em;
  border-radius: 8px;
  width: 23em;
}


.filter--inputContainer {
        for (i = 0; i < elems.length; i++) {
  box-sizing: border-box;
          box = elems[i].getBoundingClientRect();
  position: relative;
          cx = box.left + box.width / 2;
}
          cy = box.top + box.height / 2;
          dx = x - cx;
          dy = y - cy;
          dist = dx * dx + dy * dy;
          if (dist < bestDist) {
            bestDist = dist;
            candidate = dx < 0 ? elems[i] : elems[i].nextElementSibling;
            if (
              candidate &&
              candidate.dataset &&
              candidate.dataset.id === dragId
            ) {
              candidate = candidate.nextElementSibling;
            }
            best = candidate;
          }
        }
        return best;
      }


.filter--searchButton {
      function applyStrings() {
  cursor: pointer;
        lang = getWidgetLang();
  display: inline-block;
        t = STRINGS[lang] || STRINGS.pt;
  border: 3px solid #b0cff1;
  position: absolute;
  width: 4.5em;
  height: -webkit-fill-available;
  right: 0;
  bottom: 0;
  border-radius: 0 8px 8px 0;
  background: #4c91c9;


}
        root.querySelectorAll("[data-i18n]").forEach(function (el) {
          var key = el.getAttribute("data-i18n");
          if (t[key] != null) el.textContent = t[key];
        });
        root.querySelectorAll("[data-i18n-placeholder]").forEach(function (el) {
          var key = el.getAttribute("data-i18n-placeholder");
          if (t[key] != null) el.setAttribute("placeholder", t[key]);
        });
        root.querySelectorAll("[data-i18n-aria]").forEach(function (el) {
          var key = el.getAttribute("data-i18n-aria");
          if (t[key] != null) el.setAttribute("aria-label", t[key]);
        });


.filter--searchButton img {
        GAME_TIERS.forEach(function (gt) {
  filter: invert(1);
          var btn = filtersEl.querySelector('[data-tier="' + gt.id + '"]');
}
          if (btn) {
            var lbl = btn.querySelector(".gla-tierlist-filter-label");
            if (lbl) lbl.textContent = t[gt.labelKey] || gt.id;
            else btn.textContent = t[gt.labelKey] || gt.id;
          }
        });


.calcXp--container {
        var classLabels = CLASS_LABELS[lang] || CLASS_LABELS.pt;
  box-sizing: border-box;
        CLASS_FILTERS.forEach(function (f) {
  padding: 2.25em 1.25em;
          var btn =
  width: 43em;
            classFiltersEl &&
  border: 3px solid #b0cff1;
            classFiltersEl.querySelector('[data-class="' + f.id + '"]');
  border-radius: 26px;
          if (!btn) return;
}
          var label = classLabels[f.id] || f.id;
          btn.title = label;
          var span = btn.querySelector("span");
          if (span) span.textContent = label;
          var img = btn.querySelector("img");
          if (img) img.alt = label;
        });
        if (classBarEl && t.classFiltersAria) {
          classBarEl.setAttribute("aria-label", t.classFiltersAria);
        }


.calcXp--resultTitle {
        updateCounts();
  text-align: center;
      }
  color: #4f7ca0;
  margin: 0;
  margin-top: -.5em !important;
  letter-spacing: .05em;
}


.calcXp--formItem {
      function updateCounts() {
  display: flex;
        if (!t) return;
  align-items: center;
        var ranked = 0;
}
        var poolVisible = 0;
        var anyVisible = 0;


.calcXp--formItem input {
        Object.keys(charNodes).forEach(function (id) {
  box-sizing: border-box;
          var node = charNodes[id];
  padding: .35em;
          var visible = !node.classList.contains("is-hidden");
  border: 2px solid #b0cff1;
          if (visible) anyVisible++;
  border-radius: 8px;
          if (placement[id] && RANKS.indexOf(placement[id]) !== -1) {
  text-align: center;
            if (visible) ranked++;
  font-size: 1em;
          } else if (visible) {
  font-weight: bold;
            poolVisible++;
  letter-spacing: .05em;
          }
  width: 4em;
        });
}


.calcXp--formItem span {
        if (countEl) {
  font-size: 1.225em;
          if (ranked === 0) countEl.textContent = t.ranked0;
  font-weight: 500;
          else if (ranked === 1) countEl.textContent = t.ranked1;
  letter-spacing: .05em;
          else countEl.textContent = t.rankedN.replace("{n}", ranked);
  margin-right: .5em;
        }
  color: #386a93;
        if (poolCountEl) {
}
          poolCountEl.textContent = t.poolCount.replace("{n}", poolVisible);
        }
        if (emptyEl) {
          emptyEl.hidden = anyVisible > 0 || !characters.length;
        }
      }


#calculate-btn {
      function hasClassFilter(filters, classId) {
  box-sizing: border-box;
        if (filters.indexOf(classId) !== -1) return true;
  cursor: pointer;
        /* bruiser legado conta como DPS */
  display: block;
        if (classId === "dps" && filters.indexOf("bruiser") !== -1) return true;
  width: 15em;
        return false;
  margin: 2em auto;
      }
  padding: .45em 1em;


  border: none;
      function matchesFilters(ch) {
  border-radius: 6px;
        if (activeGameTier !== "all" && ch.tier !== activeGameTier)
  background: #4c91c9;
          return false;
  box-shadow: rgb(0 0 0 / 24%) 0px 3px 8px;
        if (activeClassFilters.length) {
  color: white;
          var filters = ch.filters || [];
          for (var f = 0; f < activeClassFilters.length; f++) {
            if (!hasClassFilter(filters, activeClassFilters[f])) return false;
          }
        }
        if (!searchTerm) return true;
        var hay = ch.__hay || "";
        var tokens = normalize(searchTerm).split(/\s+/).filter(Boolean);
        for (var i = 0; i < tokens.length; i++) {
          if (hay.indexOf(tokens[i]) === -1) return false;
        }
        return true;
      }


  font-size: 1.35em;
      function classLabel(id) {
  text-transform: capitalize;
        var map = CLASS_LABELS[lang] || CLASS_LABELS.pt;
  letter-spacing: 0.05em;
        return map[id] || id;
  font-weight: bold;
      }
  transition: .35s ease;
}


#calculate-btn:hover {
      function toggleClassFilter(id) {
  color: #ffffff;
        var idx = activeClassFilters.indexOf(id);
  box-shadow: rgb(0 0 0 / 8%) 0px 3px 8px;
        if (idx >= 0) activeClassFilters.splice(idx, 1);
  transform: scale(.95);
        else activeClassFilters.push(id);
  background: #4685b8;
        if (classFiltersEl) {
}
          classFiltersEl
            .querySelectorAll(".gla-tierlist-class-filter")
            .forEach(function (btn) {
              btn.classList.toggle(
                "is-active",
                activeClassFilters.indexOf(btn.dataset.class) !== -1,
              );
            });
        }
        applyVisibility();
      }


#calc-result {
      function applyVisibility() {
  margin-top: 1em;
        var id;
  display: flex;
        for (id in charNodes) {
  justify-content: center;
          if (!Object.prototype.hasOwnProperty.call(charNodes, id)) continue;
}
          var node = charNodes[id];
          var ch = node.__ch;
          if (!ch) continue;
          node.classList.toggle("is-hidden", !matchesFilters(ch));
        }
        updateCounts();
      }


#calc-result .badge {
      function rarityRank(ch) {
  display: flex;
        if (!ch) return 99;
  align-items: center;
        var n = RARITY_ORDER[ch.tier];
  justify-content: center;
        return typeof n === "number" ? n : 99;
  max-height: 5em;
      }
  width: 5em;
}


.calcXp--xpIcon {
      function poolCompare(a, b) {
  margin-left: -.2em;
        var ca = a && a.__ch;
}
        var cb = b && b.__ch;
        var ra = rarityRank(ca);
        var rb = rarityRank(cb);
        if (ra !== rb) return ra - rb;
        var na = normalize(
          (ca && ca.name) || (a && a.dataset && a.dataset.id) || "",
        );
        var nb = normalize(
          (cb && cb.name) || (b && b.dataset && b.dataset.id) || "",
        );
        if (na < nb) return -1;
        if (na > nb) return 1;
        return 0;
      }


.calcXp--numberOfPots {
      /* Pool sempre ordenado: Diamante → Ouro → Prata → Bronze (e nome dentro da raridade). */
  padding-top: .2em;
      function insertIntoPool(node) {
  font-size: 1.15em;
        if (!node || !poolEl) return;
}
        var siblings = poolEl.children;
        var i, other;
        for (i = 0; i < siblings.length; i++) {
          other = siblings[i];
          if (other === node) continue;
          if (
            !other.classList ||
            !other.classList.contains("gla-tierlist-char")
          )
            continue;
          if (poolCompare(node, other) < 0) {
            poolEl.insertBefore(node, other);
            return;
          }
        }
        poolEl.appendChild(node);
      }


#characters-container {
      function sortPool() {
  display: flex;
        if (!poolEl) return;
  flex-wrap: wrap;
        var nodes = Array.prototype.slice.call(
  padding: 1em;
          poolEl.querySelectorAll(".gla-tierlist-char"),
}
        );
        nodes.sort(poolCompare);
        nodes.forEach(function (n) {
          poolEl.appendChild(n);
        });
      }


#characters-container>div {
      function placeChar(id, rank, beforeNode) {
  box-sizing: border-box;
        if (!charNodes[id]) return;
  display: none;
        var node = charNodes[id];
  padding: 1em;
        if (beforeNode === node) {
  width: 19%;
          beforeNode = node.nextElementSibling;
  margin-right: 1%;
        }
}
        if (rank && RANKS.indexOf(rank) !== -1) {
          placement[id] = rank;
          var slots = rowSlots[rank];
          if (beforeNode && beforeNode.parentNode === slots) {
            slots.insertBefore(node, beforeNode);
          } else {
            slots.appendChild(node);
          }
        } else {
          delete placement[id];
          insertIntoPool(node);
        }
        persistPlacement();
        updateCounts();
      }


#characters-container>div.show {
      function clearSelection() {
  display: block;
        selectedId = null;
}
      }


#characters-container>div>a>img {
      function selectChar(id) {
  width: 100%;
        if (selectedId === id) {
  border-radius: 8px;
          clearSelection();
  filter: grayscale(.3);
          return;
  transition: all .25s ease;
        }
}
        selectedId = id;
      }


#characters-container>div:hover>a>img {
      function buildCharNode(ch) {
  box-shadow: rgba(0, 0, 0, 0.16) 0px 3px 6px, rgba(0, 0, 0, 0.23) 0px 3px 6px;
        ch.__hay = normalize(
  filter: grayscale(0);
          (ch.name || "") + " " + (ch.shortName || "") + " " + (ch.id || ""),
  transform: scale(1.06);
        );
}


.characterPage--splashArt {
        var btn = document.createElement("button");
  position: absolute;
        btn.type = "button";
  top: -2%;
        btn.className = "gla-tierlist-char";
  right: -2%;
        btn.draggable = true;
  width: 35%;
        btn.dataset.id = ch.id;
}
        btn.dataset.gameTier = ch.tier || "";
 
        btn.setAttribute("aria-label", ch.name);
.characterPage--table {
        btn.__ch = ch;
  margin-top: -4em;
        btn.innerHTML =
  width: 100%;
          '<div class="gla-tierlist-char-art"><img alt="" width="96" height="96"></div>' +
}
          '<span class="gla-tierlist-char-name" aria-hidden="true"></span>';
 
        btn.querySelector(".gla-tierlist-char-name").textContent = ch.name;
.characterPage--table>tbody {
        bindCharImage(btn.querySelector("img"), ch);
  position: relative;
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
}
 
.characterPage--table>tbody>.characterPage--mainSection {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  width: 65%;
}
 
.characterPage--table>tbody>.characterPage--sideSection {
  box-sizing: border-box;
  display: flex;
  justify-content: center;
  width: 33%;
  padding: 0 1em;
}
 
.characterPage--characterInfoContainer {
  width: 43%;
}
 
.characterPage--statsInfoContainer {
  width: 55%;
}
 
.stats--container {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  padding: 1.25em;
}
 
.stats--container>div {
  width: 45%;
  display: flex;
  align-items: center;
  justify-content: center;
  margin: .5em;
}
 
.stats--container div img {
  width: 2.25em;
}
 
.stats--bar {
  display: flex;
  width: -webkit-fill-available;
  justify-content: space-between;
  padding: 0 1.25em;
}
 
.bar-filled:first-child,
.bar-notFilled:first-child {
  border-radius: 6px 0 0 6px;
}
 
.bar-filled:last-child,
.bar-notFilled:last-child {
  border-radius: 0 6px 6px 0;
}
 
.bar-filled,
.bar-notFilled {
  display: block;
  width: 18%;
  height: 6px;
}
 
.bar-filled {
  background: var(--blue);
}
 
.bar-notFilled {
  background: var(--transparent-blue);
}
 
.characterInfo--name {
  margin: 0 !important;
}
 
.characterInfo--badgeContainer {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  width: fit-content;
  margin: 0 auto;
}
 
.characterInfo--contentContainer {
  display: flex;
  justify-content: space-between;
  padding: .6em 1.3em;
}
 
.characterInfo--imageContainer {
  width: 25%;
}
 
.characterInfo--medal {
  margin-top: -1.5em;
}
 
 
.characterInfo--infoContainer {
  width: 75%;
  text-align: center;
}
 
.characterInfo--infoContainer #toc {
  display: none;
}
 
.characterPage--skins {
  width: 100%;
}
 
.characterPage--characterSkills {
  width: 100%;
}
 
/*
      Card de Skins
      */
 
.skins--container {
  display: flex;
  justify-content: flex-start;
  flex-wrap: wrap;
  padding: -0.75em 0.75em;
  gap: -0.5em;
  /* Adiciona espaçamento consistente entre os itens */
}
 
.skins--container span {
  width: 33.3%;
  display: flex;
  justify-content: center;
  align-items: center;
}
 
.skins--imageSkin {
  max-width: 100%;
  /* Limita o tamanho máximo da imagem */
  max-height: 100%;
  /* Limita o tamanho máximo da imagem */
  object-fit: contain;
  /* Garante que a imagem se ajusta proporcionalmente */
}
 
/*
      Seção das skills do personagem
      */
 
.tabsContainer {
  width: 95%;
  margin: 0 auto;
  padding-bottom: .5em;
}
 
.tabsContainer table {
  width: 100%;
  border-collapse: collapse;
}
 
.tabsContainer table>tbody>tr>td {
  border-bottom: 2px solid rgb(225, 225, 225);
}
 
.tabSkill--container {
  padding-bottom: .85em;
  display: flex;
  max-width: 72em;
  overflow-x: auto;
}
 
.skillInfo--description::-webkit-scrollbar,
.tabSkill--container::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}
 
.skillInfo--description::-webkit-scrollbar-track,
.tabSkill--container::-webkit-scrollbar-track {
  background-color: #4799c954;
  border-radius: 10px;
}
 
.skillInfo--description::-webkit-scrollbar-thumb,
.tabSkill--container::-webkit-scrollbar-thumb {
  background-color: rgb(85 135 200 / 74%);
  border-radius: 10px;
}
 
.tab-skill {
  transition: all .25s ease;
  width: 100%;
  min-width: 5em;
}
 
.tab-skill.active {
  border-color: #459cca;
}
 
.tab-skill>div {
  cursor: pointer;
  box-sizing: border-box;
  width: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  padding: .25em;
}
 
.tab-skill>div>img {
  width: 100%;
  max-width: 40px;
  height: auto;
}
 
.skillInfo--container {
  width: 100%;
}
 
.skillInfo--container>td {
  border: none !important;
}
 
.skillInfo {
  display: none;
}
 
.skillInfo.active {
  display: table-cell;
}
 
.skillInfo.active {
  display: table-cell;
}
 
.skillInfo--videoContainer {
 
  align-self: center;
  width: 45%;
}
 
.skillInfo--skillVideo2 {
  display: none;
  border-radius: 8px;
}
 
.skillInfo--skillVideo2.active {
  display: flex;
}
 
.skillInfo--videoSelector {
  display: inline-block;
  width: 1.1em;
  height: 1.1em;
  border-radius: 50%;
  background: var(--transparent-blue);
  cursor: pointer;
  margin-right: .85em;
 
  transition: all .25s ease;
}
 
.skillInfo--videoSelector.active {
  background: var(--blue);
  transform: scale(.8);
}
 
.skillInfo--infoContainer {
  width: 50%;
}
 
.skillInfo>div>.skillInfo--infoContainer b {
  color: #2a87c4 !important;
}
 
.skillInfo--infoContainer>center>b {
  font-size: 1.15em;
}
 
.skillInfo--name {
  font-size: 1.85em;
  letter-spacing: 1px;
  text-align: center;
}
 
.skillInfo--description {
  display: inline-block;
  font-size: 1.03em;
  line-height: 1.5em;
  padding: 0 1em;
  height: 12em;
  max-height: 12em;
  overflow-y: auto;
  text-align: justify;
}
 
.skillInfo--attributesContainer>h1 {
  color: #717171;
  font-size: 1.4em;
  text-align: center;
  letter-spacing: 1px;
}
 
/* card attributes */
.attribute--cardsContainer {
  display: flex;
  align-items: flex-start;
 
  width: fit-content;
  margin: 0 auto;
 
  background: var(--lightGray);
  border: 2px solid var(--gray);
}
 
.cardAttribute {
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  width: 8em;
}
 
.cardAttribute--icon {
  margin: .6em 0;
  height: 2em;
}
 
.cardAttribute--value {
  margin: 0 !important;
 
  font-size: .9em !important;
  font-weight: bold;
  line-height: 1.65em !important;
  letter-spacing: 2px;
  text-align: center;
  text-transform: uppercase;
}
 
/*------------------------------------
      WANTED
      -----------------------------------*/
 
.selectWanted--container {
  display: flex;
  justify-content: center;
}
 
#selectbox-wanted {
  padding: .35em .5em;
  font-family: sans-serif;
  letter-spacing: .04em;
  font-size: 1.25em;
  width: 21em;
  border: 2px solid #5684c8;
  border-radius: 6px;
}
 
.wantedPortrait--container {
  width: 100%;
}
 
.wantedPortrait--title {
  width: 100%;
  color: #292929;
  font-size: 1.5em;
  font-weight: bold;
  letter-spacing: .035em;
}
 
.wantedPortraits {
  display: flex;
  flex-wrap: wrap;
}
 
.wantedPortrait {
  box-sizing: border-box;
  width: 18em;
  padding: .35em;
}
 
.wantedPortrait img {
  width: 100%;
}
 
@media screen and (max-width: 1440px) {
  :root {
    font-size: 14px;
  }
 
  .characterInfo--contentContainer {
    padding: .6em;
  }
 
  .characterInfo--infoContainer {
    width: 65%;
  }
 
  .characterInfo--imageContainer {
    width: 35%;
  }
 
  .tabSkill--container {
    max-width: 61em;
    margin: 0 auto;
  }
 
  .tab-skill>div>img {
    max-width: 38px;
  }
 
}
 
@media screen and (max-width: 1220px) {
  .tabSkill--container {
    max-width: 48em;
  }
}
 
 
@media screen and (max-width: 1024px) {
 
  .flex-wrap-md {
    flex-wrap: wrap;
  }
 
  .justify-center-md {
    justify-content: center;
  }
 
  .initialPage--mainContainer {
    flex-wrap: wrap;
  }
 
  .initialPage--menuContainer {
    width: 100%;
    margin-right: 0;
  }
 
  .initialPage--sideMenuContainer {
    width: 100%;
    display: flex;
    flex-direction: column;
    margin-top: 1.5em;
  }
 
  .initialPage--sideMenuContainer .card {
    width: 45%;
    min-height: 15em;
  }
 
  #event-time {
    bottom: 5%;
    right: 5%;
    font-size: 1.25em;
  }
 
  .initialPage--socialMediaContainer {
    margin-top: 2em;
    display: flex;
    justify-content: space-between;
  }
 
  .initialPage--socialMedia {
    width: 32%;
  }
 
  #p-search {
    margin-right: 1em;
  }
 
  .filter--containerSearch {
    justify-content: center;
  }
 
  .filter--container {
    margin-top: 1em;
    flex-wrap: wrap;
    justify-content: center;
  }
 
  .filter:last-of-type {
    margin-top: 1em;
  }
 
  #characters-container>div {
    width: 24%;
  }
 
  .characterPage--splashArt {
    display: none;
  }
 
  .characterPage--table>tbody>.characterPage--mainSection {
    width: 100%;
    justify-content: flex-start;
  }
 
  .characterPage--characterInfoContainer {
    width: 38%;
  }
 
  .characterPage--statsInfoContainer {
    width: 30%;
    margin-left: 1.5%;
  }
 
  .stats--container>div {
    width: 100%;
  }
 
  .characterInfo--contentContainer {
    flex-wrap: wrap;
  }
 
  .characterInfo--imageContainer {
    width: 100%;
    display: flex;
    justify-content: center;
  }
 
  .characterInfo--medal {
    margin-top: -2.5em;
  }
 
  .characterInfo--infoContainer {
    width: 100%;
  }
 
  .tabsContainer {
    width: 100%;
  }
 
  .tab-skill {
    min-width: 3.5em;
  }
 
  .tab-skill>div>img {
    max-width: 36px;
  }
 
  .skillInfo>div {
    flex-wrap: wrap-reverse;
  }
 
  .skillInfo--infoContainer {
    width: 100%;
  }
 
  .skillInfo--infoContainer>center>b {
    font-size: 1.2em;
  }
 
  .skillInfo--name {
    font-size: 2.2em !important;
    letter-spacing: 1px;
    margin-top: .5em !important;
    text-align: center;
  }
 
  .skillInfo--description {
    font-size: 1.35em !important;
    display: table;
    margin: 1em !important;
 
    height: 5em;
    max-height: 5em;
  }
 
  .skillInfo--videoContainer {
    width: 100%;
    margin: 0 auto;
    padding: 1em 10em;
    padding-bottom: 1em;
  }
 
  .cardAttribute--value {
    letter-spacing: 1px;
    font-size: 1.1em;
  }
 
  .characterPage--table>tbody>.characterPage--sideSection {
    width: 30%;
    padding-left: 1.5%;
    position: absolute;
    top: 0;
    right: 0;
  }
 
  .skins--imageSkin {
    width: 100%;
  }
 
  .skins--container {
    max-height: 14em;
    overflow-x: clip;
    overflow-y: auto;
  }
 
  .skins--container span {
    width: 50%;
  }
 
  .calcXp--formItem {
    justify-content: center;
  }
 
  .calcXp--container:last-of-type {
    margin-top: 2em;
  }
 
  #p-tb h3 {
    display: none;
  }


}
        btn.addEventListener("dragstart", function (ev) {
          dragId = ch.id;
          btn.classList.add("is-dragging");
          try {
            ev.dataTransfer.setData("text/plain", ch.id);
            ev.dataTransfer.effectAllowed = "move";
          } catch (e) {}
        });


/*******************************************************************************
        btn.addEventListener("dragend", function () {
      PRESET: ABAS
          btn.classList.remove("is-dragging");
      *******************************************************************************/
          dragId = null;
.tabela-abas {
          root.querySelectorAll(".is-drop-target").forEach(function (el) {
  width: 100%;
            el.classList.remove("is-drop-target");
  border-collapse: collapse;
          });
  text-align: center;
        });
  margin-bottom: 20px;
}


.mostrar-aba {
        return btn;
  cursor: pointer;
      }
  padding: 0;
  background-color: transparent;
  text-align: center;
  border: none;
  position: relative;
  transition: all 0.2s ease-in-out;
}


.imagem-botao {
      function resolveDragId(ev) {
  display: inline-block;
        var id = dragId;
  width: auto;
        try {
  height: auto;
          id = ev.dataTransfer.getData("text/plain") || dragId;
}
        } catch (e) {}
        return id;
      }


.sec-aba-cem {
      function bindPoolDrop(el) {
  padding: 5px;
        el.addEventListener("dragover", function (ev) {
  font-weight: bold;
          ev.preventDefault();
  text-align: center;
          el.classList.add("is-drop-target");
  color: #333;
          try {
}
            ev.dataTransfer.dropEffect = "move";
          } catch (e) {}
        });
        el.addEventListener("dragleave", function (ev) {
          if (!el.contains(ev.relatedTarget)) {
            el.classList.remove("is-drop-target");
          }
        });
        el.addEventListener("drop", function (ev) {
          ev.preventDefault();
          el.classList.remove("is-drop-target");
          var id = resolveDragId(ev);
          if (id) {
            placeChar(id, null);
            clearSelection();
          }
        });
      }


.mostrar-aba img {
      function bindTierDrop(row, slots, rank) {
  border: none;
        function highlight(on) {
  background-color: transparent;
          row.classList.toggle("is-drop-target", on);
  margin: 5px;
          slots.classList.toggle("is-drop-target", on);
}
        }


.mostrar-aba:hover::after {
        slots.addEventListener("dragover", function (ev) {
  content: '';
          ev.preventDefault();
  position: absolute;
          ev.stopPropagation();
  bottom: 0;
          highlight(true);
  left: 0;
          try {
  right: 0;
            ev.dataTransfer.dropEffect = "move";
  height: 3px;
          } catch (e) {}
  background-color: rgba(0, 0, 0, 0.4);
        });
  /* Barrinha sutil ao passar o mouse */
        slots.addEventListener("dragleave", function (ev) {
}
          if (!slots.contains(ev.relatedTarget)) {
            highlight(false);
          }
        });
        slots.addEventListener("drop", function (ev) {
          ev.preventDefault();
          ev.stopPropagation();
          highlight(false);
          var id = resolveDragId(ev);
          var before = getInsertBeforeNode(slots, ev.clientX, ev.clientY);
          if (id) {
            placeChar(id, rank, before);
            clearSelection();
          }
        });


.mostrar-aba:hover img {
        /* Drop no rótulo S/A/B/C/D → final da linha */
  filter: drop-shadow(0 2px 3px rgba(0, 0, 0, 0.3));
        row.addEventListener("dragover", function (ev) {
  /* Sombra leve ao passar o mouse */
          if (slots.contains(ev.target)) return;
}
          ev.preventDefault();
          highlight(true);
          try {
            ev.dataTransfer.dropEffect = "move";
          } catch (e) {}
        });
        row.addEventListener("dragleave", function (ev) {
          if (!row.contains(ev.relatedTarget)) {
            highlight(false);
          }
        });
        row.addEventListener("drop", function (ev) {
          if (slots.contains(ev.target)) return;
          ev.preventDefault();
          highlight(false);
          var id = resolveDragId(ev);
          if (id) {
            placeChar(id, rank, null);
            clearSelection();
          }
        });
      }


.mostrar-aba:active img {
      function renderBoard() {
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.3));
        boardEl.textContent = "";
}
        RANKS.forEach(function (rank) {
          var row = document.createElement("div");
          row.className = "gla-tierlist-row";
          row.dataset.rank = rank;


.mostrar-aba.ativa::after {
          var label = document.createElement("div");
  content: '';
          label.className = "gla-tierlist-label";
  position: absolute;
          label.textContent = rank;
  bottom: 0;
          label.title = rank;
  left: 0;
          label.addEventListener("click", function () {
  right: 0;
            if (selectedId) {
  height: 3px;
              placeChar(selectedId, rank, null);
  background-color: #000;
              clearSelection();
}
            }
          });


.preset-aba {
          var slots = document.createElement("div");
  margin: 0;
          slots.className = "gla-tierlist-slots";
  padding: 0;
          slots.dataset.slots = rank;
}
          bindTierDrop(row, slots, rank);


.container-conteudo {
          row.appendChild(label);
  margin: 0;
          row.appendChild(slots);
  padding: 0;
          boardEl.appendChild(row);
}
          rowSlots[rank] = slots;
        });
      }


.aba {
      function renderFilters() {
  display: none;
        filtersEl.textContent = "";
  opacity: 0;
        GAME_TIERS.forEach(function (gt) {
  transform: translateY(-10px);
          var btn = document.createElement("button");
  transition: opacity 0.3s ease, transform 0.3s ease;
          btn.type = "button";
  margin-top: 20px;
          btn.className =
}
            "gla-tierlist-filter" + (gt.id === "all" ? " is-active" : "");
          btn.dataset.tier = gt.id;
          if (gt.id === "all") {
            btn.innerHTML = '<span class="gla-tierlist-filter-label"></span>';
          } else {
            btn.innerHTML =
              '<span class="gla-tierlist-filter-dot"></span><span class="gla-tierlist-filter-label"></span>';
          }
          btn.querySelector(".gla-tierlist-filter-label").textContent = gt.id;
          btn.addEventListener("click", function () {
            activeGameTier = gt.id;
            filtersEl
              .querySelectorAll(".gla-tierlist-filter")
              .forEach(function (b) {
                b.classList.toggle("is-active", b.dataset.tier === gt.id);
              });
            applyVisibility();
          });
          filtersEl.appendChild(btn);
        });
      }


.aba.atual {
      function renderClassFilters() {
  display: block;
        if (!classFiltersEl) return;
  opacity: 1;
        classFiltersEl.textContent = "";
  transform: translateY(0);
        CLASS_FILTERS.forEach(function (f) {
}
          var label = classLabel(f.id);
          var btn = document.createElement("button");
          btn.type = "button";
          btn.className = "gla-tierlist-class-filter";
          btn.dataset.class = f.id;
          btn.title = label;
          btn.innerHTML = '<img alt=""><span></span>';
          var img = btn.querySelector("img");
          var span = btn.querySelector("span");
          img.alt = label;
          img.decoding = "async";
          img.loading = "eager";
          /* Mesmos arquivos da Dima (Arquivo:tank.png etc. na wiki oficial). */
          img.src = medalFilePathURL(f.icon);
          img.onerror = function () {
            img.classList.add("is-missing");
            btn.classList.add("gla-tierlist-class-filter--text-only");
          };
          span.textContent = label;
          btn.addEventListener("click", function () {
            toggleClassFilter(f.id);
          });
          classFiltersEl.appendChild(btn);
        });
      }


.container-coliseu {
      function mountCharacters() {
  display: block;
        characters = readCharacterList();
  text-align: center;
        var source = document.querySelector(".gla-tierlist-source");
}
        if (source && source.parentNode) source.parentNode.removeChild(source);


.coluna-abas {
        var fragPool = document.createDocumentFragment();
  flex: 0 0 200px;
        characters.forEach(function (ch) {
  margin-right: 20px;
          if (!ch.id) return;
}
          var node = buildCharNode(ch);
          charNodes[ch.id] = node;
          fragPool.appendChild(node);
        });
        poolEl.appendChild(fragPool);


        RANKS.forEach(function (rank) {
          var order = tierOrder[rank] || [];
          order.forEach(function (id) {
            if (!charNodes[id]) return;
            placement[id] = rank;
            rowSlots[rank].appendChild(charNodes[id]);
          });
        });
        sortPool();
        applyVisibility();
      }


/* =============================================================================
      bindPoolDrop(poolEl);
  GLA language switch (glaLang) - toggle global + painéis i18n
  ============================================================================= */


#pt-langtoggle {
      /* Um listener pra todos os bonecos (em vez de 100+ clicks). */
  display: flex;
      root.addEventListener("click", function (ev) {
  align-items: center;
        var btn = ev.target.closest(".gla-tierlist-char");
}
        if (btn && root.contains(btn)) {
          ev.preventDefault();
          if (dragId) return;
          var targetId = btn.dataset.id;
          if (selectedId && selectedId !== targetId) {
            var slots = btn.closest(".gla-tierlist-slots");
            if (
              slots &&
              slots.dataset.slots &&
              RANKS.indexOf(slots.dataset.slots) !== -1
            ) {
              placeChar(selectedId, slots.dataset.slots, btn);
              clearSelection();
              return;
            }
          }
          selectChar(targetId);
          return;
        }
        var slotsEl = ev.target.closest(".gla-tierlist-slots");
        if (
          slotsEl &&
          ev.target === slotsEl &&
          selectedId &&
          slotsEl.dataset.slots
        ) {
          placeChar(selectedId, slotsEl.dataset.slots, null);
          clearSelection();
          return;
        }
        if (ev.target === poolEl && selectedId) {
          placeChar(selectedId, null);
          clearSelection();
        }
      });


#pt-langtoggle .gla-lang-toggle {
      if (searchInput) {
  display: inline-flex;
        searchInput.addEventListener("input", function () {
  align-items: center;
          clearTimeout(searchTimeout);
  gap: 4px;
          searchTimeout = setTimeout(function () {
  padding: 2px 0;
            searchTerm = searchInput.value || "";
}
            applyVisibility();
          }, 120);
        });
      }


#pt-langtoggle .gla-lang-flag {
      if (downloadBtn) {
  display: inline-flex;
        downloadBtn.addEventListener("click", function () {
  align-items: center;
          exportTierListPng();
  justify-content: center;
        });
  width: 30px;
      }
  height: 22px;
  padding: 0;
  margin: 0;
  border: 1px solid var(--gla-border, #aebcc6);
  border-radius: 4px;
  background: var(--gla-surface, #ecf0f4);
  cursor: pointer;
  overflow: hidden;
  box-sizing: border-box;
  transition: border-color 0.15s ease, box-shadow 0.15s ease, transform 0.08s ease;
}


#pt-langtoggle .gla-lang-flag img {
      if (listNameInput) {
  display: block;
        listNameInput.addEventListener("input", persistListName);
  width: 24px;
        listNameInput.addEventListener("change", persistListName);
  height: 16px;
      }
  object-fit: cover;
}


#pt-langtoggle .gla-lang-flag:hover {
      if (resetBtn) {
  border-color: var(--gla-accent, #2f6fe0);
        resetBtn.addEventListener("click", function () {
  transform: translateY(-1px);
          Object.keys(placement).forEach(function (id) {
}
            delete placement[id];
            if (charNodes[id]) insertIntoPool(charNodes[id]);
          });
          sortPool();
          persistPlacement();
          if (listNameInput) {
            listNameInput.value = "";
            persistListName();
          }
          clearSelection();
          applyVisibility();
        });
      }


#pt-langtoggle .gla-lang-flag.active {
      if (resetFiltersBtn) {
  border-color: var(--gla-accent, #2f6fe0);
        resetFiltersBtn.addEventListener("click", function () {
  box-shadow: 0 0 0 2px rgba(47, 111, 224, 0.25);
          activeGameTier = "all";
}
          activeClassFilters = [];
          searchTerm = "";
          if (searchInput) searchInput.value = "";
          filtersEl
            .querySelectorAll(".gla-tierlist-filter")
            .forEach(function (b) {
              b.classList.toggle("is-active", b.dataset.tier === "all");
            });
          if (classFiltersEl) {
            classFiltersEl
              .querySelectorAll(".gla-tierlist-class-filter")
              .forEach(function (b) {
                b.classList.remove("is-active");
              });
          }
          applyVisibility();
        });
      }


.client-darkmode #pt-langtoggle .gla-lang-flag,
      window.addEventListener("gla:langChanged", function () {
.skin-theme-clientpref-night #pt-langtoggle .gla-lang-flag {
        applyStrings();
  background: var(--gla-dark-chrome-panel, #353a42);
      });
  border-color: var(--gla-dark-border, #4a5058);
}


.client-darkmode #pt-langtoggle .gla-lang-flag.active,
      loadPlacement();
.skin-theme-clientpref-night #pt-langtoggle .gla-lang-flag.active {
      loadListName();
  border-color: var(--gla-dark-accent, #4c8dee);
      renderBoard();
  box-shadow: 0 0 0 2px rgba(76, 141, 238, 0.3);
      renderFilters();
}
      renderClassFilters();
      applyStrings();
      mountCharacters();
    }


.gla-i18n-pane[hidden] {
    if (document.readyState === "loading") {
  display: none !important;
      document.addEventListener("DOMContentLoaded", boot);
}
    } else {
      boot();
    }


body.gla-i18n-page .gla-i18n[data-gla-i18n-mode="client"] {
    if (window.mw && mw.hook) {
   display: block;
      mw.hook("wikipage.content").add(boot);
}
    }
   })();
</script>

Edição das 09h57min de 4 de agosto de 2026

<!--
  Widget:TierList
  UI da tier list (board, pool, filtros, drag-and-drop, download).
  Uso: {{TierList}} (predefinição) ou
       {{#widget:TierList}}{{#invoke:TierList|renderAll}}
  Dados: textarea.gla-tierlist-data (JSON do Módulo:TierList, roster embutido).
  Medalhas: Arquivo:«Nome» medal.png via /images/… (fallback Especial:FilePath).
-->
<div class="gla-tierlist-root mw-no-invert" id="gla-tierlist-root">
  <section
    class="gla-tierlist-toolbar"
    data-i18n-aria="filtersAria"
    aria-label="Filtros"
  >
    <input
      type="search"
      class="gla-tierlist-search"
      data-i18n-placeholder="searchPlaceholder"
      placeholder="Filtrar personagem..."
      autocomplete="off"
      spellcheck="false"
    />
    <div class="gla-tierlist-filters" data-filters></div>
  </section>

  <section
    class="gla-tierlist-classbar"
    data-i18n-aria="classFiltersAria"
    aria-label="Filtros de classe"
  >
    <div class="gla-tierlist-class-filters" data-class-filters></div>
  </section>

  <section class="gla-tierlist-namebar">
    <input
      type="text"
      class="gla-tierlist-list-name"
      data-list-name
      data-i18n-placeholder="listNamePlaceholder"
      placeholder="Nome da sua tier list..."
      maxlength="60"
      autocomplete="off"
      spellcheck="false"
    />
    <div class="gla-tierlist-actions">
      <button
        type="button"
        class="gla-tierlist-pill gla-tierlist-pill--btn"
        data-download
        data-i18n="download"
      >
        Baixar imagem
      </button>
      <button
        type="button"
        class="gla-tierlist-pill gla-tierlist-pill--btn"
        data-reset
        data-i18n="reset"
      >
        Limpar tier list
      </button>
    </div>
  </section>

  <section
    class="gla-tierlist-board"
    data-board
    aria-label="Tier list"
  ></section>

  <section class="gla-tierlist-pool-wrap">
    <div class="gla-tierlist-pool-head">
      <h3 data-i18n="poolTitle">Não ranqueados</h3>
      <span class="gla-tierlist-pool-count" data-pool-count>0</span>
    </div>
    <div class="gla-tierlist-pool" data-pool></div>
    <div class="gla-tierlist-empty" hidden>
      <p data-i18n="empty">Nenhum personagem encontrado.</p>
      <button
        type="button"
        class="gla-tierlist-reset-filters"
        data-reset-filters
        data-i18n="resetFilters"
      >
        Limpar filtros
      </button>
    </div>
  </section>
</div>

<style>
  @import url("https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&display=swap");

  /* ============ Tier List: design wiki-nativo refinado ============ */

  .gla-tierlist-root {
    color-scheme: light;
    --gla-ink: #0f172a;
    --gla-ink-2: #475569;
    --gla-dim: #94a3b8;
    --gla-paper: #eef3f7; /* painéis (header, rows, pool) */
    --gla-paper-2: #ffffff; /* inputs, pills */
    --gla-rule: #e2e8f0;
    --gla-accent: #156bc7;
    --gla-accent-soft: #e8f2fc;
    --gla-ok: #0d9488;
    --gla-rar-diamond: #0391c5;
    --gla-rar-gold: #b8860b;
    --gla-rar-silver: #6b7280;
    --gla-rar-bronze: #c56e04;
    /* Controles da toolbar: altura/borda/tipo únicos (filtros, pills, inputs) */
    --gla-ctrl-h: 34px;
    --gla-ctrl-gap: 6px;
    --gla-ctrl-radius: 999px;
    --gla-ctrl-radius-field: 10px;
    --gla-ctrl-border-w: 1.5px;
    /* Borda de controle: um tom acima de --gla-rule pra nao sumir no fundo */
    --gla-ctrl-border: #c5ced9;
    --gla-ctrl-pad-x: 12px;
    --gla-ctrl-fs: 13px;
    --gla-ctrl-fw: 500;
    --gla-ctrl-lh: 1;
    --gla-ctrl-font: "Noto Sans", "Segoe UI", sans-serif;
    font-family: "Noto Sans", sans-serif;
    color: var(--gla-ink);
    margin: 0 0 1.5rem;
  }

  .gla-tierlist-root *,
  .gla-tierlist-root *::before,
  .gla-tierlist-root *::after {
    box-sizing: border-box;
  }

  html.client-darkmode .gla-tierlist-root,
  html.skin-theme-clientpref-night .gla-tierlist-root {
    color-scheme: dark;
    --gla-ink: #e8eef5;
    --gla-ink-2: #9aa6b5;
    --gla-dim: #6b7788;
    --gla-paper: #171c26;
    --gla-paper-2: #1e2430;
    --gla-rule: #3a4252;
    --gla-ctrl-border: #5c667a;
    --gla-accent: #5ba3e0;
    --gla-accent-soft: rgba(91, 163, 224, 0.18);
    --gla-ok: #2dd4bf;
    --gla-rar-diamond: #4cc4ea;
    --gla-rar-gold: #e8b53a;
    --gla-rar-silver: #9aa6b5;
    --gla-rar-bronze: #f18a05;
  }

  /* DarkMode da wiki invert+hue-rotate no documento; mw-no-invert no root
       devolve as cores reais. Imagens precisam de filter:none pra nao inverter 2x. */
  html.client-darkmode .gla-tierlist-root.mw-no-invert img,
  html.skin-theme-clientpref-night .gla-tierlist-root.mw-no-invert img,
  html.client-darkmode .gla-tierlist-root.mw-no-invert video,
  html.skin-theme-clientpref-night .gla-tierlist-root.mw-no-invert video {
    filter: none;
    -webkit-filter: none;
  }

  /* Pills de ação: mesmo sistema visual dos filtros de raridade.
     #content.mw-body … sobrescreve o skin da wiki em <button>
     (padding/line-height/display), que empurra o texto pra cima. */
  .gla-tierlist-pill,
  #content.mw-body .gla-tierlist-root .gla-tierlist-pill {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    margin: 0;
    min-height: var(--gla-ctrl-h);
    height: var(--gla-ctrl-h);
    padding: 0 var(--gla-ctrl-pad-x);
    border-radius: var(--gla-ctrl-radius);
    border: var(--gla-ctrl-border-w) solid var(--gla-ctrl-border);
    background: var(--gla-paper-2);
    color: var(--gla-ink-2);
    font-family: var(--gla-ctrl-font);
    font-size: var(--gla-ctrl-fs);
    font-weight: var(--gla-ctrl-fw);
    letter-spacing: 0;
    line-height: var(--gla-ctrl-lh);
    white-space: nowrap;
    vertical-align: middle;
  }

  .gla-tierlist-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--gla-ctrl-gap);
    flex: 0 0 auto;
    justify-content: center;
  }

  .gla-tierlist-pill--btn,
  #content.mw-body .gla-tierlist-root .gla-tierlist-pill--btn {
    cursor: pointer;
    appearance: none;
    -webkit-appearance: none;
    margin: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    min-height: var(--gla-ctrl-h);
    height: var(--gla-ctrl-h);
    padding: 0 var(--gla-ctrl-pad-x);
    border: var(--gla-ctrl-border-w) solid var(--gla-ctrl-border);
    border-radius: var(--gla-ctrl-radius);
    background: var(--gla-paper-2);
    color: var(--gla-ink-2);
    font-family: var(--gla-ctrl-font);
    font-size: var(--gla-ctrl-fs);
    font-weight: var(--gla-ctrl-fw);
    line-height: var(--gla-ctrl-lh);
    transition:
      background 0.15s,
      border-color 0.15s,
      color 0.15s,
      opacity 0.15s;
    flex: 0 0 auto;
  }

  .gla-tierlist-pill--btn::-moz-focus-inner {
    border: 0;
    padding: 0;
  }

  .gla-tierlist-pill--btn:hover,
  #content.mw-body .gla-tierlist-root .gla-tierlist-pill--btn:hover {
    border-color: var(--gla-accent);
    color: var(--gla-accent);
  }

  .gla-tierlist-pill--btn:disabled {
    opacity: 0.55;
    cursor: wait;
  }

  /* ---------- Toolbar ---------- */

  .gla-tierlist-toolbar {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gla-ctrl-gap) 10px;
    align-items: center;
    margin-bottom: 0.55rem;
  }

  .gla-tierlist-search {
    flex: 1 1 14rem;
    min-width: 11rem;
    box-sizing: border-box;
    height: var(--gla-ctrl-h);
    min-height: var(--gla-ctrl-h);
    padding: 0 14px;
    border: var(--gla-ctrl-border-w) solid var(--gla-ctrl-border);
    border-radius: var(--gla-ctrl-radius-field);
    font-family: var(--gla-ctrl-font);
    font-size: var(--gla-ctrl-fs);
    font-weight: var(--gla-ctrl-fw);
    line-height: var(--gla-ctrl-lh);
    background: var(--gla-paper-2);
    color: var(--gla-ink);
    transition:
      border-color 0.15s,
      box-shadow 0.15s;
  }

  .gla-tierlist-search::placeholder {
    color: var(--gla-dim);
    font-weight: var(--gla-ctrl-fw);
  }

  .gla-tierlist-search:focus {
    outline: none;
    border-color: var(--gla-accent);
    box-shadow: 0 0 0 3px var(--gla-accent-soft);
  }

  .gla-tierlist-filters {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--gla-ctrl-gap);
  }

  .gla-tierlist-filter,
  #content.mw-body .gla-tierlist-root .gla-tierlist-filter {
    cursor: pointer;
    appearance: none;
    -webkit-appearance: none;
    margin: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    box-sizing: border-box;
    min-height: var(--gla-ctrl-h);
    height: var(--gla-ctrl-h);
    padding: 0 var(--gla-ctrl-pad-x);
    border: var(--gla-ctrl-border-w) solid var(--gla-ctrl-border);
    border-radius: var(--gla-ctrl-radius);
    background: var(--gla-paper-2);
    color: var(--gla-ink-2);
    font-family: var(--gla-ctrl-font);
    font-size: var(--gla-ctrl-fs);
    font-weight: var(--gla-ctrl-fw);
    letter-spacing: 0;
    line-height: var(--gla-ctrl-lh);
    white-space: nowrap;
    vertical-align: middle;
    transition:
      background 0.15s,
      border-color 0.15s,
      color 0.15s;
  }

  .gla-tierlist-filter::-moz-focus-inner {
    border: 0;
    padding: 0;
  }

  .gla-tierlist-filter:hover,
  #content.mw-body .gla-tierlist-root .gla-tierlist-filter:hover {
    border-color: var(--gla-accent);
  }

  .gla-tierlist-filter-label {
    font-family: inherit;
    font-size: inherit;
    font-weight: inherit;
    line-height: 1;
    color: inherit;
  }

  .gla-tierlist-filter-dot {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    flex-shrink: 0;
    background: var(--gla-dim);
  }

  .gla-tierlist-filter[data-tier="diamond"] .gla-tierlist-filter-dot {
    background: var(--gla-rar-diamond);
  }
  .gla-tierlist-filter[data-tier="gold"] .gla-tierlist-filter-dot {
    background: var(--gla-rar-gold);
  }
  .gla-tierlist-filter[data-tier="silver"] .gla-tierlist-filter-dot {
    background: var(--gla-rar-silver);
  }
  .gla-tierlist-filter[data-tier="bronze"] .gla-tierlist-filter-dot {
    background: var(--gla-rar-bronze);
  }

  .gla-tierlist-filter.is-active,
  #content.mw-body .gla-tierlist-root .gla-tierlist-filter.is-active {
    border-color: var(--gla-accent);
    background: var(--gla-accent-soft);
    color: var(--gla-accent);
  }

  .gla-tierlist-filter[data-tier="diamond"].is-active,
  #content.mw-body
    .gla-tierlist-root
    .gla-tierlist-filter[data-tier="diamond"].is-active {
    border-color: var(--gla-rar-diamond);
    color: var(--gla-rar-diamond);
    background: rgba(3, 145, 197, 0.14);
  }
  .gla-tierlist-filter[data-tier="gold"].is-active,
  #content.mw-body
    .gla-tierlist-root
    .gla-tierlist-filter[data-tier="gold"].is-active {
    border-color: var(--gla-rar-gold);
    color: var(--gla-rar-gold);
    background: rgba(212, 160, 23, 0.14);
  }
  .gla-tierlist-filter[data-tier="silver"].is-active,
  #content.mw-body
    .gla-tierlist-root
    .gla-tierlist-filter[data-tier="silver"].is-active {
    border-color: var(--gla-rar-silver);
    color: var(--gla-rar-silver);
    background: rgba(140, 140, 140, 0.14);
  }
  .gla-tierlist-filter[data-tier="bronze"].is-active,
  #content.mw-body
    .gla-tierlist-root
    .gla-tierlist-filter[data-tier="bronze"].is-active {
    border-color: var(--gla-rar-bronze);
    color: var(--gla-rar-bronze);
    background: rgba(241, 138, 5, 0.14);
  }

  /* ---------- Class filters ---------- */

  .gla-tierlist-classbar {
    margin: 0 0 0.55rem;
  }

  .gla-tierlist-namebar {
    margin: 0 0 0.85rem;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: var(--gla-ctrl-gap) 10px;
  }

  .gla-tierlist-list-name {
    flex: 1 1 14rem;
    width: auto;
    max-width: 22rem;
    min-width: 11rem;
    box-sizing: border-box;
    height: var(--gla-ctrl-h);
    min-height: var(--gla-ctrl-h);
    padding: 0 14px;
    border: var(--gla-ctrl-border-w) solid var(--gla-ctrl-border);
    border-radius: var(--gla-ctrl-radius-field);
    font-family: var(--gla-ctrl-font);
    font-size: var(--gla-ctrl-fs);
    font-weight: var(--gla-ctrl-fw);
    line-height: var(--gla-ctrl-lh);
    text-align: center;
    background: var(--gla-paper-2);
    color: var(--gla-ink);
    transition:
      border-color 0.15s,
      box-shadow 0.15s;
  }

  .gla-tierlist-list-name::placeholder {
    color: var(--gla-dim);
    font-weight: var(--gla-ctrl-fw);
  }

  .gla-tierlist-list-name:focus {
    outline: none;
    border-color: var(--gla-accent);
    box-shadow: 0 0 0 3px var(--gla-accent-soft);
  }

  /* Chips de classe no idioma visual da Dima (.gla-dima-filter). */
  .gla-tierlist-class-filters {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 6px;
    min-width: 0;
    width: 100%;
  }

  .gla-tierlist-class-filter,
  #content.mw-body .gla-tierlist-root .gla-tierlist-class-filter {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    flex: 0 0 auto;
    margin: 0;
    padding: 4px 12px 4px 6px;
    border-radius: 999px;
    border: var(--gla-ctrl-border-w) solid var(--gla-ctrl-border);
    background: var(--gla-paper-2);
    cursor: pointer;
    appearance: none;
    -webkit-appearance: none;
    box-sizing: border-box;
    font-family: "Noto Sans", "Segoe UI", sans-serif;
    font-size: 13px;
    font-weight: 500;
    letter-spacing: 0;
    color: var(--gla-ink-2);
    line-height: 1;
    transition:
      border-color 0.15s,
      background 0.15s,
      color 0.15s;
  }

  .gla-tierlist-class-filter::-moz-focus-inner {
    border: 0;
    padding: 0;
  }

  .gla-tierlist-class-filter:hover,
  #content.mw-body .gla-tierlist-root .gla-tierlist-class-filter:hover {
    border-color: var(--gla-accent);
  }

  .gla-tierlist-class-filter img {
    width: 32px;
    height: 32px;
    flex-shrink: 0;
    object-fit: contain;
    opacity: 0.55;
    transition: opacity 0.15s;
    filter: none;
    -webkit-filter: none;
  }

  .gla-tierlist-class-filter img.is-missing {
    display: none;
  }

  .gla-tierlist-class-filter--text-only {
    padding-left: 12px;
    padding-right: 12px;
  }

  .gla-tierlist-class-filter span {
    font-family: "Noto Sans", "Segoe UI", sans-serif;
    font-size: 13px;
    font-weight: 500;
    color: inherit;
    white-space: nowrap;
  }

  .gla-tierlist-class-filter.is-active,
  #content.mw-body .gla-tierlist-root .gla-tierlist-class-filter.is-active {
    border-color: var(--gla-accent);
    background: var(--gla-accent-soft);
    color: var(--gla-accent);
  }

  .gla-tierlist-class-filter.is-active img {
    opacity: 1;
  }

  /* ---------- Board ---------- */

  .gla-tierlist-board {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    margin-bottom: 0.85rem;
    overflow: visible;
  }

  .gla-tierlist-row {
    display: grid;
    grid-template-columns: 4rem 1fr;
    min-height: 6.5rem;
    border: 1px solid var(--gla-rule);
    border-radius: 12px;
    /* visible: overflow:hidden clipava o tooltip do nome acima da medalha */
    overflow: visible;
    background: var(--gla-paper);
  }

  .gla-tierlist-row.is-drop-target {
    outline: 2px solid var(--gla-accent);
    outline-offset: 1px;
  }

  .gla-tierlist-label {
    display: flex;
    align-items: center;
    justify-content: center;
    font-family: "Space Grotesk", sans-serif;
    font-weight: 700;
    font-size: 1.4rem;
    letter-spacing: 0.04em;
    color: #111827;
    user-select: none;
    cursor: pointer;
    /* cantos arredondados no label (row não usa mais overflow:hidden) */
    border-radius: 11px 0 0 11px;
  }

  .gla-tierlist-row[data-rank="S"] .gla-tierlist-label {
    background: #ff7f7f;
  }
  .gla-tierlist-row[data-rank="A"] .gla-tierlist-label {
    background: #ffbf7f;
  }
  .gla-tierlist-row[data-rank="B"] .gla-tierlist-label {
    background: #ffdf7f;
  }
  .gla-tierlist-row[data-rank="C"] .gla-tierlist-label {
    background: #ffff7f;
  }
  .gla-tierlist-row[data-rank="D"] .gla-tierlist-label {
    background: #bfff7f;
  }

  .gla-tierlist-slots {
    display: flex;
    flex-wrap: wrap;
    gap: 0.25rem;
    align-content: flex-start;
    padding: 0.5rem;
    min-height: 6.5rem;
    overflow: visible;
  }

  /* ---------- Pool ---------- */

  .gla-tierlist-pool-wrap {
    background: var(--gla-paper);
    border: 1px solid var(--gla-rule);
    border-radius: 14px;
    padding: 0.9rem 1rem 1rem;
    overflow: visible;
  }

  .gla-tierlist-pool-head {
    display: flex;
    align-items: baseline;
    gap: 0.65rem;
    margin-bottom: 0.65rem;
  }

  .gla-tierlist-pool-head h3 {
    margin: 0;
    font-family: "Space Grotesk", sans-serif;
    font-size: 0.95rem;
    font-weight: 700;
  }

  .gla-tierlist-pool-count {
    color: var(--gla-dim);
    font-size: 0.8rem;
    font-weight: 600;
  }

  .gla-tierlist-pool {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 0.25rem;
    min-height: 4.5rem;
    overflow: visible;
  }

  .gla-tierlist-pool.is-drop-target {
    outline: 2px dashed var(--gla-accent);
    outline-offset: 2px;
    border-radius: 10px;
  }

  /* Pool: medalhas um pouco mais suaves que as da board (modo claro incomoda). */
  .gla-tierlist-pool .gla-tierlist-char-art img {
    opacity: 0.9;
    filter: saturate(0.88) brightness(0.98);
    transition:
      opacity 0.15s ease,
      filter 0.15s ease;
  }

  .gla-tierlist-pool .gla-tierlist-char:hover .gla-tierlist-char-art img,
  .gla-tierlist-pool
    .gla-tierlist-char:focus-visible
    .gla-tierlist-char-art
    img,
  .gla-tierlist-pool .gla-tierlist-char.is-selected .gla-tierlist-char-art img {
    opacity: 1;
    filter: none;
  }

  /* ---------- Character card ---------- */

  .gla-tierlist-char {
    position: relative;
    flex: 0 0 104px;
    width: 104px;
    min-width: 104px;
    cursor: grab;
    border: 0;
    background: transparent;
    padding: 4px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0;
    transition:
      transform 0.12s ease,
      opacity 0.15s;
    touch-action: none;
    user-select: none;
    -webkit-user-select: none;
    /* sem content-visibility: auto — paint containment clipava o tooltip fora do box */
    overflow: visible;
    z-index: 0;
  }

  .gla-tierlist-char:active {
    cursor: grabbing;
  }

  .gla-tierlist-char:focus,
  .gla-tierlist-char:focus-visible,
  .gla-tierlist-char:focus-within,
  .gla-tierlist-char.is-selected,
  .gla-tierlist-char.is-selected .gla-tierlist-char-art,
  .gla-tierlist-char.is-selected .gla-tierlist-char-art img {
    outline: none !important;
    outline-offset: 0 !important;
    box-shadow: none !important;
  }

  /* Sem scale/filter no hover: Chromium re-rasteriza a medalha e perde nitidez. */
  .gla-tierlist-char:hover,
  .gla-tierlist-char:focus-visible,
  .gla-tierlist-char.is-selected {
    transform: translate3d(0, -2px, 0);
    z-index: 30;
  }

  .gla-tierlist-char.is-hidden {
    display: none;
  }

  .gla-tierlist-char.is-dragging {
    opacity: 0.45;
    z-index: 40;
  }

  .gla-tierlist-char-art {
    width: 96px;
    height: 96px;
    background: transparent;
    overflow: visible;
    line-height: 0;
    flex-shrink: 0;
  }

  .gla-tierlist-char-art img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    display: block;
    background: transparent;
    pointer-events: none;
    transform: translateZ(0);
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
  }

  /* Nome só no tooltip (hover/foco/seleção). Texto sempre preto; pontinha pro medal. */
  .gla-tierlist-char-name {
    position: absolute;
    left: 50%;
    bottom: calc(100% + 6px);
    transform: translateX(-50%) translateY(4px);
    margin: 0;
    padding: 0.45rem 0.8rem;
    max-width: 16rem;
    border-radius: 10px;
    border: 1px solid var(--gla-rule);
    background: #ffffff;
    box-shadow: 0 8px 22px rgba(15, 23, 42, 0.18);
    font-family: "Noto Sans", "Segoe UI", sans-serif;
    font-size: 0.9375rem;
    font-weight: 700;
    letter-spacing: 0;
    line-height: 1.25;
    text-align: center;
    color: #0f172a !important;
    white-space: nowrap;
    overflow: visible;
    text-overflow: ellipsis;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition:
      opacity 0.12s ease,
      transform 0.12s ease,
      visibility 0.12s;
    z-index: 50;
  }

  .gla-tierlist-char-name::after {
    content: "";
    position: absolute;
    left: 50%;
    top: 100%;
    width: 10px;
    height: 10px;
    margin-left: -5px;
    margin-top: -5px;
    background: #ffffff;
    border-right: 1px solid var(--gla-rule);
    border-bottom: 1px solid var(--gla-rule);
    transform: rotate(45deg);
    box-shadow: 2px 2px 4px rgba(15, 23, 42, 0.06);
  }

  html.client-darkmode .gla-tierlist-char-name,
  html.skin-theme-clientpref-night .gla-tierlist-char-name {
    background: #1e2430;
    color: #e8eef5 !important;
    border-color: #3a4252;
  }

  html.client-darkmode .gla-tierlist-char-name::after,
  html.skin-theme-clientpref-night .gla-tierlist-char-name::after {
    background: #1e2430;
    border-right-color: #3a4252;
    border-bottom-color: #3a4252;
  }

  .gla-tierlist-char:hover .gla-tierlist-char-name,
  .gla-tierlist-char:focus-visible .gla-tierlist-char-name,
  .gla-tierlist-char.is-selected .gla-tierlist-char-name {
    opacity: 1;
    visibility: visible;
    transform: translateX(-50%) translateY(0);
  }

  .gla-tierlist-char.is-dragging .gla-tierlist-char-name {
    opacity: 0;
    visibility: hidden;
  }

  /* ---------- Empty state ---------- */

  .gla-tierlist-empty {
    text-align: center;
    padding: 1.5rem 0.5rem 0.5rem;
    color: var(--gla-ink-2);
  }

  .gla-tierlist-empty p {
    margin: 0 0 0.65rem;
  }

  .gla-tierlist-reset-filters {
    cursor: pointer;
    border: 1px solid var(--gla-rule);
    background: var(--gla-paper-2);
    color: var(--gla-accent);
    font-weight: 600;
    font-family: inherit;
    padding: 0.4rem 0.85rem;
    border-radius: 8px;
  }

  .gla-tierlist-reset-filters:hover {
    background: var(--gla-accent-soft);
    border-color: var(--gla-accent);
  }

  /* ---------- Responsivo ---------- */

  @media (max-width: 640px) {
    .gla-tierlist-pill--btn {
      margin-left: 0;
    }

    /* Igual Dima: só ícone no mobile; title/aria no botão mantém o rótulo. */
    .gla-tierlist-class-filter span {
      display: none;
    }

    .gla-tierlist-class-filter {
      padding: 4px;
    }

    .gla-tierlist-row {
      grid-template-columns: 3rem 1fr;
    }

    .gla-tierlist-label {
      font-size: 1.05rem;
    }

    .gla-tierlist-char {
      flex: 0 0 88px;
      width: 88px;
      min-width: 88px;
    }

    .gla-tierlist-char-art {
      width: 80px;
      height: 80px;
    }

    .gla-tierlist-char-name {
      font-size: 0.875rem;
      max-width: 13rem;
      padding: 0.4rem 0.7rem;
    }
  }
</style>

<script>
  (function () {
    function boot() {
      var root = document.querySelector(".gla-tierlist-root");
      if (!root || root.__glaTierListInit) return;
      root.__glaTierListInit = true;

      var STORAGE_KEY = "gla-tierlist";
      var STORAGE_NAME_KEY = "gla-tierlist-name";
      var ONLINE_WIKI = "https://wiki.gla.com.br";
      var lang = "pt";
      var t = null;

      var RANKS = ["S", "A", "B", "C", "D"];

      var GAME_TIERS = [
        { id: "all", labelKey: "tierAll" },
        { id: "diamond", labelKey: "tierDiamond" },
        { id: "gold", labelKey: "tierGold" },
        { id: "silver", labelKey: "tierSilver" },
        { id: "bronze", labelKey: "tierBronze" },
      ];

      var RARITY_ORDER = { diamond: 0, gold: 1, silver: 2, bronze: 3 };

      /* IDs de filters no Módulo:TierList (legenda no topo do .lua). */
      var CLASS_FILTERS = [
        { id: "tank", icon: "tank.png" },
        { id: "dps", icon: "dps.png" },
        { id: "support", icon: "support.png" },
        { id: "fighter", icon: "fighter.png" },
        { id: "shooter", icon: "shooter.png" },
        { id: "slasher", icon: "slasher.png" },
        { id: "especialist", icon: "especialist.png" },
      ];

      var CLASS_LABELS = {
        pt: {
          tank: "Tanque",
          dps: "DPS",
          support: "Suporte",
          fighter: "Lutador",
          shooter: "Atirador",
          slasher: "Cortante",
          especialist: "Especialista",
        },
        en: {
          tank: "Tank",
          dps: "DPS",
          support: "Support",
          fighter: "Fighter",
          shooter: "Shooter",
          slasher: "Slasher",
          especialist: "Specialist",
        },
      };

      var STRINGS = {
        pt: {
          title: "Tier List",
          reset: "Limpar tier list",
          download: "Baixar imagem",
          downloadBusy: "Gerando…",
          downloadError: "Não foi possível gerar a imagem. Tente de novo.",
          listNamePlaceholder: "Nome da sua tier list...",
          ranked0: "0 ranqueados",
          ranked1: "1 ranqueado",
          rankedN: "{n} ranqueados",
          searchPlaceholder: "Filtrar personagem...",
          filtersAria: "Filtros",
          classFiltersAria: "Filtros de classe",
          poolTitle: "Não ranqueados",
          empty: "Nenhum personagem encontrado.",
          resetFilters: "Limpar filtros",
          tierAll: "Todos",
          tierDiamond: "Diamante",
          tierGold: "Ouro",
          tierSilver: "Prata",
          tierBronze: "Bronze",
          poolCount: "{n}",
        },
        en: {
          title: "Tier List",
          reset: "Clear tier list",
          download: "Download image",
          downloadBusy: "Generating…",
          downloadError: "Could not generate the image. Please try again.",
          listNamePlaceholder: "Name your tier list...",
          ranked0: "0 ranked",
          ranked1: "1 ranked",
          rankedN: "{n} ranked",
          searchPlaceholder: "Filter character...",
          filtersAria: "Filters",
          classFiltersAria: "Class filters",
          poolTitle: "Unranked",
          empty: "No characters found.",
          resetFilters: "Clear filters",
          tierAll: "All",
          tierDiamond: "Diamond",
          tierGold: "Gold",
          tierSilver: "Silver",
          tierBronze: "Bronze",
          poolCount: "{n}",
        },
      };

      function getWidgetLang() {
        if (
          window.glaLang &&
          typeof window.glaLang.getWidgetLang === "function"
        ) {
          return window.glaLang.getWidgetLang() === "en" ? "en" : "pt";
        }
        var attr = (
          document.documentElement.getAttribute("data-gla-lang") || ""
        ).toLowerCase();
        if (attr === "en") return "en";
        try {
          var saved = (localStorage.getItem("glaLang") || "").toLowerCase();
          if (saved.indexOf("en") === 0) return "en";
        } catch (e) {}
        return "pt";
      }

      var boardEl = root.querySelector("[data-board]");
      var poolEl = root.querySelector("[data-pool]");
      var filtersEl = root.querySelector("[data-filters]");
      var classFiltersEl = root.querySelector("[data-class-filters]");
      var classBarEl = root.querySelector(".gla-tierlist-classbar");
      var emptyEl = root.querySelector(".gla-tierlist-empty");
      var countEl = root.querySelector("[data-count]");
      var poolCountEl = root.querySelector("[data-pool-count]");
      var searchInput = root.querySelector(".gla-tierlist-search");
      var resetBtn = root.querySelector("[data-reset]");
      var downloadBtn = root.querySelector("[data-download]");
      var listNameInput = root.querySelector("[data-list-name]");
      var resetFiltersBtn = root.querySelector("[data-reset-filters]");
      var characters = [];
      var placement = {};
      var tierOrder = { S: [], A: [], B: [], C: [], D: [] };
      var charNodes = {};
      var rowSlots = {};
      var activeGameTier = "all";
      var activeClassFilters = [];
      var searchTerm = "";
      var searchTimeout = null;
      var selectedId = null;
      var dragId = null;

      var imgObserver = null;
      if ("IntersectionObserver" in window) {
        imgObserver = new IntersectionObserver(
          function (entries) {
            entries.forEach(function (entry) {
              if (!entry.isIntersecting) return;
              var img = entry.target;
              var src = img.getAttribute("data-src");
              if (src) {
                img.src = src;
                img.removeAttribute("data-src");
              }
              imgObserver.unobserve(img);
            });
          },
          { rootMargin: "200px 0px", threshold: 0.01 },
        );
      }

      function normalize(s) {
        return (s || "")
          .toLowerCase()
          .normalize("NFD")
          .replace(/[\u0300-\u036f]/g, "");
      }

      function readCharacterList() {
        var source = document.querySelector(".gla-tierlist-source");
        if (!source) return [];
        var dataEl = source.querySelector(".gla-tierlist-data");
        var raw = dataEl
          ? dataEl.value || dataEl.textContent || ""
          : source.textContent;
        raw = (raw || "").trim();
        if (!raw) return [];
        try {
          return JSON.parse(raw);
        } catch (e1) {
          var start = raw.indexOf("[");
          var end = raw.lastIndexOf("]");
          if (start === -1 || end === -1) return [];
          try {
            return JSON.parse(raw.slice(start, end + 1));
          } catch (e2) {
            console.error("[TierList] JSON invalido", e2);
            return [];
          }
        }
      }

      function cleanFileName(fileName) {
        var clean = String(fileName || "").replace(/^Arquivo:|^File:/i, "");
        try {
          clean = decodeURIComponent(clean);
        } catch (e) {}
        return clean.replace(/ /g, "_");
      }

      /* Path direto /images/a/ab/File.png (MD5 do nome) — evita thumb.php (quebrado) e redirect do FilePath. */
      function md5hex(string) {
        function add(x, y) {
          var l = (x & 0xffff) + (y & 0xffff);
          var m = (x >> 16) + (y >> 16) + (l >> 16);
          return (m << 16) | (l & 0xffff);
        }
        function rol(n, c) {
          return (n << c) | (n >>> (32 - c));
        }
        function cmn(q, a, b, x, s, t) {
          return add(rol(add(add(a, q), add(x, t)), s), b);
        }
        function ff(a, b, c, d, x, s, t) {
          return cmn((b & c) | (~b & d), a, b, x, s, t);
        }
        function gg(a, b, c, d, x, s, t) {
          return cmn((b & d) | (c & ~d), a, b, x, s, t);
        }
        function hh(a, b, c, d, x, s, t) {
          return cmn(b ^ c ^ d, a, b, x, s, t);
        }
        function ii(a, b, c, d, x, s, t) {
          return cmn(c ^ (b | ~d), a, b, x, s, t);
        }
        var raw = unescape(encodeURIComponent(string));
        var x = [],
          i;
        for (i = 0; i < raw.length * 8; i += 8)
          x[i >> 5] |= (raw.charCodeAt(i / 8) & 255) << (i % 32);
        x[(raw.length * 8) >> 5] |= 128 << ((raw.length * 8) % 32);
        x[(((raw.length + 64) >>> 9) << 4) + 14] = raw.length * 8;
        var a = 1732584193,
          b = -271733879,
          c = -1732584194,
          d = 271733878;
        for (i = 0; i < x.length; i += 16) {
          var oa = a,
            ob = b,
            oc = c,
            od = d;
          a = ff(a, b, c, d, x[i], 7, -680876936);
          d = ff(d, a, b, c, x[i + 1], 12, -389564586);
          c = ff(c, d, a, b, x[i + 2], 17, 606105819);
          b = ff(b, c, d, a, x[i + 3], 22, -1044525330);
          a = ff(a, b, c, d, x[i + 4], 7, -176418897);
          d = ff(d, a, b, c, x[i + 5], 12, 1200080426);
          c = ff(c, d, a, b, x[i + 6], 17, -1473231341);
          b = ff(b, c, d, a, x[i + 7], 22, -45705983);
          a = ff(a, b, c, d, x[i + 8], 7, 1770035416);
          d = ff(d, a, b, c, x[i + 9], 12, -1958414417);
          c = ff(c, d, a, b, x[i + 10], 17, -42063);
          b = ff(b, c, d, a, x[i + 11], 22, -1990404162);
          a = ff(a, b, c, d, x[i + 12], 7, 1804603682);
          d = ff(d, a, b, c, x[i + 13], 12, -40341101);
          c = ff(c, d, a, b, x[i + 14], 17, -1502002290);
          b = ff(b, c, d, a, x[i + 15], 22, 1236535329);
          a = gg(a, b, c, d, x[i + 1], 5, -165796510);
          d = gg(d, a, b, c, x[i + 6], 9, -1069501632);
          c = gg(c, d, a, b, x[i + 11], 14, 643717713);
          b = gg(b, c, d, a, x[i], 20, -373897302);
          a = gg(a, b, c, d, x[i + 5], 5, -701558691);
          d = gg(d, a, b, c, x[i + 10], 9, 38016083);
          c = gg(c, d, a, b, x[i + 15], 14, -660478335);
          b = gg(b, c, d, a, x[i + 4], 20, -405537848);
          a = gg(a, b, c, d, x[i + 9], 5, 568446438);
          d = gg(d, a, b, c, x[i + 14], 9, -1019803690);
          c = gg(c, d, a, b, x[i + 3], 14, -187363961);
          b = gg(b, c, d, a, x[i + 8], 20, 1163531501);
          a = gg(a, b, c, d, x[i + 13], 5, -1444681467);
          d = gg(d, a, b, c, x[i + 2], 9, -51403784);
          c = gg(c, d, a, b, x[i + 7], 14, 1735328473);
          b = gg(b, c, d, a, x[i + 12], 20, -1926607734);
          a = hh(a, b, c, d, x[i + 5], 4, -378558);
          d = hh(d, a, b, c, x[i + 8], 11, -2022574463);
          c = hh(c, d, a, b, x[i + 11], 16, 1839030562);
          b = hh(b, c, d, a, x[i + 14], 23, -35309556);
          a = hh(a, b, c, d, x[i + 1], 4, -1530992060);
          d = hh(d, a, b, c, x[i + 4], 11, 1272893353);
          c = hh(c, d, a, b, x[i + 7], 16, -155497632);
          b = hh(b, c, d, a, x[i + 10], 23, -1094730640);
          a = hh(a, b, c, d, x[i + 13], 4, 681279174);
          d = hh(d, a, b, c, x[i], 11, -358537222);
          c = hh(c, d, a, b, x[i + 3], 16, -722521979);
          b = hh(b, c, d, a, x[i + 6], 23, 76029189);
          a = hh(a, b, c, d, x[i + 9], 4, -640364487);
          d = hh(d, a, b, c, x[i + 12], 11, -421815835);
          c = hh(c, d, a, b, x[i + 15], 16, 530742520);
          b = hh(b, c, d, a, x[i + 2], 23, -995338651);
          a = ii(a, b, c, d, x[i], 6, -198630844);
          d = ii(d, a, b, c, x[i + 7], 10, 1126891415);
          c = ii(c, d, a, b, x[i + 14], 15, -1416354905);
          b = ii(b, c, d, a, x[i + 5], 21, -57434055);
          a = ii(a, b, c, d, x[i + 12], 6, 1700485571);
          d = ii(d, a, b, c, x[i + 3], 10, -1894986606);
          c = ii(c, d, a, b, x[i + 10], 15, -1051523);
          b = ii(b, c, d, a, x[i + 1], 21, -2054922799);
          a = ii(a, b, c, d, x[i + 8], 6, 1873313359);
          d = ii(d, a, b, c, x[i + 15], 10, -30611744);
          c = ii(c, d, a, b, x[i + 6], 15, -1560198380);
          b = ii(b, c, d, a, x[i + 13], 21, 1309151649);
          a = ii(a, b, c, d, x[i + 4], 6, -145523070);
          d = ii(d, a, b, c, x[i + 11], 10, -1120210379);
          c = ii(c, d, a, b, x[i + 2], 15, 718787259);
          b = ii(b, c, d, a, x[i + 9], 21, -343485551);
          a = add(a, oa);
          b = add(b, ob);
          c = add(c, oc);
          d = add(d, od);
        }
        function hex(n) {
          var s = "",
            j,
            hexTab = "0123456789abcdef";
          for (j = 0; j < 4; j++)
            s +=
              hexTab.charAt((n >> (j * 8 + 4)) & 15) +
              hexTab.charAt((n >> (j * 8)) & 15);
          return s;
        }
        return hex(a) + hex(b) + hex(c) + hex(d);
      }

      function medalDirectURL(fileName) {
        var clean = cleanFileName(fileName);
        if (!clean) return "";
        var h = md5hex(clean);
        return (
          ONLINE_WIKI +
          "/images/" +
          h.charAt(0) +
          "/" +
          h.slice(0, 2) +
          "/" +
          encodeURIComponent(clean)
        );
      }

      function medalFilePathURL(fileName) {
        var clean = cleanFileName(fileName);
        if (!clean) return "";
        return (
          ONLINE_WIKI +
          "/index.php?title=Especial:FilePath/" +
          encodeURIComponent(clean)
        );
      }

      function bindCharImage(img, ch) {
        if (!img) return;
        var medal = (ch.medal || "").trim();
        if (!medal) return;
        var direct = medalDirectURL(medal);
        var fallback = medalFilePathURL(medal);
        img.decoding = "async";
        img.alt = ch.name || "";
        img.onerror = function () {
          if (img.dataset.fb === "1") return;
          img.dataset.fb = "1";
          img.src = fallback;
        };
        if (imgObserver) {
          img.loading = "lazy";
          img.setAttribute("data-src", direct);
          imgObserver.observe(img);
        } else {
          img.loading = "lazy";
          img.src = direct;
        }
      }

      function sameOriginImageUrl(src) {
        if (!src) return "";
        try {
          var u = new URL(src, location.href);
          if (u.origin === location.origin) return u.pathname + u.search;
        } catch (e) {}
        return src;
      }

      function loadImageForExport(src) {
        return new Promise(function (resolve) {
          if (!src) {
            resolve(null);
            return;
          }
          var url = sameOriginImageUrl(src);
          var img = new Image();
          img.onload = function () {
            resolve(img);
          };
          img.onerror = function () {
            if (url !== src) {
              var img2 = new Image();
              img2.onload = function () {
                resolve(img2);
              };
              img2.onerror = function () {
                resolve(null);
              };
              img2.src = src;
              return;
            }
            resolve(null);
          };
          img.src = url;
        });
      }

      function ensureRankedImagesReady() {
        var tasks = [];
        RANKS.forEach(function (rank) {
          var slots = rowSlots[rank];
          if (!slots) return;
          Array.prototype.forEach.call(
            slots.querySelectorAll(".gla-tierlist-char img"),
            function (img) {
              var src =
                img.getAttribute("src") || img.getAttribute("data-src") || "";
              if (!src) return;
              if (img.getAttribute("data-src")) {
                img.src = src;
                img.removeAttribute("data-src");
                if (imgObserver) {
                  try {
                    imgObserver.unobserve(img);
                  } catch (e) {}
                }
              }
              if (img.complete && img.naturalWidth > 0) return;
              tasks.push(
                new Promise(function (resolve) {
                  var done = function () {
                    resolve();
                  };
                  img.addEventListener("load", done, { once: true });
                  img.addEventListener("error", done, { once: true });
                }),
              );
            },
          );
        });
        return Promise.all(tasks);
      }

      function gatherExportRows() {
        return RANKS.map(function (rank) {
          var slots = rowSlots[rank];
          var chars = [];
          if (slots) {
            Array.prototype.forEach.call(
              slots.querySelectorAll(".gla-tierlist-char"),
              function (btn) {
                if (btn.classList.contains("is-hidden")) return;
                var ch = btn.__ch || {};
                var img = btn.querySelector("img");
                var src =
                  (img &&
                    (img.currentSrc ||
                      img.src ||
                      img.getAttribute("data-src"))) ||
                  "";
                chars.push({
                  name: ch.shortName || ch.name || btn.dataset.id || "",
                  src: src,
                  domImg:
                    img && img.complete && img.naturalWidth > 0 ? img : null,
                });
              },
            );
          }
          return { rank: rank, chars: chars };
        });
      }

      function getListTitle() {
        var custom = listNameInput
          ? String(listNameInput.value || "").trim()
          : "";
        if (custom) return custom;
        return t && t.title ? t.title : "Tier List";
      }

      function sanitizeDownloadName(name) {
        var s = String(name || "gla-tier-list")
          .normalize("NFD")
          .replace(/[\u0300-\u036f]/g, "")
          .replace(/[<>:"/\\|?*\x00-\x1f]+/g, "")
          .replace(/\s+/g, "-")
          .replace(/-+/g, "-")
          .replace(/^-|-$/g, "");
        if (!s) s = "gla-tier-list";
        if (s.length > 60) s = s.slice(0, 60).replace(/-$/, "");
        return s + ".png";
      }

      function loadListName() {
        if (!listNameInput) return;
        try {
          var saved = localStorage.getItem(STORAGE_NAME_KEY);
          if (saved) listNameInput.value = saved;
        } catch (e) {}
      }

      function persistListName() {
        if (!listNameInput) return;
        try {
          var v = String(listNameInput.value || "").trim();
          if (v) localStorage.setItem(STORAGE_NAME_KEY, v);
          else localStorage.removeItem(STORAGE_NAME_KEY);
        } catch (e) {}
      }

      function exportTierListPng() {
        if (!downloadBtn || downloadBtn.disabled) return;
        var label = t && t.download ? t.download : "Baixar imagem";
        var busy = t && t.downloadBusy ? t.downloadBusy : "Gerando…";
        var listTitle = getListTitle();
        var fileName = sanitizeDownloadName(listTitle);
        downloadBtn.disabled = true;
        downloadBtn.textContent = busy;

        ensureRankedImagesReady()
          .then(function () {
            var rows = gatherExportRows();
            /* Export sempre no visual do modo escuro (fundo + contraste). */
            var colors = {
              bg: "#0f141c",
              paper: "#171c26",
              ink: "#e8eef5",
              ink2: "#9aa6b5",
              rule: "#3a4252",
              labels: {
                S: "#ff7f7f",
                A: "#ffbf7f",
                B: "#ffdf7f",
                C: "#ffff7f",
                D: "#bfff7f",
              },
            };

            var pad = 28;
            var titleH = 90;
            var labelW = 72;
            var medal = 84;
            var gap = 10;
            var nameH = 18;
            var cellW = medal + gap;
            var cellH = medal + nameH + 10;
            var rowPad = 14;
            var contentW = 980;
            var cols = Math.max(
              1,
              Math.floor((contentW - labelW - rowPad * 2) / cellW),
            );

            var rowHeights = rows.map(function (row) {
              var lines = Math.max(
                1,
                Math.ceil(Math.max(row.chars.length, 1) / cols),
              );
              return Math.max(112, lines * cellH + rowPad * 2);
            });

            var width = pad * 2 + contentW;
            var height =
              pad * 2 +
              titleH +
              rowHeights.reduce(function (a, b) {
                return a + b + 12;
              }, 0);
            var scale = 2;
            var canvas = document.createElement("canvas");
            canvas.width = Math.round(width * scale);
            canvas.height = Math.round(height * scale);
            var ctx = canvas.getContext("2d");
            ctx.scale(scale, scale);

            ctx.fillStyle = colors.bg;
            ctx.fillRect(0, 0, width, height);

            var titleSize = 28;
            var logoFile = "WIKIGLAlogo.png";
            var bgFile = "Fundodawikiglatest.png";
            function loadWikiExportImage(fileName) {
              return loadImageForExport(medalDirectURL(fileName)).then(
                function (img) {
                  if (img) return img;
                  return loadImageForExport(medalFilePathURL(fileName));
                },
              );
            }
            var loads = [
              loadWikiExportImage(logoFile),
              loadWikiExportImage(bgFile),
            ];
            rows.forEach(function (row) {
              row.chars.forEach(function (ch) {
                if (ch.domImg) {
                  ch.image = ch.domImg;
                  return;
                }
                loads.push(
                  loadImageForExport(ch.src).then(function (img) {
                    ch.image = img;
                  }),
                );
              });
            });

            return Promise.all(loads).then(function (results) {
              var wikiLogo = results[0] || null;
              var wikiBg = results[1] || null;

              if (wikiBg) {
                ctx.save();
                ctx.globalAlpha = 0.3;
                drawCover(ctx, wikiBg, 0, 0, width, height);
                ctx.restore();
              }

              if (wikiLogo && wikiLogo.naturalHeight) {
                var logoH = 78;
                var logoW = Math.max(
                  1,
                  Math.round(
                    (wikiLogo.naturalWidth / wikiLogo.naturalHeight) * logoH,
                  ),
                );
                ctx.drawImage(wikiLogo, pad, pad, logoW, logoH);
              }

              ctx.fillStyle = colors.ink;
              ctx.font =
                "700 " +
                titleSize +
                "px 'Space Grotesk', 'Noto Sans', sans-serif";
              ctx.textAlign = "center";
              ctx.textBaseline = "middle";
              ctx.fillText(
                truncateText(ctx, listTitle, contentW),
                pad + contentW / 2,
                pad + 39,
              );
              ctx.textAlign = "left";
              ctx.textBaseline = "top";

              var y = pad + titleH;
              rows.forEach(function (row, idx) {
                var h = rowHeights[idx];
                var x0 = pad;
                roundRect(ctx, x0, y, contentW, h, 14);
                ctx.fillStyle = colors.paper;
                ctx.fill();
                ctx.strokeStyle = colors.rule;
                ctx.lineWidth = 1;
                ctx.stroke();

                ctx.fillStyle = colors.labels[row.rank] || "#ccc";
                ctx.fillRect(x0, y, labelW, h);
                ctx.fillStyle = "#111827";
                ctx.font = "700 26px 'Space Grotesk', 'Noto Sans', sans-serif";
                ctx.textAlign = "center";
                ctx.textBaseline = "middle";
                ctx.fillText(row.rank, x0 + labelW / 2, y + h / 2);
                ctx.textAlign = "left";
                ctx.textBaseline = "top";

                row.chars.forEach(function (ch, i) {
                  var col = i % cols;
                  var line = Math.floor(i / cols);
                  var cx = x0 + labelW + rowPad + col * cellW + medal / 2;
                  var cy = y + rowPad + line * cellH + medal / 2;
                  var ix = cx - medal / 2;
                  var iy = cy - medal / 2;

                  /* Medalhas já são redondas com fundo transparente — sem círculo extra. */
                  if (ch.image) {
                    drawContain(ctx, ch.image, ix, iy, medal, medal);
                  }

                  ctx.fillStyle = colors.ink2;
                  ctx.font = "600 11px 'Noto Sans', sans-serif";
                  ctx.textAlign = "center";
                  ctx.textBaseline = "top";
                  var labelTxt = truncateText(ctx, ch.name, medal + 4);
                  ctx.fillText(labelTxt, cx, cy + medal / 2 + 4);
                  ctx.textAlign = "left";
                });

                y += h + 12;
              });

              return new Promise(function (resolve, reject) {
                if (canvas.toBlob) {
                  canvas.toBlob(function (blob) {
                    if (!blob) reject(new Error("blob"));
                    else resolve(blob);
                  }, "image/png");
                } else {
                  try {
                    var data = canvas.toDataURL("image/png");
                    var bin = atob(data.split(",")[1]);
                    var arr = new Uint8Array(bin.length);
                    for (var i = 0; i < bin.length; i++)
                      arr[i] = bin.charCodeAt(i);
                    resolve(new Blob([arr], { type: "image/png" }));
                  } catch (err) {
                    reject(err);
                  }
                }
              });
            });
          })
          .then(function (blob) {
            var url = URL.createObjectURL(blob);
            var a = document.createElement("a");
            a.href = url;
            a.download = fileName;
            document.body.appendChild(a);
            a.click();
            a.remove();
            setTimeout(function () {
              URL.revokeObjectURL(url);
            }, 1500);
          })
          .catch(function () {
            window.alert(
              t && t.downloadError ? t.downloadError : "Erro ao gerar imagem.",
            );
          })
          .then(function () {
            downloadBtn.disabled = false;
            downloadBtn.textContent = label;
          });
      }

      function roundRect(ctx, x, y, w, h, r) {
        var rr = Math.min(r, w / 2, h / 2);
        ctx.beginPath();
        ctx.moveTo(x + rr, y);
        ctx.arcTo(x + w, y, x + w, y + h, rr);
        ctx.arcTo(x + w, y + h, x, y + h, rr);
        ctx.arcTo(x, y + h, x, y, rr);
        ctx.arcTo(x, y, x + w, y, rr);
        ctx.closePath();
      }

      function drawContain(ctx, img, x, y, w, h) {
        var iw = img.naturalWidth || img.width;
        var ih = img.naturalHeight || img.height;
        if (!iw || !ih) return;
        var scale = Math.min(w / iw, h / ih);
        var dw = iw * scale;
        var dh = ih * scale;
        ctx.drawImage(img, x + (w - dw) / 2, y + (h - dh) / 2, dw, dh);
      }

      function drawCover(ctx, img, x, y, w, h) {
        var iw = img.naturalWidth || img.width;
        var ih = img.naturalHeight || img.height;
        if (!iw || !ih) return;
        var scale = Math.max(w / iw, h / ih);
        var dw = iw * scale;
        var dh = ih * scale;
        ctx.drawImage(img, x + (w - dw) / 2, y + (h - dh) / 2, dw, dh);
      }

      function truncateText(ctx, text, maxW) {
        var s = String(text || "");
        if (ctx.measureText(s).width <= maxW) return s;
        while (s.length > 1 && ctx.measureText(s + "…").width > maxW) {
          s = s.slice(0, -1);
        }
        return s + "…";
      }

      function emptyTierOrder() {
        return { S: [], A: [], B: [], C: [], D: [] };
      }

      function loadPlacement() {
        placement = {};
        tierOrder = emptyTierOrder();
        try {
          var raw = localStorage.getItem(STORAGE_KEY);
          var parsed = raw ? JSON.parse(raw) : null;
          if (!parsed || typeof parsed !== "object") return;

          /* Formato novo: { S: [id, ...], A: [...], ... } */
          if (
            Array.isArray(parsed.S) ||
            Array.isArray(parsed.A) ||
            Array.isArray(parsed.B)
          ) {
            RANKS.forEach(function (rank) {
              var list = Array.isArray(parsed[rank]) ? parsed[rank] : [];
              list.forEach(function (id) {
                if (typeof id === "string" && id && !placement[id]) {
                  placement[id] = rank;
                  tierOrder[rank].push(id);
                }
              });
            });
            return;
          }

          /* Legado: { charId: "S", ... } */
          Object.keys(parsed).forEach(function (id) {
            var rank = parsed[id];
            if (
              typeof rank === "string" &&
              RANKS.indexOf(rank) !== -1 &&
              !placement[id]
            ) {
              placement[id] = rank;
              tierOrder[rank].push(id);
            }
          });
        } catch (e) {
          placement = {};
          tierOrder = emptyTierOrder();
        }
      }

      function persistPlacement() {
        var data = emptyTierOrder();
        placement = {};
        RANKS.forEach(function (rank) {
          var slots = rowSlots[rank];
          if (!slots) return;
          slots.querySelectorAll(".gla-tierlist-char").forEach(function (node) {
            var id = node.dataset.id;
            if (!id) return;
            data[rank].push(id);
            placement[id] = rank;
          });
        });
        try {
          localStorage.setItem(STORAGE_KEY, JSON.stringify(data));
        } catch (e) {}
      }

      /* Posição de inserção no flex-wrap: metade esquerda do card = antes; direita = depois. */
      function getInsertBeforeNode(container, x, y) {
        if (!container) return null;
        var elems = Array.prototype.slice.call(
          container.querySelectorAll(".gla-tierlist-char:not(.is-dragging)"),
        );
        if (!elems.length) return null;

        var best = null;
        var bestDist = Infinity;
        var i, box, cx, cy, dx, dy, dist, candidate;

        for (i = 0; i < elems.length; i++) {
          box = elems[i].getBoundingClientRect();
          cx = box.left + box.width / 2;
          cy = box.top + box.height / 2;
          dx = x - cx;
          dy = y - cy;
          dist = dx * dx + dy * dy;
          if (dist < bestDist) {
            bestDist = dist;
            candidate = dx < 0 ? elems[i] : elems[i].nextElementSibling;
            if (
              candidate &&
              candidate.dataset &&
              candidate.dataset.id === dragId
            ) {
              candidate = candidate.nextElementSibling;
            }
            best = candidate;
          }
        }
        return best;
      }

      function applyStrings() {
        lang = getWidgetLang();
        t = STRINGS[lang] || STRINGS.pt;

        root.querySelectorAll("[data-i18n]").forEach(function (el) {
          var key = el.getAttribute("data-i18n");
          if (t[key] != null) el.textContent = t[key];
        });
        root.querySelectorAll("[data-i18n-placeholder]").forEach(function (el) {
          var key = el.getAttribute("data-i18n-placeholder");
          if (t[key] != null) el.setAttribute("placeholder", t[key]);
        });
        root.querySelectorAll("[data-i18n-aria]").forEach(function (el) {
          var key = el.getAttribute("data-i18n-aria");
          if (t[key] != null) el.setAttribute("aria-label", t[key]);
        });

        GAME_TIERS.forEach(function (gt) {
          var btn = filtersEl.querySelector('[data-tier="' + gt.id + '"]');
          if (btn) {
            var lbl = btn.querySelector(".gla-tierlist-filter-label");
            if (lbl) lbl.textContent = t[gt.labelKey] || gt.id;
            else btn.textContent = t[gt.labelKey] || gt.id;
          }
        });

        var classLabels = CLASS_LABELS[lang] || CLASS_LABELS.pt;
        CLASS_FILTERS.forEach(function (f) {
          var btn =
            classFiltersEl &&
            classFiltersEl.querySelector('[data-class="' + f.id + '"]');
          if (!btn) return;
          var label = classLabels[f.id] || f.id;
          btn.title = label;
          var span = btn.querySelector("span");
          if (span) span.textContent = label;
          var img = btn.querySelector("img");
          if (img) img.alt = label;
        });
        if (classBarEl && t.classFiltersAria) {
          classBarEl.setAttribute("aria-label", t.classFiltersAria);
        }

        updateCounts();
      }

      function updateCounts() {
        if (!t) return;
        var ranked = 0;
        var poolVisible = 0;
        var anyVisible = 0;

        Object.keys(charNodes).forEach(function (id) {
          var node = charNodes[id];
          var visible = !node.classList.contains("is-hidden");
          if (visible) anyVisible++;
          if (placement[id] && RANKS.indexOf(placement[id]) !== -1) {
            if (visible) ranked++;
          } else if (visible) {
            poolVisible++;
          }
        });

        if (countEl) {
          if (ranked === 0) countEl.textContent = t.ranked0;
          else if (ranked === 1) countEl.textContent = t.ranked1;
          else countEl.textContent = t.rankedN.replace("{n}", ranked);
        }
        if (poolCountEl) {
          poolCountEl.textContent = t.poolCount.replace("{n}", poolVisible);
        }
        if (emptyEl) {
          emptyEl.hidden = anyVisible > 0 || !characters.length;
        }
      }

      function hasClassFilter(filters, classId) {
        if (filters.indexOf(classId) !== -1) return true;
        /* bruiser legado conta como DPS */
        if (classId === "dps" && filters.indexOf("bruiser") !== -1) return true;
        return false;
      }

      function matchesFilters(ch) {
        if (activeGameTier !== "all" && ch.tier !== activeGameTier)
          return false;
        if (activeClassFilters.length) {
          var filters = ch.filters || [];
          for (var f = 0; f < activeClassFilters.length; f++) {
            if (!hasClassFilter(filters, activeClassFilters[f])) return false;
          }
        }
        if (!searchTerm) return true;
        var hay = ch.__hay || "";
        var tokens = normalize(searchTerm).split(/\s+/).filter(Boolean);
        for (var i = 0; i < tokens.length; i++) {
          if (hay.indexOf(tokens[i]) === -1) return false;
        }
        return true;
      }

      function classLabel(id) {
        var map = CLASS_LABELS[lang] || CLASS_LABELS.pt;
        return map[id] || id;
      }

      function toggleClassFilter(id) {
        var idx = activeClassFilters.indexOf(id);
        if (idx >= 0) activeClassFilters.splice(idx, 1);
        else activeClassFilters.push(id);
        if (classFiltersEl) {
          classFiltersEl
            .querySelectorAll(".gla-tierlist-class-filter")
            .forEach(function (btn) {
              btn.classList.toggle(
                "is-active",
                activeClassFilters.indexOf(btn.dataset.class) !== -1,
              );
            });
        }
        applyVisibility();
      }

      function applyVisibility() {
        var id;
        for (id in charNodes) {
          if (!Object.prototype.hasOwnProperty.call(charNodes, id)) continue;
          var node = charNodes[id];
          var ch = node.__ch;
          if (!ch) continue;
          node.classList.toggle("is-hidden", !matchesFilters(ch));
        }
        updateCounts();
      }

      function rarityRank(ch) {
        if (!ch) return 99;
        var n = RARITY_ORDER[ch.tier];
        return typeof n === "number" ? n : 99;
      }

      function poolCompare(a, b) {
        var ca = a && a.__ch;
        var cb = b && b.__ch;
        var ra = rarityRank(ca);
        var rb = rarityRank(cb);
        if (ra !== rb) return ra - rb;
        var na = normalize(
          (ca && ca.name) || (a && a.dataset && a.dataset.id) || "",
        );
        var nb = normalize(
          (cb && cb.name) || (b && b.dataset && b.dataset.id) || "",
        );
        if (na < nb) return -1;
        if (na > nb) return 1;
        return 0;
      }

      /* Pool sempre ordenado: Diamante → Ouro → Prata → Bronze (e nome dentro da raridade). */
      function insertIntoPool(node) {
        if (!node || !poolEl) return;
        var siblings = poolEl.children;
        var i, other;
        for (i = 0; i < siblings.length; i++) {
          other = siblings[i];
          if (other === node) continue;
          if (
            !other.classList ||
            !other.classList.contains("gla-tierlist-char")
          )
            continue;
          if (poolCompare(node, other) < 0) {
            poolEl.insertBefore(node, other);
            return;
          }
        }
        poolEl.appendChild(node);
      }

      function sortPool() {
        if (!poolEl) return;
        var nodes = Array.prototype.slice.call(
          poolEl.querySelectorAll(".gla-tierlist-char"),
        );
        nodes.sort(poolCompare);
        nodes.forEach(function (n) {
          poolEl.appendChild(n);
        });
      }

      function placeChar(id, rank, beforeNode) {
        if (!charNodes[id]) return;
        var node = charNodes[id];
        if (beforeNode === node) {
          beforeNode = node.nextElementSibling;
        }
        if (rank && RANKS.indexOf(rank) !== -1) {
          placement[id] = rank;
          var slots = rowSlots[rank];
          if (beforeNode && beforeNode.parentNode === slots) {
            slots.insertBefore(node, beforeNode);
          } else {
            slots.appendChild(node);
          }
        } else {
          delete placement[id];
          insertIntoPool(node);
        }
        persistPlacement();
        updateCounts();
      }

      function clearSelection() {
        selectedId = null;
      }

      function selectChar(id) {
        if (selectedId === id) {
          clearSelection();
          return;
        }
        selectedId = id;
      }

      function buildCharNode(ch) {
        ch.__hay = normalize(
          (ch.name || "") + " " + (ch.shortName || "") + " " + (ch.id || ""),
        );

        var btn = document.createElement("button");
        btn.type = "button";
        btn.className = "gla-tierlist-char";
        btn.draggable = true;
        btn.dataset.id = ch.id;
        btn.dataset.gameTier = ch.tier || "";
        btn.setAttribute("aria-label", ch.name);
        btn.__ch = ch;
        btn.innerHTML =
          '<div class="gla-tierlist-char-art"><img alt="" width="96" height="96"></div>' +
          '<span class="gla-tierlist-char-name" aria-hidden="true"></span>';
        btn.querySelector(".gla-tierlist-char-name").textContent = ch.name;
        bindCharImage(btn.querySelector("img"), ch);

        btn.addEventListener("dragstart", function (ev) {
          dragId = ch.id;
          btn.classList.add("is-dragging");
          try {
            ev.dataTransfer.setData("text/plain", ch.id);
            ev.dataTransfer.effectAllowed = "move";
          } catch (e) {}
        });

        btn.addEventListener("dragend", function () {
          btn.classList.remove("is-dragging");
          dragId = null;
          root.querySelectorAll(".is-drop-target").forEach(function (el) {
            el.classList.remove("is-drop-target");
          });
        });

        return btn;
      }

      function resolveDragId(ev) {
        var id = dragId;
        try {
          id = ev.dataTransfer.getData("text/plain") || dragId;
        } catch (e) {}
        return id;
      }

      function bindPoolDrop(el) {
        el.addEventListener("dragover", function (ev) {
          ev.preventDefault();
          el.classList.add("is-drop-target");
          try {
            ev.dataTransfer.dropEffect = "move";
          } catch (e) {}
        });
        el.addEventListener("dragleave", function (ev) {
          if (!el.contains(ev.relatedTarget)) {
            el.classList.remove("is-drop-target");
          }
        });
        el.addEventListener("drop", function (ev) {
          ev.preventDefault();
          el.classList.remove("is-drop-target");
          var id = resolveDragId(ev);
          if (id) {
            placeChar(id, null);
            clearSelection();
          }
        });
      }

      function bindTierDrop(row, slots, rank) {
        function highlight(on) {
          row.classList.toggle("is-drop-target", on);
          slots.classList.toggle("is-drop-target", on);
        }

        slots.addEventListener("dragover", function (ev) {
          ev.preventDefault();
          ev.stopPropagation();
          highlight(true);
          try {
            ev.dataTransfer.dropEffect = "move";
          } catch (e) {}
        });
        slots.addEventListener("dragleave", function (ev) {
          if (!slots.contains(ev.relatedTarget)) {
            highlight(false);
          }
        });
        slots.addEventListener("drop", function (ev) {
          ev.preventDefault();
          ev.stopPropagation();
          highlight(false);
          var id = resolveDragId(ev);
          var before = getInsertBeforeNode(slots, ev.clientX, ev.clientY);
          if (id) {
            placeChar(id, rank, before);
            clearSelection();
          }
        });

        /* Drop no rótulo S/A/B/C/D → final da linha */
        row.addEventListener("dragover", function (ev) {
          if (slots.contains(ev.target)) return;
          ev.preventDefault();
          highlight(true);
          try {
            ev.dataTransfer.dropEffect = "move";
          } catch (e) {}
        });
        row.addEventListener("dragleave", function (ev) {
          if (!row.contains(ev.relatedTarget)) {
            highlight(false);
          }
        });
        row.addEventListener("drop", function (ev) {
          if (slots.contains(ev.target)) return;
          ev.preventDefault();
          highlight(false);
          var id = resolveDragId(ev);
          if (id) {
            placeChar(id, rank, null);
            clearSelection();
          }
        });
      }

      function renderBoard() {
        boardEl.textContent = "";
        RANKS.forEach(function (rank) {
          var row = document.createElement("div");
          row.className = "gla-tierlist-row";
          row.dataset.rank = rank;

          var label = document.createElement("div");
          label.className = "gla-tierlist-label";
          label.textContent = rank;
          label.title = rank;
          label.addEventListener("click", function () {
            if (selectedId) {
              placeChar(selectedId, rank, null);
              clearSelection();
            }
          });

          var slots = document.createElement("div");
          slots.className = "gla-tierlist-slots";
          slots.dataset.slots = rank;
          bindTierDrop(row, slots, rank);

          row.appendChild(label);
          row.appendChild(slots);
          boardEl.appendChild(row);
          rowSlots[rank] = slots;
        });
      }

      function renderFilters() {
        filtersEl.textContent = "";
        GAME_TIERS.forEach(function (gt) {
          var btn = document.createElement("button");
          btn.type = "button";
          btn.className =
            "gla-tierlist-filter" + (gt.id === "all" ? " is-active" : "");
          btn.dataset.tier = gt.id;
          if (gt.id === "all") {
            btn.innerHTML = '<span class="gla-tierlist-filter-label"></span>';
          } else {
            btn.innerHTML =
              '<span class="gla-tierlist-filter-dot"></span><span class="gla-tierlist-filter-label"></span>';
          }
          btn.querySelector(".gla-tierlist-filter-label").textContent = gt.id;
          btn.addEventListener("click", function () {
            activeGameTier = gt.id;
            filtersEl
              .querySelectorAll(".gla-tierlist-filter")
              .forEach(function (b) {
                b.classList.toggle("is-active", b.dataset.tier === gt.id);
              });
            applyVisibility();
          });
          filtersEl.appendChild(btn);
        });
      }

      function renderClassFilters() {
        if (!classFiltersEl) return;
        classFiltersEl.textContent = "";
        CLASS_FILTERS.forEach(function (f) {
          var label = classLabel(f.id);
          var btn = document.createElement("button");
          btn.type = "button";
          btn.className = "gla-tierlist-class-filter";
          btn.dataset.class = f.id;
          btn.title = label;
          btn.innerHTML = '<img alt=""><span></span>';
          var img = btn.querySelector("img");
          var span = btn.querySelector("span");
          img.alt = label;
          img.decoding = "async";
          img.loading = "eager";
          /* Mesmos arquivos da Dima (Arquivo:tank.png etc. na wiki oficial). */
          img.src = medalFilePathURL(f.icon);
          img.onerror = function () {
            img.classList.add("is-missing");
            btn.classList.add("gla-tierlist-class-filter--text-only");
          };
          span.textContent = label;
          btn.addEventListener("click", function () {
            toggleClassFilter(f.id);
          });
          classFiltersEl.appendChild(btn);
        });
      }

      function mountCharacters() {
        characters = readCharacterList();
        var source = document.querySelector(".gla-tierlist-source");
        if (source && source.parentNode) source.parentNode.removeChild(source);

        var fragPool = document.createDocumentFragment();
        characters.forEach(function (ch) {
          if (!ch.id) return;
          var node = buildCharNode(ch);
          charNodes[ch.id] = node;
          fragPool.appendChild(node);
        });
        poolEl.appendChild(fragPool);

        RANKS.forEach(function (rank) {
          var order = tierOrder[rank] || [];
          order.forEach(function (id) {
            if (!charNodes[id]) return;
            placement[id] = rank;
            rowSlots[rank].appendChild(charNodes[id]);
          });
        });
        sortPool();
        applyVisibility();
      }

      bindPoolDrop(poolEl);

      /* Um listener pra todos os bonecos (em vez de 100+ clicks). */
      root.addEventListener("click", function (ev) {
        var btn = ev.target.closest(".gla-tierlist-char");
        if (btn && root.contains(btn)) {
          ev.preventDefault();
          if (dragId) return;
          var targetId = btn.dataset.id;
          if (selectedId && selectedId !== targetId) {
            var slots = btn.closest(".gla-tierlist-slots");
            if (
              slots &&
              slots.dataset.slots &&
              RANKS.indexOf(slots.dataset.slots) !== -1
            ) {
              placeChar(selectedId, slots.dataset.slots, btn);
              clearSelection();
              return;
            }
          }
          selectChar(targetId);
          return;
        }
        var slotsEl = ev.target.closest(".gla-tierlist-slots");
        if (
          slotsEl &&
          ev.target === slotsEl &&
          selectedId &&
          slotsEl.dataset.slots
        ) {
          placeChar(selectedId, slotsEl.dataset.slots, null);
          clearSelection();
          return;
        }
        if (ev.target === poolEl && selectedId) {
          placeChar(selectedId, null);
          clearSelection();
        }
      });

      if (searchInput) {
        searchInput.addEventListener("input", function () {
          clearTimeout(searchTimeout);
          searchTimeout = setTimeout(function () {
            searchTerm = searchInput.value || "";
            applyVisibility();
          }, 120);
        });
      }

      if (downloadBtn) {
        downloadBtn.addEventListener("click", function () {
          exportTierListPng();
        });
      }

      if (listNameInput) {
        listNameInput.addEventListener("input", persistListName);
        listNameInput.addEventListener("change", persistListName);
      }

      if (resetBtn) {
        resetBtn.addEventListener("click", function () {
          Object.keys(placement).forEach(function (id) {
            delete placement[id];
            if (charNodes[id]) insertIntoPool(charNodes[id]);
          });
          sortPool();
          persistPlacement();
          if (listNameInput) {
            listNameInput.value = "";
            persistListName();
          }
          clearSelection();
          applyVisibility();
        });
      }

      if (resetFiltersBtn) {
        resetFiltersBtn.addEventListener("click", function () {
          activeGameTier = "all";
          activeClassFilters = [];
          searchTerm = "";
          if (searchInput) searchInput.value = "";
          filtersEl
            .querySelectorAll(".gla-tierlist-filter")
            .forEach(function (b) {
              b.classList.toggle("is-active", b.dataset.tier === "all");
            });
          if (classFiltersEl) {
            classFiltersEl
              .querySelectorAll(".gla-tierlist-class-filter")
              .forEach(function (b) {
                b.classList.remove("is-active");
              });
          }
          applyVisibility();
        });
      }

      window.addEventListener("gla:langChanged", function () {
        applyStrings();
      });

      loadPlacement();
      loadListName();
      renderBoard();
      renderFilters();
      renderClassFilters();
      applyStrings();
      mountCharacters();
    }

    if (document.readyState === "loading") {
      document.addEventListener("DOMContentLoaded", boot);
    } else {
      boot();
    }

    if (window.mw && mw.hook) {
      mw.hook("wikipage.content").add(boot);
    }
  })();
</script>