The building blocks of the Panda Clínica Veterinaria app. They come from the logo, forest green and sage, plus a lime reserved for anything you can tap. Everything on this page runs on the same code as the prototype.
Principles
Clinical calm
People usually open the app when they're worried. Light backgrounds, plenty of air and one important thing per screen. Nothing moves unless it has to.
Urgency has its own color
Coral is only for the 24-hour ER, allergies and out-of-range values. Never for decoration or promotions, so it keeps its weight.
One main action
Every screen has one primary button, and only one. On light backgrounds it's forest; on forest, it's lime.
Talk like the front desk
Short sentences, the pet's name whenever possible, no unnecessary medical jargon. Say what's happening and what to do next.
Color
Primitives sampled from the logo, plus a supporting lime and coral. Code always uses the semantic tokens, never raw hex values.
Semantic tokens
Token
Value
Use
Approved pairings
Lime is never used as text on light backgrounds: it doesn't meet contrast. It works as a button fill on forest, as an active indicator, or as a badge.
Typography
Young Serif for titles and large numbers: it carries the weight and rounded terminals of the logo's serif. Albert Sans for everything else, readable from 12 px. Nothing below 12 px and no sustained all caps.
Spacing, radius and elevation
4 px grid. 20 px side margins, 10 px between sibling cards, 28 px between sections. Radius grows with the size of the element instead of one value for everything.
Radius
Elevation
FlatCards, lists and almost everything else. Contrast with the background is enough.
FloatingToasts and the center button. --e-float
SheetBottom sheets over a scrim. --e-sheet
Icons
2 px stroke on a 24 px grid, rounded caps. In lists they sit inside a 40 px sage container; in the tab bar they stand alone.
Buttons
52 px tall, pill shaped. The label says exactly what happens: "Confirm appointment", not "OK".
Primary: forest on light, lime on forest. Urgent: only for the ER and actions that can't be undone. Cancel is a secondary button with coral text, so it never competes with the primary.
Selection and forms
Large option and tile
Selected items get a 2 px forest border and a light lime fill. No shadows: the border change is enough and the layout doesn't jump.
Cards, lists and notices
Mora's next appointment
Today, 5:30 pm
Check-up with Dr. Ferreyra
Balance due
$8,750
Mora's feline distemper vaccine
Forest card: one per screen, for the most important thing. White card: everything else.
List row
Badges and notices
Up to dateIn 5 daysReviewProcessing24 hMTPM
Pets are shown with their initial on a soft color, never with stock illustrations. A real photo replaces it when the owner adds one.
Booking components
Unavailable days and times are struck through and outlined, never hidden. That way it reads as a full schedule, not as missing information.
Navigation and layers
Mora's vaccines
Refill requested
Cancel the appointment?
A solid tab bar docked to the bottom edge, covering the home indicator area so content never shows underneath. Four sections and a raised center button to book, the most frequent action. Bottom sheets rise over a scrim and close by tapping it or swiping down. Toasts dismiss themselves after 3 seconds.
Voice and tone
Like Panda's best front-desk person: warm, clear and to the point. The app ships in Rioplatense Spanish, so it uses vos, the pet's name and concrete verbs. English translations below.
Do
Mora tiene turno hoy a las 17:30Mora has an appointment today at 5:30 pm
La creatinina está un poco alta. No es urgente.Creatinine is a bit high. It's not urgent.
Cancelaste la ecografía de ThorYou canceled Thor's ultrasound
Falta el dominio. Por ejemplo, @gmail.comThe domain is missing. For example, @gmail.com
Don't
Recordatorio: cita programadaReminder: scheduled appointment
Valor fuera de rango de referenciaValue outside reference range
Operación realizada con éxitoOperation completed successfully