{"asset_map": {"card_flip_sound": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/sounds/effect/card_flip_sound_433542a4-1ae0-49df-9d7e-b5a668146ea3.mp3", "type": "audio", "prompt": "A quick, clean card flip sound effect. A soft 'swish' or 'flick' of heavy paper or cardboard. Light, airy, and responsive with a bright, playful cartoon aesthetic. High-quality, non-intrusive, designed for frequent repetition in a casual UI.", "description": "A light, satisfying paper flip sound for card interactions.", "subtype": "effect", "aspect_ratio": null, "compression_suggestion": "original", "duration_secs": 0.42, "loop": false, "animation": null}, "match_success_sound": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/sounds/effect/match_success_sound_866f212b-544a-4a9c-bca5-6ef068af24a0.mp3", "type": "audio", "prompt": "A cheerful and rewarding success sound effect. Bright digital chimes with a magical sparkle or 'bling' texture. Uplifting major-key tone, anime-style game feedback, clear and satisfying. High-frequency clarity with a short, shimmering tail.", "description": "A bright, celebratory chime for successful card matches.", "subtype": "effect", "aspect_ratio": null, "compression_suggestion": "original", "duration_secs": 1.26, "loop": false, "animation": null}, "match_fail_sound": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/sounds/effect/match_fail_sound_5c8c5509-ace6-420e-844d-0a9c28314eb2.mp3", "type": "audio", "prompt": "A gentle, comical mismatch sound effect. A soft descending 'boop' or a hollow wooden 'bonk' with a playful cartoon feel. Not harsh or punishing, slightly bouncy, indicating a friendly 'try again' feedback.", "description": "A soft, playful mismatch sound when cards don't match.", "subtype": "effect", "aspect_ratio": null, "compression_suggestion": "original", "duration_secs": 0.93, "loop": false, "animation": null}, "barbie_bg_dreamhouse": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/barbie_bg_dreamhouse_8a71b586-b459-474c-be4d-156eb2952d73.webp", "type": "image", "prompt": "Generate a high-quality, 9:16 tall background image of a glamorous Barbie Dreamhouse balcony. The scene should be filled with a vibrant dollhouse aesthetic, featuring soft pink furniture, chic decor, and a view of a sunny, colorful world outside. Use a bright and polished art style with a pink-dominated color palette, clean lines, and a cheerful, sun-drenched atmosphere.", "description": "A vibrant and glamorous pink Barbie Dreamhouse balcony background for the game scene.", "subtype": "background", "aspect_ratio": [1024, 1536], "compression_suggestion": "original", "duration_secs": null, "loop": null, "animation": null}, "barbie_card_back": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/barbie_card_back_5d487a7e-7ba4-46bb-86e5-301a6c99b5f6.webp", "type": "image", "prompt": "Generate a game-ready memory card back design featuring a vibrant pink palette. In the center, a stylized, elegant 'B' logo inside a sparkling heart silhouette. The design should have a polished dollhouse aesthetic with glitter effects, clean lines, and high contrast. Professional quality UI asset, centered composition, high resolution, transparent background around the card edges.", "description": "A stylish pink Barbie-themed card back with a heart logo and glitter effects.", "subtype": "ui", "aspect_ratio": [902, 1192], "compression_suggestion": "low", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_classic": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_classic_ea636b1d-3d0d-43d7-8d2c-e1b69260a694.webp", "type": "image", "prompt": "Generate a full-body, front-facing chibi Barbie character illustration. She is wearing her classic pink dress and a pink bow in her blonde hair. Design features large expressive eyes, a cute smile, and a polished, vibrant art style. High resolution, professional quality game asset on a solid white background, matching the cute aesthetic of the existing chibi collection.", "description": "Adorable chibi Barbie in a classic pink dress for a memory card front", "subtype": "character", "aspect_ratio": [912, 1496], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_ken_beach": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_ken_beach_1306adcf-8c8d-4ff3-ab66-5e36b4409112.webp", "type": "image", "prompt": "Generate a full-body, front-view chibi Ken character for a memory card. He is wearing colorful beach swim trunks and stylish sunglasses, with blonde hair and a friendly, charming smile. Use a polished, vibrant art style with large expressive eyes and clean lines, matching the aesthetic of image 1. High resolution, professional quality game asset on a solid white background.", "description": "An adorable chibi Ken character in beach attire for a memory card front, matching the Barbie style.", "subtype": "character", "aspect_ratio": [565, 1192], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_doctor": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_doctor_cdda1be5-264c-4441-9a96-1629d0b97e23.webp", "type": "image", "prompt": "Generate a full-body, front-view adorable chibi Barbie character dressed as a doctor. She wears a professional white medical coat over a fashionable pink outfit and has a stethoscope around her neck. Large expressive eyes, friendly smile, blonde hair, clean and polished art style, vibrant colors, high resolution, on a transparent background. Match the artistic style and character proportions of image 1.", "description": "An adorable chibi Barbie doctor character for a memory card front, matching the existing Barbie style.", "subtype": "character", "aspect_ratio": [761, 1248], "compression_suggestion": "low", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_astronaut": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_astronaut_ade3b79c-0b0f-44f8-bfc5-ab917a3f05ef.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie character. She is wearing a stylish pink and white astronaut space suit and holding a small space helmet under her arm. She has a starry-eyed, enthusiastic expression with large expressive eyes and blonde hair. High quality, vibrant colors, polished dollhouse aesthetic, matching the style of image 1. Transparent background.", "description": "An adorable chibi Barbie in a pink and white space suit for a memory card front", "subtype": "character", "aspect_ratio": [764, 1199], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_mermaid": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_mermaid_f6553a4f-1b9c-4c75-96e1-d3d5a166db27.webp", "type": "image", "prompt": "Generate a full-body, front-view illustration of an adorable chibi Barbie as a mermaid. She has a shimmering pink and purple iridescent tail, long flowing blonde hair adorned with tiny seashells and a pink starfish clip. Large expressive eyes, a cute smile, and a polished, vibrant art style. High resolution, professional quality game asset on a solid white background, matching the art style of chibi_barbie_classic.", "description": "An adorable chibi Barbie mermaid character for a memory card front", "subtype": "character", "aspect_ratio": [736, 1191], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_princess": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_princess_8318b191-0349-4eb7-87bd-483fa6e9bc6a.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie as a princess. She is wearing a grand, sparkling pink ballroom gown and a glittering silver tiara. Large expressive eyes, cute smile, blonde hair. Clean lines, vibrant colors, polished professional game art style, transparent background. Match the artistic style of image 1.", "description": "Adorable chibi Barbie princess in a pink gown for a memory card front", "subtype": "character", "aspect_ratio": [794, 1248], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_skipper_casual": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_skipper_casual_0cccc5f7-7e97-4f62-98d0-404ea3e35533.webp", "type": "image", "prompt": "Generate a full-body, front-view illustration of an adorable chibi Skipper (Barbie's sister). She has dark hair with a distinct streak of purple, wearing a cool and casual modern outfit. Big expressive eyes, a friendly smile, matching the polished art style and proportions of image 1 and image 2. High resolution, professional quality game asset, transparent background.", "description": "Adorable chibi Skipper character for a memory card front, matching the Barbie collection style.", "subtype": "character", "aspect_ratio": [652, 1225], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_teresa_fashion": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_teresa_fashion_906040d5-d10d-46a8-a04b-c940d0164624.webp", "type": "image", "prompt": "Generate a full-body, front-view illustration of an adorable chibi Teresa (Barbie's friend). She has long brunette hair and is wearing a trendy, stylish floral fashion outfit. Large expressive eyes, a cute friendly smile, high-quality digital art, polished game-ready asset. The character should have a clean silhouette against a solid white background to ensure easy transparency, matching the art style of image 1 and image 2.", "description": "Adorable chibi Teresa (Barbie's friend) in a trendy floral fashion outfit for a memory card front.", "subtype": "character", "aspect_ratio": [692, 1208], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_nikki_glam": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_nikki_glam_a64fb17f-9981-4130-a646-952b2fd16329.webp", "type": "image", "prompt": "Generate a full-body, front-view adorable chibi Nikki (Barbie's friend) standing illustration. She has beautiful dark hair and is wearing a glamorous purple and gold outfit. Large expressive eyes, cute smile, polished and vibrant art style, clean lines, high resolution, white background, matching the art style of image 1 and image 2.", "description": "An adorable chibi Nikki character in a purple and gold outfit for a memory card front", "subtype": "character", "aspect_ratio": [740, 1233], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_chelsea_cute": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_chelsea_cute_ecfd2208-ed8d-4a78-9f1d-5f999561a5c0.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Chelsea (Barbie's youngest sister). She should be the smallest of the characters, wearing a cute outfit with a unicorn print. Featuring large expressive eyes, a sweet smile, and light brown hair. Professional quality, clean polished game art style matching the aesthetic of image 1 and image 2. Transparent background, high resolution.", "description": "Adorable chibi Chelsea, Barbie's youngest sister, in a unicorn-print outfit for a memory card front.", "subtype": "character", "aspect_ratio": [691, 1229], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_ken_formal": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_ken_formal_d5bcff19-b490-4a48-af37-fd46a776636c.webp", "type": "image", "prompt": "Generate a full-body, front-view illustration of an adorable chibi Ken character wearing a stylish pink and white tuxedo. He should have a dashing yet cute appearance, blonde hair, large expressive eyes, and a friendly smile. The art style should be polished and vibrant, matching the existing chibi Barbie collection. White background, high resolution, professional quality, standing illustration.", "description": "Adorable chibi Ken character in a formal pink and white tuxedo for the memory card front.", "subtype": "character", "aspect_ratio": [574, 1231], "compression_suggestion": "high", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_rockstar": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_rockstar_b7a877f7-e03e-40b9-a7a8-a46e61c0bfca.webp", "type": "image", "prompt": "Generate a full-body, front-facing chibi Barbie character as a rockstar. She is wearing a glittery pink and silver outfit and holding a stylish pink electric guitar. The character should have large expressive eyes, a cute smile, and long blonde hair with glitter highlights. High quality, polished game asset style, vibrant colors, clean lines, standing illustration on a transparent background.", "description": "An adorable chibi Barbie rockstar with a pink guitar for a memory card front", "subtype": "character", "aspect_ratio": [768, 1188], "compression_suggestion": "high", "duration_secs": null, "loop": null, "animation": null}, "barbie_victory_fanfare": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/sounds/effect/barbie_victory_fanfare_d2ef4fb1-9e1f-47be-9618-f0e7c70cca4d.mp3", "type": "audio", "prompt": "A 5-second, one-shot upbeat pop fanfare for a victory screen. High-energy, feminine, and triumphant aesthetic. Features shimmering glockenspiel, bright bells, a bubbly synth bassline, and a celebratory major-key melody. 128 BPM, polished modern production, sparkling textures, ends on a resolute and shimmering final chord. No vocals, instrumental only.", "description": "Short, sparkly, and upbeat pop music fanfare for a Barbie-themed victory.", "subtype": "music", "aspect_ratio": null, "compression_suggestion": "original", "duration_secs": 5.0, "loop": false, "animation": null}, "chibi_barbie_chef": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_chef_c6912ae2-4c6b-48c6-951b-c59242aba1f3.webp", "type": "image", "prompt": "Generate a full-body, front-facing chibi Barbie chef wearing a cute pink apron and a tall white chef's hat (toque). The character should have large expressive eyes, a bright smile, and a polished, colorful aesthetic. Maintain the exact artistic style, proportions, and line work seen in chibi_barbie_classic. Professional game asset quality, high resolution, transparent background.", "description": "An adorable chibi Barbie chef in a pink apron and white toque for a memory card front.", "subtype": "character", "aspect_ratio": [679, 1243], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_pilot": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_pilot_d9d7f713-1b0c-4784-bf1a-7d512fe7c5d8.webp", "type": "image", "prompt": "Generate a full-body, front-view illustration of an adorable chibi Barbie pilot wearing a stylish pink and navy blue flight suit and a matching pilot cap. Large expressive eyes, cute and polished art style, vibrant colors. The design should perfectly match the artistic style of image 1. High resolution, professional quality game asset, transparent background.", "description": "An adorable chibi Barbie pilot in a pink and navy flight suit for a memory card front.", "subtype": "character", "aspect_ratio": [925, 1521], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_ballerina": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_ballerina_a4710d47-d015-4f8a-87f7-08b9d01df5f3.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie ballerina wearing a sparkling pink tutu and ballet slippers. Large expressive eyes, cute and polished art style, clean lines, vibrant colors. Match the artistic style and character design of image 1. Transparent background, high resolution, professional game asset.", "description": "An adorable chibi Barbie ballerina in a pink tutu for a memory card front.", "subtype": "character", "aspect_ratio": [760, 1245], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_vet": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_vet_7a13b3b3-10bc-470c-90b2-4ecb4d0cf107.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie veterinarian holding a small cute puppy. She is wearing a stylish pink scrub top with a stethoscope around her neck. Use the specific chibi art style from image 1: large expressive eyes, vibrant and polished colors, and a cute aesthetic. High resolution, professional game asset, clean lines, transparent background.", "description": "An adorable chibi Barbie veterinarian with a cute puppy for a memory card front, matching the existing Barbie style.", "subtype": "character", "aspect_ratio": [767, 1244], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_teacher": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_teacher_5d3d5e95-b395-4968-a90e-abc6406291bf.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie character dressed as a teacher, holding a small book and wearing stylish pink glasses. The character should have large, expressive eyes and a polished, cute aesthetic. Ensure the style, proportions, and vibrant pink color palette perfectly match image 1. Transparent background, high resolution, professional game asset quality.", "description": "Adorable chibi Barbie teacher with a book and glasses for a memory card front.", "subtype": "character", "aspect_ratio": [761, 1248], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_firefighter": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_firefighter_079bae8d-38b7-4c90-817b-73c1f1daf5cd.webp", "type": "image", "prompt": "Generate an adorable chibi Barbie firefighter character for a game card. She is wearing professional firefighter gear with stylish pink trims and accents, including a matching helmet. Full body, standing illustration, front-facing. The style is cute, colorful, and polished with large expressive eyes, exactly matching the art style of image 1. Transparent background, high resolution, professional quality.", "description": "An adorable chibi Barbie firefighter in pink-trimmed gear for a memory card front, matching the existing collection style.", "subtype": "character", "aspect_ratio": [760, 1244], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_police": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_police_1d330c64-a4d6-42fa-ae81-3d5db6bb4179.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie police officer. She is wearing a stylish, stylized pink and dark blue police uniform with a cute cap. The style must be cute, colorful, and polished with large expressive eyes, matching the aesthetic of image 1. High resolution, professional game asset quality, transparent background.", "description": "An adorable chibi Barbie police officer for a memory card front, matching the pink-themed collection style.", "subtype": "character", "aspect_ratio": [759, 1248], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_artist": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_artist_06a15f41-640a-4af7-9f6b-385f928b22c0.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie artist. She is wearing a stylish pink beret and holding a colorful paint palette and brush. The character should have large, expressive eyes and a cheerful expression. The art style must be cute, colorful, and polished, perfectly matching the existing Barbie chibi collection in image 1. High resolution, professional quality game asset on a transparent background.", "description": "An adorable chibi Barbie artist with a palette and beret for a memory card front.", "subtype": "character", "aspect_ratio": [747, 1248], "compression_suggestion": "high", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_scientist": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_scientist_7cfbe88f-643c-4215-b227-e714403489ad.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie scientist. She is wearing a professional white lab coat over a pink outfit and holding a bubbling pink beaker. The style must be cute, colorful, and polished, featuring large expressive eyes and a soft cel-shaded look. Match the character design and artistic style of chibi_barbie_classic. Transparent background, high resolution, game-ready asset.", "description": "An adorable chibi Barbie scientist for a memory card front", "subtype": "character", "aspect_ratio": [760, 1246], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_popstar": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_popstar_2730d86d-fc0a-4cc3-b3c8-5a337737189f.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie popstar holding a sparkling pink microphone. She should be wearing a glittery, fashionable stage outfit in shades of pink and silver. The style must be cute, colorful, and polished, featuring large expressive eyes and soft shading to match the artistic style of chibi_barbie_classic. High resolution, professional game asset, transparent background.", "description": "An adorable chibi Barbie popstar with a sparkling microphone for a memory card front, matching the Barbie collection style.", "subtype": "character", "aspect_ratio": [763, 1248], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_bride": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_bride_d67c0d4d-9134-4cda-9c55-a0d9d8b2532d.webp", "type": "image", "prompt": "Generate a full-body, front-view illustration of an adorable chibi Barbie bride wearing a beautiful, sparkling white and pink wedding gown and a delicate veil. The style must perfectly match the existing Barbie chibi collection: cute, colorful, polished, with large expressive eyes and a friendly smile. Professional quality game asset, high resolution, clean lines, transparent background. Reference the artistic style and character proportions from chibi_barbie_classic.", "description": "An adorable chibi Barbie bride in a wedding gown for a memory card front", "subtype": "character", "aspect_ratio": [794, 1211], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_yoga": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_yoga_ac9c4c3f-0004-48e8-a443-589735687f68.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie in a cute pink and pastel purple yoga outfit, performing a simple yoga pose. The character should have large, expressive eyes and a polished, high-quality finish. The style must perfectly match image 1, featuring clean lines and a vibrant, glamorous aesthetic. Professional game asset, transparent background, high resolution.", "description": "An adorable chibi Barbie in a yoga pose for the memory card front, matching the classic chibi style.", "subtype": "character", "aspect_ratio": [761, 1240], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_winter": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_winter_b0e6c65b-fedf-4b40-9db1-3910d19752f0.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie wearing a cozy pink winter coat with faux-fur trim and matching earmuffs. The style must be cute, colorful, and polished, featuring large expressive eyes and a sweet smile, perfectly matching the artistic style of chibi_barbie_classic. High resolution, professional game asset, clean lines, transparent background.", "description": "Adorable chibi Barbie in a cozy pink winter coat and earmuffs for a memory card front", "subtype": "character", "aspect_ratio": [758, 1246], "compression_suggestion": "high", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_safari": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_safari_154cfdd4-c277-4584-8c67-fe7875366587.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie wearing a stylish khaki safari outfit, complete with a small camera around her neck and a matching safari hat. The style must be a high-quality, polished game asset with large expressive eyes, matching the cute and colorful aesthetic of image 1. Full body picture, standing illustration, clean lines, professional quality, transparent background.", "description": "An adorable chibi Barbie in a safari outfit for a memory card front.", "subtype": "character", "aspect_ratio": [874, 1518], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_fairy": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_fairy_50ab63f7-cff2-4108-9636-67e890947d9d.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie fairy with shimmering, translucent gossamer wings. She is wearing a magical pink floral outfit. The style must be cute, colorful, and polished with large expressive eyes, matching the aesthetic of chibi_barbie_classic. High resolution, professional game asset, transparent background, bright and cheerful lighting.", "description": "An adorable chibi Barbie fairy with shimmering wings for a memory card front, matching the game's toy-themed aesthetic.", "subtype": "character", "aspect_ratio": [770, 1192], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_superhero": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_superhero_3a86c938-4247-41a8-a98e-334b786914d6.webp", "type": "image", "prompt": "Generate a full-body standing illustration of an adorable chibi Barbie superhero. She is wearing a stylish pink superhero suit, a flowing pink cape, and a matching eye mask. The style is cute, colorful, and polished with large expressive eyes, matching the aesthetic of chibi_barbie_classic. High resolution, professional game asset, front-facing, transparent background.", "description": "An adorable chibi Barbie superhero in a pink cape and mask for a memory card front.", "subtype": "character", "aspect_ratio": [759, 1240], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_skater": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_skater_1ae3469f-d919-49ba-9243-36bb5becbb70.webp", "type": "image", "prompt": "Generate a full-body, front-view illustration of an adorable chibi Barbie skater character holding a pink skateboard. She has large expressive eyes, a cute smile, and is wearing a trendy skating outfit in shades of pink and white. Polished, colorful game-ready asset in the exact style of image 1. High resolution, professional quality, transparent background.", "description": "An adorable chibi Barbie skater with a pink skateboard for a memory card front, matching the classic Barbie style.", "subtype": "character", "aspect_ratio": [762, 1243], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_surfer": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_surfer_25467632-7c80-4d15-86b9-b63c4f620e17.webp", "type": "image", "prompt": "Generate an adorable chibi Barbie surfer character holding a stylish floral surfboard. She should have large expressive eyes, a cute smile, and wear a colorful beach outfit. The style must be polished, vibrant, and match the existing chibi collection in image 1. Full-body standing illustration, front-facing, clean edges, transparent background, high resolution, professional game asset quality.", "description": "An adorable chibi Barbie surfer with a floral surfboard for a memory card front, matching the pink aesthetic and chibi style.", "subtype": "character", "aspect_ratio": [691, 1248], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_detective": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_detective_94cf13f4-6d35-4620-9db1-38807cf9f24b.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie detective. She is wearing a stylish pink trench coat and a matching deerstalker hat, holding a magnifying glass. The style must be cute, colorful, and polished with large expressive eyes, matching the aesthetic of image 1. High resolution, professional game asset quality, transparent background.", "description": "An adorable chibi Barbie detective for a memory card front, following the established character style.", "subtype": "character", "aspect_ratio": [760, 1237], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_beekeeper": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_beekeeper_ef4b6600-5968-4a08-b6f9-7fe0e588c7d5.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie beekeeper. She is wearing a cute white beekeeping suit with pink accents and a mesh veil, holding a small honey jar. The style must be polished and colorful with large expressive eyes, matching the chibi aesthetic of image 1. High resolution, professional quality, game-ready character asset on a transparent background.", "description": "An adorable chibi Barbie beekeeper for a memory card front", "subtype": "character", "aspect_ratio": [669, 1237], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_farmer": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_farmer_cccfe28f-770c-4b64-9253-25603cdd7047.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie farmer. She is wearing a cute straw hat and carrying a small basket of colorful flowers. The style is highly polished, vibrant, and cute, featuring large expressive eyes and a sweet smile. Ensure the character design perfectly matches the art style of image 1. High resolution, professional game asset quality, transparent background.", "description": "An adorable chibi Barbie farmer for a memory card front, matching the Barbie collection style.", "subtype": "character", "aspect_ratio": [827, 1242], "compression_suggestion": "high", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_gamer": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_gamer_dbb31428-9b1d-4f6a-82b2-15c90a51c517.webp", "type": "image", "prompt": "Generate a full-body, front-view illustration of an adorable chibi Barbie gamer. She is wearing stylish pink gaming headphones and holding a video game controller. The character should have large, expressive sparkling eyes, a cute smile, and a polished, high-quality aesthetic. The style must perfectly match the existing collection in image 1, featuring vibrant pink tones and soft shading. Standing pose, transparent background, game-ready asset.", "description": "An adorable chibi Barbie gamer with pink headphones and a controller for a memory card front.", "subtype": "character", "aspect_ratio": [773, 1241], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_tennis": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_tennis_dec80279-f45e-4663-9527-b84ec72ee26a.webp", "type": "image", "prompt": "Generate a full-body, front-facing chibi Barbie character dressed as a tennis player, holding a tennis racket. She should have large expressive eyes and a cute, polished look. Use a vibrant pink and white color palette to match the style of image 1. High resolution, professional game asset, transparent background, standing illustration.", "description": "An adorable chibi Barbie tennis player with a racket for a memory card front.", "subtype": "character", "aspect_ratio": [792, 1219], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_soccer": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_soccer_7ea3cc4c-afd7-48e8-b2b7-8e22761da6ca.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie as a soccer player. She is wearing a stylish pink and white soccer jersey, matching shorts, and tall socks. She is holding a soccer ball under one arm or has it at her feet. The style must be cute, colorful, and polished, featuring large expressive eyes, consistent with the aesthetic of image 1. High resolution, professional game asset, transparent background.", "description": "An adorable chibi Barbie soccer player in a pink jersey for a memory card front.", "subtype": "character", "aspect_ratio": [746, 1229], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_ken_pilot": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_ken_pilot_acaff3f5-1261-4a91-af21-e2bf336455f2.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Ken character dressed as a pilot in a stylish navy and pink flight suit. The character should have large, expressive eyes and a friendly smile, matching the cute and polished art style of image 1. High resolution, professional quality game asset, transparent background, front view.", "description": "An adorable chibi Ken pilot character in a flight suit for a memory card front, matching the Barbie collection style.", "subtype": "character", "aspect_ratio": [541, 1200], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_ken_chef": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_ken_chef_240cf515-3c34-45b1-883d-2a17a837155f.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Ken character dressed as a chef. He is holding a spatula, wearing a clean white chef's coat with pink accents and a tall chef's hat. The style must be cute, colorful, and polished, featuring large expressive eyes and a friendly smile to match the aesthetic of image 1. High resolution, professional game asset quality, transparent background.", "description": "An adorable chibi Ken chef for a memory card front, matching the Barbie collection style.", "subtype": "character", "aspect_ratio": [688, 1246], "compression_suggestion": "high", "duration_secs": null, "loop": null, "animation": null}, "chibi_ken_doctor": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_ken_doctor_ef885600-cd09-46cf-bc9f-5735f84d7d96.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Ken character dressed as a doctor in a white medical coat with pink accents. The style should be cute, colorful, and polished, featuring large expressive eyes and a friendly smile. Ensure the character design perfectly matches the artistic style of image 1. Transparent background, high resolution, professional game asset quality.", "description": "An adorable chibi Ken doctor character for a memory card front, matching the Barbie collection style.", "subtype": "character", "aspect_ratio": [615, 1199], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_ken_astronaut": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_ken_astronaut_10364d73-4ac5-4378-ac8b-a28272c75852.webp", "type": "image", "prompt": "Generate a full-body picture of an adorable chibi Ken character dressed as an astronaut, wearing a sleek white space suit with stylish pink accents and a clear visor. The style is cute, colorful, and polished, featuring large expressive eyes and a friendly smile. Front-facing standing illustration, professional quality, high resolution, transparent background. Match the artistic style, proportions, and lighting of chibi_barbie_classic.", "description": "An adorable chibi Ken astronaut in a pink-accented space suit for a memory card front.", "subtype": "character", "aspect_ratio": [645, 1169], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_ken_surfer": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_ken_surfer_832fee65-d1dc-473a-9b91-d3a63389a095.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Ken character as a surfer. He is holding a stylish blue and pink surfboard. The style is cute, colorful, and polished with large expressive eyes, matching the aesthetic of image 1. High resolution, professional game asset, clean lines, transparent background.", "description": "An adorable chibi Ken surfer with a blue and pink surfboard for the memory card front.", "subtype": "character", "aspect_ratio": [699, 1196], "compression_suggestion": "high", "duration_secs": null, "loop": null, "animation": null}, "chibi_ken_skater": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_ken_skater_d983c0be-209f-412a-aef5-31d08019e9a5.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Ken skater. He should be holding a cool skateboard and wearing a stylish, casual skater outfit with pink and blue accents. The art style must be cute, colorful, and polished, featuring large expressive eyes and clean lines to match the style of image 1. High resolution, professional game asset, transparent background.", "description": "An adorable chibi Ken skater character for a memory card front, matching the Barbie collection style.", "subtype": "character", "aspect_ratio": [656, 1244], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_ken_firefighter": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_ken_firefighter_37e8fe03-c56c-4396-bc28-66f31bcc97d9.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Ken character dressed as a firefighter. He is wearing a firefighter uniform with pink and yellow reflective accents and a helmet. The style must be cute, colorful, and polished with large expressive eyes, matching the aesthetic of image 1. High resolution, professional quality game asset, standing pose, transparent background.", "description": "An adorable chibi Ken firefighter for a memory card front, matching the Barbie collection style.", "subtype": "character", "aspect_ratio": [630, 1235], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_ken_farmer": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_ken_farmer_261bf554-89e8-4c1a-923a-31abd97106f5.webp", "type": "image", "prompt": "Generate an adorable chibi Ken character dressed as a farmer in denim overalls and a plaid shirt, standing illustration, full body, front-facing. Large expressive eyes, cute and polished art style, matching the aesthetic of image 1. High resolution, professional quality game asset, transparent background.", "description": "An adorable chibi Ken farmer character for a memory card front.", "subtype": "character", "aspect_ratio": [772, 1199], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_ken_popstar": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_ken_popstar_92029023-4968-4def-aaeb-92239b196574.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Ken character as a popstar, holding a stylish guitar. The style must be cute, colorful, and polished with large expressive eyes, matching the aesthetic of image 1. Ken should have a trendy outfit with pink and blue accents, high resolution, professional game asset quality, transparent background.", "description": "An adorable chibi Ken popstar with a guitar for a memory card front, matching the Barbie collection style.", "subtype": "character", "aspect_ratio": [710, 1246], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_midge_retro": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_midge_retro_b5b03812-e2b7-4bd6-a223-07e6823f72ed.webp", "type": "image", "prompt": "Generate a full-body, front-facing chibi illustration of the character Midge in a 60s retro fashion outfit, featuring vintage patterns and a classic hairstyle. The style must be cute, colorful, and polished with large expressive eyes, matching the aesthetic of image 1. High resolution, professional quality, standing illustration on a transparent background.", "description": "An adorable chibi Midge in a 60s retro outfit for a memory card front, matching the Barbie collection style.", "subtype": "character", "aspect_ratio": [761, 1248], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_teresa_beach": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_teresa_beach_6beba787-40b9-4c73-9de3-2f701cba856a.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Teresa (Barbie's friend) wearing cute beachwear. The character should have large expressive eyes, a warm skin tone, and brown hair. The style must be cute, colorful, and polished, matching the specific chibi aesthetic of image 1. High resolution, professional quality game asset on a transparent background.", "description": "An adorable chibi Teresa character in beachwear for a memory card front, matching the Barbie collection style.", "subtype": "character", "aspect_ratio": [674, 1248], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_nikki_casual": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_nikki_casual_796f9bf2-6aa2-4955-88fc-648f38d65d40.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Nikki character (Barbie's friend) in a cute casual fashion outfit. The character should have large, expressive eyes, a warm smile, and a polished, colorful aesthetic. Match the art style, proportions, and shading of image 1. High resolution, professional game asset, clean lines, transparent background.", "description": "An adorable chibi Nikki character in casual fashion for a memory card front, matching the Barbie collection style.", "subtype": "character", "aspect_ratio": [710, 1246], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_christie_chic": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_christie_chic_8f2f1465-22bd-46d4-8502-c2bed121d495.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Christie (Barbie's friend) in a chic, fashionable outfit. The character should have large, expressive eyes and a polished, cute aesthetic. Ensure the art style, coloring, and proportions match the existing chibi_barbie_classic. High resolution, professional digital art, transparent background.", "description": "An adorable chibi Christie character in a chic fashion outfit for a memory card front, matching the Barbie collection style.", "subtype": "character", "aspect_ratio": [761, 1248], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_raquelle_glam": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_raquelle_glam_28bec754-54a8-4820-9913-77e549e15ed1.webp", "type": "image", "prompt": "Generate a full-body picture, standing illustration of an adorable chibi Raquelle character wearing a glamorous purple dress. The character should have large expressive eyes and a polished, cute aesthetic. Ensure the art style, proportions, and coloring match the Barbie chibi collection seen in image 1. High resolution, professional quality, transparent background, front-facing character.", "description": "An adorable chibi Raquelle character in a glamorous purple dress for a memory card front.", "subtype": "character", "aspect_ratio": [730, 1219], "compression_suggestion": "high", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_cowgirl": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_cowgirl_17a7e41a-dca1-4da4-ba6f-39a9169fb6ff.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie cowgirl. She is wearing a stylish pink cowboy hat, a denim vest over a pink shirt, and matching pink cowgirl boots. The style is cute, colorful, and highly polished with large expressive eyes, matching the aesthetic of image 1. High resolution, professional game asset, transparent background.", "description": "An adorable chibi Barbie cowgirl with a pink hat and boots for a memory card front.", "subtype": "character", "aspect_ratio": [761, 1242], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_gardener": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_gardener_81dbb378-f346-4458-8856-bcbbdbb3233e.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie as a gardener holding a cute watering can. She should have large expressive eyes, a friendly smile, and wear a stylish pink gardening outfit with a sun hat. The art style must be cute, colorful, and polished, perfectly matching the aesthetic of image 1. High resolution, professional game asset, transparent background.", "description": "An adorable chibi Barbie gardener with a watering can for a memory card front.", "subtype": "character", "aspect_ratio": [768, 1171], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_gymnast": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_gymnast_f816c23e-9e73-42cd-9352-3bdd27139122.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie as a gymnast. She is holding a long, swirling pink rhythmic gymnastics ribbon. She has large expressive eyes, a cheerful smile, and is wearing a sparkling pink and purple leotard. The style must be cute, colorful, and polished with clean lines, matching the existing chibi art style of image 1. High resolution, professional quality, transparent background.", "description": "An adorable chibi Barbie gymnast with a rhythmic gymnastics ribbon for a memory card front.", "subtype": "character", "aspect_ratio": [766, 1130], "compression_suggestion": "high", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_boxer": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_boxer_84bd0836-c667-405c-b09e-814f1463feb3.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie as a boxer. She is wearing bright pink boxing gloves and a cute pink and white athletic outfit. The style must be cute, colorful, and polished, featuring large expressive eyes, matching the established Barbie chibi collection. High resolution, professional quality game asset on a transparent background, inspired by the art style of chibi_barbie_classic.", "description": "An adorable chibi Barbie boxer with pink gloves for a memory card front.", "subtype": "character", "aspect_ratio": [771, 1150], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_racer": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_racer_4eabf509-8599-4816-8505-4cdd69f7e342.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie as a race car driver. She is wearing a professional pink and white racing suit with a small helmet tucked under her arm. The style must be cute, colorful, and polished, featuring large expressive eyes and a sweet smile, perfectly matching the artistic style of image 1. High resolution, professional quality game asset on a transparent background.", "description": "An adorable chibi Barbie race car driver in a pink racing suit for a memory card front.", "subtype": "character", "aspect_ratio": [770, 1195], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_vlogger": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_vlogger_2443959a-1a92-4d81-8c36-48f9de1ddf85.webp", "type": "image", "prompt": "Generate a full-body picture, standing illustration of an adorable chibi Barbie vlogger. She is holding a vlog camera on a small tripod and standing in front of a ring light. The character should have large expressive eyes, a fashionable pink and white outfit, and a polished look. Match the art style of image 1 with clean lines and vibrant colors. Front-facing view, transparent background, high resolution, professional game asset quality.", "description": "An adorable chibi Barbie vlogger character with a camera setup for a memory card front.", "subtype": "character", "aspect_ratio": [646, 1034], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_birthday": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_birthday_36018492-ed79-4c29-8acf-f1a2291ab7d5.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie in a vibrant pink birthday party dress, holding a small birthday cake with a candle. The style must be cute, colorful, and polished, featuring large expressive eyes, matching the established look of chibi_barbie_classic. High resolution, professional quality game asset, transparent background.", "description": "Adorable chibi Barbie in a birthday party dress holding a cake for a memory card front", "subtype": "character", "aspect_ratio": [761, 1248], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_pajama": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_pajama_59edcf4e-a02e-410c-b091-803cc1da4dee.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie wearing cute pink pajamas and holding a small teddy bear. The character should have large expressive eyes and a polished, colorful aesthetic matching the style of chibi_barbie_classic. High-quality game asset, vibrant colors, clean lines, transparent background.", "description": "An adorable chibi Barbie in pink pajamas with a teddy bear for a memory card front.", "subtype": "character", "aspect_ratio": [760, 1248], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_hiker": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_hiker_bd523fc2-de11-4fd2-b4b8-f6f9bd71a830.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie hiker. She is wearing a stylish pink hiking outfit, sturdy boots, and carrying a small, detailed backpack. The character should have large, expressive eyes and a cheerful expression, matching the cute, polished, and colorful art style of chibi_barbie_classic. High resolution, professional game asset quality, transparent background.", "description": "An adorable chibi Barbie hiker with a backpack for a memory card front.", "subtype": "character", "aspect_ratio": [871, 1486], "compression_suggestion": "medium", "duration_secs": null, "loop": null, "animation": null}, "chibi_barbie_lifeguard": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/chibi_barbie_lifeguard_ec166004-bd42-4d74-81c7-fe9d1496c996.webp", "type": "image", "prompt": "Generate a full-body, front-facing illustration of an adorable chibi Barbie lifeguard holding a red rescue buoy. She is wearing a stylish red and pink lifeguard swimsuit with a whistle. The style must be cute, colorful, and polished with large expressive eyes, perfectly matching the aesthetic of image 1. High resolution, professional game asset, clean lines, transparent background.", "description": "An adorable chibi Barbie lifeguard for a memory card front, matching the pink and polished art style.", "subtype": "character", "aspect_ratio": [753, 1241], "compression_suggestion": "high", "duration_secs": null, "loop": null, "animation": null}, "barbie_background_music": {"url": "https://d2oir5eh8rty2e.cloudfront.net/assets/sounds/effect/barbie_background_music_2fccb823-2306-46f5-ae31-1973af86ac63.mp3", "type": "audio", "prompt": "An upbeat, bubbly, and happy pop-style background music track, 120-128 BPM, C Major. Features bright bubblegum synths, a steady danceable four-on-the-floor beat, and a magical sparkly atmosphere with glockenspiel accents. Catchy, family-friendly, high-energy, and polished. Think modern doll-brand aesthetics with a clean, glossy production. Instrumental only, designed to loop seamlessly without vocals.", "description": "Upbeat, bubbly, and sparkly pop background theme for the main gameplay.", "subtype": "music", "aspect_ratio": null, "compression_suggestion": "original", "duration_secs": 30.0, "loop": true, "animation": null}}, "game_code": "<!DOCTYPE html>\n<html>\n<head>\n    <title>Chibi Barbie Dream Memory</title>\n    <link href=\"https://fonts.googleapis.com/css2?family=Quicksand:wght@400;700&display=swap\" rel=\"stylesheet\">\n    <style>\n        /* CSS Reset and Base Styles */\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n        body, html {\n            width: 100%;\n            height: 100%;\n            overflow: hidden;\n            touch-action: none;\n            -ms-touch-action: none;\n            font-family: 'Quicksand', system-ui;\n        }\n        :root {\n            --transition-fast: 150ms;\n            --transition-normal: 300ms;\n            --transition-slow: 500ms;\n            --ease-out: cubic-bezier(0.0, 0, 0.2, 1);\n            --ease-bounce: cubic-bezier(0.68, -0.6, 0.32, 1.6);\n            --space-xs: 8px;\n            --space-sm: 16px;\n            --space-md: 24px;\n            --space-lg: 32px;\n            --space-xl: 48px;\n            \n            --color-primary: #E91E63;\n            --color-secondary: #F06292;\n            --color-accent: #FF80AB;\n            --color-success: #4CAF50;\n            --color-bg-dark: rgba(0, 0, 0, 0.7);\n            --color-text-light: #FFFFFF;\n            --color-text-dark: #880E4F;\n            --color-gold: #FFD54F;\n            --color-pink-light: #FCE4EC;\n            --color-pink-dark: #C2185B;\n        }\n\n        /* Floating Animation */\n        @keyframes floating {\n            0% { transform: translateY(0px); }\n            50% { transform: translateY(-10px); }\n            100% { transform: translateY(0px); }\n        }\n\n        @keyframes sparkle-anim {\n            0% { transform: scale(0) rotate(0deg); opacity: 1; }\n            100% { transform: scale(1.5) rotate(180deg); opacity: 0; }\n        }\n\n        /* Game World */\n        #game-world {\n            position: relative;\n            width: 100%;\n            height: 100%;\n            background-color: var(--color-pink-light);\n            overflow: hidden;\n        }\n\n        /* Background Layer */\n        .background-layer {\n            position: absolute;\n            width: 100%;\n            height: 100%;\n            background-size: cover;\n            background-position: center;\n        }\n\n        /* Canvas */\n        #game-canvas {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n        }\n\n        /* UI Overlay */\n        .ui-overlay {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            pointer-events: none;\n            z-index: 10;\n        }\n\n        .ui-overlay > * {\n            pointer-events: auto;\n        }\n\n        /* HUD Container */\n        .hud-container {\n            position: absolute;\n            top: var(--space-sm);\n            left: 0;\n            right: 0;\n            display: flex;\n            justify-content: center;\n            pointer-events: none;\n            z-index: 20;\n        }\n\n        /* HUD Panel */\n        .hud-panel {\n            background: linear-gradient(135deg, var(--color-pink-dark) 0%, var(--color-primary) 100%);\n            border: 4px solid #FFFFFF;\n            border-radius: 25px;\n            padding: 12px 32px;\n            box-shadow: 0 6px 15px rgba(233, 30, 99, 0.4);\n            display: flex;\n            flex-direction: row;\n            align-items: center;\n            gap: 40px;\n            pointer-events: auto;\n            animation: floating 3s ease-in-out infinite;\n        }\n\n        .hud-item {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            gap: 4px;\n        }\n\n        .hud-label {\n            font-family: 'Quicksand', sans-serif;\n            font-size: 20px;\n            color: #FFFFFF;\n            font-weight: 700;\n            font-style: normal;\n            letter-spacing: 1px;\n            text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);\n        }\n\n        .hud-value {\n            font-family: 'Quicksand', sans-serif;\n            font-weight: 700;\n            font-size: 52px;\n            color: #FFFFFF;\n            font-style: normal;\n            text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);\n            min-width: 60px;\n            text-align: center;\n            line-height: 1;\n        }\n\n\n        /* Victory Modal */\n        .victory-backdrop {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: rgba(0, 0, 0, 0.7);\n            z-index: 99;\n        }\n\n        .victory-modal {\n            position: absolute;\n            top: 50%;\n            left: 50%;\n            transform: translate(-50%, -50%);\n            background: linear-gradient(135deg, var(--color-pink-light) 0%, #FFFFFF 100%);\n            border: 8px solid var(--color-accent);\n            border-radius: 40px;\n            padding: var(--space-md);\n            box-shadow: 0 0 0 6px rgba(255, 255, 255, 0.5), 0 10px 40px rgba(233, 30, 99, 0.4);\n            text-align: center;\n            min-width: 340px;\n            max-width: 85%;\n            max-height: 80%;\n            overflow-y: auto;\n            z-index: 100;\n        }\n\n        .victory-title {\n            font-family: 'Quicksand', sans-serif;\n            font-size: 32px;\n            color: var(--color-pink-dark);\n            font-weight: 700;\n            font-style: normal;\n            text-shadow: 2px 2px 0px rgba(255, 255, 255, 0.8);\n            margin-bottom: var(--space-xs);\n            white-space: nowrap;\n            overflow: visible;\n        }\n\n        .victory-stats {\n            margin: var(--space-xs) 0;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n        }\n\n        .victory-stat {\n            font-family: 'Quicksand', sans-serif;\n            font-weight: 700;\n            font-size: 22px;\n            color: var(--color-pink-dark);\n            font-style: normal;\n            margin: 4px 0;\n        }\n\n        #final-score {\n            font-size: 64px;\n            color: var(--color-primary);\n            display: block;\n            margin: 5px 0;\n            text-shadow: 3px 3px 0px rgba(0, 0, 0, 0.05);\n            line-height: 1;\n        }\n\n        .victory-button {\n            font-family: 'Quicksand', sans-serif;\n            font-weight: 700;\n            background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-pink-dark) 100%);\n            color: var(--color-text-light);\n            font-size: 24px;\n            font-style: normal;\n            padding: 12px 32px;\n            border: 4px solid #FFFFFF;\n            border-radius: 50px;\n            cursor: pointer;\n            box-shadow: 0 4px 15px rgba(233, 30, 99, 0.4);\n            transition: transform var(--transition-fast) var(--ease-out);\n            margin-top: var(--space-sm);\n            min-width: 220px;\n            min-height: 80px;\n            display: inline-flex;\n            align-items: center;\n            justify-content: center;\n        }\n\n        .victory-button:hover {\n            transform: scale(1.05);\n        }\n\n        .victory-button:active {\n            transform: scale(0.95);\n        }\n\n        /* Leaderboard Styles */\n        .leaderboard-container {\n            margin: var(--space-md) 0;\n            padding: var(--space-sm);\n            background: rgba(233, 30, 99, 0.15);\n            border-radius: 20px;\n            border: 3px solid var(--color-accent);\n            max-width: 100%;\n        }\n\n        .leaderboard-title {\n            font-family: 'Quicksand', sans-serif;\n            font-size: 24px;\n            color: var(--color-pink-dark);\n            font-weight: 700;\n            font-style: normal;\n            text-shadow: 2px 2px 0px rgba(255, 255, 255, 0.8);\n            margin-bottom: var(--space-sm);\n            text-align: center;\n        }\n\n        .leaderboard-list {\n            display: flex;\n            flex-direction: column;\n            gap: 8px;\n        }\n\n        .leaderboard-entry {\n            display: flex;\n            align-items: center;\n            gap: 12px;\n            background: rgba(255, 255, 255, 0.5);\n            padding: 8px 12px;\n            border-radius: 12px;\n            border: 2px solid var(--color-accent);\n            transition: transform 0.2s ease;\n        }\n\n        .leaderboard-entry:hover {\n            transform: translateX(5px);\n        }\n\n        .leaderboard-entry.current-player {\n            background: rgba(255, 215, 0, 0.3);\n            border-color: var(--color-gold);\n            box-shadow: 0 0 15px rgba(255, 215, 0, 0.5);\n            border-width: 3px;\n        }\n\n        .leaderboard-rank {\n            font-family: 'Quicksand', sans-serif;\n            font-size: 22px;\n            color: var(--color-pink-dark);\n            font-weight: 700;\n            font-style: normal;\n            text-shadow: 1px 1px 2px rgba(255, 255, 255, 0.8);\n            min-width: 35px;\n            text-align: center;\n        }\n\n        .leaderboard-avatar {\n            width: 40px;\n            height: 40px;\n            border-radius: 50%;\n            border: 2px solid var(--color-primary);\n            object-fit: cover;\n            background: var(--color-pink-light);\n        }\n\n        .leaderboard-info {\n            flex: 1;\n            display: flex;\n            flex-direction: column;\n            gap: 2px;\n            min-width: 0;\n        }\n\n        .leaderboard-username {\n            font-family: 'Quicksand', sans-serif;\n            font-weight: 700;\n            font-size: 16px;\n            color: var(--color-pink-dark);\n            font-style: normal;\n            white-space: nowrap;\n            overflow: hidden;\n            text-overflow: ellipsis;\n        }\n\n        .leaderboard-score {\n            font-family: 'Quicksand', sans-serif;\n            font-weight: 700;\n            font-size: 20px;\n            color: var(--color-primary);\n            font-style: normal;\n        }\n\n        /* Hidden class */\n        .hidden {\n            display: none !important;\n        }\n\n        /* Animations */\n        @keyframes pulse {\n            0%, 100% { transform: scale(1); }\n            50% { transform: scale(1.05); }\n        }\n\n        @keyframes shake {\n            0%, 100% { transform: translateX(0); }\n            25% { transform: translateX(-5px); }\n            75% { transform: translateX(5px); }\n        }\n\n        @keyframes bounce {\n            0%, 100% { transform: translateY(0); }\n            50% { transform: translateY(-20px); }\n        }\n\n        /* Loading Screen */\n        #loading-screen {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: radial-gradient(circle, var(--color-pink-light) 0%, var(--color-accent) 100%);\n            display: flex;\n            flex-direction: column;\n            justify-content: center;\n            align-items: center;\n            z-index: 1000;\n            transition: opacity var(--transition-slow) var(--ease-out);\n        }\n\n        .loading-content {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            text-align: center;\n        }\n\n        .loading-logo {\n            width: 180px;\n            height: 180px;\n            margin-bottom: var(--space-md);\n            animation: bounce 2s infinite ease-in-out;\n            filter: drop-shadow(0 10px 15px rgba(233, 30, 99, 0.3));\n            object-fit: contain;\n        }\n\n        .loading-text {\n            font-family: 'Quicksand', sans-serif;\n            font-size: 56px;\n            color: var(--color-pink-dark);\n            font-weight: 700;\n            text-shadow: 2px 2px 0px #FFFFFF;\n            margin-bottom: var(--space-md);\n            letter-spacing: 2px;\n        }\n\n        .loading-bar-container {\n            width: 320px;\n            height: 24px;\n            background: rgba(255, 255, 255, 0.6);\n            border: 4px solid var(--color-primary);\n            border-radius: 12px;\n            overflow: hidden;\n            box-shadow: inset 0 2px 4px rgba(0,0,0,0.1);\n        }\n\n        .loading-bar-fill {\n            width: 0%;\n            height: 100%;\n            background: linear-gradient(90deg, var(--color-primary), var(--color-accent));\n            transition: width 0.2s ease-out;\n        }\n\n        @media (prefers-reduced-motion: reduce) {\n            * {\n                animation-duration: 0.01ms !important;\n                animation-iteration-count: 1 !important;\n                transition-duration: 0.01ms !important;\n            }\n        }\n    </style>\n</head>\n<body>\n        <div id=\"game-world\">\n        <div id=\"loading-screen\">\n            <div class=\"loading-content\">\n                <img id=\"loading-icon\" class=\"loading-logo\" src=\"\" alt=\"Barbie Logo\" style=\"display:none;\">\n                <div class=\"loading-text\">DREAMING BIG...</div>\n                <div class=\"loading-bar-container\">\n                    <div id=\"loading-bar-fill\" class=\"loading-bar-fill\"></div>\n                </div>\n            </div>\n        </div>\n        <div class=\"background-layer\"></div>\n        <canvas id=\"game-canvas\"></canvas>\n        \n        <div class=\"ui-overlay\">\n            <!-- HUD -->\n            <div class=\"hud-container\">\n                <div class=\"hud-panel\">\n                    <div class=\"hud-item\">\n                        <span class=\"hud-label\">LVL</span>\n                        <span class=\"hud-value\" id=\"level-display\">1</span>\n                    </div>\n                    <div class=\"hud-item\">\n                        <span class=\"hud-label\">SCORE</span>\n                        <span class=\"hud-value\" id=\"score-display\">0</span>\n                    </div>\n                    <div class=\"hud-item\" id=\"timer-panel\">\n                        <span class=\"hud-label\">TIME</span>\n                        <span class=\"hud-value\" id=\"timer-display\">120</span>\n                    </div>\n                </div>\n            </div>\n            \n            \n            <!-- Victory Modal -->\n            <div class=\"victory-backdrop hidden\" id=\"victory-backdrop\"></div>\n            <div class=\"victory-modal hidden\" id=\"victory-modal\">\n                <div class=\"victory-title\" id=\"victory-title\">\ud83d\udc96 DREAM VICTORY! \ud83d\udc96</div>\n                <div class=\"victory-stats\">\n                    <div class=\"victory-stat\" id=\"victory-message\">Level Completed!</div>\n                    <div class=\"victory-stat\"><span id=\"final-score\">0</span></div>\n                    <div class=\"victory-stat\" id=\"player-rank-display\"></div>\n                </div>\n                \n                <div class=\"leaderboard-container hidden\" id=\"leaderboard-container\">\n                    <div class=\"leaderboard-title\">\ud83c\udfc6 TOP DREAMERS \ud83c\udfc6</div>\n                    <div class=\"leaderboard-list\" id=\"leaderboard-list\"></div>\n                </div>\n                \n                <button class=\"victory-button\" id=\"next-level-btn\">STAY FABULOUS</button>\n            </div>\n        </div>\n    </div>\n\n    <script>\n        /**\n         * CHIBI BARBIE DREAM MEMORY\n         * \n         * A memory matching game featuring adorable chibi Barbie characters.\n         * Players flip cards to find matching pairs in the Dreamhouse.\n         */\n\n        async function run(mode) {\n            const gameWorld = document.getElementById('game-world');\n            const canvas = document.getElementById('game-canvas');\n            const ctx = canvas.getContext('2d');\n            const backgroundLayer = document.querySelector('.background-layer');\n\n            // Initialize display\n            let logicalWidth = 0;\n            let logicalHeight = 0;\n            function resizeCanvas() {\n                const dpr = window.devicePixelRatio || 1;\n                logicalWidth = gameWorld.clientWidth;\n                logicalHeight = gameWorld.clientHeight;\n                \n                canvas.width = logicalWidth * dpr;\n                canvas.height = logicalHeight * dpr;\n                canvas.style.width = logicalWidth + 'px';\n                canvas.style.height = logicalHeight + 'px';\n                \n                ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n                ctx.imageSmoothingEnabled = true;\n                ctx.imageSmoothingQuality = 'high';\n            }\n            resizeCanvas();\n            window.addEventListener('resize', resizeCanvas);\n\n            // Audio Context\n            const audioContext = new (window.AudioContext || window.webkitAudioContext)();\n            const audioBuffers = {};\n            let backgroundMusicSource = null;\n            let backgroundMusicGain = null;\n            let musicStarted = false;\n\n            // Asset Cache\n            const imageCache = {};\n            \n            // Particle System\n            let particles = [];\n            class Particle {\n                constructor(x, y, color) {\n                    this.x = x;\n                    this.y = y;\n                    this.vx = (Math.random() - 0.5) * 10;\n                    this.vy = (Math.random() - 0.5) * 10 - 5;\n                    this.life = 1.0;\n                    this.color = color;\n                    this.size = Math.random() * 8 + 4;\n                    this.angle = Math.random() * Math.PI * 2;\n                    this.va = (Math.random() - 0.5) * 0.2;\n                }\n                update(deltaTime) {\n                    this.x += this.vx;\n                    this.y += this.vy;\n                    this.vy += 0.2; // Gravity\n                    this.life -= deltaTime * 1.5;\n                    this.angle += this.va;\n                }\n                draw(ctx) {\n                    ctx.save();\n                    ctx.translate(this.x, this.y);\n                    ctx.rotate(this.angle);\n                    ctx.globalAlpha = this.life;\n                    ctx.fillStyle = this.color;\n                    // Draw a little star/diamond\n                    ctx.beginPath();\n                    ctx.moveTo(0, -this.size);\n                    ctx.lineTo(this.size, 0);\n                    ctx.lineTo(0, this.size);\n                    ctx.lineTo(-this.size, 0);\n                    ctx.closePath();\n                    ctx.fill();\n                    ctx.restore();\n                }\n            }\n\n            function spawnParticles(x, y, color = '#FF80AB') {\n                for (let i = 0; i < 20; i++) {\n                    particles.push(new Particle(x, y, color));\n                }\n            }\n\n            // Preload Assets\n            async function preloadAssets() {\n                const loadingScreen = document.getElementById('loading-screen');\n                const loadingBarFill = document.getElementById('loading-bar-fill');\n                const loadingIcon = document.getElementById('loading-icon');\n                \n                // Get the card back URL immediately for the loading screen logo\n                const cardBackInfo = lib.getAsset('barbie_card_back');\n                if (cardBackInfo) {\n                    loadingIcon.src = cardBackInfo.url;\n                    loadingIcon.style.display = 'block';\n                }\n\n                const assetIds = [\n                    'barbie_bg_dreamhouse',\n                    'barbie_card_back',\n                    'chibi_barbie_classic',\n                    'chibi_ken_beach',\n                    'chibi_barbie_doctor',\n                    'chibi_barbie_astronaut',\n                    'chibi_barbie_mermaid',\n                    'chibi_barbie_princess',\n                    'chibi_skipper_casual',\n                    'chibi_teresa_fashion',\n                    'chibi_nikki_glam',\n                    'chibi_chelsea_cute',\n                    'chibi_ken_formal',\n                    'chibi_barbie_rockstar',\n                    'chibi_barbie_chef',\n                    'chibi_barbie_pilot',\n                    'chibi_barbie_ballerina',\n                    'chibi_barbie_vet',\n                    'chibi_barbie_teacher',\n                    'chibi_barbie_firefighter',\n                    'chibi_barbie_police',\n                    'chibi_barbie_artist',\n                    'chibi_barbie_scientist',\n                    'chibi_barbie_popstar',\n                    'chibi_barbie_bride',\n                    'chibi_barbie_yoga',\n                    'chibi_barbie_winter',\n                    'chibi_barbie_safari',\n                    'chibi_barbie_fairy',\n                    'chibi_barbie_superhero',\n                    'chibi_barbie_skater',\n                    'chibi_barbie_surfer',\n                    'chibi_barbie_detective',\n                    'chibi_barbie_beekeeper',\n                    'chibi_barbie_farmer',\n                    'chibi_barbie_gamer',\n                    'chibi_barbie_tennis',\n                    'chibi_barbie_soccer',\n                    'chibi_ken_pilot',\n                    'chibi_ken_chef',\n                    'chibi_ken_doctor',\n                    'chibi_ken_astronaut',\n                    'chibi_ken_surfer',\n                    'chibi_ken_skater',\n                    'chibi_ken_firefighter',\n                    'chibi_ken_farmer',\n                    'chibi_ken_popstar',\n                    'chibi_midge_retro',\n                    'chibi_teresa_beach',\n                    'chibi_nikki_casual',\n                    'chibi_christie_chic',\n                    'chibi_raquelle_glam',\n                    'chibi_barbie_cowgirl',\n                    'chibi_barbie_gardener',\n                    'chibi_barbie_gymnast',\n                    'chibi_barbie_boxer',\n                    'chibi_barbie_racer',\n                    'chibi_barbie_vlogger',\n                    'chibi_barbie_birthday',\n                    'chibi_barbie_pajama',\n                    'chibi_barbie_hiker',\n                    'chibi_barbie_lifeguard',\n                    'card_flip_sound',\n                    'match_success_sound',\n                    'match_fail_sound',\n                    'barbie_victory_fanfare',\n                    'barbie_background_music'\n                ];\n\n                let loadedCount = 0;\n                const totalAssets = assetIds.length;\n\n                function updateProgress() {\n                    loadedCount++;\n                    const progress = (loadedCount / totalAssets) * 100;\n                    if (loadingBarFill) {\n                        loadingBarFill.style.width = progress + '%';\n                    }\n                }\n\n                const loadPromises = assetIds.map(id => {\n                    return new Promise((resolve) => {\n                        const assetInfo = lib.getAsset(id);\n                        if (!assetInfo) {\n                            updateProgress();\n                            resolve();\n                            return;\n                        }\n\n                        if (assetInfo.type === 'image') {\n                            const img = new Image();\n                            img.onload = () => {\n                                imageCache[id] = img;\n                                updateProgress();\n                                resolve();\n                            };\n                            img.onerror = () => {\n                                updateProgress();\n                                resolve();\n                            };\n                            img.src = assetInfo.url;\n                        } else if (assetInfo.type === 'audio') {\n                            fetch(assetInfo.url)\n                                .then(response => response.arrayBuffer())\n                                .then(arrayBuffer => audioContext.decodeAudioData(arrayBuffer))\n                                .then(audioBuffer => {\n                                    audioBuffers[id] = audioBuffer;\n                                    updateProgress();\n                                    resolve();\n                                })\n                                .catch(() => {\n                                    updateProgress();\n                                    resolve();\n                                });\n                        }\n                    });\n                });\n\n                await Promise.all(loadPromises);\n\n                // Set background\n                if (imageCache['barbie_bg_dreamhouse']) {\n                    backgroundLayer.style.backgroundImage = `url(${imageCache['barbie_bg_dreamhouse'].src})`;\n                }\n\n                // Start music if in play mode\n                if (mode === 'play') {\n                    // Browsers require a user interaction to start audio\n                    const startMusic = () => {\n                        if (!musicStarted) {\n                            playBackgroundMusic('barbie_background_music');\n                            musicStarted = true;\n                            window.removeEventListener('click', startMusic);\n                            window.removeEventListener('touchstart', startMusic);\n                        }\n                    };\n                    window.addEventListener('click', startMusic);\n                    window.addEventListener('touchstart', startMusic);\n                }\n\n                // Hide loading screen with a slight delay for smoothness\n                setTimeout(() => {\n                    if (loadingScreen) {\n                        loadingScreen.style.opacity = '0';\n                        setTimeout(() => {\n                            loadingScreen.style.display = 'none';\n                        }, 500);\n                    }\n                }, 500);\n            }\n\n            await preloadAssets();\n\n            // Play sound function\n            function playSound(assetId) {\n                if (!audioBuffers[assetId]) return;\n                \n                const source = audioContext.createBufferSource();\n                source.buffer = audioBuffers[assetId];\n                source.connect(audioContext.destination);\n                source.start(0);\n            }\n\n            function playBackgroundMusic(assetId) {\n                if (!audioBuffers[assetId]) return;\n                \n                // Stop previous music\n                if (backgroundMusicSource) {\n                    try {\n                        backgroundMusicSource.stop();\n                    } catch(e) {}\n                }\n\n                backgroundMusicSource = audioContext.createBufferSource();\n                backgroundMusicSource.buffer = audioBuffers[assetId];\n                backgroundMusicSource.loop = true;\n                \n                backgroundMusicGain = audioContext.createGain();\n                backgroundMusicGain.gain.value = 0.4; // Lower volume for background music\n                \n                backgroundMusicSource.connect(backgroundMusicGain);\n                backgroundMusicGain.connect(audioContext.destination);\n                \n                backgroundMusicSource.start(0);\n            }\n\n            // Character IDs\n            const characterIds = [\n                'chibi_barbie_classic',\n                'chibi_ken_beach',\n                'chibi_barbie_doctor',\n                'chibi_barbie_astronaut',\n                'chibi_barbie_mermaid',\n                'chibi_barbie_princess',\n                'chibi_skipper_casual',\n                'chibi_teresa_fashion',\n                'chibi_nikki_glam',\n                'chibi_chelsea_cute',\n                'chibi_ken_formal',\n                'chibi_barbie_rockstar',\n                'chibi_barbie_chef',\n                'chibi_barbie_pilot',\n                'chibi_barbie_ballerina',\n                'chibi_barbie_vet',\n                'chibi_barbie_teacher',\n                'chibi_barbie_firefighter',\n                'chibi_barbie_police',\n                'chibi_barbie_artist',\n                'chibi_barbie_scientist',\n                'chibi_barbie_popstar',\n                'chibi_barbie_bride',\n                'chibi_barbie_yoga',\n                'chibi_barbie_winter',\n                'chibi_barbie_safari',\n                'chibi_barbie_fairy',\n                'chibi_barbie_superhero',\n                'chibi_barbie_skater',\n                'chibi_barbie_surfer',\n                'chibi_barbie_detective',\n                'chibi_barbie_beekeeper',\n                'chibi_barbie_farmer',\n                'chibi_barbie_gamer',\n                'chibi_barbie_tennis',\n                'chibi_barbie_soccer',\n                'chibi_ken_pilot',\n                'chibi_ken_chef',\n                'chibi_ken_doctor',\n                'chibi_ken_astronaut',\n                'chibi_ken_surfer',\n                'chibi_ken_skater',\n                'chibi_ken_firefighter',\n                'chibi_ken_farmer',\n                'chibi_ken_popstar',\n                'chibi_midge_retro',\n                'chibi_teresa_beach',\n                'chibi_nikki_casual',\n                'chibi_christie_chic',\n                'chibi_raquelle_glam',\n                'chibi_barbie_cowgirl',\n                'chibi_barbie_gardener',\n                'chibi_barbie_gymnast',\n                'chibi_barbie_boxer',\n                'chibi_barbie_racer',\n                'chibi_barbie_vlogger',\n                'chibi_barbie_birthday',\n                'chibi_barbie_pajama',\n                'chibi_barbie_hiker',\n                'chibi_barbie_lifeguard'\n            ];\n\n            // Function to shuffle the character pool to ensure randomness \n            // while allowing us to pick unique characters for each level.\n            function shuffleCharacterPool() {\n                for (let i = characterIds.length - 1; i > 0; i--) {\n                    const j = Math.floor(Math.random() * (i + 1));\n                    [characterIds[i], characterIds[j]] = [characterIds[j], characterIds[i]];\n                }\n            }\n\n            // Shuffle at the start of the session\n            shuffleCharacterPool();\n\n            // Game State\n            let cards = [];\n            let flippedCards = [];\n            let matchedPairs = [];\n            let score = 0;\n            let timeLeft = 120;\n            let timerInterval = null;\n            let isProcessing = false;\n            let selectedCard = null;\n            let isGameOver = false;\n            let currentLevel = window.gameConfig.currentLevel || 1;\n\n            // UI Elements\n            const levelDisplay = document.getElementById('level-display');\n            const scoreDisplay = document.getElementById('score-display');\n            const timerDisplay = document.getElementById('timer-display');\n            const timerPanel = document.getElementById('timer-panel');\n            const victoryBackdrop = document.getElementById('victory-backdrop');\n            const victoryModal = document.getElementById('victory-modal');\n            const victoryTitle = document.getElementById('victory-title');\n            const victoryMessage = document.getElementById('victory-message');\n            const nextLevelBtn = document.getElementById('next-level-btn');\n            const finalScore = document.getElementById('final-score');\n            const playerRankDisplay = document.getElementById('player-rank-display');\n            const leaderboardContainer = document.getElementById('leaderboard-container');\n            const leaderboardList = document.getElementById('leaderboard-list');\n\n            // Card class\n            class Card {\n                constructor(characterId, pairIndex, x, y, size) {\n                    this.characterId = characterId;\n                    this.pairIndex = pairIndex;\n                    this.x = x;\n                    this.y = y;\n                    this.size = size;\n                    this.flipped = false;\n                    this.matched = false;\n                    this.flipProgress = 0;\n                    this.flipTarget = 0;\n                    this.scale = 1;\n                    this.shake = 0;\n                    this.alpha = 0;\n                    this.spawnDelay = 0;\n                }\n\n                update(deltaTime) {\n                    // Entrance animation\n                    if (this.spawnDelay > 0) {\n                        this.spawnDelay -= deltaTime;\n                        return;\n                    }\n                    if (this.alpha < 1) {\n                        this.alpha += deltaTime * 2;\n                        if (this.alpha > 1) this.alpha = 1;\n                    }\n\n                    // Flip animation\n                    const flipSpeed = 8;\n                    if (this.flipProgress < this.flipTarget) {\n                        this.flipProgress = Math.min(this.flipProgress + deltaTime * flipSpeed, this.flipTarget);\n                    } else if (this.flipProgress > this.flipTarget) {\n                        this.flipProgress = Math.max(this.flipProgress - deltaTime * flipSpeed, this.flipTarget);\n                    }\n\n                    // Scale animation\n                    if (this.scale !== 1) {\n                        this.scale += (1 - this.scale) * 0.1;\n                        if (Math.abs(this.scale - 1) < 0.01) this.scale = 1;\n                    }\n\n                    // Shake animation\n                    if (this.shake > 0) {\n                        this.shake -= deltaTime * 3;\n                        if (this.shake < 0) this.shake = 0;\n                    }\n                }\n\n                draw(ctx) {\n                    if (this.alpha <= 0) return;\n                    ctx.save();\n                    \n                    // Apply shake\n                    let shakeX = 0;\n                    if (this.shake > 0) {\n                        shakeX = Math.sin(this.shake * 50) * 5;\n                    }\n                    \n                    ctx.translate(this.x + this.size / 2 + shakeX, this.y + this.size / 2);\n                    ctx.scale(this.scale * this.alpha, this.scale * this.alpha);\n                    ctx.globalAlpha = this.alpha;\n                    \n                    // 3D flip effect\n                    const scaleX = Math.cos(this.flipProgress * Math.PI);\n                    ctx.scale(scaleX, 1);\n\n                    // Draw card\n                    const halfSize = this.size / 2;\n                    \n                    // Shadow\n                    ctx.shadowColor = 'rgba(0, 0, 0, 0.3)';\n                    ctx.shadowBlur = 10;\n                    ctx.shadowOffsetX = 0;\n                    ctx.shadowOffsetY = 4;\n\n                    // Card background\n                    ctx.fillStyle = '#FFF8DC';\n                    ctx.fillRect(-halfSize, -halfSize, this.size, this.size);\n                    \n                    ctx.shadowColor = 'transparent';\n\n                    // Border\n                    ctx.strokeStyle = '#FFFFFF';\n                    ctx.lineWidth = 4;\n                    ctx.strokeRect(-halfSize, -halfSize, this.size, this.size);\n\n                    // Draw content based on flip progress\n                    if (this.flipProgress < 0.5) {\n                        // Draw back\n                        this.drawBack(ctx, halfSize);\n                    } else {\n                        // Draw front\n                        this.drawFront(ctx, halfSize);\n                    }\n\n                    ctx.restore();\n                }\n\n                drawBack(ctx, halfSize) {\n                    if (imageCache['barbie_card_back']) {\n                        const img = imageCache['barbie_card_back'];\n                        const scale = 0.8;\n                        const drawSize = this.size * scale;\n                        \n                        const assetInfo = lib.getAsset('barbie_card_back');\n                        if (assetInfo && assetInfo.aspect_ratio) {\n                            const [aspectW, aspectH] = assetInfo.aspect_ratio;\n                            const aspectRatio = aspectW / aspectH;\n                            \n                            let drawWidth, drawHeight;\n                            if (aspectRatio > 1) {\n                                drawWidth = drawSize;\n                                drawHeight = drawSize / aspectRatio;\n                            } else {\n                                drawHeight = drawSize;\n                                drawWidth = drawSize * aspectRatio;\n                            }\n                            \n                            ctx.drawImage(\n                                img,\n                                -drawWidth / 2,\n                                -drawHeight / 2,\n                                drawWidth,\n                                drawHeight\n                            );\n                        } else {\n                            ctx.drawImage(\n                                img,\n                                -drawSize / 2,\n                                -drawSize / 2,\n                                drawSize,\n                                drawSize\n                            );\n                        }\n                    }\n                }\n\n                drawFront(ctx, halfSize) {\n                    if (imageCache[this.characterId]) {\n                        const img = imageCache[this.characterId];\n                        const assetInfo = lib.getAsset(this.characterId);\n                        \n                        if (assetInfo && assetInfo.aspect_ratio) {\n                            const [aspectW, aspectH] = assetInfo.aspect_ratio;\n                            const aspectRatio = aspectW / aspectH;\n                            \n                            const maxSize = this.size * 0.7;\n                            let drawWidth, drawHeight;\n                            \n                            if (aspectRatio > 1) {\n                                drawWidth = maxSize;\n                                drawHeight = maxSize / aspectRatio;\n                            } else {\n                                drawHeight = maxSize;\n                                drawWidth = maxSize * aspectRatio;\n                            }\n                            \n                            ctx.drawImage(\n                                img,\n                                -drawWidth / 2,\n                                -drawHeight / 2,\n                                drawWidth,\n                                drawHeight\n                            );\n                        } else {\n                            const drawSize = this.size * 0.7;\n                            ctx.drawImage(\n                                img,\n                                -drawSize / 2,\n                                -drawSize / 2,\n                                drawSize,\n                                drawSize\n                            );\n                        }\n                    }\n                }\n\n                flip() {\n                    this.flipTarget = this.flipped ? 1 : 0;\n                }\n\n                contains(x, y) {\n                    return x >= this.x && x <= this.x + this.size &&\n                           y >= this.y && y <= this.y + this.size;\n                }\n\n                pulse() {\n                    this.scale = 1.1;\n                }\n\n                shakeAnimation() {\n                    this.shake = 1;\n                }\n            }\n\n            // Initialize game\n            function initGame() {\n                // Clear previous state\n                cards = [];\n                flippedCards = [];\n                matchedPairs = [];\n                isProcessing = false;\n                selectedCard = null;\n                isGameOver = false;\n\n                // Update level display\n                if (levelDisplay) levelDisplay.textContent = currentLevel;\n\n                // Reset UI\n                if (scoreDisplay) scoreDisplay.textContent = score;\n                \n                // Calculate time for this level: 60 - (level-1)*5\n                timeLeft = Math.max(10, 120 - (currentLevel - 1) * 5);\n                if (timerDisplay) timerDisplay.textContent = timeLeft;\n\n                victoryBackdrop.classList.add('hidden');\n                victoryModal.classList.add('hidden');\n\n                // Timer visibility\n                if (window.gameConfig.timerEnabled) {\n                    timerPanel.classList.remove('hidden');\n                } else {\n                    timerPanel.classList.add('hidden');\n                }\n\n                // All levels are now a 3x4 grid with 6 pairs\n                const cols = 3;\n                const rows = 4;\n                const numPairs = 6;\n                \n                // Select 6 unique characters for this level from the pool of 60 characters.\n                // Using (currentLevel - 1) * 6 ensures that as you progress through 10 levels,\n                // you encounter a completely fresh set of pirates with no repeating images.\n                const startIndex = ((currentLevel - 1) * numPairs) % characterIds.length;\n                const selectedCharacters = characterIds.slice(startIndex, startIndex + numPairs);\n                \n                const cardData = [];\n                for (let i = 0; i < numPairs; i++) {\n                    cardData.push({ characterId: selectedCharacters[i], pairIndex: i });\n                    cardData.push({ characterId: selectedCharacters[i], pairIndex: i });\n                }\n\n                // Shuffle cards\n                for (let i = cardData.length - 1; i > 0; i--) {\n                    const j = Math.floor(Math.random() * (i + 1));\n                    [cardData[i], cardData[j]] = [cardData[j], cardData[i]];\n                }\n\n                // Calculate card size based on grid\n                const gap = 20; \n                const hudHeight = 140; \n                const bottomPadding = 40; \n                const sidePadding = 40;\n                \n                const availableWidth = logicalWidth - (sidePadding * 2); \n                const availableHeight = logicalHeight - hudHeight - bottomPadding;\n                \n                const cardWidth = (availableWidth - (cols - 1) * gap) / cols;\n                const cardHeight = (availableHeight - (rows - 1) * gap) / rows;\n                const cardSize = Math.min(cardWidth, cardHeight, 200); \n                \n                const gridWidth = cols * cardSize + (cols - 1) * gap;\n                const gridHeight = rows * cardSize + (rows - 1) * gap;\n                const startX = (logicalWidth - gridWidth) / 2;\n                const startY = hudHeight + (availableHeight - gridHeight) / 2;\n\n                // Create cards\n                let index = 0;\n                for (let row = 0; row < rows; row++) {\n                    for (let col = 0; col < cols; col++) {\n                        if (index < cardData.length) {\n                            const x = startX + col * (cardSize + gap);\n                            const y = startY + row * (cardSize + gap);\n                            const card = new Card(\n                                cardData[index].characterId,\n                                cardData[index].pairIndex,\n                                x,\n                                y,\n                                cardSize\n                            );\n                            card.spawnDelay = (col + row * cols) * 0.1;\n                            cards.push(card);\n                            index++;\n                        }\n                    }\n                }\n\n                // Start timer\n                if (window.gameConfig.timerEnabled && mode === 'play') {\n                    if (timerInterval) clearInterval(timerInterval);\n                    timerInterval = setInterval(updateTimer, 1000);\n                }\n            }\n\n            // Update timer\n            function updateTimer() {\n                if (isGameOver) return;\n                \n                timeLeft--;\n                if (timerDisplay) timerDisplay.textContent = timeLeft;\n\n                if (timeLeft <= 0) {\n                    timeLeft = 0;\n                    if (timerInterval) clearInterval(timerInterval);\n                    handleGameOver(false);\n                }\n            }\n\n            // Handle card click\n            function handleCardClick(x, y) {\n                if (isProcessing || isGameOver) return;\n                \n                for (const card of cards) {\n                    if (card.contains(x, y) && !card.flipped && !card.matched) {\n                        // Flip card\n                        card.flipped = true;\n                        card.flip();\n                        flippedCards.push(card);\n                        playSound('card_flip_sound');\n\n                        if (flippedCards.length === 2) {\n                            isProcessing = true;\n\n                            // Check for match after animation completes\n                            setTimeout(() => {\n                                checkMatch();\n                            }, 600);\n                        }\n                        break;\n                    }\n                }\n            }\n\n            // Check for match\n            function checkMatch() {\n                const [card1, card2] = flippedCards;\n\n                if (card1.pairIndex === card2.pairIndex) {\n                    // Match!\n                    card1.matched = true;\n                    card2.matched = true;\n                    card1.pulse();\n                    card2.pulse();\n                    matchedPairs.push(card1.pairIndex);\n                    \n                    // Spawn particles\n                    spawnParticles(card1.x + card1.size / 2, card1.y + card1.size / 2, '#FF80AB');\n                    spawnParticles(card2.x + card2.size / 2, card2.y + card2.size / 2, '#FFFFFF');\n\n                    // Add score\n                    score += 20;\n                    if (scoreDisplay) scoreDisplay.textContent = score;\n                    \n                    playSound('match_success_sound');\n                    flippedCards = [];\n                    isProcessing = false;\n\n                    // Check for victory\n                    checkVictory();\n                } else {\n                    // No match\n                    card1.shakeAnimation();\n                    card2.shakeAnimation();\n                    playSound('match_fail_sound');\n\n                    setTimeout(() => {\n                        card1.flipped = false;\n                        card2.flipped = false;\n                        card1.flip();\n                        card2.flip();\n                        flippedCards = [];\n                        isProcessing = false;\n                    }, 1000);\n                }\n            }\n\n            // Check victory\n            function checkVictory() {\n                // Fixed 6 pairs for all levels\n                const numPairs = 6;\n                \n                if (matchedPairs.length === numPairs) {\n                    if (timerInterval) {\n                        clearInterval(timerInterval);\n                    }\n\n                    playSound('barbie_victory_fanfare');\n\n                    setTimeout(() => {\n                        handleGameOver(true);\n                    }, 500);\n                }\n            }\n\n            // Game Over / Victory\n            async function handleGameOver(isVictory) {\n                isGameOver = true;\n                \n                if (isVictory) {\n                    victoryTitle.style.color = 'var(--color-pink-dark)';\n                    victoryMessage.classList.remove('hidden');\n                    if (currentLevel < 10) {\n                        victoryTitle.textContent = '\ud83d\udc96 DREAM VICTORY! \ud83d\udc96';\n                        victoryMessage.textContent = 'Level ' + currentLevel + ' Completed!';\n                        nextLevelBtn.textContent = 'STAY FABULOUS';\n                        nextLevelBtn.onclick = nextLevel;\n                    } else {\n                        victoryTitle.textContent = '\u2728 FASHION ICON! \u2728';\n                        victoryMessage.textContent = 'You have cleared all 10 levels!';\n                        nextLevelBtn.textContent = 'REPLAY DREAM';\n                        nextLevelBtn.onclick = () => {\n                            currentLevel = 1;\n                            score = 0;\n                            shuffleCharacterPool();\n                            initGame();\n                        };\n                    }\n                    \n                    // Bonus score for remaining time\n                    const timeBonus = timeLeft * 10;\n                    score += timeBonus;\n                    if (scoreDisplay) scoreDisplay.textContent = score;\n                    playSound('barbie_victory_fanfare');\n                } else {\n                    victoryTitle.style.color = 'var(--color-primary)';\n                    victoryTitle.textContent = '\ud83d\udc57 TRY AGAIN! \ud83d\udc57';\n                    victoryMessage.classList.add('hidden');\n                    nextLevelBtn.textContent = 'RETRY GLAM';\n                    nextLevelBtn.onclick = () => {\n                        currentLevel = 1;\n                        score = 0;\n                        shuffleCharacterPool();\n                        initGame();\n                    };\n                }\n\n                finalScore.textContent = score.toString();\n                \n                // Show modal immediately for better UX\n                victoryBackdrop.classList.remove('hidden');\n                victoryModal.classList.remove('hidden');\n\n                // Submit score and display leaderboard\n                submitScoreAndShowLeaderboard();\n            }\n\n            // Submit score and display leaderboard with top 5 entries\n            async function submitScoreAndShowLeaderboard() {\n                try {\n                    // Submit score and get top 5 entries\n                    const response = await lib.addPlayerScoreToLeaderboard(score, 5);\n                    \n                    if (response && response.success) {\n                        // Display player rank\n                        if (response.userRank !== undefined && response.userRank !== null) {\n                            playerRankDisplay.textContent = `Dream Rank: #${response.userRank}`;\n                            playerRankDisplay.style.color = 'var(--color-pink-dark)';\n                        }\n                        \n                        // Display leaderboard entries\n                        if (response.entries && response.entries.length > 0) {\n                            displayLeaderboard(response.entries);\n                        }\n                    }\n                } catch (error) {\n                    lib.log(`Failed to submit score to leaderboard: ${error.message}`);\n                    // Game continues to work without leaderboard\n                }\n            }\n            \n            // Display leaderboard entries\n            function displayLeaderboard(entries) {\n                const leaderboardContainer = document.getElementById('leaderboard-container');\n                const leaderboardList = document.getElementById('leaderboard-list');\n                \n                if (!leaderboardContainer || !leaderboardList) return;\n                \n                // Clear previous entries\n                leaderboardList.innerHTML = '';\n                \n                // Get current user ID to highlight their entry\n                const currentUserId = lib.getUserId ? lib.getUserId() : null;\n                \n                // Create entry elements\n                entries.forEach((entry, index) => {\n                    const entryDiv = document.createElement('div');\n                    entryDiv.className = 'leaderboard-entry';\n                    \n                    // Highlight current player\n                    if (currentUserId && entry.userId === currentUserId) {\n                        entryDiv.classList.add('current-player');\n                    }\n                    \n                    // Rank\n                    const rankSpan = document.createElement('span');\n                    rankSpan.className = 'leaderboard-rank';\n                    rankSpan.textContent = `#${index + 1}`;\n                    \n                    // Avatar\n                    const avatar = document.createElement('img');\n                    avatar.className = 'leaderboard-avatar';\n                    avatar.src = entry.profilePicture || '';\n                    avatar.alt = entry.username || 'Player';\n                    // Fallback if image fails to load\n                    avatar.onerror = function() {\n                        this.style.display = 'none';\n                    };\n                    \n                    // Info container\n                    const infoDiv = document.createElement('div');\n                    infoDiv.className = 'leaderboard-info';\n                    \n                    // Username\n                    const usernameSpan = document.createElement('span');\n                    usernameSpan.className = 'leaderboard-username';\n                    usernameSpan.textContent = entry.username || 'Anonymous';\n                    \n                    // Score\n                    const scoreSpan = document.createElement('span');\n                    scoreSpan.className = 'leaderboard-score';\n                    scoreSpan.textContent = `${entry.score} pts`;\n                    \n                    // Assemble entry\n                    infoDiv.appendChild(usernameSpan);\n                    infoDiv.appendChild(scoreSpan);\n                    \n                    entryDiv.appendChild(rankSpan);\n                    entryDiv.appendChild(avatar);\n                    entryDiv.appendChild(infoDiv);\n                    \n                    leaderboardList.appendChild(entryDiv);\n                });\n                \n                // Show leaderboard\n                leaderboardContainer.classList.remove('hidden');\n            }\n\n            // Restart game\n            function restartGame() {\n                if (timerInterval) {\n                    clearInterval(timerInterval);\n                }\n                initGame();\n            }\n\n            // Next Level\n            function nextLevel() {\n                if (currentLevel >= 10) {\n                    currentLevel = 1;\n                    score = 0;\n                    shuffleCharacterPool();\n                } else {\n                    currentLevel++;\n                }\n                \n                if (mode === 'edit') {\n                    window.gameConfig.currentLevel = currentLevel;\n                }\n                initGame();\n            }\n\n            // Event listeners\n            // Redundant nextLevelBtn listener removed to prevent double level skipping\n\n            // Input handling\n            function getPointerPosition(event) {\n                const rect = canvas.getBoundingClientRect();\n                \n                let clientX, clientY;\n                if (event.touches && event.touches.length > 0) {\n                    clientX = event.touches[0].clientX;\n                    clientY = event.touches[0].clientY;\n                } else {\n                    clientX = event.clientX;\n                    clientY = event.clientY;\n                }\n                \n                // Use logical pixels for hit detection to match logical units in game logic\n                return {\n                    x: clientX - rect.left,\n                    y: clientY - rect.top\n                };\n            }\n\n            // Show game parameters\n            lib.showGameParameters({\n                name: 'Game Settings',\n                params: {\n                    'Current Level': {\n                        key: 'currentLevel',\n                        type: 'number',\n                        min: 1,\n                        max: 10,\n                        onChange: (value) => {\n                            currentLevel = Math.min(10, Math.max(1, value));\n                            restartGame();\n                        }\n                    },\n                    'Show Timer': {\n                        key: 'timerEnabled',\n                        type: 'checkbox',\n                        onChange: (value) => {\n                            if (value && mode === 'play') {\n                                timerPanel.classList.remove('hidden');\n                                if (timerInterval) clearInterval(timerInterval);\n                                timerInterval = setInterval(updateTimer, 1000);\n                            } else {\n                                timerPanel.classList.add('hidden');\n                                if (timerInterval) {\n                                    clearInterval(timerInterval);\n                                    timerInterval = null;\n                                }\n                            }\n                        }\n                    }\n                }\n            });\n\n            if (mode === 'edit') {\n                // Edit mode: Show all cards face-up for preview\n                initGame();\n                \n                // Flip all cards face-up in edit mode\n                for (const card of cards) {\n                    card.flipped = true;\n                    card.flipTarget = 1;\n                    card.flipProgress = 1;\n                }\n\n            } else {\n                // Play mode: Full game logic\n                initGame();\n\n                canvas.addEventListener('click', (e) => {\n                    const pos = getPointerPosition(e);\n                    handleCardClick(pos.x, pos.y);\n                });\n\n                canvas.addEventListener('touchstart', (e) => {\n                    e.preventDefault();\n                    const pos = getPointerPosition(e);\n                    handleCardClick(pos.x, pos.y);\n                });\n            }\n\n            // Game loop\n            let lastTime = performance.now();\n            function gameLoop(timestamp) {\n                let deltaTime = (timestamp - lastTime) / 1000;\n                deltaTime = Math.min(deltaTime, 0.11);\n                lastTime = timestamp;\n\n                // Clear canvas\n                ctx.clearRect(0, 0, logicalWidth, logicalHeight);\n\n                // Update and render particles\n                for (let i = particles.length - 1; i >= 0; i--) {\n                    particles[i].update(deltaTime);\n                    if (particles[i].life <= 0) {\n                        particles.splice(i, 1);\n                    } else {\n                        particles[i].draw(ctx);\n                    }\n                }\n\n                // Update and render cards\n                for (const card of cards) {\n                    card.update(deltaTime);\n                    card.draw(ctx);\n                }\n\n                requestAnimationFrame(gameLoop);\n            }\n            requestAnimationFrame(gameLoop);\n        }\n    </script>\n</body>\n</html>", "game_config": "{\n  \"difficulty\": \"easy\",\n  \"timerEnabled\": true,\n  \"currentLevel\": 1\n}", "game_design_document": "## Core Game Loop and Mechanics\n\n**Chibi Memory Pirates** is a classic memory matching game featuring beloved One Piece characters rendered in an adorable chibi art style.\n\n### Gameplay Flow:\n1. **Game Start**: Player sees a grid of face-down cards on a pirate ship deck\n2. **Card Flipping**: Player taps/clicks cards to reveal chibi One Piece characters\n3. **Matching**: Player tries to find matching pairs of characters\n4. **Success/Failure**: \n   - When two cards match, they stay revealed and a satisfying sound plays\n   - When cards don't match, they flip back face-down after a brief delay\n5. **Progression**: Game continues until all pairs are found\n6. **Victory**: Celebratory animation and stats (time taken, moves made)\n7. **Replay**: Option to play again with shuffled cards\n\n### Engagement Drivers:\n- **Recognition**: Joy of seeing favorite One Piece characters\n- **Challenge**: Testing and improving memory skills\n- **Completion**: Satisfaction of clearing the board\n- **Speed**: Trying to beat previous time/move records\n- **Collection**: Discovering all the different chibi characters\n\n### Win Condition:\n- Match all pairs of cards on the board\n\n### Lose Condition:\n- No lose condition - players can take as many moves as needed\n\n## Starting Scope\n\nFor the initial implementation, we'll create a polished, complete memory game experience:\n\n**Must Have (First Iteration):**\n- Single difficulty level with 12 cards (6 pairs)\n- 6 unique chibi One Piece characters (Luffy, Zoro, Nami, Sanji, Chopper, Usopp)\n- Card flip animations with smooth transitions\n- Match/mismatch feedback (visual and audio)\n- Move counter and timer\n- Victory screen with stats\n- Restart button\n- Simple pirate ship deck background\n- Card back design with One Piece theme\n\n**Future Iterations:**\n- Multiple difficulty levels (Easy: 12 cards, Medium: 20 cards, Hard: 30 cards)\n- More character sets to unlock\n- Different themed backgrounds\n- High score tracking\n- Hint system\n- Sound toggle\n- Additional characters from One Piece universe\n\n## Game Perspective\n\n**Fixed-screen** - The entire game board is visible at once on a single screen. No scrolling or camera movement needed. This is ideal for a memory card game where players need to see all cards simultaneously to make strategic choices.\n\n## Game World and Level Design\n\n### Visual Layout:\n- **Background**: Wooden pirate ship deck with subtle nautical details (ropes, barrels, ship wheel in background)\n- **Card Grid**: Centered 3x4 grid of cards (portrait orientation friendly)\n- **UI Elements**: \n  - Top: Timer and move counter in treasure chest styled panels\n  - Bottom: Restart button styled as a pirate flag or treasure map icon\n\n### Card Design:\n- **Card Back**: One Piece themed design (Straw Hat Pirates jolly roger or treasure map pattern)\n- **Card Front**: White/cream border with chibi character illustration in center\n- **Card Size**: Approximately 180x180 pixels to fit comfortably in 720x1280 viewport with spacing\n\n### Spacing and Layout:\n- Cards arranged in 3 columns \u00d7 4 rows\n- Adequate spacing between cards (20-30px) for clear tap targets\n- Total grid approximately 600px wide \u00d7 800px tall\n- Centered vertically and horizontally in viewport\n\n## Edit Mode Design\n\nEdit mode allows players to customize their memory game experience:\n\n### Editable Properties:\n\n**1. Difficulty Level (Number of Cards)**\n- Easy: 12 cards (3\u00d74 grid) - 6 pairs\n- Medium: 20 cards (4\u00d75 grid) - 10 pairs  \n- Hard: 30 cards (5\u00d76 grid) - 15 pairs\n- Constraint: Must be even number of cards\n\n**2. Character Set Selection**\n- Straw Hat Crew (default): Luffy, Zoro, Nami, Sanji, Chopper, Usopp\n- Future sets could include: Marines, Warlords, Emperors, etc.\n- Constraint: Must have enough unique characters for selected difficulty\n\n**3. Background Theme**\n- Pirate Ship Deck (default)\n- Sunny Ship Interior\n- Treasure Island\n- Marine Base\n- Constraint: Background must not interfere with card visibility\n\n**4. Card Back Design**\n- Straw Hat Jolly Roger (default)\n- Treasure Map Pattern\n- Wanted Poster Style\n- Going Merry Design\n\n**5. Timer Toggle**\n- On (default): Shows elapsed time\n- Off: No time pressure, pure memory challenge\n\n### Edit Mode Interface:\n- Simple dropdown/button selectors for each property\n- Preview of selected options\n- \"Apply Changes\" button to restart game with new settings\n- All settings stored in window.gameConfig\n\n## Control Design\n\n**Chibi Memory Pirates** uses simple tap/click controls appropriate for a casual puzzle game.\n\n### Mobile (Touch) Controls:\n- **Tap Card**: Reveal the card (flip animation)\n- **Tap Restart Button**: Reset the game with shuffled cards\n- **Tap Edit Button**: Enter edit mode to change settings\n\n### Desktop (Mouse/Keyboard) Controls:\n- **Click Card**: Reveal the card (flip animation)\n- **Click Restart Button**: Reset the game with shuffled cards\n- **Click Edit Button**: Enter edit mode to change settings\n- **Optional Keyboard**: Number keys 1-12 could select cards for accessibility\n\n### Control Implementation:\n- Direct click/tap detection on card elements\n- No complex input systems needed\n- Prevent rapid clicking (debounce) to avoid breaking flip animations\n- Disable card interaction during:\n  - Two cards already revealed and being compared\n  - Victory animation playing\n  - Cards flipping back after mismatch\n\n### Interaction Feedback:\n- **Hover (desktop)**: Subtle card lift/glow effect\n- **Tap/Click**: Immediate flip animation start\n- **Match**: Cards stay revealed, slight scale pulse, success sound\n- **Mismatch**: Brief pause (1 second) then flip back, subtle shake, mismatch sound\n\n## Art Style and Visual Theme\n\n### Overall Style:\n**Cartoon Chibi** - Cute, simplified character designs with oversized heads and small bodies, maintaining recognizable One Piece character features while being adorable and family-friendly.\n\n### Color Palette:\n- **Background**: Warm wood tones (browns, tans), ocean blues in distance\n- **Cards**: Clean white/cream borders with vibrant character colors\n- **UI Elements**: Pirate-themed golds, reds, and blacks\n- **Mood**: Bright, cheerful, adventurous\n\n### Visual Consistency:\n- All chibi characters drawn in same style with consistent proportions (2:1 head-to-body ratio)\n- Same viewing angle for all characters (front-facing, slight 3/4 view)\n- Consistent line weight and shading style\n- All characters should have happy/energetic expressions\n\n### Asset Approach:\n- **Generated Assets**: All character illustrations, card backs, background\n- **Code Rendering**: Card flip animations, UI panels, buttons, text overlays\n- **Relative Sizing**: Characters sized to fit comfortably in ~140x140px card content area\n\n### Technical Specifications:\n- Transparent backgrounds for character assets\n- Card back as seamless pattern or centered design\n- Background at 720x1280 resolution\n- All assets optimized for web (PNG for characters, JPG for background)", "persistent_storage_config": {"leaderboard": {"sort_ascending": false}}, "game_metadata": {"game_id": "01KTD5H0QHNPZY90RSXX81YZ94", "title": "Chibi Memory Barbie", "description": "Match adorable chibi barbie characters in this memory card game set on a pirate ship deck!", "thumbnail_url": "https://d2oir5eh8rty2e.cloudfront.net/assets/images/thumbnail_ea48a15a-9f52-48ed-b0b8-17d0426e4156.webp", "created_at": 1780705953.0, "updated_at": 1780738468876.9797, "art_style": null, "is_remix": true, "base_game_id": "01KSSWYFE6JD69EAS982FFNQTV"}, "task_plan": null}