import Image from "next/image"; import SiteLayout from "@/pages/components/SiteLayout"; const s = { page: { maxWidth: "1100px", margin: "0 auto", padding: "64px 32px 96px", } as React.CSSProperties, hero: { marginBottom: "56px", textAlign: "center" as const, } as React.CSSProperties, eyebrow: { display: "block", fontSize: "0.75rem", fontWeight: 700, letterSpacing: "0.18em", textTransform: "uppercase" as const, color: "#c0392b", marginBottom: "16px", } as React.CSSProperties, h1: { fontFamily: "'Georgia', 'Times New Roman', serif", fontSize: "clamp(2.4rem, 6vw, 4rem)", fontWeight: 700, color: "#e8dcc8", lineHeight: 1.1, marginBottom: "20px", } as React.CSSProperties, heroSub: { fontSize: "1.05rem", color: "#9e9080", maxWidth: "520px", margin: "0 auto", lineHeight: 1.7, } as React.CSSProperties, grid: { display: "grid", gridTemplateColumns: "repeat(auto-fill, minmax(280px, 1fr))", gap: "24px", marginBottom: "40px", } as React.CSSProperties, card: { background: "rgba(15, 8, 24, 0.82)", border: "1px solid rgba(180,140,255,0.18)", borderRadius: "6px", overflow: "hidden" as const, transition: "border-color 0.2s, transform 0.2s", } as React.CSSProperties, cardImage: { position: "relative" as const, aspectRatio: "2/3", width: "100%", background: "#06030f", overflow: "hidden" as const, } as React.CSSProperties, cardImagePlaceholder: { position: "absolute" as const, inset: 0, display: "flex", alignItems: "center", justifyContent: "center", fontSize: "4rem", opacity: 0.12, } as React.CSSProperties, cardBody: { padding: "20px 22px 24px", } as React.CSSProperties, cardName: { fontFamily: "'Georgia', 'Times New Roman', serif", fontSize: "1.2rem", fontWeight: 700, color: "#e8dcc8", marginBottom: "4px", } as React.CSSProperties, cardRole: { fontSize: "0.72rem", fontWeight: 700, letterSpacing: "0.14em", textTransform: "uppercase" as const, color: "#c0392b", marginBottom: "12px", } as React.CSSProperties, cardDesc: { fontSize: "0.88rem", color: "#9e9080", lineHeight: 1.7, } as React.CSSProperties, credit: { textAlign: "center" as const, fontSize: "0.8rem", color: "#9e9080", opacity: 0.55, marginTop: "8px", letterSpacing: "0.04em", } as React.CSSProperties, }; const CHARACTERS = [ { image: null, emoji: "ðŸĶī", name: "Bone Lord Bob", role: "The Protagonist", desc: "A man cursed to walk between worlds — carrying the weight of the dead and the rage of the living. He answers to no one.", }, { image: "/character-cat.jpg", imageAlt: "Character — ???", emoji: "ðŸū", name: "???", role: "Coming Soon", desc: "A creature that shouldn't exist — and yet here it is, collar and all. Whatever side it's on, it has teeth.", }, { image: "/character-bookie.jpg", imageAlt: "Character — ???", emoji: "📖", name: "???", role: "Coming Soon", desc: "Knowledge is power in the Bone Kingdom. This one has both — and charges accordingly. The ledger is always open.", }, { image: null, emoji: "ðŸ”Ĩ", name: "???", role: "Coming Soon", desc: "A figure from the oldest part of the war. Their allegiance changes everything.", }, { image: null, emoji: "⚔ïļ", name: "???", role: "Coming Soon", desc: "Every legend needs its foil. Every bone lord needs someone willing to break them.", }, { image: null, emoji: "🌑", name: "???", role: "Coming Soon", desc: "Some figures are felt before they are seen. This one you feel first.", }, ]; export default function Characters() { return (
{/* Hero */}
Characters

The Cast

Every soul in this world has a price. Meet the ones who pay it.

{/* Grid */}
{CHARACTERS.map((c, i) => (
{/* Art panel */}
{c.image ? ( {c.imageAlt ) : (
{c.emoji}
)}
{/* Info */}
{c.name}
{c.role}

{c.desc}

))}

Character art by Aaron Pressey

); }