Mendive Design System·Portada
Design System · v0.1 2 de septiembre de 2026 Web mobile-first

El sistema tiene reglas.
También tiene grietas.

Sistema de diseño para la web de Nicolás Mendive, abogado penalista. Traduce la identidad existente (logo, key visual y maqueta de la home) a un lenguaje de interfaz completo: tokens, componentes, iconografía, movimiento y patrones mobile.

Dirección creativa

La grieta en la columna.

El concepto no se inventó para este sistema: ya estaba en el logo. Una columna dórica, símbolo de la institución, con una grieta de la que sale una paloma. Todo lo que sigue traduce esa idea a pantalla.

La tensión

La marca vive entre dos fuerzas. Institucional: columna, navy profundo, serif clásica, retrato con biblioteca, el "Dr.". Desafiante: la grieta, la paloma, el voseo, la primera persona, la promesa de usar el sistema "en tu favor". No es un estudio jurídico solemne ni un abogado mediático: es alguien que conoce las reglas tan bien que sabe dónde ceden.

Cómo se ve en pantalla

Fondo navy casi negro que da calma en un momento de crisis. Tipografía sans ancha y liviana para todo lo que informa. Serif itálica dorada reservada para una palabra por título: la grieta en el bloque. Verde WhatsApp como única acción que grita. Formas de píldora: nada tiene aristas, porque quien llega está al límite.

Para quién diseñamos

Alguien a quien acaban de detener, allanar o citar, o más frecuentemente un familiar (madre, pareja, hermano) buscando desde el celular, de madrugada, con una mano, con miedo. No compara estudios: busca a alguien que le conteste ahora. Segundo usuario, minoritario: otros abogados que consultan o derivan causas complejas.

Brief asumido. Sin brief formal del cliente, el perfil se infiere de la maqueta ("Detuvieron a tu hijo menor de edad", "Familiar preso: domiciliaria"). Rango de edad, nivel socioeconómico y peso del segundo usuario quedan por confirmar.

Una acción domina cada pantalla

El botón de WhatsApp es el único elemento verde del sistema. Todo lo demás es navy, blanco y dorado. En mobile vive fijo en la zona del pulgar.

Cuerpo 16 px mínimo, 18 px en párrafos clave

Lectura con estrés y en movimiento. La maqueta usa el peso 200 para párrafos; el sistema lo admite solo desde 18 px sobre oscuro y usa 300 por defecto.

Targets de 44 a 56 px y píldoras anchas

Las opciones del selector de situación ocupan todo el ancho. Se tocan sin apuntar.

Labels literales, sin ingenio

"Escribime un WhatsApp ahora", "Te citaron a declarar". El usuario tiene que reconocerse en la frase, no interpretarla.

Qué convención del rubro se rompe y cuál se respeta

Se respetaSobriedad cromática, serif de autoridad, retrato formal, navy como base. El usuario en crisis necesita señales de seriedad, no originalidad.
Se rompeEl azul corporativo frío pasa a navy cálido casi negro. La balanza y el martillo desaparecen: el símbolo es una columna rota. El tono es voseo en primera persona: "conozco el sistema desde adentro", no "nuestro estudio ofrece".

Decisiones clave

Tipografía → NewBlack Typeface + Behind The Nineties itálica

Son las dos familias del paquete de marca. NewBlack (sans ancha, sin itálicas) hace todo el trabajo: títulos en 300, cuerpo en 300, botones en 700. Behind The Nineties aparece solo en itálica y solo en una palabra por título, como en la maqueta ("grietas.", "situación?").

Color → navy protagonista, dorado quirúrgico, verde único

El navy pinta superficies enteras (tema base oscuro). El dorado nunca es fondo: es texto de acento, overlines, bordes y el play del video. El verde existe únicamente para la acción de WhatsApp. El beige de la maqueta se convierte en el tema claro completo.

Forma → píldoras y radios generosos

Botones, chips y opciones son píldoras (radio total). Cards y video usan 20 px. Nada tiene esquina viva salvo el logo.

Espacio → aireado, una idea por bloque

Secciones separadas por 64 a 96 px. Las cards de prueba social van una debajo de otra en mobile, en grilla de 3 en desktop.

Movimiento → rápido y seco

120 a 320 ms, easing de salida sin rebote. Un penalista no hace piruetas. La única animación continua es el pulso del botón flotante de WhatsApp.

Imagen → retrato real con overlay navy, ilustración derivada del logo

La foto del cliente es el único recurso fotográfico. Se trata con un degradado navy hacia abajo, como en el hero de la maqueta. Ilustraciones y tramas salen de las estrías, la grieta y el marco octogonal del isotipo.

Decisiones pendientes con el cliente

Cuatro puntos que el material no resuelve y que este sistema asume provisoriamente: (1) el lockup oficial es el serif con "Abogado penalista", porque es el que usa la maqueta web; (2) el dorado es acento, no superficie; (3) el beige es tema claro completo; (4) al tocar una opción del selector de situación se abre WhatsApp con un mensaje prellenado. Cualquiera de las cuatro se puede revertir cambiando tokens, no componentes.

Color

Navy que calma, dorado que señala.

Cada color de marca cae exacto en un paso de su rampa. Los neutros están tintados hacia el beige de la maqueta. Los funcionales se armonizaron con la paleta en lugar de copiarse de una librería.

Colores de marca, tal cual vienen del material

Dos ajustes por accesibilidad. La maqueta pone texto blanco sobre el verde WhatsApp (2.2:1, no pasa AA en ningún tamaño): el sistema usa texto navy sobre el verde (8.5:1). Y usa un dorado apagado #c1ac77 sobre beige (1.9:1): el sistema lo reemplaza por gold-700 en títulos y gold-800 en texto chico.

Semánticos en contexto

Overline en text-accent

Texto primario sobre página

Texto secundario para descripciones.

Texto muted para captions y metadatos.

Link con subrayado que crece
bg-page · text-primary · text-secondary · text-muted · text-accent · text-link

Card sobre surface

Borde fino en border-strong, como en la maqueta.

Card raised

Sin borde, con elevación.

bg-surface · bg-surface-raised · border-strong
action-primary · text-on-action · action-secondary · action-disabled

