PopChoice Docs

PopChoice Design Guidelines

Design system reference extracted from the PopChoice UI prototype. Use these tokens, patterns, and conventions when building or modifying any PopChoice interface.


Brand Identity

Personality

TraitDescription
PlayfulFun, popcorn energy
ConfidentAI-powered, curated picks
CinematicDark theatre aesthetic

Mascot

The PopcornMascot is an inline SVG of a smiling popcorn bucket with animated popping kernels and decorative stars. Use it at three sizes:

ContextSizeAnimated
Hero / landing130 pxYes (bob animation)
General display80 pxOptional
Navigation32 pxNo

Wordmark

  • Font: Oswald, uppercase, wide letter-spacing (0.12em nav, 0.04–0.07em hero)
  • Fill: Gold-to-amber gradient (linear-gradient(90deg, #F5C518, #FF9F1C)) applied via background-clip: text
  • Hero variant uses a white-to-gold-to-amber gradient that adapts to the active theme

Voice & Copy Guidelines

PopChoice speaks like the Cinematic Concierge — a confident, culturally-sharp friend who always knows what to watch. Every word should feel like it belongs in a dark theatre, not a SaaS dashboard.

CategoryGuideline✅ Do❌ Don't
Role & IdentityYou are the voice of PopChoice. Confident, cinema-obsessed, here to end the scrolling nightmare."Grab your popcorn. I've found the perfect match for your night.""I am an AI assistant programmed to query the movie database."
Tone of VoicePlayful, bold, modern. Like that one friend who always knows what to watch."Stop scrolling in vain. Let's find a film that actually matches your vibe.""Please input your preferences so the algorithm can process your request."
Pacing & FlowShort, punchy, action-oriented. Cut the fluff. Get to the point."5 questions. 60 seconds. Your perfect movie.""By answering these five comprehensive questions, you will allow our system…"
VocabularyCinematic magic words. Avoid tech jargon and corporate speak.vibe, match, masterpiece, magic, perfect pick, cinematic, moodalgorithm, vector search, process, output, user input, system
Aesthetic TranslationMirror the dark-theatre UI — sleek but energetic. Use emojis strategically, not overwhelmingly."Lights out. Your next favorite film is waiting. ✨🎬""Here are the results of your search query:"
Group DynamicsFrame Group Mode around solving the argument, not the tech."A pick everyone in the room will actually agree on. No arguing required.""This mode allows multiple users to find a statistical middle ground."
CTAsAction-first. Make users want to click. Focus on the result or the fun."Find My Movie", "Start the Quiz", "Let's Go""Submit", "Search", "Next Page"

Translation note: When localising, preserve the energy of the English copy — not just the meaning. A natural-sounding phrase in the target language beats a literal translation every time.


Theme System

PopChoice supports dark (default) and light modes. The theme is toggled by adding/removing the .pc-light class on <html>. Theme preference persists in localStorage under pc-theme.

All visual values are driven by CSS custom properties prefixed with --pc-*, defined in :root (dark) and overridden in .pc-light (light).

Core Token Table

TokenDarkLightUsage
--pc-bg#09090F#F7F5EEPage background
--pc-surface#13131F#FFFFFFCards, panels, inputs
--pc-surface-hover#1A1A30#F0ECE2Hovered cards / interactive panels
--pc-surface-deep#1C1C2E#E8E3D6Poster placeholders, skeleton loaders
--pc-header-bgrgba(9,9,15,0.85)rgba(247,245,238,0.92)Sticky nav (+ backdrop-filter: blur(16px))
--pc-fog#09090F#F7F5EEEdge-fade gradient color
--pc-t1#F8F8FF#0D0D1APrimary text (headings, labels)
--pc-t2#8888AA#424260Secondary text (body copy, subtitles)
--pc-t3#5A5A78#6A6A88Tertiary text (captions, meta)
--pc-t4#3D3D55#9090B0Muted / disabled text
--pc-t5#2D2D45#B0B0C8Barely-there text
--pc-bd1rgba(255,255,255,0.06)rgba(0,0,0,0.06)Subtle border
--pc-bd2rgba(255,255,255,0.08)rgba(0,0,0,0.09)Default border
--pc-bd3rgba(255,255,255,0.10)rgba(0,0,0,0.11)Emphasis border
--pc-bd4rgba(255,255,255,0.12)rgba(0,0,0,0.14)Strong border
--pc-gold#F5C518#C4950APrimary brand accent
--pc-amber#FF9F1C#D4760CSecondary warm accent
--pc-footer#3D3D55#9090B0Footer text
--pc-footer-bdrgba(255,255,255,0.04)rgba(0,0,0,0.06)Footer border
--pc-card-shadow0 40px 80px rgba(0,0,0,0.5)0 20px 50px rgba(0,0,0,0.1)Main card lift shadow
--pc-cta-shadow0 0 40px rgba(245,197,24,0.35), 0 8px 32px rgba(245,197,24,0.2)0 4px 20px rgba(196,149,10,0.3), 0 2px 8px rgba(196,149,10,0.15)CTA resting glow
--pc-cta-shadow-hover0 0 60px rgba(245,197,24,0.5), 0 12px 40px rgba(245,197,24,0.3)0 8px 30px rgba(196,149,10,0.4), 0 4px 16px rgba(196,149,10,0.2)CTA hover glow

CTA Gradients (theme-independent)

TokenValueUsage
--pc-ctalinear-gradient(135deg, #F5C518, #FF9F1C)Main action buttons
--pc-cta-hlinear-gradient(90deg, #F5C518, #FF9F1C)Horizontal CTA variant
--pc-accent-barlinear-gradient(180deg, #F5C518, #FF9F1C)Section accent lines
--pc-progresslinear-gradient(90deg, #F5C518, #FF9F1C)Loading progress bar

Color System

Accent / Feature Colors

NameHexUsage
Gold#F5C518Primary brand accent — CTAs, highlights, star ratings
Amber#FF9F1CSecondary warm accent — gradient pair with gold
Purple#8B5CF6Group mode, drama genre
Purple Light#A78BFAPurple tint, NEW badge text
Teal#14B8A6Sci-Fi genre, ≥95% match badge
Red#EF4444Thriller genre, dark tone
Pink#EC4899Romance genre
Green#10B981Adventure genre, success states
Blue#60A5FADocumentary genre
Gray#6B7280Horror genre, neutral

Genre Color Map

GenreColor
Action#FF9F1C
Comedy#F5C518
Drama#8B5CF6
Sci-Fi#14B8A6
Thriller#EF4444
Romance#EC4899
Horror#6B7280
Adventure#10B981
Animation#A78BFA
Documentary#60A5FA

Similarity Match Badge Colors

ThresholdColor
≥ 95%Teal #14B8A6
≥ 90%Gold #F5C518
≥ 85%Amber #FF9F1C
< 85%Purple #8B5CF6

Typography

Font Stack

RoleFamilyImport
Display / HeadingsOswald (semibold, uppercase)Google Fonts
Body / UIManrope (primary), Inter (fallback)Google Fonts
@import url('https://fonts.googleapis.com/css2?family=Oswald:wght@400;500;600;700&family=Manrope:wght@400;500;600;700&family=Inter:wght@300;400;500;600;700&display=swap');

Type Scale

NameSizeFontUsage
Heroclamp(3.5rem, 10vw, 6rem)OswaldLanding page title
Page H12.2remOswaldQuiz / section headings
Subhead2remOswaldLoading page, between-person
Section H21.6remOswaldAbout page sections
Nav Wordmark1.4remOswaldHeader logo text
Movie Titleclamp(1.8rem, 5vw, 3rem)OswaldResult card main title
Expanded Title1.3remOswaldSuggestion expanded view
Hero Body1.1remManropeLanding page subtitle
Body1rem / 0.95remManropeStandard paragraphs
Description0.88remManropeAI descriptions, tips
Meta0.82remManropeCard meta, captions
Small0.78remManropeStar ratings, sub-labels
Nano0.72remManropeSection labels, token labels
Eyebrow0.65remManropeUppercase eyebrow labels

Typography Conventions

  • Oswald is always uppercase, semibold (600), with wide letter-spacing (0.04em0.12em).
  • Body text uses font-weight: 400 (normal) or 500 (medium). Bold labels use 600700.
  • Line height: 1 for display headings, 1.11.2 for subheads, 1.51.75 for body copy.
  • Base font size is 16px (var(--font-size)).

Spacing & Layout

Border Radius

TokenValueUsage
rounded-xl12pxBadges, inputs, icon containers, theme toggle
rounded-2xl16pxCards, quiz panels, buttons
rounded-3xl24pxMain movie recommendation card
rounded-full9999pxPills, progress dots, avatar circles

Border Styles

NameValueUsage
Subtle1px solid var(--pc-bd1)Default card/panel borders
Default1px solid var(--pc-bd2)Interactive element borders
Emphasis1px solid var(--pc-bd4)More visible dividers
Gold Accent1px solid rgba(245,197,24,0.25)Brand badge borders
Gold Hover1px solid rgba(245,197,24,0.4)Active/hovered gold states
Selected1.5px solid {color}60Selected quiz option (dynamic color)
Dashed Add1px dashed var(--pc-bd4)"Add another person" button

Shadow & Glow

NameValueUsage
CTA Glowvar(--pc-cta-shadow)Primary CTA resting state
CTA Glow Hovervar(--pc-cta-shadow-hover)Primary CTA hovered
Card Shadowvar(--pc-card-shadow)Main movie recommendation card
Active Card Glow0 0 30px rgba(245,197,24,0.1)Selected carousel item
Focus Ring0 0 0 3px rgba(245,197,24,0.06)Input focus state

Layout Patterns

  • Max content width: max-w-5xl (landing features), max-w-3xl (about), max-w-xl (quiz), max-w-md (intro/group setup), max-w-sm (loading)
  • Section padding: px-5 py-12 to px-5 py-20
  • Card padding: p-5 to p-6
  • Gap between cards: gap-4 to gap-6
  • The page uses a flex column layout: sticky header → flex-1 main → footer

Gradients

NameValueUsage
Primary CTAlinear-gradient(135deg, #F5C518, #FF9F1C)Main action buttons
Hero Title (dark)linear-gradient(135deg, #FFFFFF 0%, #F5C518 60%, #FF9F1C 100%)Landing wordmark
Hero Title (light)linear-gradient(135deg, #0D0D1A 0%, #C4950A 55%, #D4760C 100%)Landing wordmark
Purple Actionlinear-gradient(135deg, #8B5CF6, #6D28D9)Group mode CTA
Accent Barlinear-gradient(180deg, #F5C518, #FF9F1C)Section accent lines
More Suggestionslinear-gradient(180deg, #8B5CF6, #14B8A6)Secondary section bars
Progress Barlinear-gradient(90deg, #F5C518, #FF9F1C)Loading progress
Cinema Radialradial-gradient(ellipse 80% 60% at 50% 40%, rgba(245,197,24,0.06) 0%, transparent 70%)Subtle hero background glow
Page Fadelinear-gradient(180deg, var(--pc-fog) 0%, transparent 30%, transparent 70%, var(--pc-fog) 100%)Hero image overlay

Components

Buttons

VariantBackgroundText ColorWeightShapeExtras
Primary CTAvar(--pc-cta)#09090F700rounded-2xl, px-8 py-4Golden glow shadow, active:scale-95
Group Modelinear-gradient(135deg, #8B5CF6, #6D28D9)#F8F8FF600rounded-2xl, px-6 py-3
Secondary / Ghostvar(--pc-bd1) or transparentvar(--pc-t2)400rounded-2xl, px-6 py-41px solid var(--pc-bd2) border
Back / TertiaryGhost bgvar(--pc-t2)400rounded-xl, py-3Border, full-width in quiz
Icon Buttonvar(--pc-bd2)var(--pc-t1)rounded-full, w-8 h-8 / w-9 h-9Border

Badges & Pills

  • Brand Badge: Uppercase tracking-widest, gold tint bg + gold border, Sparkles icon
  • Match Badge: {color}18 bg + {color}35 border, Sparkles icon + "XX% match"
  • Genre Pill: var(--pc-bd1) bg + var(--pc-bd2) border, var(--pc-t2) text, rounded-full
  • NEW Badge: rgba(139,92,246,0.15) bg, #A78BFA text, rounded-full
  • AI Pick Label: Frosted bg with backdrop-filter: blur(8px), gold text

Cards

  • Feature Card: var(--pc-surface) bg, var(--pc-bd1) border, rounded-2xl, colored icon container ({color}18 bg)
  • Quiz Option (unselected): var(--pc-surface) bg, var(--pc-bd2) border, hover changes to var(--pc-surface-hover) + colored border
  • Quiz Option (selected): {color}08 bg, 1.5px solid {color}50 border, 0 0 20px {color}18 glow, checkmark indicator
  • Main Movie Card: rounded-3xl, var(--pc-card-shadow), image with gradient overlay, title overlay at bottom
  • Suggestion Card: rounded-2xl, min-width: 220px, image top + content bottom, whileHover={{ y: -4 }}
  • AI Insight Box: Subtle gold tint bg, gold-tinted border, "Why this film" eyebrow label with Sparkles icon

Inputs

  • Default: var(--pc-bg) bg, var(--pc-bd2) border, rounded-2xl, px-5 py-4
  • Focus: Gold border (rgba(245,197,24,0.4)) + focus ring (0 0 0 3px rgba(245,197,24,0.06))
  • Group input focus: Purple border (rgba(139,92,246,0.5))

Progress Indicators

  • Quiz Dots: 4 dots; completed = rgba(245,197,24,0.5), current = gold-amber gradient (wider, 24px), upcoming = var(--pc-bd2), all h-2 rounded-full
  • Loading Bar: h-1.5 rounded-full, gold-amber gradient fill, var(--pc-bd2) track
  • Section Accent Bar: w-1.5 h-5 rounded-full, vertical gradient strip next to section labels
  • Sticky top-0 z-50 header
  • backdrop-filter: blur(16px) + var(--pc-header-bg) for glassmorphism
  • Bottom border: 1px solid var(--pc-bd1)
  • Logo left, nav links + theme toggle + CTA right
  • Active nav link: gold text + gold-tinted bg
  • Theme toggle: w-9 h-9 rounded-xl, ghost bg + border
  • Centered, py-5, text-xs
  • var(--pc-footer) text, var(--pc-footer-bd) top border
  • Copy: "Made with 🍿 by PopChoice — AI Movie Recommendations"

Motion & Animation

PopChoice uses Framer Motion (motion/react) for all page transitions and micro-interactions.

Animation Tokens

NameConfigUsage
Page Enteropacity: 0→1, y: 20→0, duration: 0.5sDefault page section entrance
Hero Springopacity: 0→1, scale: 0.5→1, y: 30→0, spring stiffness: 200Mascot / bold element entry
Scroll RevealwhileInView, opacity: 0→1, y: 30→0, once: true, duration: 0.6sBelow-fold content
Stagger Delaydelay: i * 0.1sSequential card/feature reveals
Quiz Slidex: ±60→0, opacity: 0→1 with direction awarenessQuestion step transitions
Tip Swapopacity: 0→1, y: 8→0 / exit y: 0→-8, duration: 0.4sLoading screen text rotation
Hover LiftwhileHover={{ y: -4 }}, whileTap={{ scale: 0.97 }}Suggestion cards
Button Pressactive:scale-95 (CSS)All interactive buttons
CTA HovertranslateY(-2px) + glow shadow increasePrimary CTA mouse enter

CSS Keyframe Animations

/* Mascot gentle float */
@keyframes mascot-bob {
  0%,
  100% {
    transform: translateY(0px) rotate(-1deg);
  }
  50% {
    transform: translateY(-6px) rotate(1deg);
  }
}

/* Hero background particles */
@keyframes float-up {
  0% {
    transform: translateY(0) rotate(0deg);
    opacity: 0;
  }
  10% {
    opacity: 1;
  }
  90% {
    opacity: 0.3;
  }
  100% {
    transform: translateY(-110vh) rotate(360deg);
    opacity: 0;
  }
}

Transition Defaults

  • Interactive hover/focus: transition-all duration-200
  • Theme transitions (bg, color, border): transition: background 0.3s, color 0.3s
  • Image fade-in: transition: opacity 0.4s–0.7s

Page Patterns

Landing Page

  1. Full-viewport hero with background image (low opacity), radial glow overlay, floating particles
  2. Film grain texture SVG overlay at opacity: 0.03
  3. Badge → Mascot → Gradient title → Subtitle → CTA pair (primary + ghost) → Social proof line
  4. Scroll-to features section: 4-column grid of feature cards
  5. Mid-page visual break with background image + gradient fade

Quiz Flow

  1. Intro: Solo vs. Group mode selection (two large option cards)
  2. Group Setup: Name input list with add/remove, purple accent color
  3. Questions (4 steps): Animated slide transitions, progress dots, step counter
    • Q1: Favorite movie (text input)
    • Q2: Old or new? (era selection cards)
    • Q3: Mood / genres (multi-select genre chips with icons)
    • Q4: Tone preference (4 tone cards: Light, Balanced, Serious, Dark)
  4. Between Persons: Hand-off screen for group mode
  5. Navigation: Back/Next buttons, Next disabled until valid answer

Loading Page

  • Centered layout, animated film reel with popcorn kernel ring
  • Rotating tip text with AnimatePresence
  • Progress bar 0→100% over ~3.8 seconds
  • "Did you know?" fun fact card fades in after 1.5s delay

Results Page

  • "Top Pick" main movie card: large image, gradient overlay, match badge, AI pick label
  • AI-written description in gold-tinted insight box
  • "More suggestions" horizontal scrollable carousel of 5 smaller cards
  • Expandable detail view on suggestion click
  • Action buttons: "Start Over" (ghost) + "New Quiz" (primary CTA)

About Page

  • "How it works" 4-step vertical timeline with icons and descriptions
  • "Under the hood" tech stack 2×2 grid
  • FAQ section with Q&A cards

Accessibility Notes

  • All interactive elements have visible hover/focus states
  • Gold accent colors meet WCAG contrast against dark backgrounds
  • Theme toggle has a descriptive title attribute
  • Buttons use active:scale-95 for tactile feedback
  • Images have alt text
  • Font sizes use relative units (rem, clamp()) for scalability

On this page