{
  "schemaVersion": 1,
  "gameId": "g24_citie",
  "sampleOnly": true,
  "sampleSequence": "EX01-EX06 are representative schema examples across the 84-level plan, not consecutive production levels. Use productionSlotHint for intended pacing.",
  "coordinateSystem": "normalized-playfield-0..1",
  "designRule": "Every non-tutorial level has a concrete scene predicate and at least one object or consequence that makes indiscriminate attraction unsafe. EX01 is the only pure-success tutorial exemption in this sample set.",
  "physics": {
    "fixedHz": 60,
    "magneticRadius": 0.34,
    "maxAcceleration": 0.95,
    "linearDamping": 0.9,
    "clusterRelativeSpeedMax": 0.11,
    "clusterPermanentForRun": true,
    "fragileBreakSpeed": 0.35,
    "replaySeconds": 5
  },
  "levels": [
    {
      "id": "EX01",
      "productionSlotHint": "L01",
      "seed": 2201,
      "chapter": 1,
      "name": "钥匙在这",
      "pureSuccessTutorial": true,
      "scene": "仓库门落锁，先把钥匙抢出来。",
      "timerSeconds": 45,
      "tutorial": ["hold-drag-edge", "release-cuts-power"],
      "magnet": {"rail": "all-edges", "polarities": ["attract"], "start": {"x": 0.5, "y": 0.03}},
      "goals": [{"type": "extract", "portId": "rescue", "includeIds": ["key"], "required": 1}],
      "ports": [{"id": "rescue", "type": "rescue", "x": 0.5, "y": 0.02, "radius": 0.1}],
      "objects": [
        {"id": "key", "kind": "key", "x": 0.5, "y": 0.45, "radius": 0.035, "mass": 0.8, "tags": ["magnetic", "target"]},
        {"id": "bolt-a", "kind": "bolt", "x": 0.28, "y": 0.62, "radius": 0.03, "mass": 1, "tags": ["magnetic"]},
        {"id": "bolt-b", "kind": "bolt", "x": 0.72, "y": 0.66, "radius": 0.03, "mass": 1, "tags": ["magnetic"]}
      ],
      "terrain": []
    },
    {
      "id": "EX02",
      "productionSlotHint": "L02",
      "seed": 2202,
      "chapter": 1,
      "name": "电池别进门",
      "scene": "钥匙和旧电池挨得太近，换个方向吸。",
      "timerSeconds": 50,
      "tutorial": ["danger-link-preview"],
      "magnet": {"rail": "all-edges", "polarities": ["attract"], "start": {"x": 0.18, "y": 0.03}},
      "goals": [
        {"type": "extract", "portId": "rescue", "includeIds": ["key"], "required": 1},
        {"type": "forbidExtract", "portId": "rescue", "forbidTags": ["battery"]}
      ],
      "ports": [{"id": "rescue", "type": "rescue", "x": 0.82, "y": 0.02, "radius": 0.1}],
      "objects": [
        {"id": "key", "kind": "key", "x": 0.62, "y": 0.48, "radius": 0.035, "mass": 0.8, "tags": ["magnetic", "target"]},
        {"id": "battery", "kind": "battery", "x": 0.67, "y": 0.58, "radius": 0.045, "mass": 1.2, "tags": ["magnetic", "battery", "hazard"]},
        {"id": "gear", "kind": "gear", "x": 0.28, "y": 0.7, "radius": 0.045, "mass": 1.4, "tags": ["magnetic"]}
      ],
      "terrain": [{"id": "divider", "type": "wall", "x": 0.48, "y": 0.3, "w": 0.04, "h": 0.28}]
    },
    {
      "id": "EX03",
      "productionSlotHint": "L13",
      "seed": 2203,
      "chapter": 2,
      "name": "轻推玻璃",
      "scene": "老照片压在玻璃罩下，结个小团把罩子轻轻推开。",
      "timerSeconds": 60,
      "tutorial": ["low-speed-cluster", "fragile-speed"],
      "magnet": {"rail": "all-edges", "polarities": ["attract"], "start": {"x": 0.03, "y": 0.7}},
      "goals": [
        {"type": "push", "objectId": "glass", "axis": "y", "direction": "negative", "minDelta": 0.2, "mustSurvive": true, "unlocksObjectId": "photo"},
        {"type": "extract", "portId": "safe", "includeIds": ["photo"], "required": 1}
      ],
      "ports": [{"id": "safe", "type": "safe", "x": 0.9, "y": 0.55, "radius": 0.1}],
      "objects": [
        {"id": "photo", "kind": "metal-framed-photo", "name": "金属相框照片", "x": 0.55, "y": 0.54, "radius": 0.038, "mass": 0.4, "lockedByGoal": "push:glass", "tags": ["magnetic", "target", "keepsake"]},
        {"id": "scrap-a", "kind": "bolt", "x": 0.25, "y": 0.52, "radius": 0.035, "mass": 1, "tags": ["magnetic"]},
        {"id": "scrap-b", "kind": "gear", "x": 0.33, "y": 0.62, "radius": 0.04, "mass": 1.2, "tags": ["magnetic"]},
        {"id": "glass", "kind": "glass", "x": 0.68, "y": 0.54, "radius": 0.08, "mass": 2.8, "tags": ["nonmagnetic", "pushable", "fragile", "blocks-photo-to-safe-port"]}
      ],
      "terrain": []
    },
    {
      "id": "EX04",
      "productionSlotHint": "L37",
      "seed": 2204,
      "chapter": 4,
      "name": "先推再吸",
      "scene": "电池挡在扳手前，先用排斥把它送开。",
      "timerSeconds": 55,
      "tutorial": ["polarity-toggle"],
      "magnet": {"rail": "all-edges", "polarities": ["attract", "repel"], "start": {"x": 0.04, "y": 0.52}},
      "goals": [
        {"type": "extract", "portId": "tool", "includeIds": ["wrench"], "required": 1},
        {"type": "forbidExtract", "portId": "tool", "forbidTags": ["battery"]}
      ],
      "ports": [{"id": "tool", "type": "rescue", "x": 0.5, "y": 0.02, "radius": 0.1}],
      "objects": [
        {"id": "wrench", "kind": "wrench", "x": 0.52, "y": 0.66, "radius": 0.05, "mass": 1.3, "tags": ["magnetic", "target"]},
        {"id": "battery", "kind": "battery", "x": 0.48, "y": 0.48, "radius": 0.05, "mass": 1.3, "tags": ["magnetic", "battery", "hazard"]},
        {"id": "bolt", "kind": "bolt", "x": 0.72, "y": 0.58, "radius": 0.032, "mass": 0.9, "tags": ["magnetic"]}
      ],
      "terrain": [{"id": "left-pocket", "type": "pocket", "x": 0.12, "y": 0.52, "w": 0.12, "h": 0.22}]
    },
    {
      "id": "EX05",
      "productionSlotHint": "L73",
      "seed": 2205,
      "chapter": 7,
      "name": "三块铁一座桥",
      "scene": "小猫困在断口另一边，用三块干净废铁结团搭桥。",
      "timerSeconds": 65,
      "tutorial": ["bridge-mass", "cluster-is-permanent"],
      "magnet": {"rail": "all-edges", "polarities": ["attract", "repel"], "start": {"x": 0.85, "y": 0.97}},
      "goals": [{"type": "bridge", "zoneId": "bridge", "minMass": 3, "forbidTags": ["battery"]}],
      "ports": [],
      "objects": [
        {"id": "scrap-a", "kind": "gear", "x": 0.25, "y": 0.7, "radius": 0.045, "mass": 1.1, "tags": ["magnetic"]},
        {"id": "scrap-b", "kind": "bolt", "x": 0.38, "y": 0.56, "radius": 0.04, "mass": 1, "tags": ["magnetic"]},
        {"id": "scrap-c", "kind": "plate", "x": 0.58, "y": 0.72, "radius": 0.05, "mass": 1.4, "tags": ["magnetic"]},
        {"id": "battery", "kind": "battery", "x": 0.47, "y": 0.42, "radius": 0.045, "mass": 1.2, "tags": ["magnetic", "battery", "hazard"]}
      ],
      "terrain": [
        {"id": "bridge", "type": "goalZone", "x": 0.82, "y": 0.5, "w": 0.14, "h": 0.22},
        {"id": "cat", "type": "rescueActor", "x": 0.93, "y": 0.5}
      ]
    },
    {
      "id": "EX06",
      "productionSlotHint": "L61",
      "seed": 2206,
      "chapter": 6,
      "name": "压机前最后十秒",
      "scene": "压缩机正在推进；将电池送入危废格，并抢出齿轮和门钥匙。",
      "timerSeconds": 40,
      "tutorial": ["multi-target", "moving-threat"],
      "magnet": {"rail": "all-edges", "polarities": ["attract", "repel"], "start": {"x": 0.5, "y": 0.97}},
      "goals": [
        {"type": "multiExtract", "portId": "rescue", "includeIds": ["key", "gear"], "required": 2},
        {"type": "protectInZone", "zoneId": "hazard-bin", "includeIds": ["battery"]}
      ],
      "ports": [{"id": "rescue", "type": "rescue", "x": 0.5, "y": 0.02, "radius": 0.11}],
      "objects": [
        {"id": "key", "kind": "key", "x": 0.3, "y": 0.62, "radius": 0.035, "mass": 0.8, "tags": ["magnetic", "target"]},
        {"id": "gear", "kind": "gear", "x": 0.68, "y": 0.58, "radius": 0.052, "mass": 1.5, "tags": ["magnetic", "target"]},
        {"id": "battery", "kind": "battery", "x": 0.52, "y": 0.5, "radius": 0.048, "mass": 1.2, "tags": ["magnetic", "battery", "hazard"]},
        {"id": "scrap", "kind": "bolt", "x": 0.5, "y": 0.72, "radius": 0.035, "mass": 1, "tags": ["magnetic"]}
      ],
      "terrain": [
        {"id": "hazard-bin", "type": "goalZone", "x": 0.12, "y": 0.22, "w": 0.18, "h": 0.18},
        {"id": "press", "type": "movingThreat", "from": {"x": 0.02, "y": 0.85}, "to": {"x": 0.02, "y": 0.2}, "durationSeconds": 40}
      ]
    }
  ]
}
