Icon Mark
| Context | Size | Usage | |
|---|---|---|---|
| Favicon / browser tab | 16–32px | <link rel='icon'> | |
| Navbar / window bar | 20–24px | <Image> en <nav> | |
| Modals / popups | 24–32px | prop icon del componente | |
| Sidebar colapsado | 32–40px | logo-sm | |
| App icon / avatar | 40px | <Avatar> | |
| Loading / splash | 64–96px | loading.tsx |
Color Palette
Brand Blue — Primary
Brand Gray — Secondary
Slate — Bridge
Amber — Warnings & Alerts
Rose — Errors
Typography
Exo 2 — Headings & Subtitles
weights: 600 / 700 / 800 · Google Fonts · font-heading
Inter — Body & UI
The Solvia Pro platform centralizes primary medical management and its associated workflows—including HR and payroll, EHR, billing, and more.
Field label · Metadata · Tooltip text
weights: 400 / 500 / 600 · Google Fonts · font-body
Pair · Exo 2 + Inter
The module's descriptive text appears here. Inter works perfectly at 14–16 px for labels, short paragraphs, and table content.
Alerts & Notifications
Inline — embedded in components or pages
System information updated successfully.
Active Session
Your session will remain active for 8 more hours.
Warning
This change will affect all users in the group.
Access Denied
You do not have permission to perform this action.
Global toast — floats over the page
// Inline — embedded in components or pages
import { Alert } from "@/components/alert"
<Alert type="info" message="System information updated successfully." />
<Alert type="warning" title="Warning" message="This change will affect all users in the group." onClose={() => {}} />
<Alert type="error" message="Failed to save. Please check your connection." />
// Global toast — floats over the page
import { useToast } from "@/components/toaster"
const { info, warning, error } = useToast()
info("Saved successfully")
warning("Session about to expire", { title: "Attention", duration: 8000 })
error("Failed to connect", { duration: 0 }) // 0 = no auto-dismissNext.js Font Setup
// app/layout.tsx
import { Inter, Exo_2 } from "next/font/google"
const inter = Inter({
subsets: ["latin"],
variable: "--font-body",
display: "swap",
})
const exo2 = Exo_2({
subsets: ["latin"],
weight: ["600", "700", "800"],
variable: "--font-heading",
display: "swap",
})
// className del <html>:
// `${geistSans.variable} ${geistMono.variable} ${inter.variable} ${exo2.variable}`