# Refresh a preview after its completion message This is a manual construction guide for the original editable study, not an executed Resolve project. Both page previews are Remotion exports. Source-quality, independent moving-review and native Resolve approvals are absent. ## Native timeline Create a1920×1080 composition at exactly24000/1001 fps,93 frames long. Local frames0–92 correspond to source E3dDr_QtBuo[395,488). Duration is3.878875 seconds. Use the23.976 preset only if the resulting clock is24000/1001; do not use24fps, optical flow, frame blending, a dissolve, or added handles. Use no audio track. The attribution/timing records are in source-observations.json and source-timing.json. Read every row of controls.csv on this same local clock. Visibility values are held gates, not fades. Numeric camera/pointer/fade values are already sampled from src/model.ts; transfer those samples rather than using Fusion Auto splines. All geometry below uses top-left pixel coordinates before the camera transform. ## Build order and domains Use a1920×1080 transparent working domain. Build DesktopField separately; it does not follow the camera. Build Workspace, Presenter and Pointer as a second transparent group, in that order, then apply Camera once to their combined image. Normal-Over merge that result onto DesktopField. Crop the final result to1920×1080. Inside Workspace use a1760×1000 transparent domain and a28px rounded mask. Child coordinates in the next table are local to Workspace. Clip the entire merged workspace to that mask before placing it at(100,40) in the working domain. Do not clip Presenter or Pointer to the workspace: they are separate siblings. | Layer, back to front | Rectangle x,y,w,h | Construction | |---|---|---| | Workspace base |0,0,1760,1000|Fill `#f3f5f2`;28px corners| | Browser chrome |0,0,1760,64|White;1px bottom rule `#e0e6e2`| | Conversation |0,64,550,936|White;1px right rule;clip its children| | Preview field |550,64,1210,936|Fill `#f3f5f2`, remains at every frame| | Document name bar |550,64,1210,62|White;previewVisible gate| | Document paper |578,150,1150,1450|White;1px `#e0e6e2`;previewVisible gate| | Preparing label |1065,514,360,32|18px,400,`#aeb9b2`;preparingVisible gate| | Refresh pill |1040,129,220,40|Fill `#239edd`,24px radius;refreshVisible gate| For a Rectangle/Ellipse mask in a W×H domain, a pixel box(x,y,w,h) maps to center ((x+w/2)/W,1-(y+h/2)/H) and normalized size(w/W,h/H). Polygon coordinates use (x/W,1-y/H). Keep exact dimensions and clipping order; a larger document domain does not change the workspace's own crop. Give colors normal alpha and use Normal Over, not Screen blending or a black key. Add the browser circles at(32,31),(60,31),(88,31),radius9, in `#ed9b8a`, `#e8c67d`,`#83b79c`. Rebuild the small fourth glyph from Scene.tsx's path. The selected tab is(552,10,372,45),12px corners,`#eef2ed`. Its title and the two neighboring titles use the positions/font sizes in Scene.tsx. These are fictional document-app labels, not source product chrome or a current product demonstration. ## Document typography and unchanged copy Install the bundled Geist font and retain its license. Use Text+ for every line; do not bake the page into an image. Content comes from inputs/default.json or inputs/adaptation.json. Use one copy of the document content across the reload. There is no separate after-result, data change, progress badge or version increment. The document text positions below are local to Document paper. Ink is `#202a29`. Line spacing is explicit; no wrapping, automatic text fitting or type shrinking. | Text |x,y,width|Size / weight / line spacing| |---|---|---| | title |132,110,900|44 /650 /58| | fixed draft metadata |132,181,900|20 /550 /32| | purpose, two lines |132,246,900|22 /400 /32| | Story heading |132,332,900|32 /650 /44| | steps, eight lines |154,389,880|22 /400 /32| | Audience and outcome heading |132,686,900|32 /650 /44| | audience, two lines |132,741,900|22 /400 /32| | Messaging heading |132,841,900|32 /650 /44| | message, two lines |132,896,900|22 /400 /32| The plan-note divider is at(132,1006),885px wide,2px `#dfe6e1`; its text has24px top padding and20px size. It is mostly outside the selected camera view but stays in the editable document. The name bar uses filename at(578,78),22px/500,710px budget, and DOC at(1330,79),21px/400 in `#84918d`. Text+ normalized font Size, variable weight and baseline require calibration against the native reference outputs. Match the listed pixel metrics and actual line advances; report a font-instance limitation rather than silently changing weight or fitting type. Browser rendering checks full content widths before encoding; character-count validation alone is not permission to overflow. ## Conversation layers Conversation children use its550×936 domain. The working group is visible on [0,14); the completed group on[14,93). The common composer remains at(22,862), 504×154,23px corners,white with a1px `#dfe6e1` border; it is intentionally clipped by the conversation domain. Rebuild its placeholder and plus/up controls from the live text in Scene.tsx. Do not add typed input or a sent request. The working group has its status at(25,32),21px in `#84918d`, three23px body lines at(25,105), three22px checklist rows at(25,264),49px spacing, and a22px preparing sentence at(25,470). Use the exact fixed strings in Conversation in Scene.tsx. The completed group has a378×57 bubble at(146,24),19px corners,`#f0f3f0`; its fixed line is22px. Add the earlier-status line(25,148),21px; a501px rule at(24,184); the22px file-open line at(25,216); and a420×128 request bubble at(105,293),20px corners,`#f1f4f1`. Its three request lines start(123,307),23px/400 with31px spacing and384px width budget. The completed status is at(25,495),21px; the next rule at(24,535); six response lines at(25,562),23px/400 with32px spacing and485px budget; then the18px utility labels at(25,780). Rules are `#e8ece9`. Keep this completed group unchanged across local53,54,55. The preview's one-frame blank is not a blank of the conversation or the entire window. ## Original vector assets and foreground Four SVGs supply two desktop fields and two still presenter illustrations. Their original generating parameters and paths are in scripts/build-art.py; the full primitive trees and hashes are in asset-construction.json. They contain no source photographs, embedded raster, source branding or external image URLs. Recreate each SVG with native Background, Rectangle/Ellipse/Polygon masks and gradients. Preserve the listed viewBox, path control points, fill/stroke widths, cap styles and alpha. For desktop-field gradients use the SVG bounding-box coordinates; merge its translucent curves and light ellipse over the base. The presenter is a still vector figure behind a laptop, not a replacement talking-head recording or a speaking/synthesized performer. No mouth animation or voice is supplied. Place DesktopField across the1920×1080 final frame. Place Presenter at working coordinates(1350,130),225×288,14px corners; multiply its final alpha by presenterOpacity. The default uses meadow art, the adaptation harbor art. Neither theme is a different motion example. Build Pointer in a43×57 local domain from the path `M3 3v43l12-12 8 18 8-4-9-17 17-1Z`, fill `#202826`,white3px stroke with round joins. Place its top-left at pointerX, pointerY and gate pointerVisible. The pointer is inside Camera but above both Workspace and Presenter. No click ripple, mouse-down indicator or click sound. Rebuild the pill's small refresh arrow from Scene.tsx. Label it Refresh preview in17px white with the separate19px close glyph and translucent separator. The original render uses soft shadows: workspace(0,14,70,`#04141945`),presenter (0,5,18,`#19312124`),paper(0,4,16,`#233b2310`),pill(0,2,6,`#1783b824`),pointer (0,2,2,black25%). Use separate blurred-alpha/shadow merges behind each object. CSS blur kernels and native Fusion blur differ; calibrate and record that unverified difference rather than claiming a native matching render. ## Gates and camera | Local frame |Required state| |---|---| |0–5|Working conversation, document present, no refresh pill| |6|Refresh pill appears over the existing preview| |8–17|Authored presenter fade; fully absent at17| |14|Completed conversation replaces working text; document/pill stay| |28|Pointer enters the authored path| |53|Completed conversation, document/name bar and pill are all present| |54|Only preview/name bar/pill clear; Preparing preview label appears| |55|Identical document/name bar restore; pill never returns| |56–75|Common workspace/presenter/pointer camera releases outward| |75–92|Wide context holds; pointer finishes its path| Camera is a top-left-origin mapping of the entire foreground group: Xout=cameraX+cameraScale×Xin;Yout=cameraY+cameraScale×Yin. It is1.28 at(−66,−41) through55 and1 at(0,0) from75. Use the complete samples in controls.csv. Check a known corner with the mapping before keying: at local0,working point(100,40) must land at(62,10.2). At75 the same point lands at(100,40). Adjust native Transform pivot/center conventions until both mappings hold; do not apply the scale to each nested child again. DesktopField remains fixed behind this group. The source directly establishes refresh arrival at400/401, the preview clear at 448/449 and restoration at449/450. The completed response is bracketed by407–409; local14 is an authored selection within that bracket. Pointer/fade/camera curves and UI geometry are authored approximations. This is not product latency data. ## Verification before reuse Check local5/6,13/14,53/54/55 and75/92 at native scale. Verify that there is exactly one blank preview frame, that the response never clears, and that all document copy is identical before/after. Check both content variants for actual font fit. Export93 silent H.264 frames without retiming, then verify24000/1001 cadence and compare the moving output against the reference. Rendering, pixel masks and this manual guide do not replace native Resolve or source-quality review.