diff --git a/landing/components/sections/bento.tsx b/landing/components/sections/bento.tsx
index 97025b98..9aa5006a 100644
--- a/landing/components/sections/bento.tsx
+++ b/landing/components/sections/bento.tsx
@@ -5,6 +5,7 @@ import { Container } from "../ui/container";
import { Reveal } from "../ui/reveal";
import { Eyebrow } from "../ui/eyebrow";
import { SectionHeading } from "../ui/section-heading";
+import { ArtStage } from "../ui/art-stage";
import { featureSections, type FeatureSection } from "../../lib/landing-content";
// Explicit order + column spans so the cells pack into full 12-column rows.
@@ -39,17 +40,13 @@ function BentoCard({ feature, span }: { feature: FeatureSection; span: string })
-
diff --git a/landing/components/ui/art-stage.tsx b/landing/components/ui/art-stage.tsx
new file mode 100644
index 00000000..01d13093
--- /dev/null
+++ b/landing/components/ui/art-stage.tsx
@@ -0,0 +1,68 @@
+// Fractal-noise film grain (inline data URI, allowed by img-src 'self' data:).
+const GRAIN =
+ "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)'/%3E%3C/svg%3E\")";
+
+const AURORA_WASH =
+ "radial-gradient(60% 55% at 26% 16%, var(--aurora-mint) 0%, transparent 62%)," +
+ "radial-gradient(52% 52% at 84% 84%, var(--aurora-teal) 0%, transparent 60%)," +
+ "radial-gradient(46% 48% at 60% 50%, var(--aurora-lime) 0%, transparent 66%)";
+
+/** Ambient color wash derived from `ambientSrc`, given the src's own path. */
+export function ambientFor(src: string): string {
+ return src.replace("/images/", "/images/ambient/");
+}
+
+/**
+ * A product screenshot floating over an atmospheric wash painted from its own
+ * colours (a heavily blurred thumbnail), plus the aurora and a fine film grain.
+ */
+export function ArtStage({
+ src,
+ alt,
+ priority = false,
+ className = "",
+ stageClassName = "p-5 sm:p-8 md:p-10",
+ contentClassName = "w-full",
+}: {
+ src: string;
+ alt: string;
+ priority?: boolean;
+ className?: string;
+ stageClassName?: string;
+ contentClassName?: string;
+}) {
+ return (
+
+
})
+
+
+
+
+
+

+
+
+ );
+}
diff --git a/landing/components/ui/media-frame.tsx b/landing/components/ui/media-frame.tsx
deleted file mode 100644
index 51543a81..00000000
--- a/landing/components/ui/media-frame.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-/** Framed product screenshot panel: rounded, bordered, soft shadow on the page. */
-export function MediaFrame({
- src,
- alt,
- priority = false,
- className = "",
-}: {
- src: string;
- alt: string;
- priority?: boolean;
- className?: string;
-}) {
- return (
-
-

-
- );
-}
diff --git a/landing/public/images/ambient/connectors.webp b/landing/public/images/ambient/connectors.webp
new file mode 100644
index 00000000..3f93f820
Binary files /dev/null and b/landing/public/images/ambient/connectors.webp differ
diff --git a/landing/public/images/ambient/cost-controls.webp b/landing/public/images/ambient/cost-controls.webp
new file mode 100644
index 00000000..9b251d9b
Binary files /dev/null and b/landing/public/images/ambient/cost-controls.webp differ
diff --git a/landing/public/images/ambient/dashboard.webp b/landing/public/images/ambient/dashboard.webp
new file mode 100644
index 00000000..b23d57f4
Binary files /dev/null and b/landing/public/images/ambient/dashboard.webp differ
diff --git a/landing/public/images/ambient/messages.webp b/landing/public/images/ambient/messages.webp
new file mode 100644
index 00000000..0e2d4785
Binary files /dev/null and b/landing/public/images/ambient/messages.webp differ
diff --git a/landing/public/images/ambient/office.webp b/landing/public/images/ambient/office.webp
new file mode 100644
index 00000000..b9f6bd46
Binary files /dev/null and b/landing/public/images/ambient/office.webp differ
diff --git a/landing/public/images/ambient/org-chart.webp b/landing/public/images/ambient/org-chart.webp
new file mode 100644
index 00000000..5cd63c87
Binary files /dev/null and b/landing/public/images/ambient/org-chart.webp differ