Design System
Live reference for tokens, components, and patterns. Every example renders the real partial — edit the partial and this page updates.
Color
Tokenized via Tailwind 4 @theme. Swap --color-accent + --color-accent-soft to rebrand. Neutrals stay on the native zinc-* scale.
--color-accent
#DC2626
Brand accent — URGENT, destructive actions
--color-accent-soft
#FEF2F2
Accent background tint — pills, banners
--color-surface
#FFFFFF
Card surface
--color-surface-muted
#FAFAFA
Page background
--color-surface-subtle
#F4F4F5
Inbound chat bubble, neutral pill
--color-border
#E4E4E7
Default border
zinc-500
#71717A
Muted text
zinc-900
#18181B
Body text + primary button surface
Typography
System font stack (Tailwind default font-sans). To swap to Inter, self-host and prepend it to the stack — one line.
h1 · text-2xl font-bold
Inbox
h2 · text-lg font-semibold
Section heading
h3 · text-sm font-semibold
Card heading
body · text-sm
Body text — used in chat bubbles, descriptions, list rows.
small · text-xs text-zinc-500
Hints, captions, meta-lines.
eyebrow · text-[10px] uppercase tracking-wide
Section eyebrow
monospace · font-mono text-xs
api_key=sk-…
Spacing
Tailwind's default scale. Lean on multiples of 4 (1, 2, 3, 4, 6, 8, 12).
Radii
Card surfaces use rounded-xl (12px). Pills use rounded-full.
rounded-md
rounded-xl
rounded-full
Badges & pills
Pills retokenized: urgent → accent, others → zinc tones. Used in inbox rows, classification section, override picker.
Cards
Outlined for content surfaces; filled for muted info.
Outlined
bg-white · border · rounded-xl
Filled
bg-zinc-100 · border · rounded-xl
Icons
Lucide SVGs inlined as partials under app/views/shared/icons/. To add: copy SVG markup verbatim from lucide.dev into _<name>.html.erb, parameterize the class attr with `local_assigns[:class] || 'w-4 h-4'`. This page auto-lists every icon in that directory.
archive
ban
bot
check
clock
flame
lock
sparkles
Form elements
Use ui_input_classes / ui_label_classes / ui_hint_classes.
Friendly label shown in the account picker.
Empty states
No threads yet
When guests message your accounts, threads will appear here.
No accounts yet
Connect your first Lodgify account to get started.
Inbox lane cards
Four cards across the top of the inbox. Active card fills (red for URGENT, zinc-900 for others); inactive is outlined.
Compact thread row
Used inside the active inbox lane. The arrival-window meta-line and red urgency dot are visual modifiers; the row partial reads them off the booking.
-
Tom & Rachel Chen urgent read-only
Hi! The hot water isn't working and we have guests arriving in a few hours — can someone come look at this ASAP?
S Stangate House Arriving in about 6 hours -
Marcus Okafor urgent read-only
Door code isn't working — we're locked out and luggage is in the rain.
W Waterfalls -
Priya Singh needs reply read-only
What time can we check in on Saturday?
S Stangate House -
Diego Alvarez trivial read-only
Just confirming the cancellation policy mentioned in the listing.
W Waterfalls -
Marie Dubois read-only
Thanks for the lovely stay! We had a great time.
S Stangate House
Chat bubbles
Inbound = white card on zinc-200 border. Outbound = inverted zinc-900.
Tom Chen
Hi! When can we check in tomorrow?
Apr 21, 2026 9:14 am
Anytime after 3pm — early check-in is fine if the room's ready.
Apr 21, 2026 9:18 am
Classification section
Renders above the message list on a thread when the latest inbound has been classified.
Classified
Guest reports broken hot water just before check-in