Colores de situación

Tres colores con significado propio del dominio. No son funcionales: el rojo de "urgencia" no es "error". Se declaran como tokens semánticos separados para que nadie los mezcle.

Te pasó o llegó algo
situacion-urgencia · red-600 #a12a2a
Te acusan de...
situacion-acusacion · forest-800 #023a26
Quiero revisar mi causa
situacion-revision · navy-900 #122131

Pares de contraste verificados

49 pares declarados en tokens.json y verificados con check_contrast.py. Los más exigidos:

Tipografía

Una sans que informa, una serif que subraya.

NewBlack Typeface hace todo el trabajo: títulos livianos, cuerpo, botones. Behind The Nineties aparece solo en itálica y solo en una palabra por título. Ambas vienen del paquete de marca en woff2 y se sirven localmente.

NewBlack 200

NewBlack 300

NewBlack 400

NewBlack 600

NewBlack 700

font-body · NewBlack Typeface · sin itálicas · fallback Helvetica Neue, Arial

Nineties itálica 400

Nineties itálica 500

Nineties itálica 600

Nineties recta 400 (no usar)

font-display · Behind The Nineties · solo itálica · fallback Georgia

Escala con texto real

El sistema tiene reglas. También tiene grietas.

display-xl · NewBlack 300 · clamp(2.5rem, 1.75rem + 3.2vw, 4.5rem) · lh 1.05 · tracking -0.01em · acento: display 400 italic 1.08em

¿Cuál es tu situación?

display-lg · NewBlack 300 · clamp(2.25rem, 1.6rem + 2.6vw, 3.5rem) · lh 1.1

Por qué conozco el sistema como nadie

heading-1 · NewBlack 300 · clamp(1.75rem, 1.4rem + 1.5vw, 2.5rem) · lh 1.15

Conocerlas marca la diferencia

heading-2 · NewBlack 700 · clamp(1.375rem, 1.2rem + 0.7vw, 1.75rem) · lh 1.2

+10 años litigando todos los días.

heading-3 · NewBlack 700 · clamp(1.25rem, 1.15rem + 0.3vw, 1.375rem) · lh 1.25

Detuvieron a un conocido o familiar

heading-4 · NewBlack 600 · 1.0625rem · lh 1.3

Soy Dr. Nicolás Mendive, abogado penalista. Brindo defensa urgente ante detenciones, allanamientos, denuncias o declaraciones. Conozco el sistema desde adentro y sé cómo usarlo en tu favor.

body-lg · NewBlack 300 · 1.125rem · lh 1.55 · (peso 200 admitido solo ≥18 px sobre oscuro)

Sus procedimientos, sus criterios, sus tiempos. Estrategias con eficacia comprobada por personas que hoy están libres y reincorporadas a su vida.

body · NewBlack 300 · 1rem · lh 1.55

Consulta gratuita y confidencial las 24 hs. Respuesta en minutos.

body-sm · NewBlack 400 · 0.875rem · lh 1.5

Dr. Nicolás Mendive · Defensa penal

caption · NewBlack 400 · 0.8125rem · lh 1.4 · tracking 0.01em

Sé lo que te está pasando o a tu familia

overline · NewBlack 300 · 0.8125rem · uppercase · tracking 0.2em · color text-accent

Escribime un WhatsApp ahora

button-lg · NewBlack 700 · 1.125rem · lh 1 · (button-md 1rem · button-sm 0.875rem/600)

Te allanaron o te secuestraron el celular

option · NewBlack 600 · 1rem · lh 1.3 · opciones del selector de situación

Defensa penal · CABA y GBA

chip · NewBlack 300 · 0.75rem · tracking 0.02em

Reglas del dúo

Una palabra en serif por título, nunca más

La itálica dorada funciona por escasez. "grietas.", "situación?", "subraya." Si dos palabras van en serif en el mismo título, se pierde el efecto de grieta.

El acento es 1.08em del título que lo contiene

Behind The Nineties tiene la altura de x más baja; el 8 % extra la iguala ópticamente a NewBlack.

Los títulos grandes van en 300, los chicos en 700

Es la lógica de la maqueta: el hero es liviano y aireado, las cards de prueba social son bold y densas. La inversión respecto de lo habitual es parte de la identidad.

Nunca falsa itálica ni falsa negrita

NewBlack no tiene itálicas: si hace falta énfasis, se usa peso 600 o el acento serif. Los pesos disponibles son exactamente 200, 300, 400, 600 y 700.

Licencia

Las dos familias vienen de Envato Elements, sin archivo de licencia en el paquete. Hay que registrar el uso web en el proyecto de Envato antes de publicar.

Espaciado y forma

Aire entre bloques, píldoras en las manos.

Escala base de 4 px. Radios de píldora para todo lo que se toca, 20 px para lo que contiene. En tema oscuro la elevación se marca con bordes finos, no con sombras.

Espaciado

Radios

sm 6
md 12
lg 20
full

sm inputs chicos, badges, code · md inputs, alerts, menús · lg cards, video, hero, modales · full botones, chips, opciones del selector, avatar

Elevación

0 · plano
1 · sutil
2 · card raised
3 · menú, toast
4 · modal

Grilla y breakpoints

TokenValorQué cambia
bp-sm480 pxLos botones del hero dejan de ser full-width y se ponen lado a lado.
bp-md768 pxAparece la navegación horizontal; cards de prueba social en 2 columnas; footer en 3 columnas; el CTA banner pasa a 2 columnas.
bp-lg1024 pxCards en 3 columnas; la guía muestra su sidebar; el selector de situación puede ir en 3 columnas.
bp-xl1280 pxLos clamp() tipográficos llegan a su máximo. Contenedor de 1200 px.
container-sm/md/lg640 / 960 / 1200 pxTexto largo en sm, secciones en md, hero y grillas en lg. Padding lateral 16 px (mobile) y 32 px (≥768).

Iconografía

Trazo fino, como las estrías de la columna.

Un solo estilo: outline de 1.5 px, esquinas redondeadas, viewBox 24×24, color heredado del texto. Toda acción lleva icono. Los iconos del dominio (detención, allanamiento, citación, tribunal) son los que le dan personalidad al set.

