# Grow a continuing prompt around inline references **Manual DaVinci Resolve / Fusion construction guide. Review open.** No native project, import macro or verified Resolve execution is included. Both Original and Adaptation previews are actual silent Remotion exports. Source-quality, independent moving review and native application parity remain unverified. Two content variants count as one editing example. ## Native clock Create a1920×1080 progressive, square-pixel composition with104 frames, local 0..103, at exact24000/1001fps. Duration is104104/24000seconds. If the installed Resolve setup cannot retain that cadence, stop and resolve the setup rather than round to24, interpolate frames or extend the ending. Fusion global frame equals composition start plus local frame. `source-timing.json` binds source0j9yDUDMrBs[1396,1500), timebase1/24000 and 1001ticks/frame. Source1500 is a different presenter shot and is excluded. The shot begins with a populated two-line prompt, not an empty composer. It ends on a completed unsent prompt, not a retrieved result or generated draft. ## Files and regeneration Use the eight original SVGs in `public/art`, the bundled Geist font and its license, `inputs/default.json` or `inputs/adaptation.json`, and `docs/controls.csv`. `docs/text-controls-default.json` and `docs/text-controls-adaptation.json` list every visible original text run and icon at every native position. These are construction records, not a source transcript. No source image is an input. From the extracted `project` directory, regenerate controls without Remotion: ```sh node --experimental-strip-types scripts/controls.mjs > controls-regenerated.csv node --experimental-strip-types scripts/text-controls.mjs default > text-default-regenerated.json node --experimental-strip-types scripts/text-controls.mjs adaptation > text-adaptation-regenerated.json ``` ## Layer order 1. Put the selected studio/field workspace SVG over an opaque background at 1940×1080. Its left edge follows `contextDrift`,0→−12px. This original slow drift replaces the filmed setting; it is not recovered camera tracking. 2. Merge the white composer over it at `panelLeft`, `panelTop`, `panelWidth`, `panelHeight`, with52px corner radius. Copy the per-frame bounds exactly. 3. Merge the separate white plus circle and dark send circle. They are siblings of the composer, not children of its top-edge transform or clipping mask. 4. Merge each text row and inline icon over the panel. Each row follows the panel's top edge. Preserve the declared run order and spacing. 5. Merge the caret after the last visible run on the currently active row. Do not put it after an earlier completed row or make it a send animation. The panel never becomes a submitted bubble and never swaps to a result screen. There is no shared fade, voice capture, spinner, click cursor or audio layer. ## Asymmetric edge growth The measured white width stays approximately738px at x652..1390. The numbers are raster estimates, not recovered CSS/Fusion authoring values. At settled states, the panel center is[1021,540]. It temporarily sits lower on each growth onset because the bottom jumps before the upper edge finishes settling. | Local | Source | Required panel/text relationship | | --- | --- | --- | |0..20|1396..1416|Two lines; top455,bottom625. First line and first glyph already present.| |21|1417|Third row opens; bottom jumps654,top first moves445.| |22..27|1418..1423|Bottom stays654; top settles through436,433,429,428,427,426.| |28..47|1424..1443|Three-row hold; top426,bottom654.| |48|1444|Fourth row opens; bottom jumps684,top415.| |49..55|1445..1451|Bottom stays684; top settles407,403,401,398,397,397,396.| |56..72|1452..1468|Four-row hold; top396,bottom684.| |73|1469|Fifth row opens; bottom jumps714,top385.| |74..80|1470..1476|Bottom stays714; top settles377,373,370,368,368,367,366.| |81..103|1477..1499|Five-row hold; top366,bottom714.| Use held values from `controls.csv` at every native frame. Do not replace the table with one centered size tween or interpolate new frames between keys. The bottom-driven controls must stay still during each top-edge settling run. ## Bottom controls The white plus circle is102×102 at left=`panelLeft−116`,top=`panelBottom−100`. Its dark plus is centered with44px horizontal/vertical strokes,4px thickness, round caps. The dark send circle is76×76 at left=`panelLeft+panelWidth−92`, top=`panelBottom−90`; draw an original white up-arrow using5px rounded strokes. The supplied React/SVG paths are the exact editable reference for those shapes. Dark ink is#181d20. Neither circle scales during line growth. ## Inline text and glyphs Use bundled Geist at40px, weight450, tracking−0.3px,52px line box and60px row step. If the native font implementation cannot reproduce these settings, record the mismatch; the Remotion render does not prove native font parity. Text origin is(`panelLeft+50`,`panelTop+31+row×60`), with zero-based row. Keep explicit authored rows rather than automatic paragraph wrapping. Create a Text+ layer for each text run, preserving whitespace, and an original SVG layer for each icon. Text is dark `#181d20` except reference labels, which use `#256ba3` for Studio or `#236e71` for Field. Every icon is36×36 with4px right gap; align its bottom5px below the text baseline, as in `src/Scene.tsx`. Lay out successive runs by the rendered advance of the previous run. Do not allocate the full future label width while only its prefix is visible. Read the complete per-frame run list from the selected `text-controls` file. For an edited phrase of length L and its ratio from `controls.csv`, retain the first min(L,max(0,floor(L×ratio+0.5))) characters. Source-derived progress keys are reused proportionally for new copy; this is an authored adaptation, not identical source glyph timing. The fixed connector is `, the `; the second reference gets a comma once its label is complete. | Local | Inline relationship | | --- | --- | |0|First room glyph and a partial first reference already exist.| |8..12|First label completes, then connector types; document glyph appears12.| |12..17|Document glyph precedes its label. Label types18..20.| |21..32|Third row's black prefix types; notes glyph appears32.| |32..35|Notes glyph precedes its label. Label types36..40.| |41..44|Black connective suffix appears after that label.| |48..50|Fourth-row notes glyph precedes its new reference label.| |51..60|Fourth reference types, followed by its black suffix61..72.| |73..74|Fifth row is open before its closing text begins.| |75..82|Closing text types, reaching its period at82.| |83..103|Completed prompt holds without caret.| The caret is2×38px with2px left gap, dark ink, and a−7px inline vertical offset. Its earlier holds are authored: absent12..16,32..35 and48..50; otherwise visible before83, then absent. Earlier source caret/icon micro-motion was not fully measured. Do not call these exact recovered source cursor timings. ## Editable content and width gate The exact input fields are `theme`, `lead`, `reference1`, `reference2`, `line3Prefix`, `reference3`, `line3Suffix`, `reference4`, `line4Suffix`, `closing`. Theme is studio or field; other fields are trimmed ASCII prose with schema limits in `src/model.ts`. Closing must end with a period. Edit a copied project, then regenerate controls and render to new output paths. The actual renderer loads the bundled font and checks complete rich-line widths, including each40px icon-plus-gap advance. Row1 budget is638px; rows2..5 have 570px budgets, reserving room for caret and send while each is the active row. Oversized edits fail before encoding. Do not silently shrink type, clip a label or move send to evade the gate. Native construction must check its own text advances and control clearance; it has not been executed here. ## Verification and limits Inspect0,12,18,20,21,27,32,36,48,51,55,73,75,80,82,83,103 first. Check that the top settles while the bottom controls hold, inline icons precede their labels, text never reaches send, and the final prompt remains unsent. Source photos, performer, branding, exact copy and app glyphs are not adaptation assets. Original illustrations, palette, typography, cursor holds and internal glyph geometry differ. Hash/clock tests and sampled stills do not confer source-quality, independent moving review or native Resolve approval.