The measured data and build specs agents work from. Over MCP they get it all, with the full timeline as JSON.
Type (measured)
Sizes are cap height (the height of a capital letter) in px at the 1080p deliverable, 1920×1080. Font size ≈ cap ÷ 0.71 for a typical sans (Inter 0.73, Geist 0.71, SF Pro 0.70, Instrument Sans 0.72): check your own font's cap-height ratio. Cap heights are estimated from text-recognition boxes (median error about 11% on real text; text under about 13 px at 1080p and non-Latin scripts are not read). Box = x · y · w · h as % of the frame, from the top-left.
| text | shot | on screen (s) | cap px | ≈ font px | cap % of height | box x·y·w·h % | position |
|---|
| "150 → 100 (counting)" | 1 | 0.2–0.8 | 37 | 52 | 3.4 | 53 · 36 · 4 · 4 | centre, upper |
| "200" | 1 | 1.0–1.5 | 49 | 69 | 4.5 | 54 · 32 · 6 · 6 | centre, upper |
| "V ls unread" | 1 | 2.0–2.2 | 63 | 89 | 5.8 | 36 · 47 · 25 · 7 | centre, middle |
| "I really love the quality of work you…" | 1–2 | 4.8–7.5 | 29 | 41 | 2.7 | 38 · 4 · 46 · 4 | centre, top (inside 5% of the edge) |
| "Send D" | 2 | 5.5–7.2 | 73 | 103 | 6.8 | 32 · 45 · 16 · 13 | centre, middle |
| "I am Kirtan, I want to apply for…" | 2 | 5.8–8.5 | 32 | 45 | 3.0 | 36 · 9 · 62 · 5 | right, top (inside 5% of the edge) |
| "This is my Instagram handle - @kirtanlb" | 2 | 5.8–7.5 | 37 | 52 | 3.4 | 39 · 14 · 38 · 5 | centre, top |
| "Looking forward to your reply." | 2 | 5.8–7.2 | 31 | 44 | 2.9 | 38 · 20 · 28 · 4 | centre, top |
| "Best," | 2 | 6.0–7.2 | 33 | 46 | 3.1 | 39 · 30 · 5 · 5 | centre, upper |
| "No microphone" | 3 | 10.2–11.8 | 39 | 55 | 3.6 | 40 · 21 · 22 · 6 | centre, upper |
| "Start recording" | 3 | 11.0–11.8 | 43 | 61 | 4.0 | 40 · 49 · 21 · 6 | centre, middle |
| "0:01" | 3 | 12.2–13.0 | 62 | 87 | 5.7 | 46 · 50 · 7 · 6 | centre, middle |
|
Plus 39 smaller or briefer text items, cap 4–63 px, mostly labels inside interfaces: all in the timeline JSON.
Type scale (cap px): 61–73 · 49 · 27–43 · 19 (4 levels) among the text above.
Left out: 10 reads that are not clean words or were seen in a single frame ("Velotile", "velotile@gmail.co", "Start re"…): blurred, moving or partly hidden text the recognizer misread. They stay in the timeline JSON, not in the type scale.
Phone minimum: cap height ≥ 2% of frame width = 38 px at 1920×1080. Why: in a phone feed the film fills the screen width, about 390 pt, and 2% of that is 7.8 pt, the cap height of 11 pt text, Apple's smallest recommended text size. Words the viewer must read go at or above it; smaller text can only be decoration. Below it in the reference: "I really love the…" (29 px, shot 1), "I am Kirtan, I…" (32 px, shot 2), "This is my Instagram…" (37 px, shot 2), "Looking forward to your…" (31 px, shot 2), "Dream it. Code it." (19 px, shot 5), "Leave a comment..." (19 px, shot 6) and 3 more above and 38 of the smaller items. Size these up in your version, or treat them as decoration.
Type spec (inferred)
Assume cap height = 0.71 × CSS font size; verify the actual instance of {{BRAND_FONT}}. Geist is a free fallback only. Functional words below the 38 px cap phone minimum are enlarged; decorative UI may remain small.
| Level | Cap px at 1080p | Font size | Weight · case · tracking | Colour pair | Motion |
|---|
| Primary control / brand | 61–73 | 86–103 px | 600 · sentence or mark case · −0.02 em | surface / {{BRAND_ACCENTS}} or inverse | 10–16 f scale, cubic-bezier(.2,.8,.2,1) |
| Benefit / badge | 49 | 69 px | 500–650 · sentence / numerals · −0.025 em | {{BRAND_BG}} / high contrast ink | 12 f opacity and 8 px rise, same ease |
| UI action / message | 27–43 measured; ≥38 if essential | 54–61 px essential | 450–600 · sentence · −0.01 em | light surface / dark ink | 8–12 f opacity, ease-out |
| Micro UI | 19 measured; ≥38 if essential | 27 px decorative; ≥54 px essential | 450 · sentence · 0 em | surface / muted ink | Static or 6 f reveal |
Palette by shot (measured)
Colours measured on the frames, with their share of the frame; luma 0 = black, 1 = white. These are the reference's brand colours: map them onto {{BRAND_BG}} and {{BRAND_ACCENTS}} by role (background, surface, accent), don't reuse them as the format. Neighbouring shots with the same palette share a row.
| # | luma mean · p95 | colours (share of frame) | highlights (bright pixels) |
|---|
| 1 | 0.89 · 0.99 | #FCFBFC 75% · #ABB3CF 12% · #738F59 9% · #ABA6EF 4% · #DD454C 0% | #FFFFFF ≈6500 K 90% · #F7F5FF ≈6850 K 5% |
| 2 | 0.65 · 1.00 | #F6F6F5 39% · #5E7F40 21% · #8DAD5C 20% · #2A4D24 19% · #3C6ACA 1% | #FFFFFF ≈6500 K 100% |
| 3 | 0.95 · 0.99 | #FCF9FC 88% · #F5CAC7 8% · #EE4E3B 2% · #4A4343 1% · #8E7EF1 1% | #FFFFFF ≈6500 K 89% · #E8E4FA hue 298° ≈7470 K 6% · #F7F5FF ≈6860 K 6% |
Brightness curve (measured)
Mean luma per 1 s, one character each, grouped in tens; p95 = the bright highlights. Scale: ▁ = 0 (black) → █ = 1.0 (white); luma runs 0–1.
0s 10s 20s
mean ███▇▆▆▆▆▆█ ███▅▅██▇▇▇ █▅
p95 ██████████ ██████████ █▅
Curve facts: average 0.82 · darkest 0.42 at 21.2 s · brightest 1.00 at 10.0 s · sudden changes at 3.50 s (darker by 0.30), 8.75 s (brighter by 0.24), 13.25 s (darker by 0.53), 14.75 s (brighter by 0.49), 17.50 s (darker by 0.32), 19.75 s (brighter by 0.23), 21.25 s (darker by 0.58).
Layout boxes (inferred)
| Element | Shots | Box x · y · w · h (%) | Source · confidence | Notes |
|---|
| Opening moving region | 1 | 47 · 41 · 7 · 14 → 14 · 15 · 75 · 76 | Measured element region · high | Includes subsequent card travel |
| Status chip | 1 | 36 · 47 · 25 · 7 | Measured text box · high | Enlarge essential copy |
| Send control | 2 | 32 · 45 · 16 · 13 | Measured text box · high | Button visual can exceed text box |
| Record action | 3 | 40 · 49 · 21 · 6 | Measured text box · high | Keep within card |
| Share card moving region | 5 | 39 · 26 · 22 · 45 | Measured element region · high | Before the link handoff |
| Benefit line | 7 | 34 · 47 · 33 · 8 | Measured text box · high | Single centered line |
| End mark | 8 | 46 · 46 · 14 · 8 | Measured text box · high | Place text CTA beneath |
End card: solid {{BRAND_ACCENTS}} fill; {{LOGO}} in the measured box above; put {{CTA_URL}} as a separate readable line below it. The shot is 44 measured frames, and the mark becomes readable after the cut.
Material card (inferred)
:root { --brand-bg: {{BRAND_BG}}; --brand-accent: {{BRAND_ACCENTS}}; --surface: #fff; --ink: #171923; }
.stage { background: var(--brand-bg); perspective: 1400px; overflow: hidden; }
.ui-card { background: var(--surface); border: 1px solid rgba(20,20,35,.08); border-radius: 22px; box-shadow: 0 24px 64px rgba(20,20,45,.13); transform-style: preserve-3d; }
.halo { background: radial-gradient(circle, color-mix(in srgb,var(--brand-accent) 24%,transparent), transparent 65%); filter: blur(38px); opacity: .65; }
.blur-outside { filter: blur(7px); }
No 3D renderer is needed. The apparent depth comes from layered cards, CSS perspective, shadow, masked blur and a separate halo. For shot 2, preserve the measured sharp region 0 · 0 · 100 · 71% and blur only material outside it by about 7 px. The desk insert is supplied live footage: shoot one 4K, 60 fps, 35–50 mm equivalent desk clip at seated eye height, 10–15° downward, f/4–5.6, soft window key at 5600 K and neutral fill at roughly half strength. Record room tone; keep skin and wood natural, moderate contrast and saturation, no baked brand tint. Use the real {{PRODUCT}} screen on the laptop.