Source of truth:ResVR Interior UI
— This system governs the 3D visualizer, interior customizer, and any product-side UI. Do not apply these tokens to the marketing site.
Color Palette
Brand Accent — Dark Mode
cyan-400
#22d3ee
Primary
cyan-500
#06b6d4
cyan-500/20
accent bg
slate-900
#0f172a
Base BG
slate-800
#1e293b
slate-700
#334155
white/10
border
white/7
subtle
Brand Accent — Light Mode
teal-600
#0d9488
Primary
teal-500
#14b8a6
teal-500/10
accent bg
white/70
surface
Semantic
Standard — IncludedLevel 1 — Up to $1.5kLevel 2 — Up to $3kLevel 3 — Up to $5kLevel 4 — $5k+
✓ CompleteExit / Danger
Typography
Font: Inter · Weights: 300 / 400 / 500 / 600 / 700 / 800 · Via Google Fonts
Role
Size
Weight
Notes
Sample
section-header
18px
300 + 700
light + bold cyan pop
Customize Interior
body
14px
500
menu items, labels
Countertop Selection
label-sm
12px
500–600
secondary labels
Kitchen · 3/5 complete
micro
10–11px
700
uppercase, tracking-wider
Guided Tour
nano
9px
700
badges, option names
Standard
Glass Morphism System
The defining visual pattern of all product UI. Every surface uses backdrop-blur-xl with semi-transparent slate backgrounds.
Collapsible section inside the Controls panel. All diagrams are custom SVGs with dark/light color variants (cyan-400 dark / teal-600 light). MOVE card cycles WASD ↔ arrow keys every 2.5s.
Triggered from NAVIGATION button in the bottom bar. Shows a floor plan with a position dot (cyan-400) and view cone (teal). Rounded-2xl glass panel.
Floor plan image rendered here
N
Position dot: bg-cyan-400 · w-3 h-3 · rounded-full
View cone: teal cone SVG · rotates with camera direction
N compass: top-right corner
Container: rounded-2xl backdrop-blur-xl
Color Selection Widget — ColorSwatchPopover
Floating pill that appears above the OptionsGallery when the selected option has color variants. Two modes: Bar (horizontal pill, default) and Radial (arc of swatches). Source: components/Interior/ColorSwatchPopover.tsx
Horizontal scrollable strip anchored at the bottom of the 3D viewport (above the bottom bar). Shows upgrade options as thumbnail cards with tier badges, tier filter dropdown, search, and expand-to-grid mode. Source: components/Interior/OptionsGallery.tsx
Floating badge in the bottom-right corner. Expands into a full selections panel. Handles the full checkout flow: review → processing → submitted. Source: components/Interior/SelectionsWidget.tsx
Left-side navigation panel (260px wide) with collapsible category headers, subcategories, and leaf items. Tracks completion state per item. Search with alias support. Source: components/Interior/InteriorSidebar.tsx
Pill tab on right edge of sidebar: chevron-left (open) / chevron-right + "MENU" (closed)
animates with sidebar: left: isCollapsed ? 100 : 360
Step-by-Step Mode Panel
Anchored to the bottom of the InteriorSidebar when isStepByStep=true. Shows progress indicator, step navigation, and a camera views carousel. Source: InteriorSidebar.tsx → AnimatePresence bottom panel.
Replaces the standard bottom bar when isGuidedTourActive=true. Taller (60px vs 50px), cyan progress bar along top edge, live-dot indicator, room navigation. A separate "MENU" pill button appears top-left when sidebar is collapsed. Source: components/Interior/InteriorBottomBar.tsx
Full-screen pointer-events overlay that activates when AI mode is selected. Contains: avatar type selector pill (top-left), avatar card + mic controls (bottom-right), and transcript bubble (bottom-center). Three avatar variants: Human (photo), Orb (radial bar visualizer), Orb Alt (layered SVG soundwave). Source: components/Interior/AssistantOverlay.tsx
fixed inset-0 z-[55] pointer-events-none · children use pointer-events-auto
Avatar Type Selector (top-left, absolute top-20 left-28)
Human Avatar (speaking state — cyan glow)
Human photo
RESVR Assistant
Orb Avatar
56 radial SVG bars around a cyan gradient circle with ResVR logo. Bar heights randomise at 100ms (speaking) / 150ms (listening) / 400ms (idle).
Orb Alt Avatar
3-layer SVG soundwave SVGs (black/dark-teal/light-teal) composited over a white→cyan gradient circle + ResVR logo. Each layer rotates/scales at different speeds per voice state.
Transcript Bubble (bottom-center, absolute)
Speaking state (AI responding)
RESVR AI
Welcome! You're currently in the kitchen. I can see you have the standard countertop selected. Would you like me to show you the premium quartz options?
Context-sensitive label used on toolbar buttons, icon-only controls, and option cards. 300ms show delay, 150ms Framer motion easeOut fade + scale. Four directional positions. Dark glass pill — consistent across both themes (always dark).
Fixed left rail (100px wide, full height) containing two sections: Design Modes (Exterior / Interior) at top and Navigation Modes (Walk / Tour / Step-by-Step) at bottom, with a Theme Toggle at the very bottom. Source: components/Interior/DesignModeSelector.tsx
bg-white/10 icon bg, white icon + text, stroke 2.5 — NO left bar
bg-white/10 text-white stroke-[2.5px]
Nav mode: Hover
Same as active bg (white/10), text white
group-hover:text-white group-hover:bg-white/5
Nav mode: Inactive
Slate-500 icon + slate-600 label, invisible bg
text-slate-500 label:text-slate-600
Active indicator animation
Slides between design mode buttons (layoutId shared)
motion.div layoutId="activeDesignModeBorder" spring
Theme toggle hover
bg-white/10 bg, icon turns white
hover:text-white hover:bg-white/10
Standard Bottom Bar (Default / Walk Mode)
Default bottom bar rendered when NOT in guided tour mode. 50px height. Left: builder logo + model name + customization %. Right: segmented Navigation / Rooms control. 2px cyan progress bar runs along top edge tracking customization percentage. Source: components/Interior/InteriorBottomBar.tsx
All interactive elements across the product UI, their states, triggers, and exact token classes. Use this as the source of truth when implementing new components or reviewing QA.