Zostel
Start Theming

Theming

One source: the brand tokens. As CSS variables and Tailwind utilities — colour, type, motion — and a night theme. Flat colour only.

The core

Warm Orange
#F1563F · zostel-orange
Steel Grey
#43474B · zostel-grey
Beige
#F0EDDE · zostel-beige
White
#FFFFFF · zostel-white

The landscapes

Sunny Days
Marigold
#FAA619 · sunny-1
Tangerine
#F15A22 · sunny-2
Sunshine
#FFDE18 · sunny-3
Waters
Sky
#9CDCF9 · water-1
Lagoon
#34C2D7 · water-2
Ocean
#0072BC · water-3
Fields
Mustard Leaf
#E2E418 · field-1
Jade
#04B495 · field-2
Paddy Green
#B2D234 · field-3
Flowers
Rani Pink
#ED145A · flower-1
Apricot
#FFCE7B · flower-2
Gulabi
#EE3C96 · flower-3
Valleys
Orchid
#AA5EA5 · valley-1
Valley Blue
#4F87C7 · valley-2
Blush
#F6ADCD · valley-3
Corporates
Vermilion
#EF4030 · corporate-orange
Stone Grey
#9FA4A7 · corporate-grey
Charcoal
#404041 · charcoal

One landscape per piece. Warm Orange only for the brand moment.

Digital roles (AA-checked)

surface #FFFFFF
surface-paper #F0EDDE
surface-well #E8E4D3
accent-soft #FDE8E2
surface-inverse #43474B
surface-night #2B2E31
text #43474B
text-muted #606468
text-inverse #FFFFFF
border #D8D5C6
accent #F1563F
link #D83D28
success #00866E
warning #FAA619
danger #E03022
info #0072BC
veil #43474B66
veil-night #231F2099

In code

css
/* packages/zostel-ui-src/styles/tokens.css (globals.css imports it) — Tailwind v4 makes a utility of every token */
@theme {
  --color-zostel-orange: #F1563F;   /* bg-zostel-orange, text-zostel-orange… */
  --color-zostel-grey: #43474B;
  --color-zostel-beige: #F0EDDE;
  --color-zostel-orange-ink: #D83D28;        /* orange text on white, white text on orange */
  --color-zostel-orange-ink-beige: #C92E19;  /* orange text on Beige */
  --color-zostel-muted: #606468;              /* soft text */
  --color-field-edge: #606468;                /* a field's edge (border-field-edge): 3:1 by day; beiges.k40 under .dark */
  --color-sunny-1: #FAA619;          /* …sunny-2, water-1…3, field-1…3, flower-1…3, valley-1…3 */

  /* semantic colours the primitives use (shadcn names) */
  --color-background: #F0EDDE;  --color-foreground: #43474B;
  --color-primary: #D83D28;     --color-primary-foreground: #FFFFFF;   /* orange-ink: AA under white text */
  --color-secondary: #43474B;   --color-destructive: #E03022;

  --font-heading: 'Futura', 'Jost', 'Verdana', sans-serif;
  --font-sans: 'Gotham Narrow', 'Futura', 'Verdana', sans-serif;
  --text-2xs: 0.6875rem;  /* text-2xs: 11 px, the small label over a value (Check-in, Guests) */
}

/* the page's measures, plain variables: your header's height (what sticky parts pin under), and how much of the
   screen a fixed BookingBar covers (it writes this; base.css gives it to scroll-padding-bottom) */
:root { --header-h: 4rem; --booking-bar-h: 0px; }

/* night: the same names, new values, under .dark (useTheme / DarkModeToggle set the class) */
.dark {
  --color-background: #43474B;
  --color-foreground: #F0EDDE;
}

Type

LIVE IT. NOW
display · Futura, Jost, Verdana, sans-serif · font-heading
Travel like a local — a friend in every corner.
body · Gotham Narrow, Barlow Semi Condensed, Verdana, sans-serif · font-sans
since 2013
accent · Mrs Eaves, Libre Baskerville, Georgia, serif · font-accent

Motion

Motion language: every move is a 'journey' — depart (quick), travel (steady), arrive (soft settle). Signature: 6 parts, 60 degree steps, 60 ms stagger.

instant 90ms · quick 180ms · base 300ms · journey 600ms · hero 1200ms · loop 3600ms

arrive: cubic-bezier(0.16, 1, 0.3, 1) · depart: cubic-bezier(0.7, 0, 0.84, 0) · travel: cubic-bezier(0.65, 0, 0.35, 1) · bounce: cubic-bezier(0.34, 1.56, 0.64, 1) · step60: steps(6, jump-none)

Reduced motion: replace movement with a 180ms opacity fade; never loop.

Night

The primitives paint with the semantic colours (bg-background, text-foreground, border-border…), so a .dark class on any element turns what is inside to night — try it on Dark Mode Toggle. Brand colours stay as they are.