Themes / 15
Passage
A clear, airy theme for travel and booking. Pale-water paper, deep navy ink, and one hue of blue from light to dark.
npx shadcn@latest add https://strictthemes.com/r/passage.json- DESIGN.md The spec
- tailwind.css Tailwind CSS v4
- shadcn.css shadcn variables
- nuxt-ui.css Nuxt UI
- app.config.ts Nuxt UI config
- tokens.json W3C design tokens
01 / Preview
Stock shadcn components, this theme.
Ship the page, keep the system.
Every color, corner and typeface in this box comes from the theme's tokens. The components are stock shadcn.
96%88%100%02 / Page prompts
Paste one into your agent. Get that page.
Each prompt is a full brief for one page in this theme: its sections, layout, behavior, and a checklist the agent goes through before it says it is done. The rules in every prompt are generated from the theme's strict block. Each preview is the page built from the prompt, shown as it came out.
Search
The home page of a ferry line, with a journey search form in a white card on the page, popular routes with their fares, and three reasons to sail with the line.
42.5k characters
Strict Check 100%
Results
The sailings for one route and day, with a summary of the search, a list of journeys that can be sorted, each with its times, duration, state and fare, and a summary of the chosen sailing.
40.9k characters
Strict Check 100%
Passenger details
The step before payment in a ferry booking, with each passenger's details and the extras in white cards, a fare summary beside them on a wide screen, and checks in code.
41.9k characters
Strict Check 100%
Ticket
The confirmation of a ferry booking, with a boarding pass as a ticket card with a dashed tear line, the booking reference, the journey, the passengers, a drawn boarding code and what to bring.
40.8k characters
Strict Check 100%
Departures
A live departures board for one ferry port, with a notice about a cancelled sailing, a table of the day's sailings with time, destination, ship, berth and state, a destination filter, and the port's practical details.
40.6k characters
Strict Check 100%
03 / Colors
Every color the theme allows.
primary
#023E8A / #48CAE4
on-primary
#FFFFFF / #03045E
secondary
#03045E / #CAF0F8
on-secondary
#CAF0F8 / #03045E
tertiary
#00B4D8
on-tertiary
#03045E
neutral
#35527A / #90E0EF
background
#CAF0F8 / #02033B
surface
#FFFFFF / #03045E
foreground
#03045E / #E6F8FC
border
#90E0EF / #023E8A
error
#B3261E / #FF9B93
success
#0B6B4F / #6FD9B4
Left: light mode. Right: dark mode.
04 / Typography
Five sizes. Nothing in between.
display
Overpass · 56px · weight 800 · line 1.05
The quick brown fox
h1
Overpass · 36px · weight 800 · line 1.15
The quick brown fox
h2
Overpass · 24px · weight 700 · line 1.25
The quick brown fox
body
Karla · 16px · weight 400 · line 1.55
The quick brown fox
label
Overpass Mono · 12px · weight 500 · line 1.3
The quick brown fox
05 / Shape and space
Corners and spacing.
sm
6px
md
10px
lg
18px
xs
4px
sm
8px
md
12px
lg
20px
xl
32px
2xl
64px
06 / Rules
What the strict block enforces.
- Contrast
- WCAG AA
- Colors
- Tokens only, within 0.02 of a token
- Spacing
- Scale only, plus 0, 1px, 2px
- Corners
- Scale only, full rounds up to 64px
- Type
- Scale only, declared fonts only
- purple gradient
- Not allowed
- emoji icons
- Not allowed
- nested cards
- Flagged
- glow shadows
- Not allowed
07 / Guidance
What your agent reads.
Overview
Passage is for getting people from one place to another: a ferry line, an airline, a rail operator, a tour company, a hotel's booking pages. It borrows from departure boards and boarding passes. The page is pale water, cards are white, and every color on it is one blue at a different depth.
Colors
- Primary (
#023E8A) is deep sea blue, for the one main action on a screen: "Search", "Continue", "Pay". Links in running text use it too. - Secondary (
#03045E) is navy ink for secondary buttons and headings. - Tertiary (
#00B4D8) is bright cyan, with navy text on it, for one badge: "Direct", "Lowest fare", "Boarding". - Neutral (
#35527A) sets times of day, fare rules and captions. - Background (
#CAF0F8) is pale water. Surface (#FFFFFF) is the white of a card or a ticket. - Success (
#0B6B4F) marks "On time" and "Confirmed", always with the word. Error (#B3261E) is for "Cancelled" and form errors, always with a message.
Typography
Overpass sets headings: it was drawn from road signs, and reads at a glance. Karla sets body text at 16px. Overpass Mono sets labels: times, port and airport codes, booking references, seat numbers, prices. Times and prices use tabular figures, and a time is always written in 24 hours.
Layout
A 12-column grid, 1120px at its widest, with 20px gutters. A booking page is one column of white cards on the water, with a summary beside it on a wide screen. Spacing comes from the scale (4, 8, 12, 20, 32, 64): 20px inside a card, 64px between sections. A journey is always read left to right: where from, when, where to.
Elevation & Depth
Flat. A white card on the pale page needs no shadow, only its 1px border. A ticket is a card with one dashed rule where it would tear. Menus and dialogs float on one short, blue-tinted shadow.
Shapes
Rounded like a boarding pass: 6px for badges and checkboxes, 10px for buttons and inputs, 18px for cards and tickets. Avatars and switches are fully round.
Components
- Buttons: deep blue for the one main action, navy for the rest. Sentence-case mono labels.
- Cards: white, 18px corners, 20px padding, a 1px border.
- Badges: cyan with navy text, one or two words.
- Journeys: a mono time and a place on the left, the same on the right, and a 1px line between them with the duration above it.
- Icons: 1.5px stroke line icons. Never emoji.
Do's and Don'ts
- Do keep to the one hue: depth of blue is how this theme says what matters.
- Do give a state a word as well as a color: "On time", "Delayed 20 min".
- Do put the price where the eye ends its line, on the right, in mono figures.
- Don't add a second accent color, a gradient or a photograph behind text.
- Don't write a time without its place, or a price without its currency.
- Don't introduce a color, size or radius that is not a token above.