Un kit, cinco identidades.
Tokens, tipografías y componentes extraídos del código real de cada front-end — sin valores inventados. Cada componente se renderiza en vivo con los estilos del proyecto y su snippet de clases debajo. La pestaña Comparativa pone las paletas y tipografías lado a lado.
NEXO SD
Sitio corporativo + demos. Azul-noche tech.
SIGE ERP
ERP escolar CESP. Institucional, solo light.
SIGE Landing
Landing CESP. Misma paleta institucional.
diecast-house
SaaS de colección. Atelier automotriz oscuro.
Portafolio
Portfolio personal. Stack legacy MUI.
.t-nexo, .t-sige…) con los hex, radios y
sombras reales del repo. Sin build ni Tailwind en runtime — despliegue estático puro.
NEXO SD
Sitio corporativo y demos de portafolio. Identidad azul-noche “tech”: fondo marino profundo, azul eléctrico y cian para acentos, glows y gradientes de marca.
@theme pero se aplican
hardcoded inline (bg-[#1477F8]), no vía clases de tema — decisión
documentada en docs/DECISIONS.md. Fuente de verdad de estilos:
app/globals.css + ESTILOS.md.
Fundamentos
Paleta
from-[#1477F8] to-[#25C6DA] ·
Glows shadow-[0_0_30px_rgba(20,119,248,0.45)],
shadow-[0_0_20px_rgba(37,198,218,0.5)] ·
opacidades usadas: /90 /30 /25 /20 /15 /12 /10 /8 /6 /5 /4 /3 /2
Tipografía
Radios y superficies
Elementos decorativos (definidos en globals.css)
.gradient-text { background: linear-gradient(90deg,#1477F8,#25C6DA); -webkit-background-clip: text; color: transparent; }
.accent-line { background: linear-gradient(90deg, transparent, #1477F8, #25C6DA, transparent); }
.dot-grid { background-image: radial-gradient(circle, rgba(255,255,255,.12) 1px, transparent 1px); background-size: 24px 24px; }Componentes
<button class="group inline-flex items-center gap-2 px-6 py-3.5 rounded-lg bg-[#1477F8] hover:bg-[#1477F8]/90 text-white font-inter font-medium text-sm transition-all duration-200 hover:shadow-[0_0_30px_rgba(20,119,248,0.45)] hover:-translate-y-0.5">…</button> <!-- CTA --> px-8 py-4 rounded-xl font-poppins font-semibold text-base <!-- submit --> w-full py-4 rounded-xl bg-gradient-to-r from-[#1477F8] to-[#25C6DA] font-semibold
<label class="font-inter text-xs text-[#A0AEC0] font-medium">Nombre</label> <input class="w-full bg-white/5 border border-white/8 rounded-xl px-4 py-3 text-sm font-inter text-white placeholder:text-[#A0AEC0]/40 focus:outline-none focus:border-[#1477F8] transition-all" />
NEXO Hotel
Demo de PMS hotelero con reservas y housekeeping.
NEXO Dental
Agenda clínica, expediente y recordatorios.
<div class="group block rounded-3xl border border-white/6 bg-white/[0.03] overflow-hidden
hover:border-[#1477F8]/30 transition-all duration-500">
<div class="w-11 h-11 rounded-xl flex items-center justify-center"
style="background:#1477F815;border:1px solid #1477F825"><Icon size={20} strokeWidth={1.5}/></div>
</div>.glass-card { background: rgba(255,255,255,.04); border: 1px solid rgba(255,255,255,.06); backdrop-filter: blur(8px); }
<span class="tag" /> → rounded-full bg-white/4 border border-white/6 text-[11px] text-[#A0AEC0]
<div class="w-14 h-14 rounded-full bg-[#10B981]/15 border border-[#10B981]/25" /><nav class="fixed top-0 inset-x-0 z-50 transition-all duration-300 bg-[#071423]/90 backdrop-blur-md border-b border-white/5">
<a class="text-sm text-[#A0AEC0] hover:text-white relative group">Servicios
<span class="absolute -bottom-0.5 left-0 w-0 h-px bg-[#25C6DA] group-hover:w-full transition-all duration-300" />
</a>
<a class="px-5 py-2.5 rounded-lg bg-[#1477F8] hover:bg-[#1477F8]/90 text-white text-sm font-medium">Contacto</a>SIGE ERP
ERP escolar para CESP (cliente). Paleta institucional provista por el cliente (navy / crimson / gold + neutros bone / slate / mist). Superficie clara, sin modo oscuro por decisión explícita.
success / warning (+ -bg / -border) calibrados al mismo peso tonal.
error reutiliza crimson. navy-deep / gold-deep son shades para hover / contraste.
Fundamentos
Paleta institucional (6 colores del cliente)
Semánticos (derivados ad-hoc)
Tipografía
Radios y sombras
Componentes
<button class="inline-flex items-center justify-center gap-2 rounded-lg bg-navy px-3 py-2 text-sm font-medium text-white transition-colors hover:bg-navy-deep disabled:opacity-50">…</button>
export const INPUT_CLASS = 'mt-1 w-full rounded-lg border border-mist px-3 py-2 text-sm text-slate focus:border-navy focus:ring-2 focus:ring-navy/20 focus:outline-none disabled:opacity-50'; export const LABEL_CLASS = 'block text-sm font-medium text-slate/80';
<ListboxButton class="${INPUT_CLASS} flex items-center justify-between gap-2 text-left">…</ListboxButton>
<ListboxOptions class="absolute z-20 mt-1 max-h-60 w-max min-w-full max-w-xs overflow-y-auto
rounded-lg border border-mist bg-white py-1 text-sm shadow-lg">
<ListboxOption class="cursor-pointer px-3 py-2 ... [focus] bg-navy/10 [selected] font-semibold text-navy" />// activo / ACTIVO <span class="inline-flex items-center rounded-full border border-success-border bg-success-bg px-2.5 py-0.5 text-xs font-medium text-success">Activo</span> // inactivo / LICENCIA → border-warning-border bg-warning-bg text-warning // BAJA → border-error-border bg-error-bg text-crimson
<span role="tooltip" class="pointer-events-none z-50 max-w-xs rounded-md bg-navy
px-2.5 py-1.5 text-xs font-medium text-bone shadow-md">
{label}
<span class="absolute left-1/2 size-1.5 -translate-x-1/2 rotate-45 bg-navy -bottom-0.5" />
</span><div class="animate-pulse rounded bg-mist h-4 w-full max-w-40" /> <div class="rounded-lg border-l-4 border-navy bg-white p-6 shadow-sm"> // border-crimson en la variante alerta <b class="font-display text-2xl text-navy">1 248</b> </div>
- ✓ Más de 12 caracteres
- ✓ Una mayúscula
- · Un símbolo
- ✓ Sin secuencias obvias
<div class="h-1.5 flex-1 rounded-full transition-colors ${i < puntaje ? COLOR_POR_NIVEL[nivel] : 'bg-mist'}" />
// COLOR_POR_NIVEL: muy-debil|debil → bg-crimson · media → bg-warning · fuerte|muy-fuerte → bg-success<Link class="group relative flex items-center gap-3 rounded-lg py-2 px-3 text-sm font-medium
focus-visible:ring-2 focus-visible:ring-gold
${activo ? 'bg-white/10 text-bone' : 'text-bone/60 hover:bg-white/5 hover:text-bone'}">
<span class="absolute left-0 h-5 rounded-r-full bg-gold ${activo ? 'w-[3px] opacity-100' : 'w-0 opacity-0'}" />[data-sonner-toaster] { --normal-bg: var(--bone); --normal-border: var(--mist); --normal-text: var(--slate); }SIGE Landing
Landing pública de CESP. Comparte la paleta institucional exacta con SIGE ERP pero con otra jerarquía: crimson + gold protagonizan los CTAs sobre fondo bone; Fraunces para titulares.
tailwind.config.ts (estilo v3, auto-detectado
por el modo compat de Tailwind v4); los componentes aplican los colores con clases
nombradas (bg-navy, text-[#8C1D2B]) y hex inline, sin capa de tema.
Fundamentos
Paleta (misma que SIGE ERP)
Tipografía
Radios y sombras
Componentes
<a class="group inline-flex items-center gap-3 px-8 py-4 rounded-xl bg-[#8C1D2B] hover:bg-[#8C1D2B]/90 border border-[#B8985E]/25 text-[#B8985E] font-body font-semibold hover:shadow-[0_10px_40px_-8px_rgba(184,152,94,0.45)]">Solicitar información</a> <!-- secondary --> border border-[#1B2A4A]/20 text-[#1B2A4A] hover:bg-[#B8985E]/10 hover:border-[#B8985E] <!-- mobile --> bg-[#1b2a4a] text-white rounded-sm shadow-md
<span class="relative py-2 font-body text-base font-bold text-[#1b2a4a] group">Programas <span class="absolute -bottom-1 left-0 h-[2px] w-0 bg-[#1b2a4a] group-hover:w-full transition-all duration-300" /> </span> <span class="w-8 h-px bg-[#B8985E]" /> <span class="text-xs text-[#8C1D2B] tracking-[0.2em] uppercase">…</span>
Ingeniería Civil
Modalidad escolarizada · 9 cuatrimestres · RVOE vigente.
<div class="bg-white/95 shadow-2xl rounded-lg border border-[#1b2a4a]/10 p-6 backdrop-blur-md"> <a class="flex items-start gap-2 p-2.5 rounded-md hover:bg-[#1b2a4a]/5 transition-colors group">…</a> </div>
<header class="fixed top-0 inset-x-0 z-50 border-b border-[#1b2a4a]/10 py-4 transition-all duration-300 bg-white/60 backdrop-blur-xl shadow-[0_2px_20px_rgba(27,42,74,0.08)]">…</header>
diecast-house
SaaS de colección de diecast (producto propio). Dirección de arte: “atelier automotriz de ultra lujo” — negro casi puro, acentos metálicos, un único rojo Pagani usado con moderación extrema, esquinas angulares.
docs/DESIGN-SYSTEM.md,
la especificación completa del sistema; los componentes se renderizan aquí tal como
esa guía los define.
Fundamentos
Base — fondos y superficies
Texto y metálicos
Acento signature + semánticos
Escala tipográfica
Espaciado · Radios · Sombras · Easing
cubic-bezier(0.65, 0, 0.35, 1) — todas las transiciones de UI, lentas y deliberadas (>300ms). Nunca sombras de color.Componentes
<button class="inline-flex items-center justify-center rounded font-medium uppercase tracking-[0.08em] transition-all duration-200 ease-luxury disabled:opacity-50 bg-accent text-text-on-accent hover:bg-accent-hover shadow-button // primary px-6 py-3 text-label">…</button> // secondary: bg-transparent text-metal-bright border border-metal-dark hover:border-metal-mid hover:bg-bg-tertiary // ghost: text-metal-mid hover:text-text-primary · danger: text-error border border-error/30 hover:bg-error/10
<span class="inline-flex items-center font-medium uppercase tracking-[0.08em] px-3 py-1 text-label rounded-sm
bg-accent-muted text-accent border border-accent/30">…</span>
// success/warning/error/info: bg-{color}/10 text-{color} border border-{color}/30
// default: bg-bg-tertiary text-text-secondary border border-metal-line<label class="block text-label font-medium text-text-secondary mb-2 uppercase tracking-[0.08em]">Modelo</label> <input class="w-full bg-bg-tertiary border border-metal-line rounded-sm px-4 py-3 text-body text-text-primary placeholder-text-tertiary focus:outline-none focus:border-metal-mid transition-colors duration-200" /> // error → border-error + <p class="mt-1 text-body-sm text-error">
<div class="rounded-none border border-metal-line shadow-card transition-all duration-200 ease-luxury hover:shadow-card-hover hover:-translate-y-0.5 bg-bg-secondary p-6"> <h3 class="text-display-sm font-display font-semibold text-text-primary">…</h3> <div class="text-body text-text-secondary">…</div> <div class="mt-6 flex gap-3">…</div> </div> // elevated: border-metal-dark/50 · surface: bg-bg-tertiary border-metal-line/50
Eliminar pieza
Tu garaje está vacío
Aún no has añadido ninguna pieza a tu colección.
// overlay
<div class="fixed inset-0 z-50 flex items-center justify-center bg-black/80 backdrop-blur-sm">
<div class="bg-bg-elevated border border-metal-dark rounded-lg shadow-modal max-h-[90vh] overflow-y-auto">
<div class="flex items-center justify-between p-6 border-b border-metal-dark/50">
<h2 class="text-display-sm font-display font-semibold">…</h2>.carbon-fiber { background-image: linear-gradient(45deg, rgba(255,255,255,.01) 25%, transparent 25%) …; background-size: 20px 20px; }
.blueprint-line { height: 1px; background: linear-gradient(90deg, transparent 0%, #2A2A2A 20%, #2A2A2A 80%, transparent 100%); }Portafolio
Portfolio personal (stack legacy). No usa Tailwind: MUI 5 + Emotion + un SCSS con botones de hover “fancy”. Poca estructura de tokens — un azul de marca, Montserrat, y efectos box-shadow en cascada.
Hooks/ThemeHook.tsx)
define fuente, primario y modo claro/oscuro; el resto son estilos sueltos en SCSS. Se incluye
por completitud — no como referencia de patrón.
Fundamentos
Colores
Tipografía
Radios
Componentes
// ThemeHook.tsx
button: { borderRadius: '5000px' }
palette.primary.main: '#0092ff'
<Button variant="contained">Contáctame</Button>button { background: none; border: 2px solid; color: var(--color); transition: 0.25s; }
button:hover { border-color: var(--hover); color: #fff; }
.fill:hover { box-shadow: inset 0 0 0 2em var(--hover); }
.raise:hover { box-shadow: 0 0.5em 0.5em -0.4em var(--hover); transform: translateY(-0.25em); }
.slide:hover { box-shadow: inset 6.5em 0 0 0 var(--hover); }
.offset { box-shadow: 0.3em 0.3em 0 0 var(--color), inset 0.3em 0.3em 0 0 var(--color); } // --color: #360A5Cdiecast-house
SaaS de colección · Next.js + Supabase.
<TextField variant="outlined" label={label} multiline={multi} rows={multi ? 5 : undefined}
sx={{ width: '100%', input: { color }, textarea: { color } }} />
.br { border-radius: 6px; }
.ball { width: 20px; height: 20px; border: 3px solid #0092ff; border-radius: 50%; position: fixed; pointer-events: none; }Comparativa
Paletas y tipografías de los cinco proyectos, lado a lado.
Colores por rol
| Rol | NEXO SD | SIGE ERP | SIGE Landing | diecast-house | Portafolio |
|---|---|---|---|---|---|
| Fondo base | #071423 | #f7f6f3 | #F7F6F3 | #0A0A0A | #ffffff |
| Primario / acción | #1477F8 | #1b2a4a | #8C1D2B | #A6192E | #0092ff |
| Acento secundario | #25C6DA | #b8985e | #B8985E | #C4C4C4 | #360A5C |
| success | #10B981 | #2f6f52 | n/d | #1A7A4A | n/d |
| warning | n/d | #8a6d3a | n/d | #B87333 | n/d |
| error | n/d | #8c1d2b | n/d | #8B1A1A | n/d |
| Texto principal | #FFFFFF | #3a4256 | #3A4256 | #F5F5F5 | #000000 |