{
    "schema_version": 28,
    "metadata": {
        "project": "BIG EGG",
        "modified_at": "2026-08-23T12:18:56-04:00",
        "published_at": "2026-08-23T12:18:56-04:00"
    },
    "active_player_config": "default_player",
    "player_configs": {
        "default_player": {
            "display_name": "Default Player",
            "starting_hp": 10.0,
            "starting_stamina": 100.0,
            "move_speed": 400.0,
            "move_stamina_per_second": 0.35,
            "attack_damage": 1.0,
            "attack_rate": 0.45,
            "attack_range": 175.0,
            "attack_angle": 15.0,
            "attack_knockback": 600.0,
            "attack_stamina_cost": 5.0,
            "damage_variance": 0.12,
            "dash_speed": 760.0,
            "dash_duration": 0.2,
            "dash_cooldown": 0.9,
            "dash_stamina_cost": 8.0,
            "visuals": {
                "idle": "player_idle"
            },
            "vfx": {},
            "speech_bubbles": {
                "check_interval": 8.0,
                "cooldown": 10.0,
                "duration": 3.0,
                "triggers": {
                    "spawn": [],
                    "hurt": [],
                    "random": []
                }
            }
        }
    },
    "ingredients": {
        "egg": {
            "display_name": "Egg",
            "description": "Warm dungeon egg.",
            "color": "#ffd166",
            "shape": "oval",
            "visuals": {},
            "vfx": {},
            "on_collected": []
        },
        "slime_jelly": {
            "display_name": "Slime Jelly",
            "description": "Oddly appetizing green jelly.",
            "color": "#70e000",
            "shape": "circle",
            "visuals": {},
            "vfx": {},
            "on_collected": []
        },
        "mushroom": {
            "display_name": "Mushroom",
            "description": "A plump cave mushroom.",
            "color": "#c77dff",
            "shape": "triangle",
            "visuals": {},
            "vfx": {},
            "on_collected": []
        },
        "beast_meat": {
            "display_name": "Beast Meat",
            "description": "A hearty cut from a dungeon brute.",
            "color": "#d96c75",
            "shape": "diamond",
            "visuals": {},
            "vfx": {},
            "on_collected": []
        },
        "ember_pepper": {
            "display_name": "Ember Pepper",
            "description": "A pepper that stays pleasantly warm.",
            "color": "#ff4d00",
            "shape": "hexagon",
            "visuals": {},
            "vfx": {},
            "on_collected": []
        }
    },
    "attack_patterns": {
        "chicken_cone": {
            "display_name": "Coup de bec",
            "type": "burst",
            "movement_type": "linear",
            "range": 78.0,
            "angle": 72.0,
            "windup": 0.2,
            "active_duration": 0.0,
            "rotation_speed": 0.0,
            "tick_interval": 0.0,
            "movement_distance": 32.0,
            "movement_speed": 190.0,
            "movement_acceleration": 0.0,
            "movement_windup_distance": 0.0,
            "movement_arc_height": 0.0,
            "color": "#ff784f"
        },
        "fungling_wide_cone": {
            "display_name": "Souffle de spores",
            "type": "swipe",
            "movement_type": "stationary",
            "range": 100.0,
            "angle": 360.0,
            "windup": 1.2,
            "active_duration": 3.0,
            "rotation_speed": 1999.0,
            "tick_interval": 0.1,
            "movement_distance": 0.0,
            "movement_speed": 0.0,
            "movement_acceleration": 0.0,
            "movement_windup_distance": 0.0,
            "movement_arc_height": 0.0,
            "color": "#c77dff"
        },
        "boar_circle": {
            "display_name": "Onde circulaire",
            "type": "burst",
            "movement_type": "charge",
            "range": 46.0,
            "angle": 360.0,
            "windup": 0.65,
            "active_duration": 0.0,
            "rotation_speed": 0.0,
            "tick_interval": 0.0,
            "movement_distance": 96.0,
            "movement_speed": 360.0,
            "movement_acceleration": 900.0,
            "movement_windup_distance": 14.0,
            "movement_arc_height": 0.0,
            "color": "#ff6b35"
        },
        "sticky_circle": {
            "display_name": "Cercle collant",
            "type": "sticky",
            "movement_type": "retreat",
            "range": 48.0,
            "angle": 360.0,
            "windup": 0.9,
            "active_duration": 0.0,
            "rotation_speed": 0.0,
            "tick_interval": 0.0,
            "movement_distance": 48.0,
            "movement_speed": 150.0,
            "movement_acceleration": 0.0,
            "movement_windup_distance": 0.0,
            "movement_arc_height": 0.0,
            "color": "#f72585"
        },
        "orbit_swipe": {
            "display_name": "Balayage orbital",
            "type": "swipe",
            "movement_type": "strafe",
            "range": 98.0,
            "angle": 58.0,
            "windup": 0.45,
            "active_duration": 1.8,
            "rotation_speed": 210.0,
            "tick_interval": 0.35,
            "movement_distance": 120.0,
            "movement_speed": 95.0,
            "movement_acceleration": 0.0,
            "movement_windup_distance": 0.0,
            "movement_arc_height": 0.0,
            "color": "#ff3c38"
        }
    },
    "movement_patterns": {
        "linear": {
            "display_name": "Linear",
            "type": "linear",
            "speed_multiplier": 1.0,
            "detected_speed_multiplier": 1.0,
            "move_duration": 0.0,
            "rest_duration": 0.0,
            "direction_change_min": 1.2,
            "direction_change_max": 3.2,
            "idle_chance": 0.0
        },
        "patrol": {
            "display_name": "Random Patrol",
            "type": "patrol",
            "speed_multiplier": 0.38,
            "detected_speed_multiplier": 0.72,
            "move_duration": 0.0,
            "rest_duration": 0.0,
            "direction_change_min": 1.2,
            "direction_change_max": 3.2,
            "idle_chance": 0.22
        },
        "big_leap": {
            "display_name": "Big Leap",
            "type": "hop",
            "speed_multiplier": 1.85,
            "detected_speed_multiplier": 1.85,
            "move_duration": 0.38,
            "rest_duration": 0.95,
            "direction_change_min": 1.2,
            "direction_change_max": 3.2,
            "idle_chance": 0.0
        },
        "small_hop": {
            "display_name": "Small Hop",
            "type": "hop",
            "speed_multiplier": 1.25,
            "detected_speed_multiplier": 1.25,
            "move_duration": 0.18,
            "rest_duration": 0.42,
            "direction_change_min": 1.2,
            "direction_change_max": 3.2,
            "idle_chance": 0.0
        },
        "static": {
            "display_name": "Static",
            "type": "static",
            "speed_multiplier": 0.0,
            "detected_speed_multiplier": 0.0,
            "move_duration": 0.0,
            "rest_duration": 0.0,
            "direction_change_min": 1.2,
            "direction_change_max": 3.2,
            "idle_chance": 0.0
        }
    },
    "enemies": {
        "slime": {
            "display_name": "Slime",
            "spawn_weight": 3.0,
            "spawn_min": 0,
            "spawn_max": 6,
            "shape": "circle",
            "health": 3.0,
            "speed": 72.0,
            "detection_range": 500.0,
            "detection_angle": 230.0,
            "knockback": 340.0,
            "knockback_resistance": 0.0,
            "min_size": 0.25,
            "max_size": 5.0,
            "direct_hit": false,
            "direct_damage_min": 0.9,
            "direct_damage_max": 1.1,
            "direct_hit_cooldown": 1.0,
            "attacks": [
                {
                    "pattern": "fungling_wide_cone",
                    "damage_min": 0.9,
                    "damage_max": 1.1,
                    "cooldown": 5.0,
                    "weight": 1.0
                }
            ],
            "undetected_movement": "small_hop",
            "detected_movement": "big_leap",
            "hero_response": "chase",
            "color": "#ef476f",
            "drops": [
                {
                    "ingredient_id": "slime_jelly",
                    "chance": 100.0
                }
            ],
            "visuals": {},
            "vfx": {},
            "speech_bubbles": {
                "check_interval": 5.0,
                "cooldown": 10.0,
                "duration": 3.0,
                "triggers": {
                    "spawn": [
                        {
                            "text": "Nouveau message",
                            "chance": 100.0
                        }
                    ],
                    "death": [],
                    "random": []
                }
            },
            "on_kill": [],
            "on_spawn": [],
            "on_damage_player": [],
            "on_hurt": []
        },
        "chicken_beast": {
            "display_name": "Chicken Beast",
            "spawn_weight": 7.0,
            "spawn_min": 0,
            "spawn_max": 6,
            "shape": "triangle",
            "health": 4.0,
            "speed": 700.0,
            "detection_range": 500.0,
            "detection_angle": 270.0,
            "knockback": 200.0,
            "knockback_resistance": 0.01,
            "min_size": 1.0,
            "max_size": 5.0,
            "direct_hit": true,
            "direct_damage_min": 4.5,
            "direct_damage_max": 5.5,
            "direct_hit_cooldown": 1.0,
            "attacks": [
                {
                    "pattern": "chicken_cone",
                    "damage_min": 4.5,
                    "damage_max": 5.5,
                    "cooldown": 1.65,
                    "weight": 1.0
                }
            ],
            "undetected_movement": "patrol",
            "detected_movement": "small_hop",
            "hero_response": "chase",
            "color": "#ff7b00",
            "drops": [
                {
                    "ingredient_id": "egg",
                    "chance": 100.0
                },
                {
                    "ingredient_id": "egg",
                    "chance": 50.0
                }
            ],
            "visuals": {
                "idle": "chicken_beast_idle",
                "walk": "chicken_beast_walk"
            },
            "vfx": {},
            "speech_bubbles": {
                "check_interval": 3.0,
                "cooldown": 10.0,
                "duration": 1.0,
                "triggers": {
                    "spawn": [],
                    "death": [],
                    "random": [
                        {
                            "text": "motherfucker!",
                            "chance": 30.0
                        }
                    ]
                }
            },
            "on_kill": [],
            "on_spawn": [],
            "on_damage_player": [],
            "on_hurt": []
        },
        "fungling": {
            "display_name": "Fungling",
            "spawn_weight": 2.0,
            "spawn_min": 0,
            "spawn_max": 6,
            "shape": "hexagon",
            "health": 3.0,
            "speed": 82.0,
            "detection_range": 210.0,
            "detection_angle": 205.0,
            "knockback": 400.0,
            "knockback_resistance": 0.05,
            "min_size": 1.5,
            "max_size": 2.0,
            "direct_hit": false,
            "direct_damage_min": 2.7,
            "direct_damage_max": 3.3000000000000003,
            "direct_hit_cooldown": 1.0,
            "attacks": [
                {
                    "pattern": "fungling_wide_cone",
                    "damage_min": 2.7,
                    "damage_max": 3.3000000000000003,
                    "cooldown": 5.0,
                    "weight": 1.0
                }
            ],
            "undetected_movement": "small_hop",
            "detected_movement": "linear",
            "hero_response": "chase",
            "color": "#9d4edd",
            "drops": [
                {
                    "ingredient_id": "mushroom",
                    "chance": 100.0
                }
            ],
            "visuals": {},
            "vfx": {},
            "speech_bubbles": {
                "check_interval": 8.0,
                "cooldown": 10.0,
                "duration": 3.0,
                "triggers": {
                    "spawn": [],
                    "death": [],
                    "random": []
                }
            },
            "on_kill": [],
            "on_spawn": [],
            "on_damage_player": [],
            "on_hurt": []
        },
        "boar_brute": {
            "display_name": "Boar Brute",
            "spawn_weight": 2.0,
            "spawn_min": 0,
            "spawn_max": 6,
            "shape": "square",
            "health": 4.0,
            "speed": 94.0,
            "detection_range": 220.0,
            "detection_angle": 145.0,
            "knockback": 580.0,
            "knockback_resistance": 0.3,
            "min_size": 1.5,
            "max_size": 2.0,
            "direct_hit": false,
            "direct_damage_min": 1.8,
            "direct_damage_max": 2.2,
            "direct_hit_cooldown": 1.0,
            "attacks": [
                {
                    "pattern": "boar_circle",
                    "damage_min": 1.8,
                    "damage_max": 2.2,
                    "cooldown": 1.8,
                    "weight": 1.0
                }
            ],
            "undetected_movement": "linear",
            "detected_movement": "big_leap",
            "hero_response": "chase",
            "color": "#b5654d",
            "drops": [
                {
                    "ingredient_id": "beast_meat",
                    "chance": 100.0
                }
            ],
            "visuals": {},
            "vfx": {},
            "speech_bubbles": {
                "check_interval": 8.0,
                "cooldown": 10.0,
                "duration": 3.0,
                "triggers": {
                    "spawn": [],
                    "death": [],
                    "random": []
                }
            },
            "on_kill": [],
            "on_spawn": [],
            "on_damage_player": [],
            "on_hurt": []
        },
        "pepper_imp": {
            "display_name": "Pepper Imp",
            "spawn_weight": 2.0,
            "spawn_min": 0,
            "spawn_max": 6,
            "shape": "diamond",
            "health": 1.0,
            "speed": 116.0,
            "detection_range": 255.0,
            "detection_angle": 125.0,
            "knockback": 370.0,
            "knockback_resistance": 0.08,
            "min_size": 1.5,
            "max_size": 2.0,
            "direct_hit": false,
            "direct_damage_min": 0.9,
            "direct_damage_max": 1.1,
            "direct_hit_cooldown": 1.0,
            "attacks": [
                {
                    "pattern": "orbit_swipe",
                    "damage_min": 0.9,
                    "damage_max": 1.1,
                    "cooldown": 1.6,
                    "weight": 1.0
                }
            ],
            "undetected_movement": "patrol",
            "detected_movement": "small_hop",
            "hero_response": "chase",
            "color": "#ff3c38",
            "drops": [
                {
                    "ingredient_id": "ember_pepper",
                    "chance": 100.0
                }
            ],
            "visuals": {},
            "vfx": {},
            "speech_bubbles": {
                "check_interval": 8.0,
                "cooldown": 10.0,
                "duration": 3.0,
                "triggers": {
                    "spawn": [],
                    "death": [],
                    "random": []
                }
            },
            "on_kill": [],
            "on_spawn": [],
            "on_damage_player": [],
            "on_hurt": []
        }
    },
    "recipes": {
        "fried_egg": {
            "display_name": "Fried Egg",
            "ingredients": {
                "egg": 1
            },
            "cook_time": 2.0,
            "sale_price": 5,
            "visuals": {},
            "vfx": {},
            "on_cooked": [],
            "on_served": []
        },
        "slime_omelette": {
            "display_name": "Slime Omelette",
            "ingredients": {
                "egg": 1,
                "slime_jelly": 1
            },
            "cook_time": 3.0,
            "sale_price": 12,
            "visuals": {},
            "vfx": {},
            "on_cooked": [],
            "on_served": []
        },
        "mushroom_omelette": {
            "display_name": "Mushroom Omelette",
            "ingredients": {
                "egg": 1,
                "mushroom": 1
            },
            "cook_time": 3.5,
            "sale_price": 15,
            "visuals": {},
            "vfx": {},
            "on_cooked": [],
            "on_served": []
        },
        "beast_hash": {
            "display_name": "Beast Egg Hash",
            "ingredients": {
                "egg": 1,
                "beast_meat": 1
            },
            "cook_time": 4.0,
            "sale_price": 20,
            "visuals": {},
            "vfx": {},
            "on_cooked": [],
            "on_served": []
        },
        "pepper_scramble": {
            "display_name": "Pepper Jelly Scramble",
            "ingredients": {
                "egg": 1,
                "slime_jelly": 1,
                "ember_pepper": 1
            },
            "cook_time": 4.5,
            "sale_price": 26,
            "visuals": {},
            "vfx": {},
            "on_cooked": [],
            "on_served": []
        }
    },
    "customer_profiles": {
        "regular": {
            "display_name": "Regular",
            "color": "#06d6a0",
            "cash": 30,
            "appetite": 1,
            "speed": 180.0,
            "favorite_chance": 0.45,
            "patience": 60.0,
            "meal_consumption_speed": 4.0,
            "generosity": 0.15,
            "arrival_weight": 1.0,
            "hunger": 0.5,
            "queue_tolerance": 1.0,
            "favorite_meal": "fried_egg",
            "visuals": {
                "idle": "chicken_beast_idle",
                "walk": "chicken_beast_walk",
                "eat": "player_idle"
            },
            "vfx": {},
            "speech_bubbles": {
                "check_interval": 1.0,
                "cooldown": 10.0,
                "duration": 2.0,
                "triggers": {
                    "arrive": [],
                    "served": [],
                    "meal_finished": [],
                    "leave": [],
                    "random": [
                        {
                            "text": "Motherfucker",
                            "chance": 10.0
                        }
                    ]
                }
            },
            "on_served": [],
            "on_left_unserved": []
        },
        "foodie": {
            "display_name": "Foodie",
            "color": "#ffd166",
            "cash": 65,
            "appetite": 3,
            "speed": 150.0,
            "favorite_chance": 0.7,
            "patience": 75.0,
            "meal_consumption_speed": 0.8,
            "generosity": 0.22,
            "arrival_weight": 0.55,
            "hunger": 0.5,
            "queue_tolerance": 1.0,
            "favorite_meal": "mushroom_omelette",
            "visuals": {},
            "vfx": {},
            "speech_bubbles": {
                "check_interval": 8.0,
                "cooldown": 10.0,
                "duration": 3.0,
                "triggers": {
                    "arrive": [],
                    "served": [],
                    "meal_finished": [],
                    "leave": [],
                    "random": []
                }
            },
            "on_served": [],
            "on_left_unserved": []
        },
        "generous_guest": {
            "display_name": "Generous Guest",
            "color": "#c77dff",
            "cash": 90,
            "appetite": 2,
            "speed": 70.0,
            "favorite_chance": 0.65,
            "patience": 48.0,
            "meal_consumption_speed": 1.3,
            "generosity": 0.65,
            "arrival_weight": 0.3,
            "hunger": 0.5,
            "queue_tolerance": 1.0,
            "favorite_meal": "pepper_scramble",
            "visuals": {},
            "vfx": {},
            "speech_bubbles": {
                "check_interval": 8.0,
                "cooldown": 10.0,
                "duration": 3.0,
                "triggers": {
                    "arrive": [],
                    "served": [],
                    "meal_finished": [],
                    "leave": [],
                    "random": []
                }
            },
            "on_served": [],
            "on_left_unserved": []
        }
    },
    "employees": {
        "pablo": {
            "display_name": "Pablo",
            "description": "Marche vite, parle peu.",
            "color": "#4cc9f0",
            "role": "server",
            "hire_cost": 40,
            "scope": "dimension",
            "skills": {
                "pace": 1.4,
                "sight": 1.2,
                "tray": 1.0,
                "attentiveness": 1.1,
                "charisma": 0.8,
                "tidiness": 0.9
            },
            "task_preferences": {
                "take_order": 4.0,
                "serve": 5.0,
                "bus": 2.0,
                "takeout": 3.0
            },
            "station_affinity": [],
            "recipe_affinity": [],
            "modifiers": [],
            "conditions": [],
            "visuals": {},
            "speech_bubbles": {
                "check_interval": 8.0,
                "cooldown": 10.0,
                "duration": 3.0,
                "triggers": {
                    "arrive": [],
                    "task_started": [],
                    "task_ended": [],
                    "random": []
                }
            },
            "on_hired": []
        },
        "margot": {
            "display_name": "Margot",
            "description": "Fait payer le sourire.",
            "color": "#f72585",
            "role": "server",
            "hire_cost": 85,
            "scope": "dimension",
            "skills": {
                "pace": 0.9,
                "sight": 1.0,
                "tray": 1.0,
                "attentiveness": 1.0,
                "charisma": 1.8,
                "poise": 1.3
            },
            "task_preferences": {
                "take_order": 5.0,
                "serve": 4.0,
                "bus": 1.0,
                "takeout": 2.0
            },
            "station_affinity": [],
            "recipe_affinity": [],
            "modifiers": [],
            "conditions": [],
            "visuals": {},
            "speech_bubbles": {
                "check_interval": 8.0,
                "cooldown": 10.0,
                "duration": 3.0,
                "triggers": {
                    "arrive": [],
                    "task_started": [],
                    "task_ended": [],
                    "random": []
                }
            },
            "on_hired": []
        },
        "sacha": {
            "display_name": "Sacha",
            "description": "Ne laisse jamais une assiette traîner.",
            "color": "#90be6d",
            "role": "server",
            "hire_cost": 55,
            "scope": "dimension",
            "skills": {
                "pace": 1.1,
                "sight": 0.8,
                "tray": 2.0,
                "tidiness": 1.9,
                "charisma": 0.6
            },
            "task_preferences": {
                "take_order": 2.0,
                "serve": 3.0,
                "bus": 5.0,
                "takeout": 3.0
            },
            "station_affinity": [],
            "recipe_affinity": [],
            "modifiers": [],
            "conditions": [],
            "visuals": {},
            "speech_bubbles": {
                "check_interval": 8.0,
                "cooldown": 10.0,
                "duration": 3.0,
                "triggers": {
                    "arrive": [],
                    "task_started": [],
                    "task_ended": [],
                    "random": []
                }
            },
            "on_hired": []
        },
        "gaspard": {
            "display_name": "Gaspard",
            "description": "Solide au fourneau.",
            "color": "#ffbe0b",
            "role": "cook",
            "hire_cost": 50,
            "scope": "dimension",
            "skills": {
                "craft": 1.3,
                "mise": 1.1,
                "plating": 0.1,
                "thrift": 0.05,
                "nose": 0.0
            },
            "task_preferences": [],
            "station_affinity": {
                "stove": 1.2,
                "spices": 0.7
            },
            "recipe_affinity": [],
            "modifiers": [],
            "conditions": [],
            "visuals": {},
            "speech_bubbles": {
                "check_interval": 8.0,
                "cooldown": 10.0,
                "duration": 3.0,
                "triggers": {
                    "arrive": [],
                    "task_started": [],
                    "task_ended": [],
                    "random": []
                }
            },
            "on_hired": []
        },
        "iris": {
            "display_name": "Iris",
            "description": "Dresse comme personne.",
            "color": "#b5179e",
            "role": "cook",
            "hire_cost": 95,
            "scope": "dimension",
            "skills": {
                "craft": 0.9,
                "mise": 1.0,
                "plating": 0.45,
                "thrift": 0.1,
                "nose": 1.0
            },
            "task_preferences": [],
            "station_affinity": {
                "stove": 0.8,
                "spices": 1.6
            },
            "recipe_affinity": [],
            "modifiers": [],
            "conditions": [],
            "visuals": {},
            "speech_bubbles": {
                "check_interval": 8.0,
                "cooldown": 10.0,
                "duration": 3.0,
                "triggers": {
                    "arrive": [],
                    "task_started": [],
                    "task_ended": [],
                    "random": []
                }
            },
            "on_hired": []
        }
    },
    "station_functions": {
        "stove": {
            "display_name": "Four",
            "description": "",
            "kind": "stove",
            "coefficients": {}
        },
        "spices": {
            "display_name": "Épicerie",
            "description": "",
            "kind": "spices",
            "coefficients": {}
        },
        "takeout": {
            "display_name": "Comptoir takeout",
            "description": "",
            "kind": "takeout",
            "coefficients": {}
        },
        "dishwasher": {
            "display_name": "Plonge",
            "description": "",
            "kind": "dishwasher",
            "coefficients": {}
        },
        "trash": {
            "display_name": "Poubelle",
            "description": "",
            "kind": "trash",
            "coefficients": {}
        },
        "shelf": {
            "display_name": "Étagère",
            "description": "",
            "kind": "shelf",
            "coefficients": {}
        },
        "console": {
            "display_name": "Console de gestion",
            "description": "",
            "kind": "console",
            "coefficients": {}
        },
        "table": {
            "display_name": "Tabouret",
            "description": "",
            "kind": "table",
            "coefficients": {}
        },
        "board": {
            "display_name": "Ardoise",
            "description": "",
            "kind": "board",
            "coefficients": {}
        }
    },
    "restaurant_elements": {
        "basic_stove": {
            "display_name": "Four de base",
            "description": "Le poste de cuisson d'origine.",
            "width": 96.0,
            "height": 80.0,
            "function": "stove",
            "usable_faces": 2,
            "anchor": "",
            "max_count": 4,
            "max_count_variable": "stove_count",
            "cost": 0,
            "fallback_shape": "square",
            "fallback_color": "ffbe0b",
            "modifiers": [],
            "conditions": [],
            "visuals": {}
        },
        "basic_shelf": {
            "display_name": "Étagère",
            "description": "Range les assiettes prêtes.",
            "width": 70.0,
            "height": 190.0,
            "function": "shelf",
            "usable_faces": 15,
            "anchor": "",
            "max_count": 1,
            "max_count_variable": "",
            "cost": 0,
            "fallback_shape": "square",
            "fallback_color": "c29a5c",
            "modifiers": [],
            "conditions": [],
            "visuals": {}
        },
        "basic_dishwasher": {
            "display_name": "Plonge",
            "description": "Lave la vaisselle sale.",
            "width": 96.0,
            "height": 80.0,
            "function": "dishwasher",
            "usable_faces": 15,
            "anchor": "",
            "max_count": 1,
            "max_count_variable": "",
            "cost": 0,
            "fallback_shape": "square",
            "fallback_color": "40c7eb",
            "modifiers": [],
            "conditions": [],
            "visuals": {}
        },
        "basic_trash": {
            "display_name": "Poubelle",
            "description": "Jette un plat raté.",
            "width": 86.0,
            "height": 80.0,
            "function": "trash",
            "usable_faces": 15,
            "anchor": "",
            "max_count": 1,
            "max_count_variable": "",
            "cost": 0,
            "fallback_shape": "square",
            "fallback_color": "8c5952",
            "modifiers": [],
            "conditions": [],
            "visuals": {}
        },
        "basic_console": {
            "display_name": "Console de gestion",
            "description": "Le tableau de commande du magasin.",
            "width": 104.0,
            "height": 76.0,
            "function": "console",
            "usable_faces": 4,
            "anchor": "",
            "max_count": 1,
            "max_count_variable": "management_console",
            "cost": 0,
            "fallback_shape": "square",
            "fallback_color": "6cc4da",
            "modifiers": [],
            "conditions": [],
            "visuals": {}
        },
        "basic_takeout_counter": {
            "display_name": "Comptoir takeout",
            "description": "Vend à la rue, adossé au mur nord.",
            "width": 142.0,
            "height": 72.0,
            "function": "takeout",
            "usable_faces": 4,
            "anchor": "north_wall",
            "max_count": 1,
            "max_count_variable": "takeout_counter",
            "cost": 0,
            "fallback_shape": "square",
            "fallback_color": "7fcea5",
            "modifiers": [],
            "conditions": [],
            "visuals": {}
        },
        "basic_order_board": {
            "display_name": "Ardoise",
            "description": "La file de travail du restaurant.",
            "width": 210.0,
            "height": 150.0,
            "function": "board",
            "usable_faces": 0,
            "anchor": "",
            "max_count": 1,
            "max_count_variable": "order_board_slots",
            "cost": 0,
            "fallback_shape": "square",
            "fallback_color": "3d3049",
            "modifiers": [],
            "conditions": [],
            "visuals": {}
        },
        "basic_table": {
            "display_name": "Tabouret",
            "description": "Une place assise.",
            "width": 84.0,
            "height": 131.0,
            "function": "table",
            "usable_faces": 0,
            "anchor": "",
            "max_count": 25,
            "max_count_variable": "table_count",
            "cost": 0,
            "fallback_shape": "circle",
            "fallback_color": "8a6f4e",
            "modifiers": [],
            "conditions": [],
            "visuals": {}
        }
    },
    "visuals": {
        "chicken_beast_idle": {
            "display_name": "Chicken Beast — repos",
            "description": "Genere par PixelLab (high top-down, vue sud).",
            "kind": "frames",
            "path": "res://assets/creatures/chicken_beast_idle.png",
            "columns": 1,
            "rows": 1,
            "count": 1,
            "fps": 8.0,
            "scale": 0.85,
            "offset_x": 0.0,
            "offset_y": 0.0,
            "lifetime": 0.0,
            "loop": true,
            "flip_follows_facing": true,
            "shader": "",
            "shader_params": [],
            "preview_image": ""
        },
        "chicken_beast_walk": {
            "display_name": "Chicken Beast — marche",
            "description": "Genere par PixelLab (high top-down, vue sud).",
            "kind": "frames",
            "path": "res://assets/creatures/chicken_beast_walk.png",
            "columns": 6,
            "rows": 1,
            "count": 6,
            "fps": 8.0,
            "scale": 0.85,
            "offset_x": 0.0,
            "offset_y": 0.0,
            "lifetime": 0.0,
            "loop": true,
            "flip_follows_facing": true,
            "shader": "",
            "shader_params": [],
            "preview_image": ""
        },
        "player_idle": {
            "display_name": "Joueur — repos",
            "description": "Genere par PixelLab (high top-down, 8 directions, vue sud). Calage 38/37: neutre.",
            "kind": "frames",
            "path": "res://assets/characters/player_idle.png",
            "columns": 1,
            "rows": 1,
            "count": 1,
            "fps": 8.0,
            "scale": 1.0,
            "offset_x": 0.0,
            "offset_y": 0.0,
            "lifetime": 0.0,
            "loop": true,
            "flip_follows_facing": true,
            "shader": "",
            "shader_params": [],
            "preview_image": ""
        }
    },
    "story_scenes": {},
    "game_variables": {
        "attack_damage": {
            "display_name": "Attack Damage",
            "type": "float",
            "base_value": 0.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 1000000.0,
            "rounding": "none",
            "category": "combat",
            "description": "Final player attack damage; its base value comes from the active player profile."
        },
        "max_health": {
            "display_name": "Maximum Health",
            "type": "float",
            "base_value": 0.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 1.0,
            "maximum": 1000000.0,
            "rounding": "none",
            "category": "combat",
            "description": "Final player health; its base value comes from the active player profile."
        },
        "move_speed": {
            "display_name": "Movement Speed",
            "type": "float",
            "base_value": 0.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 10000.0,
            "rounding": "none",
            "category": "movement",
            "description": "Final player movement speed; its base value comes from the active player profile."
        },
        "cook_speed": {
            "display_name": "Cooking Duration Multiplier",
            "type": "float",
            "base_value": 1.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.1,
            "maximum": 10.0,
            "rounding": "none",
            "category": "kitchen",
            "description": "Multiplier applied to recipe cooking duration. 0.70 means 30 percent shorter."
        },
        "payout": {
            "display_name": "Meal Payout Multiplier",
            "type": "float",
            "base_value": 1.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 100.0,
            "rounding": "none",
            "category": "restaurant",
            "description": "Multiplier applied to each meal payout."
        },
        "patience": {
            "display_name": "Customer Patience",
            "type": "float",
            "base_value": 0.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 100000.0,
            "rounding": "none",
            "category": "restaurant",
            "description": "Final patience; its base value comes from the customer profile."
        },
        "stamina": {
            "display_name": "Dungeon Stamina",
            "type": "float",
            "base_value": 0.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 100000.0,
            "rounding": "none",
            "category": "dungeon",
            "description": "Final stamina; its base value comes from the active player profile."
        },
        "plates": {
            "display_name": "Reusable Plates",
            "type": "int",
            "base_value": 1.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 1000.0,
            "rounding": "round",
            "category": "restaurant",
            "description": "Total reusable plate capacity."
        },
        "player_vision": {
            "display_name": "Player Vision",
            "type": "float",
            "base_value": 100.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 4000.0,
            "rounding": "none",
            "category": "restaurant",
            "description": "Distance in pixels within which the player can read a customer order."
        },
        "cook_idle_rate": {
            "display_name": "Unattended Cooking Rate",
            "type": "float",
            "base_value": 0.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 4.0,
            "rounding": "none",
            "category": "kitchen",
            "description": "Fraction de la vitesse manuelle que le four conserve quand personne ne tient le bouton. 0 = il a besoin du joueur."
        },
        "takeout_counter": {
            "display_name": "Takeout Counter",
            "type": "int",
            "base_value": 0.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 1.0,
            "rounding": "round",
            "category": "restaurant",
            "description": "Set to 1 once the takeout counter by the street is installed."
        },
        "takeout_stock_capacity": {
            "display_name": "Takeout Stock Capacity",
            "type": "int",
            "base_value": 4.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 1.0,
            "maximum": 100.0,
            "rounding": "round",
            "category": "restaurant",
            "description": "Maximum finished dishes accumulated for takeout."
        },
        "takeout_cook_speed": {
            "display_name": "Takeout Cooking Speed",
            "type": "float",
            "base_value": 1.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.05,
            "maximum": 100.0,
            "rounding": "none",
            "category": "kitchen",
            "description": "Production rate multiplier while the player or a cook works at the takeout counter."
        },
        "takeout_service_speed": {
            "display_name": "Takeout Service Speed",
            "type": "float",
            "base_value": 0.0333333333,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.001,
            "maximum": 100.0,
            "rounding": "none",
            "category": "restaurant",
            "description": "Takeout customers served per second while finished stock is available."
        },
        "takeout_queue_capacity": {
            "display_name": "Takeout Queue Capacity",
            "type": "int",
            "base_value": 4.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 50.0,
            "rounding": "round",
            "category": "restaurant",
            "description": "How many customers may wait in the takeout line outside."
        },
        "takeout_appeal": {
            "display_name": "Takeout Appeal",
            "type": "float",
            "base_value": 0.35,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 1.0,
            "rounding": "none",
            "category": "restaurant",
            "description": "Base chance that a passer-by wants the selected takeout dish."
        },
        "takeout_price_ratio": {
            "display_name": "Coefficient de prix takeout",
            "type": "float",
            "base_value": 0.75,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 5.0,
            "rounding": "none",
            "category": "restaurant",
            "description": "Part du prix de vente d'un plat facturée au comptoir takeout."
        },
        "takeout_priority": {
            "display_name": "Takeout Cook Priority",
            "type": "float",
            "base_value": 0.75,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 10.0,
            "rounding": "none",
            "category": "kitchen",
            "description": "How strongly autonomous cooks prioritize replenishing takeout stock against dining-room orders."
        },
        "spice_station_count": {
            "display_name": "Spice Stations",
            "type": "int",
            "base_value": 0.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 2.0,
            "rounding": "round",
            "category": "kitchen",
            "description": "How many refining stations turn a cooked dish into a superior one."
        },
        "superior_payout": {
            "display_name": "Superior Payout",
            "type": "float",
            "base_value": 1.5,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 1.0,
            "maximum": 10.0,
            "rounding": "none",
            "category": "restaurant",
            "description": "Sale price multiplier for a dish that came out of the spice station."
        },
        "shelf_slots": {
            "display_name": "Shelf Slots",
            "type": "int",
            "base_value": 3.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 1.0,
            "maximum": 12.0,
            "rounding": "round",
            "category": "kitchen",
            "description": "How many plates the shelf can hold at once."
        },
        "server_count": {
            "display_name": "Servers",
            "type": "int",
            "base_value": 0.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 6.0,
            "rounding": "round",
            "category": "restaurant",
            "description": "How many servers can work the floor at once."
        },
        "cook_count": {
            "display_name": "Cooks",
            "type": "int",
            "base_value": 0.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 6.0,
            "rounding": "round",
            "category": "kitchen",
            "description": "How many cooks can work the stations at once."
        },
        "management_console": {
            "display_name": "Management Console",
            "type": "int",
            "base_value": 1.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 1.0,
            "rounding": "round",
            "category": "restaurant",
            "description": "The management console is part of the restaurant from the first day: it carries the day's menu, the open/closed switch and the hiring board. Set it to 0 to take the console away."
        },
        "stove_count": {
            "display_name": "Stoves",
            "type": "int",
            "base_value": 1.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 1.0,
            "maximum": 4.0,
            "rounding": "round",
            "category": "kitchen",
            "description": "How many cooking stations run in parallel."
        },
        "order_memory_seconds": {
            "display_name": "Order Memory",
            "type": "float",
            "base_value": 8.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 3600.0,
            "rounding": "none",
            "category": "restaurant",
            "description": "Seconds a customer order stays readable after the player has moved out of vision range."
        },
        "order_board_slots": {
            "display_name": "Order Board Slots",
            "type": "int",
            "base_value": 0.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 40.0,
            "rounding": "round",
            "category": "restaurant",
            "description": "Orders the board can hold at once. Zero means the restaurant has no board and orders live in the player's memory."
        },
        "popularity_gain": {
            "display_name": "Gain de popularité",
            "type": "float",
            "base_value": 1.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 10000.0,
            "rounding": "none",
            "category": "restaurant",
            "description": "Popularité gagnée à chaque plat servi avec succès."
        },
        "popularity_loss": {
            "display_name": "Perte de popularité",
            "type": "float",
            "base_value": 2.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 10000.0,
            "rounding": "none",
            "category": "restaurant",
            "description": "Popularité perdue quand un client repart sans avoir été servi."
        },
        "menu_slots": {
            "display_name": "Places au menu",
            "type": "int",
            "base_value": 3.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 1.0,
            "maximum": 100.0,
            "rounding": "round",
            "category": "restaurant",
            "description": "Nombre de recettes pouvant être proposées aux clients en même temps."
        },
        "room_spawn_initial": {
            "display_name": "Population de salle",
            "type": "int",
            "base_value": 12.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 200.0,
            "rounding": "round",
            "category": "dungeon",
            "description": "Nombre de créatures présentes à l’ouverture d’une salle."
        },
        "room_spawn_reinforcement": {
            "display_name": "Renforts de salle",
            "type": "int",
            "base_value": 6.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 200.0,
            "rounding": "round",
            "category": "dungeon",
            "description": "Nombre de créatures supplémentaires qui arrivent quand la vague d’ouverture est presque tombée."
        },
        "reinforcement_trigger": {
            "display_name": "Seuil de renfort",
            "type": "float",
            "base_value": 0.35,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 1.0,
            "rounding": "none",
            "category": "dungeon",
            "description": "Fraction de la vague d’ouverture encore debout au moment où les renforts arrivent."
        },
        "reward_choices": {
            "display_name": "Choix de récompense",
            "type": "int",
            "base_value": 3.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 12.0,
            "rounding": "round",
            "category": "dungeon",
            "description": "Nombre de récompenses proposées après une salle nettoyée."
        },
        "drop_count_multiplier": {
            "display_name": "Multiplicateur de jets de butin",
            "type": "float",
            "base_value": 1.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 100.0,
            "rounding": "none",
            "category": "dungeon",
            "description": "Nombre moyen de jets effectu?s pour chaque ligne de butin. La partie enti?re est garantie et la partie d?cimale devient la probabilit? d?un jet suppl?mentaire."
        },
        "drop_magnet_range": {
            "display_name": "Portee magnetique des butins",
            "type": "float",
            "base_value": 200.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 4000.0,
            "rounding": "none",
            "category": "dungeon",
            "description": "Distance en pixels dans laquelle les ingr?dients libres sont attir?s vers le h?ros. Z?ro d?sactive le magn?tisme."
        },
        "drop_magnet_speed": {
            "display_name": "Vitesse magn?tique des butins",
            "type": "float",
            "base_value": 750.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 5000.0,
            "rounding": "none",
            "category": "dungeon",
            "description": "Vitesse en pixels par seconde ? laquelle les ingr?dients attir?s se d?placent vers le h?ros."
        },
        "insurance_rate": {
            "display_name": "Assurance de plongée",
            "type": "float",
            "base_value": 0.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 1.0,
            "rounding": "none",
            "category": "dungeon",
            "description": "Fraction des pièces et des matériaux amassés pendant la plongée qui survit à une mise hors service."
        },
        "sidewalk_traffic": {
            "display_name": "Trafic du trottoir",
            "type": "float",
            "base_value": 10.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 600.0,
            "rounding": "none",
            "category": "restaurant",
            "description": "Nombre de personnes qui passent devant le restaurant chaque minute."
        },
        "queue_capacity": {
            "display_name": "Capacité de la file",
            "type": "int",
            "base_value": 4.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 50.0,
            "rounding": "round",
            "category": "restaurant",
            "description": "Nombre de personnes qui peuvent attendre dehors avant que les suivants passent leur chemin."
        },
        "throughput_window": {
            "display_name": "Fenêtre de service",
            "type": "float",
            "base_value": 90.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 5.0,
            "maximum": 3600.0,
            "rounding": "none",
            "category": "restaurant",
            "description": "Secondes d’historique récent qu’un passant regarde pour juger la vitesse de service."
        },
        "popularity_loss_queue": {
            "display_name": "Réputation perdue en file",
            "type": "float",
            "base_value": 1.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 10000.0,
            "rounding": "none",
            "category": "restaurant",
            "description": "Réputation perdue quand quelqu’un renonce à attendre dans la file."
        },
        "table_count": {
            "display_name": "Tables ouvertes",
            "type": "int",
            "base_value": 2.0,
            "base_bonus": 0.0,
            "base_coefficient": 1.0,
            "coefficient_bonus": 0.0,
            "minimum": 0.0,
            "maximum": 25.0,
            "rounding": "round",
            "category": "restaurant",
            "description": "Nombre de tabourets ouverts au service."
        }
    },
    "game_facts": {
        "enemies_defeated": {
            "display_name": "Enemies Defeated",
            "type": "int",
            "default_value": 0,
            "category": "combat",
            "description": "Total defeated enemies.",
            "scope": "dimension"
        },
        "slime_kills": {
            "display_name": "Slimes Defeated",
            "type": "int",
            "default_value": 0,
            "category": "combat",
            "description": "Total defeated slimes.",
            "scope": "dimension"
        },
        "dishes_served": {
            "display_name": "Dishes Served",
            "type": "int",
            "default_value": 0,
            "category": "restaurant",
            "description": "Total meals delivered.",
            "scope": "dimension"
        },
        "dungeon_runs": {
            "display_name": "Dungeon Runs",
            "type": "int",
            "default_value": 0,
            "category": "dungeon",
            "description": "Total dungeon entries.",
            "scope": "dimension"
        },
        "boss_defeated": {
            "display_name": "Boss Defeated",
            "type": "bool",
            "default_value": false,
            "category": "boss",
            "description": "Set when the first boss is defeated.",
            "scope": "dimension"
        },
        "restaurant_popularity": {
            "display_name": "Popularité du restaurant",
            "type": "float",
            "default_value": 0.0,
            "category": "restaurant",
            "description": "Réputation courante du restaurant. Monte à chaque plat servi, descend à chaque client reparti sans être servi.",
            "scope": "dimension"
        },
        "master_fork_owned": {
            "display_name": "Fourchette maîtresse",
            "type": "bool",
            "default_value": false,
            "category": "dimension",
            "description": "Vrai une fois l’épreuve terminée et la fourchette maîtresse obtenue.",
            "scope": "meta"
        },
        "dimensions_cleared": {
            "display_name": "Dimensions terminées",
            "type": "int",
            "default_value": 0,
            "category": "dimension",
            "description": "Nombre de dimensions dont le boss final est tombé.",
            "scope": "meta"
        }
    },
    "upgrade_themes": {
        "core_cyan": {
            "display_name": "Cyan central",
            "shape": "hexagon",
            "states": {
                "invisible": {
                    "background_color": "#0b101a",
                    "border_color": "#18202d",
                    "text_color": "#4b5563",
                    "connector_color": "#111827",
                    "border_width": 1.0,
                    "connector_width": 1.0,
                    "connector_pattern": "dotted"
                },
                "mystery": {
                    "background_color": "#1f2937",
                    "border_color": "#64748b",
                    "text_color": "#ffffff",
                    "connector_color": "#475569",
                    "border_width": 3.0,
                    "connector_width": 2.0,
                    "connector_pattern": "dotted"
                },
                "locked": {
                    "background_color": "#123440",
                    "border_color": "#3b8998",
                    "text_color": "#cbd5e1",
                    "connector_color": "#3b8998",
                    "border_width": 3.0,
                    "connector_width": 2.0,
                    "connector_pattern": "dashed"
                },
                "available": {
                    "background_color": "#164e63",
                    "border_color": "#67e8f9",
                    "text_color": "#ecfeff",
                    "connector_color": "#67e8f9",
                    "border_width": 4.0,
                    "connector_width": 4.0,
                    "connector_pattern": "solid"
                },
                "insufficient": {
                    "background_color": "#123440",
                    "border_color": "#f97316",
                    "text_color": "#ecfeff",
                    "connector_color": "#f97316",
                    "border_width": 4.0,
                    "connector_width": 3.0,
                    "connector_pattern": "dashed"
                },
                "purchased": {
                    "background_color": "#166070",
                    "border_color": "#4ade80",
                    "text_color": "#ecfeff",
                    "connector_color": "#4ade80",
                    "border_width": 5.0,
                    "connector_width": 5.0,
                    "connector_pattern": "solid"
                }
            }
        },
        "combat_crimson": {
            "display_name": "Combat cramoisi",
            "shape": "diamond",
            "states": {
                "invisible": {
                    "background_color": "#0b101a",
                    "border_color": "#18202d",
                    "text_color": "#4b5563",
                    "connector_color": "#111827",
                    "border_width": 1.0,
                    "connector_width": 1.0,
                    "connector_pattern": "dotted"
                },
                "mystery": {
                    "background_color": "#1f2937",
                    "border_color": "#64748b",
                    "text_color": "#ffffff",
                    "connector_color": "#475569",
                    "border_width": 3.0,
                    "connector_width": 2.0,
                    "connector_pattern": "dotted"
                },
                "locked": {
                    "background_color": "#421515",
                    "border_color": "#9e4b5b",
                    "text_color": "#cbd5e1",
                    "connector_color": "#9e4b5b",
                    "border_width": 3.0,
                    "connector_width": 2.0,
                    "connector_pattern": "dashed"
                },
                "available": {
                    "background_color": "#7f1d1d",
                    "border_color": "#fb7185",
                    "text_color": "#fff1f2",
                    "connector_color": "#fb7185",
                    "border_width": 4.0,
                    "connector_width": 4.0,
                    "connector_pattern": "solid"
                },
                "insufficient": {
                    "background_color": "#421515",
                    "border_color": "#f97316",
                    "text_color": "#fff1f2",
                    "connector_color": "#f97316",
                    "border_width": 4.0,
                    "connector_width": 3.0,
                    "connector_pattern": "dashed"
                },
                "purchased": {
                    "background_color": "#8f3030",
                    "border_color": "#4ade80",
                    "text_color": "#fff1f2",
                    "connector_color": "#4ade80",
                    "border_width": 5.0,
                    "connector_width": 5.0,
                    "connector_pattern": "solid"
                }
            }
        },
        "exploration_blue": {
            "display_name": "Exploration azur",
            "shape": "circle",
            "states": {
                "invisible": {
                    "background_color": "#0b101a",
                    "border_color": "#18202d",
                    "text_color": "#4b5563",
                    "connector_color": "#111827",
                    "border_width": 1.0,
                    "connector_width": 1.0,
                    "connector_pattern": "dotted"
                },
                "mystery": {
                    "background_color": "#1f2937",
                    "border_color": "#64748b",
                    "text_color": "#ffffff",
                    "connector_color": "#475569",
                    "border_width": 3.0,
                    "connector_width": 2.0,
                    "connector_pattern": "dotted"
                },
                "locked": {
                    "background_color": "#14265a",
                    "border_color": "#416fa5",
                    "text_color": "#cbd5e1",
                    "connector_color": "#416fa5",
                    "border_width": 3.0,
                    "connector_width": 2.0,
                    "connector_pattern": "dashed"
                },
                "available": {
                    "background_color": "#1e3a8a",
                    "border_color": "#60a5fa",
                    "text_color": "#eff6ff",
                    "connector_color": "#60a5fa",
                    "border_width": 4.0,
                    "connector_width": 4.0,
                    "connector_pattern": "solid"
                },
                "insufficient": {
                    "background_color": "#14265a",
                    "border_color": "#f97316",
                    "text_color": "#eff6ff",
                    "connector_color": "#f97316",
                    "border_width": 4.0,
                    "connector_width": 3.0,
                    "connector_pattern": "dashed"
                },
                "purchased": {
                    "background_color": "#284c9d",
                    "border_color": "#4ade80",
                    "text_color": "#eff6ff",
                    "connector_color": "#4ade80",
                    "border_width": 10.0,
                    "connector_width": 10.0,
                    "connector_pattern": "solid"
                }
            }
        },
        "kitchen_amber": {
            "display_name": "Cuisine ambre",
            "shape": "square",
            "states": {
                "invisible": {
                    "background_color": "#0b101a",
                    "border_color": "#18202d",
                    "text_color": "#4b5563",
                    "connector_color": "#111827",
                    "border_width": 1.0,
                    "connector_width": 1.0,
                    "connector_pattern": "dotted"
                },
                "mystery": {
                    "background_color": "#1f2937",
                    "border_color": "#64748b",
                    "text_color": "#ffffff",
                    "connector_color": "#475569",
                    "border_width": 3.0,
                    "connector_width": 2.0,
                    "connector_pattern": "dotted"
                },
                "locked": {
                    "background_color": "#422306",
                    "border_color": "#9a7920",
                    "text_color": "#cbd5e1",
                    "connector_color": "#9a7920",
                    "border_width": 3.0,
                    "connector_width": 2.0,
                    "connector_pattern": "dashed"
                },
                "available": {
                    "background_color": "#78350f",
                    "border_color": "#fbbf24",
                    "text_color": "#fffbeb",
                    "connector_color": "#fbbf24",
                    "border_width": 4.0,
                    "connector_width": 4.0,
                    "connector_pattern": "solid"
                },
                "insufficient": {
                    "background_color": "#422306",
                    "border_color": "#f97316",
                    "text_color": "#fffbeb",
                    "connector_color": "#f97316",
                    "border_width": 4.0,
                    "connector_width": 3.0,
                    "connector_pattern": "dashed"
                },
                "purchased": {
                    "background_color": "#8a4c16",
                    "border_color": "#4ade80",
                    "text_color": "#fffbeb",
                    "connector_color": "#4ade80",
                    "border_width": 5.0,
                    "connector_width": 5.0,
                    "connector_pattern": "solid"
                }
            }
        },
        "service_green": {
            "display_name": "Service verdoyant",
            "shape": "circle",
            "states": {
                "invisible": {
                    "background_color": "#0b101a",
                    "border_color": "#18202d",
                    "text_color": "#4b5563",
                    "connector_color": "#111827",
                    "border_width": 1.0,
                    "connector_width": 1.0,
                    "connector_pattern": "dotted"
                },
                "mystery": {
                    "background_color": "#1f2937",
                    "border_color": "#64748b",
                    "text_color": "#ffffff",
                    "connector_color": "#475569",
                    "border_width": 3.0,
                    "connector_width": 2.0,
                    "connector_pattern": "dotted"
                },
                "locked": {
                    "background_color": "#0f3520",
                    "border_color": "#359a5b",
                    "text_color": "#cbd5e1",
                    "connector_color": "#359a5b",
                    "border_width": 3.0,
                    "connector_width": 2.0,
                    "connector_pattern": "dashed"
                },
                "available": {
                    "background_color": "#14532d",
                    "border_color": "#4ade80",
                    "text_color": "#f0fdf4",
                    "connector_color": "#4ade80",
                    "border_width": 4.0,
                    "connector_width": 4.0,
                    "connector_pattern": "solid"
                },
                "insufficient": {
                    "background_color": "#0f3520",
                    "border_color": "#f97316",
                    "text_color": "#f0fdf4",
                    "connector_color": "#f97316",
                    "border_width": 4.0,
                    "connector_width": 3.0,
                    "connector_pattern": "dashed"
                },
                "purchased": {
                    "background_color": "#1e6b3d",
                    "border_color": "#4ade80",
                    "text_color": "#f0fdf4",
                    "connector_color": "#4ade80",
                    "border_width": 5.0,
                    "connector_width": 5.0,
                    "connector_pattern": "solid"
                }
            }
        },
        "special_violet": {
            "display_name": "Sp?cial violet",
            "shape": "hexagon",
            "states": {
                "invisible": {
                    "background_color": "#0b101a",
                    "border_color": "#18202d",
                    "text_color": "#4b5563",
                    "connector_color": "#111827",
                    "border_width": 1.0,
                    "connector_width": 1.0,
                    "connector_pattern": "dotted"
                },
                "mystery": {
                    "background_color": "#1f2937",
                    "border_color": "#64748b",
                    "text_color": "#ffffff",
                    "connector_color": "#475569",
                    "border_width": 3.0,
                    "connector_width": 2.0,
                    "connector_pattern": "dotted"
                },
                "locked": {
                    "background_color": "#351153",
                    "border_color": "#825aa0",
                    "text_color": "#cbd5e1",
                    "connector_color": "#825aa0",
                    "border_width": 3.0,
                    "connector_width": 2.0,
                    "connector_pattern": "dashed"
                },
                "available": {
                    "background_color": "#581c87",
                    "border_color": "#c084fc",
                    "text_color": "#faf5ff",
                    "connector_color": "#c084fc",
                    "border_width": 4.0,
                    "connector_width": 4.0,
                    "connector_pattern": "solid"
                },
                "insufficient": {
                    "background_color": "#351153",
                    "border_color": "#f97316",
                    "text_color": "#faf5ff",
                    "connector_color": "#f97316",
                    "border_width": 4.0,
                    "connector_width": 3.0,
                    "connector_pattern": "dashed"
                },
                "purchased": {
                    "background_color": "#6b2a91",
                    "border_color": "#4ade80",
                    "text_color": "#faf5ff",
                    "connector_color": "#4ade80",
                    "border_width": 5.0,
                    "connector_width": 5.0,
                    "connector_pattern": "solid"
                }
            }
        }
    },
    "upgrade_nodes": {
        "big_egg_core": {
            "display_name": "BIG EGG",
            "node_text": "BEGIN",
            "detailed_text": "The central idea. Purchase it for free to reveal every progression branch.",
            "category": "core",
            "parent": "",
            "direction": "N",
            "distance": 0.0,
            "cost": 5,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "max_health",
                    "layer": "scaling",
                    "operation": "add",
                    "value": 0.5
                }
            ],
            "visibility_conditions": [],
            "reveal_conditions": [],
            "unlock_conditions": [],
            "theme": "core_cyan",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "sharp_fork": {
            "display_name": "Sharp Fork",
            "node_text": "+8 ATK",
            "detailed_text": "Sharpen the restaurant fork into a dungeon weapon. Adds 8 attack damage.",
            "category": "combat",
            "parent": "big_egg_core",
            "direction": "N",
            "distance": 175.0,
            "cost": 5,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "attack_damage",
                    "layer": "flat",
                    "operation": "add",
                    "value": 8.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.big_egg_core.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.big_egg_core.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "combat_crimson",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "sturdy_shell": {
            "display_name": "Sturdy Shell",
            "node_text": "+30 HP",
            "detailed_text": "A defensive shell. Requires combat experience and adds 30 maximum health.",
            "category": "combat",
            "parent": "sharp_fork",
            "direction": "N",
            "distance": 165.0,
            "cost": 25,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "max_health",
                    "layer": "flat",
                    "operation": "add",
                    "value": 30.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.sharp_fork.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [
                {
                    "path": "fact.enemies_defeated",
                    "operator": ">=",
                    "value": 3
                }
            ],
            "unlock_conditions": [
                {
                    "path": "fact.enemies_defeated",
                    "operator": ">=",
                    "value": 5
                }
            ],
            "theme": "combat_crimson",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "quick_feet": {
            "display_name": "Quick Feet",
            "node_text": "+35 SPD",
            "detailed_text": "Move faster in the restaurant and dungeon.",
            "category": "movement",
            "parent": "big_egg_core",
            "direction": "W",
            "distance": 190.0,
            "cost": 30,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "move_speed",
                    "layer": "flat",
                    "operation": "add",
                    "value": 35.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.big_egg_core.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.big_egg_core.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "exploration_blue",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "deep_breath": {
            "display_name": "Deep Breath",
            "node_text": "+20 STA",
            "detailed_text": "Carry 20 more seconds of stamina into each dungeon round.",
            "category": "dungeon",
            "parent": "quick_feet",
            "direction": "W",
            "distance": 170.0,
            "cost": 18,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "stamina",
                    "layer": "flat",
                    "operation": "add",
                    "value": 20.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.quick_feet.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.quick_feet.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "exploration_blue",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "hot_pan": {
            "display_name": "Hot Pan",
            "node_text": "-30% COOK",
            "detailed_text": "A hotter pan reduces cooking duration by 30 percent.",
            "category": "kitchen",
            "parent": "big_egg_core",
            "direction": "E",
            "distance": 190.0,
            "cost": 25,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "cook_speed",
                    "layer": "scaling",
                    "operation": "add",
                    "value": -0.3
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.big_egg_core.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.big_egg_core.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "kitchen_amber",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "fancy_plating": {
            "display_name": "Fancy Plating",
            "node_text": "+40% PAY",
            "detailed_text": "Presentation raises every meal payout by 40 percent through its coefficient.",
            "category": "kitchen",
            "parent": "hot_pan",
            "direction": "E",
            "distance": 170.0,
            "cost": 35,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "payout",
                    "layer": "scaling",
                    "operation": "add",
                    "value": 0.4
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.hot_pan.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.hot_pan.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "kitchen_amber",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "comfy_chairs": {
            "display_name": "Comfy Chairs",
            "node_text": "+30s PAT",
            "detailed_text": "Customers wait 30 seconds longer for each order.",
            "category": "service",
            "parent": "big_egg_core",
            "direction": "S",
            "distance": 175.0,
            "cost": 20,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "patience",
                    "layer": "flat",
                    "operation": "add",
                    "value": 30.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.big_egg_core.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.big_egg_core.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "service_green",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "second_table": {
            "display_name": "Second Table",
            "node_text": "+1 TABLE",
            "detailed_text": "Unlock a second two-seat table after proving the restaurant can serve customers.",
            "category": "service",
            "parent": "comfy_chairs",
            "direction": "SW",
            "distance": 180.0,
            "cost": 30,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "table_count",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.comfy_chairs.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [
                {
                    "path": "fact.dishes_served",
                    "operator": ">=",
                    "value": 2
                }
            ],
            "unlock_conditions": [
                {
                    "path": "fact.dishes_served",
                    "operator": ">=",
                    "value": 4
                }
            ],
            "theme": "service_green",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "third_table": {
            "display_name": "Third Table",
            "node_text": "+1 TABLE",
            "detailed_text": "Unlock the third two-seat table.",
            "category": "service",
            "parent": "second_table",
            "direction": "S",
            "distance": 170.0,
            "cost": 60,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "table_count",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.second_table.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.second_table.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "service_green",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "second_plate": {
            "display_name": "Second Plate",
            "node_text": "PLATE II",
            "detailed_text": "Add a second reusable plate to the restaurant.",
            "category": "plates",
            "parent": "big_egg_core",
            "direction": "SE",
            "distance": 185.0,
            "cost": 15,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "plates",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.big_egg_core.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.big_egg_core.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "special_violet",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "third_plate": {
            "display_name": "Third Plate",
            "node_text": "PLATE III",
            "detailed_text": "Add a third reusable plate to the restaurant.",
            "category": "plates",
            "parent": "second_plate",
            "direction": "SE",
            "distance": 165.0,
            "cost": 35,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "plates",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.second_plate.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.second_plate.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "special_violet",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "boss_trophy": {
            "display_name": "Boss Trophy",
            "node_text": "?",
            "detailed_text": "A secret payout upgrade revealed by defeating a boss.",
            "category": "boss",
            "parent": "sturdy_shell",
            "direction": "NE",
            "distance": 180.0,
            "cost": 75,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "payout",
                    "layer": "flat",
                    "operation": "add",
                    "value": 0.2
                }
            ],
            "visibility_conditions": [],
            "reveal_conditions": [
                {
                    "path": "enemies.fungling.total_killed",
                    "operator": ">=",
                    "value": true
                }
            ],
            "unlock_conditions": [
                {
                    "path": "fact.boss_defeated",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "special_violet",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "auto_stove": {
            "display_name": "Four Autonome",
            "node_text": "AUTO FOUR",
            "detailed_text": "Le four continue de cuisiner seul a 40 pourcent de la vitesse manuelle. Tenir le bouton reste plus rapide.",
            "category": "kitchen",
            "parent": "hot_pan",
            "direction": "E",
            "distance": 170.0,
            "cost": 45,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "cook_idle_rate",
                    "layer": "flat",
                    "operation": "add",
                    "value": 0.4
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.hot_pan.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.hot_pan.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "kitchen_amber",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "wider_menu": {
            "display_name": "Menu Élargi",
            "node_text": "+1 MENU",
            "detailed_text": "Une place de plus au menu: une recette supplémentaire peut être proposée aux clients.",
            "category": "restaurant",
            "parent": "comfy_chairs",
            "direction": "SE",
            "distance": 170.0,
            "cost": 40,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "menu_slots",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.comfy_chairs.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.comfy_chairs.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "service_green",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "order_board": {
            "display_name": "Ardoise des commandes",
            "node_text": "ARDOISE",
            "detailed_text": "Un tableau accroché en cuisine. Repérer une commande l'y inscrit définitivement: plus rien à mémoriser, et six commandes tiennent à l'affiche.",
            "category": "restaurant",
            "parent": "comfy_chairs",
            "direction": "S",
            "distance": 170.0,
            "cost": 35,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "order_board_slots",
                    "layer": "flat",
                    "operation": "add",
                    "value": 6.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.comfy_chairs.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.comfy_chairs.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "kitchen_amber",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "second_stove": {
            "display_name": "Second four",
            "node_text": "+1 FOUR",
            "detailed_text": "Un deuxième poste de cuisson: deux plats avancent en même temps.",
            "category": "kitchen",
            "parent": "hot_pan",
            "direction": "NW",
            "distance": 170.0,
            "cost": 55,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "stove_count",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.hot_pan.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.hot_pan.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "kitchen_amber",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "bigger_shelf": {
            "display_name": "Grande étagère",
            "node_text": "+3 ÉTAGÈRE",
            "detailed_text": "Trois emplacements de plus pour poser les plats prêts en attendant de les servir.",
            "category": "kitchen",
            "parent": "second_stove",
            "direction": "E",
            "distance": 165.0,
            "cost": 40,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "shelf_slots",
                    "layer": "flat",
                    "operation": "add",
                    "value": 3.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.second_stove.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.second_stove.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "kitchen_amber",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "spice_station": {
            "display_name": "Épices exotiques",
            "node_text": "ÉPICERIE",
            "detailed_text": "Un poste de raffinage: on y dépose un plat cuit, il en ressort supérieur — et se vend bien plus cher.",
            "category": "kitchen",
            "parent": "fancy_plating",
            "direction": "SE",
            "distance": 168.0,
            "cost": 70,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "spice_station_count",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.fancy_plating.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.fancy_plating.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "special_violet",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "rare_spices": {
            "display_name": "Épices rares",
            "node_text": "+0.3 SUP",
            "detailed_text": "Un plat supérieur se vend encore plus cher.",
            "category": "restaurant",
            "parent": "spice_station",
            "direction": "S",
            "distance": 168.0,
            "cost": 60,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "superior_payout",
                    "layer": "flat",
                    "operation": "add",
                    "value": 0.3
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.spice_station.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.spice_station.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "special_violet",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "street_window": {
            "display_name": "Comptoir takeout",
            "node_text": "TAKEOUT",
            "detailed_text": "Un poste près de la rue qui prépare en série une recette maître. Les plats s'accumulent dans sa réserve et sont servis automatiquement par une file extérieure dédiée.",
            "category": "restaurant",
            "parent": "comfy_chairs",
            "direction": "W",
            "distance": 168.0,
            "cost": 50,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "takeout_counter",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.comfy_chairs.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.comfy_chairs.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "service_green",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "deeper_counter": {
            "display_name": "Grande réserve takeout",
            "node_text": "+6 PLATS",
            "detailed_text": "Six plats de plus peuvent attendre au comptoir takeout avant que la production s'arrête.",
            "category": "restaurant",
            "parent": "street_window",
            "direction": "SW",
            "distance": 168.0,
            "cost": 45,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "takeout_stock_capacity",
                    "layer": "flat",
                    "operation": "add",
                    "value": 6.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.street_window.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.street_window.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "service_green",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "street_reputation": {
            "display_name": "Renom de rue",
            "node_text": "+0.2 ARRÊT",
            "detailed_text": "Une plus grande part des passants s'intéresse à la recette takeout sélectionnée.",
            "category": "restaurant",
            "parent": "street_window",
            "direction": "NW",
            "distance": 168.0,
            "cost": 55,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "takeout_appeal",
                    "layer": "flat",
                    "operation": "add",
                    "value": 0.2
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.street_window.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.street_window.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "service_green",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "first_server": {
            "display_name": "Premier serveur",
            "node_text": "+1 SERVEUR",
            "detailed_text": "Un poste de serveur: quelqu'un prend les commandes et porte les assiettes à ta place.",
            "category": "restaurant",
            "parent": "wider_menu",
            "direction": "SE",
            "distance": 170.0,
            "cost": 90,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "server_count",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.wider_menu.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.wider_menu.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "core_cyan",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "second_server": {
            "display_name": "Deuxième serveur",
            "node_text": "+1 SERVEUR",
            "detailed_text": "Un serveur de plus en salle.",
            "category": "restaurant",
            "parent": "first_server",
            "direction": "SE",
            "distance": 168.0,
            "cost": 160,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "server_count",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.first_server.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.first_server.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "core_cyan",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "first_cook": {
            "display_name": "Premier cuisinier",
            "node_text": "+1 CUISINIER",
            "detailed_text": "Un poste de cuisinier: il lit l'ardoise et cuisine sans toi.",
            "category": "kitchen",
            "parent": "second_stove",
            "direction": "N",
            "distance": 168.0,
            "cost": 110,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "cook_count",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.second_stove.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.second_stove.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "kitchen_amber",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        },
        "second_cook": {
            "display_name": "Deuxième cuisinier",
            "node_text": "+1 CUISINIER",
            "detailed_text": "Un cuisinier de plus aux postes.",
            "category": "kitchen",
            "parent": "first_cook",
            "direction": "NE",
            "distance": 168.0,
            "cost": 190,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "cook_count",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1.0
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.first_cook.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [],
            "unlock_conditions": [
                {
                    "path": "upgrade_nodes.first_cook.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "theme": "kitchen_amber",
            "image_path": "",
            "show_parent_link": true,
            "on_purchase": []
        }
    },
    "biomes": {
        "mossy_cellar": {
            "display_name": "Cave moussue",
            "description": "La cave humide sous le restaurant.",
            "floor_color": "#18233a",
            "wall_color": "#53617b",
            "accent_color": "#31466f",
            "ambient_color": "#ffffff",
            "ambient_energy": 1.0,
            "visuals": {},
            "vfx": {},
            "on_enter": []
        },
        "feather_roost": {
            "display_name": "Perchoir de plumes",
            "description": "Un nid qui ne dort jamais.",
            "floor_color": "#2a2118",
            "wall_color": "#7b6a53",
            "accent_color": "#6f5a31",
            "ambient_color": "#ffffff",
            "ambient_energy": 1.0,
            "visuals": {},
            "vfx": {},
            "on_enter": []
        },
        "spore_gallery": {
            "display_name": "Galerie des spores",
            "description": "De longs tunnels éclairés par des chapeaux respirants.",
            "floor_color": "#21183a",
            "wall_color": "#6b537b",
            "accent_color": "#55316f",
            "ambient_color": "#ffffff",
            "ambient_energy": 1.0,
            "visuals": {},
            "vfx": {},
            "on_enter": []
        },
        "ember_burrow": {
            "display_name": "Terrier de braise",
            "description": "La chaleur monte à travers la pierre fendue.",
            "floor_color": "#3a1818",
            "wall_color": "#7b5353",
            "accent_color": "#6f3131",
            "ambient_color": "#ffffff",
            "ambient_energy": 1.0,
            "visuals": {},
            "vfx": {},
            "on_enter": []
        },
        "frozen_pantry": {
            "display_name": "Garde-manger gelé",
            "description": "Une réserve qui a survécu à ses cuisiniers.",
            "floor_color": "#18303a",
            "wall_color": "#53737b",
            "accent_color": "#316a6f",
            "ambient_color": "#ffffff",
            "ambient_energy": 1.0,
            "visuals": {},
            "vfx": {},
            "on_enter": []
        },
        "void_kitchen": {
            "display_name": "Cuisine du vide",
            "description": "La dernière cuisine, au-delà du cinquième biome.",
            "floor_color": "#120c1c",
            "wall_color": "#3d3352",
            "accent_color": "#2b1f45",
            "ambient_color": "#ffffff",
            "ambient_energy": 1.0,
            "visuals": {},
            "vfx": {},
            "on_enter": []
        },
        "fork_sanctum": {
            "display_name": "Sanctuaire de la fourchette",
            "description": "Un unique biome scellé qui garde la fourchette maîtresse.",
            "floor_color": "#1c1230",
            "wall_color": "#6d53a0",
            "accent_color": "#46318f",
            "ambient_color": "#ffffff",
            "ambient_energy": 1.0,
            "visuals": {},
            "vfx": {},
            "on_enter": []
        }
    },
    "dimensions": {
        "dimension_one": {
            "display_name": "Première dimension",
            "description": "Là où commence toute cuisinière.",
            "order": 1,
            "visuals": {},
            "vfx": {},
            "on_enter": [],
            "on_complete": []
        },
        "dimension_two": {
            "display_name": "Deuxième dimension",
            "description": "Les mêmes recettes, des salles plus dures.",
            "order": 2,
            "visuals": {},
            "vfx": {},
            "on_enter": [],
            "on_complete": []
        },
        "dimension_three": {
            "display_name": "Troisième dimension",
            "description": "Sols froids et longs couloirs.",
            "order": 3,
            "visuals": {},
            "vfx": {},
            "on_enter": [],
            "on_complete": []
        },
        "dimension_four": {
            "display_name": "Quatrième dimension",
            "description": "Le dernier cycle. Son sixième biome reste scellé sans la fourchette maîtresse.",
            "order": 4,
            "visuals": {},
            "vfx": {},
            "on_enter": [],
            "on_complete": []
        },
        "fork_trial": {
            "display_name": "Épreuve de la fourchette",
            "description": "Un seul biome scellé. Son gardien détient la fourchette maîtresse.",
            "order": 0,
            "visuals": {},
            "vfx": {},
            "on_enter": [],
            "on_complete": [
                {
                    "op": "set",
                    "path": "fact.master_fork_owned",
                    "value": true
                }
            ]
        }
    },
    "rewards": {
        "whetted_edge": {
            "display_name": "Tranchant affûté",
            "description": "+20 % de dégâts d’attaque pour le reste de la plongée.",
            "weight": 3.0,
            "modifiers": [
                {
                    "variable": "attack_damage",
                    "layer": "scaling",
                    "operation": "add",
                    "value": 0.2
                }
            ],
            "on_taken": []
        },
        "second_wind": {
            "display_name": "Second souffle",
            "description": "+25 d’endurance pour le reste de la plongée.",
            "weight": 3.0,
            "modifiers": [
                {
                    "variable": "stamina",
                    "layer": "flat",
                    "operation": "add",
                    "value": 25.0
                }
            ],
            "on_taken": []
        },
        "light_step": {
            "display_name": "Pas léger",
            "description": "+15 % de vitesse pour le reste de la plongée.",
            "weight": 3.0,
            "modifiers": [
                {
                    "variable": "move_speed",
                    "layer": "scaling",
                    "operation": "add",
                    "value": 0.15
                }
            ],
            "on_taken": []
        },
        "thick_hide": {
            "display_name": "Cuir épais",
            "description": "+30 points de vie maximum pour le reste de la plongée.",
            "weight": 3.0,
            "modifiers": [
                {
                    "variable": "max_health",
                    "layer": "flat",
                    "operation": "add",
                    "value": 30.0
                }
            ],
            "on_taken": []
        },
        "quiet_halls": {
            "display_name": "Couloirs calmes",
            "description": "Les salles contiennent 3 créatures de moins.",
            "weight": 2.0,
            "modifiers": [
                {
                    "variable": "room_spawn_initial",
                    "layer": "flat",
                    "operation": "add",
                    "value": -3.0
                }
            ],
            "on_taken": []
        },
        "crowded_halls": {
            "display_name": "Couloirs bondés",
            "description": "Les salles contiennent 4 créatures de plus, et chaque coup frappe 35 % plus fort.",
            "weight": 1.0,
            "modifiers": [
                {
                    "variable": "room_spawn_initial",
                    "layer": "flat",
                    "operation": "add",
                    "value": 4.0
                },
                {
                    "variable": "attack_damage",
                    "layer": "scaling",
                    "operation": "add",
                    "value": 0.35
                }
            ],
            "on_taken": []
        },
        "deep_pockets": {
            "display_name": "Poches profondes",
            "description": "L’assurance couvre 25 % de plus de la plongée.",
            "weight": 2.0,
            "modifiers": [
                {
                    "variable": "insurance_rate",
                    "layer": "flat",
                    "operation": "add",
                    "value": 0.25
                }
            ],
            "on_taken": []
        },
        "sharp_eyes": {
            "display_name": "Œil aiguisé",
            "description": "+120 de vision, utile de retour au restaurant.",
            "weight": 1.0,
            "modifiers": [
                {
                    "variable": "player_vision",
                    "layer": "flat",
                    "operation": "add",
                    "value": 120.0
                }
            ],
            "on_taken": []
        }
    },
    "room_elements": {
        "crate": {
            "display_name": "Caisse",
            "description": "Une caisse de ravitaillement qui se casse.",
            "kind": "destructible",
            "shape": "square",
            "color": "#8a6a3d",
            "size": 1.0,
            "health": 12.0,
            "damage": 0.0,
            "trigger_radius": 0.0,
            "rearm_delay": 0.0,
            "coins": 0,
            "solid": true,
            "drops": [
                {
                    "ingredient_id": "egg",
                    "chance": 100.0
                }
            ],
            "visuals": {},
            "vfx": {},
            "on_destroyed": [],
            "on_triggered": []
        },
        "spore_pod": {
            "display_name": "Cosse à spores",
            "description": "Éclate en spores utilisables.",
            "kind": "destructible",
            "shape": "circle",
            "color": "#7d5ba6",
            "size": 0.9,
            "health": 8.0,
            "damage": 0.0,
            "trigger_radius": 0.0,
            "rearm_delay": 0.0,
            "coins": 0,
            "solid": false,
            "drops": [
                {
                    "ingredient_id": "mushroom",
                    "chance": 100.0
                }
            ],
            "visuals": {},
            "vfx": {},
            "on_destroyed": [],
            "on_triggered": []
        },
        "floor_spike": {
            "display_name": "Pique au sol",
            "description": "Se déclenche quand on marche dessus.",
            "kind": "trap",
            "shape": "triangle",
            "color": "#b04a4a",
            "size": 0.8,
            "health": 0.0,
            "damage": 12.0,
            "trigger_radius": 34.0,
            "rearm_delay": 2.5,
            "coins": 0,
            "solid": false,
            "drops": [],
            "visuals": {},
            "vfx": {},
            "on_destroyed": [],
            "on_triggered": []
        },
        "supply_chest": {
            "display_name": "Coffre de ravitaillement",
            "description": "Contient des pièces et des matériaux.",
            "kind": "chest",
            "shape": "square",
            "color": "#d4a017",
            "size": 1.1,
            "health": 0.0,
            "damage": 0.0,
            "trigger_radius": 0.0,
            "rearm_delay": 0.0,
            "coins": 25,
            "solid": true,
            "drops": [
                {
                    "ingredient_id": "beast_meat",
                    "chance": 100.0
                }
            ],
            "visuals": {},
            "vfx": {},
            "on_destroyed": [],
            "on_triggered": []
        },
        "wandering_cook": {
            "display_name": "Cuisinier errant",
            "description": "Un cuisinier qui a quelque chose à dire.",
            "kind": "npc",
            "shape": "hexagon",
            "color": "#6ec8a8",
            "size": 1.0,
            "health": 0.0,
            "damage": 0.0,
            "trigger_radius": 0.0,
            "rearm_delay": 0.0,
            "coins": 0,
            "solid": true,
            "drops": [],
            "visuals": {},
            "vfx": {},
            "on_destroyed": [],
            "on_triggered": []
        },
        "back_alley_stall": {
            "display_name": "Étal de ruelle",
            "description": "Vend ce qu’il a trouvé.",
            "kind": "shop",
            "shape": "square",
            "color": "#c77dff",
            "size": 1.3,
            "health": 0.0,
            "damage": 0.0,
            "trigger_radius": 0.0,
            "rearm_delay": 0.0,
            "coins": 0,
            "solid": true,
            "drops": [],
            "visuals": {},
            "vfx": {},
            "on_destroyed": [],
            "on_triggered": []
        }
    },
    "rooms": {
        "dimension_one_l1": {
            "display_name": "Cave moussue L1",
            "description": "",
            "dimension": "dimension_one",
            "level": 1,
            "biome": "mossy_cellar",
            "spawn_initial": 2,
            "spawn_reinforcement": 1,
            "reinforcement_waves": 3,
            "reward_choices": 0,
            "max_per_run": 0,
            "exit_offset": 1,
            "exit_level": 0,
            "reinforcement_duration": 5.0,
            "initial_enemies": {
                "chicken_beast": 1.0
            },
            "reinforcement_enemies": {
                "chicken_beast": 1.0
            },
            "rewards": {},
            "modifiers": [],
            "elements": {},
            "behaviours": [],
            "replaces": [],
            "conditions": [],
            "ends_dimension": false,
            "visuals": {},
            "vfx": {},
            "on_enter": [],
            "on_cleared": [],
            "on_blocked": []
        },
        "dimension_one_l2": {
            "display_name": "Cave moussue L2",
            "description": "",
            "dimension": "dimension_one",
            "level": 2,
            "biome": "mossy_cellar",
            "spawn_initial": 2,
            "spawn_reinforcement": 1,
            "reinforcement_waves": 1,
            "reward_choices": 0,
            "max_per_run": 0,
            "exit_offset": 1,
            "exit_level": 0,
            "reinforcement_duration": 1.0,
            "initial_enemies": {
                "slime": 1.0,
                "chicken_beast": 2.0
            },
            "reinforcement_enemies": {
                "chicken_beast": 1.0
            },
            "rewards": {},
            "modifiers": [],
            "elements": {},
            "behaviours": [],
            "replaces": [],
            "conditions": [],
            "ends_dimension": false,
            "visuals": {},
            "vfx": {},
            "on_enter": [],
            "on_cleared": [],
            "on_blocked": []
        },
        "dimension_one_l3": {
            "display_name": "Cave moussue L3",
            "description": "",
            "dimension": "dimension_one",
            "level": 3,
            "biome": "mossy_cellar",
            "spawn_initial": 2,
            "spawn_reinforcement": 0,
            "reinforcement_waves": 1,
            "reward_choices": 0,
            "max_per_run": 0,
            "exit_offset": 1,
            "exit_level": 0,
            "reinforcement_duration": 0.0,
            "initial_enemies": {
                "fungling": 1.0
            },
            "reinforcement_enemies": {},
            "rewards": {},
            "modifiers": [],
            "elements": {},
            "behaviours": [],
            "replaces": [],
            "conditions": [],
            "ends_dimension": false,
            "visuals": {},
            "vfx": {},
            "on_enter": [],
            "on_cleared": [],
            "on_blocked": []
        },
        "dimension_one_l4": {
            "display_name": "Cave moussue L4",
            "description": "",
            "dimension": "dimension_one",
            "level": 4,
            "biome": "mossy_cellar",
            "spawn_initial": 2,
            "spawn_reinforcement": 0,
            "reinforcement_waves": 1,
            "reward_choices": 0,
            "max_per_run": 0,
            "exit_offset": 1,
            "exit_level": 0,
            "reinforcement_duration": 0.0,
            "initial_enemies": {
                "pepper_imp": 1.0
            },
            "reinforcement_enemies": {},
            "rewards": {},
            "modifiers": [],
            "elements": {},
            "behaviours": [],
            "replaces": [],
            "conditions": [],
            "ends_dimension": false,
            "visuals": {},
            "vfx": {},
            "on_enter": [],
            "on_cleared": [],
            "on_blocked": []
        }
    },
    "languages": [
        "fr",
        "en"
    ],
    "localization": {
        "attack_patterns.boar_circle.display_name": {
            "default": "Onde circulaire"
        },
        "attack_patterns.chicken_cone.display_name": {
            "default": "Coup de bec"
        },
        "attack_patterns.fungling_wide_cone.display_name": {
            "default": "Souffle de spores"
        },
        "attack_patterns.orbit_swipe.display_name": {
            "default": "Balayage orbital"
        },
        "attack_patterns.sticky_circle.display_name": {
            "default": "Cercle collant"
        },
        "biomes.ember_burrow.description": {
            "default": "La chaleur monte à travers la pierre fendue."
        },
        "biomes.ember_burrow.display_name": {
            "default": "Terrier de braise"
        },
        "biomes.feather_roost.description": {
            "default": "Un nid qui ne dort jamais."
        },
        "biomes.feather_roost.display_name": {
            "default": "Perchoir de plumes"
        },
        "biomes.fork_sanctum.description": {
            "default": "Un unique biome scellé qui garde la fourchette maîtresse."
        },
        "biomes.fork_sanctum.display_name": {
            "default": "Sanctuaire de la fourchette"
        },
        "biomes.frozen_pantry.description": {
            "default": "Une réserve qui a survécu à ses cuisiniers."
        },
        "biomes.frozen_pantry.display_name": {
            "default": "Garde-manger gelé"
        },
        "biomes.mossy_cellar.description": {
            "default": "La cave humide sous le restaurant."
        },
        "biomes.mossy_cellar.display_name": {
            "default": "Cave moussue"
        },
        "biomes.spore_gallery.description": {
            "default": "De longs tunnels éclairés par des chapeaux respirants."
        },
        "biomes.spore_gallery.display_name": {
            "default": "Galerie des spores"
        },
        "biomes.void_kitchen.description": {
            "default": "La dernière cuisine, au-delà du cinquième biome."
        },
        "biomes.void_kitchen.display_name": {
            "default": "Cuisine du vide"
        },
        "customer_profiles.foodie.display_name": {
            "default": "Foodie"
        },
        "customer_profiles.generous_guest.display_name": {
            "default": "Generous Guest"
        },
        "customer_profiles.regular.display_name": {
            "default": "Regular"
        },
        "dimensions.dimension_four.description": {
            "default": "Le dernier cycle. Son sixième biome reste scellé sans la fourchette maîtresse."
        },
        "dimensions.dimension_four.display_name": {
            "default": "Quatrième dimension"
        },
        "dimensions.dimension_one.description": {
            "default": "Là où commence toute cuisinière."
        },
        "dimensions.dimension_one.display_name": {
            "default": "Première dimension"
        },
        "dimensions.dimension_three.description": {
            "default": "Sols froids et longs couloirs."
        },
        "dimensions.dimension_three.display_name": {
            "default": "Troisième dimension"
        },
        "dimensions.dimension_two.description": {
            "default": "Les mêmes recettes, des salles plus dures."
        },
        "dimensions.dimension_two.display_name": {
            "default": "Deuxième dimension"
        },
        "dimensions.fork_trial.description": {
            "default": "Un seul biome scellé. Son gardien détient la fourchette maîtresse."
        },
        "dimensions.fork_trial.display_name": {
            "default": "Épreuve de la fourchette"
        },
        "employees.gaspard.description": {
            "default": "Solide au fourneau."
        },
        "employees.gaspard.display_name": {
            "default": "Gaspard"
        },
        "employees.iris.description": {
            "default": "Dresse comme personne."
        },
        "employees.iris.display_name": {
            "default": "Iris"
        },
        "employees.margot.description": {
            "default": "Fait payer le sourire."
        },
        "employees.margot.display_name": {
            "default": "Margot"
        },
        "employees.pablo.description": {
            "default": "Marche vite, parle peu."
        },
        "employees.pablo.display_name": {
            "default": "Pablo"
        },
        "employees.sacha.description": {
            "default": "Ne laisse jamais une assiette traîner."
        },
        "employees.sacha.display_name": {
            "default": "Sacha"
        },
        "enemies.boar_brute.display_name": {
            "default": "Boar Brute"
        },
        "enemies.chicken_beast.display_name": {
            "default": "Chicken Beast"
        },
        "enemies.fungling.display_name": {
            "default": "Fungling"
        },
        "enemies.pepper_imp.display_name": {
            "default": "Pepper Imp"
        },
        "enemies.slime.display_name": {
            "default": "Slime"
        },
        "fact.boss_defeated.description": {
            "default": "Set when the first boss is defeated."
        },
        "fact.boss_defeated.display_name": {
            "default": "Boss Defeated"
        },
        "fact.dimensions_cleared.description": {
            "default": "Nombre de dimensions dont le boss final est tombé."
        },
        "fact.dimensions_cleared.display_name": {
            "default": "Dimensions terminées"
        },
        "fact.dishes_served.description": {
            "default": "Total meals delivered."
        },
        "fact.dishes_served.display_name": {
            "default": "Dishes Served"
        },
        "fact.dungeon_runs.description": {
            "default": "Total dungeon entries."
        },
        "fact.dungeon_runs.display_name": {
            "default": "Dungeon Runs"
        },
        "fact.enemies_defeated.description": {
            "default": "Total defeated enemies."
        },
        "fact.enemies_defeated.display_name": {
            "default": "Enemies Defeated"
        },
        "fact.master_fork_owned.description": {
            "default": "Vrai une fois l’épreuve terminée et la fourchette maîtresse obtenue."
        },
        "fact.master_fork_owned.display_name": {
            "default": "Fourchette maîtresse"
        },
        "fact.restaurant_popularity.description": {
            "default": "Réputation courante du restaurant. Monte à chaque plat servi, descend à chaque client reparti sans être servi."
        },
        "fact.restaurant_popularity.display_name": {
            "default": "Popularité du restaurant"
        },
        "fact.slime_kills.description": {
            "default": "Total defeated slimes."
        },
        "fact.slime_kills.display_name": {
            "default": "Slimes Defeated"
        },
        "ingredients.beast_meat.description": {
            "default": "A hearty cut from a dungeon brute."
        },
        "ingredients.beast_meat.display_name": {
            "default": "Beast Meat"
        },
        "ingredients.egg.description": {
            "default": "Warm dungeon egg."
        },
        "ingredients.egg.display_name": {
            "default": "Egg"
        },
        "ingredients.ember_pepper.description": {
            "default": "A pepper that stays pleasantly warm."
        },
        "ingredients.ember_pepper.display_name": {
            "default": "Ember Pepper"
        },
        "ingredients.mushroom.description": {
            "default": "A plump cave mushroom."
        },
        "ingredients.mushroom.display_name": {
            "default": "Mushroom"
        },
        "ingredients.slime_jelly.description": {
            "default": "Oddly appetizing green jelly."
        },
        "ingredients.slime_jelly.display_name": {
            "default": "Slime Jelly"
        },
        "movement_patterns.big_leap.display_name": {
            "default": "Big Leap"
        },
        "movement_patterns.linear.display_name": {
            "default": "Linear"
        },
        "movement_patterns.patrol.display_name": {
            "default": "Random Patrol"
        },
        "movement_patterns.small_hop.display_name": {
            "default": "Small Hop"
        },
        "movement_patterns.static.display_name": {
            "default": "Static"
        },
        "player_configs.default_player.display_name": {
            "default": "Default Player"
        },
        "recipes.beast_hash.display_name": {
            "default": "Beast Egg Hash"
        },
        "recipes.fried_egg.display_name": {
            "default": "Fried Egg"
        },
        "recipes.mushroom_omelette.display_name": {
            "default": "Mushroom Omelette"
        },
        "recipes.pepper_scramble.display_name": {
            "default": "Pepper Jelly Scramble"
        },
        "recipes.slime_omelette.display_name": {
            "default": "Slime Omelette"
        },
        "restaurant_elements.basic_console.description": {
            "fr": "Le tableau de commande du magasin.",
            "en": "Le tableau de commande du magasin."
        },
        "restaurant_elements.basic_console.display_name": {
            "fr": "Console de gestion",
            "en": "Console de gestion"
        },
        "restaurant_elements.basic_dishwasher.description": {
            "fr": "Lave la vaisselle sale.",
            "en": "Lave la vaisselle sale."
        },
        "restaurant_elements.basic_dishwasher.display_name": {
            "fr": "Plonge",
            "en": "Plonge"
        },
        "restaurant_elements.basic_order_board.description": {
            "fr": "La file de travail du restaurant.",
            "en": "La file de travail du restaurant."
        },
        "restaurant_elements.basic_order_board.display_name": {
            "fr": "Ardoise",
            "en": "Ardoise"
        },
        "restaurant_elements.basic_shelf.description": {
            "fr": "Range les assiettes prêtes.",
            "en": "Range les assiettes prêtes."
        },
        "restaurant_elements.basic_shelf.display_name": {
            "fr": "Étagère",
            "en": "Étagère"
        },
        "restaurant_elements.basic_stove.description": {
            "fr": "Le poste de cuisson d'origine.",
            "en": "Le poste de cuisson d'origine."
        },
        "restaurant_elements.basic_stove.display_name": {
            "fr": "Four de base",
            "en": "Four de base"
        },
        "restaurant_elements.basic_table.description": {
            "fr": "Une place assise.",
            "en": "Une place assise."
        },
        "restaurant_elements.basic_table.display_name": {
            "fr": "Tabouret",
            "en": "Tabouret"
        },
        "restaurant_elements.basic_takeout_counter.description": {
            "fr": "Vend à la rue, adossé au mur nord.",
            "en": "Vend à la rue, adossé au mur nord."
        },
        "restaurant_elements.basic_takeout_counter.display_name": {
            "fr": "Comptoir takeout",
            "en": "Comptoir takeout"
        },
        "restaurant_elements.basic_trash.description": {
            "fr": "Jette un plat raté.",
            "en": "Jette un plat raté."
        },
        "restaurant_elements.basic_trash.display_name": {
            "fr": "Poubelle",
            "en": "Poubelle"
        },
        "rewards.crowded_halls.description": {
            "default": "Les salles contiennent 4 créatures de plus, et chaque coup frappe 35 % plus fort."
        },
        "rewards.crowded_halls.display_name": {
            "default": "Couloirs bondés"
        },
        "rewards.deep_pockets.description": {
            "default": "L’assurance couvre 25 % de plus de la plongée."
        },
        "rewards.deep_pockets.display_name": {
            "default": "Poches profondes"
        },
        "rewards.light_step.description": {
            "default": "+15 % de vitesse pour le reste de la plongée."
        },
        "rewards.light_step.display_name": {
            "default": "Pas léger"
        },
        "rewards.quiet_halls.description": {
            "default": "Les salles contiennent 3 créatures de moins."
        },
        "rewards.quiet_halls.display_name": {
            "default": "Couloirs calmes"
        },
        "rewards.second_wind.description": {
            "default": "+25 d’endurance pour le reste de la plongée."
        },
        "rewards.second_wind.display_name": {
            "default": "Second souffle"
        },
        "rewards.sharp_eyes.description": {
            "default": "+120 de vision, utile de retour au restaurant."
        },
        "rewards.sharp_eyes.display_name": {
            "default": "Œil aiguisé"
        },
        "rewards.thick_hide.description": {
            "default": "+30 points de vie maximum pour le reste de la plongée."
        },
        "rewards.thick_hide.display_name": {
            "default": "Cuir épais"
        },
        "rewards.whetted_edge.description": {
            "default": "+20 % de dégâts d’attaque pour le reste de la plongée."
        },
        "rewards.whetted_edge.display_name": {
            "default": "Tranchant affûté"
        },
        "room_elements.back_alley_stall.description": {
            "default": "Vend ce qu’il a trouvé."
        },
        "room_elements.back_alley_stall.display_name": {
            "default": "Étal de ruelle"
        },
        "room_elements.crate.description": {
            "default": "Une caisse de ravitaillement qui se casse."
        },
        "room_elements.crate.display_name": {
            "default": "Caisse"
        },
        "room_elements.floor_spike.description": {
            "default": "Se déclenche quand on marche dessus."
        },
        "room_elements.floor_spike.display_name": {
            "default": "Pique au sol"
        },
        "room_elements.spore_pod.description": {
            "default": "Éclate en spores utilisables."
        },
        "room_elements.spore_pod.display_name": {
            "default": "Cosse à spores"
        },
        "room_elements.supply_chest.description": {
            "default": "Contient des pièces et des matériaux."
        },
        "room_elements.supply_chest.display_name": {
            "default": "Coffre de ravitaillement"
        },
        "room_elements.wandering_cook.description": {
            "default": "Un cuisinier qui a quelque chose à dire."
        },
        "room_elements.wandering_cook.display_name": {
            "default": "Cuisinier errant"
        },
        "rooms.dimension_one_l1.display_name": {
            "default": "Cave moussue L1"
        },
        "rooms.dimension_one_l2.display_name": {
            "default": "Cave moussue L2"
        },
        "rooms.dimension_one_l3.display_name": {
            "default": "Cave moussue L3"
        },
        "rooms.dimension_one_l4.display_name": {
            "default": "Cave moussue L4"
        },
        "stat.attack_damage.description": {
            "default": "Final player attack damage; its base value comes from the active player profile."
        },
        "stat.attack_damage.display_name": {
            "default": "Attack Damage"
        },
        "stat.cook_count.description": {
            "default": "How many cooks can work the stations at once."
        },
        "stat.cook_count.display_name": {
            "default": "Cooks"
        },
        "stat.cook_idle_rate.description": {
            "default": "Fraction de la vitesse manuelle que le four conserve quand personne ne tient le bouton. 0 = il a besoin du joueur."
        },
        "stat.cook_idle_rate.display_name": {
            "default": "Unattended Cooking Rate"
        },
        "stat.cook_speed.description": {
            "default": "Multiplier applied to recipe cooking duration. 0.70 means 30 percent shorter."
        },
        "stat.cook_speed.display_name": {
            "default": "Cooking Duration Multiplier"
        },
        "stat.drop_count_multiplier.description": {
            "default": "Nombre moyen de jets effectu?s pour chaque ligne de butin. La partie enti?re est garantie et la partie d?cimale devient la probabilit? d?un jet suppl?mentaire."
        },
        "stat.drop_count_multiplier.display_name": {
            "default": "Multiplicateur de jets de butin"
        },
        "stat.drop_magnet_range.description": {
            "default": "Distance en pixels dans laquelle les ingr?dients libres sont attir?s vers le h?ros. Z?ro d?sactive le magn?tisme."
        },
        "stat.drop_magnet_range.display_name": {
            "default": "Portee magnetique des butins"
        },
        "stat.drop_magnet_speed.description": {
            "default": "Vitesse en pixels par seconde ? laquelle les ingr?dients attir?s se d?placent vers le h?ros."
        },
        "stat.drop_magnet_speed.display_name": {
            "default": "Vitesse magn?tique des butins"
        },
        "stat.insurance_rate.description": {
            "default": "Fraction des pièces et des matériaux amassés pendant la plongée qui survit à une mise hors service."
        },
        "stat.insurance_rate.display_name": {
            "default": "Assurance de plongée"
        },
        "stat.management_console.description": {
            "default": "The management console is part of the restaurant from the first day: it carries the day's menu, the open/closed switch and the hiring board. Set it to 0 to take the console away."
        },
        "stat.management_console.display_name": {
            "default": "Management Console"
        },
        "stat.max_health.description": {
            "default": "Final player health; its base value comes from the active player profile."
        },
        "stat.max_health.display_name": {
            "default": "Maximum Health"
        },
        "stat.menu_slots.description": {
            "default": "Nombre de recettes pouvant être proposées aux clients en même temps."
        },
        "stat.menu_slots.display_name": {
            "default": "Places au menu"
        },
        "stat.move_speed.description": {
            "default": "Final player movement speed; its base value comes from the active player profile."
        },
        "stat.move_speed.display_name": {
            "default": "Movement Speed"
        },
        "stat.order_board_slots.description": {
            "default": "Orders the board can hold at once. Zero means the restaurant has no board and orders live in the player's memory."
        },
        "stat.order_board_slots.display_name": {
            "default": "Order Board Slots"
        },
        "stat.order_memory_seconds.description": {
            "default": "Seconds a customer order stays readable after the player has moved out of vision range."
        },
        "stat.order_memory_seconds.display_name": {
            "default": "Order Memory"
        },
        "stat.patience.description": {
            "default": "Final patience; its base value comes from the customer profile."
        },
        "stat.patience.display_name": {
            "default": "Customer Patience"
        },
        "stat.payout.description": {
            "default": "Multiplier applied to each meal payout."
        },
        "stat.payout.display_name": {
            "default": "Meal Payout Multiplier"
        },
        "stat.plates.description": {
            "default": "Total reusable plate capacity."
        },
        "stat.plates.display_name": {
            "default": "Reusable Plates"
        },
        "stat.player_vision.description": {
            "default": "Distance in pixels within which the player can read a customer order."
        },
        "stat.player_vision.display_name": {
            "default": "Player Vision"
        },
        "stat.popularity_gain.description": {
            "default": "Popularité gagnée à chaque plat servi avec succès."
        },
        "stat.popularity_gain.display_name": {
            "default": "Gain de popularité"
        },
        "stat.popularity_loss.description": {
            "default": "Popularité perdue quand un client repart sans avoir été servi."
        },
        "stat.popularity_loss.display_name": {
            "default": "Perte de popularité"
        },
        "stat.popularity_loss_queue.description": {
            "default": "Réputation perdue quand quelqu’un renonce à attendre dans la file."
        },
        "stat.popularity_loss_queue.display_name": {
            "default": "Réputation perdue en file"
        },
        "stat.queue_capacity.description": {
            "default": "Nombre de personnes qui peuvent attendre dehors avant que les suivants passent leur chemin."
        },
        "stat.queue_capacity.display_name": {
            "default": "Capacité de la file"
        },
        "stat.reinforcement_trigger.description": {
            "default": "Fraction de la vague d’ouverture encore debout au moment où les renforts arrivent."
        },
        "stat.reinforcement_trigger.display_name": {
            "default": "Seuil de renfort"
        },
        "stat.reward_choices.description": {
            "default": "Nombre de récompenses proposées après une salle nettoyée."
        },
        "stat.reward_choices.display_name": {
            "default": "Choix de récompense"
        },
        "stat.room_spawn_initial.description": {
            "default": "Nombre de créatures présentes à l’ouverture d’une salle."
        },
        "stat.room_spawn_initial.display_name": {
            "default": "Population de salle"
        },
        "stat.room_spawn_reinforcement.description": {
            "default": "Nombre de créatures supplémentaires qui arrivent quand la vague d’ouverture est presque tombée."
        },
        "stat.room_spawn_reinforcement.display_name": {
            "default": "Renforts de salle"
        },
        "stat.server_count.description": {
            "default": "How many servers can work the floor at once."
        },
        "stat.server_count.display_name": {
            "default": "Servers"
        },
        "stat.shelf_slots.description": {
            "default": "How many plates the shelf can hold at once."
        },
        "stat.shelf_slots.display_name": {
            "default": "Shelf Slots"
        },
        "stat.sidewalk_traffic.description": {
            "default": "Nombre de personnes qui passent devant le restaurant chaque minute."
        },
        "stat.sidewalk_traffic.display_name": {
            "default": "Trafic du trottoir"
        },
        "stat.spice_station_count.description": {
            "default": "How many refining stations turn a cooked dish into a superior one."
        },
        "stat.spice_station_count.display_name": {
            "default": "Spice Stations"
        },
        "stat.stamina.description": {
            "default": "Final stamina; its base value comes from the active player profile."
        },
        "stat.stamina.display_name": {
            "default": "Dungeon Stamina"
        },
        "stat.stove_count.description": {
            "default": "How many cooking stations run in parallel."
        },
        "stat.stove_count.display_name": {
            "default": "Stoves"
        },
        "stat.superior_payout.description": {
            "default": "Sale price multiplier for a dish that came out of the spice station."
        },
        "stat.superior_payout.display_name": {
            "default": "Superior Payout"
        },
        "stat.table_count.description": {
            "default": "Nombre de tabourets ouverts au service."
        },
        "stat.table_count.display_name": {
            "default": "Tables ouvertes"
        },
        "stat.takeout_appeal.description": {
            "default": "Base chance that a passer-by wants the selected takeout dish."
        },
        "stat.takeout_appeal.display_name": {
            "default": "Takeout Appeal"
        },
        "stat.takeout_cook_speed.description": {
            "default": "Production rate multiplier while the player or a cook works at the takeout counter."
        },
        "stat.takeout_cook_speed.display_name": {
            "default": "Takeout Cooking Speed"
        },
        "stat.takeout_counter.description": {
            "default": "Set to 1 once the takeout counter by the street is installed."
        },
        "stat.takeout_counter.display_name": {
            "default": "Takeout Counter"
        },
        "stat.takeout_price_ratio.description": {
            "fr": "Part du prix de vente d'un plat facturée au comptoir takeout.",
            "en": "Part of the dish sale price charged at the takeout counter.",
            "default": "Part du prix de vente d'un plat facturée au comptoir takeout."
        },
        "stat.takeout_price_ratio.display_name": {
            "fr": "Coefficient de prix takeout",
            "en": "Takeout Price Ratio",
            "default": "Coefficient de prix takeout"
        },
        "stat.takeout_priority.description": {
            "default": "How strongly autonomous cooks prioritize replenishing takeout stock against dining-room orders."
        },
        "stat.takeout_priority.display_name": {
            "default": "Takeout Cook Priority"
        },
        "stat.takeout_queue_capacity.description": {
            "default": "How many customers may wait in the takeout line outside."
        },
        "stat.takeout_queue_capacity.display_name": {
            "default": "Takeout Queue Capacity"
        },
        "stat.takeout_service_speed.description": {
            "default": "Takeout customers served per second while finished stock is available."
        },
        "stat.takeout_service_speed.display_name": {
            "default": "Takeout Service Speed"
        },
        "stat.takeout_stock_capacity.description": {
            "default": "Maximum finished dishes accumulated for takeout."
        },
        "stat.takeout_stock_capacity.display_name": {
            "default": "Takeout Stock Capacity"
        },
        "stat.throughput_window.description": {
            "default": "Secondes d’historique récent qu’un passant regarde pour juger la vitesse de service."
        },
        "stat.throughput_window.display_name": {
            "default": "Fenêtre de service"
        },
        "station_functions.board.description": {
            "fr": "",
            "en": ""
        },
        "station_functions.board.display_name": {
            "fr": "Ardoise",
            "en": "Ardoise"
        },
        "station_functions.console.description": {
            "fr": "",
            "en": ""
        },
        "station_functions.console.display_name": {
            "fr": "Console de gestion",
            "en": "Console de gestion"
        },
        "station_functions.dishwasher.description": {
            "fr": "",
            "en": ""
        },
        "station_functions.dishwasher.display_name": {
            "fr": "Plonge",
            "en": "Plonge"
        },
        "station_functions.shelf.description": {
            "fr": "",
            "en": ""
        },
        "station_functions.shelf.display_name": {
            "fr": "Étagère",
            "en": "Étagère"
        },
        "station_functions.spices.description": {
            "fr": "",
            "en": ""
        },
        "station_functions.spices.display_name": {
            "fr": "Épicerie",
            "en": "Épicerie"
        },
        "station_functions.stove.description": {
            "fr": "",
            "en": ""
        },
        "station_functions.stove.display_name": {
            "fr": "Four",
            "en": "Four"
        },
        "station_functions.table.description": {
            "fr": "",
            "en": ""
        },
        "station_functions.table.display_name": {
            "fr": "Tabouret",
            "en": "Tabouret"
        },
        "station_functions.takeout.description": {
            "fr": "",
            "en": ""
        },
        "station_functions.takeout.display_name": {
            "fr": "Comptoir takeout",
            "en": "Comptoir takeout"
        },
        "station_functions.trash.description": {
            "fr": "",
            "en": ""
        },
        "station_functions.trash.display_name": {
            "fr": "Poubelle",
            "en": "Poubelle"
        },
        "ui.board.empty": {
            "default": "Nothing on the board"
        },
        "ui.board.line": {
            "default": "T%d  %s"
        },
        "ui.board.title": {
            "default": "ORDERS  %d/%d"
        },
        "ui.common.back": {
            "default": "BACK",
            "fr": "RETOUR"
        },
        "ui.common.cancel": {
            "default": "CANCEL",
            "fr": "ANNULER"
        },
        "ui.common.confirm": {
            "default": "CONFIRM",
            "fr": "CONFIRMER"
        },
        "ui.console.closed": {
            "default": "DINING CLOSED — open it"
        },
        "ui.console.dismiss": {
            "default": "Dismiss"
        },
        "ui.console.dismiss_tooltip": {
            "default": "Frees the post. What was paid is gone"
        },
        "ui.console.hint": {
            "default": "Space/A or Left/Right acts on the focused line — Esc/B closes"
        },
        "ui.console.hire": {
            "default": "Hire"
        },
        "ui.console.hire_locked": {
            "default": "This one will not sign yet"
        },
        "ui.console.hire_no_coins": {
            "default": "Not enough coins to hire"
        },
        "ui.console.hire_no_slot": {
            "default": "No open post for that role"
        },
        "ui.console.hire_tooltip": {
            "default": "Takes the post right away, until the end of the dimension"
        },
        "ui.console.ingredient_amount": {
            "default": "%d in stock"
        },
        "ui.console.ingredients_total": {
            "default": "TOTAL UNITS %d"
        },
        "ui.console.no_slots": {
            "default": "No post is open yet — upgrades open them"
        },
        "ui.console.open": {
            "default": "DINING OPEN — close it"
        },
        "ui.console.open_state": {
            "default": "Shop: %s"
        },
        "ui.console.rate": {
            "default": "Actual throughput %.1f meals/min"
        },
        "ui.console.section_brigade": {
            "default": "THE BRIGADE"
        },
        "ui.console.section_ingredients": {
            "default": "INGREDIENT STOCK"
        },
        "ui.console.section_menu": {
            "default": "TODAY'S MENU"
        },
        "ui.console.section_takeout": {
            "default": "TAKEOUT MANAGEMENT"
        },
        "ui.console.slots": {
            "default": "%s %d/%d"
        },
        "ui.console.state_all_closed": {
            "default": "everything closed"
        },
        "ui.console.state_all_open": {
            "default": "everything open"
        },
        "ui.console.state_dining_only": {
            "default": "dining room only"
        },
        "ui.console.state_takeout_only": {
            "default": "takeout only"
        },
        "ui.console.switch_tooltip": {
            "default": "Closing sends the queue away without a reputation hit"
        },
        "ui.console.tab_brigade": {
            "default": "BRIGADE"
        },
        "ui.console.tab_ingredients": {
            "default": "INGREDIENTS"
        },
        "ui.console.tab_menu": {
            "default": "MENU"
        },
        "ui.console.tab_shop": {
            "default": "SHOP"
        },
        "ui.console.tab_takeout": {
            "default": "TAKEOUT"
        },
        "ui.console.takeout_closed": {
            "default": "TAKEOUT CLOSED — open it"
        },
        "ui.console.takeout_not_installed": {
            "default": "The takeout counter is not installed yet."
        },
        "ui.console.takeout_open": {
            "default": "TAKEOUT OPEN — close it"
        },
        "ui.console.takeout_recipe": {
            "default": "Master recipe: %s"
        },
        "ui.console.takeout_recipe_tooltip": {
            "default": "Set this as the single recipe prepared and sold at takeout"
        },
        "ui.console.takeout_restock_rule": {
            "default": "Cooks restock below %d, then continue up to %d dishes."
        },
        "ui.console.takeout_select": {
            "default": "SELECT"
        },
        "ui.console.takeout_selected": {
            "default": "SELECTED"
        },
        "ui.console.takeout_stock": {
            "default": "FINISHED STOCK %d/%d"
        },
        "ui.console.takeout_switch_tooltip": {
            "default": "The counter sells on its own as long as finished stock remains"
        },
        "ui.console.takeout_target": {
            "default": "RESTOCK UP TO %d"
        },
        "ui.console.takeout_threshold": {
            "default": "RESTOCK WHEN STOCK IS BELOW %d"
        },
        "ui.console.title": {
            "default": "MANAGEMENT DESK"
        },
        "ui.customer.arriving": {
            "default": "%s is arriving"
        },
        "ui.customer.eating": {
            "default": "%s is eating"
        },
        "ui.customer.leaving": {
            "default": "%s is leaving"
        },
        "ui.customer.order": {
            "default": "Order: %s"
        },
        "ui.customer.serve": {
            "default": "Serve"
        },
        "ui.customer.step_closer": {
            "default": "%s is waiting — step closer to read the order"
        },
        "ui.display.current": {
            "default": "Current: %s",
            "fr": "Actuel : %s"
        },
        "ui.display.embedded_hint": {
            "default": "The setting applies in a separate game window.",
            "fr": "Ce réglage s’applique dans une fenêtre de jeu séparée."
        },
        "ui.display.fullscreen": {
            "default": "Native fullscreen",
            "fr": "Plein écran natif"
        },
        "ui.display.hint": {
            "default": "Choose a window size or fullscreen mode.",
            "fr": "Choisissez une taille de fenêtre ou le mode plein écran."
        },
        "ui.display.title": {
            "default": "DISPLAY",
            "fr": "AFFICHAGE"
        },
        "ui.display.windowed_1080": {
            "default": "1920 × 1080 — Windowed",
            "fr": "1920 × 1080 — Fenêtré"
        },
        "ui.display.windowed_720": {
            "default": "1280 × 720 — Windowed",
            "fr": "1280 × 720 — Fenêtré"
        },
        "ui.display.windowed_900": {
            "default": "1600 × 900 — Windowed",
            "fr": "1600 × 900 — Fenêtré"
        },
        "ui.dungeon.boss_ahead": {
            "default": "The keeper of this dimension is waiting beyond the door."
        },
        "ui.dungeon.boss_defeated": {
            "default": "%s falls. The dimension is yours."
        },
        "ui.dungeon.boss_room": {
            "default": "BOSS"
        },
        "ui.dungeon.cleared": {
            "default": "Room cleared! Collect the loot before moving on."
        },
        "ui.dungeon.dimension_complete": {
            "default": "%s cleared. Everything but your special upgrades resets — %s begins."
        },
        "ui.dungeon.dive_end": {
            "default": "This is the last room of the dive — take the exit on the left."
        },
        "ui.dungeon.door_blocked": {
            "default": "Defeat every creature first"
        },
        "ui.dungeon.door_end": {
            "default": "END"
        },
        "ui.dungeon.door_gated": {
            "default": "SEALED"
        },
        "ui.dungeon.door_open": {
            "default": "OPEN"
        },
        "ui.dungeon.door_prompt": {
            "default": "Enter the next room"
        },
        "ui.dungeon.door_sealed": {
            "default": "SEALED"
        },
        "ui.dungeon.entered_biome": {
            "default": "%s"
        },
        "ui.dungeon.entered_room": {
            "default": "Room %d — new creatures ahead"
        },
        "ui.dungeon.entered_special": {
            "default": "%s — this room is not on the usual path"
        },
        "ui.dungeon.exit_prompt": {
            "default": "Return to the restaurant"
        },
        "ui.dungeon.gate_blocked": {
            "default": "This door answers only to the master fork. A trial has opened."
        },
        "ui.dungeon.gate_trial_ready": {
            "default": "The trial is waiting: dive again to face it."
        },
        "ui.dungeon.insured": {
            "default": "Knocked out! Insurance saved %d%% of the dive: %d coins and %d materials."
        },
        "ui.dungeon.intro": {
            "default": "Clear every creature, then take the door on the right to go deeper."
        },
        "ui.dungeon.knocked_out": {
            "default": "Knocked out! Everything gathered on this dive was lost."
        },
        "ui.dungeon.objective_boss": {
            "default": "%s — the keeper still stands | Space/A attack | Q/B dash"
        },
        "ui.dungeon.objective_boss_cleared": {
            "default": "%s defeated — take the exit on the left to bank the dive"
        },
        "ui.dungeon.objective_cleared": {
            "default": "Room %d cleared — collect the drops, then the door on the right or the exit on the left"
        },
        "ui.dungeon.objective_cleared_biome": {
            "default": "%s — room %d/%d cleared, take the door on the right"
        },
        "ui.dungeon.objective_fighting": {
            "default": "Room %d — %d creatures left | Space/A attack | Q/B dash"
        },
        "ui.dungeon.objective_fighting_biome": {
            "default": "%s — room %d/%d, %d creatures left | Space/A attack | Q/B dash"
        },
        "ui.dungeon.objective_room": {
            "default": "%s — %d creatures left | Space/A attack | Q/B dash"
        },
        "ui.dungeon.objective_room_cleared": {
            "default": "%s cleared — take the door on the right"
        },
        "ui.dungeon.out_of_stamina": {
            "default": "Out of stamina! The dive ended and every collected material was kept."
        },
        "ui.dungeon.reinforcements": {
            "default": "Reinforcements! %d more creatures."
        },
        "ui.dungeon.returned": {
            "default": "Returned safely with the dungeon loot"
        },
        "ui.dungeon.reward_prompt": {
            "default": "Pick a reward before moving on"
        },
        "ui.dungeon.reward_skip": {
            "default": "Take nothing"
        },
        "ui.dungeon.reward_subtitle": {
            "default": "It lasts until you return to the restaurant."
        },
        "ui.dungeon.reward_taken": {
            "default": "Reward taken: %s"
        },
        "ui.dungeon.reward_title": {
            "default": "Choose a reward"
        },
        "ui.dungeon.room": {
            "default": "ROOM %d"
        },
        "ui.dungeon.room_sealed": {
            "default": "This door stays shut for now."
        },
        "ui.dungeon.shortcut": {
            "default": "A shortcut! %d rooms skipped."
        },
        "ui.dungeon.trial_complete": {
            "default": "The master fork is yours. The sealed door will open."
        },
        "ui.main.continue": {
            "default": "CONTINUE",
            "fr": "CONTINUER"
        },
        "ui.main.new_game": {
            "default": "NEW GAME",
            "fr": "NOUVELLE PARTIE"
        },
        "ui.main.options": {
            "default": "OPTIONS",
            "fr": "OPTIONS"
        },
        "ui.main.quit": {
            "default": "QUIT",
            "fr": "QUITTER"
        },
        "ui.main.subtitle": {
            "default": "Build the strangest little restaurant at the edge of the deep.",
            "fr": "Bâtissez le plus étrange petit restaurant au bord des profondeurs."
        },
        "ui.main.title": {
            "default": "BIG EGG",
            "fr": "BIG EGG"
        },
        "ui.menu.column_menu": {
            "default": "ON MENU"
        },
        "ui.menu.cook_tooltip": {
            "default": "Cook this dish"
        },
        "ui.menu.count": {
            "default": "On menu %d/%d"
        },
        "ui.menu.empty_cook": {
            "default": "Nothing on the menu — open the desk to put a dish back on it"
        },
        "ui.menu.hint_cook": {
            "default": "Space/A cooks the dish — Esc/B closes"
        },
        "ui.menu.missing_for": {
            "default": "Missing ingredients for %s"
        },
        "ui.menu.missing_tooltip": {
            "default": "Missing ingredients"
        },
        "ui.menu.off_menu": {
            "default": "WITHDRAWN"
        },
        "ui.menu.offer_tooltip": {
            "default": "Offer this dish to customers"
        },
        "ui.menu.on_menu": {
            "default": "ON MENU"
        },
        "ui.menu.title_cook": {
            "default": "PICK A DISH"
        },
        "ui.options.display": {
            "default": "DISPLAY",
            "fr": "AFFICHAGE"
        },
        "ui.options.display_value": {
            "default": "%s",
            "fr": "%s"
        },
        "ui.options.language": {
            "default": "LANGUAGE",
            "fr": "LANGUE"
        },
        "ui.options.language_en": {
            "default": "ENGLISH",
            "fr": "ANGLAIS"
        },
        "ui.options.language_fr": {
            "default": "FRANÇAIS",
            "fr": "FRANÇAIS"
        },
        "ui.options.master_volume": {
            "default": "MASTER VOLUME",
            "fr": "VOLUME GÉNÉRAL"
        },
        "ui.options.off": {
            "default": "OFF",
            "fr": "DÉSACTIVÉE"
        },
        "ui.options.on": {
            "default": "ON",
            "fr": "ACTIVÉE"
        },
        "ui.options.title": {
            "default": "OPTIONS",
            "fr": "OPTIONS"
        },
        "ui.options.vsync": {
            "default": "VERTICAL SYNC",
            "fr": "SYNCHRONISATION VERTICALE"
        },
        "ui.pause.continue": {
            "default": "CONTINUE",
            "fr": "CONTINUER"
        },
        "ui.pause.options": {
            "default": "OPTIONS",
            "fr": "OPTIONS"
        },
        "ui.pause.save_failed": {
            "default": "Save failed — the game is still open.",
            "fr": "Échec de la sauvegarde — la partie reste ouverte."
        },
        "ui.pause.save_quit": {
            "default": "SAVE AND QUIT",
            "fr": "SAUVEGARDER ET QUITTER"
        },
        "ui.pause.title": {
            "default": "PAUSED",
            "fr": "PAUSE"
        },
        "ui.plate.being_eaten": {
            "default": "Meal being eaten"
        },
        "ui.plate.bring_order": {
            "default": "Bring %s a plate of %s"
        },
        "ui.plate.carry_somewhere": {
            "default": "Carry the plate to the shelf, a customer, the dishwasher or the trash"
        },
        "ui.plate.dirty": {
            "default": "dirty plate"
        },
        "ui.plate.pick_dirty": {
            "default": "Pick up"
        },
        "ui.plate.pick_up": {
            "default": "Pick up"
        },
        "ui.plate.picked_up": {
            "default": "Picked up %s"
        },
        "ui.plate.serve_wrong": {
            "default": "Wrong plate — %s ordered %s"
        },
        "ui.prompt.action_key": {
            "default": "(SPACE/A)"
        },
        "ui.prompt.console": {
            "default": "Manage"
        },
        "ui.prompt.cook": {
            "default": "Cook"
        },
        "ui.prompt.dishwasher": {
            "default": "Wash"
        },
        "ui.prompt.missing_ingredients": {
            "default": "Missing ingredients"
        },
        "ui.prompt.no_meal_to_trash": {
            "default": "No meal to throw away"
        },
        "ui.prompt.no_plate": {
            "default": "No clean plate — use dishwasher"
        },
        "ui.prompt.no_plate_to_store": {
            "default": "No plate to store"
        },
        "ui.prompt.no_plate_to_wash": {
            "default": "No plate to wash"
        },
        "ui.prompt.shelf": {
            "default": "Store"
        },
        "ui.prompt.shelf_full": {
            "default": "The shelf is full"
        },
        "ui.prompt.shelf_put": {
            "default": "Store"
        },
        "ui.prompt.spices": {
            "default": "Refine"
        },
        "ui.prompt.spices_already": {
            "default": "This meal is already refined"
        },
        "ui.prompt.spices_no_meal": {
            "default": "No meal to refine"
        },
        "ui.prompt.spices_put": {
            "default": "Refine"
        },
        "ui.prompt.spices_wrong_plate": {
            "default": "Only a finished meal can be refined"
        },
        "ui.prompt.takeout": {
            "default": "Prepare"
        },
        "ui.prompt.takeout_console": {
            "default": "Choose the takeout recipe at the management desk"
        },
        "ui.prompt.takeout_full": {
            "default": "Takeout stock is full"
        },
        "ui.prompt.takeout_prepare": {
            "default": "Prepare"
        },
        "ui.prompt.takeout_service_boost": {
            "default": "Service"
        },
        "ui.prompt.takeout_work": {
            "default": "Prepare"
        },
        "ui.prompt.trash": {
            "default": "Discard"
        },
        "ui.prompt.trash_empty_plate": {
            "default": "This plate is already empty"
        },
        "ui.prompt.trash_put": {
            "default": "Discard"
        },
        "ui.prompt.wash": {
            "default": "Wash"
        },
        "ui.prompt.wash_requires_dirty": {
            "default": "Only dirty plates can be washed"
        },
        "ui.restaurant.away_dining_dry": {
            "default": "The dining room ran out of ingredients while you were away."
        },
        "ui.restaurant.away_dining_sales": {
            "default": "Your brigade served %d meals while you were away (+%d coins)."
        },
        "ui.restaurant.away_takeout_dry": {
            "default": "The takeout counter ran dry before you came back."
        },
        "ui.restaurant.away_takeout_sales": {
            "default": "While you were out: %d takeout dishes sold, +%d coins."
        },
        "ui.restaurant.bring_dirty_plate": {
            "default": "Bring a dirty plate to the dishwasher"
        },
        "ui.restaurant.cancelled": {
            "default": "Cancelled %s — ingredients returned"
        },
        "ui.restaurant.closed": {
            "default": "Restaurant closed for the day: no meals remain"
        },
        "ui.restaurant.closed_by_hand": {
            "default": "You closed the dining room."
        },
        "ui.restaurant.closed_no_ingredients": {
            "default": "The restaurant is closed: out of ingredients."
        },
        "ui.restaurant.closed_no_recipe": {
            "default": "The restaurant is closed: no dish on the menu."
        },
        "ui.restaurant.closed_reopen_hint": {
            "default": "Reopen it from the management console."
        },
        "ui.restaurant.cooking_started": {
            "default": "Cooking %s…"
        },
        "ui.restaurant.customer_left_hungry": {
            "default": "%s left hungry"
        },
        "ui.restaurant.customer_left_last_meal": {
            "default": "%s left: the last meal is gone"
        },
        "ui.restaurant.customer_left_nothing": {
            "default": "%s left: nothing affordable is available"
        },
        "ui.restaurant.customer_seated": {
            "default": "%s is ready to order"
        },
        "ui.restaurant.dish_ready": {
            "default": "%s is ready on the stove"
        },
        "ui.restaurant.intro": {
            "default": "Customers enter from the north. Cook, serve, clear, and wash every plate."
        },
        "ui.restaurant.meal_served": {
            "default": "Meal served — clear and wash the plate to collect payment"
        },
        "ui.restaurant.menu_full": {
            "default": "Menu full — %d slots"
        },
        "ui.restaurant.missing_ingredients": {
            "default": "Missing ingredients"
        },
        "ui.restaurant.no_clean_plate": {
            "default": "No clean plate available — wash a dirty plate"
        },
        "ui.restaurant.no_clean_plate_short": {
            "default": "No clean plate available"
        },
        "ui.restaurant.opened_by_hand": {
            "default": "The dining room is open again."
        },
        "ui.restaurant.payment": {
            "default": "Payment collected: +%d coins"
        },
        "ui.restaurant.payment_tip": {
            "default": "Payment collected: +%d coins, including a %d coin tip!"
        },
        "ui.restaurant.plate_stored": {
            "default": "Plate stored on the shelf"
        },
        "ui.restaurant.plate_washed": {
            "default": "Plate washed and returned to the closet"
        },
        "ui.restaurant.plates": {
            "default": "Plates %d/%d"
        },
        "ui.restaurant.queue_gave_up": {
            "default": "%s gave up waiting in line"
        },
        "ui.restaurant.queue_joined": {
            "default": "%s joined the line"
        },
        "ui.restaurant.reopened": {
            "default": "Restaurant reopened"
        },
        "ui.restaurant.shelf_full": {
            "default": "The shelf is full"
        },
        "ui.restaurant.shelf_holds": {
            "default": "The shelf holds plates you are carrying"
        },
        "ui.restaurant.snack": {
            "default": "You feel much better after a snack"
        },
        "ui.restaurant.spices_already": {
            "default": "This meal is already refined."
        },
        "ui.restaurant.spices_needs_dish": {
            "default": "Bring a plated meal to the spice station."
        },
        "ui.restaurant.spices_needs_meal": {
            "default": "Only a cooked meal can be refined."
        },
        "ui.restaurant.spices_started": {
            "default": "Refining %s..."
        },
        "ui.restaurant.takeout_boost_active": {
            "default": "You are helping takeout service: +30%."
        },
        "ui.restaurant.takeout_boost_ready": {
            "default": "You are ready to help; service will get +30% when a customer reaches the counter."
        },
        "ui.restaurant.takeout_ready": {
            "default": "%s added to takeout stock"
        },
        "ui.restaurant.takeout_selected": {
            "default": "%s selected for takeout."
        },
        "ui.restaurant.takeout_switch_blocked": {
            "default": "Sell the current takeout stock before switching recipes."
        },
        "ui.restaurant.trash_already_empty": {
            "default": "Nothing left to throw away — this plate is already dirty"
        },
        "ui.restaurant.trash_prompt_empty": {
            "default": "Carry a plate here to throw it away"
        },
        "ui.restaurant.trashed": {
            "default": "Threw away the %s — the plate stays in your hands, dirty"
        },
        "ui.role.cook": {
            "default": "Cooks"
        },
        "ui.role.server": {
            "default": "Servers"
        },
        "ui.save.continue_hint": {
            "default": "Choose one of your saved restaurants.",
            "fr": "Choisissez l’un de vos restaurants sauvegardés."
        },
        "ui.save.continue_title": {
            "default": "CONTINUE A GAME",
            "fr": "CONTINUER UNE PARTIE"
        },
        "ui.save.empty": {
            "default": "EMPTY",
            "fr": "VIDE"
        },
        "ui.save.failed": {
            "default": "The game could not be saved. Check write access and available disk space.",
            "fr": "La partie n’a pas pu être sauvegardée. Vérifiez l’accès en écriture et l’espace disque."
        },
        "ui.save.new_hint": {
            "default": "An occupied slot will ask before it is overwritten.",
            "fr": "Un slot occupé demandera confirmation avant d’être remplacé."
        },
        "ui.save.new_title": {
            "default": "CHOOSE A NEW GAME SLOT",
            "fr": "CHOISIR UN SLOT POUR LA NOUVELLE PARTIE"
        },
        "ui.save.overwrite": {
            "default": "Slot %d already contains a game. Replace it with a new one?",
            "fr": "Le slot %d contient déjà une partie. La remplacer par une nouvelle?"
        },
        "ui.save.recovered": {
            "default": "backup recovered",
            "fr": "sauvegarde de secours récupérée"
        },
        "ui.save.reset": {
            "default": "Save slot reset",
            "fr": "Slot de sauvegarde réinitialisé"
        },
        "ui.save.slot": {
            "default": "SLOT %d",
            "fr": "SLOT %d"
        },
        "ui.save.summary": {
            "default": "Dimension %d  ·  %02dh %02dm  ·  %d coins",
            "fr": "Dimension %d  ·  %02dh %02dmin  ·  %d pièces"
        },
        "ui.server_preference.bus": {
            "default": "CLEAN"
        },
        "ui.server_preference.serve": {
            "default": "TABLES"
        },
        "ui.server_preference.take_order": {
            "default": "ORDERS"
        },
        "ui.server_preference.takeout": {
            "default": "TAKEOUT"
        },
        "ui.skill.attentiveness": {
            "default": "Attentiveness"
        },
        "ui.skill.charisma": {
            "default": "Charisma"
        },
        "ui.skill.craft": {
            "default": "Craft"
        },
        "ui.skill.mise": {
            "default": "Mise en place"
        },
        "ui.skill.nose": {
            "default": "Nose"
        },
        "ui.skill.pace": {
            "default": "Pace"
        },
        "ui.skill.plating": {
            "default": "Plating"
        },
        "ui.skill.poise": {
            "default": "Poise"
        },
        "ui.skill.sight": {
            "default": "Sight"
        },
        "ui.skill.stamina": {
            "default": "Stamina"
        },
        "ui.skill.thrift": {
            "default": "Thrift"
        },
        "ui.skill.tidiness": {
            "default": "Tidiness"
        },
        "ui.skill.tray": {
            "default": "Tray"
        },
        "ui.station.console": {
            "default": "DESK"
        },
        "ui.station.console_closed": {
            "default": "CLOSED"
        },
        "ui.station.console_menu": {
            "default": "Menu %d/%d"
        },
        "ui.station.console_open": {
            "default": "OPEN"
        },
        "ui.station.console_rate": {
            "default": "%.1f/min"
        },
        "ui.station.shelf": {
            "default": "SHELF"
        },
        "ui.station.spices": {
            "default": "SPICES"
        },
        "ui.station.stove": {
            "default": "STOVE"
        },
        "ui.station.stove_auto": {
            "default": "AUTO x%.1f"
        },
        "ui.station.stove_cooking": {
            "default": "COOKING"
        },
        "ui.station.stove_hold": {
            "default": "HOLD ACTION"
        },
        "ui.station.takeout": {
            "default": "TAKEOUT"
        },
        "ui.station.takeout_boost_ready": {
            "default": "SERVICE BOOST READY · YOU +30%"
        },
        "ui.station.takeout_helper_player": {
            "default": "YOU +30%"
        },
        "ui.station.takeout_helper_server": {
            "default": "%s +30%%"
        },
        "ui.station.takeout_service": {
            "default": "SERVICE %d%% · x%.1f"
        },
        "ui.station.takeout_stock": {
            "default": "Stock %d/%d"
        },
        "ui.station_kind.spices": {
            "default": "Spices"
        },
        "ui.station_kind.stove": {
            "default": "Stove"
        },
        "ui.station_kind.takeout": {
            "default": "Takeout"
        },
        "ui.takeout.closed_by_hand": {
            "default": "You closed the takeout counter."
        },
        "ui.takeout.closed_no_ingredients": {
            "default": "Takeout is closed: out of ingredients."
        },
        "ui.takeout.closed_no_recipe": {
            "default": "Takeout is closed: no recipe selected."
        },
        "ui.takeout.closed_no_stock": {
            "default": "Takeout is closed: nothing left to sell."
        },
        "ui.takeout.no_recipe": {
            "default": "No recipe selected"
        },
        "ui.takeout.opened_by_hand": {
            "default": "The takeout counter is open again."
        },
        "ui.upgrade.hint": {
            "default": "Drag to move · Wheel to zoom · Move keys walk the tree · Click to buy · Esc/B returns"
        },
        "upgrade_nodes.auto_stove.detailed_text": {
            "default": "Le four continue de cuisiner seul a 40 pourcent de la vitesse manuelle. Tenir le bouton reste plus rapide."
        },
        "upgrade_nodes.auto_stove.display_name": {
            "default": "Four Autonome"
        },
        "upgrade_nodes.auto_stove.node_text": {
            "default": "AUTO FOUR"
        },
        "upgrade_nodes.big_egg_core.detailed_text": {
            "default": "The central idea. Purchase it for free to reveal every progression branch."
        },
        "upgrade_nodes.big_egg_core.display_name": {
            "default": "BIG EGG"
        },
        "upgrade_nodes.big_egg_core.node_text": {
            "default": "BEGIN"
        },
        "upgrade_nodes.bigger_shelf.detailed_text": {
            "default": "Trois emplacements de plus pour poser les plats prêts en attendant de les servir."
        },
        "upgrade_nodes.bigger_shelf.display_name": {
            "default": "Grande étagère"
        },
        "upgrade_nodes.bigger_shelf.node_text": {
            "default": "+3 ÉTAGÈRE"
        },
        "upgrade_nodes.boss_trophy.detailed_text": {
            "default": "A secret payout upgrade revealed by defeating a boss."
        },
        "upgrade_nodes.boss_trophy.display_name": {
            "default": "Boss Trophy"
        },
        "upgrade_nodes.boss_trophy.node_text": {
            "default": "?"
        },
        "upgrade_nodes.comfy_chairs.detailed_text": {
            "default": "Customers wait 30 seconds longer for each order."
        },
        "upgrade_nodes.comfy_chairs.display_name": {
            "default": "Comfy Chairs"
        },
        "upgrade_nodes.comfy_chairs.node_text": {
            "default": "+30s PAT"
        },
        "upgrade_nodes.deep_breath.detailed_text": {
            "default": "Carry 20 more seconds of stamina into each dungeon round."
        },
        "upgrade_nodes.deep_breath.display_name": {
            "default": "Deep Breath"
        },
        "upgrade_nodes.deep_breath.node_text": {
            "default": "+20 STA"
        },
        "upgrade_nodes.deeper_counter.detailed_text": {
            "default": "Six plats de plus peuvent attendre au comptoir takeout avant que la production s'arrête."
        },
        "upgrade_nodes.deeper_counter.display_name": {
            "default": "Grande réserve takeout"
        },
        "upgrade_nodes.deeper_counter.node_text": {
            "default": "+6 PLATS"
        },
        "upgrade_nodes.fancy_plating.detailed_text": {
            "default": "Presentation raises every meal payout by 40 percent through its coefficient."
        },
        "upgrade_nodes.fancy_plating.display_name": {
            "default": "Fancy Plating"
        },
        "upgrade_nodes.fancy_plating.node_text": {
            "default": "+40% PAY"
        },
        "upgrade_nodes.first_cook.detailed_text": {
            "default": "Un poste de cuisinier: il lit l'ardoise et cuisine sans toi."
        },
        "upgrade_nodes.first_cook.display_name": {
            "default": "Premier cuisinier"
        },
        "upgrade_nodes.first_cook.node_text": {
            "default": "+1 CUISINIER"
        },
        "upgrade_nodes.first_server.detailed_text": {
            "default": "Un poste de serveur: quelqu'un prend les commandes et porte les assiettes à ta place."
        },
        "upgrade_nodes.first_server.display_name": {
            "default": "Premier serveur"
        },
        "upgrade_nodes.first_server.node_text": {
            "default": "+1 SERVEUR"
        },
        "upgrade_nodes.hot_pan.detailed_text": {
            "default": "A hotter pan reduces cooking duration by 30 percent."
        },
        "upgrade_nodes.hot_pan.display_name": {
            "default": "Hot Pan"
        },
        "upgrade_nodes.hot_pan.node_text": {
            "default": "-30% COOK"
        },
        "upgrade_nodes.order_board.detailed_text": {
            "default": "Un tableau accroché en cuisine. Repérer une commande l'y inscrit définitivement: plus rien à mémoriser, et six commandes tiennent à l'affiche."
        },
        "upgrade_nodes.order_board.display_name": {
            "default": "Ardoise des commandes"
        },
        "upgrade_nodes.order_board.node_text": {
            "default": "ARDOISE"
        },
        "upgrade_nodes.quick_feet.detailed_text": {
            "default": "Move faster in the restaurant and dungeon."
        },
        "upgrade_nodes.quick_feet.display_name": {
            "default": "Quick Feet"
        },
        "upgrade_nodes.quick_feet.node_text": {
            "default": "+35 SPD"
        },
        "upgrade_nodes.rare_spices.detailed_text": {
            "default": "Un plat supérieur se vend encore plus cher."
        },
        "upgrade_nodes.rare_spices.display_name": {
            "default": "Épices rares"
        },
        "upgrade_nodes.rare_spices.node_text": {
            "default": "+0.3 SUP"
        },
        "upgrade_nodes.second_cook.detailed_text": {
            "default": "Un cuisinier de plus aux postes."
        },
        "upgrade_nodes.second_cook.display_name": {
            "default": "Deuxième cuisinier"
        },
        "upgrade_nodes.second_cook.node_text": {
            "default": "+1 CUISINIER"
        },
        "upgrade_nodes.second_plate.detailed_text": {
            "default": "Add a second reusable plate to the restaurant."
        },
        "upgrade_nodes.second_plate.display_name": {
            "default": "Second Plate"
        },
        "upgrade_nodes.second_plate.node_text": {
            "default": "PLATE II"
        },
        "upgrade_nodes.second_server.detailed_text": {
            "default": "Un serveur de plus en salle."
        },
        "upgrade_nodes.second_server.display_name": {
            "default": "Deuxième serveur"
        },
        "upgrade_nodes.second_server.node_text": {
            "default": "+1 SERVEUR"
        },
        "upgrade_nodes.second_stove.detailed_text": {
            "default": "Un deuxième poste de cuisson: deux plats avancent en même temps."
        },
        "upgrade_nodes.second_stove.display_name": {
            "default": "Second four"
        },
        "upgrade_nodes.second_stove.node_text": {
            "default": "+1 FOUR"
        },
        "upgrade_nodes.second_table.detailed_text": {
            "default": "Unlock a second two-seat table after proving the restaurant can serve customers."
        },
        "upgrade_nodes.second_table.display_name": {
            "default": "Second Table"
        },
        "upgrade_nodes.second_table.node_text": {
            "default": "+1 TABLE"
        },
        "upgrade_nodes.sharp_fork.detailed_text": {
            "default": "Sharpen the restaurant fork into a dungeon weapon. Adds 8 attack damage."
        },
        "upgrade_nodes.sharp_fork.display_name": {
            "default": "Sharp Fork"
        },
        "upgrade_nodes.sharp_fork.node_text": {
            "default": "+8 ATK"
        },
        "upgrade_nodes.spice_station.detailed_text": {
            "default": "Un poste de raffinage: on y dépose un plat cuit, il en ressort supérieur — et se vend bien plus cher."
        },
        "upgrade_nodes.spice_station.display_name": {
            "default": "Épices exotiques"
        },
        "upgrade_nodes.spice_station.node_text": {
            "default": "ÉPICERIE"
        },
        "upgrade_nodes.street_reputation.detailed_text": {
            "default": "Une plus grande part des passants s'intéresse à la recette takeout sélectionnée."
        },
        "upgrade_nodes.street_reputation.display_name": {
            "default": "Renom de rue"
        },
        "upgrade_nodes.street_reputation.node_text": {
            "default": "+0.2 ARRÊT"
        },
        "upgrade_nodes.street_window.detailed_text": {
            "default": "Un poste près de la rue qui prépare en série une recette maître. Les plats s'accumulent dans sa réserve et sont servis automatiquement par une file extérieure dédiée."
        },
        "upgrade_nodes.street_window.display_name": {
            "default": "Comptoir takeout"
        },
        "upgrade_nodes.street_window.node_text": {
            "default": "TAKEOUT"
        },
        "upgrade_nodes.sturdy_shell.detailed_text": {
            "default": "A defensive shell. Requires combat experience and adds 30 maximum health."
        },
        "upgrade_nodes.sturdy_shell.display_name": {
            "default": "Sturdy Shell"
        },
        "upgrade_nodes.sturdy_shell.node_text": {
            "default": "+30 HP"
        },
        "upgrade_nodes.third_plate.detailed_text": {
            "default": "Add a third reusable plate to the restaurant."
        },
        "upgrade_nodes.third_plate.display_name": {
            "default": "Third Plate"
        },
        "upgrade_nodes.third_plate.node_text": {
            "default": "PLATE III"
        },
        "upgrade_nodes.third_table.detailed_text": {
            "default": "Unlock the third two-seat table."
        },
        "upgrade_nodes.third_table.display_name": {
            "default": "Third Table"
        },
        "upgrade_nodes.third_table.node_text": {
            "default": "+1 TABLE"
        },
        "upgrade_nodes.wider_menu.detailed_text": {
            "default": "Une place de plus au menu: une recette supplémentaire peut être proposée aux clients."
        },
        "upgrade_nodes.wider_menu.display_name": {
            "default": "Menu Élargi"
        },
        "upgrade_nodes.wider_menu.node_text": {
            "default": "+1 MENU"
        },
        "visuals.chicken_beast_idle.description": {
            "default": "Genere par PixelLab (high top-down, vue sud)."
        },
        "visuals.chicken_beast_idle.display_name": {
            "default": "Chicken Beast — repos"
        },
        "visuals.chicken_beast_walk.description": {
            "default": "Genere par PixelLab (high top-down, vue sud)."
        },
        "visuals.chicken_beast_walk.display_name": {
            "default": "Chicken Beast — marche"
        },
        "visuals.player_idle.description": {
            "default": "Genere par PixelLab (high top-down, 8 directions, vue sud). Calage 38/37: neutre."
        },
        "visuals.player_idle.display_name": {
            "default": "Joueur — repos"
        }
    }
}
