{
  "$description": "Tattoo Company motion system v1. Shared by every brand in the family. Motion moves frames, cues and controls; it never moves the chrome mark beyond opacity. Durations and distances collapse under prefers-reduced-motion: reduce.",
  "duration": {
    "instant": {
      "$type": "duration",
      "$value": {
        "value": 0,
        "unit": "ms"
      },
      "$description": "State flips that need no travel (aria-pressed swaps under reduced motion)."
    },
    "micro": {
      "$type": "duration",
      "$value": {
        "value": 90,
        "unit": "ms"
      },
      "$description": "Hover color and press feedback."
    },
    "fast": {
      "$type": "duration",
      "$value": {
        "value": 140,
        "unit": "ms"
      },
      "$description": "Link cues, nav underlines, indicator dots."
    },
    "base": {
      "$type": "duration",
      "$value": {
        "value": 220,
        "unit": "ms"
      },
      "$description": "Buttons, segmented controls, status messages, card hover lift."
    },
    "frame": {
      "$type": "duration",
      "$value": {
        "value": 420,
        "unit": "ms"
      },
      "$description": "Cards and sections entering the viewport."
    },
    "stage": {
      "$type": "duration",
      "$value": {
        "value": 640,
        "unit": "ms"
      },
      "$description": "Hero surfaces and full-bleed frames."
    },
    "assemble": {
      "$type": "duration",
      "$value": {
        "value": 900,
        "unit": "ms"
      },
      "$description": "ASCII seal assemble sweep."
    }
  },
  "easing": {
    "strike": {
      "$type": "cubicBezier",
      "$value": [
        0.16,
        1,
        0.3,
        1
      ],
      "$description": "Accelerated entrance (expo-out). Fast first, then settles, like a needle meeting skin. Default for anything arriving."
    },
    "lift": {
      "$type": "cubicBezier",
      "$value": [
        0.7,
        0,
        0.84,
        0
      ],
      "$description": "Accelerated exit (quart-in). Leaves quickly and gets out of the way."
    },
    "swap": {
      "$type": "cubicBezier",
      "$value": [
        0.65,
        0,
        0.35,
        1
      ],
      "$description": "In-place state change (cubic in-out): toggles, segmented controls."
    },
    "press": {
      "$type": "cubicBezier",
      "$value": [
        0.2,
        0,
        0,
        1
      ],
      "$description": "Press and release of buttons."
    },
    "loop": {
      "$type": "cubicBezier",
      "$value": [
        0,
        0,
        1,
        1
      ],
      "$description": "Linear. Continuous loops only (ASCII seal turn)."
    }
  },
  "ratio": {
    "exit": {
      "$type": "number",
      "$value": 0.66,
      "$description": "Exit duration = entrance duration x 0.66."
    }
  },
  "stagger": {
    "step": {
      "$type": "duration",
      "$value": {
        "value": 40,
        "unit": "ms"
      },
      "$description": "Delay between siblings entering together."
    },
    "max-items": {
      "$type": "number",
      "$value": 6,
      "$description": "Items after the sixth enter with the sixth; total stagger never exceeds 240ms."
    }
  },
  "distance": {
    "rise": {
      "$type": "dimension",
      "$value": {
        "value": 12,
        "unit": "px"
      },
      "$description": "Frame entrance travel, upward from the bottom anchor."
    },
    "nudge": {
      "$type": "dimension",
      "$value": {
        "value": 4,
        "unit": "px"
      },
      "$description": "Small element travel (status, menus)."
    },
    "hover-lift": {
      "$type": "dimension",
      "$value": {
        "value": 2,
        "unit": "px"
      },
      "$description": "Card hover lift."
    },
    "cue-extend": {
      "$type": "number",
      "$value": 1.75,
      "$description": "Link cue scaleX on hover, from its left anchor."
    },
    "press-scale": {
      "$type": "number",
      "$value": 0.98,
      "$description": "Button press scale, from center."
    }
  },
  "anchor": {
    "link-cue": {
      "$type": "string",
      "$value": "0% 50%",
      "$description": "Text links, needle-line cues and underlines grow in reading direction from the left."
    },
    "underline-exit": {
      "$type": "string",
      "$value": "100% 50%",
      "$description": "Underlines leave toward the right, so the line always travels forward."
    },
    "button": {
      "$type": "string",
      "$value": "50% 50%",
      "$description": "Buttons and chips press from center."
    },
    "frame": {
      "$type": "string",
      "$value": "50% 100%",
      "$description": "Cards, panels and sections rise from the bottom edge, as if set down on a surface."
    },
    "menu": {
      "$type": "string",
      "$value": "50% 0%",
      "$description": "Menus, selects and popovers open from the edge touching their trigger."
    },
    "status": {
      "$type": "string",
      "$value": "0% 0%",
      "$description": "Inline status and toasts start at the control that caused them."
    },
    "indicator": {
      "$type": "string",
      "$value": "50% 50%",
      "$description": "Dots and active markers scale from center."
    },
    "mark": {
      "$type": "string",
      "$value": "50% 50%",
      "$description": "Logos: opacity only. Never scale above 1, rotate, skew or bounce the chrome mark."
    }
  }
}
