{
  "name": "District Companion Lottie handoff (v2 precision build)",
  "version": "2.0.0-preview",
  "eyeVariants": {
    "dark": "light-purple eyes",
    "light": "black eyes"
  },
  "schema": "bodymovin JSON",
  "canvas": {
    "width": 240,
    "height": 240
  },
  "frameRate": 60,
  "defaultTheme": "dark",
  "themes": {
    "dark": {
      "body": "#4f259d",
      "eye": "#c3acf6",
      "signal": "#b48bf6",
      "success": "#d7bcff",
      "unavailable": "#ffffff",
      "surface": "#18171c",
      "muted": "#ffffff",
      "track": "#ffffff"
    },
    "light": {
      "body": "#4a1ea1",
      "eye": "#0c0b0e",
      "signal": "#7d4bdc",
      "success": "#a97cea",
      "unavailable": "#0c0b0e",
      "surface": "#ffffff",
      "muted": "#0c0b0e",
      "track": "#0c0b0e"
    }
  },
  "bakedOpacities": {
    "unavailable": 40,
    "muted": 60,
    "track": 25
  },
  "nativeColorKeypaths": {
    "body": "**.Theme Body Fill.Color",
    "eye": "**.Theme Eye Fill.Color",
    "signalFill": "**.Theme Signal Fill.Color",
    "signalStroke": "**.Theme Signal Stroke.Color",
    "successFill": "**.Theme Success Fill.Color",
    "successStroke": "**.Theme Success Stroke.Color",
    "unavailableFill": "**.Theme Unavailable Fill.Color",
    "surfaceFill": "**.Theme Surface Fill.Color",
    "surfaceStroke": "**.Theme Surface Stroke.Color",
    "mutedStroke": "**.Theme Muted Stroke.Color",
    "trackStroke": "**.Theme Track Stroke.Color"
  },
  "contract": {
    "conversationStates": [
      "waking",
      "ready",
      "listening",
      "acknowledged",
      "thinking",
      "clarification",
      "awaiting-confirmation",
      "taking-action",
      "speaking",
      "completed"
    ],
    "activityVariants": [
      "thinking",
      "searching"
    ],
    "surfaceVariants": [
      "resting"
    ],
    "independentConditions": [
      "mic-off",
      "no-permission",
      "completion-residue"
    ]
  },
  "animations": [
    {
      "id": "resting",
      "stateId": "waking",
      "kind": "surface",
      "file": "lottie-v2/dark/district-companion-resting.lottie.json",
      "files": {
        "dark": "lottie-v2/dark/district-companion-resting.lottie.json",
        "light": "lottie-v2/light/district-companion-resting.lottie.json"
      },
      "frameRate": 60,
      "frames": 288,
      "durationMs": 4800,
      "loop": true,
      "reducedMotionFrame": 0,
      "description": "Full-size closed-eye breath before activation."
    },
    {
      "id": "waking",
      "stateId": "waking",
      "kind": "conversation",
      "file": "lottie-v2/dark/district-companion-waking.lottie.json",
      "files": {
        "dark": "lottie-v2/dark/district-companion-waking.lottie.json",
        "light": "lottie-v2/light/district-companion-waking.lottie.json"
      },
      "frameRate": 60,
      "frames": 120,
      "durationMs": 2000,
      "loop": false,
      "reducedMotionFrame": 119,
      "description": "Finite wake-up: the whole character unfolds, the eyes open, and the pose settles."
    },
    {
      "id": "ready",
      "stateId": "ready",
      "kind": "conversation",
      "file": "lottie-v2/dark/district-companion-ready.lottie.json",
      "files": {
        "dark": "lottie-v2/dark/district-companion-ready.lottie.json",
        "light": "lottie-v2/light/district-companion-ready.lottie.json"
      },
      "frameRate": 60,
      "frames": 288,
      "durationMs": 4800,
      "loop": true,
      "reducedMotionFrame": 0,
      "description": "Quiet whole-character breath, projected gaze drift, and uneven blinks."
    },
    {
      "id": "listening",
      "stateId": "listening",
      "kind": "conversation",
      "file": "lottie-v2/dark/district-companion-listening.lottie.json",
      "files": {
        "dark": "lottie-v2/dark/district-companion-listening.lottie.json",
        "light": "lottie-v2/light/district-companion-listening.lottie.json"
      },
      "frameRate": 60,
      "frames": 144,
      "durationMs": 2400,
      "loop": true,
      "reducedMotionFrame": 0,
      "description": "Locked on the user: big eyes swell and lean in with each pulse, rings drawing inward."
    },
    {
      "id": "acknowledged",
      "stateId": "acknowledged",
      "kind": "conversation",
      "file": "lottie-v2/dark/district-companion-acknowledged.lottie.json",
      "files": {
        "dark": "lottie-v2/dark/district-companion-acknowledged.lottie.json",
        "light": "lottie-v2/light/district-companion-acknowledged.lottie.json"
      },
      "frameRate": 60,
      "frames": 120,
      "durationMs": 2000,
      "loop": false,
      "reducedMotionFrame": 119,
      "description": "Finite receipt: a whole-character perk while the right eye winks shut."
    },
    {
      "id": "thinking",
      "stateId": "thinking",
      "kind": "activity-variant",
      "file": "lottie-v2/dark/district-companion-thinking.lottie.json",
      "files": {
        "dark": "lottie-v2/dark/district-companion-thinking.lottie.json",
        "light": "lottie-v2/light/district-companion-thinking.lottie.json"
      },
      "frameRate": 60,
      "frames": 144,
      "durationMs": 2400,
      "loop": true,
      "reducedMotionFrame": 0,
      "description": "Understanding loop with eye scan and a continuous three-dot thinking wave."
    },
    {
      "id": "searching",
      "stateId": "thinking",
      "kind": "activity-variant",
      "file": "lottie-v2/dark/district-companion-searching.lottie.json",
      "files": {
        "dark": "lottie-v2/dark/district-companion-searching.lottie.json",
        "light": "lottie-v2/light/district-companion-searching.lottie.json"
      },
      "frameRate": 60,
      "frames": 192,
      "durationMs": 3200,
      "loop": true,
      "reducedMotionFrame": 0,
      "description": "Search variant with scanning eyes and an orbiting progress trace."
    },
    {
      "id": "clarification",
      "stateId": "clarification",
      "kind": "conversation",
      "file": "lottie-v2/dark/district-companion-clarification.lottie.json",
      "files": {
        "dark": "lottie-v2/dark/district-companion-clarification.lottie.json",
        "light": "lottie-v2/light/district-companion-clarification.lottie.json"
      },
      "frameRate": 60,
      "frames": 144,
      "durationMs": 2400,
      "loop": true,
      "reducedMotionFrame": 0,
      "description": "Attentive whole-character hold with a restrained clarification signal."
    },
    {
      "id": "awaiting-confirmation",
      "stateId": "awaiting-confirmation",
      "kind": "conversation",
      "file": "lottie-v2/dark/district-companion-awaiting-confirmation.lottie.json",
      "files": {
        "dark": "lottie-v2/dark/district-companion-awaiting-confirmation.lottie.json",
        "light": "lottie-v2/light/district-companion-awaiting-confirmation.lottie.json"
      },
      "frameRate": 60,
      "frames": 144,
      "durationMs": 2400,
      "loop": true,
      "reducedMotionFrame": 0,
      "description": "Steady, low-motion attention while consequential action confirmation is pending."
    },
    {
      "id": "taking-action",
      "stateId": "taking-action",
      "kind": "conversation",
      "file": "lottie-v2/dark/district-companion-taking-action.lottie.json",
      "files": {
        "dark": "lottie-v2/dark/district-companion-taking-action.lottie.json",
        "light": "lottie-v2/light/district-companion-taking-action.lottie.json"
      },
      "frameRate": 60,
      "frames": 144,
      "durationMs": 2400,
      "loop": true,
      "reducedMotionFrame": 0,
      "description": "Directional app-action progress with a whole-character lean and focused eyes."
    },
    {
      "id": "speaking",
      "stateId": "speaking",
      "kind": "conversation",
      "file": "lottie-v2/dark/district-companion-speaking.lottie.json",
      "files": {
        "dark": "lottie-v2/dark/district-companion-speaking.lottie.json",
        "light": "lottie-v2/light/district-companion-speaking.lottie.json"
      },
      "frameRate": 60,
      "frames": 144,
      "durationMs": 2400,
      "loop": true,
      "reducedMotionFrame": 0,
      "description": "Output beat with expanding staggered message rings and a flat light-purple halo."
    },
    {
      "id": "completed",
      "stateId": "completed",
      "kind": "conversation",
      "file": "lottie-v2/dark/district-companion-completed.lottie.json",
      "files": {
        "dark": "lottie-v2/dark/district-companion-completed.lottie.json",
        "light": "lottie-v2/light/district-companion-completed.lottie.json"
      },
      "frameRate": 60,
      "frames": 120,
      "durationMs": 2000,
      "loop": false,
      "reducedMotionFrame": 119,
      "description": "Finite success lift with closed happy eyes and a light-purple completion ring."
    },
    {
      "id": "mic-off",
      "stateId": "ready",
      "kind": "condition",
      "file": "lottie-v2/dark/district-companion-mic-off.lottie.json",
      "files": {
        "dark": "lottie-v2/dark/district-companion-mic-off.lottie.json",
        "light": "lottie-v2/light/district-companion-mic-off.lottie.json"
      },
      "frameRate": 60,
      "frames": 120,
      "durationMs": 2000,
      "loop": false,
      "reducedMotionFrame": 0,
      "description": "Static Mic off condition: muted body, live eyes, surface-coloured slash."
    },
    {
      "id": "no-permission",
      "stateId": "ready",
      "kind": "condition",
      "file": "lottie-v2/dark/district-companion-no-permission.lottie.json",
      "files": {
        "dark": "lottie-v2/dark/district-companion-no-permission.lottie.json",
        "light": "lottie-v2/light/district-companion-no-permission.lottie.json"
      },
      "frameRate": 60,
      "frames": 144,
      "durationMs": 2400,
      "loop": true,
      "reducedMotionFrame": 0,
      "description": "Microphone-permission unavailable: muted body with a gently pulsing lock."
    },
    {
      "id": "completion-residue",
      "stateId": "ready",
      "kind": "condition",
      "file": "lottie-v2/dark/district-companion-completion-residue.lottie.json",
      "files": {
        "dark": "lottie-v2/dark/district-companion-completion-residue.lottie.json",
        "light": "lottie-v2/light/district-companion-completion-residue.lottie.json"
      },
      "frameRate": 60,
      "frames": 480,
      "durationMs": 8000,
      "loop": true,
      "reducedMotionFrame": 0,
      "description": "Ready idle with a slow dashed success ring retained after completion."
    }
  ]
}
