/* Editor-owned feedback reuses host timing tokens without depending on app-shell classes. */ .editor-motion-feedback[data-motion-feedback="icon"], .editor-motion-feedback[data-motion-feedback="count"], .editor-motion-feedback[data-motion-feedback="alert"] { transform: none; } :root[data-motion-input="pointer"] .editor-motion-feedback[data-motion-feedback="icon"], .editor-motion-feedback[data-motion-feedback="icon"][data-motion-owned="pointer"] { transition-property: opacity, transform; transition-duration: var(--icon-swap-dur); transition-timing-function: var(--motion-smooth-out); } :root[data-motion-input="pointer"] .editor-motion-feedback[data-motion-feedback="count"] { transition-property: opacity, transform; transition-duration: var(--badge-pop-dur); transition-timing-function: var(--motion-smooth-out); } :root[data-motion-input="pointer"] .editor-motion-feedback[data-motion-feedback="alert"], .editor-motion-feedback[data-motion-feedback="alert"][data-motion-owned="pointer"] { transition-property: opacity, transform; transition-duration: var(--toast-open); transition-timing-function: var(--motion-smooth-out); } :root .editor-motion-feedback[data-motion-feedback="alert"][data-motion-owned="immediate"] { transition-duration: 0s; } @starting-style { .editor-motion-feedback[data-motion-feedback="icon"] { opacity: 0; transform: scale(0.96); } .editor-motion-feedback[data-motion-feedback="count"] { opacity: 0; transform: translateY(2px) scale(0.96); } .editor-motion-feedback[data-motion-feedback="alert"] { opacity: 0; transform: translateY(4px); } } @media (prefers-reduced-motion: reduce) { :root[data-motion-input="pointer"] .editor-motion-feedback[data-motion-feedback], .editor-motion-feedback[data-motion-feedback][data-motion-owned="pointer"] { transition-duration: 0s; } }