Revisión completa de los pequeños detalles que hacen que el dashboard de pedidos pase de "plano y genérico" a "pulido y táctil".
Tabla de cambios
| Principio | ❌ Antes | ✅ Después |
|---|---|---|
| Radio concéntrico | Panel exterior 8px, tarjeta interior 8px — mismo radio, sin coherencia óptica |
Panel exterior 16px, tarjeta interior 12px, icono interior 8px — cada capa coherente con su padding |
| Números tabulares | Badge de pedidos usa proportional-nums: el layout brinca al pasar de 9 → 10 |
font-variant-numeric: tabular-nums en badge y precios — sin cambio de ancho |
| Scope de transición | transition: all 0.3s en botones — anima propiedades innecesarias |
transition-property: transform, background-color, box-shadow — solo lo que cambia |
| Sombras en capas | Tarjetas solo con border: 1px solid #ddd — sin profundidad |
Sombra de contacto + sombra de elevación: 0 1px 2px … , 0 4px 10px … |
| Alineación óptica | Icono con padding-top: 3px extra — visualmente descentrado |
Sin padding compensatorio; icono SVG centrado de forma neutral |
| Estado activo (press) | Hover cambia color pero no hay feedback táctil de pulsación | :active { transform: scale(0.96) } — feedback táctil en click |
| Área de pulsación | Botones con padding: 8px 14px — área táctil < 40×40px |
min-height: 44px en todos los controles interactivos |
| Text wrap | Sin wrapping declarado — títulos se cortan de forma irregular | text-wrap: balance en heading, text-wrap: pretty en descripciones |
| Font smoothing | Sin declarar — el texto se ve con subpixel crudo en macOS | -webkit-font-smoothing: antialiased en html |
Demo interactiva — pasa el cursor por los elementos
Plano, sin profundidad, transiciones abruptas, icono descentrado, número que brinca.
Radios concéntricos, sombras en capas, transiciones precisas, números estables, hit areas 44px.
Fragmentos CSS aplicados
1. Radio concéntrico
.dash-container { border-radius: 16px; padding: 20px; } .card { border-radius: 12px; } /* 16 - 4 ≈ 12 */ .icon { border-radius: 8px; } /* 12 - 4 ≈ 8 */
2. Transición con scope explícito
/* ❌ Antes */ .btn { transition: all 0.3s; } /* ✅ Después */ .btn { transition-property: transform, background-color, box-shadow; transition-duration: 150ms; transition-timing-function: ease-out; } .btn:active { transform: scale(0.96); } /* feedback táctil */
3. Números tabulares y font smoothing
html { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .badge, .price, .timer { font-variant-numeric: tabular-nums; /* sin saltos de layout */ }
4. Sombras en capas
.card { box-shadow: 0 1px 2px rgba(44,26,14,.04), /* contacto */ 0 4px 10px rgba(44,26,14,.06); /* elevación */ }
5. Text wrap
h1, h2, h3 { text-wrap: balance; } p, li, .desc{ text-wrap: pretty; } /* Evitar en: prose largo, code, pre */
Checklist de verificacion
transition: all y will-change: all