| name | A2-element-handoff |
| description | motion-graphic scene archetype — a persistent shape (chip / ball / object / logo) translates, rotates, and recolors between two scenes via a sharedLayer. the cut-between-scenes is the hard-cut bg-swap; the element handoff is what glues the cuts together so the spot reads as one continuous idea rather than a slideshow. |
A2 — element-handoff
Composes
element-handoff (the primary effect — a sharedLayer with keyframes)
bg-swap (the scene change underneath)
Note on scope
A2 is not a standalone scene archetype in the sense of "this scene contains a handoff" — it describes the transition between two A1 (or other) scenes that share a continuity element. The impl-brief atom treats it as a transition spec applied at scene boundaries, not as a scene's primary content.
When the storyboard declares transitions[i] = A2-element-handoff, that means the continuity element animates across the boundary between scene[i] and scene[i+1].
Layout
shared_layer: declared at storyboard top level (not per-scene)
keyframes: required at both scene_end and scene+1_start
boundary_overlap_frames: 0
The sharedLayer is rendered ABOVE the scene <Series> so it sees composition-global time. As scene N's hard-cut bg-swap happens, the shared element is mid-translate or mid-rotate, and it continues smoothly into scene N+1.
Choreography
phase_1_idle_in_scene_N:
duration_frames: most of scene N
position: scene_N_anchor
phase_2_travel:
start_frame: scene_N.end - 5
end_frame: scene_N.end + 15
duration_frames: 20
easing: spring(damping=14, stiffness=200, mass=0.6)
interpolates: [x, y, rotation, color]
phase_3_idle_in_scene_N+1:
start_frame: scene_N.end + 15
position: scene_N+1_anchor
The travel phase straddles the scene cut. The bg-swap is hard-cut at scene_N.end; the chip / object / ball travels smoothly across the cut.
Style pack compatibility
supported: [SP-A, SP-E, SP-G]
preferred_in: [SP-A]
incompatible: [SP-D, SP-F]
SP-D (magazine) doesn't have scene cuts (it's one continuous scroll). SP-F uses aurora-blob instead of element-handoff — see A16.
Pack-specific elements
SP-A — chip
- Circle, diameter 160, fill #FF7BB6.
- Inner arrow rotates 0° → 90° → 180° as it moves between scenes.
- Color stays #FF7BB6 across handoffs (a Marshmallow spot doesn't recolor the chip).
SP-E — sticker / object
- Card sticker or object icon, varied per scene's content.
- Tilt range ±6° on each end position.
- Optional drop-shadow handoff (shadow softens as it crosses the cut).
SP-G — illustration object
- Ball, character, or object from the illustration system.
- Often paired with a
hand-line-draw motion-line that traces the path.
- Object rotates while traveling on an arc, not a straight line.
Duration / timing
The element-handoff itself is ~20 frames (0.67s). It belongs to neither scene cleanly — it OVERLAPS the boundary.
For impl brief purposes, the handoff is encoded as keyframes on the shared layer's keyframe array:
{
"id": "cta-chip",
"keyframes": [
{ "atFrame": 0, "x": 880, "y": 1620, "rotation": 0 },
{ "atFrame": 55, "x": 880, "y": 1620, "rotation": 0 },
{ "atFrame": 75, "x": 920, "y": 1700, "rotation": 90
atFrame 55 → 75 is the travel window. The scene-1 / scene-2 boundary is at frame 60.
Quality Checks
- The shared layer has keyframes both before and after every scene boundary it crosses.
- The interpolation across the boundary uses the pack's rotation_easing (not linear) for rotation channels.
- The element's position keyframes don't jump — there's always a smooth-travel segment, never a teleport.
- Color interpolation (if used) is smooth across the boundary.
Failure Modes
- Element appears to teleport across the cut. Two keyframes specify the same atFrame with different positions, or there's no in-between travel keyframe. Fix: add a travel keyframe at scene_N.end + 15 with the destination position.
- Element disappears at the cut. The shared layer's opacity drops to 0 in scene N+1. Fix: ensure the keyframe series doesn't ramp opacity unless intentional.
- Rotation interpolates linearly and looks mechanical. Use
bezier(0.22, 1, 0.36, 1) on the rotation channel (already the default for the rotation_ease in the SharedLayers template).
- Continuity required by pack but no shared layer declared. Impl-brief atom injects the pack's
default_continuity_element with a warning.