{
    "schema_version": 19,
    "metadata": {
        "project": "BIG EGG",
        "modified_at": "2026-08-20T09:25:16-04:00",
        "published_at": "2026-08-20T09:25:16-04:00"
    },
    "active_player_config": "default_player",
    "player_configs": {
        "default_player": {
            "display_name": "Default Player",
            "starting_hp": 10,
            "starting_stamina": 100,
            "walk_speed": 300,
            "run_speed": 500,
            "walk_stamina_per_second": 0.35,
            "run_stamina_per_second": 1,
            "attack_damage": 1,
            "attack_rate": 0.45,
            "attack_range": 175,
            "attack_angle": 15,
            "attack_knockback": 600,
            "attack_stamina_cost": 5,
            "damage_variance": 0.12,
            "dash_speed": 760,
            "dash_duration": 0.2,
            "dash_cooldown": 0.9,
            "dash_stamina_cost": 8,
            "visuals": {},
            "vfx": {}
        }
    },
    "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": {
        "direct_contact": {
            "display_name": "Impact direct",
            "type": "direct_hit",
            "range": 40,
            "angle": 360,
            "windup": 0,
            "cooldown": 1.15,
            "active_duration": 0,
            "rotation_speed": 0,
            "tick_interval": 0,
            "color": "#ff4d6d"
        },
        "chicken_cone": {
            "display_name": "Coup de bec",
            "type": "burst",
            "range": 78,
            "angle": 72,
            "windup": 0.2,
            "cooldown": 1.65,
            "active_duration": 0,
            "rotation_speed": 0,
            "tick_interval": 0,
            "color": "#ff784f"
        },
        "fungling_wide_cone": {
            "display_name": "Souffle de spores",
            "type": "swipe",
            "range": 100,
            "angle": 360,
            "windup": 1.2,
            "cooldown": 5,
            "active_duration": 3,
            "rotation_speed": 1999,
            "tick_interval": 0.1,
            "color": "#c77dff"
        },
        "boar_circle": {
            "display_name": "Onde circulaire",
            "type": "burst",
            "range": 46,
            "angle": 360,
            "windup": 0.65,
            "cooldown": 1.8,
            "active_duration": 0,
            "rotation_speed": 0,
            "tick_interval": 0,
            "color": "#ff6b35"
        },
        "sticky_circle": {
            "display_name": "Cercle collant",
            "type": "sticky",
            "range": 48,
            "angle": 360,
            "windup": 0.9,
            "cooldown": 2.4,
            "active_duration": 0,
            "rotation_speed": 0,
            "tick_interval": 0,
            "color": "#f72585"
        },
        "orbit_swipe": {
            "display_name": "Balayage orbital",
            "type": "swipe",
            "range": 98,
            "angle": 58,
            "windup": 0.45,
            "cooldown": 1.6,
            "active_duration": 1.8,
            "rotation_speed": 210,
            "tick_interval": 0.35,
            "color": "#ff3c38"
        }
    },
    "movement_patterns": {
        "linear": {
            "display_name": "Linear",
            "type": "linear",
            "speed_multiplier": 1,
            "detected_speed_multiplier": 1,
            "move_duration": 0,
            "rest_duration": 0,
            "direction_change_min": 1.2,
            "direction_change_max": 3.2,
            "idle_chance": 0
        },
        "patrol": {
            "display_name": "Random Patrol",
            "type": "patrol",
            "speed_multiplier": 0.38,
            "detected_speed_multiplier": 0.72,
            "move_duration": 0,
            "rest_duration": 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
        },
        "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
        },
        "static": {
            "display_name": "Static",
            "type": "static",
            "speed_multiplier": 0,
            "detected_speed_multiplier": 0,
            "move_duration": 0,
            "rest_duration": 0,
            "direction_change_min": 1.2,
            "direction_change_max": 3.2,
            "idle_chance": 0
        }
    },
    "enemies": {
        "slime": {
            "display_name": "Slime",
            "spawn_weight": 3,
            "spawn_min": 0,
            "spawn_max": 6,
            "shape": "circle",
            "health": 3,
            "speed": 72,
            "damage": 1,
            "damage_variance": 0.1,
            "detection_range": 500,
            "detection_angle": 230,
            "knockback": 340,
            "knockback_resistance": 0,
            "min_size": 1.5,
            "max_size": 2,
            "attack_pattern": "fungling_wide_cone",
            "undetected_movement": "small_hop",
            "detected_movement": "big_leap",
            "hero_response": "chase",
            "color": "#ef476f",
            "drops": {
                "slime_jelly": 1
            },
            "visuals": {},
            "vfx": {},
            "on_kill": [],
            "on_spawn": [],
            "on_damage_player": [],
            "on_hurt": []
        },
        "chicken_beast": {
            "display_name": "Chicken Beast",
            "spawn_weight": 7,
            "spawn_min": 0,
            "spawn_max": 6,
            "shape": "triangle",
            "health": 3,
            "speed": 800,
            "damage": 3,
            "damage_variance": 0.1,
            "detection_range": 400,
            "detection_angle": 175,
            "knockback": 200,
            "knockback_resistance": 0.01,
            "min_size": 1.5,
            "max_size": 2,
            "attack_pattern": "chicken_cone",
            "undetected_movement": "patrol",
            "detected_movement": "small_hop",
            "hero_response": "chase",
            "color": "#ff7b00",
            "drops": {
                "egg": 1
            },
            "visuals": {},
            "vfx": {},
            "on_kill": [],
            "on_spawn": [],
            "on_damage_player": [],
            "on_hurt": []
        },
        "fungling": {
            "display_name": "Fungling",
            "spawn_weight": 2,
            "spawn_min": 0,
            "spawn_max": 6,
            "shape": "hexagon",
            "health": 3,
            "speed": 82,
            "damage": 3,
            "damage_variance": 0.1,
            "detection_range": 210,
            "detection_angle": 205,
            "knockback": 400,
            "knockback_resistance": 0.05,
            "min_size": 1.5,
            "max_size": 2,
            "attack_pattern": "fungling_wide_cone",
            "undetected_movement": "small_hop",
            "detected_movement": "linear",
            "hero_response": "chase",
            "color": "#9d4edd",
            "drops": {
                "mushroom": 1
            },
            "visuals": {},
            "vfx": {},
            "on_kill": [],
            "on_spawn": [],
            "on_damage_player": [],
            "on_hurt": []
        },
        "boar_brute": {
            "display_name": "Boar Brute",
            "spawn_weight": 2,
            "spawn_min": 0,
            "spawn_max": 6,
            "shape": "square",
            "health": 4,
            "speed": 94,
            "damage": 2,
            "damage_variance": 0.1,
            "detection_range": 220,
            "detection_angle": 145,
            "knockback": 580,
            "knockback_resistance": 0.3,
            "min_size": 1.5,
            "max_size": 2,
            "attack_pattern": "boar_circle",
            "undetected_movement": "linear",
            "detected_movement": "big_leap",
            "hero_response": "chase",
            "color": "#b5654d",
            "drops": {
                "beast_meat": 1
            },
            "visuals": {},
            "vfx": {},
            "on_kill": [],
            "on_spawn": [],
            "on_damage_player": [],
            "on_hurt": []
        },
        "pepper_imp": {
            "display_name": "Pepper Imp",
            "spawn_weight": 2,
            "spawn_min": 0,
            "spawn_max": 6,
            "shape": "diamond",
            "health": 1,
            "speed": 116,
            "damage": 1,
            "damage_variance": 0.1,
            "detection_range": 255,
            "detection_angle": 125,
            "knockback": 370,
            "knockback_resistance": 0.08,
            "min_size": 1.5,
            "max_size": 2,
            "attack_pattern": "orbit_swipe",
            "undetected_movement": "patrol",
            "detected_movement": "small_hop",
            "hero_response": "chase",
            "color": "#ff3c38",
            "drops": {
                "ember_pepper": 1
            },
            "visuals": {},
            "vfx": {},
            "on_kill": [],
            "on_spawn": [],
            "on_damage_player": [],
            "on_hurt": []
        }
    },
    "recipes": {
        "fried_egg": {
            "display_name": "Fried Egg",
            "ingredients": {
                "egg": 1
            },
            "cook_time": 2,
            "sale_price": 5,
            "visuals": {},
            "vfx": {},
            "on_cooked": [],
            "on_served": []
        },
        "slime_omelette": {
            "display_name": "Slime Omelette",
            "ingredients": {
                "egg": 1,
                "slime_jelly": 1
            },
            "cook_time": 3,
            "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,
            "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,
            "favorite_chance": 0.45,
            "patience": 60,
            "meal_consumption_speed": 1,
            "generosity": 0.15,
            "arrival_weight": 1,
            "hunger": 0.5,
            "queue_tolerance": 1,
            "favorite_meal": "fried_egg",
            "visuals": {},
            "vfx": {},
            "on_served": [],
            "on_left_unserved": []
        },
        "foodie": {
            "display_name": "Foodie",
            "color": "#ffd166",
            "cash": 65,
            "appetite": 3,
            "speed": 150,
            "favorite_chance": 0.7,
            "patience": 75,
            "meal_consumption_speed": 0.8,
            "generosity": 0.22,
            "arrival_weight": 0.55,
            "hunger": 0.5,
            "queue_tolerance": 1,
            "favorite_meal": "mushroom_omelette",
            "visuals": {},
            "vfx": {},
            "on_served": [],
            "on_left_unserved": []
        },
        "generous_guest": {
            "display_name": "Generous Guest",
            "color": "#c77dff",
            "cash": 90,
            "appetite": 2,
            "speed": 70,
            "favorite_chance": 0.65,
            "patience": 48,
            "meal_consumption_speed": 1.3,
            "generosity": 0.65,
            "arrival_weight": 0.3,
            "hunger": 0.5,
            "queue_tolerance": 1,
            "favorite_meal": "pepper_scramble",
            "visuals": {},
            "vfx": {},
            "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,
                "attentiveness": 1.1,
                "charisma": 0.8,
                "tidiness": 0.9
            },
            "station_affinity": [],
            "recipe_affinity": [],
            "modifiers": [],
            "conditions": [],
            "visuals": {},
            "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,
                "tray": 1,
                "attentiveness": 1,
                "charisma": 1.8,
                "poise": 1.3
            },
            "station_affinity": [],
            "recipe_affinity": [],
            "modifiers": [],
            "conditions": [],
            "visuals": {},
            "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,
                "tidiness": 1.9,
                "charisma": 0.6
            },
            "station_affinity": [],
            "recipe_affinity": [],
            "modifiers": [],
            "conditions": [],
            "visuals": {},
            "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
            },
            "station_affinity": {
                "stove": 1.2,
                "spices": 0.7
            },
            "recipe_affinity": [],
            "modifiers": [],
            "conditions": [],
            "visuals": {},
            "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,
                "plating": 0.45,
                "thrift": 0.1,
                "nose": 1
            },
            "station_affinity": {
                "stove": 0.8,
                "spices": 1.6
            },
            "recipe_affinity": [],
            "modifiers": [],
            "conditions": [],
            "visuals": {},
            "on_hired": []
        }
    },
    "visuals": {},
    "game_variables": {
        "attack_damage": {
            "display_name": "Attack Damage",
            "type": "float",
            "base_value": 0,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 1000000,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 1,
            "maximum": 1000000,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 10000,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0.1,
            "maximum": 10,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 100,
            "rounding": "none",
            "category": "restaurant",
            "description": "Multiplier applied to each meal payout."
        },
        "patience": {
            "display_name": "Customer Patience",
            "type": "float",
            "base_value": 0,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 100000,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 100000,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 1000,
            "rounding": "round",
            "category": "restaurant",
            "description": "Total reusable plate capacity."
        },
        "player_vision": {
            "display_name": "Player Vision",
            "type": "float",
            "base_value": 100,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 4000,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 4,
            "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."
        },
        "drink_counter": {
            "display_name": "Street Counter",
            "type": "int",
            "base_value": 0,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 1,
            "rounding": "round",
            "category": "restaurant",
            "description": "Set to 1 once the street window is open. Passers-by buy a drink without taking a table."
        },
        "counter_stock": {
            "display_name": "Counter Stock",
            "type": "int",
            "base_value": 4,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 1,
            "maximum": 40,
            "rounding": "round",
            "category": "restaurant",
            "description": "How many prepared drinks the street counter can hold."
        },
        "drink_price": {
            "display_name": "Drink Price",
            "type": "int",
            "base_value": 4,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 1,
            "maximum": 500,
            "rounding": "round",
            "category": "restaurant",
            "description": "Coins a passer-by pays for a drink at the street window."
        },
        "window_appeal": {
            "display_name": "Window Appeal",
            "type": "float",
            "base_value": 0.35,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 1,
            "rounding": "none",
            "category": "restaurant",
            "description": "Share of passers-by who stop at the street window when it has stock."
        },
        "spice_station_count": {
            "display_name": "Spice Stations",
            "type": "int",
            "base_value": 0,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 2,
            "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,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 1,
            "maximum": 10,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 1,
            "maximum": 12,
            "rounding": "round",
            "category": "kitchen",
            "description": "How many plates the shelf can hold at once."
        },
        "server_count": {
            "display_name": "Servers",
            "type": "int",
            "base_value": 0,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 6,
            "rounding": "round",
            "category": "restaurant",
            "description": "How many servers can work the floor at once."
        },
        "cook_count": {
            "display_name": "Cooks",
            "type": "int",
            "base_value": 0,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 6,
            "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,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 1,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 1,
            "maximum": 4,
            "rounding": "round",
            "category": "kitchen",
            "description": "How many cooking stations run in parallel."
        },
        "order_memory_seconds": {
            "display_name": "Order Memory",
            "type": "float",
            "base_value": 8,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 3600,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 40,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 10000,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 10000,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 1,
            "maximum": 100,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 200,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 200,
            "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,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 1,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 12,
            "rounding": "round",
            "category": "dungeon",
            "description": "Nombre de récompenses proposées après une salle nettoyée."
        },
        "insurance_rate": {
            "display_name": "Assurance de plongée",
            "type": "float",
            "base_value": 0,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 1,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 600,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 50,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 5,
            "maximum": 3600,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 10000,
            "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,
            "base_bonus": 0,
            "base_coefficient": 1,
            "coefficient_bonus": 0,
            "minimum": 0,
            "maximum": 25,
            "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,
            "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_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,
            "cost": 0,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "max_health",
                    "layer": "scaling",
                    "operation": "add",
                    "value": 0.5
                }
            ],
            "visibility_conditions": [],
            "reveal_conditions": [],
            "unlock_conditions": [],
            "appearance": {
                "shape": "circle",
                "background_color": "#164e63",
                "border_color": "#67e8f9",
                "text_color": "#ecfeff",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 5,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "attack_damage",
                    "layer": "flat",
                    "operation": "add",
                    "value": 8
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "diamond",
                "background_color": "#7f1d1d",
                "border_color": "#fb7185",
                "text_color": "#fff1f2",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 25,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "max_health",
                    "layer": "flat",
                    "operation": "add",
                    "value": 30
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "hexagon",
                "background_color": "#7f1d1d",
                "border_color": "#fda4af",
                "text_color": "#fff1f2",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 30,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "move_speed",
                    "layer": "flat",
                    "operation": "add",
                    "value": 35
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "circle",
                "background_color": "#1e3a8a",
                "border_color": "#60a5fa",
                "text_color": "#eff6ff",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 18,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "stamina",
                    "layer": "flat",
                    "operation": "add",
                    "value": 20
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "circle",
                "background_color": "#312e81",
                "border_color": "#818cf8",
                "text_color": "#eef2ff",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "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
                }
            ],
            "appearance": {
                "shape": "square",
                "background_color": "#78350f",
                "border_color": "#fbbf24",
                "text_color": "#fffbeb",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "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
                }
            ],
            "appearance": {
                "shape": "square",
                "background_color": "#713f12",
                "border_color": "#fde047",
                "text_color": "#fefce8",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 20,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "patience",
                    "layer": "flat",
                    "operation": "add",
                    "value": 30
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "circle",
                "background_color": "#14532d",
                "border_color": "#4ade80",
                "text_color": "#f0fdf4",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 30,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "table_count",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "square",
                "background_color": "#14532d",
                "border_color": "#86efac",
                "text_color": "#f0fdf4",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 60,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "table_count",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "square",
                "background_color": "#14532d",
                "border_color": "#bbf7d0",
                "text_color": "#f0fdf4",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 15,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "plates",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "circle",
                "background_color": "#581c87",
                "border_color": "#c084fc",
                "text_color": "#faf5ff",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 35,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "plates",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "circle",
                "background_color": "#581c87",
                "border_color": "#d8b4fe",
                "text_color": "#faf5ff",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 75,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "payout",
                    "layer": "flat",
                    "operation": "add",
                    "value": 0.2
                }
            ],
            "visibility_conditions": [
                {
                    "path": "upgrade_nodes.sturdy_shell.purchased",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "reveal_conditions": [
                {
                    "path": "fact.boss_defeated",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "unlock_conditions": [
                {
                    "path": "fact.boss_defeated",
                    "operator": "truthy",
                    "value": true
                }
            ],
            "appearance": {
                "shape": "diamond",
                "background_color": "#4c1d95",
                "border_color": "#f0abfc",
                "text_color": "#fdf4ff",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "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
                }
            ],
            "appearance": {
                "shape": "square",
                "background_color": "#78350f",
                "border_color": "#fcd34d",
                "text_color": "#fffbeb",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 40,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "menu_slots",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "square",
                "background_color": "#14532d",
                "border_color": "#86efac",
                "text_color": "#f0fdf4",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 35,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "order_board_slots",
                    "layer": "flat",
                    "operation": "add",
                    "value": 6
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "square",
                "background_color": "#2e2415",
                "border_color": "#e8b855",
                "text_color": "#fff8e7",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 55,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "stove_count",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "square",
                "background_color": "#3a2412",
                "border_color": "#ffbe0b",
                "text_color": "#fff4e0",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 40,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "shelf_slots",
                    "layer": "flat",
                    "operation": "add",
                    "value": 3
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "square",
                "background_color": "#3a2f18",
                "border_color": "#c8973f",
                "text_color": "#fff4e0",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 70,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "spice_station_count",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "square",
                "background_color": "#2b1030",
                "border_color": "#b5179e",
                "text_color": "#fdf2ff",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "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
                }
            ],
            "appearance": {
                "shape": "square",
                "background_color": "#2b1030",
                "border_color": "#d16bd6",
                "text_color": "#fdf2ff",
                "image_path": ""
            },
            "state_styles": {},
            "on_purchase": []
        },
        "street_window": {
            "display_name": "Fenêtre sur la rue",
            "node_text": "COMPTOIR",
            "detailed_text": "Un comptoir percé dans le mur nord. On le remplit de verres dans les creux, et il vend seul aux passants — sans table, sans vaisselle, même pendant une plongée.",
            "category": "restaurant",
            "parent": "comfy_chairs",
            "direction": "W",
            "distance": 168,
            "cost": 50,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "drink_counter",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "circle",
                "background_color": "#12292f",
                "border_color": "#7fcea5",
                "text_color": "#eafff4",
                "image_path": ""
            },
            "state_styles": {},
            "on_purchase": []
        },
        "deeper_counter": {
            "display_name": "Grand comptoir",
            "node_text": "+6 VERRES",
            "detailed_text": "Six verres de plus derrière la vitre: le comptoir tient plus longtemps sans toi.",
            "category": "restaurant",
            "parent": "street_window",
            "direction": "SW",
            "distance": 168,
            "cost": 45,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "counter_stock",
                    "layer": "flat",
                    "operation": "add",
                    "value": 6
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "circle",
                "background_color": "#12292f",
                "border_color": "#a6e3c4",
                "text_color": "#eafff4",
                "image_path": ""
            },
            "state_styles": {},
            "on_purchase": []
        },
        "street_reputation": {
            "display_name": "Renom de rue",
            "node_text": "+0.2 ARRÊT",
            "detailed_text": "Une plus grande part des passants s'arrête au comptoir.",
            "category": "restaurant",
            "parent": "street_window",
            "direction": "NW",
            "distance": 168,
            "cost": 55,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "window_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
                }
            ],
            "appearance": {
                "shape": "circle",
                "background_color": "#12292f",
                "border_color": "#a6e3c4",
                "text_color": "#eafff4",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 90,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "server_count",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "hexagon",
                "background_color": "#1b2a3a",
                "border_color": "#4cc9f0",
                "text_color": "#ffffff",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 160,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "server_count",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "hexagon",
                "background_color": "#1b2a3a",
                "border_color": "#7fd8f0",
                "text_color": "#ffffff",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 110,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "cook_count",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "hexagon",
                "background_color": "#3a2412",
                "border_color": "#ffbe0b",
                "text_color": "#ffffff",
                "image_path": ""
            },
            "state_styles": {},
            "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,
            "cost": 190,
            "cost_resource": "coins",
            "scope": "dimension",
            "modifiers": [
                {
                    "variable": "cook_count",
                    "layer": "flat",
                    "operation": "add",
                    "value": 1
                }
            ],
            "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
                }
            ],
            "appearance": {
                "shape": "hexagon",
                "background_color": "#3a2412",
                "border_color": "#ffd97a",
                "text_color": "#ffffff",
                "image_path": ""
            },
            "state_styles": {},
            "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",
            "visuals": {},
            "vfx": {},
            "on_enter": [],
            "ambient_color": "#ffffff",
            "ambient_energy": 1
        },
        "feather_roost": {
            "display_name": "Perchoir de plumes",
            "description": "Un nid qui ne dort jamais.",
            "floor_color": "#2a2118",
            "wall_color": "#7b6a53",
            "accent_color": "#6f5a31",
            "visuals": {},
            "vfx": {},
            "on_enter": [],
            "ambient_color": "#ffffff",
            "ambient_energy": 1
        },
        "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",
            "visuals": {},
            "vfx": {},
            "on_enter": [],
            "ambient_color": "#ffffff",
            "ambient_energy": 1
        },
        "ember_burrow": {
            "display_name": "Terrier de braise",
            "description": "La chaleur monte à travers la pierre fendue.",
            "floor_color": "#3a1818",
            "wall_color": "#7b5353",
            "accent_color": "#6f3131",
            "visuals": {},
            "vfx": {},
            "on_enter": [],
            "ambient_color": "#ffffff",
            "ambient_energy": 1
        },
        "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",
            "visuals": {},
            "vfx": {},
            "on_enter": [],
            "ambient_color": "#ffffff",
            "ambient_energy": 1
        },
        "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",
            "visuals": {},
            "vfx": {},
            "on_enter": [],
            "ambient_color": "#ffffff",
            "ambient_energy": 1
        },
        "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",
            "visuals": {},
            "vfx": {},
            "on_enter": [],
            "ambient_color": "#ffffff",
            "ambient_energy": 1
        }
    },
    "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,
            "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,
            "modifiers": [
                {
                    "variable": "stamina",
                    "layer": "flat",
                    "operation": "add",
                    "value": 25
                }
            ],
            "on_taken": []
        },
        "light_step": {
            "display_name": "Pas léger",
            "description": "+15 % de vitesse pour le reste de la plongée.",
            "weight": 3,
            "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,
            "modifiers": [
                {
                    "variable": "max_health",
                    "layer": "flat",
                    "operation": "add",
                    "value": 30
                }
            ],
            "on_taken": []
        },
        "quiet_halls": {
            "display_name": "Couloirs calmes",
            "description": "Les salles contiennent 3 créatures de moins.",
            "weight": 2,
            "modifiers": [
                {
                    "variable": "room_spawn_initial",
                    "layer": "flat",
                    "operation": "add",
                    "value": -3
                }
            ],
            "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,
            "modifiers": [
                {
                    "variable": "room_spawn_initial",
                    "layer": "flat",
                    "operation": "add",
                    "value": 4
                },
                {
                    "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,
            "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,
            "modifiers": [
                {
                    "variable": "player_vision",
                    "layer": "flat",
                    "operation": "add",
                    "value": 120
                }
            ],
            "on_taken": []
        }
    },
    "room_elements": {
        "crate": {
            "display_name": "Caisse",
            "description": "Une caisse de ravitaillement qui se casse.",
            "kind": "destructible",
            "shape": "square",
            "color": "#8a6a3d",
            "size": 1,
            "health": 12,
            "damage": 0,
            "trigger_radius": 0,
            "rearm_delay": 0,
            "coins": 0,
            "solid": true,
            "drops": {
                "egg": 1
            },
            "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,
            "damage": 0,
            "trigger_radius": 0,
            "rearm_delay": 0,
            "coins": 0,
            "solid": false,
            "drops": {
                "mushroom": 1
            },
            "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,
            "damage": 12,
            "trigger_radius": 34,
            "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,
            "damage": 0,
            "trigger_radius": 0,
            "rearm_delay": 0,
            "coins": 25,
            "solid": true,
            "drops": {
                "beast_meat": 1
            },
            "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,
            "health": 0,
            "damage": 0,
            "trigger_radius": 0,
            "rearm_delay": 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,
            "damage": 0,
            "trigger_radius": 0,
            "rearm_delay": 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,
            "initial_enemies": {
                "chicken_beast": 1
            },
            "reinforcement_enemies": {
                "chicken_beast": 1
            },
            "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": 0,
            "reinforcement_waves": 1,
            "reward_choices": 0,
            "max_per_run": 0,
            "exit_offset": 1,
            "exit_level": 0,
            "reinforcement_duration": 0,
            "initial_enemies": {
                "slime": 1
            },
            "reinforcement_enemies": {},
            "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,
            "initial_enemies": {
                "fungling": 1
            },
            "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,
            "initial_enemies": {
                "pepper_imp": 1
            },
            "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.direct_contact.display_name": {
            "default": "Impact direct"
        },
        "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"
        },
        "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.counter_stock.description": {
            "default": "How many prepared drinks the street counter can hold."
        },
        "stat.counter_stock.display_name": {
            "default": "Counter Stock"
        },
        "stat.drink_counter.description": {
            "default": "Set to 1 once the street window is open. Passers-by buy a drink without taking a table."
        },
        "stat.drink_counter.display_name": {
            "default": "Street Counter"
        },
        "stat.drink_price.description": {
            "default": "Coins a passer-by pays for a drink at the street window."
        },
        "stat.drink_price.display_name": {
            "default": "Drink Price"
        },
        "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.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"
        },
        "stat.window_appeal.description": {
            "default": "Share of passers-by who stop at the street window when it has stock."
        },
        "stat.window_appeal.display_name": {
            "default": "Window Appeal"
        },
        "ui.board.empty": {
            "default": "Nothing on the board"
        },
        "ui.board.line": {
            "default": "T%d  %s"
        },
        "ui.board.title": {
            "default": "ORDERS  %d/%d"
        },
        "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 %s"
        },
        "ui.customer.step_closer": {
            "default": "%s is waiting — step closer to read the order"
        },
        "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 | R/X walk-run"
        },
        "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 | R/X walk-run"
        },
        "ui.dungeon.objective_fighting_biome": {
            "default": "%s — room %d/%d, %d creatures left | Space/A attack | Q/B dash | R/X walk-run"
        },
        "ui.dungeon.objective_room": {
            "default": "%s — %d creatures left | Space/A attack | Q/B dash | R/X walk-run"
        },
        "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.menu.cook_tooltip": {
            "default": "Cook this dish"
        },
        "ui.menu.count": {
            "default": "On menu %d/%d"
        },
        "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.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 dirty plate"
        },
        "ui.plate.pick_up": {
            "default": "Pick up %s"
        },
        "ui.plate.picked_up": {
            "default": "Picked up %s"
        },
        "ui.plate.serve_wrong": {
            "default": "Wrong plate — %s ordered %s"
        },
        "ui.prompt.console": {
            "default": "Manage the shop"
        },
        "ui.prompt.cook": {
            "default": "Hold to cook %s"
        },
        "ui.prompt.dishwasher": {
            "default": "Dishwasher / plate closet"
        },
        "ui.prompt.no_plate": {
            "default": "No clean plate — use dishwasher"
        },
        "ui.prompt.shelf": {
            "default": "Plate shelf"
        },
        "ui.prompt.shelf_put": {
            "default": "Put the plate on the shelf"
        },
        "ui.prompt.spices": {
            "default": "Spice station (bring a meal)"
        },
        "ui.prompt.spices_put": {
            "default": "Refine this meal"
        },
        "ui.prompt.trash": {
            "default": "Trash can"
        },
        "ui.prompt.trash_put": {
            "default": "Throw the carried plate away"
        },
        "ui.prompt.wash": {
            "default": "Wash carried dirty plate"
        },
        "ui.prompt.window": {
            "default": "Fill the street counter"
        },
        "ui.restaurant.away_dry": {
            "default": "The counter ran dry before you came back."
        },
        "ui.restaurant.away_sales": {
            "default": "While you were out: %d drinks 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 shop."
        },
        "ui.restaurant.cooking_started": {
            "default": "Cooking %s…"
        },
        "ui.restaurant.counter_filled": {
            "default": "Counter filled: %d/%d drinks"
        },
        "ui.restaurant.counter_full": {
            "default": "The counter is already full."
        },
        "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 shop 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.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.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.window": {
            "default": "WINDOW"
        },
        "ui.station.window_stock": {
            "default": "Drinks %d/%d"
        },
        "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 verres de plus derrière la vitre: le comptoir tient plus longtemps sans toi."
        },
        "upgrade_nodes.deeper_counter.display_name": {
            "default": "Grand comptoir"
        },
        "upgrade_nodes.deeper_counter.node_text": {
            "default": "+6 VERRES"
        },
        "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'arrête au comptoir."
        },
        "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 comptoir percé dans le mur nord. On le remplit de verres dans les creux, et il vend seul aux passants — sans table, sans vaisselle, même pendant une plongée."
        },
        "upgrade_nodes.street_window.display_name": {
            "default": "Fenêtre sur la rue"
        },
        "upgrade_nodes.street_window.node_text": {
            "default": "COMPTOIR"
        },
        "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"
        },
        "ui.menu.title_cook": {
            "default": "PICK A DISH"
        },
        "ui.menu.hint_cook": {
            "default": "Space/A cooks the dish — Esc/B closes"
        },
        "ui.menu.empty_cook": {
            "default": "Nothing on the menu — open the desk to put a dish back on it"
        },
        "ui.console.title": {
            "default": "MANAGEMENT DESK"
        },
        "ui.console.hint": {
            "default": "Space/A or Left/Right acts on the focused line — Esc/B closes"
        },
        "ui.console.section_menu": {
            "default": "TODAY'S MENU"
        },
        "ui.console.section_brigade": {
            "default": "THE BRIGADE"
        },
        "ui.console.open": {
            "default": "OPEN — close the shop"
        },
        "ui.console.closed": {
            "default": "CLOSED — open the shop"
        },
        "ui.console.switch_tooltip": {
            "default": "Closing sends the queue away without a reputation hit"
        },
        "ui.console.rate": {
            "default": "Actual throughput %.1f meals/min"
        },
        "ui.console.slots": {
            "default": "%s %d/%d"
        },
        "ui.console.no_slots": {
            "default": "No post is open yet — upgrades open them"
        },
        "ui.console.hire": {
            "default": "Hire"
        },
        "ui.console.dismiss": {
            "default": "Dismiss"
        },
        "ui.console.hire_tooltip": {
            "default": "Takes the post right away, until the end of the dimension"
        },
        "ui.console.dismiss_tooltip": {
            "default": "Frees the post. What was paid is gone"
        },
        "ui.console.hire_locked": {
            "default": "This one will not sign yet"
        },
        "ui.console.hire_no_slot": {
            "default": "No open post for that role"
        },
        "ui.console.hire_no_coins": {
            "default": "Not enough coins to hire"
        },
        "ui.role.server": {
            "default": "Servers"
        },
        "ui.role.cook": {
            "default": "Cooks"
        },
        "ui.skill.pace": {
            "default": "Pace"
        },
        "ui.skill.stamina": {
            "default": "Stamina"
        },
        "ui.skill.sight": {
            "default": "Sight"
        },
        "ui.skill.attentiveness": {
            "default": "Attentiveness"
        },
        "ui.skill.charisma": {
            "default": "Charisma"
        },
        "ui.skill.tray": {
            "default": "Tray"
        },
        "ui.skill.tidiness": {
            "default": "Tidiness"
        },
        "ui.skill.poise": {
            "default": "Poise"
        },
        "ui.skill.craft": {
            "default": "Craft"
        },
        "ui.skill.plating": {
            "default": "Plating"
        },
        "ui.skill.thrift": {
            "default": "Thrift"
        },
        "ui.skill.mise": {
            "default": "Mise en place"
        },
        "ui.skill.nose": {
            "default": "Nose"
        },
        "ui.station_kind.stove": {
            "default": "Stove"
        },
        "ui.station_kind.spices": {
            "default": "Spices"
        }
    }
}