Tamaños y aplicación

sm 16 md 20 lg 24 xl 32
icon-sm en chips y captions · icon-md en botones y menús · icon-lg en cards y navegación · icon-xl en estados vacíos y features
Icono + texto siempre. El icono a la izquierda refuerza; la flecha a la derecha indica salida (WhatsApp, llamada, link externo).
Cómo usar el sprite
<!-- una vez, al inicio del body: el sprite completo -->
<svg style="display:none"><symbol id="i-whatsapp" viewBox="0 0 24 24">...</symbol></svg>

<!-- en cualquier lugar -->
<svg class="icon"><use href="#i-whatsapp"/></svg>
<svg class="icon icon-lg"><use href="#i-court"/></svg>

Imagen e ilustración

Un retrato real y motivos que salen del isotipo.

Todas las fotos son de Nicolás, en su estudio o en los medios. Ninguna de stock. Seis fotos reveladas con el mismo tratamiento y recortadas para cada componente forman el sistema. Las ilustraciones y tramas repiten las estrías, la grieta y el marco octogonal del logo.

Sistema de fotos

01 · Retrato frontalMirada a cámara, biblioteca. La foto de la maqueta.Hero mobile · avatar · aboutnm-01-retrato-frontal · 3024×4032
02 · Biblioteca de perfilHorizontal, mirada lateral: deja aire a la izquierda para el texto.Hero desktop · CTA banner · aboutnm-02-biblioteca-perfil · 4782×2438
03 · Escritorio con lámparaTrabajando de noche. La más cálida: funciona sola sobre navy.Contacto · blog · formato historianm-03-escritorio-lampara · 3024×4032
04 · GrabandoCelular en trípode y aro de luz. Resolución baja: solo hasta 640 px.Poster de video · prensanm-04-grabando · 642×642
05 · Mirada altaLuz lateral, gesto editorial. Viene con degradado al pie: solo recortes altos.Testimonios · blognm-05-retrato-mirada-alta · 744×1016
06 · Estudio de TVPanorámica con él en pantalla. Solo formatos anchos.Tira de prensa · banner "en los medios"nm-06-estudio-tv · 3236×1290

Revelado de marca

originalrevelada
originalrevelada
Saturación 0.88 · contraste 1.06

Baja el color de la foto de celular sin llegar al blanco y negro.

Sombras hacia navy #122131

22 % con máscara (1−luma)². Las sombras se funden con el fondo de la web.

Altas luces con 7 % de dorado

Máscara luma³. Une la piel y la lámpara con el acento de marca.

Es un pipeline, no un filtro a ojo. Toda foto nueva pasa por el mismo script (fotos_pipeline.py) y sale con los mismos recortes. Los originales quedan intactos en fotos/_originales/.

Recortes por componente

hero-mobile · 4:5 · 1080×1350
hero-desktop · 16:9 · 1920×1080
card · 16:10 · 1200×750
square · 1:1 · 1200×1200
story · 9:16 · 1080×1920
wide · 12:5 · 1920×800
avatar · 1:1 · 600×600
ComponenteFoto y recorteTratamiento encima
Hero mobile01 · hero-mobileoverlay-photo: degradado a navy desde el 30 %. Texto en el tercio inferior.
Hero desktop02 · hero-desktopDegradado lateral navy → transparente. Texto a la izquierda, cara a la derecha.
Poster de video04 · square (o el frame real del video)Oscurecido 40 % + play dorado.
Video formato historia03 · storyDegradado navy arriba y abajo para los segmentos y la cita.
Cards de blog02, 03, 05 · card, rotando; nunca la misma foto en dos cards contiguasDegradado al pie del 50 % para el chip.
Avatar (comentarios, tab bar, historia)01 · avatarBorde dorado de 2 px.
Tira de prensa / banner "en los medios"06 · wideOverlay navy 60 % y logos de medios encima.
Contacto, about03 · square / 02 · cardSin overlay, con borde del sistema.

Qué falta pedir. Fotos en tribunales o en la calle (contexto de urgencia), una foto con el equipo si lo hay, y versiones horizontales de 01 y 03. Se piden con aire alrededor, luz natural y sin retoque: el pipeline hace el resto.

Tramas

trama-estrias sutil (6 %) · fondos amplios, heros, footer
trama-grietas protagonista (18 %) · banners, portada, cabecera de card destacada
trama-octo sutil sobre beige · separadores, estados vacíos en tema claro

Regla. La trama acompaña, nunca compite. Sobre texto largo va la variante sutil o no va. Se dibuja con currentColor: el color lo da el contenedor.

Ilustraciones de marca

columna-grieta · hero secundario, sección "por qué conozco el sistema"
marco-paloma · estados vacíos, confirmación de mensaje enviado
reglas-grietas · separadores de sección, cabecera de FAQ

Tratamiento sobre la foto

4:5 · hero mobile con overlay

overlay-photo · degradado a navy-900 desde el 30 % hacia abajo. El texto siempre va en el tercio inferior.

16:9 · hero desktop, degradado lateral

En desktop el degradado es lateral: la foto a la derecha, el texto a la izquierda.
NM
Avatar 96 / 48 px con borde dorado. Sin foto, iniciales en serif sobre navy. Nunca cajas grises.

Qué no hacer. Nada de balanzas, martillos, esposas, patrulleros ni alambres de púa de stock: el sitio anterior los tenía y quedan afuera. Nada de blanco y negro dramático. Solo fotos reales de Nicolás y su contexto, reveladas con el pipeline.

Movimiento y micro-interacciones

Rápido, seco, sin piruetas.

Tres duraciones, dos easings. Lo único que se mueve solo es el pulso del botón flotante de WhatsApp. Todo lo demás responde a la mano. Con prefers-reduced-motion quedan solo los fundidos.

TokenValorUso
duration-fast120 msHover, focus, color, presión de botón.
duration-base200 msDesplazamiento de iconos, subrayados, indicador de tabs, tooltip.
duration-slow320 msAcordeones, drawer mobile, reveal al scroll, toast.
ease-outcubic-bezier(0.2, 0, 0, 1)Casi todo. Arranca rápido y frena sin rebote.
ease-in-outcubic-bezier(0.4, 0, 0.2, 1)Cambios de tema y transiciones de fondo.
spring (excepción)cubic-bezier(0.34, 1.3, 0.64, 1)Solo el switch y la entrada del toast: un leve sobrepaso que confirma la acción.

