export default function CharacterBackdrop({ character }) {
if (!character) return null; // No motif when no character is selected — let the screen's own background carry it
const char = character.toUpperCase();
return (
{char === "BOLT" && }
{char === "ZARA" && }
{char === "NOVA" && }
{char === "BEEP" && }
{char === "ECHO" && }
{char === "MIRA" && }
);
}
// ---------- BOLT: starfield + radar scan pings + shooting stars ----------
function BoltBackdrop() {
const stars = Array.from({ length: 22 }, (_, i) => ({
x: (i * 43) % 100, y: (i * 79) % 100, size: 2 + (i % 3) * 1.5,
}));
const scans = [
{ x: 15, y: 20, size: 140 }, { x: 82, y: 30, size: 170 },
{ x: 25, y: 78, size: 160 }, { x: 78, y: 82, size: 130 },
];
const shootingStars = [
{ top: 10, dur: 6, delay: 0 },
{ top: 45, dur: 8, delay: 3 },
{ top: 70, dur: 7, delay: 5.5 },
];
return (
{stars.map((s, i) => (
))}
{scans.map((sc, i) => (
))}
{shootingStars.map((sh, i) => (
))}
);
}
// ---------- ZARA: bold glowing star sparkles ----------
function ZaraBackdrop() {
const starPath = "M12 0 L14.6 8.5 L23 9.3 L16.5 14.8 L18.7 23 L12 18.1 L5.3 23 L7.5 14.8 L1 9.3 L9.4 8.5 Z";
const sparkles = [
{ x: 6, y: 10, s: 26 }, { x: 88, y: 15, s: 20 }, { x: 20, y: 75, s: 24 },
{ x: 78, y: 70, s: 32 }, { x: 45, y: 22, s: 18 }, { x: 60, y: 88, s: 22 },
{ x: 12, y: 45, s: 19 }, { x: 92, y: 50, s: 24 }, { x: 35, y: 60, s: 16 },
{ x: 68, y: 35, s: 21 }, { x: 30, y: 12, s: 15 }, { x: 5, y: 60, s: 18 },
{ x: 95, y: 85, s: 20 }, { x: 55, y: 5, s: 17 }, { x: 15, y: 90, s: 22 },
{ x: 82, y: 40, s: 15 },
];
return (
{sparkles.map((sp, i) => (
))}
);
}
// ---------- NOVA: falling leaves, drift + sway + rotate ----------
function NovaBackdrop() {
const leafPath = "M10 0 C16 4, 20 12, 10 22 C0 12, 4 4, 10 0 Z M10 5 L10 20";
const leaves = [
{ x: 5, size: 20, dur: 11, delay: 0, sway: 30 },
{ x: 18, size: 15, dur: 9, delay: 1.5, sway: 22 },
{ x: 32, size: 22, dur: 13, delay: 3, sway: 35 },
{ x: 48, size: 17, dur: 10, delay: 0.8, sway: 25 },
{ x: 62, size: 19, dur: 12, delay: 4.2, sway: 28 },
{ x: 76, size: 16, dur: 8.5, delay: 2.1, sway: 20 },
{ x: 88, size: 21, dur: 11.5, delay: 5, sway: 32 },
{ x: 95, size: 14, dur: 9.5, delay: 3.6, sway: 18 },
];
return (
{leaves.map((l, i) => (
))}
);
}
// ---------- BEEP: bold bouncing glowing dot blips ----------
function BeepBackdrop() {
const dots = Array.from({ length: 24 }, (_, i) => ({
x: (i * 43) % 100, y: (i * 89) % 100, size: 7 + (i % 3) * 4,
}));
return (
{dots.map((d, i) => (
))}
);
}
// ---------- ECHO: bold, random glitchy scan-lines + fragments ----------
function EchoBackdrop() {
const fragments = Array.from({ length: 16 }, (_, i) => ({
x: (i * 61) % 100, y: (i * 137) % 100, w: 25 + (i % 4) * 25,
dur: 1.2 + (i % 5) * 0.5, delay: (i * 0.37) % 3,
}));
return (
{fragments.map((f, i) => (
))}
);
}
// ---------- MIRA: bubbles + swimming fish ----------
function MiraBackdrop() {
const bubbles = Array.from({ length: 16 }, (_, i) => ({
x: (i * 61) % 100, size: 10 + (i % 4) * 7, dur: 7 + (i % 5) * 1.6, delay: i * 0.7,
}));
const fishPath = "M0 8 C4 0, 16 0, 22 8 C16 16, 4 16, 0 8 Z M22 8 L28 3 L28 13 Z";
const fish = [
{ y: 15, size: 34, dur: 22, delay: 0, dir: 1 },
{ y: 38, size: 26, dur: 17, delay: 4, dir: -1 },
{ y: 60, size: 40, dur: 26, delay: 8, dir: 1 },
{ y: 78, size: 22, dur: 15, delay: 2, dir: -1 },
];
return (
{bubbles.map((b, i) => (
))}
{fish.map((f, i) => (
))}
);
}