{
  "generatedAt": "2026-07-06",
  "note": "Released catalog baseline for ADR-0001 D2 SemVer gate. Relock at release time.",
  "primitives": {
    "bounceLoop": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "distance": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^[0-9]*\\.?[0-9]+(px|rem|em)$"
        },
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.4,
          "max": 6,
          "pattern": null
        }
      }
    },
    "breatheLoop": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "duration": {
          "type": "number",
          "required": false,
          "min": 2,
          "max": 12,
          "pattern": null
        },
        "minOpacity": {
          "type": "number",
          "required": false,
          "min": 0,
          "max": 0.95,
          "pattern": null
        }
      }
    },
    "counterUp": {
      "version": "1.0.0",
      "output": "js",
      "params": {
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.2,
          "max": 5,
          "pattern": null
        },
        "ease": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^[A-Za-z0-9.()]{1,40}$"
        },
        "locale": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$"
        },
        "step": {
          "type": "number",
          "required": false,
          "min": 0.01,
          "max": 1000,
          "pattern": null
        }
      }
    },
    "cssTransition": {
      "version": "2.0.0",
      "output": "css",
      "params": {
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.05,
          "max": 1,
          "pattern": null
        },
        "easing": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^(ease|ease-in|ease-out|ease-in-out|linear|step-start|step-end|cubic-bezier\\([-0-9., ]{1,40}\\))$"
        },
        "hoverValue": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^[A-Za-z0-9#%.,()-]+( [A-Za-z0-9#%.,()-]+)?( [A-Za-z0-9#%.,()-]+)?$"
        },
        "property": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^(transform|opacity|color|background-color|border-color|filter|width|height)$"
        }
      }
    },
    "fadeOnScroll": {
      "version": "1.0.0",
      "output": "js",
      "params": {
        "fromOpacity": {
          "type": "number",
          "required": false,
          "min": 0,
          "max": 1,
          "pattern": null
        },
        "scrub": {
          "type": "number",
          "required": false,
          "min": 0,
          "max": 3,
          "pattern": null
        },
        "toOpacity": {
          "type": "number",
          "required": false,
          "min": 0,
          "max": 1,
          "pattern": null
        }
      }
    },
    "flipLoop": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "duration": {
          "type": "number",
          "required": false,
          "min": 1,
          "max": 30,
          "pattern": null
        }
      }
    },
    "flipReveal": {
      "version": "1.0.0",
      "output": "js",
      "params": {
        "degrees": {
          "type": "number",
          "required": false,
          "min": 15,
          "max": 90,
          "pattern": null
        },
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.1,
          "max": 3,
          "pattern": null
        },
        "ease": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^[A-Za-z0-9.()]{1,40}$"
        }
      }
    },
    "floatLoop": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "axis": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^(x|y)$"
        },
        "distance": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^[0-9]*\\.?[0-9]+(px|rem|%)$"
        },
        "duration": {
          "type": "number",
          "required": false,
          "min": 1,
          "max": 10,
          "pattern": null
        }
      }
    },
    "glideLoop": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "distance": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^[0-9]*\\.?[0-9]+(px|rem|em)$"
        },
        "duration": {
          "type": "number",
          "required": false,
          "min": 1,
          "max": 12,
          "pattern": null
        }
      }
    },
    "hoverExpand": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.05,
          "max": 1,
          "pattern": null
        },
        "lift": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^[0-9]*\\.?[0-9]+(px|rem|em)$"
        },
        "scale": {
          "type": "number",
          "required": false,
          "min": 1.01,
          "max": 1.3,
          "pattern": null
        }
      }
    },
    "hoverFlip": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "degrees": {
          "type": "number",
          "required": false,
          "min": 10,
          "max": 360,
          "pattern": null
        },
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.1,
          "max": 2,
          "pattern": null
        }
      }
    },
    "hoverGrow": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.05,
          "max": 1,
          "pattern": null
        },
        "scale": {
          "type": "number",
          "required": false,
          "min": 1.01,
          "max": 1.3,
          "pattern": null
        }
      }
    },
    "hoverLift": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "distance": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^[0-9]*\\.?[0-9]+(px|rem|em)$"
        },
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.05,
          "max": 1,
          "pattern": null
        }
      }
    },
    "hoverRotate": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "degrees": {
          "type": "number",
          "required": false,
          "min": 1,
          "max": 20,
          "pattern": null
        },
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.05,
          "max": 1,
          "pattern": null
        }
      }
    },
    "hoverSink": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "distance": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^[0-9]*\\.?[0-9]+(px|rem|em)$"
        },
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.05,
          "max": 1,
          "pattern": null
        }
      }
    },
    "hoverSkew": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.05,
          "max": 1,
          "pattern": null
        },
        "skew": {
          "type": "number",
          "required": false,
          "min": 1,
          "max": 20,
          "pattern": null
        }
      }
    },
    "hoverSpin": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.1,
          "max": 2,
          "pattern": null
        }
      }
    },
    "jelloLoop": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.5,
          "max": 10,
          "pattern": null
        },
        "skew": {
          "type": "number",
          "required": false,
          "min": 1,
          "max": 20,
          "pattern": null
        }
      }
    },
    "kenBurns": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "duration": {
          "type": "number",
          "required": false,
          "min": 6,
          "max": 60,
          "pattern": null
        },
        "scale": {
          "type": "number",
          "required": false,
          "min": 1.01,
          "max": 1.4,
          "pattern": null
        }
      }
    },
    "marquee": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "direction": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^(normal|reverse)$"
        },
        "duration": {
          "type": "number",
          "required": false,
          "min": 4,
          "max": 120,
          "pattern": null
        },
        "gap": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^[0-9]*\\.?[0-9]+(px|rem|em|vw|ch|%)$"
        }
      }
    },
    "marqueeVertical": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "direction": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^(normal|reverse)$"
        },
        "duration": {
          "type": "number",
          "required": false,
          "min": 4,
          "max": 120,
          "pattern": null
        },
        "gap": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^[0-9]*\\.?[0-9]+(px|rem|em)$"
        }
      }
    },
    "parallaxLayer": {
      "version": "1.1.0",
      "output": "js",
      "params": {
        "scrub": {
          "type": "number",
          "required": false,
          "min": 0,
          "max": 4,
          "pattern": null
        },
        "yPercent": {
          "type": "number",
          "required": false,
          "min": -100,
          "max": 100,
          "pattern": null
        }
      }
    },
    "parallaxX": {
      "version": "1.0.0",
      "output": "js",
      "params": {
        "scrub": {
          "type": "number",
          "required": false,
          "min": 0,
          "max": 3,
          "pattern": null
        },
        "xPercent": {
          "type": "number",
          "required": false,
          "min": -100,
          "max": 100,
          "pattern": null
        }
      }
    },
    "pinnedSection": {
      "version": "2.0.0",
      "output": "js",
      "params": {
        "distance": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^\\+=[0-9]{1,6}(\\.[0-9]{1,3})?(px|%|vh|vw|em|rem)?$"
        },
        "pinSpacing": {
          "type": "boolean",
          "required": false,
          "min": null,
          "max": null,
          "pattern": null
        }
      }
    },
    "pressShrink": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.05,
          "max": 0.5,
          "pattern": null
        },
        "scale": {
          "type": "number",
          "required": false,
          "min": 0.8,
          "max": 1,
          "pattern": null
        }
      }
    },
    "pulseLoop": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.5,
          "max": 10,
          "pattern": null
        },
        "scale": {
          "type": "number",
          "required": false,
          "min": 1.01,
          "max": 1.5,
          "pattern": null
        }
      }
    },
    "revealScale": {
      "version": "1.0.0",
      "output": "js",
      "params": {
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.1,
          "max": 3,
          "pattern": null
        },
        "ease": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^[A-Za-z0-9.()]{1,40}$"
        },
        "fromScale": {
          "type": "number",
          "required": false,
          "min": 0.5,
          "max": 1,
          "pattern": null
        }
      }
    },
    "rotateOnScroll": {
      "version": "1.0.0",
      "output": "js",
      "params": {
        "degrees": {
          "type": "number",
          "required": false,
          "min": -180,
          "max": 180,
          "pattern": null
        },
        "scrub": {
          "type": "number",
          "required": false,
          "min": 0,
          "max": 3,
          "pattern": null
        }
      }
    },
    "scaleOnScroll": {
      "version": "1.0.0",
      "output": "js",
      "params": {
        "fromScale": {
          "type": "number",
          "required": false,
          "min": 0.2,
          "max": 1,
          "pattern": null
        },
        "scrub": {
          "type": "number",
          "required": false,
          "min": 0,
          "max": 4,
          "pattern": null
        },
        "toScale": {
          "type": "number",
          "required": false,
          "min": 0.5,
          "max": 2,
          "pattern": null
        },
        "transformOrigin": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^[a-zA-Z0-9% ]{2,40}$"
        }
      }
    },
    "scrollReveal": {
      "version": "2.0.0",
      "output": "js",
      "params": {
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.1,
          "max": 3,
          "pattern": null
        },
        "ease": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^[A-Za-z0-9.()]{1,40}$"
        },
        "from": {
          "type": "transform",
          "required": true,
          "min": null,
          "max": null,
          "pattern": null
        },
        "stagger": {
          "type": "number",
          "required": false,
          "min": 0,
          "max": 0.5,
          "pattern": null
        }
      }
    },
    "skewOnScroll": {
      "version": "1.0.0",
      "output": "js",
      "params": {
        "scrub": {
          "type": "number",
          "required": false,
          "min": 0,
          "max": 3,
          "pattern": null
        },
        "skewDegrees": {
          "type": "number",
          "required": false,
          "min": -30,
          "max": 30,
          "pattern": null
        }
      }
    },
    "spinLoop": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "direction": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^(normal|reverse)$"
        },
        "duration": {
          "type": "number",
          "required": false,
          "min": 1,
          "max": 60,
          "pattern": null
        }
      }
    },
    "squashLoop": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.5,
          "max": 8,
          "pattern": null
        },
        "scaleX": {
          "type": "number",
          "required": false,
          "min": 1.01,
          "max": 1.5,
          "pattern": null
        },
        "scaleY": {
          "type": "number",
          "required": false,
          "min": 0.5,
          "max": 0.99,
          "pattern": null
        }
      }
    },
    "staggerReveal": {
      "version": "2.0.0",
      "output": "js",
      "params": {
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.1,
          "max": 3,
          "pattern": null
        },
        "ease": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^[A-Za-z0-9.()]{1,40}$"
        },
        "from": {
          "type": "transform",
          "required": true,
          "min": null,
          "max": null,
          "pattern": null
        },
        "stagger": {
          "type": "number",
          "required": false,
          "min": 0.02,
          "max": 0.6,
          "pattern": null
        }
      }
    },
    "stretchLoop": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.5,
          "max": 10,
          "pattern": null
        },
        "scaleX": {
          "type": "number",
          "required": false,
          "min": 1.01,
          "max": 1.5,
          "pattern": null
        }
      }
    },
    "swayLoop": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "angle": {
          "type": "number",
          "required": false,
          "min": 0.5,
          "max": 20,
          "pattern": null
        },
        "duration": {
          "type": "number",
          "required": false,
          "min": 1,
          "max": 15,
          "pattern": null
        }
      }
    },
    "swingLoop": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "angle": {
          "type": "number",
          "required": false,
          "min": 1,
          "max": 30,
          "pattern": null
        },
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.5,
          "max": 10,
          "pattern": null
        }
      }
    },
    "teeterLoop": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "angle": {
          "type": "number",
          "required": false,
          "min": 1,
          "max": 30,
          "pattern": null
        },
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.5,
          "max": 10,
          "pattern": null
        }
      }
    },
    "tiltLoop": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "angle": {
          "type": "number",
          "required": false,
          "min": 1,
          "max": 20,
          "pattern": null
        },
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.5,
          "max": 10,
          "pattern": null
        },
        "scale": {
          "type": "number",
          "required": false,
          "min": 1.01,
          "max": 1.3,
          "pattern": null
        }
      }
    },
    "wobbleLoop": {
      "version": "1.0.0",
      "output": "css",
      "params": {
        "angle": {
          "type": "number",
          "required": false,
          "min": 1,
          "max": 15,
          "pattern": null
        },
        "distance": {
          "type": "string",
          "required": false,
          "min": null,
          "max": null,
          "pattern": "^[0-9]*\\.?[0-9]+(px|rem|em)$"
        },
        "duration": {
          "type": "number",
          "required": false,
          "min": 0.5,
          "max": 8,
          "pattern": null
        }
      }
    }
  }
}
