.container { position: absolute; display: inline; z-index: 2; pointer-events: none; /* Percentages, not viewport units: the containing block is the element Element Call treats as its root, which is the page in the standalone app but the container a host gave us when embedded. */ width: 100%; height: 100%; left: 0; top: 0; } .reaction { font-size: 32pt; /* Reactions are "active" for 3 seconds (as per REACTION_ACTIVE_TIME_MS), give a bit more time for it to fade out. */ animation-duration: 4s; animation-name: reaction-up; width: fit-content; position: relative; top: 80%; } @keyframes reaction-up { from { opacity: 1; translate: 0 0; scale: 200%; top: 80%; } to { top: 0; opacity: 0; scale: 100%; } } @media (prefers-reduced-motion) { @keyframes reaction-up-reduced { from { opacity: 1; } to { opacity: 0; } } .reaction { font-size: 48pt; animation-name: reaction-up-reduced; top: calc(-50% + (48pt / 2)); left: calc(50% - (48pt / 2)) !important; } }