UX principles
Cardinal design rules - what we always do, what we never do. Codified here so every design decision is repeatable.
Never translateY on hover/active
Hover state: change fill, opacity, scale (1.05), shadow.
Hover state: `transform: translateY(-2px)` - element jumps, cheap promo vibe.
Never emoji in UI
Linear icons from lucide-react: <Star />, <Ticket />, <Calendar />.
Emoji on buttons, badges, headings: ⚽ 🎟️ 📅.
No currency symbols
EUR 250, PLN 1200, GBP 199 - always currency code.
€250, zł1200, £199 - symbols are visually inconsistent.
Prices always integer
EUR 250 (rounded).
EUR 249.99 - cheap e-commerce vibe.
Semantic icons
<Lock /> on secured payments, <ShieldCheck /> on entry guarantee.
<Sparkles /> everywhere. Decorative "magic" icons without meaning.
Never duplicate components
One <Button /> with variants. One <Card />. One scrolling rail (LeagueSlider).
Three different button components with minor-logic differences in three places.