diff --git a/mvp/b2c/src/app/globals.css b/mvp/b2c/src/app/globals.css index 3afe9d9..02cdd60 100644 --- a/mvp/b2c/src/app/globals.css +++ b/mvp/b2c/src/app/globals.css @@ -44,6 +44,15 @@ /* Fonts */ --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + --font-display: 'Instrument Serif', Georgia, 'Times New Roman', serif; + + /* Paleta de marca B2B "Architectural Warmth" — panel y área autenticada */ + --color-primary-50: #f4f8f5; + --color-primary-100: #e8f0eb; + --color-primary-500: #4d8a6d; + --color-primary-700: #2f5c46; + --color-primary-900: #1f3a2e; + --color-stone-50: #f7f8f7; /* Transitions */ --transition-fast: 150ms ease; diff --git a/mvp/b2c/src/app/login/page.tsx b/mvp/b2c/src/app/login/page.tsx index 27f79b0..4348829 100644 --- a/mvp/b2c/src/app/login/page.tsx +++ b/mvp/b2c/src/app/login/page.tsx @@ -16,7 +16,7 @@ export default function LoginPage() { >
-

Entra en tu panel

+

Entra en tu panel

Gestiona tus leads y tu funnel.

@@ -27,7 +27,7 @@ export default function LoginPage() { type="email" required autoComplete="email" - className="rounded-lg border border-gray-300 px-3 py-2.5 focus:border-gray-900 focus:outline-none focus:ring-1 focus:ring-gray-900" + className="rounded-lg border border-gray-300 px-3 py-2.5 focus:border-primary-700 focus:outline-none focus:ring-1 focus:ring-primary-700" /> {error &&

{error}

} -

¿No tienes cuenta?{' '} - + Empieza gratis

diff --git a/mvp/b2c/src/app/panel/[id]/page.tsx b/mvp/b2c/src/app/panel/[id]/page.tsx index 1e05b42..47a15a2 100644 --- a/mvp/b2c/src/app/panel/[id]/page.tsx +++ b/mvp/b2c/src/app/panel/[id]/page.tsx @@ -47,7 +47,7 @@ export default async function LeadDetailPage({ params }: { params: Promise<{ id: return (
- + ← Volver a leads @@ -55,7 +55,7 @@ export default async function LeadDetailPage({ params }: { params: Promise<{ id:
-

{lead.nombre}

+

{lead.nombre}

{lead.tipoReforma ? TIPO_LABEL[lead.tipoReforma] : 'Reforma'} ·{' '} {lead.provincia ?? '—'} · entró {formatFecha(lead.createdAt)} @@ -80,7 +80,7 @@ export default async function LeadDetailPage({ params }: { params: Promise<{ id:

Solicitada el {formatFecha(lead.testimonioSolicitadoAt)}. Comparte este enlace con el cliente para que deje su opinión. Cuando la envíe, la verás en{' '} - + Opiniones {' '} para aprobarla. @@ -96,7 +96,7 @@ export default async function LeadDetailPage({ params }: { params: Promise<{ id: @@ -254,7 +254,7 @@ export default async function LeadDetailPage({ params }: { params: Promise<{ id:

Descargar PDF @@ -262,7 +262,7 @@ export default async function LeadDetailPage({ params }: { params: Promise<{ id: href={`/panel/${lead.id}/presupuesto`} target="_blank" rel="noopener" - className="text-sm font-medium text-gray-500 hover:text-black" + className="text-sm font-medium text-gray-500 hover:text-primary-700" > Ver en el navegador @@ -320,7 +320,7 @@ export default async function LeadDetailPage({ params }: { params: Promise<{ id: diff --git a/mvp/b2c/src/app/panel/empresa/page.tsx b/mvp/b2c/src/app/panel/empresa/page.tsx index 99d22e8..3ad223e 100644 --- a/mvp/b2c/src/app/panel/empresa/page.tsx +++ b/mvp/b2c/src/app/panel/empresa/page.tsx @@ -18,7 +18,7 @@ export default async function EmpresaPage() { return (
-

Datos de empresa

+

Datos de empresa

Estos datos y el logo aparecen en la cabecera de los presupuestos en PDF que recibe el cliente. Manténlos al día. @@ -62,7 +62,7 @@ export default async function EmpresaPage() { href={funnelUrl} target="_blank" rel="noopener noreferrer" - className="text-black underline underline-offset-2 break-all" + className="text-primary-700 underline underline-offset-2 break-all" > {funnelUrl} @@ -159,7 +159,7 @@ export default async function EmpresaPage() { type="checkbox" name="aboutEnabled" defaultChecked={perfil.aboutEnabled} - className="w-4 h-4 accent-black" + className="w-4 h-4 accent-[#2f5c46]" /> Mostrar el bloque “Quiénes somos” en mi funnel @@ -185,7 +185,7 @@ export default async function EmpresaPage() { /> -

diff --git a/mvp/b2c/src/app/panel/galeria/page.tsx b/mvp/b2c/src/app/panel/galeria/page.tsx index 752a4a8..49d1a57 100644 --- a/mvp/b2c/src/app/panel/galeria/page.tsx +++ b/mvp/b2c/src/app/panel/galeria/page.tsx @@ -11,7 +11,7 @@ export default async function GaleriaPage() { return (
-

Galería de trabajos

+

Galería de trabajos

Sube fotos de reformas que ya has hecho. Aparecen en tu funnel para dar confianza al cliente antes de pedir presupuesto. diff --git a/mvp/b2c/src/app/panel/layout.tsx b/mvp/b2c/src/app/panel/layout.tsx index 2bf4bc4..8246043 100644 --- a/mvp/b2c/src/app/panel/layout.tsx +++ b/mvp/b2c/src/app/panel/layout.tsx @@ -27,14 +27,14 @@ export default async function PanelLayout({ children }: { children: React.ReactN const nombreEmpresa = tenant?.nombreEmpresa ?? 'Reformix'; return ( -

+
- + R - Reformix + Reformix / {nombreEmpresa} diff --git a/mvp/b2c/src/app/panel/opiniones/page.tsx b/mvp/b2c/src/app/panel/opiniones/page.tsx index 11181b9..21b530e 100644 --- a/mvp/b2c/src/app/panel/opiniones/page.tsx +++ b/mvp/b2c/src/app/panel/opiniones/page.tsx @@ -33,7 +33,7 @@ export default async function OpinionesPage() { return (
-

Opiniones

+

Opiniones

Las opiniones que te dejan tus clientes. Aprueba las que quieras mostrar en tu funnel; solo las publicadas aparecen en tu página. diff --git a/mvp/b2c/src/app/panel/page.tsx b/mvp/b2c/src/app/panel/page.tsx index d9f9a0e..5147ad2 100644 --- a/mvp/b2c/src/app/panel/page.tsx +++ b/mvp/b2c/src/app/panel/page.tsx @@ -50,7 +50,7 @@ export default async function PanelPage({ return (

-

Leads

+

Leads

{resumen.total} leads en total · {resumen.porEstado['nuevo'] ?? 0} sin contactar

@@ -79,7 +79,7 @@ export default async function PanelPage({ href={f.value === 'todos' ? '/panel' : `/panel?estado=${f.value}`} className={`px-3 py-1.5 rounded-full text-sm font-medium border transition-colors ${ active - ? 'bg-black text-white border-black' + ? 'bg-primary-700 text-white border-primary-700' : 'bg-white text-gray-600 border-gray-200 hover:border-gray-400' }`} > diff --git a/mvp/b2c/src/app/panel/precios/page.tsx b/mvp/b2c/src/app/panel/precios/page.tsx index f32032e..4e6a63c 100644 --- a/mvp/b2c/src/app/panel/precios/page.tsx +++ b/mvp/b2c/src/app/panel/precios/page.tsx @@ -28,7 +28,7 @@ export default async function PreciosPage() { return (
-

Tabla de precios

+

Tabla de precios

Define los precios unitarios y la mano de obra. El motor calcula el presupuesto a partir de estos valores y las medidas del lead. @@ -73,7 +73,7 @@ export default async function PreciosPage() { - @@ -112,7 +112,7 @@ export default async function PreciosPage() { /> ))} - @@ -212,7 +212,7 @@ export default async function PreciosPage() { - @@ -234,7 +234,7 @@ export default async function PreciosPage() { placeholder="categoria,nombre,calidad,precio,unidad,descriptor_render,sku" className="w-full border border-gray-300 rounded-lg px-3 py-2 font-mono text-xs" /> - diff --git a/mvp/b2c/src/app/signup/page.tsx b/mvp/b2c/src/app/signup/page.tsx index 640708d..d475865 100644 --- a/mvp/b2c/src/app/signup/page.tsx +++ b/mvp/b2c/src/app/signup/page.tsx @@ -6,7 +6,7 @@ import { signup } from './actions'; import AuthShell from '@/components/auth/AuthShell'; const inputClass = - 'rounded-lg border border-gray-300 px-3 py-2.5 text-sm focus:border-gray-900 focus:outline-none focus:ring-1 focus:ring-gray-900'; + 'rounded-lg border border-gray-300 px-3 py-2.5 text-sm focus:border-primary-700 focus:outline-none focus:ring-1 focus:ring-primary-700'; export default function SignupPage() { const [error, formAction, pending] = useActionState(signup, null); @@ -19,7 +19,7 @@ export default function SignupPage() { >

-

Empieza gratis 14 días

+

Empieza gratis 14 días

Sin tarjeta. Configura tu catálogo y recibe leads.

@@ -51,19 +51,19 @@ export default function SignupPage() { className={inputClass} /> {error &&

{error}

} -

¿Ya tienes cuenta?{' '} - + Entrar

diff --git a/mvp/b2c/src/components/AppNav.tsx b/mvp/b2c/src/components/AppNav.tsx index 9969351..2d47f81 100644 --- a/mvp/b2c/src/components/AppNav.tsx +++ b/mvp/b2c/src/components/AppNav.tsx @@ -116,13 +116,13 @@ export default function AppNav({ links }: { links: readonly AppNavLink[] }) { {l.label} ))} - @@ -147,11 +147,11 @@ export default function AppNav({ links }: { links: readonly AppNavLink[] }) { aria-current={isActive ? 'page' : undefined} className={ 'relative flex flex-col items-center justify-center gap-1 pt-2.5 pb-2 text-[11px] font-medium transition-colors ' + - (isActive ? 'text-black' : 'text-gray-400 hover:text-gray-600') + (isActive ? 'text-primary-700' : 'text-gray-400 hover:text-gray-600') } > {isActive && ( -