diff --git a/apps/web/app/(marketing)/page.tsx b/apps/web/app/(marketing)/page.tsx
index 9b91165..a2c75b1 100644
--- a/apps/web/app/(marketing)/page.tsx
+++ b/apps/web/app/(marketing)/page.tsx
@@ -3,7 +3,6 @@ import { redirect } from 'next/navigation';
import { cookies } from 'next/headers';
import { Footer } from '@profullstack/footer/react';
import Script from 'next/script';
-import { AdUnit } from '../../components/ad-unit';
import { BrandLockup, BrandWordmark } from '../../components/brand';
export const dynamic = 'force-dynamic';
@@ -36,7 +35,6 @@ export default async function LandingPage() {
-
diff --git a/apps/web/app/globals.css b/apps/web/app/globals.css
index f7d551f..e85ad5f 100644
--- a/apps/web/app/globals.css
+++ b/apps/web/app/globals.css
@@ -69,13 +69,7 @@
}
.cp-ad[data-cp-filled] {
height: auto;
- margin: 32px auto;
-}
-.cp-ad[data-cp-filled][data-format='banner_728x90'] {
- min-height: 106px;
-}
-.cp-ad[data-cp-filled][data-format='banner_300x250'] {
- min-height: 266px;
+ margin: 8px auto;
}
.cp-ad[data-cp-filled][data-format='text_link'] {
min-height: 40px;
diff --git a/apps/web/components/ad-unit.tsx b/apps/web/components/ad-unit.tsx
index ab0aca0..4ade591 100644
--- a/apps/web/components/ad-unit.tsx
+++ b/apps/web/components/ad-unit.tsx
@@ -4,7 +4,8 @@ import { useEffect, useRef } from 'react';
import { usePathname } from 'next/navigation';
/**
- * One CrawlProof ad unit, under the hero of the public landing page.
+ * One low-profile CrawlProof ad unit (the text_link line). Not used on the
+ * homepage, which carries no ad.
* Manage the slot at https://crawlproof.com/ads/slots
*/
const AD_SLOT = '121bb0bc-5e2e-4056-beeb-3c5166283991';
@@ -12,9 +13,6 @@ const AD_SLOT = '121bb0bc-5e2e-4056-beeb-3c5166283991';
/** Account, auth and checkout pages carry no ad. */
const EXCLUDED_PREFIXES = ['/login', '/join', '/verify', '/reset', '/forgot'];
-/** 728x90 needs the full row; anything narrower gets the 300x250 rectangle. */
-const LEADERBOARD_QUERY = '(min-width: 768px)';
-
const SCAN_RETRY_MS = 200;
const SCAN_MAX_TRIES = 25;
@@ -43,11 +41,8 @@ function AdSlot() {
const el = ref.current;
if (!el) return;
// The server renders the element without data-slot, so ad.js's own
- // DOMContentLoaded pass skips it; the format is chosen here from the real
- // viewport and the unit fills exactly once.
- el.dataset.format = window.matchMedia(LEADERBOARD_QUERY).matches
- ? 'banner_728x90'
- : 'banner_300x250';
+ // DOMContentLoaded pass skips it; the unit fills exactly once.
+ el.dataset.format = 'text_link';
el.dataset.slot = AD_SLOT;
// ad.js scans once at DOMContentLoaded and may not have loaded yet, so