Amber
#B45309
Adventure, primary action, active filters
Local reference
Shared tokens, accessible primitive contracts, and product components for the MVP surfaces.
#B45309
Adventure, primary action, active filters
#166534
Trust, save, success, recovery
#1C1917
Primary text and story headings
#78716C
Metadata and secondary copy
#FAFAF9
Warm public page background
#0C0A09
Preview and operational surfaces
Plus Jakarta Sans carries display moments.
DM Sans keeps UI and story reading clear and warm.
JetBrains Mono is reserved for metadata and small labels.
Story cards preserve semantic links, metadata, fallback media, chips, and save affordances without requiring client rendering.
Start hills early and keep one afternoon unscheduled.
Return to discovery and save a story when it earns a place in your trip notes.
Explore storiesUse native dialog for static islands or a headless React primitive when focus trap complexity grows.
Tab cycles within the open dialog · Escape closes · focus returns to trigger
Sheet/drawer is a dialog variant with edge anchoring and stable touch targets.
same focus and escape behavior as dialog · close control remains visible on mobile
Prefer static links for URL-changing filters and headless tabs for in-page panels.
Arrow keys move between tabs · Home/End jump to edges · Tab enters selected panel
Use details/summary for content disclosure unless custom roving focus is needed.
Enter/Space toggles · headings remain semantic
Keep public navigation as links; use headless menu patterns for auth/account menus.
Arrow keys move · Escape closes · typeahead where practical
Native select first; custom listbox only when search or rich option content is required.
Native select behavior or headless listbox behavior · visible focus
Use datalist for simple city autocomplete; upgrade to headless combobox when results need rich metadata.
Arrow suggestions · Enter accepts · Escape clears/closes
Use for icon-only controls; never hide required instructions solely in tooltips.
appears on focus as well as hover · Escape dismisses when persistent
Use for nonblocking confirmation, undo, and transient status only.
does not steal focus · undo action is reachable after announcement