Design & styling system

The Candy theme

Hot pink, purple, and sky blue on a warm pink-white canvas, with rounded corners, tinted shadows, and a single spring easing curve reused everywhere. Built on Tailwind CSS v4. This page renders the actual tokens, live.

Color

Palette, straight from globals.css

Hot Pink Β· Primary#e040a0
Purple Β· Secondary#7c52aa
Sky Blue Β· Accent#0096cc
Warm Pink-White Β· Background#fef7ff
Tinted shadows: cards don't cast gray β€” they glow. Pink, purple, and blue shadows at 20–35% opacity match each element's own hue.
Typography

DM Sans everywhere

Rounded, friendly, with bold weights for headings. DM Mono covers code and data.

Plan the trip, skip the tabs.
DM Sans 700 β€” section headings
DM Sans 400/500 β€” body copy stays soft and readable on the warm background, with the muted ink color #7a6385 for supporting text.
DM Mono β€” €1,234 Β· KIWIβ†’ATH Β· 2026-09-14
Shape & motion

Rounded, springy, alive

16–20px corner radii on cards, pill-shaped tags, and one bouncy spring curve (cubic-bezier(.34,1.56,.64,1)) on hover across every interactive surface β€” the same three component states every tool card actually goes through:

Tool card shell

16px radius Β· purple-tinted shadow Β· spring lift on hover

Loading state

shimmer skeleton + search-progress pill

Stress gauge

calm-green β†’ busy-rose pips

Busy

Blueprint vs. built

Design system matrix

AttributeBlueprint targetCurrently implemented
Theme / vibe"Joyful Pop""Joyful Pop"
Color paletteHot pink, purple, sky blue#e040a0 Β· #7c52aa Β· #0096cc
TypographyDM SansDM Sans via Google Fonts
Corner radius16–20px cards, pill tags16px panels, fully-rounded tags
AnimationsBouncy scale-up spring hover.bouncy-hover scale transition
ShadowsTinted color shadowsPink/purple/blue at 20–35% opacity
UI components

Component map

Every UI piece and where it lives in the frontend.

🧭
Header & branding

Pink-shadowed button with an animated spinning compass next to the "Kompass" title, a gear button for settings, and a hamburger drawer toggle on mobile. app-header.js

πŸ’¬
Chat window

CopilotKit v2 chat container with travel-specific titles and placeholders.

πŸ—‚οΈ
Trip sidebar

Two pill tabs β€” Trips (new / resume / delete) and Saved (bookmarks with destination, dates, stress dot, and total). trip-sidebar.js saved-list.js

🏷️
Preference badges card

Colorful pill tags for direct flights, hotel class, transit modes, vibes, and non-default currency. preferences-card.js

πŸ™‹
Clarifying-question card (HITL)

Question + candy option pills (single or multi-select) + an always-present "Other" free-text input; resolves to an "Answered" chip. clarify-card.js

βš™οΈ
Settings modal

Portal modal (bottom-sheet on mobile) editing the global travel profile with loading / saving / saved / error button states. settings-modal.js

πŸ’«
Search progress

Animated candy-gradient pill sliding across a soft pink track, shown inside every loading tool card. search-progress.js

⏳
Live chat status

Replaces CopilotKit's default loading dot with a pink pill showing a friendly, tool-specific label driven by the AG-UI run lifecycle β€” steps aside once real text streams. chat-status.js

✈️
Flight & cheapest-date cards

Live results with currency-aware prices and an β‰ˆ approx badge for estimates. flights-card.js cheapest-dates-card.js

🏨
Accommodations card

Live lodging with nightly + total rates, ratings, amenities, and booking links. accommodations-card.js

πŸ”Ž
Research card

Grounded web-search answers rendered as their own card (destination knowledge + ground-transport routing). research-card.js

βš–οΈ
Scenario comparison cards

2–3 side-by-side cards: label + dates, hero total, Transport/Stay split, 5-pip stress gauge, highlight chips, leg summary, and "View details". Best-value and lowest-stress badges are derived client-side. scenario-comparison-card.js

πŸ”
Scenario detail modal

Price + stress gauge, cost-breakdown bars, stress-factor tiles, per-direction travel timeline with connection chips and booking links, accommodation list, expandable day-by-day itinerary, reasoning, Save, and View-on-map.

πŸ“±
Responsive pass

3-pane split on desktop; full-width chat, off-canvas drawer, and bottom-sheet modals below lg.

πŸ—ΊοΈ
Map display

Split panel with itinerary summary over an interactive Google Map: numbered stops, stay markers, mode-colored polylines (geodesic flights), auto-fit bounds, cached client-side geocoding. Friendly placeholder without a key. trip-panel.js trip-map.js

πŸ–ΌοΈ
Trip vibe backdrop

A self-healing, reusable backdrop image β€” hidden until it loads, silently hidden on 404 (not generated yet). Reused behind the sidebar row (fades left, 55%) and the scenario-detail header (fades bottom, full strength). trip-backdrop.js