Catálogo con demos

CTA con icono que se deslizahover: translateY(-1px) + flecha translateX(3px)
Card que se eleva

Pasá el mouse

translateY(-3px) + elevation-3

Link con subrayado que creceVer todas las situacioneswidth 0 → 100 % en 200 ms
Switch elásticospring en el pulgar del switch
Checkbox con check dibujadostroke-dashoffset 24 → 0
Contador animado
0
años litigando · arranca al entrar en pantalla
Skeleton con shimmer
Toast con spring
Reveal al scroll

Las secciones de esta guía entran con fade + rise de 16 px y stagger de 60 ms entre hijos. Es la demo.

Pulso del botón flotante
anillo que se expande cada 2.4 s
0años litigando todos los días
0consulta gratuita y confidencial
0situaciones con respuesta clara
CABA + GBAjuzgados y fiscalías que conozco

Componentes

Todo construido con tokens, nada suelto.

Cada componente se muestra en todos sus estados con HTML real. Si un componente necesitara un valor que no existe como token, el token se agrega al sistema. Los snippets se copian tal cual.

Acciones

Button · primary (una sola vez por vista, siempre WhatsApp) · secondary (Llamar, outline) · ghost · danger · sm 36 / md 44 / lg 56 px · loading · disabled · focus: anillo dorado con offset 3 px
Código
<a class="mv-btn mv-btn--primary mv-btn--lg" href="https://wa.me/549...">
  <svg class="icon icon-lg"><use href="#i-whatsapp"/></svg>
  Escribime un WhatsApp ahora
  <svg class="icon icon-slide"><use href="#i-arrow-right"/></svg>
</a>
<a class="mv-btn mv-btn--secondary mv-btn--lg" href="tel:+549...">
  <svg class="icon icon-lg"><use href="#i-phone"/></svg>Llamame
</a>
<button class="mv-btn mv-btn--primary is-loading">Enviando</button>
<button class="mv-btn mv-btn--primary" disabled>Deshabilitado</button>
Ver mi situación Nota en La Nación

Dentro de un párrafo, el link es dorado y subrayado.

Link · dorado · subrayado que crece al hover · flecha para acción, externo para salir del sitio
Código
<a class="mv-link" href="#">Ver mi situación<svg class="icon icon-sm"><use href="#i-arrow-right"/></svg></a>
Icon button 44 px con aria-label obligatorio · FAB WhatsApp 56 px fijo abajo a la derecha, con pulso
Código
<button class="mv-iconbtn" aria-label="Menú"><svg class="icon"><use href="#i-menu"/></svg></button>
<a class="mv-whatsapp-fab" href="https://wa.me/549..." aria-label="Escribime un WhatsApp">
  <svg class="icon icon-lg"><use href="#i-whatsapp"/></svg>
</a>

Formularios

Solo para saber cómo saludarte.
Faltan números. Tiene que ser como 11 2345 6789.
Deshabilitado.
Field = label + input + helper/error · Input 48 px, fuente 16 px (evita el zoom de iOS) · Select con chevron propio · Textarea · estados: default, hover, focus (anillo dorado), error, disabled
Código
<div class="mv-field is-error">
  <label class="mv-label" for="tel">Tu WhatsApp <span class="req">*</span></label>
  <input class="mv-input" id="tel" type="tel" aria-invalid="true" aria-describedby="tel-e">
  <span class="mv-error" id="tel-e"><svg class="icon icon-sm"><use href="#i-alert"/></svg>Faltan números.</span>
</div>


Checkbox con check dibujado · Radio · Switch elástico · target 44 px de alto en toda la fila · focus visible en la caja
Código
<label class="mv-check"><input type="checkbox"><span class="box"><svg viewBox="0 0 24 24"><path d="m5 12 5 5L20 7"/></svg></span>Quiero que me llamen</label>
<label class="mv-radio"><input type="radio" name="r"><span class="dot"></span>Es para mí</label>
<label class="mv-switch"><input type="checkbox"><span class="track"></span>Avisarme por WhatsApp</label>

Contención

Trabajé junto a ex jueces federales.

Aprendí el sistema desde adentro.

Card flat

Borde en border-default. Para listas y contenido secundario.

Card raised

Superficie más clara y elevación 2. Para destacar sin borde.

Card interactiva

Se eleva al hover. Toda la card es el target.

Leer más
Card default (borde blanco fino, como la maqueta) · flat · raised · interactive · radio lg · padding 20/24 · Divider default y strong · Container sm 640 / md 960 / lg 1200
Código
<div class="mv-container">
  <div class="mv-card">
    <p class="mv-card__title">Trabajé junto a ex jueces federales.</p>
    <p class="mv-card__text">Aprendí el sistema desde adentro.</p>
  </div>
  <hr class="mv-divider">
</div>

Feedback

Mensaje enviadoTe respondo en minutos por WhatsApp.
ConfidencialLo que me cuentes queda entre nosotros. Secreto profesional.
Si hay una detención en cursoNo declares nada hasta hablar con un abogado. Llamame ahora.
No pudimos enviar el mensajeProbá de nuevo o escribime directo por WhatsApp.
Alert · 4 estados funcionales armonizados con la paleta · icono obligatorio · el rojo de error es red-300/950, no el rojo de urgencia
Código
<div class="mv-alert mv-alert--success" role="status">
  <svg class="icon"><use href="#i-check-circle"/></svg>
  <div><strong>Mensaje enviado</strong>Te respondo en minutos por WhatsApp.</div>
