SectionHeader
Section heading block with a numbered label, a two-part heading where the last word is accented in neon, and an optional subtitle. Supports left or center alignment.
<SectionHeader
number="02"
title="Choose your game"
subtitle="STAGE SELECT"
/><SectionHeader number="01" title="Choose your game" align="left" />
<SectionHeader number="02" title="Top players" align="center" />
<SectionHeader number="03" title="Stage select" subtitle="WORLD MAP" align="left" />
import { cn } from '@/lib/utils'
interface SectionHeaderProps {
number: string
title: string
subtitle?: string
align?: 'left' | 'center'
className?: string
}
const ALIGN_CLASSES: Record<NonNullable<SectionHeaderProps['align']>, string> = {
left: 'text-left',
center: 'text-center',
}
export function SectionHeader({
number,
title,
subtitle,
align = 'left',
className,
}: SectionHeaderProps): React.JSX.Element {
return (
<div className={cn('mb-12', ALIGN_CLASSES[align], className)}>
<div className="section-header-label">
{number}{subtitle ? ` · ${subtitle.toUpperCase()}` : ''}
</div>
<h2 className="section-header-title">
{title.split(' ').map((word, i, arr) =>
i === arr.length - 1 ? (
<span key={i} className="section-header-title-accent">
{word}
</span>
) : (
<span key={i}>{word} </span>
),
)}
</h2>
</div>
)
}
Button
Arcade-styled button with neon green, magenta, cyan, and yellow variants in three sizes. Renders as a Next.js Link when an href is provided.
Badge
Neon-glow badge with magenta, cyan, yellow, and green color variants. Used for category tags and status labels in the arcade aesthetic.
Card
Game-card component with neon-colored icon, tag, title, description, and a five-star rating display. Supports a "coming soon" locked overlay state.
PixelCharacter
SVG pixel-art sprite with three variants: hero (neon green), ghost (magenta), and coin (yellow). Supports a CSS float animation and configurable size.
ScoreBoard
High-scores leaderboard that renders as a table on desktop and as stacked cards on mobile. Highlights ranks 1-3 with distinct neon color classes.
StatBlock
Single-stat display with a large pixel-font value in neon cyan and a label below. Wrapped in a pixel-border container for the arcade aesthetic.
Text
Polymorphic text primitive with body, caption, label, and code variants styled for the RETRO dark arcade palette.