Rediseña panel y auth con la identidad de la landing B2C

- Vista de leads en tarjetas + tabla con toggle (tarjetas por defecto, preferencia persistida)
- Galería de trabajos: gestión en /panel/galeria y bloque público en el funnel
- Selector de tema por reformista (presets + color de marca opcional) aplicado a la landing
- Login y registro rediseñados a pantalla partida 50/50 con foto de reforma
- Enlace "Entrar" funcional en la cabecera del funnel; elimina Navbar muerto
- Unifica tipografía y botones del panel con los tokens de la landing

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Carlos Narro
2026-06-01 13:51:00 +02:00
parent a91fe5ce2c
commit 1ea5d70675
30 changed files with 2797 additions and 283 deletions

View File

@@ -109,7 +109,10 @@ function LeadForm({ slug }: { slug: string }) {
role="alert"
aria-live="polite"
>
<div className="w-16 h-16 bg-black text-white rounded-full flex items-center justify-center mb-2">
<div
className="w-16 h-16 rounded-full flex items-center justify-center mb-2"
style={{ backgroundColor: 'var(--brand, #0a0a0a)', color: 'var(--brand-contrast, #fff)' }}
>
<svg width="28" height="28" viewBox="0 0 32 32" fill="none" aria-hidden="true">
<path
d="M6 16l7 7L26 9"
@@ -294,7 +297,7 @@ function LeadForm({ slug }: { slug: string }) {
{/* Submit */}
<button
type="submit"
className="btn btn-primary w-full justify-center mt-1 disabled:opacity-50 disabled:cursor-not-allowed disabled:transform-none"
className="btn btn-brand w-full justify-center mt-1 disabled:opacity-50 disabled:cursor-not-allowed disabled:transform-none"
disabled={status === 'loading' || !consentsGranted}
aria-busy={status === 'loading'}
aria-disabled={status === 'loading' || !consentsGranted}
@@ -370,7 +373,7 @@ export default function Hero({ slug }: { slug: string }) {
{/* CTAs */}
<div className="reveal opacity-0 translate-y-6 transition-all duration-700 ease-out delay-200 flex flex-col sm:flex-row gap-3">
<button
className="btn btn-primary btn-lg w-full sm:w-auto"
className="btn btn-brand btn-lg w-full sm:w-auto"
onClick={() => document.querySelector('#contact')?.scrollIntoView({ behavior: 'smooth' })}
>
Calcular mi reforma gratis
@@ -433,7 +436,10 @@ export default function Hero({ slug }: { slug: string }) {
},
].map(({ icon, title, description }) => (
<div key={title} className="flex flex-col gap-4 items-center text-center">
<div className="w-12 h-12 rounded-full bg-black flex items-center justify-center text-white">
<div
className="w-12 h-12 rounded-full flex items-center justify-center"
style={{ backgroundColor: 'var(--brand, #0a0a0a)', color: 'var(--brand-contrast, #fff)' }}
>
{icon}
</div>
<h3 className="text-lg font-black tracking-tight text-black">{title}</h3>