# Keep the activity anchor while the context moves underneath

**Draft construction guide. Moving-source fidelity and native Resolve operation
remain unverified.** Two original content variants form one example.

## Source, raster and timing

Official film identifier: `ceBruD6v5Bk`. Selected native source interval:
[540,720),
30/1 fps. Create a silent 1920×1080,
square-pixel composition with 180 included frames, local
0–179. Duration is 180/30
seconds (6.000000 s).
Source ordinal = 540 + local frame. Preserve the rational rate;
do not round it or append a closing hold.

The source comparison is a retained, hash-bound 960×540 excerpt. Historical
master metadata and PTS ledgers supply the timing reference, not a fresh decode
of the absent full master. The editable output contains only original content.

## Inputs and shared controls

Verify the unmodified download with `python3 verify_package.py`, then follow
`project/README.md`. Input JSON files provide the two fictional content sets.
The bundled Geist font includes its license. Install it for Text+ and calibrate
sizes, tracking and baselines against the actual exported candidate. Original
identity, data and palette are not official OpenAI tokens or live Poe results.

Regenerate `docs/controls.csv` with
`node --experimental-strip-types scripts/controls.mjs`. Each row maps one local
integer frame to its source ordinal and this treatment's controls. Fusion's
global frame is composition start + CSV frame. Apply local transforms before
their parents. Continuous values use the supplied per-frame samples; held
switches must not receive default smooth splines. Where specified, smoothstep
is t²(3−2t), with t clamped to [0,1] inside the stated start/end interval.

## A foreground anchor over changing contexts

Keep three independent branches: the white activity surface, the desktop, and
the orb with its controls. Merge the orb last. Moving the orb as a child of
either surface breaks the treatment when those surfaces traverse the frame.

### Layer construction

1. Begin with the white activity surface. Its request bubble is x=432, y=112,
   width=1360, height=308, radius=72, with 43 px copy and 48 px horizontal
   padding. Its alpha follows requestOpacity, fading over local 14–26.
2. The orb center moves from (960,820) to (1680,820), radius 184→120, using
   smoothstep over 14–32. Build it from an ellipse mask and independent blue,
   violet and pale gradient branches. The pale lobe's horizontal percentage is
   43+7×sin(localFrame/18); this is an original material approximation, not a
   recovered shader. Its y position is 92%, with soft pale stops at 5% and 25%.
3. Activity text uses statusX/statusY in frame pixels: x 690→140 over 28–58,
   y 480→162 over 34–63. Use 106 px type and −4 px tracking. statusStage holds
   0 before 42, 1 before 64, 2 before 93, then 3. The invented labels are
   Thinking / Gathering notes / Checking the draft / Comparing versions.
   They deliberately make no elapsed-time or product-speed claim.
4. The response at (140,447) uses 106 px type, −3 px tracking and a prefix
   floor(length×replyProgress), smoothstep over 76–120. A lower activity line
   enters at 116 and changes at 139. Do not add an outcome or successful action.
5. The control pill follows the orb, centered below it: x=orbX−122,
   y=orbY+orbRadius−51, width=244, height=86, radius=44. Its alpha ramps over
   17–31. At 110 replace its illustrated controls with the word Thinking.
6. Over 154–169, translate the entire white activity surface left by
   −1920×contextTravel and the entire desktop from the right by
   1920×(1−contextTravel). These complementary translations form a continuous
   replacement, not a dissolve or side-by-side device comparison. The orb's
   center, radius and pill remain fixed in frame coordinates during this move.
7. Desktop assets are original vector hills, five illustrated folders, two
   notes and document icons. The later document is x=545, y=95, width=820,
   height=910. Its alpha rises over 164–168 and scale rises .82→1 over 164–176
   around its own center. Keep it inside the moving desktop branch. Do not
   omit this later document arrival when trimming the composition.

### Resolve control mapping

For each surface, animate a separate Transform branch using the screen-pixel
translations above. The orb ellipse center is (orbX/1920, 1−orbY/1080) when
using bottom-up normalized Fusion coordinates; its normalized radii are
orbRadius/1920 horizontally and orbRadius/1080 vertically. Do not assume a
square normalized mask radius yields a circle on a 16:9 raster. Key the two
dimensions or calibrate the installed mask's aspect handling.

`controlsOpacity`, `requestOpacity` and `documentOpacity` are alpha multipliers;
the listed stage and pill values are held switches. `documentScale` is uniform
around the document center, before the desktop translation. `contextTravel`
does not alter the orb. Use the CSV values rather than a default ease curve.

Known differences include the source's fluid orb material, photographed desktop
background, dense files, exact label choreography and document-opening motion.
The gradient and geometry here are editable approximations, not a fidelity pass.


## Verification boundary

Compare both actual MP4s, including first/final frames, transitions, clipping
and text wrapping. Check editable geometry and input substitutions separately
from the source comparison. Sampled still inspection and exact movie hashes
do not establish perceived moving quality. No native .drp, tested Resolve
importer, narration, product-performance result or source-quality approval is
included. A newly edited input needs its own render and review.