</div>
Copiado al portapapeles
Defensa penal · CABA y GBA Atención 24 hs Confidencial
RespondidoPendienteUrgenteNuevo
Toast inverso con spring · Chip outline / gold / solid (el chip "Defensa penal · CABA y GBA" del hero) · Badge de estado · Spinner y Progress · Skeleton con shimmer
Código
<span class="mv-chip">Defensa penal · CABA y GBA</span>
<span class="mv-chip mv-chip--gold"><svg class="icon icon-sm"><use href="#i-clock-24"/></svg>Atención 24 hs</span>
<span class="mv-badge mv-badge--danger">Urgente</span>
<div class="mv-toast" role="status">Copiado al portapapeles</div>
<div class="mv-skeleton" style="height:16px;width:70%"></div>

Todavía no hay mensajes

Cuando alguien escriba por el selector de situación, aparece acá.

Empty state · icono xl dorado (paloma) + título + explicación + una acción secundaria

Overlay

Modal · máx 440 px · scrim navy 60 % · elevación 4 · foco atrapado dentro · Esc cierra · acción primaria a la derecha
Código
<div class="mv-modal" role="dialog" aria-modal="true" aria-labelledby="t">
  <div class="mv-modal__head"><p class="t-h3" id="t">¿Te abro WhatsApp?</p><button class="mv-iconbtn" aria-label="Cerrar">...</button></div>
  <p class="t-body t-secondary">...</p>
  <div class="mv-modal__actions"><button class="mv-btn mv-btn--ghost">Cancelar</button><button class="mv-btn mv-btn--primary">Abrir WhatsApp</button></div>
</div>
Tooltip inverso, aparece con hover y con foco · Dropdown / Menu · items 44 px con icono dorado · separador entre grupos
Código
<div class="mv-menu" role="menu">
  <a class="mv-menu__item" role="menuitem" href="#"><svg class="icon"><use href="#i-whatsapp"/></svg>Escribir por WhatsApp</a>
</div>
<div class="mv-tooltip"><button aria-describedby="tt">?</button><span class="mv-tooltip__bubble" role="tooltip" id="tt">Ayuda</span></div>

Navegación

  1. Inicio
  2. Tu situación
  3. Te citaron a declarar
Navbar logo + links con icono + WhatsApp siempre visible; en mobile colapsa a drawer (ver Mobile) · Breadcrumbs · Tabs con indicador dorado deslizante · Pagination 44 px
Código
<header class="mv-navbar">
  <a href="/"><svg viewBox="0 0 2068 901" style="width:150px"><use href="#logo-serif-color"/></svg></a>
  <ul class="mv-navbar__links"><li><a href="#situacion">Tu situación</a></li>...</ul>
  <a class="mv-btn mv-btn--primary mv-btn--sm" href="https://wa.me/...">WhatsApp</a>
</header>
<div class="mv-tabs" role="tablist"><button role="tab" aria-selected="true">Urgencias</button>...<span class="mv-tabs__ind"></span></div>
Footer · logo + descripción, columnas de links con icono, línea legal en caption

Ritmo: bloques de contraste

Consulta gratuita y confidencial las 24 hs · Respuesta en minutos

Ahora mismo

¿Detuvieron a alguien? No esperes a mañana.

El sistema tiene reglas. También tiene grietas.

Ver mi situación
Announcement bar verde, una línea · CTA banner inverso (beige en tema oscuro, navy en tema claro) y variante gold · Stat band arriba de esta sección · Regla: cada 2 o 3 bloques neutros, uno de contraste
Código
<div class="mv-announce"><svg class="icon icon-sm"><use href="#i-clock-24"/></svg>Consulta gratuita y confidencial las 24 hs</div>
<section class="mv-cta-banner">
  <svg class="mv-pattern"><rect width="100%" height="100%" fill="url(#trama-estrias)"/></svg>
  <div><p class="t-h2">¿Detuvieron a alguien? No esperes a mañana.</p></div>
  <a class="mv-btn mv-btn--primary" href="...">Escribime</a>
</section>
<section class="mv-stat-band"><div class="mv-stat-band__grid"><div class="mv-stat"><span class="mv-stat__num">+10</span><span class="mv-stat__label">años</span></div></div></section>

Web institucional

Defensa penal · CABA y GBA

El sistema tiene reglas.
También tiene grietas.

Conocerlas marca la diferencia

Soy Dr. Nicolás Mendive, abogado penalista. Brindo defensa urgente ante detenciones, allanamientos, denuncias o declaraciones. Conozco el sistema desde adentro y sé cómo usarlo en tu favor.

Consulta gratuita y confidencial las 24 hs. Respuesta en minutos.

Hero · foto 4:5 con overlay-photo · chip · display-xl con acento serif · heading-2 · body-lg en 200 · dos CTAs (WhatsApp lg, Llamar outline) · nota en body-sm · en desktop el texto va a la izquierda sobre foto 16:9
Código
<section class="mv-hero">
  <div class="mv-hero__photo" style="background-image:url(retrato.webp);background-size:cover;background-position:top"></div>
  <div class="mv-hero__top"><a href="/">[logo]</a><a class="mv-btn mv-btn--primary mv-btn--sm" href="...">WhatsApp</a></div>
  <div class="mv-hero__body">
    <span class="mv-chip">Defensa penal · CABA y GBA</span>
    <h1 class="t-display-xl">El sistema tiene reglas.<br><span class="t-accent">También tiene grietas.</span></h1>
    <p class="t-h2">Conocerlas marca la diferencia</p>
    <p class="t-body-lg">Soy Dr. Nicolás Mendive...</p>
    <div class="mv-hero__actions">[btn primary lg] [btn secondary lg]</div>
    <p class="mv-hero__note">Consulta gratuita y confidencial las 24 hs.</p>
  </div>
</section>

Por qué conozco el sistema como nadie

+10 años litigando todos los días.

No es teoría: es experiencia real.

Trabajé junto a ex jueces federales.

Aprendí el sistema desde adentro.

Defendí a un juez en ejercicio.

Conozco los juzgados y fiscalías de CABA, GBA y otros puntos del país.

Sus procedimientos, sus criterios, sus tiempos.

Estrategias con eficacia comprobada

por personas que hoy están libres y reincorporadas a su vida.

Otros abogados penalistas me consultan

en causas de alta complejidad.

