Skip to content

Visual Identity

Playupi’s visual identity is built for a gaming-first audience: bold, energetic, and modern. The aesthetic draws from gaming culture without being childish — clean dark surfaces, vibrant accent colors, and snappy interactions.

Mood: electric bold energetic modern gaming clean confident fun


The Playupi logo is a text-only wordmark: the word “Playupi” styled in the brand font and colors.

PropertyValue
TextPlayupi
FontInter ExtraBold (800)
Color (dark bg)White #F4F4F5
Color (light bg)Dark #18181B
AccentThe “P” or dot can optionally use Electric Violet #7C3AED for brand emphasis
Size (header)24px
Size (footer)16px
Favicon”P” in Electric Violet on transparent background, 32x32 and 16x16

The wordmark is used in the header, footer, and OG images. No separate icon/symbol exists — the text is the brand.


Color Palette

Primary Colors

NameHexUsage
Electric Violet#7C3AEDPrimary brand, headers, active states, CTAs
Violet Light#A78BFAHover states, secondary buttons, highlights
Violet Dark#5B21B6Pressed states, deep accents
Violet Surfacergba(124, 58, 237, 0.1)Subtle tinted backgrounds

Accent Colors

NameHexUsage
Hot Coral#FF6B6BTrending badge, dislike, alerts
Neon Lime#84CC16Success, like, positive states
Electric Cyan#22D3EELinks, info, exploration badge
Amber#F59E0BNew badge, warnings

Backgrounds (Dark Theme)

NameHexUsage
Base#0A0A0FPage background
Surface 1#13131ACards, sidebar
Surface 2#1C1C27Inputs, elevated cards
Surface 3#262633Hover states, dropdowns
Borderrgba(255, 255, 255, 0.08)Card borders, dividers
Border Hoverrgba(255, 255, 255, 0.15)Hover borders

Text (Dark Theme)

NameHexUsage
Primary#F4F4F5Headings, game titles
Secondary#A1A1AABody text, descriptions
Muted#71717ALabels, metadata, timestamps
On Accent#FFFFFFText on colored backgrounds

Light Theme

The platform supports a light theme with the same brand identity but inverted surface hierarchy.

Backgrounds (Light Theme)

NameHexUsage
Base#F8F8FCPage background
Surface 1#FFFFFFCards, sidebar
Surface 2#F1F1F6Inputs, elevated cards
Surface 3#E8E8F0Hover states, dropdowns
Borderrgba(0, 0, 0, 0.08)Card borders, dividers
Border Hoverrgba(0, 0, 0, 0.15)Hover borders

Accent Colors (Light Theme)

Light theme accents are slightly darker for readability against light backgrounds:

NameHexUsage
Hot Coral#EF4444Trending badge, dislike, alerts
Neon Lime#16A34ASuccess, like, positive states
Electric Cyan#0891B2Links, info, exploration badge
Amber#D97706New badge, warnings

Text (Light Theme)

NameHexUsage
Primary#18181BHeadings, game titles
Secondary#52525BBody text, descriptions
Muted#A1A1AALabels, metadata, timestamps
On Accent#FFFFFFText on colored backgrounds

Light Theme Differences

PropertyDarkLight
ShadowsHeavier (higher opacity)Lighter (lower opacity)
Glow effectsVisible (0.3 opacity)Subtle (0.1 opacity)
Gradient shinergba(255,255,255,0.05)rgba(255,255,255,0.8)
Modal bgrgba(19, 19, 26, 0.85)rgba(255, 255, 255, 0.9)
Overlayrgba(0, 0, 0, 0.6)rgba(0, 0, 0, 0.3)

See Theme Preview for a live comparison. See the themes/ folder in the theme preview for the CSS variable definitions.

Gradients

