# Capture speech, clear the recorder, return an editable draft

**Manual DaVinci Resolve / Fusion construction guide. Review open.**
No native project, import macro or verified Resolve execution is included.
No source-quality, independent moving or native application parity is claimed.
Both Original and Adaptation previews are Remotion renders, not the source film.

## Clock and source gates

Create a1920×1080 progressive composition with196 frames, local0..195, at
exact24000/1001fps. Duration is196196/24000=8.174833333seconds. If the installed
Resolve setup cannot retain that rational cadence, stop and resolve the setup;
do not round to24, add holds, interpolate new frames or include source1746.
Fusion global frame equals composition start plus local frame.

`source-timing.json` binds source0qK3KqvtRrg[1550,1746), native timebase1/24000,
1001ticks per frame. Source masters and research excerpts are not input assets.
`controls.csv` is the per-frame construction authority; `waveform.csv` supplies
every visible original bar. Numeric and file checks do not prove a native render.

| Local | Source | Required visible state |
| --- | --- | --- |
|0..4|1550..1554|Empty composer, regular toolbar, microphone hover and disabled Send.|
|5..11|1555..1561|Capture controls replace regular toolbar; timer0:00; no waveform yet.|
|12..168|1562..1718|Original waveform history accumulates/scrolls; timer follows anchors.|
|169|1719|Waveform clears, timer resets0:00; Send still enabled.|
|170..175|1720..1725|Empty reset holds; Send disabled; no editable text.|
|176..195|1726..1745|Full three-line editable draft, ordinary toolbar and caret; left-only reflow.|

All mode changes use held keys. Text arrives together; no typewriter animation,
spinner, backend message, submitted bubble or generated result is added. The
source starts this selection with a presenter-to-UI cut. Its endpoint is before
Send, not a film cut. A separate source presenter overlay fades before reset;
it is omitted here explicitly, without a synthesized replacement or narration.

## Inputs, font and original artwork

Use bundled `public/fonts/Geist.ttf`, included with its OFL license. Pixel font
sizes below are Remotion values. Match native Text+ metrics by visible height,
advance and line spacing; no numeric Text+ Size equivalence is asserted.
Do not silently scale copy to fit. Reject over-width text at the listed weight.

| Field | Size / weight | Width budget |
| --- | --- | --- |
|heroTitle|64 /700|875px|
|heroSubtitle|25 /400|860px|
|artifactTitle|33 /570|300px|
|placeholder|36 /400|820px|
|modelLabel|29 /400|312px|
|paneTitle|23 /700|585px|
|teamLabel|44 /400|600px|
|each of three draftLines|36 /400|920px|
|each row label / detail|31 /630;25 /400|630px each|

Hero title has authored-1px tracking. Pane title has1.5px tracking. Keep the
explicit three draft lines at56px baselines; no auto-wrap or ellipsis. Place the
caret after the full third line, using its measured advance plus3px.

`inputs/default.json` and `inputs/adaptation.json` contain complete Garden and
Studio text and four nonfinancial rows. `scripts/build-art.py` is the full source
of the two hero SVGs: a leaf arrangement versus a film-reel arrangement. Rebuild
the documented paths as native masks/shapes or use an import route verified in
the installed application. This guide does not promise arbitrary SVG Loader
support. The inline icons and pointer paths are fully specified in `Scene.tsx`.
Do not replace the editable scene with a flattened reference still or source clip.

## Node branches and coordinates

All geometry uses top-left1920×1080 pixels. A centered rectangle at(left,top,width,
height) maps to normalized center((left+width/2)/1920,
1-(top+height/2)/1080), width/1920,height/1080. A point maps to(x/1920,1-y/1080).
Apply this conversion consistently when native controls use bottom-left origins.
Validate frame orientation in the installed application before keying.

Merge branches in this order:

1. Desktop gradient: diagonal teal/navy field `#152e31`, `#173746`, `#071b23`.
2. White application shell(64,-20,1900,1064), radius46, shadow0/20/60px at#0005.
3. **Left stack**, clipped to(64,0,1094,1044), bottom-left radius46. Build the
   following in global coordinates, then apply only `leftStackY` to this stack:
   hero(108,-124,1002,438), radius36; artifact(108,346,1002,184), radius30;
   action row(115,555,446,45). All three move up45px at176, with no ease.
4. **Right pane**, independent of the left-stack transform: (1158,0,762,1044),
   background#f6f7f3,2px#e7e9e4 left edge. Clip its contents to this pane.
5. Composer shell/text/controls/waveform. Do not parent these to the left stack.
6. Tooltip and the original pointer, in output coordinates.