Bloque de prueba social · overline centrado + 6 cards con borde blanco · 1 columna mobile, 2 en md, 3 en lg · en mobile alternativa: scroll horizontal (ver Mobile)
Selector de situación · el componente propio del sitio · 3 categorías con color de dominio, 8 + 8 + 4 opciones · estados: categoría cerrada / abierta (chevron rota, lista se despliega en 320 ms), opción default / hover (se rellena) / seleccionada (rellena + icono WhatsApp) · una sola categoría abierta a la vez · al tocar una opción se abre WhatsApp con mensaje prellenado (decisión asumida)
Código
<div class="mv-situacion">
  <div class="mv-situacion__cat mv-situacion__cat--urgencia is-open">
    <button class="mv-situacion__head" aria-expanded="true" aria-controls="s1">
      Te pasó o llegó algo <svg class="icon"><use href="#i-chevron-down"/></svg>
    </button>
    <ul class="mv-situacion__list" id="s1">
      <li><a class="mv-situacion__opt" href="https://wa.me/549...?text=Hola%20Nicol%C3%A1s%2C%20detuvieron%20a%20un%20familiar">Detuvieron a un conocido o familiar</a></li>
    </ul>
  </div>
  <div class="mv-situacion__cat mv-situacion__cat--acusacion">...</div>
  <div class="mv-situacion__cat mv-situacion__cat--revision">...</div>
</div>
<!-- JS: al click en .mv-situacion__head, togglear .is-open en su .mv-situacion__cat y cerrar las demás -->
Dr. Nicolás Mendive · Defensa penal
Bloque de video · poster (foto 04 o frame real) oscurecido 40 %, play dorado de 72 px, caption · el video real (testimonios) está pendiente
La NaciónCNN RadioMitreC5NCrónicaÁmbitoEl DestapeMDZEl EconomistaNewstad
Me llamó a los diez minutos, a las tres de la mañana. Al otro día mi hermano estaba en casa.Familiar de un defendido · Lomas de Zamora
Tira de prensa (medios de la web actual, en texto hasta tener logos) · Testimonio en serif itálica con filete dorado
¿La consulta tiene costo?

No. La primera consulta es gratuita y confidencial, las 24 horas.

¿Atendés fuera de CABA y GBA?

Sí, conozco juzgados y fiscalías de otros puntos del país.

¿Qué hago si están deteniendo a alguien ahora?

Que no declare nada. Escribime o llamame en este momento.

FAQ · accordion nativo con details · chevron dorado que rota · 44 px de alto mínimo

Contame qué pasó

Formulario de contacto · 3 campos, nunca más · WhatsApp obligatorio, el resto opcional · botón block

Blog y admin del blog

Notas que explican el sistema, y un panel para escribirlas.

El blog es la cara pública: cards con portada, categoría y tiempo de lectura. El admin es la herramienta interna: tabla de notas, editor y estados de publicación. Los dos salen de los mismos tokens; el admin sube la densidad y usa números tabulares.

Cards de blog

Post card · portada 16:10 con trama tintada hasta tener foto · chip de categoría (una de las categorías del selector de situación) · fecha + tiempo de lectura · título heading-3 · extracto body-sm · link con flecha · toda la card es el target · hover: lift + borde fuerte · featured: primera nota en horizontal desde 768 px · row: variante compacta para listas y mobile
Código
<div class="mv-post-grid">
  <a class="mv-post mv-post--featured" href="/blog/detuvieron-a-un-familiar">
    <div class="mv-post__cover" style="background-image:url(portada.webp)"><span class="mv-chip">Detenciones</span></div>
    <div class="mv-post__body">
      <div class="mv-post__meta"><span>28 ago 2026</span><span>6 min de lectura</span></div>
      <h3 class="mv-post__title">Detuvieron a un familiar: qué hacer en las primeras 24 horas</h3>
      <p class="mv-post__excerpt">...</p>
      <span class="mv-link mv-post__link">Leer la nota<svg class="icon icon-sm"><use href="#i-arrow-right"/></svg></span>
    </div>
  </a>
  <a class="mv-post" href="...">...</a>
</div>
TodasDetencionesAllanamientosCitacionesFamiliar presoJuicio
Filtros del blog · chips de categoría (la activa en solid) + búsqueda + paginación · las categorías son las mismas del selector de situación para que la nota y la consulta se conecten

Admin del blog

Producto interno. Lo usa Nicolás o alguien del equipo, sentado, con calma. Por eso sube la densidad: tipografía de 14 px en tablas, filas de 48 px, hover rico, números tabulares. Los tokens son los mismos; cambia la escala.

  1. Admin
  2. Notas

Notas del blog

Publicadas24+3 este mes
Borradores52 sin categoría
Lecturas · 30 días8.412+18 %
Consultas desde notas370,44 % de las lecturas
CategoríaEstadoLecturas
Detuvieron a un familiar: qué hacer en las primeras 24 horas/blog/detuvieron-a-un-familiarDetencionesPublicada28 ago 20262.318
Te secuestraron el celular: qué pueden ver y qué no/blog/secuestro-de-celularAllanamientosPublicada21 ago 20261.904
Restricción perimetral: qué implica y cómo se cumple/blog/restriccion-perimetralDenunciasProgramada5 sep 2026 · 09:00
Te mandaron a juicio: cómo se prepara una defensa/blog/juicio-oralJuicioBorradorhace 2 días
Domiciliaria, condicional o traslado/blog/domiciliaria-condicional-trasladoFamiliar presoPublicada7 ago 20263.117
1 seleccionada · 29 notas
Listado de notas · sidebar colapsable con secciones (Resumen, Notas, Categorías, Medios, Consultas, Ajustes) · KPI cards con números tabulares · toolbar: búsqueda + filtro de estado · tabla con selección, orden, estados (Publicada / Programada / Borrador), lecturas y acciones por fila · paginación · en mobile la tabla scrollea dentro de su contenedor y el sidebar pasa a drawer
Código
<div class="mv-admin">
  <aside class="mv-admin__side"><a href="/admin/notas" class="is-active"><svg class="icon"><use href="#i-document"/></svg>Notas</a>...</aside>
  <div class="mv-admin__main">
    <div class="mv-kpis"><div class="mv-kpi"><span class="mv-kpi__label">Publicadas</span><span class="mv-kpi__num">24</span></div>...</div>
    <div class="mv-table-wrap"><table class="mv-table">
      <thead><tr><th>Título</th><th>Estado</th><th class="num">Lecturas</th></tr></thead>
      <tbody><tr><td><span class="title">...</span></td><td><span class="mv-status mv-status--pub">Publicada</span></td><td class="num">2.318</td></tr></tbody>
    </table></div>
  </div>
