@@ -192,7 +192,11 @@ onUnmounted(() => {
192192 wash anchored at the top right, and an opaque hero sits exactly over it. The
193193 connector card below keeps its own white, because that is a card. -->
194194 <section class =" w-full relative" >
195- <div class =" relative z-10 w-full px-6 pt-12 md:pt-24 pb-12 sm:pb-16" >
195+ <!-- pb-0: the recording below is the picker's own result, so the space between
196+ them belongs to that section's pt rather than being split across a section
197+ boundary here. Two paddings meeting in the middle of one thread is what
198+ left 128px of empty gradient under the docs card. -->
199+ <div class =" relative z-10 w-full px-6 pt-12 md:pt-24 pb-0" >
196200 <div class =" sm:max-w-screen-lg mt-6 sm:mt-12 mx-auto" >
197201 <div class =" container m-auto text-left max-w-screen-lg" >
198202 <div class =" max-w-3xl mx-auto" >
@@ -230,6 +234,64 @@ onUnmounted(() => {
230234 </div >
231235 </section >
232236
237+ <!-- DEMO: the payoff of the picker above. Those three steps say how to connect
238+ an outside agent; this is what it looks like when you do, consent screen
239+ included - the part a reader does not take on faith. It also hands off to
240+ the governance section directly below, which is the same grant stated as a
241+ claim rather than shown.
242+ Autoplaying muted loop, the same treatment the install animation uses. The
243+ controls stay on for one reason: at 57 seconds this runs long enough that
244+ moving content needs a way to stop it, and the play/pause button is it.
245+ Browsers pause an offscreen muted autoplay video by themselves, so there is
246+ no observer here, and no preload hint either - autoplay settles that. The
247+ poster still earns its place as the first paint before playback starts.
248+ WebM only, and no MP4 fallback: full WebM support starts at Safari 16 and
249+ iOS 17.4, which leaves 1.1% of global users out, and an H.264 copy costs
250+ 1.9MB to reach them - more than the WebM itself, on a video that now
251+ autoplays for everyone. Those readers get the poster and a play button that
252+ does nothing, which is the trade. Kept as a <source> with a type rather than
253+ src on the video so a browser that cannot play WebM never fetches it.
254+ The recording has no audio track at all, so muted is both the autoplay
255+ precondition and the truth, and playsinline stops iOS taking it fullscreen.
256+ pb-0 for the same reason the hero has it: these three sections are all
257+ transparent, so a boundary between them is space and nothing else, and each
258+ one owning only its top padding keeps that space to a single 64px. Doubling
259+ up here put 128px above the governance card while the card sat 64px above
260+ the capabilities band, which reads as the card floating low in a gap rather
261+ than as a section change. Doubling is for boundaries that also change
262+ background, the way the capabilities band does. -->
263+ <section class =" ff-ai-demo w-full px-6 pt-12 sm:pt-16 pb-0" >
264+ <div class =" md:max-w-screen-lg m-auto" >
265+ <h2 class =" max-md:text-center" >Connect and build <span class =" text-indigo-600" >faster than ever</span ></h2 >
266+ <p class =" mt-3 text-gray-600 max-w-3xl" >
267+ Connect in seconds and start building. Use natural-language to leverage your company-sanctioned AI in a secure and governed way.
268+ </p >
269+ <!-- The frame is the wrapper, not the video, and it clips: Chrome builds its
270+ native control bar in shadow DOM and ignores the video's own
271+ border-radius, so a radius set directly on the video left the bar's
272+ square corners poking out past the rounded border. Same rounded /
273+ bordered / shadowed treatment the product page gives its hero shot.
274+ A plain div rather than a figure now the caption is gone - a figure with
275+ nothing to caption is just a wrapper. -->
276+ <div class =" mt-8 overflow-hidden rounded-lg border-2 border-indigo-100 shadow-2xl" >
277+ <video
278+ class =" block w-full"
279+ poster =" /images/ai/demo-external-agents-poster.jpg"
280+ width =" 1600"
281+ height =" 1056"
282+ autoplay
283+ loop
284+ muted
285+ playsinline
286+ controls
287+ aria-label =" Screen recording: Claude adds FlowFuse as a custom MCP connector, signs in, is granted full access to one team, and then provisions a Node-RED instance from the OEE blueprint."
288+ >
289+ <source src =" /images/ai/demo-external-agents.webm" type =" video/webm" >
290+ </video >
291+ </div >
292+ </div >
293+ </section >
294+
233295 <!-- GOVERNANCE: the control plane every AI action runs through. Path-neutral,
234296 which is what lets it sit above the picker rather than under Expert. -->
235297 <div class =" ff-ai-governance w-full px-6 py-12 sm:py-16" >
0 commit comments