{
  "schemaVersion": "1.0.0",
  "kind": "nandarona.character-2d-runtime",
  "characterId": "saikuri",
  "familyId": "scene",
  "sourceRelease": "saikuri@2.8.0",
  "canvas": {
    "width": 512,
    "height": 512,
    "background": "white-matte"
  },
  "rendering": {
    "sourceCanvas": {
      "width": 512,
      "height": 512,
      "background": "white-matte"
    },
    "includedFormats": [
      "png",
      "webp"
    ],
    "alphaStatus": "not-included",
    "recommendedBlend": "normal",
    "warning": "Current frames use a white matte. Transparent overlays, OBS scene collections, video templates, stream plugins, fonts, audio, engine-native UI assets, and animation rigs are not included and must not be claimed as included."
  },
  "runtime": {
    "coordinateSystem": "normalized-screen-top-left",
    "defaultPivot": {
      "x": 0.5,
      "y": 0.5
    },
    "stateCount": 6,
    "supportedAspects": [
      "16:9",
      "9:16",
      "1:1"
    ],
    "safeAreaPolicy": "Keep content-bearing center and platform safe areas unobstructed; scale or reposition the cue rather than crop its functional organ.",
    "transitionPolicy": "Interpolate only declared channels; use state changes for semantic transitions such as ready, covered, saved, paused, replaying, and ended.",
    "reducedMotion": "Replace travel, rotation, and pulsing with 120ms or longer crossfades while retaining geometry, count, state label, and screen position.",
    "accessibilityPolicy": "No state may depend on flashing, hue, or motion alone; static geometry must distinguish every canonical state."
  },
  "motion": {
    "characterId": "saikuri",
    "motionModel": "three-round-bounded-loop",
    "channels": [
      {
        "id": "remainingLoops",
        "type": "integer",
        "range": [
          0,
          3
        ],
        "default": 3
      },
      {
        "id": "loopProgress",
        "type": "normalized",
        "range": [
          0,
          1
        ],
        "default": 0
      },
      {
        "id": "exitOpen",
        "type": "normalized",
        "range": [
          0,
          1
        ],
        "default": 0
      }
    ],
    "pivot": {
      "x": 0.5,
      "y": 0.5
    },
    "collision": "three-track-ring-with-exit-gap",
    "loop": {
      "states": [
        "start-loop",
        "round-one",
        "two-left",
        "last-loop"
      ],
      "durationMs": 2400
    }
  },
  "frames": [
    {
      "state": "three-loops",
      "index": 0,
      "png": "media/frames/three-loops.png",
      "webp": "media/frames/three-loops.webp",
      "sourceRect": {
        "x": 0,
        "y": 0,
        "width": 512,
        "height": 512
      },
      "contentBounds": {
        "x": 0.1758,
        "y": 0.2148,
        "width": 0.7227,
        "height": 0.6406
      }
    },
    {
      "state": "start-loop",
      "index": 1,
      "png": "media/frames/start-loop.png",
      "webp": "media/frames/start-loop.webp",
      "sourceRect": {
        "x": 512,
        "y": 0,
        "width": 512,
        "height": 512
      },
      "contentBounds": {
        "x": 0.1289,
        "y": 0.2148,
        "width": 0.6992,
        "height": 0.6406
      }
    },
    {
      "state": "round-one",
      "index": 2,
      "png": "media/frames/round-one.png",
      "webp": "media/frames/round-one.webp",
      "sourceRect": {
        "x": 1024,
        "y": 0,
        "width": 512,
        "height": 512
      },
      "contentBounds": {
        "x": 0.1055,
        "y": 0.2148,
        "width": 0.709,
        "height": 0.6406
      }
    },
    {
      "state": "two-left",
      "index": 3,
      "png": "media/frames/two-left.png",
      "webp": "media/frames/two-left.webp",
      "sourceRect": {
        "x": 0,
        "y": 512,
        "width": 512,
        "height": 512
      },
      "contentBounds": {
        "x": 0.2324,
        "y": 0.1777,
        "width": 0.5918,
        "height": 0.5078
      }
    },
    {
      "state": "last-loop",
      "index": 4,
      "png": "media/frames/last-loop.png",
      "webp": "media/frames/last-loop.webp",
      "sourceRect": {
        "x": 512,
        "y": 512,
        "width": 512,
        "height": 512
      },
      "contentBounds": {
        "x": 0.209,
        "y": 0.2246,
        "width": 0.5313,
        "height": 0.4609
      }
    },
    {
      "state": "exit-gap",
      "index": 5,
      "png": "media/frames/exit-gap.png",
      "webp": "media/frames/exit-gap.webp",
      "sourceRect": {
        "x": 1024,
        "y": 512,
        "width": 512,
        "height": 512
      },
      "contentBounds": {
        "x": 0.1152,
        "y": 0.1309,
        "width": 0.6934,
        "height": 0.6152
      }
    }
  ]
}
