{
  "title": "File preview theme",
  "beforeRevision": "c5612599307c0bc44e21ed25c97e2a542e194b32",
  "afterRevision": "e0eee4cc154875c759d6f346495afce69118a79e",
  "builds": {
    "before": "dfd39a7c2f6aec0a",
    "after": "b5f49973c55d0d72"
  },
  "versions": {
    "before": {
      "pins": {
        "agentServer": "1.58.1",
        "agentCanvas": "1.33.0",
        "automation": "1.25.1"
      },
      "node": "v24.22.1",
      "npm": "11.12.1",
      "chromeBinary": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
      "browserUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.0.0 Safari/537.36",
      "automationVersionEvidence": "Explicit launch override 1.25.1 matches committed pin; health endpoint status has no independent version field."
    },
    "after": {
      "pins": {
        "agentServer": "1.58.1",
        "agentCanvas": "1.33.0",
        "automation": "1.25.1"
      },
      "node": "v24.22.1",
      "npm": "11.12.1",
      "chromeBinary": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
      "browserUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.0.0 Safari/537.36",
      "automationVersionEvidence": "Explicit launch override 1.25.1 matches committed pin; health endpoint status has no independent version field."
    }
  },
  "implementation": {
    "before": "Files Rich preview spells twelve existing custom-property bindings as arbitrary compiled class recipes.",
    "after": "Two named compiled utilities retain the same eleven prose bindings and inherited scroll-fade binding, including existing cascade precedence. Both versions already use compiled CSS.",
    "owners": [
      "src/components/features/files-tab/file-content-viewer.tsx",
      "src/tailwind.css"
    ],
    "compiledContract": "Independent actual app/library proof covers12bindings in32cascade scenarios, including host overrides, nested roots, prose-invert and more-specific links/alerts. Font sizes and API/state logic are unchanged."
  },
  "scope": {
    "before": {
      "production": "Real production Local Canvas, Agent Server1.58.1, automation1.25.1, --mars-web, installed Google Chrome in owned private profile. No route interception, DOM mutation, frontend mocks or source edits.",
      "profiles": "Empty state, Custom create helpers, save valid QA-only router with classifier free text and no provider connection, list/menu/Edit/Cancel. Add Models Moonshot keyless chooser; select all enables Add and clearing disables Add. No model validation, completion or bulk-profile creation.",
      "files": "Actual owned Markdown bytes served from real workspace via an idle offline conversation, zero messages and no model calls. Rich/Plain toggle, prose-invert in dark themes, semantic descendant colors, native horizontal table scrolling and inherited fade.",
      "phone": "390x844 actual settings forms and dedicated /panel route. Initial file-tree-open narrow preview excluded from publication in favor of follow-up native Hide file tree captures. No phone layout change claimed.",
      "media": "Original PNG/MP4 retained;25fps normal action timing, no speed or pixel-identity claim. Recorder trims still lead-in and adds final hold."
    },
    "after": {
      "production": "Real production Local Canvas, Agent Server1.58.1, automation1.25.1, --mars-web, installed Google Chrome in owned private profile. No route interception, DOM mutation, frontend mocks or source edits.",
      "files": "Actual owned Markdown bytes served from real workspace via an idle offline conversation, zero messages and no model calls. Rich/Plain toggle, prose-invert in dark themes, semantic descendant colors, native horizontal table scrolling and inherited fade.",
      "phone": "390x844 dedicated /panel route with native Hide file tree for a readable full-width preview. Supplemental exact-baseline run provides the three matching phone originals. No phone layout change claimed.",
      "media": "Original PNG/MP4 retained;25fps normal action timing, no speed or pixel-identity claim. Recorder trims still lead-in and adds final hold."
    },
    "mainFilm": "Genuine standalone Local UI, selected observed paths only; actual source crops follow full viewport context.",
    "supplementalBeforePhone": "Separate same-baseline run supplies three readable phone originals after native Hide file tree."
  },
  "comparisonSummary": "11 matched computed state sets, all equal within the documented measured contract; 2 unpaired states explicitly disclosed. No global pixel identity or performance claim.",
  "limits": [
    "Appearance-preserving refactor. Native captures compare the specified exact source revisions and named observed paths, without global pixel identity, exhaustive UI coverage or performance claims.",
    "Both Before and After styles are compiled CSS; no inline-style migration is claimed.",
    "Selected complete originals retain existing timing and bytes. The recorder caps still lead-in and holds its final frame; source clock/misses are preserved. Editorial still holds and actual crops are explicitly labelled, with full context before detail.",
    "Five built-in themes have representative stills, plus390×844 phone views; no claim of every state/theme/viewport combination.",
    "No model prompt, completion or agent turn was run. No real provider credential, paid resource, webhook delivery or automation dispatch was used.",
    "Library/host CSS contracts are compiled evidence; live capture uses standalone Local Canvas only.",
    "Files uses a genuine API-created idle conversation with zero messages. Ordinary backend filesystem reads, including the existing Bash adapter, serve owned Markdown bytes; this is distinct from an agent turn or model execution.",
    "Rich/Plain, desktop descendant styling, native wide-table overflow/fade and five themes are observed. Sanitized/absent Markdown tags such as semantic captions are compiled-contract coverage only.",
    "Before phone images come from a separate supplemental run of the exact same baseline commit and served build. The native Hide file tree control makes the preview readable on BOTH revisions; no phone layout fix is claimed.",
    "The two readable phone Rich/table states lack paired baseline computed measurements. Their matched authentic stills are visual smoke; do not infer a phone computed-style pass from the11 desktop state pairs.",
    "Workspace paths, conversation identifiers and ages differ across genuine runs and remain in authentic original captures."
  ],
  "captureProvenance": "file-preview-theme-capture-provenance.json",
  "captureProvenanceSha256": "3740d02afd6fb5019ff1582ae655ffe85fa4c48bde06e7283c0174fcd3f97f23",
  "evidenceDownload": "file-preview-theme-evidence.zip",
  "evidenceDownloadSha256": "9fabbc32ef4066a9aeb23bd8b57aa1b6b217140f180bb6d874f1101459e45ef4",
  "pullRequest": "https://github.com/OpenHands/OpenHands/pull/18934",
  "film": {
    "dimensions": [
      1440,
      1120
    ],
    "fps": 25,
    "durationSeconds": 38.4,
    "scenes": [
      {
        "phase": "before",
        "sourceRevision": "c5612599307c0bc44e21ed25c97e2a542e194b32",
        "capturePhase": "before",
        "captureRun": "before",
        "servedBuildFingerprint": "dfd39a7c2f6aec0a",
        "kind": "screenshot",
        "publicSourcePath": "file-preview-theme-evidence/before/neutral-desktop-rich.png",
        "label": "Before · Arbitrary prose recipe",
        "subtitle": "Files Rich preview · Full context",
        "caption": "Before: Actual Neutral1440×1000 Files preview of owned Markdown. Both revisions use compiled CSS; colors, fonts and layout are preserved. Authentic PNG held 2 seconds.",
        "view": "Files Rich preview · Full context",
        "cropDisclosure": "Full original viewport below separate editorial header.",
        "sourceSha256": "888292ff9fcd3bec23501b0972b303cda9eec853effe3414fe6253aa1f39c7ef",
        "sourceBytes": 136272,
        "sourceDurationSeconds": null,
        "sourceFps": null,
        "timelineSeconds": [
          0,
          2.0
        ],
        "presentationDurationSeconds": 2.0,
        "editorialSpeedChange": false,
        "sourceStartSeconds": null,
        "sourceSelectedRangeSeconds": null,
        "fullOriginalSelected": false,
        "fullOriginalTimelineSelected": false,
        "fullOriginalViewportSelected": true,
        "sourcePlaybackNote": "Authentic PNG held for the stated presentation duration. A still has no source time range; no recorded motion is implied."
      },
      {
        "phase": "before",
        "sourceRevision": "c5612599307c0bc44e21ed25c97e2a542e194b32",
        "capturePhase": "before",
        "captureRun": "before",
        "servedBuildFingerprint": "dfd39a7c2f6aec0a",
        "kind": "recording",
        "publicSourcePath": "file-preview-theme-evidence/before/native-rich-plain-overflow.mp4",
        "label": "Before · Arbitrary prose recipe",
        "subtitle": "Native Rich / Plain / scroll · Full context",
        "caption": "Before: Actual Rich→Plain→Rich toggles and horizontal wide-table scrolling, using genuine backend file bytes. No agent turn or model execution. Complete native recording at its existing25fps cadence, no editorial speed change.",
        "view": "Native Rich / Plain / scroll · Full context",
        "cropDisclosure": "Full original viewport below separate editorial header.",
        "sourceSha256": "f3ea607019e93256b9cdd9a3b58142832b4898620ac4c5b080acf8f98777251d",
        "sourceBytes": 158728,
        "sourceDurationSeconds": 7.96,
        "sourceFps": 25.0,
        "timelineSeconds": [
          2.0,
          9.96
        ],
        "presentationDurationSeconds": 7.96,
        "editorialSpeedChange": false,
        "sourceStartSeconds": 0,
        "sourceSelectedRangeSeconds": [
          0,
          7.96
        ],
        "fullOriginalSelected": true,
        "fullOriginalTimelineSelected": true,
        "fullOriginalViewportSelected": true,
        "sourcePlaybackNote": "Selected MP4 interval presented at its existing frame cadence. Recorder caps an initial static lead-in at 1 second and holds the final frame at least 1 second; action intervals retain capture timing. Presentation repeats frames only for output cadence; no motion interpolation."
      },
      {
        "phase": "before",
        "sourceRevision": "c5612599307c0bc44e21ed25c97e2a542e194b32",
        "capturePhase": "before",
        "captureRun": "before",
        "servedBuildFingerprint": "dfd39a7c2f6aec0a",
        "kind": "screenshot",
        "publicSourcePath": "file-preview-theme-evidence/before/neutral-desktop-rich.png",
        "label": "Before · Arbitrary prose recipe",
        "subtitle": "Detail · Same prose roles",
        "caption": "Before: Actual upper-preview heading, paragraph, quote, list markers and emphasis; no recreated or restyled UI. Authentic PNG held 2.4 seconds.",
        "view": "Detail · Same prose roles",
        "cropDisclosure": "Actual source crop x855/y150/585×440px, fitted below separate editorial header.",
        "crop": [
          855,
          150,
          585,
          440
        ],
        "sourceSha256": "888292ff9fcd3bec23501b0972b303cda9eec853effe3414fe6253aa1f39c7ef",
        "sourceBytes": 136272,
        "sourceDurationSeconds": null,
        "sourceFps": null,
        "timelineSeconds": [
          9.96,
          12.36
        ],
        "presentationDurationSeconds": 2.4,
        "editorialSpeedChange": false,
        "sourceStartSeconds": null,
        "sourceSelectedRangeSeconds": null,
        "fullOriginalSelected": false,
        "fullOriginalTimelineSelected": false,
        "fullOriginalViewportSelected": false,
        "sourcePlaybackNote": "Authentic PNG held for the stated presentation duration. A still has no source time range; no recorded motion is implied."
      },
      {
        "phase": "before",
        "sourceRevision": "c5612599307c0bc44e21ed25c97e2a542e194b32",
        "capturePhase": "before",
        "captureRun": "before",
        "servedBuildFingerprint": "dfd39a7c2f6aec0a",
        "kind": "screenshot",
        "publicSourcePath": "file-preview-theme-evidence/before/neutral-desktop-table-scrolled.png",
        "label": "Before · Arbitrary prose recipe",
        "subtitle": "Detail · Same overflow fade",
        "caption": "Before: Actual wide table scrolled sideways, with inherited surface fade and surrounding prose unchanged. Authentic PNG held 2.4 seconds.",
        "view": "Detail · Same overflow fade",
        "cropDisclosure": "Actual source crop x855/y575/585×350px, fitted below separate editorial header.",
        "crop": [
          855,
          575,
          585,
          350
        ],
        "sourceSha256": "44078253fb68d64cea8883c4740d81f887a34af55ea1e74be3e376ecf085df74",
        "sourceBytes": 128029,
        "sourceDurationSeconds": null,
        "sourceFps": null,
        "timelineSeconds": [
          12.36,
          14.76
        ],
        "presentationDurationSeconds": 2.4,
        "editorialSpeedChange": false,
        "sourceStartSeconds": null,
        "sourceSelectedRangeSeconds": null,
        "fullOriginalSelected": false,
        "fullOriginalTimelineSelected": false,
        "fullOriginalViewportSelected": false,
        "sourcePlaybackNote": "Authentic PNG held for the stated presentation duration. A still has no source time range; no recorded motion is implied."
      },
      {
        "phase": "before",
        "sourceRevision": "c5612599307c0bc44e21ed25c97e2a542e194b32",
        "capturePhase": "before",
        "captureRun": "before",
        "servedBuildFingerprint": "dfd39a7c2f6aec0a",
        "kind": "screenshot",
        "publicSourcePath": "file-preview-theme-evidence/before/light-desktop-rich.png",
        "label": "Before · Arbitrary prose recipe",
        "subtitle": "Light+ · Full context",
        "caption": "Before: Same genuine Rich preview in Light+. Other three built-in theme samples are retained in the source packet. Authentic PNG held 2 seconds.",
        "view": "Light+ · Full context",
        "cropDisclosure": "Full original viewport below separate editorial header.",
        "sourceSha256": "e0f8eab6d7a220f561749cddd5a5bed90b3e27c2bcd7a79554ec40229048f43c",
        "sourceBytes": 137579,
        "sourceDurationSeconds": null,
        "sourceFps": null,
        "timelineSeconds": [
          14.76,
          16.76
        ],
        "presentationDurationSeconds": 2.0,
        "editorialSpeedChange": false,
        "sourceStartSeconds": null,
        "sourceSelectedRangeSeconds": null,
        "fullOriginalSelected": false,
        "fullOriginalTimelineSelected": false,
        "fullOriginalViewportSelected": true,
        "sourcePlaybackNote": "Authentic PNG held for the stated presentation duration. A still has no source time range; no recorded motion is implied."
      },
      {
        "phase": "before",
        "sourceRevision": "c5612599307c0bc44e21ed25c97e2a542e194b32",
        "capturePhase": "before-phone",
        "captureRun": "before-phone",
        "servedBuildFingerprint": "dfd39a7c2f6aec0a",
        "kind": "screenshot",
        "publicSourcePath": "file-preview-theme-evidence/before/neutral-phone-rich-tree-hidden.png",
        "label": "Before · Arbitrary prose recipe",
        "subtitle": "Phone · Native hidden tree",
        "caption": "Before: A separate supplemental run of the exact baseline and build used native Hide file tree before this capture. Actual390×844 full-width document view; no phone layout fix or paired phone-computed-style pass is claimed. Authentic PNG held 2.4 seconds.",
        "view": "Phone · Native hidden tree",
        "cropDisclosure": "Full original viewport below separate editorial header.",
        "sourceSha256": "339e1a6b885798e06c0931329df85d260f962cb023216a0296f4750eafe04785",
        "sourceBytes": 55113,
        "sourceDurationSeconds": null,
        "sourceFps": null,
        "timelineSeconds": [
          16.76,
          19.16
        ],
        "presentationDurationSeconds": 2.4,
        "editorialSpeedChange": false,
        "sourceStartSeconds": null,
        "sourceSelectedRangeSeconds": null,
        "fullOriginalSelected": false,
        "fullOriginalTimelineSelected": false,
        "fullOriginalViewportSelected": true,
        "sourcePlaybackNote": "Authentic PNG held for the stated presentation duration. A still has no source time range; no recorded motion is implied."
      },
      {
        "phase": "after",
        "sourceRevision": "e0eee4cc154875c759d6f346495afce69118a79e",
        "capturePhase": "files-after",
        "captureRun": "files-after",
        "servedBuildFingerprint": "b5f49973c55d0d72",
        "kind": "screenshot",
        "publicSourcePath": "file-preview-theme-evidence/after/neutral-desktop-rich.png",
        "label": "After · Named preview recipe",
        "subtitle": "Files Rich preview · Full context",
        "caption": "After: Actual Neutral1440×1000 Files preview of owned Markdown. Both revisions use compiled CSS; colors, fonts and layout are preserved. Authentic PNG held 2 seconds.",
        "view": "Files Rich preview · Full context",
        "cropDisclosure": "Full original viewport below separate editorial header.",
        "sourceSha256": "bca4d31f85053e7497ead9da7c3f792a092581e0b4642049844f0b6431387c44",
        "sourceBytes": 136104,
        "sourceDurationSeconds": null,
        "sourceFps": null,
        "timelineSeconds": [
          19.16,
          21.16
        ],
        "presentationDurationSeconds": 2.0,
        "editorialSpeedChange": false,
        "sourceStartSeconds": null,
        "sourceSelectedRangeSeconds": null,
        "fullOriginalSelected": false,
        "fullOriginalTimelineSelected": false,
        "fullOriginalViewportSelected": true,
        "sourcePlaybackNote": "Authentic PNG held for the stated presentation duration. A still has no source time range; no recorded motion is implied."
      },
      {
        "phase": "after",
        "sourceRevision": "e0eee4cc154875c759d6f346495afce69118a79e",
        "capturePhase": "files-after",
        "captureRun": "files-after",
        "servedBuildFingerprint": "b5f49973c55d0d72",
        "kind": "recording",
        "publicSourcePath": "file-preview-theme-evidence/after/native-rich-plain-overflow.mp4",
        "label": "After · Named preview recipe",
        "subtitle": "Native Rich / Plain / scroll · Full context",
        "caption": "After: Actual Rich→Plain→Rich toggles and horizontal wide-table scrolling, using genuine backend file bytes. No agent turn or model execution. Complete native recording at its existing25fps cadence, no editorial speed change.",
        "view": "Native Rich / Plain / scroll · Full context",
        "cropDisclosure": "Full original viewport below separate editorial header.",
        "sourceSha256": "a6a76ead2907d4844eacef3398131eb6675cdd017cb5a5f2225ca53c7c484caf",
        "sourceBytes": 159010,
        "sourceDurationSeconds": 8.04,
        "sourceFps": 25.0,
        "timelineSeconds": [
          21.16,
          29.2
        ],
        "presentationDurationSeconds": 8.04,
        "editorialSpeedChange": false,
        "sourceStartSeconds": 0,
        "sourceSelectedRangeSeconds": [
          0,
          8.04
        ],
        "fullOriginalSelected": true,
        "fullOriginalTimelineSelected": true,
        "fullOriginalViewportSelected": true,
        "sourcePlaybackNote": "Selected MP4 interval presented at its existing frame cadence. Recorder caps an initial static lead-in at 1 second and holds the final frame at least 1 second; action intervals retain capture timing. Presentation repeats frames only for output cadence; no motion interpolation."
      },
      {
        "phase": "after",
        "sourceRevision": "e0eee4cc154875c759d6f346495afce69118a79e",
        "capturePhase": "files-after",
        "captureRun": "files-after",
        "servedBuildFingerprint": "b5f49973c55d0d72",
        "kind": "screenshot",
        "publicSourcePath": "file-preview-theme-evidence/after/neutral-desktop-rich.png",
        "label": "After · Named preview recipe",
        "subtitle": "Detail · Same prose roles",
        "caption": "After: Actual upper-preview heading, paragraph, quote, list markers and emphasis; no recreated or restyled UI. Authentic PNG held 2.4 seconds.",
        "view": "Detail · Same prose roles",
        "cropDisclosure": "Actual source crop x855/y150/585×440px, fitted below separate editorial header.",
        "crop": [
          855,
          150,
          585,
          440
        ],
        "sourceSha256": "bca4d31f85053e7497ead9da7c3f792a092581e0b4642049844f0b6431387c44",
        "sourceBytes": 136104,
        "sourceDurationSeconds": null,
        "sourceFps": null,
        "timelineSeconds": [
          29.2,
          31.6
        ],
        "presentationDurationSeconds": 2.4,
        "editorialSpeedChange": false,
        "sourceStartSeconds": null,
        "sourceSelectedRangeSeconds": null,
        "fullOriginalSelected": false,
        "fullOriginalTimelineSelected": false,
        "fullOriginalViewportSelected": false,
        "sourcePlaybackNote": "Authentic PNG held for the stated presentation duration. A still has no source time range; no recorded motion is implied."
      },
      {
        "phase": "after",
        "sourceRevision": "e0eee4cc154875c759d6f346495afce69118a79e",
        "capturePhase": "files-after",
        "captureRun": "files-after",
        "servedBuildFingerprint": "b5f49973c55d0d72",
        "kind": "screenshot",
        "publicSourcePath": "file-preview-theme-evidence/after/neutral-desktop-table-scrolled.png",
        "label": "After · Named preview recipe",
        "subtitle": "Detail · Same overflow fade",
        "caption": "After: Actual wide table scrolled sideways, with inherited surface fade and surrounding prose unchanged. Authentic PNG held 2.4 seconds.",
        "view": "Detail · Same overflow fade",
        "cropDisclosure": "Actual source crop x855/y575/585×350px, fitted below separate editorial header.",
        "crop": [
          855,
          575,
          585,
          350
        ],
        "sourceSha256": "f853b665a79bdf9cc5a4fcd256d8dba6fb791f1c418a6b5d63e265cbd955d305",
        "sourceBytes": 128104,
        "sourceDurationSeconds": null,
        "sourceFps": null,
        "timelineSeconds": [
          31.6,
          34.0
        ],
        "presentationDurationSeconds": 2.4,
        "editorialSpeedChange": false,
        "sourceStartSeconds": null,
        "sourceSelectedRangeSeconds": null,
        "fullOriginalSelected": false,
        "fullOriginalTimelineSelected": false,
        "fullOriginalViewportSelected": false,
        "sourcePlaybackNote": "Authentic PNG held for the stated presentation duration. A still has no source time range; no recorded motion is implied."
      },
      {
        "phase": "after",
        "sourceRevision": "e0eee4cc154875c759d6f346495afce69118a79e",
        "capturePhase": "files-after",
        "captureRun": "files-after",
        "servedBuildFingerprint": "b5f49973c55d0d72",
        "kind": "screenshot",
        "publicSourcePath": "file-preview-theme-evidence/after/light-desktop-rich.png",
        "label": "After · Named preview recipe",
        "subtitle": "Light+ · Full context",
        "caption": "After: Same genuine Rich preview in Light+. Other three built-in theme samples are retained in the source packet. Authentic PNG held 2 seconds.",
        "view": "Light+ · Full context",
        "cropDisclosure": "Full original viewport below separate editorial header.",
        "sourceSha256": "33a86c23aef374ce050df5265b8099dbae12b67b6a60ae77dd41be1c1a91f520",
        "sourceBytes": 137789,
        "sourceDurationSeconds": null,
        "sourceFps": null,
        "timelineSeconds": [
          34.0,
          36.0
        ],
        "presentationDurationSeconds": 2.0,
        "editorialSpeedChange": false,
        "sourceStartSeconds": null,
        "sourceSelectedRangeSeconds": null,
        "fullOriginalSelected": false,
        "fullOriginalTimelineSelected": false,
        "fullOriginalViewportSelected": true,
        "sourcePlaybackNote": "Authentic PNG held for the stated presentation duration. A still has no source time range; no recorded motion is implied."
      },
      {
        "phase": "after",
        "sourceRevision": "e0eee4cc154875c759d6f346495afce69118a79e",
        "capturePhase": "files-after",
        "captureRun": "files-after",
        "servedBuildFingerprint": "b5f49973c55d0d72",
        "kind": "screenshot",
        "publicSourcePath": "file-preview-theme-evidence/after/neutral-phone-rich-tree-hidden.png",
        "label": "After · Named preview recipe",
        "subtitle": "Phone · Native hidden tree",
        "caption": "After: The native Hide file tree control was used before this capture. Actual390×844 full-width document view; no phone layout fix or paired phone-computed-style pass is claimed. Authentic PNG held 2.4 seconds.",
        "view": "Phone · Native hidden tree",
        "cropDisclosure": "Full original viewport below separate editorial header.",
        "sourceSha256": "f7cd0fe2e46002a5dd0468512865b1835a11f4bc9625647b2209076ed658249e",
        "sourceBytes": 55044,
        "sourceDurationSeconds": null,
        "sourceFps": null,
        "timelineSeconds": [
          36.0,
          38.4
        ],
        "presentationDurationSeconds": 2.4,
        "editorialSpeedChange": false,
        "sourceStartSeconds": null,
        "sourceSelectedRangeSeconds": null,
        "fullOriginalSelected": false,
        "fullOriginalTimelineSelected": false,
        "fullOriginalViewportSelected": true,
        "sourcePlaybackNote": "Authentic PNG held for the stated presentation duration. A still has no source time range; no recorded motion is implied."
      }
    ],
    "ambience": {
      "origin": "Original synthesized ambient pad; no external samples or provider.",
      "frequenciesHz": [
        174.61,
        220,
        261.63
      ],
      "amplitude": 0.004,
      "normalizationGain": 1.25032,
      "fadeInSeconds": 1.5,
      "fadeOutSeconds": 2,
      "meanDbfs": -52.5,
      "peakDbfs": -42.5,
      "applicationAudio": false
    },
    "encodingNote": "Each scene is independently decoded, then concatenated in one continuous H264 encode with 2-second keyframes; no stream-copy video concatenation.",
    "recipeSha256": "188b83d13a39094d3b8ebe34e7ce0cdd2298129308b2ad45ac5a03f489a230df"
  },
  "preview": {
    "file": "file-preview-theme-poster.jpg",
    "dimensions": [
      1440,
      1120
    ],
    "type": "poster",
    "audio": false,
    "limitation": "Still poster. Play/download the MP4 for native Rich/Plain and table scrolling. Both revisions use compiled CSS; the appearance is preserved."
  },
  "files": {
    "file-preview-theme-poster.jpg": {
      "sha256": "2ebea940c95ddb374197770801dc9bb93647b3b8a216f62e84f34f860bdad6fa",
      "bytes": 141441
    },
    "file-preview-theme-capture-provenance.json": {
      "sha256": "3740d02afd6fb5019ff1582ae655ffe85fa4c48bde06e7283c0174fcd3f97f23",
      "bytes": 47659
    },
    "file-preview-theme-comparison.json": {
      "sha256": "b6f4ea728d6002ba288be5452f295530f4e690944734fdbba9f8fc7b5023c90a",
      "bytes": 1443219
    },
    "file-preview-theme-captions.vtt": {
      "sha256": "acb4ea01f828b7204ea9c7ebf66ad4b28970529697cdbba5ebe16e7fcfb23a56",
      "bytes": 2524
    },
    "file-preview-theme-before-after.mp4": {
      "sha256": "a431e990bf5c7946adfb0e9760696991f67b6e20c354df617c8cb2a8eda971d1",
      "bytes": 2878110
    },
    "file-preview-theme-evidence.zip": {
      "sha256": "9fabbc32ef4066a9aeb23bd8b57aa1b6b217140f180bb6d874f1101459e45ef4",
      "bytes": 4313348
    }
  }
}
