diff --git a/src/app/favicon.ico b/src/app/favicon.ico
new file mode 100644
index 0000000..d913874
Binary files /dev/null and b/src/app/favicon.ico differ
diff --git a/src/app/globals.css b/src/app/globals.css
index d85a78f..b0f48eb 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -2939,3 +2939,55 @@ html[lang="ar"] .btn,
html[lang="ar"] .nav a {
font-size: 13px;
}
+
+/* booking band between sections */
+.cta-band {
+ position: relative;
+ padding-block: clamp(36px, 5vw, 56px);
+ border-block: 1px solid var(--grafite);
+ background:
+ radial-gradient(ellipse at 85% 50%, rgba(var(--ink-rgb), 0.05), transparent 60%),
+ var(--nero);
+}
+
+.cta-band-inner {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 32px;
+}
+
+.cta-band-copy {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ min-width: 0;
+}
+
+.cta-band-title {
+ margin: 0;
+ font-size: clamp(20px, 2.2vw, 30px);
+ font-weight: 300;
+ letter-spacing: -0.02em;
+ line-height: 1.2;
+ color: var(--bianco);
+ text-wrap: balance;
+}
+
+.cta-band-body {
+ margin: 0;
+ max-width: 60ch;
+ font-size: 15px;
+ color: var(--argento);
+}
+
+.cta-band .btn {
+ flex: none;
+}
+
+@media (max-width: 760px) {
+ .cta-band-inner {
+ flex-direction: column;
+ align-items: flex-start;
+ }
+}
diff --git a/src/components/content/content-page.tsx b/src/components/content/content-page.tsx
index 241cea9..d7c1b27 100644
--- a/src/components/content/content-page.tsx
+++ b/src/components/content/content-page.tsx
@@ -1,9 +1,10 @@
-import type { CSSProperties, ReactNode } from "react";
+import { Fragment, type CSSProperties, type ReactNode } from "react";
import Link from "next/link";
import GlobeCanvas from "@/components/globe-canvas";
import StatCounter from "@/components/stat-counter";
import RevealObserver from "@/components/reveal-observer";
import ContactForm from "./contact-form";
+import CtaBand from "@/components/cta-band";
import { localize } from "@/i18n/config";
import { getUI } from "@/i18n/server";
import type { UI } from "@/i18n/ui";
@@ -537,9 +538,12 @@ export default async function ContentPage({ page, trail }: { page: Page; trail:
{body.map((section, i) => {
const Variant = variants[section.kind] ?? TextSection;
+ // A booking band after the 2nd section and every 3rd after that, unless the section
+ // already ends in its own call to action or holds the form.
+ const band = i % 3 === 1 && i < body.length - 1 && !section.form && section.ctas.length === 0;
return (
+