Prefijos del tema nw- y uw- -> ns- (carpetas, ficheros, clases y rutas)
Renombrado completo de los prefijos heredados: 19 carpetas, 11 ficheros y 318 referencias en 35 ficheros de código, más las clases y las rutas url() de dentro del CSS del tema. Se usa git mv para conservar el historial. También fuera del código, que un sed no ve: - BD: votesite.image_url (4 filas) apuntaba a /nw-themes/... - Ficheros con la marca vieja en el NOMBRE: novawow-maintenance.webp -> nightspire-maintenance.webp (lo usa la página de mantenimiento) y store_novawow_response.js. ⚠ Alias en Caddy /nw-themes/* -> /ns-themes/*: los correos ENVIADOS antes del rebranding llevan esas rutas escritas y están en las bandejas de los usuarios. Sin el alias, sus imágenes se romperían. Verificado que las rutas viejas siguen sirviendo 200. Nota: ns-js/ y ns-js-handlers/ son CÓDIGO MUERTO (manejadores jQuery del portal Django, que ya se borró). Se midió en el navegador: la web no pide ni un solo JS del tema. Se renombran igualmente por consistencia, pero son candidatos a borrarse. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -17,7 +17,7 @@ export async function generateMetadata({ params }: { params: Promise<{ locale: s
|
||||
return { title: t('title') }
|
||||
}
|
||||
|
||||
const GOLD_ICON = '/nw-themes/nw-ryu/nw-images/nw-icons/money-gold.gif'
|
||||
const GOLD_ICON = '/ns-themes/ns-ryu/ns-images/ns-icons/money-gold.gif'
|
||||
|
||||
function GoldCell({ amount }: { amount: number }) {
|
||||
return (
|
||||
|
||||
@@ -53,7 +53,7 @@ export default async function DownloadAddonsPage() {
|
||||
<p className="third-brown small-font">{t(`downloadAddons.${a.descKey}`)}</p>
|
||||
</td>
|
||||
<td className="real-info-box no-wrap-td">
|
||||
<a href={a.url} target="_blank" rel="noopener noreferrer" className="nw-tool-btn">
|
||||
<a href={a.url} target="_blank" rel="noopener noreferrer" className="ns-tool-btn">
|
||||
{t('downloadAddons.download')}
|
||||
</a>
|
||||
</td>
|
||||
|
||||
@@ -17,7 +17,7 @@ export async function generateMetadata({ params }: { params: Promise<{ locale: s
|
||||
return { title: t('title') }
|
||||
}
|
||||
|
||||
const GOLD_ICON = '/nw-themes/nw-ryu/nw-images/nw-icons/money-gold.gif'
|
||||
const GOLD_ICON = '/ns-themes/ns-ryu/ns-images/ns-icons/money-gold.gif'
|
||||
|
||||
export default async function GoldCharacterPage({ params }: { params: Promise<{ locale: string }> }) {
|
||||
const { locale } = await params
|
||||
|
||||
@@ -65,8 +65,8 @@ export default async function LocaleLayout({
|
||||
rel="stylesheet"
|
||||
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css"
|
||||
/>
|
||||
{/* Tema real de NightSpire (nw-ryu). Va el ÚLTIMO para ganar la cascada. */}
|
||||
<link rel="stylesheet" href="/nw-themes/nw-ryu/nw-css/nightspire-style.css?v=2" />
|
||||
{/* Tema real de NightSpire (ns-ryu). Va el ÚLTIMO para ganar la cascada. */}
|
||||
<link rel="stylesheet" href="/ns-themes/ns-ryu/ns-css/nightspire-style.css?v=2" />
|
||||
{/* Config de los tooltips de wowhead (debe definirse antes de tooltips.js).
|
||||
OJO con el `window.`: tooltips.js lee `window.whTooltips`, y un `const` a
|
||||
nivel de script queda en el ámbito léxico del script (no crea propiedad en
|
||||
|
||||
@@ -36,7 +36,7 @@ export default async function MaintenancePage({ params }: { params: Promise<{ lo
|
||||
</p>
|
||||
{/* eslint-disable-next-line @next/next/no-img-element */}
|
||||
<img
|
||||
src="/nw-themes/nw-ryu/nw-images/nw-general/nightspire-maintenance.webp"
|
||||
src="/ns-themes/ns-ryu/ns-images/ns-general/nightspire-maintenance.webp"
|
||||
width={437}
|
||||
alt={t('maintenance.pageTitle')}
|
||||
/>
|
||||
|
||||
@@ -29,7 +29,7 @@ function wowAccountName(username: string): string {
|
||||
return i >= 0 ? `WOW${username.slice(i + 1)}` : username
|
||||
}
|
||||
|
||||
const ICONS = '/nw-themes/nw-ryu/nw-images/nw-icons'
|
||||
const ICONS = '/ns-themes/ns-ryu/ns-images/ns-icons'
|
||||
|
||||
export default async function AccountPage({ params }: { params: Promise<{ locale: string }> }) {
|
||||
const { locale } = await params
|
||||
@@ -82,7 +82,7 @@ export default async function AccountPage({ params }: { params: Promise<{ locale
|
||||
<legend>{t('accountState')}</legend>
|
||||
<div className="separate account-info">
|
||||
{/* eslint-disable-next-line @next/next/no-img-element */}
|
||||
<img src={rank.image} className="nw-rank" alt={`${t('level')} ${rank.level}`} title={`${t('level')} ${rank.level}`} />
|
||||
<img src={rank.image} className="ns-rank" alt={`${t('level')} ${rank.level}`} title={`${t('level')} ${rank.level}`} />
|
||||
<p><i className="fa-solid fa-coins account-ficon third-brown"></i> <span className="dp-color">{t('dp')}</span>: <span>{data.dp}</span> | <span className="vp-color">{t('vp')}</span>: <span>{data.vp}</span></p>
|
||||
<p><i className="fa-solid fa-shield-halved account-ficon third-brown"></i> {t('securityToken')}: <span>{data.securityTokenDate ? t('requested') : t('notRequested')}</span></p>
|
||||
<p><i className="fa-solid fa-lock-open red-info account-ficon"></i> {t('twofaLabel')}: <span> {t('twofaOff')}</span></p>
|
||||
|
||||
@@ -14,7 +14,7 @@ export async function generateMetadata({ params }: { params: Promise<{ locale: s
|
||||
return { title: t('twofaLogin.pageTitle') }
|
||||
}
|
||||
|
||||
const IMG = '/nw-themes/nw-ryu/nw-images'
|
||||
const IMG = '/ns-themes/ns-ryu/ns-images'
|
||||
|
||||
export default async function Security2faLoginPage({ params }: { params: Promise<{ locale: string }> }) {
|
||||
const { locale } = await params
|
||||
@@ -40,7 +40,7 @@ export default async function Security2faLoginPage({ params }: { params: Promise
|
||||
<div className="twofa-login-info">
|
||||
<img
|
||||
className="twofa-login-preview"
|
||||
src={`${IMG}/nw-general/nw-authenticator-preview.png`}
|
||||
src={`${IMG}/ns-general/ns-authenticator-preview.png`}
|
||||
alt={t('twofaLogin.previewAlt')}
|
||||
/>
|
||||
<div className="twofa-login-info-text">
|
||||
|
||||
@@ -100,7 +100,7 @@ async function PlatformBox({
|
||||
)
|
||||
}
|
||||
|
||||
const LOGO_BASE = '/nw-themes/nw-ryu/nw-images/nw-logos'
|
||||
const LOGO_BASE = '/ns-themes/ns-ryu/ns-images/ns-logos'
|
||||
|
||||
export default async function TransHistoryPage({ params }: { params: Promise<{ locale: string }> }) {
|
||||
const { locale } = await params
|
||||
|
||||
+30
-30
@@ -2,14 +2,14 @@
|
||||
|
||||
/* Tokens de diseño NightSpire (paleta oscura fantasía WotLK). */
|
||||
@theme {
|
||||
--color-nw-bg: #140d08;
|
||||
--color-nw-panel: #241812;
|
||||
--color-nw-panel-2: #2c1e14;
|
||||
--color-nw-border: #4a3320;
|
||||
--color-nw-gold: #d79602;
|
||||
--color-nw-gold-light: #f0b93f;
|
||||
--color-nw-text: #e8dccb;
|
||||
--color-nw-muted: #b1997f;
|
||||
--color-ns-bg: #140d08;
|
||||
--color-ns-panel: #241812;
|
||||
--color-ns-panel-2: #2c1e14;
|
||||
--color-ns-border: #4a3320;
|
||||
--color-ns-gold: #d79602;
|
||||
--color-ns-gold-light: #f0b93f;
|
||||
--color-ns-text: #e8dccb;
|
||||
--color-ns-muted: #b1997f;
|
||||
}
|
||||
|
||||
:root {
|
||||
@@ -17,10 +17,10 @@
|
||||
}
|
||||
|
||||
/* El fondo, la tipografía (FuturaEF-Book) y los estilos base del <body>
|
||||
los controla el tema real nw-ryu (nightspire-style.css), cargado en el <head>
|
||||
los controla el tema real ns-ryu (nightspire-style.css), cargado en el <head>
|
||||
del layout. No los redefinimos aquí para que el tema Django quede idéntico. */
|
||||
|
||||
/* El tema nw-ryu se diseñó para los defaults del navegador (igual que la web
|
||||
/* El tema ns-ryu se diseñó para los defaults del navegador (igual que la web
|
||||
Django, que NO usa Tailwind). El preflight de Tailwind rompe dos cosas:
|
||||
1) box-sizing:border-box hace que la height fija de los inputs incluya el
|
||||
padding → campos aplastados. Volvemos a content-box SOLO en los inputs de
|
||||
@@ -102,20 +102,20 @@ img {
|
||||
|
||||
/* Componentes reutilizables */
|
||||
@layer components {
|
||||
.nw-btn {
|
||||
@apply inline-flex items-center justify-center rounded-md bg-nw-gold px-5 py-2.5 font-semibold text-[#1b120b] transition hover:bg-nw-gold-light;
|
||||
.ns-btn {
|
||||
@apply inline-flex items-center justify-center rounded-md bg-ns-gold px-5 py-2.5 font-semibold text-[#1b120b] transition hover:bg-ns-gold-light;
|
||||
}
|
||||
.nw-btn-ghost {
|
||||
@apply inline-flex items-center justify-center rounded-md border border-nw-border px-5 py-2.5 font-semibold text-nw-text transition hover:border-nw-gold hover:text-nw-gold-light;
|
||||
.ns-btn-ghost {
|
||||
@apply inline-flex items-center justify-center rounded-md border border-ns-border px-5 py-2.5 font-semibold text-ns-text transition hover:border-ns-gold hover:text-ns-gold-light;
|
||||
}
|
||||
.nw-card {
|
||||
@apply rounded-xl border border-nw-border/70 bg-nw-panel/80 p-5 shadow-lg shadow-black/30 backdrop-blur;
|
||||
.ns-card {
|
||||
@apply rounded-xl border border-ns-border/70 bg-ns-panel/80 p-5 shadow-lg shadow-black/30 backdrop-blur;
|
||||
}
|
||||
.nw-heading {
|
||||
@apply bg-gradient-to-b from-nw-gold-light to-nw-gold bg-clip-text font-extrabold tracking-wide text-transparent;
|
||||
.ns-heading {
|
||||
@apply bg-gradient-to-b from-ns-gold-light to-ns-gold bg-clip-text font-extrabold tracking-wide text-transparent;
|
||||
}
|
||||
.nw-input {
|
||||
@apply w-full rounded-md border border-nw-border bg-nw-panel-2 px-3 py-2 text-nw-text outline-none transition focus:border-nw-gold;
|
||||
.ns-input {
|
||||
@apply w-full rounded-md border border-ns-border bg-ns-panel-2 px-3 py-2 text-ns-text outline-none transition focus:border-ns-gold;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,7 +124,7 @@ img {
|
||||
color: #7cc0f7;
|
||||
}
|
||||
|
||||
/* Foro: textarea con el look del tema real (el tema nw-ryu no estiliza textarea base). */
|
||||
/* Foro: textarea con el look del tema real (el tema ns-ryu no estiliza textarea base). */
|
||||
textarea {
|
||||
width: 100%;
|
||||
background-color: #000;
|
||||
@@ -140,7 +140,7 @@ textarea:focus {
|
||||
}
|
||||
|
||||
/* Foro: barra de herramientas del editor y paginación (colores del tema). */
|
||||
.nw-tool-btn {
|
||||
.ns-tool-btn {
|
||||
border: 2px solid #352e2b;
|
||||
background: hsla(0, 0%, 100%, 0.05);
|
||||
color: #ebdec2;
|
||||
@@ -148,14 +148,14 @@ textarea:focus {
|
||||
cursor: pointer;
|
||||
transition: 0.3s;
|
||||
}
|
||||
.nw-tool-btn:hover {
|
||||
.ns-tool-btn:hover {
|
||||
background: hsla(0, 0%, 100%, 0.1);
|
||||
color: #fff;
|
||||
}
|
||||
/* Paginación con el estilo de los botones del tema (borde + fondo tenue + hover).
|
||||
Los selectores :link/:visited elevan la especificidad para ganar a las reglas
|
||||
`a`/`a:visited` del tema (que si no dejan los enlaces visitados en azul). */
|
||||
.nw-page-link {
|
||||
.ns-page-link {
|
||||
display: inline-block;
|
||||
min-width: 42px;
|
||||
padding: 9px 14px;
|
||||
@@ -165,17 +165,17 @@ textarea:focus {
|
||||
text-align: center;
|
||||
transition: 0.3s;
|
||||
}
|
||||
.nw-page-link:link,
|
||||
.nw-page-link:visited {
|
||||
.ns-page-link:link,
|
||||
.ns-page-link:visited {
|
||||
color: #ebdec2;
|
||||
}
|
||||
.nw-page-link:hover {
|
||||
.ns-page-link:hover {
|
||||
background: hsla(0, 0%, 100%, 0.1);
|
||||
color: #fff;
|
||||
}
|
||||
.nw-page-current,
|
||||
.nw-page-current:link,
|
||||
.nw-page-current:visited {
|
||||
.ns-page-current,
|
||||
.ns-page-current:link,
|
||||
.ns-page-current:visited {
|
||||
border-color: #b17c02;
|
||||
color: #d79602;
|
||||
background: hsla(40, 90%, 45%, 0.12);
|
||||
|
||||
Reference in New Issue
Block a user