# Establish the corner menu before magnifying it

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

## Source and composition

Official film `qh93rLRPw80`, selected native interval
[1139,1289),
30000/1001 fps. Use a silent 1920×1080 square-pixel
composition containing local frames 0–149. Exact duration:
150150/30000 seconds
(5.005000 s).
Source ordinal = 1139 + local frame. No frame-rate rounding,
extra opening pause, closing hold or narration belongs to this study.

The comparison is a retained, hash-bound 960×540 research excerpt. Preserved
native metadata and PTS ledgers bind its clock; the historical full master is
absent, so this is not a fresh full-master decode. Samples informed the build.
Intermediate paths and measured-looking coordinates below are authored
reconstruction controls, not official product timing, latency or design tokens.

## Setup and common coordinate rules

Verify the unmodified kit with `python3 verify_package.py`, then follow
`project/README.md`. Choose either input JSON content set. Install the bundled
licensed Geist font for Text+, and calibrate pixels, weight, tracking and
baselines against the supplied MP4; a font name alone does not guarantee parity.

Regenerate `docs/controls.csv` with
`node --experimental-strip-types scripts/controls.mjs`. Each row includes the
local frame, source ordinal and exact sampled controls. Fusion global frame =
composition start + CSV frame. Coordinates here use pixels from top-left, Y
down. For a point in normalized Fusion image coordinates, X=pixelX/1920 and
Y=1−pixelY/1080; convert top-left rectangles through their centers. Check the
installed tool's coordinate direction instead of assuming CSS and Fusion match.
Parent transforms apply after local transforms. A uniform pivoted transform is
pivot + scale×(point−pivot), followed by the stated translation. Convert angles
to your tool's convention. CSS rotations are clockwise in this Y-down space.

Continuous controls use the CSV per-frame values, not an unspecified default
spline. Held gates, text prefixes, colors and row indexes use stepped keys.
Smoothstep is t²(3−2t), with t clamped to [0,1]; linear progress is clamped t.
Rectangle masks need pixel-correct width and height; normalized X/Y values are
not interchangeable on a non-square raster. Match opacity, clipping and layer
order before attempting a moving comparison.

## Disclose the corner menu before the camera moves

Use a white chapter screen with centered 96-pixel, weight-600 type and tracking
−3 pixels. Reveal the first max(1,floor(length×chapterProgress)) characters;
the last character completes by local 4, then holds. Hard-cut at 72 to the
wide application. This is a chapter boundary, not a crossfade.

1. Build a white app window at (218,124), 1480×836, corner radius 13, on an
   original pale lilac/pink background. The left navigation is 235 pixels wide.
   Add the fictional brand, six rows, centered prompt heading and blank input.
   The account disc is window-local (16,786), diameter 31.
2. The six-row menu is window-local (20,592+menuOffsetY), 310×190, with a white
   rounded panel, border and shadow. It has five pixels of inner padding,
   30-pixel rows and size-18 type. Map `hoverRow` to a subtle row fill.
3. Set `menuOpacity` from 0→1 over 93–96 and `menuOffsetY` from 4→0 over that
   same bracket. The menu is completely visible while cameraScale is still 1.
4. Put the entire app and pointer under a parent camera whose pivot is
   (245,955). Apply uniform `cameraScale`, then screen translations
   (`cameraX`,`cameraY`). The camera runs only over 120–136: scale 1→2.22,
   translation (0,0)→(−115,32). The lower-left menu remains the stable target.
5. Keep the pointer in the same parent group, at the CSV's untransformed
   (`cursorX`,`cursorY`). Its late movement is authored. `hoverRow` switches
   from −1 to 5 at 142, then to 4 at 146. These are held row fills, not route
   changes or selected permissions. End at local 149 with the menu open.

No sharing command is selected in this source interval. Do not add successful
sharing, membership, permission changes or a settings destination. The useful
contract is menu disclosure before magnification, unlike enlarging a panel
first and only then opening its menu. Reconstructed labels, menu dimensions,
cursor path and camera easing differ from the source.

The preserved native PTS ledger is millisecond-quantized. Its residuals fit
the 30000/1001 cadence within .001 seconds; do not claim exact integer source
ticks. These supplied outputs use exact 1001-tick frames at time base 1/30000.


## Verification boundary

Inspect both actual exports at their native cadence, including entry/exit,
hard gates, layering, width, masks and holds. Shipped code checks font loading
and selected text-width budgets before rendering; it rejects oversized copy
instead of silently shrinking it. This is not arbitrary-input readability
approval or a guarantee that an independent Text+ rebuild fits.

The kit contains editable original geometry, fixtures, controls and tests;
source screenshots/movies are not renderer inputs. Native .drp execution,
tested Resolve import, independent moving-source review and source-quality
approval are not included. Existing matching pinned dependencies were used,
not a clean dependency install. A modified input needs a new render and review.