Hero text global position: title(164,12,886,90), subtitle(166,104,860,44),
notebook label pill(166,165,280,46),18px type,2px tracking and22px horizontal
padding; its236px inner width is measured with tracking and never wrapped.
All move with the left stack. Hero SVG uses
its full1002×438 viewBox; art stays a separate branch beneath live text.

Artifact:2px#e8eae7 edge, white fill; icon well(142,383,110,110), radius24,
fill#f3f5f1. Use the original Garden leaf or Studio slate path at65×65 centered.
Title(282,383,300,51); lock plus Workspace only at(284,450,310,38),30px gray.
Open in pill(602,399,242,76), radius24,2px edge; Share(866,399,210,76), radius24,
dark fill. Fixed icon paths in `Scene.tsx` are original line drawings, not font
glyphs. Action row has36px icons and45px gaps, color#91958e.

Right card global(1216,20,744,742), radius27,2px#dde2da edge and#fdfefb fill.
Pane title at(1252,49,650,51). Row index0..3 has top117+161×index, height161,
2px upper separator; text starts1252, rowTop+36. Detail follows with11px gap.
The card overflows the canvas at right deliberately and is clipped, not rescaled.
Team card(1216,810,744,320), radius28,48px inset,44px title. At title+43px gap,
add2px rule then30px inset and a66px original initial avatar beside Rowan.
No right-pane content moves at176.

Composer x108,width1002,bottom1000,radius56,2px#e6e9e2 edge, white fill,
subtle0/7/24px shadow. Before176 its top725,height275; from176 top680,height320.
Use held shape-size keys, not a transform that scales text or controls.
Before draft: placeholder(144,770,820,58),36px#c2c7bd. Draft: text begins
(144,725), three56px rows,36px ink#202522. Full string changes in one held key.

Plus icon is at(151,920),36px. Ordinary controls: secondary icon(245,919),42px;
model label(512,914,355,52),29px and25px chevron; microphone(930,919),36px.
Hide these except the plus during capture/reset. Capture timer(800,916,86,50),
34px tabular digits#6d7568; Stop square(938,926,22,22), radius4,#b1b7ac.
Send(1010,898,80,80),radius44,39px up-arrow. Fill#202522 when`sendEnabled`=1,
otherwise#aeb5a8. The plus is#a5aaa1 during capture/reset, ink otherwise.
Initial tooltip(813,846,260,43),radius12,dark fill,20px centered Click to dictate;
visible only0..4. Do not add a second tooltip at the endpoint.

## Waveform, counter and pointer

The waveform is a **silent original fixture**, not audio-derived or transcription
proof. For each row of `waveform.csv`, create a3px capsule of the listed height,
top-left(x,y),radius1.5,fill#8b9485. There are at most48 visible slots, in output
coordinates, without left-stack motion. Animate slot visibility and heights from
the exact per-frame table with held keys. Every bar clears at169.

Equivalent generator: at local>=12 and<169,head=floor((frame-12)×0.65),
count=min(48,head+1). Slot0..count-1 uses sample=head-slot,
height=4+round(22×abs(sin(sample×1.71)×cos(sample×0.39))),
x=782-8×slot,y=939-height/2,width3. Trigonometry is in radians. The exact CSV
avoids cross-application rounding ambiguity. There are no visible bars outside
this interval, no imported sound and no synthetic voice.

Timer value changes at local5→0,25→1,45→2,65→3,85→4,105→5,125→6,146→7,
166→8,169→0. Display0:00..0:08. These labels were inspected in timer-only
source crops; do not replace them with floor(local/fps).

Pointer vector viewBox65×84 and path are in `Scene.tsx`. Its top-left is
(`pointerX`-14,`pointerY`-8), with scale about local(14,8), shadow1/4/3px#0005.
Use `controls.csv` values exactly; paths are authored approximations. Visibility
is1 before18 and from160 onward, otherwise0. X stays948 until181 then moves
to1050 by189 with smoothstep; Y=938+8×(1-smoothstep160..165). Scale is0.94 at5
and169, otherwise1. Do not add a Send click at195. Caret is visible at176..187
and hidden188..195; all text remains. The source hand and path are not traced.

## Verification and rejection

Render both complete content variants at native cadence. Inspect4/5,11/12,
168/169/170,175/176 and195 at full size. Check silent audio-track absence,
exact196frame count, fit, waveform clearing, simultaneous three-line appearance,
fixed composer bottom and unchanged right pane. Compare the paired movies and
source excerpt as separate references, never use that excerpt in a render.

Reject missing reset frames, text before176, type-on transcription, an invented
result, floating right pane, resized lettering, rounded cadence, extended holds,
source asset reuse or claims of real product/backend behavior. The source UI,
photography, waveform, detailed cursor and optical texture are not reproduced.
Neither tests nor decoded stills close perceived moving or source-fidelity review.
Native Resolve execution must be performed and evidenced separately.
