a1fea53454
The first inline frame was a full-width bordered box at a fixed height: webpage-in-a-rectangle, not a widget. Now the frame disappears into the message flow: - Content-driven size. The injected measurer reports height (live) and intrinsic width (adopted once, so %-width children can't feedback-loop the frame toward zero). A sparkline shrink-wraps and sits flush left like an inline image; a full-bleed page measures the whole viewport and stays column-wide. The height attribute is now only a starting value. - Theme bridge. A style prelude injects first with the app's resolved theme tokens under stable names (--foreground, --muted-foreground, --accent, --border, --card), the app font, zero body margin/padding, and a transparent background — reference HTML written against those vars renders native in any theme. Page styles override the prelude, so a page that brings its own design keeps it. - No chrome. Border, rounded box, and the rail-opener card under the frame are gone; the fallback paths (non-HTML, remote gateway, unreadable file) keep the classic card. The wheel gate went with the border — frames size to content, so there is nothing to scroll inside, and widgets are fully interactive. - The desktop platform hint now teaches the default: an inline widget is transparent, token-colored, flush left, no page chrome — only a standalone page brings its own background. "Make me an inline sparkline" gets native styling without the user spelling it out.