297257b753
Nueva sección Armería (menú Jugadores del header, pública). Migra la idea del módulo armory de FusionCMS a Next, ajustada al diseño del sitio y en ES/EN. DATOS (verificado antes de construir): item_template no existe en 3.4.3, pero los datos de ítem ya están en MySQL (django_wow.item_data, 44.873 filas con nombre es/en, calidad, item_level, inventory_type y display_id). El equipo del personaje sale de acore_characters (character_inventory + item_instance, con transmog) y se resuelve contra item_data en dos pasos (sin joins entre esquemas). lib/armory.ts + lib/wow-data.ts (razas/clases/slots ES/EN y colores de clase). RUTAS: - /armory: buscador con pestañas personajes/ítems/hermandades (SSR por searchParams), ítems con tooltip/color/icono de wowhead. - /armory/character/[guid]: identidad, equipo (tooltips wowhead, color por calidad) y visor 3D. - /armory/guild/[guid]: miembros con enlace a su ficha. VISOR 3D (components/ArmoryModel3D): usa la librería wow-model-viewer (generateModels) con jQuery + ZamModelViewer de wowhead cargados bajo demanda, alimentado con raza+género+display_ids del equipo (transmog si lo hay). Es integración cliente que depende del CDN de zamimg y NO se puede verificar sin navegador: va todo en try/catch con temporizador de reserva y aviso si no carga, para no romper la ficha. Verificado en producción (salvo el render 3D): buscador, ficha con equipo real («Camisa de acólito»/«Acolyte's Shirt»), tooltips de wowhead y página de hermandad, en ES y EN. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
68 lines
3.4 KiB
CSS
68 lines
3.4 KiB
CSS
/* Estilos de la armería, en la línea del tema (oscuro + dorado #d79602). Reutiliza
|
|
main-wide, nice_button, forum-input y los colores de calidad qN de forum.css. */
|
|
|
|
.armory-search { display: flex; gap: 10px; align-items: center; margin: 10px 0 18px; flex-wrap: wrap; }
|
|
.armory-search .forum-input { flex: 1 1 260px; margin: 0; }
|
|
|
|
.armory-tabs { display: flex; gap: 6px; border-bottom: 1px solid #2a2723; margin-bottom: 16px; flex-wrap: wrap; }
|
|
.armory-tab {
|
|
padding: 8px 16px; color: #8a8578; text-decoration: none; font-weight: bold; text-transform: uppercase;
|
|
font-size: 13px; border-bottom: 2px solid transparent; transition: all .15s;
|
|
}
|
|
.armory-tab:hover { color: #d79602; }
|
|
.armory-tab.active { color: #d79602; border-bottom-color: #d79602; }
|
|
|
|
.armory-hint { color: #6d6a5e; text-align: center; padding: 24px 0; }
|
|
|
|
.armory-list { display: flex; flex-direction: column; gap: 6px; }
|
|
.armory-row {
|
|
display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap;
|
|
padding: 10px 14px; border-radius: 3px; text-decoration: none;
|
|
background: rgba(0, 0, 0, .18); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .03);
|
|
transition: background .15s;
|
|
}
|
|
a.armory-row:hover { background: rgba(255, 255, 255, .05); }
|
|
.armory-name { font-weight: bold; font-size: 14px; color: #d4cdbb; text-decoration: none; }
|
|
a.armory-name:hover { text-decoration: underline; }
|
|
.armory-meta { font-size: 12px; color: #6d6a5e; }
|
|
|
|
/* Ficha de personaje: dos columnas (modelo 3D | equipo). */
|
|
.armory-char { display: flex; gap: 20px; flex-wrap: wrap; align-items: flex-start; }
|
|
.armory-char-left { flex: 1 1 320px; }
|
|
.armory-char-right { flex: 1 1 320px; }
|
|
.armory-char-name { font-size: 28px; font-weight: bold; margin: 0; }
|
|
.armory-char-sub { color: #8a8578; font-size: 14px; margin: 6px 0 10px; }
|
|
.armory-char-tags { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-bottom: 14px; }
|
|
.armory-faction { font-size: 11px; text-transform: uppercase; font-weight: bold; padding: 2px 8px; border-radius: 3px; }
|
|
.armory-faction.alliance { color: #4a90d9; background: rgba(74, 144, 217, .12); }
|
|
.armory-faction.horde { color: #cc3038; background: rgba(204, 48, 56, .12); }
|
|
.armory-status { font-size: 11px; text-transform: uppercase; font-weight: bold; }
|
|
.armory-status.online { color: #1eff00; }
|
|
.armory-status.offline { color: #6d6a5e; }
|
|
.armory-guild-tag { color: #8a8578; font-size: 13px; text-decoration: none; }
|
|
.armory-guild-tag:hover { color: #d79602; }
|
|
|
|
.armory-section-title { font-size: 15px; text-transform: uppercase; color: #8a8578; margin: 0 0 12px; }
|
|
.armory-equip { display: flex; flex-direction: column; gap: 4px; }
|
|
.armory-equip-slot {
|
|
display: flex; justify-content: space-between; align-items: center; gap: 10px;
|
|
padding: 7px 12px; border-radius: 3px; background: rgba(0, 0, 0, .18);
|
|
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .03);
|
|
}
|
|
.armory-equip-slot.empty { opacity: .45; }
|
|
.armory-item { font-weight: bold; font-size: 13px; text-decoration: none; }
|
|
.armory-item:hover { text-decoration: none; }
|
|
.armory-slot-name { font-size: 11px; color: #6d6a5e; text-align: right; white-space: nowrap; }
|
|
|
|
/* Visor 3D */
|
|
.armory-model {
|
|
margin-top: 8px; border-radius: 3px; overflow: hidden; background: rgba(0, 0, 0, .3);
|
|
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .03);
|
|
}
|
|
.armory-model-canvas { width: 100%; height: 420px; }
|
|
.armory-model .armory-hint { padding: 12px; }
|
|
|
|
@media (max-width: 767px) {
|
|
.armory-model-canvas { height: 320px; }
|
|
}
|