/* Primary brand gradient — buttons, hero elements */
--gradient-brand: linear-gradient(135deg, #7C3AED 0%, #A78BFA 100%);
/* Glow effect behind featured cards */
--gradient-glow: radial-gradient(ellipse at center, rgba(124, 58, 237, 0.3) 0%, transparent 70%);
/* Subtle card shine on hover */
--gradient-shine: linear-gradient(135deg, rgba(255,255,255,0.05) 0%, transparent 50%);
/* Category header gradients (per-category theming) */
--gradient-action: linear-gradient(135deg, #DC2626 0%, #F97316 100%);
--gradient-puzzle: linear-gradient(135deg, #2563EB 0%, #22D3EE 100%);
--gradient-racing: linear-gradient(135deg, #F59E0B 0%, #EF4444 100%);

Typography

Font Stack

TypeFontFallbackNotes
DisplayIntersystem-ui, sans-serifHeadings, game titles, navigation
BodyIntersystem-ui, sans-serifAll body text, descriptions
MonoJetBrains MonomonospaceCode, metrics, counters

Inter is chosen for its wide language support, excellent readability at all sizes, and free availability via Google Fonts. A more distinctive display font (e.g., Space Grotesk, Outfit, or Satoshi) can be explored later for branding differentiation.

Scale

LevelSizeWeightLine HeightUsage
Display32px / 2rem800 (ExtraBold)1.2Hero section, page titles
H124px / 1.5rem700 (Bold)1.3Section headers
H220px / 1.25rem600 (SemiBold)1.3Card group titles
H316px / 1rem600 (SemiBold)1.4Sub-sections
Body14px / 0.875rem400 (Regular)1.6Descriptions, instructions
Small12px / 0.75rem500 (Medium)1.4Labels, metadata, badges
Micro10px / 0.625rem600 (SemiBold)1.2Tag icons, counters

Style Rules

  • Game titles: Bold, white, single-line with text-overflow ellipsis
  • Author names: Medium, muted color, clickable with underline on hover
  • Category labels: SemiBold, uppercase, letter-spacing 0.05em
  • Metric values: Mono font, tabular-nums for alignment

Shape Language

Border Radius

ElementRadiusCSS Variable
Game cards12px--radius-card
Buttons8px--radius-button
Inputs8px--radius-input
Badges / tags6px--radius-badge
Modal / dialog16px--radius-modal
Sidebar icons10px--radius-sidebar
Full pill9999px--radius-pill

Spacing Scale

Based on a 4px grid:

TokenValueUsage
xs4pxInline spacing, badge padding
sm8pxCard inner padding (tight)
md12pxDefault gap between elements
lg16pxCard padding, section gaps
xl24pxSection separation
2xl32pxPage-level padding
3xl48pxMajor section breaks

Visual Effects

Card Hover

Game cards are the primary interactive element. Their hover state should feel alive:

.game-card {
background: var(--surface-1);
border: 1px solid var(--border);
border-radius: var(--radius-card);
transition: all 0.2s ease-out;
}
.game-card:hover {
border-color: var(--border-hover);
transform: translateY(-4px);
box-shadow:
0 12px 24px rgba(0, 0, 0, 0.4),
0 0 0 1px rgba(124, 58, 237, 0.2);
}

Glow Effects

Featured or trending games get a subtle glow:

.game-card--featured::after {
content: '';
position: absolute;
inset: -1px;
border-radius: var(--radius-card);
background: var(--gradient-brand);
z-index: -1;
opacity: 0.4;
filter: blur(8px);
}

Glassmorphism (Modals, Overlays)

.modal {
background: rgba(19, 19, 26, 0.85);
backdrop-filter: blur(16px);
border: 1px solid rgba(255, 255, 255, 0.1);
}

Shadows

--shadow-card: 0 2px 8px rgba(0, 0, 0, 0.3);
--shadow-card-hover: 0 12px 24px rgba(0, 0, 0, 0.4);
--shadow-dropdown: 0 8px 24px rgba(0, 0, 0, 0.5);
--shadow-modal: 0 24px 48px rgba(0, 0, 0, 0.6);
--shadow-glow: 0 0 20px rgba(124, 58, 237, 0.3);

Animations

Timing & Easing

--ease-out: cubic-bezier(0.16, 1, 0.3, 1); /* snappy deceleration */
--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1); /* slight overshoot */
--ease-smooth: cubic-bezier(0.4, 0, 0.2, 1); /* standard */
--duration-fast: 150ms; /* hover, active states */
--duration-normal: 200ms; /* transitions, reveals */
--duration-slow: 300ms; /* modals, page transitions */

Interaction Feedback

InteractionTransformDurationEasing
Card hovertranslateY(-4px)200msease-out
Card activescale(0.98)100msease-out
Button hovertranslateY(-1px)150msease-out
Button activescale(0.97)100msease-out
Sidebar expandwidth: 64px → 220px200msease-out
Title fade-in (card hover)opacity: 0 → 1, translateY(4px → 0)200msease-out
Badge pulse (new game)scale(1 → 1.1 → 1)2s loopease-smooth

Page Transitions

/* Card grid stagger reveal */
.game-card:nth-child(n) {
animation: fadeInUp 300ms var(--ease-out) both;
animation-delay: calc(n * 30ms); /* cap at ~15 items */
}
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(12px); }
to { opacity: 1; transform: translateY(0); }
}

Badge / Tag Design

Tags appear as small icons in the top-left corner of game cards.

TagColorIconBackground
NewAmber #F59E0BSparkle / starrgba(245, 158, 11, 0.15)
TrendyCoral #FF6B6BFlame / trending arrowrgba(255, 107, 107, 0.15)
UpdatedCyan #22D3EERefresh arrowrgba(34, 211, 238, 0.15)
.badge {
position: absolute;
top: 8px;
left: 8px;
padding: 3px 6px;
border-radius: var(--radius-badge);
font-size: 10px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
backdrop-filter: blur(4px);
}

Like / Dislike

StateIconColor
DefaultOutline thumb up / thumb downMuted #71717A
LikedFilled thumb upNeon Lime #84CC16
DislikedFilled thumb downHot Coral #FF6B6B

Transition: 200ms scale bounce with --ease-spring easing.


Iconography

  • Style: Outlined, 1.5px stroke, rounded caps
  • Library: Lucide Icons (free, consistent, tree-shakeable)
  • Size: 20px default, 16px compact, 24px headers
  • Color: Inherits from text color (currentColor)

Responsive Surfaces

BreakpointNameBehavior
< 640pxMobileDark base, full-bleed cards, no glow effects (performance)
640-1024pxTabletReduced shadow intensity, simplified hover states
> 1024pxDesktopFull effects: glow, glassmorphism, hover transforms

Reduce motion: all animations respect prefers-reduced-motion: reduce.


Accessibility

RuleSpec
Text contrastWCAG AA minimum (4.5:1 for body, 3:1 for large text)
Interactive targets44px minimum tap area on mobile
Focus indicator2px solid #A78BFA with 2px offset
Color aloneNever the only indicator — always paired with icon or text
Motionprefers-reduced-motion disables all non-essential animation