// Landing page sections for YumVille. All styles inline + scoped via classNames // to avoid collisions. Relies on window.P, CardFace, CardBack, avatars. var { useState, useEffect, useRef } = React; var P = window.P; var { CardFace, CardBack, ChefAvatar, BearAvatar, FoxAvatar, OwlAvatar } = window; // Shared tiny components --------------------------------------------------- function Stamp({ children, rot = -3, color = P.red }) { return ( {children} ); } function Eyebrow({ children }) { return (
{children}
); } function SectionTitle({ eyebrow, title, sub, inverted }) { return (
{eyebrow}

{title}

{sub && (

{sub}

)}
); } function Btn({ children, variant = 'primary', icon }) { const styles = { primary: { bg: P.red, fg: P.cream, border: P.brown, shadow: P.brown }, secondary: { bg: P.cream, fg: P.brown, border: P.brown, shadow: P.brown }, ghost: { bg: 'transparent', fg: P.cream, border: P.cream, shadow: P.cream }, }[variant]; return ( ); } // Chunky pill for tags function Pill({ children, bg = P.cream, fg = P.brown }) { return ( {children} ); } // Large wordmark with pizza slice replacing the V function Wordmark({ size = 1 }) { const s = size; return (
YUM {/* Giant V made of pizza slice */} {/* cheese drip */} {/* pepperoni */} {/* basil */} ILLE
); } // HERO --------------------------------------------------------------------- function Hero() { const [hoverCard, setHoverCard] = useState(null); const heroCards = [ { kind: 'flour', x: -340, y: 40, rot: -18, z: 2 }, { kind: 'sauce', x: -180, y: -10, rot: -8, z: 3 }, { kind: 'professionalOven', x: 0, y: -40, rot: 0, z: 5 }, { kind: 'familyFeast', x: 160, y: -10, rot: 8, z: 4 }, { kind: 'jokerChef', x: 320, y: 40, rot: 18, z: 3 }, ]; return (
{/* tiling checker backdrop behind wordmark */}
{/* nav */} {/* bg emoji-ish flourishes */}
{/* headline */}
Aile Kart Oyunu 2–4 Oyuncu 30 Dakika

Malzemeleri topla, hamuru yoğur, rakiplerine küf at ve mahalleyi pizza imparatorluğuna çevir.

Oyuna Başla Kural Kitabı
{/* hero card fan */}
{heroCards.map((c) => { const isHover = hoverCard === c.kind; return (
setHoverCard(c.kind)} onMouseLeave={() => setHoverCard(null)} style={{ position: 'absolute', left: '50%', bottom: 0, transform: `translate(calc(-50% + ${c.x}px), ${c.y - (isHover ? 30 : 0)}px) rotate(${c.rot}deg) scale(${isHover ? 1.1 : 1})`, transformOrigin: 'bottom center', zIndex: isHover ? 20 : c.z, transition: 'transform .35s cubic-bezier(.2,.8,.2,1)', filter: `drop-shadow(0 18px 24px ${P.brown}55)`, cursor: 'pointer', }} >
); })}
{/* stat strip */}
{[ ['128', 'toplam kart'], ['20', 'farklı kart türü'], ['4', 'faz · her tur'], ['8', 'pizza · ödül havuzu'], ].map(([n, l]) => (
{n}
{l}
))}
); } // Inline card back for decorative background function CardBackInline({ variant = 'red' }) { const c = variant === 'mixed' ? { a: P.orange, c: P.green } : { a: P.red, c: P.yellow }; const pid = `bgpat-${variant}`; return ( ); } Object.assign(window, { Hero, SectionTitle, Eyebrow, Stamp, Btn, Pill });