</div>
  1. Admin
  2. Notas
  3. Editar

Editar nota

Borrador · guardado hace 1 min
Se genera del título. Corta, sin tildes ni signos.
Aparece en la card y en Google. Máximo 160 caracteres.

Publicación

Clasificación

Enlaza la nota con el selector de la home.
juicio oral defensa etiqueta

Portada

Arrastrá una imagen o hacé click
16:10 · mínimo 1200 px · JPG o WebP
Editor de nota · título grande, URL editable, bajada con límite, editor de contenido con barra mínima (negrita, título, lista, link, imagen, bloque de WhatsApp) · columna lateral: publicación (switch + programar + CTA), clasificación (categoría, situación relacionada, etiquetas), portada con zona de arrastre · estado de guardado siempre visible · Publicar es la única acción primaria
Código
<form class="mv-editor">
  <div>
    <div class="mv-field"><label class="mv-label" for="t">Título</label><input class="mv-input" id="t"></div>
    <div class="mv-field"><label class="mv-label" for="c">Contenido</label><textarea class="mv-textarea" id="c"></textarea></div>
  </div>
  <aside class="mv-editor__side">
    <div class="mv-card mv-card--flat"><label class="mv-switch"><input type="checkbox"><span class="track"></span>Publicada</label></div>
    <div class="mv-card mv-card--flat"><div class="mv-upload">Arrastrá una imagen</div></div>
  </aside>
</form>

Reglas del admin

Mismos tokens, otra escala

Tabla en body-sm (14 px), filas de 48 px, KPI en 28 px bold con números tabulares. Nada de esto se usa en la web pública.

Tres estados de nota, tres colores funcionales

Publicada en success, Programada en warning, Borrador en muted. Nunca los colores de situación: acá el rojo es solo para eliminar.

La nota se conecta con el selector

Cada nota lleva categoría y "situación relacionada". Así la home puede mostrar la nota correcta debajo de cada opción, y el admin mide qué notas generan consultas.

Guardado automático y estado visible

"Borrador · guardado hace 1 min" siempre en la cabecera. Publicar pide confirmación en modal; eliminar también.

Mobile del admin

El sidebar pasa a drawer, las KPI a 2 columnas, la tabla scrollea horizontalmente dentro de su contenedor y el editor apila la columna lateral debajo del contenido.

Mobile

Todo lo importante a un pulgar de distancia.

La maqueta es mobile. El sistema también. WhatsApp y Llamar viven abajo, en la zona del pulgar. Dos opciones de navegación: drawer o tab bar tipo app (la sugerida). Las cards se deslizan en carrusel con indicadores y los testimonios en video van en formato historia.

Defensa penal · CABA y GBA

El sistema tiene reglas. También tiene grietas.

Soy Dr. Nicolás Mendive, abogado penalista. Brindo defensa urgente.

Menú drawer. Tocá el menú. Entra desde la derecha en 320 ms, con las dos acciones al final.

Por qué conozco el sistema

Si hay una detención en cursoNo declares nada. Llamame ahora.

Carrusel con indicadores + barra inferior. Las cards se deslizan con snap y misma altura. Debajo, barra de progreso y puntos tocables que muestran dónde estás. Deslizá para probarlo.

Lo que dicen de él

nicolasmendive.penal0:24
Testimonio

"Me llamó a los diez minutos, a las tres de la mañana."

Familiar de un defendido · Lomas de Zamora

Video formato historia. 9:16 como historia de Instagram o Short de YouTube: segmentos arriba, avatar y handle, cita al pie. Los testimonios cortos se cargan tal cual se graban con el celular.

24 hs

Sé lo que te está pasando

¿Cuál es tu situación?

Menú tipo app (sugerido). Tab bar fija con cinco destinos y WhatsApp como botón central elevado. Reemplaza al drawer: la navegación queda siempre visible y en la zona del pulgar. Convive con el botón Llamar en la cabecera de cada sección.

Zonas de pulgar

Tercio superior: logo, contexto, lectura.

Tercio medio: contenido que se lee y se decide.

Tercio inferior (rayado): las acciones. Siempre.

Zona de pulgar. Las acciones primarias viven en el 38 % inferior. Nada crítico arriba a la izquierda.

Reglas táctiles

ReglaValorComponentes afectados
Target mínimo44 × 44 px (tap-target)Botones, icon buttons, opciones del selector (52 px), items de menú, checks y radios (toda la fila).
Fuente en inputs≥ 16 pxInput, select, textarea. Evita el zoom automático de iOS al enfocar.
Safe areasenv(safe-area-inset-bottom) sumado al padding de la barra inferiorBottom bar, FAB, drawer.
Scroll horizontalscroll-snap-type: x mandatory, items al 82 %Cards de prueba social, tira de prensa si crece.
Hero en pantalla chicaFoto 4:5, texto en el tercio inferior, CTAs full-width apiladosHero.
Selector de situaciónUna categoría abierta a la vez; al abrir, scroll suave hasta el título de la categoríaSelector de situación.
GestosSwipe para cerrar el drawer; sin pull-to-refresh (es web, no app)Drawer.
Navegación principalDos opciones: drawer (menú oculto, más limpio) o tab bar tipo app (siempre visible, WhatsApp al centro). Recomendación: tab bar, porque el usuario en crisis no busca menús.Drawer, Tab bar.
CarruselSnap obligatorio, barra de progreso y puntos tocables; nunca autoplayCards de prueba social, testimonios en video, notas del blog.
Video vertical9:16, máximo 320 px de ancho, sin autoplay con sonido; poster + playTestimonios formato historia.

Composiciones

La home, armada solo con el sistema.

Es la maqueta de la home reconstruida con los componentes de esta guía, más la tira de prensa de la web actual y un cierre con CTA. Abajo, la misma home en un teléfono.

