app content value.
url is stored as a lazy accessor; layout is derived from the URL’s Open
Graph / link metadata (title → caption, og:site_name → image overlay,
description → subcaption, og:image → JPEG-transcoded image) using the same
machinery as richlink. A single metadata fetch is shared and memoized
across url() / layout(); fetch / parse failures resolve to a host-only
caption (no throw, no retry). Pass options.layout to supply an
already-decoded layout and skip the fetch entirely.