From hyperframes
Provides CSS animation adapter patterns for HyperFrames, enabling deterministic seeking of keyframes, animation-delay timing, fill-mode, play-state, and CSS-only motion during preview and rendering.
npx claudepluginhub ilderaj/agent-plugin-marketplace --plugin codex--hyperframesThis skill uses the workspace's default tool permissions.
HyperFrames can seek CSS keyframe animations through its `css` runtime adapter. Use this for simple repeated motifs, background motion, shimmer, glow, masks, and non-sequenced decoration.
Adapts Web Animations API for HyperFrames to enable seekable element.animate() motions, currentTime seeking, document.getAnimations(), and deterministic native browser animations.
Provides GSAP animation reference tailored for HyperFrames, covering core tweens (to/from/fromTo/set), easing, stagger, defaults, timelines (positioning, labels, nesting, playback), and performance (transforms, will-change, quickTo). Activate when writing GSAP in HyperFrames.
Implements Disney's 12 animation principles (squash/stretch, anticipation, arcs, etc.) using pure CSS animations, transitions, transforms, and offset-path. Provides code examples and timing guidelines for web UI animations.
Share bugs, ideas, or general feedback.
HyperFrames can seek CSS keyframe animations through its css runtime adapter. Use this for simple repeated motifs, background motion, shimmer, glow, masks, and non-sequenced decoration.
For scene choreography, GSAP is usually clearer. CSS animations work best when the motion belongs to one element and has a fixed duration.
data-start value so local animation time matches the clip.animation-duration and animation-iteration-count because the negative-delay fallback cannot represent unbounded duration in environments without WAAPI-backed CSS animations.animation-fill-mode: both so seeked states hold before and after active motion.The adapter discovers elements with computed animation-name, seeks their browser Animation handles when available, and falls back to pausing with negative animation-delay.
<div
id="pulse-ring"
class="clip pulse-ring"
data-start="0"
data-duration="4"
data-track-index="2"
></div>
<style>
.pulse-ring {
width: 280px;
height: 280px;
border: 4px solid rgba(255, 255, 255, 0.7);
border-radius: 50%;
animation-name: pulse-ring;
animation-duration: 1200ms;
animation-timing-function: cubic-bezier(0.2, 0, 0, 1);
animation-iteration-count: 3;
animation-fill-mode: both;
}
@keyframes pulse-ring {
from {
opacity: 0;
transform: scale(0.82);
}
35% {
opacity: 1;
}
to {
opacity: 0;
transform: scale(1.18);
}
}
</style>
Use CSS custom properties to avoid duplicating keyframes:
<div class="clip dots" data-start="1" data-duration="3" data-track-index="3">
<span style="--i: 0"></span>
<span style="--i: 1"></span>
<span style="--i: 2"></span>
</div>
<style>
.dots span {
display: inline-block;
width: 18px;
height: 18px;
margin-right: 10px;
border-radius: 50%;
background: currentColor;
animation: dot-pop 900ms ease-out both;
animation-delay: calc(var(--i) * 120ms);
}
@keyframes dot-pop {
from {
opacity: 0;
transform: translateY(18px) scale(0.75);
}
to {
opacity: 1;
transform: translateY(0) scale(1);
}
}
</style>
top, left, width, or height when transforms work.After editing CSS animation compositions:
npx hyperframes lint
npx hyperframes validate
packages/core/src/runtime/adapters/css.ts.animation-fill-mode: https://developer.mozilla.org/en-US/docs/Web/CSS/animation-fill-mode