{ "$schema": "https://tr.designtokens.org/format/", "duration": { "$type": "duration", "instant": { "$value": "0ms" }, "fast": { "$value": "150ms" }, "normal": { "$value": "300ms" }, "slow": { "$value": "500ms" }, "slower": { "$value": "1000ms" } }, "easing": { "$type": "cubicBezier", "linear": { "$value": "linear" }, "ease-in": { "$value": "cubic-bezier(0.4, 0, 1, 1)" }, "ease-out": { "$value": "cubic-bezier(0, 0, 0.2, 1)" }, "ease-in-out": { "$value": "cubic-bezier(0.4, 0, 0.2, 1)" }, "spring": { "$value": "cubic-bezier(0.68, -0.55, 0.265, 1.55)" }, "bounce": { "$value": "cubic-bezier(0.68, -0.6, 0.32, 1.6)" } }, "keyframes": { "_comment_pattern": "Define pairs (in/out, open/close, enter/exit)", "_comment_required": "Required keyframes for components", "fade-in": { "0%": { "opacity": "0" }, "100%": { "opacity": "1" } }, "fade-out": { "_comment": "reverse of fade-in", "0%": { "opacity": "1" }, "100%": { "opacity": "0" } }, "slide-up": { "0%": { "transform": "translateY(10px)", "opacity": "0" }, "100%": { "transform": "translateY(0)", "opacity": "1" } }, "slide-down": { "_comment": "reverse direction", "0%": { "transform": "translateY(0)", "opacity": "1" }, "100%": { "transform": "translateY(10px)", "opacity": "0" } }, "scale-in": { "0%": { "transform": "scale(0.95)", "opacity": "0" }, "100%": { "transform": "scale(1)", "opacity": "1" } }, "scale-out": { "_comment": "reverse of scale-in", "0%": { "transform": "scale(1)", "opacity": "1" }, "100%": { "transform": "scale(0.95)", "opacity": "0" } }, "accordion-down": { "0%": { "height": "0", "opacity": "0" }, "100%": { "height": "var(--radix-accordion-content-height)", "opacity": "1" } }, "accordion-up": { "_comment": "reverse", "0%": { "height": "var(--radix-accordion-content-height)", "opacity": "1" }, "100%": { "height": "0", "opacity": "0" } }, "dialog-open": { "0%": { "transform": "translate(-50%, -48%) scale(0.96)", "opacity": "0" }, "100%": { "transform": "translate(-50%, -50%) scale(1)", "opacity": "1" } }, "dialog-close": { "_comment": "reverse", "0%": { "transform": "translate(-50%, -50%) scale(1)", "opacity": "1" }, "100%": { "transform": "translate(-50%, -48%) scale(0.96)", "opacity": "0" } }, "dropdown-open": { "0%": { "transform": "scale(0.95) translateY(-4px)", "opacity": "0" }, "100%": { "transform": "scale(1) translateY(0)", "opacity": "1" } }, "dropdown-close": { "_comment": "reverse", "0%": { "transform": "scale(1) translateY(0)", "opacity": "1" }, "100%": { "transform": "scale(0.95) translateY(-4px)", "opacity": "0" } }, "toast-enter": { "0%": { "transform": "translateX(100%)", "opacity": "0" }, "100%": { "transform": "translateX(0)", "opacity": "1" } }, "toast-exit": { "_comment": "reverse", "0%": { "transform": "translateX(0)", "opacity": "1" }, "100%": { "transform": "translateX(100%)", "opacity": "0" } }, "spin": { "0%": { "transform": "rotate(0deg)" }, "100%": { "transform": "rotate(360deg)" } }, "pulse": { "0%, 100%": { "opacity": "1" }, "50%": { "opacity": "0.5" } } }, "interactions": { "_comment_pattern": "Define for each interactive component state", "_structure": { "property": "string - CSS properties (comma-separated)", "duration": "{duration.*}", "easing": "{easing.*}" }, "button-hover": { "property": "background-color, transform", "duration": "{duration.fast}", "easing": "{easing.ease-out}" }, "button-active": { "property": "transform", "duration": "{duration.instant}", "easing": "{easing.ease-in}" }, "card-hover": { "property": "box-shadow, transform", "duration": "{duration.normal}", "easing": "{easing.ease-in-out}" }, "input-focus": { "property": "border-color, box-shadow", "duration": "{duration.fast}", "easing": "{easing.ease-out}" }, "dropdown-toggle": { "property": "opacity, transform", "duration": "{duration.fast}", "easing": "{easing.ease-out}" }, "accordion-toggle": { "property": "height, opacity", "duration": "{duration.normal}", "easing": "{easing.ease-in-out}" }, "dialog-toggle": { "property": "opacity, transform", "duration": "{duration.normal}", "easing": "{easing.spring}" }, "tabs-switch": { "property": "color, border-color", "duration": "{duration.fast}", "easing": "{easing.ease-in-out}" } }, "transitions": { "default": { "$value": "all {duration.normal} {easing.ease-in-out}" }, "colors": { "$value": "color {duration.fast} {easing.linear}, background-color {duration.fast} {easing.linear}" }, "transform": { "$value": "transform {duration.normal} {easing.spring}" }, "opacity": { "$value": "opacity {duration.fast} {easing.linear}" }, "all-smooth": { "$value": "all {duration.slow} {easing.ease-in-out}" } }, "component_animations": { "_comment_pattern": "Map each component to its animations - MUST match design-tokens.json component list", "_structure": { "stateOrInteraction": { "animation": "keyframe-name {duration.*} {easing.*} OR none", "transition": "{interactions.*} OR none" } }, "button": { "hover": { "animation": "none", "transition": "{interactions.button-hover}" }, "active": { "animation": "none", "transition": "{interactions.button-active}" } }, "card": { "hover": { "animation": "none", "transition": "{interactions.card-hover}" } }, "input": { "focus": { "animation": "none", "transition": "{interactions.input-focus}" } }, "dialog": { "open": { "animation": "dialog-open {duration.normal} {easing.spring}" }, "close": { "animation": "dialog-close {duration.normal} {easing.ease-in}" } }, "dropdown": { "open": { "animation": "dropdown-open {duration.fast} {easing.ease-out}" }, "close": { "animation": "dropdown-close {duration.fast} {easing.ease-in}" } }, "toast": { "enter": { "animation": "toast-enter {duration.normal} {easing.ease-out}" }, "exit": { "animation": "toast-exit {duration.normal} {easing.ease-in}" } }, "accordion": { "open": { "animation": "accordion-down {duration.normal} {easing.ease-out}" }, "close": { "animation": "accordion-up {duration.normal} {easing.ease-in}" } }, "_comment_missing": "Add mappings for: tabs, switch, checkbox, badge, alert" }, "accessibility": { "prefers_reduced_motion": { "duration": "0ms", "keyframes": {}, "note": "Disable animations when user prefers reduced motion", "css_rule": "@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } }" } }, "_metadata": { "version": "string", "created": "ISO timestamp", "source": "code-import|explore|text", "code_snippets": [ { "animation_name": "string - keyframe/transition name", "source_file": "string - absolute path", "line_start": "number", "line_end": "number", "snippet": "string - complete @keyframes or transition code", "context_type": "css-keyframes|css-transition|js-animation|scss-animation|etc" } ] }, "_field_rules": { "schema": "$schema MUST reference W3C Design Tokens format specification", "duration_wrapper": "All duration values MUST use $value wrapper with ms units", "easing_wrapper": "All easing values MUST use $value wrapper with standard CSS easing or cubic-bezier()", "keyframes": "keyframes MUST define complete component state animations (open/close, enter/exit)", "interactions_refs": "interactions MUST reference duration and easing using {token.path} syntax", "component_mapping": "component_animations MUST map component states to specific keyframes and transitions", "component_coverage": "component_animations MUST be defined for all interactive and stateful components", "transitions_wrapper": "transitions MUST use $value wrapper for complete transition definitions", "accessibility": "accessibility.prefers_reduced_motion MUST be included with CSS media query rule", "code_snippets": "_metadata.code_snippets ONLY present in Code Import mode" }, "_animation_component_integration": { "requirement": "Each component in design-tokens.json component section MUST have corresponding entry in component_animations", "state_based": "State-based animations (dialog.open, accordion.close) MUST use keyframe animations", "interaction": "Interaction animations (button.hover, input.focus) MUST use transitions", "consistency": "All animation references use {token.path} syntax for consistency" } }