{
  "animation": {
    "timing": {
      "type": "duration",
      "fast": {
        "value": "150ms"
      },
      "medium": {
        "value": "250ms"
      },
      "slow": {
        "value": "500ms"
      }
    },
    "easing": {
      "type": "cubic-bezier",
      "fast": {
        "value": [0, 0, 0.3, 1]
      },
      "medium": {
        "value": [0.03, 0.5, 0.25, 1]
      },
      "bounce": {
        "value": [0.3, 1.5, 0.6, 0.95]
      }
    },
    "transition": {
      "transitionType": {
        "type": "typedef",
        "value": {
          "timing": {
            "type": "duration",
            "required": true
          },
          "easing": {
            "type": "cubic-bezier",
            "required": true
          }
        }
      },
      "fast": {
        "type": "{animation.transition.transitionType}",
        "description": "Transitions of small UI elements, such as buttons, dropdowns, popovers, inputs, etc.",
        "value": {
          "timing": "{animation.timing.fast}",
          "easing": "{animation.easing.fast}"
        }
      },
      "medium": {
        "type": "{animation.transition.transitionType}",
        "description": "Transitions of large UI elements, such as dialogs, windows, drawers, pages, sections, etc.",
        "value": {
          "timing": "{animation.timing.medium}",
          "easing": "{animation.easing.medium}"
        }
      },
      "slow": {
        "type": "{animation.transition.transitionType}",
        "value": {
          "timing": "{animation.timing.slow}",
          "easing": "{animation.easing.medium}"
        }
      },
      "callout": {
        "type": "{animation.transition.transitionType}",
        "description": "Transition of elements that need to grab the user’s attention, such as snakcbars, notifications, etc.",
        "value": {
          "timing": "{animation.timing.medium}",
          "easing": "{animation.easing.bounce}"
        }
      }
    }
  }
}
