Without image
The base slot-based card. Meta, title, description and footer are all optional slots.
Visual reference for all UI components. Not linked from the public site.
Deep navy ink, sea-blue accent, warm sand-orange highlight, generous whitespace.
Bilingual ES/EN. Sentence case everywhere. No emoji. Em dashes for asides.
Sea 600 #006ED2 primary. Sand 500 #FC6413 secondary highlight. Grey 950 #04274D ink.
Display 72 ยท H1 48 ยท H2 32 ยท H3 24 ยท Body 16 ยท Small 14 ยท Caption 12. Bold 700, tight โ0.02em tracking.
โspace-1 โ โspace-20. Section rhythm 72โ96px. Card padding 24px. Max layout 1200px.
Cards 16px ยท Inputs/buttons 8px ยท Pills 80px. Avatars fully rounded.
โshadow-xs resting โ โshadow-lg hover. โshadow-brand on primary button hover (sea-blue glow).
cubic-bezier(0.16,1,0.3,1). Cards lift 3โ4px on hover. No bounces, no infinite loops.
Sea โ Primary โ The brand blue. Primary actions, links, focus.
Sand โ Secondary โ Warm accent orange. CTAs that need extra warmth, highlights.
Grey โ Neutral โ Text, surfaces, borders. Grey 950 = primary text, Grey 0 = page.
Default body โ the quick brown fox jumps over the lazy dog.
Secondary โ used for descriptions and subtitles.
Small โ captions, metadata, timestamps.
Default โ padding, no shadow.
With shadow.
Hover + shadow โ try hovering.
How we structured a three-tier token system so designers and engineers finally spoke the same language.
Empty states are the most-skipped, most-seen screens in any product. Here's how I approach them.
A practical guide to i18n with Next.js App Router and a localized CMS, without the headache.
Animation should explain, not decorate. A small set of rules I keep coming back to.
A fluid type scale built on CSS clamp โ no more magic numbers, no more breakpoint overrides.
1
cols=1 colsMd=2 colsLg=4
A
B
C
D