/* ============================================================================
   Mictlan Online — puente entre el tema de la landing y el HTML heredado de
   MyAAC (system/pages/*). El tema base (paleta, tipografias, marcos, nav,
   footer) lo pone /landing/assets/css/mictlan.css; aqui solo se visten las
   clases que genera MyAAC: TableContainer, BigButton, formularios, tablas...

   Las variables (--gold, --ink, --font-display...) vienen del CSS de la landing.
   ========================================================================== */

/* ---------- cuerpo de pagina interior ---------- */
.page-body { background: var(--ink); }

.acctbar {
  /* el nav es position:fixed, asi que NO ocupa espacio en el flujo: sin este
     margen la barra de cuenta queda debajo del nav y no se ve. */
  margin-top: var(--nav-h);
  border-bottom: 1px solid rgba(201,162,39,.16);
  background: linear-gradient(180deg, rgba(13,15,11,.95), rgba(7,10,4,.95));
  font-size: 13px;
}
.acctbar__inner {
  display: flex; align-items: center; justify-content: space-between;
  gap: 18px; flex-wrap: wrap; padding-top: 11px; padding-bottom: 11px;
}
.acctbar__who { color: var(--text-dim); }
.acctbar__who b { color: var(--gold-light); }
.acctbar__links { display: flex; align-items: center; gap: 22px; }
.acctbar__links a {
  font-family: var(--font-display); letter-spacing: .16em; text-transform: uppercase;
  font-size: 11.5px; color: var(--text); opacity: .85;
  transition: color .18s, opacity .18s;
}
.acctbar__links a:hover { color: var(--gold-light); opacity: 1; }
.acctbar__cta {
  padding: 7px 16px; border: 1px solid rgba(201,162,39,.5);
  background: linear-gradient(180deg, rgba(38,40,34,.9), rgba(14,16,12,.9));
  color: var(--gold-light) !important; opacity: 1 !important;
}

.page {
  /* el nav (76px, fijo) + la barra de cuenta (~44px) ya van por encima/delante
     gracias a .acctbar{margin-top}, aqui solo queda el respiro del contenido */
  padding: 34px 0 70px;
  min-height: 60vh;
  background:
    radial-gradient(120% 70% at 50% 0%, rgba(35,32,24,.35) 0%, transparent 60%),
    var(--ink);
}

/* Panel contenedor de todo el contenido de MyAAC.
   El marco real (9 piezas que se repiten) y el adorno se definen en el bloque
   OVERRIDES del final de este fichero; aqui solo queda lo que no depende del arte. */
.panel {
  padding: 6px 14px 16px;
}

/* ---------- contenedores y tablas heredadas de MyAAC ---------- */
.TableContainer, .TableContentContainer, .InnerTableContainer {
  width: 100%; border-collapse: collapse;
}
.TableContainer { margin: 0 0 22px; }
.TableContent, .Content {
  color: var(--text); font-size: 15px; line-height: 1.65;
  padding: 14px 16px;
  background: rgba(0,0,0,.22);
  border: 1px solid rgba(201,162,39,.18);
}
.Content { border: 0; background: none; padding: 0; }
.InnerTableContainer .TableContent { background: none; border: 0; }

/* Las "sombras" y esquinas del template viejo no pintan nada aqui */
.TableShadowContainer, .TableShadowContainerRightTop, .TableShadowRightTop,
.TableContentAndRightShadow, .TableBottomShadow, .TableBottomLeftShadow,
.TableBottomRightShadow, .CornerWrapper-b, .Corner-tl, .Corner-tr,
.Corner-bl, .Corner-br, .Border_1, .Border_2, .Border_3,
.CaptionEdgeLeftTop, .CaptionEdgeRightTop, .CaptionEdgeLeftBottom,
.CaptionEdgeRightBottom, .CaptionVerticalLeft, .CaptionVerticalRight,
.CaptionBorderTop, .CaptionBorderBottom, .CaptionContainer,
.CaptionInnerContainer, .browsehappy { background-image: none !important; border: 0 !important; }

/* Tablas de datos (highscores, personajes, guilds...) */
table.TableContainer td, table.TableContainer th { padding: 7px 10px; }
table.TableContainer tr:nth-child(even) .TableContent { background: rgba(255,255,255,.028); }
table.TableContainer tr:hover .TableContent { background: rgba(201,162,39,.08); }

/* ---------- titulos ---------- */
.Title, .BorderTitleText, .CaptionContainer, .CaptionInnerContainer {
  font-family: var(--font-display);
  font-size: 20px; letter-spacing: .16em; text-transform: uppercase;
  color: var(--gold-light); margin: 0 0 20px; padding: 0;
  background: none; border: 0;
}
.Title { display: block; padding-bottom: 12px; border-bottom: 1px solid rgba(201,162,39,.25); }
table .Title, .Box .Title { font-size: 16px; margin-bottom: 10px; }

/* ---------- formularios ---------- */
.LabelV, .OptionContainer .LabelV, td.LabelV {
  color: var(--gold); font-family: var(--font-display);
  letter-spacing: .1em; text-transform: uppercase; font-size: 12px;
  vertical-align: middle; padding: 8px 14px 8px 0; text-align: right;
}
/* OJO: hay que incluir input:not([type]) — MyAAC genera campos SIN atributo
   type (ej. <input id="character_name" name="name">), y el selector
   input[type="text"] NO los matchea, con lo que se quedaban con el fondo
   blanco por defecto del navegador. */