Consulta gratuita y confidencial las 24 hs · Respuesta en minutos
Defensa penal · CABA y GBA

El sistema tiene reglas.
También tiene grietas.

Conocerlas marca la diferencia

Soy Dr. Nicolás Mendive, abogado penalista. Brindo defensa urgente ante detenciones, allanamientos, denuncias o declaraciones. Conozco el sistema desde adentro y sé cómo usarlo en tu favor.

Consulta gratuita y confidencial las 24 hs. Respuesta en minutos.

Por qué conozco el sistema como nadie

+10 años litigando todos los días.

No es teoría: es experiencia real.

Trabajé junto a ex jueces federales.

Aprendí el sistema desde adentro.

Defendí a un juez en ejercicio.

Conozco los juzgados y fiscalías de CABA, GBA y otros puntos del país.

Sus procedimientos, sus criterios, sus tiempos.

Estrategias con eficacia comprobada

por personas que hoy están libres y reincorporadas a su vida.

Otros abogados penalistas me consultan

en causas de alta complejidad.

Dr. Nicolás Mendive · Defensa penal
La NaciónCNN RadioMitreC5NCrónicaÁmbitoEl DestapeMDZEl EconomistaNewstad

Sé lo que te está pasando o a tu familia

¿Cuál es tu situación?

Identificá la que más se parezca a lo tuyo y te explico cómo seguir.

Ahora mismo

Si están deteniendo a alguien, que no declare nada. Escribime.

Home desktop/tablet · announcement → hero → prueba social → video → prensa → selector (bloque claro) → CTA banner → footer · el ritmo: dos bloques navy, uno beige, uno navy con borde dorado

La misma home en el teléfono

Consulta gratuita 24 hs
Defensa penal · CABA y GBA

El sistema tiene reglas.
También tiene grietas.

Soy Dr. Nicolás Mendive, abogado penalista. Defensa urgente ante detenciones, allanamientos, denuncias o declaraciones.

Por qué conozco el sistema

+10 años litigando todos los días.

No es teoría: es experiencia real.

Trabajé junto a ex jueces federales.

Aprendí el sistema desde adentro.

Defendí a un juez en ejercicio.

Sé lo que te está pasando

¿Cuál es tu situación?

Dr. Nicolás Mendive

© 2026 Nicolás Mendive · Abogado penalista

Voz de interfaz

Primera persona, voseo, frases cortas.

La voz sale de la maqueta: "Escribime", "Llamame", "Identificá", "te explico cómo seguir". Habla Nicolás, no "el estudio". Quien lee está asustado: cada palabra tiene que bajar la ansiedad, no subirla.

"Escribime un WhatsApp ahora" · "Te citaron a declarar" · "Conozco el sistema desde adentro" · "No declares nada hasta hablar con un abogado" · "Te respondo en minutos"

No

"Contáctenos" · "Nuestro estudio ofrece asesoramiento integral" · "Solicite una consulta" · "Servicios jurídicos" · jerga procesal sin explicar ("indagatoria", "excarcelación") en botones o títulos

Vos, siempre

Voseo argentino con imperativos: escribime, llamame, contame, identificá. Nunca "usted", nunca tuteo.

Lo urgente, urgente

Las situaciones críticas (detención en curso) usan el alert warning con una instrucción concreta antes de cualquier formulario.

MomentoMicrocopy
Éxito al enviarListo. Te respondo en minutos por WhatsApp.
Error de envíoNo pudimos enviar el mensaje. Probá de nuevo o escribime directo por WhatsApp.
Campo vacío obligatorioNecesito tu WhatsApp para responderte.
Teléfono mal escritoFaltan números. Tiene que ser como 11 2345 6789.
Estado vacíoTodavía no hay mensajes. Cuando alguien escriba, aparece acá.
Confirmación antes de WhatsAppVa a abrirse un chat con el mensaje ya escrito. Vos lo revisás y lo mandás.
CargandoEnviando…
Fuera de horario (no aplica)Atiendo las 24 hs. No hay "fuera de horario".

Para desarrollo

Tokens primero, componentes después, nada hardcodeado.

Tres archivos: tokens.json (fuente de verdad, formato W3C Design Tokens), tokens.css (custom properties listas) y esta guía. Las fuentes woff2 están en fonts/.

Empezar
<!-- 1. tokens y fuentes -->
<link rel="stylesheet" href="tokens.css">

<!-- 2. tema: oscuro por defecto; claro con data-theme -->
<html lang="es-AR" data-theme="dark">
<html lang="es-AR" data-theme="light">

<!-- 3. el sprite de iconos y los símbolos del logo,
        copiados de esta guía, una vez al inicio del body -->

<!-- 4. componentes: solo tokens -->
.mi-componente {
  background: var(--color-bg-surface);
  color: var(--color-text-primary);
  border: var(--border-width) solid var(--color-border-strong);
  border-radius: var(--radius-lg);
  padding: var(--space-5) var(--space-6);
  transition: transform var(--duration-base) var(--ease-out);
}
Convención de nombres

Primitivos: --navy-900, --space-4, --radius-lg. Semánticos: --color-bg-page, --color-text-accent, --color-action-primary. Dominio: --color-situacion-urgencia. Los componentes usan solo semánticos.

Si falta un token

No se escribe un hex ni un px suelto. Se agrega el token a tokens.json y tokens.css con nombre semántico, se declara su par de contraste si es texto/fondo, y se corre check_contrast.py.

Tema

El oscuro es el base (:root). El claro se activa con data-theme="light" en html. No hay inversión automática: cada semántico se mapeó a mano.

Fuentes

Autohospedadas en woff2 con font-display: swap. Precargar NewBlack Light y Bold y Nineties Italic (son las del hero). Licencia Envato Elements: registrar el proyecto.

Accesibilidad

49 pares de contraste verificados. Focus visible dorado en todo lo interactivo. prefers-reduced-motion anula duraciones. Targets de 44 px. aria-expanded en el selector, aria-label en icon buttons.

Enlaces de acción

WhatsApp: https://wa.me/549XXXXXXXXX?text=... con el mensaje prellenado por situación. Teléfono: tel:+549.... Los números reales están pendientes.