input:not([type]), input.Text, input[type="text"], input[type="password"],
input[type="email"], input[type="number"], input[type="date"], select, textarea {
  font-family: var(--font-body);
  font-size: 15px; color: var(--text) !important;
  /* !important porque MyAAC mete estilos en linea */
  background: linear-gradient(180deg, rgba(18,20,15,.95), rgba(10,12,8,.95)) !important;
  border: 1px solid rgba(201,162,39,.3) !important;
  padding: 9px 12px; outline: none;
  transition: border-color .18s, box-shadow .18s;
}
input:not([type]):focus, input.Text:focus, input[type="text"]:focus,
input[type="password"]:focus, input[type="email"]:focus, input[type="number"]:focus,
input[type="date"]:focus, select:focus, textarea:focus {
  border-color: var(--gold);
  box-shadow: 0 0 0 1px rgba(201,162,39,.35), 0 0 18px rgba(201,162,39,.15);
}
input[type="checkbox"], input[type="radio"] { accent-color: var(--gold); }
select option { background: #0d0f0b; color: var(--text); }
label { color: var(--text); }

/* OJO: en MyAAC `.Text` es DOS cosas distintas:
   - <div class="Text"> / <span class="Text"> = el TITULO de la caja (caption)
   - <input class="Text">                      = un campo de texto
   Por eso se separan por etiqueta. */
div.Text, span.Text, td.Text {
  font-family: var(--font-display);
  font-size: 17px; letter-spacing: .16em; text-transform: uppercase;
  color: var(--gold-light);
  background: none; border: 0; padding: 0; margin: 0;
}

/* ---------- MyAAC inyecta colores del config.ini como estilos EN LINEA
   (ej. <table class="Table5" style="background-color:#D4C0A1">). Aqui se
   neutralizan por si quedara algun valor claro suelto. ---------- */
.Table5, .TableContent, .InnerTableContainer, .TableContentContainer,
.TableContentAndRightShadow, .TableShadowContainerRightTop,
.CaptionContainer, .CaptionInnerContainer, .CaptionBorderTop, .CaptionBorderBottom {
  background-color: transparent !important;
  border-color: rgba(201,162,39,.18) !important;
}

/* ---------- botones (BigButton de MyAAC) ---------- */
.BigButton, .Button, .ThemeboxButton {
  display: inline-block;
  border-style: solid; border-width: 9.6px 28.8px 13.7px 28.8px;
  border-image: url('/landing/assets/ui/obsidian-web-ui/004_364x92.png') 14 42 20 42 fill stretch;
  background: #14120f; background-clip: padding-box;
  cursor: pointer; padding: 0;
}
.BigButtonOver, .Button .ButtonText { background-image: none !important; }
.BigButton:hover, .Button:hover, .ThemeboxButton:hover {
  border-image-source: url('/landing/assets/ui/obsidian-web-ui/005_365x90.png');
}
.BigButton:active, .Button:active, .ThemeboxButton:active {
  border-image-source: url('/landing/assets/ui/obsidian-web-ui/006_363x89.png');
}
.BigButtonText, .ButtonText, .ThemeboxButton {
  font-family: var(--font-display); font-weight: 700;
  font-size: 15px; letter-spacing: .12em; text-transform: uppercase;
  background: linear-gradient(180deg, #f8e9ba 0%, #e3c26c 46%, #b0862c 100%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
  display: inline-block; padding: 0 4px; white-space: nowrap;
}
/* los botones del viejo tema son <div> con onclick: que se vean pulsables */
input[type="submit"], button {
  font-family: var(--font-display); font-weight: 700; font-size: 14px;
  letter-spacing: .12em; text-transform: uppercase;
  color: #f3e0a6; cursor: pointer;
  padding: 10px 24px;
  border: 1px solid var(--gold);
  background: linear-gradient(180deg, rgba(38,40,34,.95), rgba(14,16,12,.95));
  box-shadow: inset 0 0 0 1px rgba(201,162,39,.22);
  transition: transform .16s, box-shadow .2s, color .2s;
}
input[type="submit"]:hover, button:hover {
  color: #fff5d4; transform: translateY(-1px);
  box-shadow: inset 0 0 0 1px rgba(232,199,102,.5), 0 0 22px rgba(47,179,168,.3);
}

/* ---------- avisos ---------- */
.FormFieldError, .warning, .error {
  color: #ffd9d9; background: rgba(150,30,30,.28);
  border: 1px solid rgba(209,70,70,.5); padding: 10px 14px; margin: 12px 0;
}
.success, .note, .info {
  color: #d8f5dd; background: rgba(30,120,60,.22);
  border: 1px solid rgba(70,209,106,.4); padding: 10px 14px; margin: 12px 0;
}
/* MyAAC deja los <span class="FormFieldError"> VACIOS en cada fila del
   formulario a la espera de que el JS los rellene. Sin esto, el padding y el
   fondo rojo se ven como barras rojas sueltas entre los campos. */
.FormFieldError:empty, .warning:empty, .error:empty,
.success:empty, .note:empty, .info:empty { display: none; }

/* MyAAC mete border:1px solid #faf0d7 (claro) en linea sobre la tabla */
table.TableContent { border-color: rgba(201,162,39,.18) !important; }

/* El formulario no necesita todo el ancho del panel */
.panel > table.Table5 { max-width: 940px; margin-left: auto; margin-right: auto; }

/* ---------- cajas laterales / widgets heredados ---------- */
.Themebox, .Box { margin-bottom: 22px; }
.BoxContent {
  background: rgba(0,0,0,.25); border: 1px solid rgba(201,162,39,.18);
  padding: 14px 16px; color: var(--text);
}
table.Box td { padding: 3px 6px; color: var(--text); }

/* ---------- pie de la landing dentro de MyAAC ---------- */
.page-body .footer { margin-top: 0; }

@media (max-width: 900px) {
  .panel { border-width: 22px 18px 20px 18px; padding: 18px 16px 24px; }
  .page { padding: 26px 0 50px; }
  .acctbar__inner { gap: 10px; }
  .LabelV, td.LabelV { text-align: left; padding-right: 0; }
}

/* ============================================================================
   HIGHSCORES — mismo lenguaje visual que el formulario de crear cuenta:
   cajas con borde fino dorado, titulos en Cinzel dorado, cabecera de tabla
   destacada y filas separadas por lineas sutiles.
   Se acota con .page--highscores (la clase la pone index.php de la plantilla),
   porque MyAAC genera esta pagina con tablas SIN clase y estilos en linea.
   ========================================================================== */
.page--highscores h2 {
  font-family: var(--font-display);
  /* Mas pequeno: con 26px + letter-spacing .16em el titulo no cabia en la
     columna de contenido (que lleva la barra lateral al lado) y partia en dos
     lineas. */
  font-size: clamp(15px, 1.4vw, 20px); letter-spacing: .1em; text-transform: uppercase;
  line-height: 1.35; text-wrap: balance;
  background: linear-gradient(180deg, #f2dd9a, var(--gold) 58%, var(--gold-deep));
  -webkit-background-clip: text; background-clip: text; color: transparent;
  margin: 0 0 26px;
}
.page--highscores > .panel > small,
.page--highscores .panel small { color: var(--text-dim); }

/* --- barra de filtros --- */
/* La columna de contenido lleva la barra lateral al lado; sin esto la fila se
   estira a la altura de la barra y el titulo/tabla quedan centrados con un
   hueco enorme arriba y abajo. */
.page--highscores table[cellpadding="0"] > tbody > tr > td { vertical-align: top; }

.page--highscores label {
  font-family: var(--font-display); color: var(--gold);
  font-size: 12px; letter-spacing: .12em; text-transform: uppercase;
  margin-right: 10px;
}
.page--highscores select { min-width: 180px; }
.page--highscores table[cellpadding="4"] { border-collapse: separate; border-spacing: 0; }

/* --- tabla de ranking: la caja y las filas --- */
.page--highscores table[cellpadding="4"] > tbody > tr > td {
  padding: 10px 13px !important;
  border-bottom: 1px solid rgba(201,162,39,.1);
  vertical-align: middle;
}
/* la primera fila (bgcolor del config.ini) es la cabecera */
.page--highscores table[cellpadding="4"] > tbody > tr:first-child > td {
  font-family: var(--font-display);
  font-size: 11.5px; letter-spacing: .18em; text-transform: uppercase;
  color: var(--gold) !important;
  background: rgba(201,162,39,.1) !important;
  border-top: 1px solid rgba(201,162,39,.28);
  border-bottom: 1px solid rgba(201,162,39,.32);
}
.page--highscores table[cellpadding="4"] > tbody > tr:last-child > td {
  border-bottom: 0;
}
.page--highscores table[cellpadding="4"] > tbody > tr:not(:first-child):hover > td {
  background: rgba(201,162,39,.07);
}
/* numero de rank y puntos en dorado */
.page--highscores table[cellpadding="4"] > tbody > tr > td:nth-child(2) { color: var(--gold-light); }
.page--highscores table[cellpadding="4"] a { color: var(--text); }
.page--highscores table[cellpadding="4"] a:hover { color: var(--gold-light); }
.page--highscores table[cellpadding="4"] small { color: var(--text-dim); font-size: 12px; }

/* --- barra lateral (listas de skill/vocation): de bloque gris a caja del tema.
   Se localiza con :has() porque MyAAC no le pone clase, solo <a class="size_xs">. --- */
.page--highscores td:has(> a.size_xs) {
  background: rgba(0,0,0,.32) !important;
  border: 1px solid rgba(201,162,39,.2);
  padding: 12px 14px !important;
  vertical-align: top;
}
.page--highscores td:has(> a.size_xs) b,
.page--highscores td:has(> a.size_xs) .Text {
  font-family: var(--font-display); color: var(--gold);
  font-size: 12px; letter-spacing: .14em; text-transform: uppercase;
  display: block; margin-bottom: 10px;
}
.page--highscores a.size_xs {
  display: block; padding: 4px 0;
  color: var(--text-dim); font-size: 13.5px;
  border-bottom: 1px solid rgba(201,162,39,.08);
  transition: color .15s, padding-left .15s;
}
.page--highscores a.size_xs:hover {
  color: var(--gold-light); padding-left: 6px;
  background: rgba(201,162,39,.07);
}
/* las celdas que solo sirven de separador no deben pintar borde */
.page--highscores table[cellpadding="0"] > tbody > tr > td > table[cellpadding="4"] {
  border: 1px solid rgba(201,162,39,.2);
}

/* ============================================================================
   NEWS — cabecera del item con el mismo lenguaje que el resto del tema.
   MyAAC pinta ese fondo con un GIF de tibiacom EN LINEA
   (style="background-image:url(.../newsheadline_background.gif)"), y mete el
   primer caracter del cuerpo como imagen desde images/letters/<letra>.gif.
   Esa carpeta se ELIMINO de la plantilla para que news.php caiga al texto
   plano (system/pages/news.php:55 y :201 comprueban file_exists).
   ========================================================================== */
.page--news .NewsHeadline { margin: 0 0 4px; }
/* Antes esta cabecera era una CAJA completa (borde de 1 px + degradado) y dentro
   de la ventana se veia como un rectangulo flotante. Ahora es solo una franja:
   sin caja y con una linea de separacion debajo, para que el contenido se funda
   con la placa del interior (el usuario pidio que el fondo se viera uniforme). */
.page--news .NewsHeadlineBackground {
  background-image: none !important;
  display: flex; align-items: center; gap: 14px;
  padding: 13px 2px 11px;
  border: 0;
  border-bottom: 1px solid rgba(201,162,39,.22);
  background: none;
}
.page--news .NewsHeadlineIcon { width: 26px; height: 26px; flex: 0 0 auto; }
.page--news .NewsHeadlineText {
  order: 1; flex: 1 1 auto;
  font-family: var(--font-display); font-size: 19px; letter-spacing: .14em;
  text-transform: uppercase;
  background: linear-gradient(180deg, #f2dd9a, var(--gold) 60%, var(--gold-deep));
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.page--news .NewsHeadlineAuthor { order: 2; flex: 0 0 auto; color: var(--text-dim); font-size: 12.5px; }
.page--news .NewsHeadlineAuthor b { color: var(--gold-deep); }
.page--news .NewsHeadlineDate { order: 3; flex: 0 0 auto; margin-left: auto; color: var(--gold-deep); font-size: 12.5px; }

/* cuerpo de la noticia */
.page--news .panel > table { width: 100%; border-collapse: collapse; }
.page--news .panel > table td { color: var(--text); font-size: 15px; line-height: 1.7; padding: 9px 10px; }
.page--news .panel > table a { color: var(--gold-light); }
.page--news .panel > table a:hover { color: #fff5d4; text-decoration: underline; }
.page--news .panel > table img[src*="/letters/"] { display: none; }

/* ============================================================================
   OVERRIDES â€” van AL FINAL a proposito: misma especificidad, gana el ultimo.
   ========================================================================== */

/* --- Panel: marco de 9 piezas QUE SE REPITE (no se estira) + interior con baldosa ---
   Antes: `border-image: ... fill stretch`. El `stretch` estiraba las tiras del
   marco a lo ancho del panel, asi que el adorno del borde superior (el rombo)
   salia aplastado y alargado y la textura de piedra se deformaba.
   Ahora el marco es un atlas compuesto desde el kit `win_elements`
   (_itemgen/compose9.js): esquinas ornamentadas + barras que se REPITEN (las
   barras van espejadas, asi la junta es perfecta) y el adorno va APARTE,
   centrado, como pieza suelta (si viviera en la tira se repetiria).
   El interior NO usa `fill`: es una placa sin costuras con background-repeat.
   Los slices son los tamanos reales de las piezas -> 1:1, sin escalar nada.
   Para regenerar el atlas:
       node _itemgen/compose9.js _assets_in/win_pieces3 - landing/assets/ui/win-frame.png */
.panel {
  position: relative;
  border-style: solid;
  border-width: 69px 79px 72px 68px;
  /* ⚠️ Los assets van con ?v= IGUAL que el CSS: se sirven con
     `cache-control: max-age=14400` (4 h) y Cloudflare los cachea por URL
     completa, asi que si se regenera el atlas SIN subir el ?v, el navegador
     sigue pintando el viejo hasta 4 horas (paso exactamente eso: el atlas se
     regenero 3 veces en la misma URL y se seguia viendo el anterior).
     Al subir la version del CSS, subir tambien estos ?v=. */
  border-image: url('/landing/assets/ui/win-frame.png?v=36') 69 79 72 68 repeat;
  background-color: #161717;
  background-image: url('/landing/assets/ui/panel-plate-lit.png?v=36');
  background-repeat: repeat;
  /* border-box (y NO padding-box): la placa se pinta tambien por DEBAJO del
     marco, asi que la franja interior del borde (69 px) y los huecos
     transparentes de las esquinas quedan RELLENOS de textura en vez de dejar
     ver el fondo de la pagina (el marco se veia hueco). El borde se dibuja
     encima, asi que la piedra y el dorado siguen a la vista. */
  background-clip: border-box;
  padding: 6px 14px 16px;
}

/* Adorno superior (rombo turquesa): pieza suelta y NITIDA, centrada sobre el marco. */
.panel::before {
  content: '';
  position: absolute; left: 50%; top: -99px; transform: translateX(-50%);
  width: 188px; height: 71px; pointer-events: none; z-index: 1;
  background: url('/landing/assets/ui/win-ornament.png?v=36') no-repeat center / contain;
}

/* En pantallas estrechas el marco se reduce: las piezas se escalan un poco, pero
   el patron SIGUE repitiendose (lo que no se hace nunca es estirar la tira). */
@media (max-width: 900px) {
  .panel { border-width: 40px 45px 40px 38px; padding: 2px 8px 10px; }
  .panel::before { width: 132px; height: 50px; top: -58px; }
}



/* --- Botones BigButton: dos arreglos ---
   1) ESTADOS AL REVES: 005_365x90 es el reposo (apagado) y 004_364x92 el hover
      (brilla). Estaban invertidos igual que los del hero.
   2) "SE VEIAN 2 BOTONES": MyAAC mete un
        <input type="submit" class="BigButtonText">
      DENTRO del <div class="BigButton">. Mi regla generica de input[type=submit]
      le ponia borde dorado y fondo, asi que salia un boton dentro de otro. */
.BigButton { border-image-source: url('/landing/assets/ui/obsidian-web-ui/005_365x90.png') !important; }
.BigButton:hover,
.BigButton:focus-visible { border-image-source: url('/landing/assets/ui/obsidian-web-ui/004_364x92.png') !important; }
.BigButton:active { border-image-source: url('/landing/assets/ui/obsidian-web-ui/006_363x89.png') !important; }

.BigButton > div,
.BigButton .BigButtonOver {
  border: 0 !important; background: none !important; box-shadow: none !important;
}
.BigButton input[type="submit"],
.BigButton .BigButtonText {
  border: 0 !important; box-shadow: none !important; transform: none !important;
  background: linear-gradient(180deg, #f8e9ba 0%, #e3c26c 46%, #b0862c 100%) !important;
  -webkit-background-clip: text !important; background-clip: text !important;
  color: transparent !important;
  padding: 0 4px !important;
  font-family: var(--font-display); font-weight: 700; font-size: 15px;
  letter-spacing: .12em; text-transform: uppercase;
}
/* --- Mensajes de validacion del formulario ---
   tools/check_name.js rellena el mensaje ASI:
     $('#character_error').html('<span style="color: green">' + data.success + '</span>')
   o sea que el texto cae DENTRO del <span class="FormFieldError">. Con mi
   estilo de caja (fondo rojo + borde + padding 10/14) se veia como una caja
   roja con el texto en verde y partido en dos lineas. Ahora es texto plano,
   sin caja, y forzado a una sola linea.
   (Sin !important a proposito: la regla .FormFieldError:empty de mas arriba
   tiene mas especificidad y debe seguir ocultando los mensajes vacios.) */
.FormFieldError {
  display: inline;
  background: none;
  border: 0;
  padding: 0;
  margin: 0 0 0 4px;
  font-size: 13px;
  white-space: nowrap;
}
/* el <span style="color:..."> anidado que mete el JS tampoco pinta caja */
.FormFieldError > span {
  background: none; border: 0; padding: 0; margin: 0;
}
/* --- Enlaces de DESCARGA pintados como boton del atlas ---
   El contenido de /downloads vive en la tabla myaac_pages y es HTML plano:
     <p><a href=".../Mictlan-OTC-Beta-V1.0.zip"><b>&raquo; Descargar ...</b></a></p>
   En vez de tocar la BD, se selecciona por el href: cualquier enlace a un
   .zip (o con atributo download) dentro del panel se pinta como los BigButton.
   Asi vale tambien para futuras descargas sin tocar el contenido.
   Mismos estados que el resto: 005 reposo -> 004 hover -> 006 pulsado. */
.panel a:is([href$=".zip"], [href$=".exe"], [href$=".rar"], [download]) {
  display: inline-flex; align-items: center; justify-content: center;
  border-style: solid;
  border-width: 9.6px 28.8px 13.7px 28.8px;
  border-image: url('/landing/assets/ui/obsidian-web-ui/005_365x90.png') 14 42 20 42 fill stretch;
  background: linear-gradient(180deg, #f8e9ba 0%, #e3c26c 46%, #b0862c 100%);
  -webkit-background-clip: text; background-clip: text;
  color: transparent;
  font-family: var(--font-display); font-weight: 700;
  font-size: 15px; letter-spacing: .1em; text-transform: uppercase;
  text-decoration: none; padding: 0 6px; margin: 8px 0;
  white-space: nowrap;
  transition: translate .14s;
}
.panel a:is([href$=".zip"], [href$=".exe"], [href$=".rar"], [download]) b { font-weight: 700; }
.panel a:is([href$=".zip"], [href$=".exe"], [href$=".rar"], [download]):hover, .panel a[href$=".rar"]:hover, .panel a[download]:hover {
  border-image-source: url('/landing/assets/ui/obsidian-web-ui/004_364x92.png');
  translate: 0 -2px;
}
.panel a:is([href$=".zip"], [href$=".exe"], [href$=".rar"], [download]):active, .panel a[href$=".rar"]:active, .panel a[download]:active {
  border-image-source: url('/landing/assets/ui/obsidian-web-ui/006_363x89.png');
  translate: 0 0;
}
/* FIX del boton de descarga: con `border-image ... fill` la placa se pinta
   POR ENCIMA del background del propio elemento, asi que el texto con
   `background-clip:text; color:transparent` quedaba INVISIBLE (se veia el
   marco vacio). Solucion: color SOLIDO en el enlace, y el degradado se aplica
   al hijo <b>, cuyo fondo si se pinta por encima de la placa. */
.panel a:is([href$=".zip"], [href$=".exe"], [href$=".rar"], [download]) {
  background: none;
  -webkit-background-clip: border-box; background-clip: border-box;
  color: var(--gold-light);
}
.panel a:is([href$=".zip"], [href$=".exe"], [href$=".rar"], [download]) > b,
.panel a[href$=".rar"] > b,
.panel a[download] > b {
  background: linear-gradient(180deg, #f8e9ba 0%, #e3c26c 46%, #b0862c 100%);
  -webkit-background-clip: text; background-clip: text;
  color: transparent;
}
.panel a:is([href$=".zip"], [href$=".exe"], [href$=".rar"], [download]):hover,
.panel a[href$=".rar"]:hover,
.panel a[download]:hover { color: #fff5d4; }
/* --- Enlace "Create Account" de la caja "New to Mictlan Online?" ---
   MyAAC lo pinta como un <a> PELADO (sin clase), asi que el navegador le daba
   su estilo por defecto: azul y subrayado. Se viste como boton del atlas
   igual que el de descargas y los BigButton, seleccionando por el href para
   no depender de que MyAAC le ponga clase algun dia.
   Estados: 005 reposo -> 004 hover -> 006 pulsado. */
.panel a[href*="account/create"] {
  display: inline-flex; align-items: center; justify-content: center;
  border-style: solid;
  border-width: 9.6px 28.8px 13.7px 28.8px;
  border-image: url('/landing/assets/ui/obsidian-web-ui/005_365x90.png') 14 42 20 42 fill stretch;
  color: var(--gold-light);
  font-family: var(--font-display); font-weight: 700;
  font-size: 15px; letter-spacing: .1em; text-transform: uppercase;
  text-decoration: none;
  padding: 0 6px; margin: 6px 0;
  white-space: nowrap;
  transition: translate .14s, color .18s;
}
.panel a[href*="account/create"]:hover {
  border-image-source: url('/landing/assets/ui/obsidian-web-ui/004_364x92.png');
  color: #fff5d4; translate: 0 -2px;
}
.panel a[href*="account/create"]:active {
  border-image-source: url('/landing/assets/ui/obsidian-web-ui/006_363x89.png');
  translate: 0 0;
}
/* --- Boton "Create Account" de la caja New Player ---
   OJO: NO es un <a>. Es un <input type="image"> con el sprite de tibiacom
   (mediumbutton_createaccount.png), y por eso la regla de enlaces de mas
   arriba no le llegaba: salia con el aspecto azul/ajeno al tema.
   Solo se usa en account.login.html.twig con el sprite "createaccount"
   (los otros 3 sprites mediumbutton_* no se usan en ninguna pagina), asi que
   se puede acotar aqui sin riesgo.
   CLAVE: el input tiene que seguir siendo CLICKABLE porque es el submit del
   formulario -> se deja transparente y encima se pinta el texto con un
   ::after que lleva pointer-events:none para que el clic llegue al input. */
.MediumButtonForm { display: inline-block; }
.MediumButtonBackground {
  position: relative; display: inline-block;
  border-style: solid;
  border-width: 9.6px 28.8px 13.7px 28.8px;
  border-image: url('/landing/assets/ui/obsidian-web-ui/005_365x90.png') 14 42 20 42 fill stretch;
  background: #14120f; background-clip: padding-box;
  padding: 0; cursor: pointer;
  transition: translate .14s;
}
.MediumButtonOver { display: none !important; background-image: none !important; }
.MediumButtonBackground input[type="image"] {
  display: block; width: 210px; height: 38px;
  opacity: 0; border: 0; margin: 0; padding: 0; cursor: pointer;
}
.MediumButtonBackground::after {
  content: "Create Account";
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
  pointer-events: none;
  font-family: var(--font-display); font-weight: 700; font-size: 15px;
  letter-spacing: .1em; text-transform: uppercase;
  background: linear-gradient(180deg, #f8e9ba 0%, #e3c26c 46%, #b0862c 100%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.MediumButtonBackground:hover {
  border-image-source: url('/landing/assets/ui/obsidian-web-ui/004_364x92.png');
  translate: 0 -2px;
}
.MediumButtonBackground:active {
  border-image-source: url('/landing/assets/ui/obsidian-web-ui/006_363x89.png');
  translate: 0 0;
}
/* ============================================================================
   HIGHSCORES â€” botones de CATEGORIA y VOCACION
   Los genera js/highscores.js a partir de los dos <select> de MyAAC, asi que
   sin JS simplemente no existen y quedan los desplegables de siempre.
   ========================================================================== */
.page--highscores .hs-pills {
  display: flex; flex-wrap: wrap; gap: 12px;
  margin: 4px 0 20px;
}
.page--highscores .hs-pill {
  display: inline-flex; align-items: center; gap: 10px;
  padding: 10px 20px;
  border: 1px solid rgba(201,162,39,.3);
  background: linear-gradient(180deg, rgba(26,28,22,.85), rgba(10,12,8,.92));
  color: var(--text-dim); text-decoration: none; white-space: nowrap;
  font-family: var(--font-display); font-size: 13px;
  letter-spacing: .1em; text-transform: uppercase;
  transition: border-color .18s, color .18s, transform .14s, box-shadow .2s;
}
.page--highscores .hs-pill img {
  width: 24px; height: 24px; flex: 0 0 auto;
  filter: drop-shadow(0 2px 4px rgba(0,0,0,.85));
}
.page--highscores .hs-pill:hover {
  color: var(--gold-light); border-color: var(--gold);
  transform: translateY(-2px);
  box-shadow: 0 0 18px rgba(201,162,39,.22);
}
.page--highscores .hs-pill.is-active {
  color: #fff5d4; border-color: var(--gold);
  background: linear-gradient(180deg, rgba(201,162,39,.24), rgba(58,44,10,.35));
  box-shadow: inset 0 0 0 1px rgba(232,199,102,.42), 0 0 20px rgba(201,162,39,.25);
}
/* las vocaciones son etiquetas mas pequenas y sin icono */
.page--highscores .hs-pills--vocation { gap: 9px; }
.page--highscores .hs-pills--vocation .hs-pill { padding: 7px 16px; font-size: 12px; }

/* las etiquetas CATEGORY / VOCATION que quedan sueltas en la tabla de filtros */
.page--highscores table[cellpadding="4"] td:first-child {
  font-family: var(--font-display); color: var(--gold);
  font-size: 12px; letter-spacing: .18em; text-transform: uppercase;
  vertical-align: middle;
}
/* Con el JS activo, la barra lateral de skill/vocation sobra (las pastillas ya
   lo cubren). Se oculta SOLO con `body.hs-js`, que lo pone el script: si el JS
   no carga, la barra sigue ahi y la pagina es usable.
   OJO con el selector: tiene que ser `>` (hijo directo). El <td> de contenido
   contiene los enlaces mas abajo, asi que un `td:has(a.size_xs)` a secas
   ocultaria TODA la pagina. */
/* OJO: `.page--highscores` esta EN EL PROPIO <body>, asi que
   `body.hs-js .page--highscores td` NO casa nunca (pide un descendiente con
   esa clase, y no existe). El selector correcto es directo desde el body. */
body.hs-js td:has(> a.size_xs) { display: none !important; }
/* Sin la barra lateral, la informacion se centra en el panel. */
body.hs-js .page--highscores .hs-pills { justify-content: center; }
/* el rotulo "Filters" de la tabla de filtros ya no aporta nada */
body.hs-js .page--highscores table[cellpadding="4"] > tbody > tr > td:first-child:empty { display: none; }
/* ============================================================================
   CHARACTERS (/characters/<nombre>) — la ficha en TARJETAS

   El twig original de MyAAC (system/templates/characters.html.twig) pintaba
   todo con tablas de ancho 100% SIN clase: una fila por dato, con <br/><br/>
   entre bloques y columnas separadoras de blank.gif. Resultado: muchisimo
   espacio desperdiciado y el outfit como un circulo blanco flotando.

   Aqui la ficha se reescribe (templates/mictlan/characters.html.twig) con
   marcado semantico: un hero + tarjetas. Estas reglas visten ese marcado.
   Nada de esto depende de las tablas heredadas salvo el buscador del final,
   que sigue siendo el TableContainer de MyAAC.
   ========================================================================== */

/* ---------- rejilla general ---------- */
.page--characters .char { display: grid; gap: 16px; }

.page--characters .char-cols {
  display: grid; gap: 16px; align-items: start;
  grid-template-columns: minmax(0, 1.2fr) minmax(280px, .8fr);
}
/* La columna izquierda lleva DOS tarjetas (ficha + skills) para que su alto
   se parezca al de la columna derecha; si no, el hueco bajo la ficha es enorme. */
.page--characters .char-main { display: grid; gap: 16px; align-content: start; }
.page--characters .char-side { display: grid; gap: 16px; align-content: start; }
.page--characters .char-duo {
  display: grid; gap: 16px; align-items: start;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
}

/* ---------- tarjeta ---------- */
.page--characters .char-card {
  position: relative;
  padding: 15px 18px 17px;
  background:
    radial-gradient(120% 140% at 0% 0%, rgba(201,162,39,.06), transparent 55%),
    linear-gradient(180deg, rgba(23,24,20,.75), rgba(10,11,8,.85));
  border: 1px solid rgba(201,162,39,.22);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.03);
}
.page--characters .char-card__head {
  display: flex; align-items: center; gap: 12px;
  margin: 0 0 12px;
  font-family: var(--font-display); font-weight: 600;
  font-size: 12px; letter-spacing: .18em; text-transform: uppercase;
  color: var(--gold-light);
}
.page--characters .char-card__head::after {
  content: ''; flex: 1 1 auto; height: 1px; min-width: 20px;
  background: linear-gradient(90deg, rgba(201,162,39,.42), transparent);
}

/* ---------- hero: outfit + identidad ---------- */
.page--characters .char-hero {
  position: relative;
  display: flex; align-items: center; gap: 22px; flex-wrap: wrap;
  padding: 18px 20px;
  background:
    radial-gradient(90% 170% at 0% 50%, rgba(201,162,39,.13), transparent 62%),
    linear-gradient(180deg, rgba(26,27,22,.9), rgba(9,10,7,.92));
  border: 1px solid rgba(201,162,39,.28);
}
.page--characters .char-hero__outfit {
  position: relative;               /* el <img> va absoluto dentro del circulo */
  flex: 0 0 auto; width: 104px; height: 104px;
  display: grid; place-items: center;
  border: 1px solid rgba(201,162,39,.34); border-radius: 50%;
  background: radial-gradient(circle at 50% 42%, rgba(201,162,39,.2), rgba(0,0,0,.55) 72%);
  box-shadow: inset 0 0 22px rgba(0,0,0,.7), 0 0 24px rgba(201,162,39,.12);
  overflow: hidden;
}
/* OJO con el encuadre del outfit. El servicio de ots.me
   (outfit-images.ots.me/.../outfit.php) devuelve un lienzo de 64x64 con el
   sprite del personaje en el CUADRANTE INFERIOR DERECHO (medido: caja alfa
   x=32..63, y=32..63), y ademas recorta los pies. Por eso el original llevaba
   margin-left/-top -60px: sin ese desplazamiento el personaje sale en una
   esquina del circulo (era el "circulo con un muñeco raro" de antes).
   Aqui el lienzo se pinta al doble (128px) dentro de un circulo de 104px y se
   desplaza -44px: el cuadrante (que ocupa 64x64 ya escalado) queda centrado.
   Formula: left = B/2 - 0.75*S  ->  52 - 96 = -44. */
.page--characters .char-hero__outfit img {
  position: absolute; left: -44px; top: -44px;
  width: 128px; height: 128px; max-width: none;
  image-rendering: pixelated;
}
.page--characters .char-hero__id { flex: 1 1 300px; min-width: 0; }
.page--characters .char-eyebrow {
  margin: 0 0 3px;
  font-family: var(--font-display); font-size: 10.5px;
  letter-spacing: .22em; text-transform: uppercase; color: var(--text-dim);
}
.page--characters .char-hero__name {
  margin: 0;
  font-family: var(--font-display); font-weight: 700;
  font-size: 30px; line-height: 1.15; color: #fff5d4;
  text-shadow: 0 2px 14px rgba(0,0,0,.85);
}
.page--characters .char-hero__name img { vertical-align: middle; margin-right: 6px; }
.page--characters .char-hero__meta {
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px 0;
  margin: 7px 0 12px; color: var(--text-dim); font-size: 13.5px;
}
.page--characters .char-hero__meta span + span::before {
  content: '\00b7'; color: rgba(201,162,39,.55); margin: 0 10px;
}
.page--characters .char-hero__edit {
  position: absolute; top: 13px; right: 16px;
  font-family: var(--font-display); font-size: 10.5px; letter-spacing: .14em;
  text-transform: uppercase; color: var(--gold); opacity: .8;
}
.page--characters .char-hero__edit:hover { opacity: 1; color: var(--gold-light); }

/* ---------- etiquetas (chips) ---------- */
.page--characters .char-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.page--characters .chip {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 5px 11px;
  font-family: var(--font-display); font-size: 10.5px;
  letter-spacing: .14em; text-transform: uppercase;
  color: var(--gold-light);
  background: rgba(0,0,0,.34);
  border: 1px solid rgba(201,162,39,.28);
}
.page--characters .chip__dot {
  flex: 0 0 auto; width: 6px; height: 6px; border-radius: 50%;
  background: currentColor; box-shadow: 0 0 8px currentColor;
}
.page--characters .chip--on { color: #7fe0a0; border-color: rgba(70,209,106,.45); }
.page--characters .chip--off { color: #e08a8a; border-color: rgba(209,70,70,.45); }
.page--characters .chip--icon { padding: 2px 8px; }
.page--characters .chip--icon img { display: block; }

/* ---------- rejilla clave / valor ---------- */
.page--characters .char-kv {
  display: grid; gap: 0 20px; margin: 0;
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
}
.page--characters .char-kv__item {
  display: flex; align-items: baseline; justify-content: space-between; gap: 12px;
  padding: 7px 0; border-bottom: 1px solid rgba(201,162,39,.1);
}
.page--characters .char-kv__item--wide { grid-column: 1 / -1; }
.page--characters .char-kv dt {
  font-family: var(--font-display); font-size: 11px; letter-spacing: .14em;
  text-transform: uppercase; color: var(--gold); white-space: nowrap;
}
.page--characters .char-kv dd {
  margin: 0; min-width: 0; text-align: right;
  color: var(--text); font-size: 14px; overflow-wrap: anywhere;
}
.page--characters .char-kv__item--wide dd {
  display: flex; align-items: center; justify-content: flex-end;
  gap: 10px; flex-wrap: wrap;
}
.page--characters .char-kv__text { flex: 1 1 auto; text-align: left; line-height: 1.6; }
.page--characters .char-inline-form { display: inline-flex; margin: 0; }
.page--characters .char-inline-form input[type="image"] { vertical-align: middle; }

/* ---------- skills ---------- */
.page--characters .char-skills {
  display: grid; gap: 6px; margin: 0; padding: 0; list-style: none;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
}
.page--characters .char-skill {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 6px 10px; font-size: 13px; color: var(--text-dim);
  background: rgba(0,0,0,.3); border: 1px solid rgba(201,162,39,.13);
}
.page--characters .char-skill__name { text-transform: capitalize; }
.page--characters .char-skill__value {
  font-family: var(--font-display); font-size: 13.5px; color: var(--gold-light);
}

/* ---------- equipo (antes: el bloque gris #808080 del template viejo) ---------- */
.page--characters .char-equip { display: flex; justify-content: center; gap: 12px; }
.page--characters .char-equip__col { display: flex; flex-direction: column; gap: 6px; }
.page--characters .char-slot {
  display: grid; place-items: center; width: 48px; height: 48px;
  background: linear-gradient(180deg, rgba(28,30,24,.95), rgba(12,14,9,.95));
  border: 1px solid rgba(201,162,39,.2);
  box-shadow: inset 0 0 10px rgba(0,0,0,.6);
}
.page--characters .char-slot img { display: block; width: 40px; height: 40px; image-rendering: pixelated; }
.page--characters .char-slot--skull {
  background: none; border-style: dashed; border-color: rgba(201,162,39,.14);
}

/* ---------- quests ---------- */
.page--characters .char-quests { display: grid; gap: 5px; margin: 0; padding: 0; list-style: none; }
.page--characters .char-quest {
  display: flex; align-items: center; gap: 9px;
  padding: 5px 9px; font-size: 13px; color: var(--text-dim);
  background: rgba(0,0,0,.28); border: 1px solid rgba(201,162,39,.12);
}
.page--characters .char-quest img { width: 11px; height: 11px; }
.page--characters .char-quest.is-done { color: var(--text); }

/* ---------- muertes / victimas ---------- */
.page--characters .char-timeline { margin: 0; padding: 0; list-style: none; }
.page--characters .char-timeline__row {
  display: flex; align-items: baseline; gap: 14px;
  padding: 8px 2px; border-bottom: 1px solid rgba(201,162,39,.1);
}
.page--characters .char-timeline__row:last-child { border-bottom: 0; }
.page--characters .char-timeline__time {
  flex: 0 0 152px;
  font-family: var(--font-display); font-size: 11px; letter-spacing: .1em;
  text-transform: uppercase; color: var(--gold);
}
.page--characters .char-timeline__body {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  color: var(--text); font-size: 14px;
}

/* ---------- firma ---------- */
.page--characters .char-sign { display: flex; flex-direction: column; align-items: center; gap: 12px; }
.page--characters .char-sign__img { max-width: 100%; height: auto; }
.page--characters .char-sign__toggle {
  font-family: var(--font-display); font-size: 11px; letter-spacing: .14em;
  text-transform: uppercase; color: var(--gold);
  border-bottom: 1px solid rgba(201,162,39,.35);
}
.page--characters .char-sign__toggle:hover { color: var(--gold-light); }
.page--characters .char-sign__links { width: 100%; max-width: 680px; border-collapse: collapse; }
.page--characters .char-sign__links td {
  padding: 5px 8px; color: var(--text-dim); font-size: 13px; vertical-align: middle;
}
.page--characters .char-sign__links td:first-child {
  font-family: var(--font-display); font-size: 11px; letter-spacing: .12em;
  text-transform: uppercase; color: var(--gold); white-space: nowrap; text-align: right;
}
.page--characters .char-sign__links input[type="text"] { width: 100%; }

/* ---------- lista de personajes de la cuenta ---------- */
.page--characters .char-roster { margin: 0; padding: 0; list-style: none; }
.page--characters .char-roster__row {
  display: flex; align-items: center; gap: 12px;
  padding: 7px 2px; border-bottom: 1px solid rgba(201,162,39,.1);
}
.page--characters .char-roster__row:last-child { border-bottom: 0; }
.page--characters .char-roster__name { flex: 1 1 auto; min-width: 0; color: var(--text); font-size: 14.5px; }
.page--characters .char-roster__level { color: var(--gold-light); font-size: 13px; white-space: nowrap; }
.page--characters .char-roster__action form { display: inline-flex; margin: 0; }

/* ---------- buscador (el TableContainer de MyAAC, al final) ---------- */
.page--characters .char-card--search { padding: 16px 18px; }
.page--characters .char-card--search .TableContainer:last-child { margin-bottom: 0; }
.page--characters td.LabelV150 {
  color: var(--gold); font-family: var(--font-display);
  font-size: 12px; letter-spacing: .12em; text-transform: uppercase;
  text-align: right; vertical-align: middle; padding: 8px 14px 8px 0;
}
.page--characters input:not([type]),
.page--characters input[type="text"] { min-width: 180px; }

/* ---------- responsive ---------- */
@media (max-width: 980px) {
  .page--characters .char-cols { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 640px) {
  .page--characters .char-hero { gap: 14px; padding: 15px; }
  .page--characters .char-hero__outfit { width: 84px; height: 84px; }
  /* mismo encuadre que arriba: left = 84/2 - 0.75*96 = -30 */
  .page--characters .char-hero__outfit img { width: 96px; height: 96px; left: -30px; top: -30px; }
  .page--characters .char-hero__name { font-size: 24px; }
  .page--characters .char-hero__edit { position: static; order: 3; }
  .page--characters .char-kv { grid-template-columns: minmax(0, 1fr); }
  .page--characters .char-timeline__row { flex-direction: column; gap: 4px; }
  .page--characters .char-timeline__time { flex: none; }
}

/* ============================================================================
   MOVIL: el boton de descarga (a[href$=".zip"], pintado como boton del atlas)
   lleva `white-space: nowrap` en su regla base, que esta MAS ARRIBA en este
   fichero. Por eso este bloque va al FINAL: misma especificidad, gana el ultimo.
   Medido a 390 px el enlace media 602 px y ensanchaba TODO el documento (672 px),
   y con el se estiraba la barra superior fija (parecia cortada).
   ========================================================================== */
@media (max-width: 760px) {
  .panel a:is([href$=".zip"], [href$=".exe"], [href$=".rar"], [download]) {
    display: inline-block; white-space: normal; text-align: center;
    max-width: 100%; box-sizing: border-box;
  }
  .panel a:is([href$=".zip"], [href$=".exe"], [href$=".rar"], [download]) b {
    white-space: normal; font-weight: 700;
  }
}
/* ============================================================================
   SOLO PAGINA DOWNLOADS (.page--downloads): marco mas fino + CINTA DE TITULO
   generada con las piezas del propio marco (dl-ribbon.png = win_pieces3:
   barra 09 + gema 00). Combina 100% con win-frame. Scoped.
   ========================================================================== */
.page--downloads .panel {
  border-width: 40px 46px 42px 40px;
}
.page--downloads .panel::before {
  top: -44px;
  width: min(780px, 90%);
  height: auto;
  aspect-ratio: 1000 / 72;
  background-image: url("/landing/assets/ui/dl-ribbon.png?v=42");
  /* left:50% + translateX(-50%) + center/contain no-repeat heredados del base */
}
